一个学习计划

81 阅读5分钟

📅 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)整理知识图谱,规划下一阶段学习目标