| 書籍 | 核心價值 | 重點章節 | 配套實踐 |
|---|---|---|---|
| 《C語言解惑》 (C Puzzles) | 通過反直覺代碼片段暴露誤區,深度理解標準語義 | 指針算術、序列點、整數提升、未定義行為 | 每題必在編譯器驗證,對比不同編譯器行為 |
| 《C陷阱與缺陷》 (C Traps and Pitfalls) | 系統梳理語言缺陷、易錯點、最佳實踐,建立防禦性編程思維 | 數組/指針混淆、宏陷阱、鏈接問題、浮點數比較 | 建立個人「避坑清單」,Code Review 時檢查 |
| 《編程語言結構題集》 | 經典算法/數據結構 C 實現,鍛煉代碼組織與邏輯表達能力 | 遞歸/動態規劃、圖算法、字符串匹配、編譯器前端 | 重寫每個算法 3 遍:遞歸→迭代→優化版 |
C 語言工程化能力樹
├── 內存模型精通
│ ├── 棧/堆/數據段/代碼段佈局
│ ├── 結構體對齊/填充/位域
│ ├── 動態分配策略(malloc/free/arena/pool)
│ └── 內存洩漏/越界/釋放後使用檢測
├── 編譯鏈接深度
│ ├── 預處理/編譯/彙編/鏈接四階段
│ ├── 符號表/重定位/動態鏈接/加載
│ ├── 靜態庫/動態庫製作與版本管理
│ └── 編譯器優化/O2/O3/LTO/向量化
├── 系統編程接口
│ ├── 文件 I/O (open/read/write/mmap)
│ ├── 進程控制 (fork/exec/wait/pipe)
│ ├── 線程同步 (mutex/cond/atomic/lock-free)
│ ├── 網絡編程 (socket/epoll/IO_uring)
│ └── 信號處理/定時器/異步 I/O
├── 工程化工具鏈
│ ├── CMake/Make/Ninja 構建系統
│ ├── Git 工作流/代碼審查/CI/CD
│ ├── 靜態分析/動態分析/模糊測試
│ ├── 調試器/GDB/核心轉儲分析
│ └── 性能分析/perf/Valgrind/火焰圖
└── 領域專精方向
├── 嵌入式/裸機/RTOS/驅動
├── Linux 內核/文件系統/調度器
├── 高性能網絡/數據庫/存儲引擎
├── 編譯器/解釋器/語言運行時
└── 密碼學/區塊鏈/安全審計
| 層級 | 項目 | 核心技術點 | 代碼規模 | 驗收標準 |
|---|---|---|---|---|
| L1 | 學生管理系統 v2 | 模塊化、鏈表、文件持久化、Makefile | ~1000 行 | Valgrind 乾淨、多文件編譯、Git 歷史清晰 |
| L2 | 簡易 Shell (minishell) | 詞法分析、管道、重定向、信號、作業控制 | ~2000 行 | 支持 pipeline、後台任務、Tab 補全 |
| L3 | 內存分配器 (malloc 實現) | 空閒鏈表、分塊/合併、線程安全、統計 | ~1500 行 | 通過 glibc malloc 測試套件、性能基準 |
| L4 | HTTP/1.1 服務器 | epoll、狀態機解析、靜態文件、CGI、Keep-Alive | ~3000 行 | wrk 基準測試、並發 10k+、零拷貝優化 |
| L5 | 鍵值存儲引擎 (LSM Tree) | WAL、MemTable、SSTable、Compaction、Bloom Filter | ~5000 行 | YCSB 基準、崩潰恢復、範圍查詢 |