📅 3 个月每日学习日历表(2025-09-23 开始)
🗓️ 第 1 周:编译流程与 ELF 基础
- 目标:理解编译 4 阶段、符号解析、ELF 文件结构。
| 天 | 任务 |
|---|---|
| 周二 (Day 1) | 编译四阶段(预处理/编译/汇编/链接),用 gcc -E/-S/-c/-o 测试 |
| 周三 (Day 2) | 写一个简单 C 程序,查看预处理结果与汇编代码 |
| 周四 (Day 3) | 学习静态库/动态库概念,.a vs .so |
| 周五 (Day 4) | ELF 文件结构:readelf/objdump 分析 |
| 周六 (Day 5) | 多文件编译 + 链接,观察符号表与重定位 |
| 周日 (Day 6) | 项目实战:写一个共享库 + 主程序调用 |
| 周一 (Day 7) | 总结本周:整理 源码 → ELF → 链接 → 运行 笔记 |
🗓️ 第 2 周:CMake 与交叉编译入门
- 目标:掌握 CMake 基础和跨平台构建。
| 天 | 任务 |
|---|---|
| 周二 (Day 8) | CMakeLists 基本语法,add_executable / target_link_libraries |
| 周三 (Day 9) | 写一个简单 CMake 项目(lib + main) |
| 周四 (Day 10) | 探索 build / install 目录,CMake 配置优化 |
| 周五 (Day 11) | Android NDK 构建流程,交叉编译 hello world |
| 周六 (Day 12) | 写一个 JNI demo,用 C++ 逻辑编译到 Android |
| 周日 (Day 13) | iOS 工程结构,测试 CMake + Xcode 集成 |
| 周一 (Day 14) | 总结 CMake 跨平台 + 笔记绘制流程图 |
🗓️ 第 3 周:内存管理与虚拟地址
- 目标:理解程序内存布局、虚拟内存机制。
| 天 | 任务 |
|---|---|
| 周二 (Day 15) | 程序内存分布:text/data/bss/heap/stack,写代码打印地址 |
| 周三 (Day 16) | 用户空间 / 内核空间划分 |
| 周四 (Day 17) | 多级页表与地址映射流程 |
| 周五 (Day 18) | TLB 机制,页表缓存实验 |
| 周六 (Day 19) | malloc/new 原理,brk/sbrk vs mmap |
| 周日 (Day 20) | 写 C++ demo:mmap 文件映射 |
| 周一 (Day 21) | 总结:虚拟地址 → 物理内存流程图 |
🗓️ 第 4 周:系统调用与内核接口
- 目标:理解用户态/内核态交互、部署相关系统调用。
| 天 | 任务 |
|---|---|
| 周二 (Day 22) | 系统调用原理,用户态 ↔ 内核态切换 |
| 周三 (Day 23) | 文件 I/O 系统调用 open/read/write/close |
| 周四 (Day 24) | strace 跟踪部署服务系统调用 |
| 周五 (Day 25) | 线程中的系统调用(锁、sleep、wait) |
| 周六 (Day 26) | mprotect/msync/mlock 实验 |
| 周日 (Day 27) | 写一个 mmap + 锁的服务 demo |
| 周一 (Day 28) | 总结系统调用图谱 |
🗓️ 第 5 周:多线程编程基础
- 目标:掌握线程创建与同步机制。
| 天 | 任务 |
|---|---|
| 周二 (Day 29) | std::thread 创建与生命周期 |
| 周三 (Day 30) | join vs detach 实验 |
| 周四 (Day 31) | mutex / lock_guard 用法 |
| 周五 (Day 32) | 条件变量 condition_variable |
| 周六 (Day 33) | 写线程安全任务队列 |
| 周日 (Day 34) | 线程池雏形:任务提交/执行 |
| 周一 (Day 35) | 总结并画线程生命周期图 |
🗓️ 第 6 周:线程池与并发调度
- 目标:完成线程池实现,应用到服务模拟。
| 天 | 任务 |
|---|---|
| 周二 (Day 36) | 完整线程池实现(启动/提交/关闭) |
| 周三 (Day 37) | 增加任务优先级功能 |
| 周四 (Day 38) | 增加停止/销毁机制 |
| 周五 (Day 39) | 线程池运行推理任务模拟 |
| 周六 (Day 40) | 压测线程池,观察性能 |
| 周日 (Day 41) | 死锁实验 + 调试 |
| 周一 (Day 42) | 总结:线程池与调度笔记 |
🗓️ 第 7 周:并发控制与异常处理
- 目标:掌握无锁编程与异常安全。
| 天 | 任务 |
|---|---|
| 周二 (Day 43) | atomic 原子计数器 |
| 周三 (Day 44) | 自旋锁 vs mutex 实验 |
| 周四 (Day 45) | gdb/valgrind 检测并发错误 |
| 周五 (Day 46) | RAII + try-catch 异常安全 |
| 周六 (Day 47) | 资源泄漏调试实验 |
| 周日 (Day 48) | 并发部署服务模拟 |
| 周一 (Day 49) | 总结并发问题分类笔记 |
🗓️ 第 8 周:CPU 底层与指令集
- 目标:理解 CPU 架构、指令集、编译优化。
| 天 | 任务 |
|---|---|
| 周二 (Day 50) | CPU 执行流水线、缓存层次 |
| 周三 (Day 51) | RISC vs CISC 架构差异 |
| 周四 (Day 52) | x86 vs ARM 基本指令 |
| 周五 (Day 53) | SIMD 指令 SSE/AVX/NEON 概览 |
| 周六 (Day 54) | gcc/clang 生成汇编,分析优化 |
| 周日 (Day 55) | 编写 SIMD demo |
| 周一 (Day 56) | 总结 CPU/指令集笔记 |
🗓️ 第 9 周:CUDA 编程入门
- 目标:理解 GPU 结构与 CUDA 基本 kernel 编程。
| 天 | 任务 |
|---|---|
| 周二 (Day 57) | GPU 硬件结构:SM/Warp/寄存器 |
| 周三 (Day 58) | CUDA grid/block/thread 概念 |
| 周四 (Day 59) | CUDA 内存模型(global/shared/local) |
| 周五 (Day 60) | 写第一个 CUDA kernel(向量加法) |
| 周六 (Day 61) | CUDA memcpy 与带宽测试 |
| 周日 (Day 62) | CUDA 同步/流机制 |
| 周一 (Day 63) | 总结 CUDA 基础笔记 |
🗓️ 第 10 周:CUDA 优化与对比
- 目标:理解 GPU/CPU 异同,做性能对比。
| 天 | 任务 |
|---|---|
| 周二 (Day 64) | CUDA kernel 配置与优化 |
| 周三 (Day 65) | Warp divergence 实验 |
| 周四 (Day 66) | shared memory 加速矩阵乘 |
| 周五 (Day 67) | CUDA + CPU 对比实验 |
| 周六 (Day 68) | GPU/CPU 内存带宽测试 |
| 周日 (Day 69) | 写一个 mini 推理 demo(CPU vs GPU) |
| 周一 (Day 70) | 总结 CUDA vs CPU 对比笔记 |
🗓️ 第 11 周:交叉编译与平台差异
- 目标:掌握不同架构编译与平台部署。
| 天 | 任务 |
|---|---|
| 周二 (Day 71) | Android NDK 工程构建 |
| 周三 (Day 72) | iOS CMake toolchain 文件 |
| 周四 (Day 73) | x86 vs ARM 汇编差异 |
| 周五 (Day 74) | 交叉编译一个 C++ demo |
| 周六 (Day 75) | 测试不同平台运行结果 |
| 周日 (Day 76) | 总结交叉编译流程笔记 |
| 周一 (Day 77) | 复盘:跨平台部署图谱 |
🗓️ 第 12 周:复盘与综合实践
- 目标:整合三个月内容,做完整 demo。
| 天 | 任务 |
|---|---|
| 周二 (Day 78) | 使用 perf/gprof/nvprof 做性能分析 |
| 周三 (Day 79) | 构建自动测试脚本 |
| 周四 (Day 80) | golden output 对比验证 |
| 周五 (Day 81) | 压测并发输入 |
| 周六 (Day 82) | 打包工程(服务 + SDK + 测试) |
| 周日 (Day 83) | 输出三个月学习总结文档 |
| 周一 (Day 84) | 整理知识图谱,规划下一阶段学习目标 |