程序員基礎技術

基礎技術分爲兩部分:編程和系統算法

編程部分

  • C語言:接近底層,內存管理更直接,掌握程序的運行狀況。《C程序設計語言(第2版)》,學習 C語言精細控制底層資源,如內存管理、文件操做、網絡通訊
  • 彙編語言:能夠深刻了解計算機怎麼運行,針對lock free之類高併發,能夠更好的理解和思考
  • 編程範式:有助於培養抽象思惟,提升編程效率,提升程序的結構合理性、可讀性、可維護性,下降冗餘,提升運行效率。面向對象編程(C++、JAVA)、泛型編程(C++、GO、C#)、函數式編程(JavaScript、Python、Lisp、Haskell、Erlang)等
  • 算法和數據結構:編程中最重要的東西,提升程序的合理性和執行效率。不只是爲了寫出運轉更爲高效的代碼,更是爲了能寫出覆蓋更多場景的正確代碼數據庫

    系統部分

  • 計算機系統原理:價值在於,除了可以瞭解計算機的原理以外,還能觸類旁通的反推出高緯度的分佈式架構和高併發高可用的架構設計。《深刻理解計算機系統》(Randal E.Bryant)
    • CPU的體系結構(指令集【CISC/RISC】、分支預測、緩存結構、總線、DMA、中斷、陷阱、多任務、虛擬內存、虛擬化等)
    • 內存的原理與性能特色(SRAM、DRAM、DDR-SDRAM等)
    • 磁盤的原理(機械硬盤【盤面、磁頭臂、磁頭、啓停區、尋道等】、固態硬盤【頁映射、塊的合併與回收算法、TRIM指令等】)
    • GPU的原理等
  • 操做系統原理和基礎:理解程序是怎樣被管理的,提供了怎樣的支持與接口,性能特性如何,進程間怎樣通訊。《UNIX環境高級編程》《UNIX網絡編程》《Windows核心編程》
    • 進程
    • 進程管理
    • 線程
    • 線程調度
    • 多核的緩存一致性
    • 信號量
    • 物理內存管理
    • 虛擬內存管理
    • 內存分配
    • 文件系統
    • 磁盤管理等
  • 網絡基礎:學習網絡層次結構(ISO/OIS模型、TCP/IP協議棧)。《TCP/IP詳解》
  • 數據庫原理:
    • SQL(基於B+數,強一致性)
    • NoSQL(較弱的一致性,較高的存取效率,基於哈希表或其餘技術)
  • 分佈式技術架構:
    • 負載均衡
    • DNS解析
    • 多子域名
    • 無狀態應用層
    • 緩存層
    • 數據庫分片
    • 容錯和恢復機制
    • Paxos
    • Map/Reduce操做
    • 分佈式SQL數據庫一致性

信息來源

常見的信息源有編程

  • Google等搜索引擎
  • Stack Overflow、Quora等社區
  • 圖書
  • API文檔
  • 論文和博客
相關文章
相關標籤/搜索