C with classes
This commit is contained in:
125
EffectiveCpp/readme.md
Normal file
125
EffectiveCpp/readme.md
Normal file
@@ -0,0 +1,125 @@
|
||||
明白了,你现在的问题是**“我已经有一定 C/C++ 基础,到底下一步学什么,才能最快提升到工业级水平”**。我帮你理个**清晰路线**,分阶段、按优先级,把核心内容和实践项目都列出来:
|
||||
|
||||
---
|
||||
|
||||
## **阶段 0:你现在的位置**
|
||||
|
||||
* 能熟练用 C 做多文件程序
|
||||
* 理解指针、数组、函数指针
|
||||
* 能看懂简单汇编、知道 DLL/so 的原理
|
||||
* 有一定 C++ 接触(构造/析构、std::vector、string)
|
||||
|
||||
**所以你已经是“高级入门”或“准进阶”水平。**
|
||||
|
||||
---
|
||||
|
||||
## **阶段 1:巩固 C 的底层能力(1-2 周)**
|
||||
|
||||
1. **内存模型 & 指针安全**
|
||||
|
||||
* 栈/堆/全局/常量区
|
||||
* 生命周期 vs 作用域
|
||||
* 野指针、悬空指针、double free
|
||||
2. **Undefined Behavior**
|
||||
|
||||
* 未初始化、越界、对齐、严格别名
|
||||
* 用 `-fsanitize=address/undefined` 来检测 UB
|
||||
3. **C 模块化 & 工程能力**
|
||||
|
||||
* `.h` = 接口,`.c` = 实现
|
||||
* `static`、`extern` 的用法
|
||||
* 错误处理设计(返回码、errno、assert、abort)
|
||||
4. **编译器 & 链接器**
|
||||
|
||||
* gcc/clang 编译过程:预处理 → 编译 → 汇编 → 链接
|
||||
* DLL/so 导出符号、name mangling、调用约定
|
||||
|
||||
**实践项目建议:**
|
||||
|
||||
* 自己写一个 **mini string 库** 或 **日志库**
|
||||
* 写一个 **简单 DLL/so 库**,暴露几个函数
|
||||
|
||||
---
|
||||
|
||||
## **阶段 2:C++ 只学你用得上的(2-3 周)**
|
||||
|
||||
1. **RAII & 构造析构**
|
||||
|
||||
* 自动释放资源
|
||||
* 解决 C 的 malloc/free 错误
|
||||
2. **智能指针(unique_ptr / shared_ptr)**
|
||||
|
||||
* 处理内存泄漏和悬空指针
|
||||
3. **C/C++ 混合编程**
|
||||
|
||||
* `extern "C"`
|
||||
* 用 C++ 实现 C 的底层库接口
|
||||
|
||||
**实践项目建议:**
|
||||
|
||||
* 改造你写的 C 库,用 C++ 写管理层
|
||||
* 用智能指针重写内存管理
|
||||
|
||||
---
|
||||
|
||||
## **阶段 3:多线程与并发(2-3 周)**
|
||||
|
||||
1. **线程基础**
|
||||
|
||||
* 线程 vs 进程,栈独立、共享内存
|
||||
* 创建/结束线程:`pthread` 或 `std::thread`
|
||||
2. **同步机制**
|
||||
|
||||
* mutex、condition variable、读写锁
|
||||
* 原子操作(atomic)
|
||||
3. **并发设计模式**
|
||||
|
||||
* 生产者-消费者
|
||||
* 线程池
|
||||
* 任务队列
|
||||
|
||||
**实践项目建议:**
|
||||
|
||||
* 写一个 **线程安全日志库**
|
||||
* 写一个 **线程池 + 任务队列的小工具**
|
||||
|
||||
---
|
||||
|
||||
## **阶段 4:系统与工具链(长期)**
|
||||
|
||||
* Linux 下调试工具:gdb / valgrind / objdump / nm
|
||||
* PE/ELF 文件结构(你现在 DLL/so 的理解可以升级)
|
||||
* 内核 / 驱动入门(如果兴趣的话)
|
||||
|
||||
**实践项目建议:**
|
||||
|
||||
* 简单的文件处理工具(grep / cat / ls 的简化版)
|
||||
* 自己写一个 toy malloc / 内存池
|
||||
|
||||
---
|
||||
|
||||
## **阶段 5:实践项目驱动学习**
|
||||
|
||||
> 你现在的目标不再是刷题,而是**做出能跑的系统级小项目**。
|
||||
> 几个典型路线:
|
||||
|
||||
1. DLL/so 库 + 测试程序
|
||||
2. 内存池 / mini malloc
|
||||
3. 多线程日志库 / 线程池
|
||||
4. SDL 小框架 / GUI 工具
|
||||
5. 小型解释器或虚拟机
|
||||
|
||||
---
|
||||
|
||||
💡 **核心原则**:
|
||||
|
||||
1. 先底层,再抽象(C → C++)
|
||||
2. 理论 + 实践并行
|
||||
3. 多线程和工程能力必须抓
|
||||
4. 算法只做必要支撑,不刷题为主
|
||||
|
||||
---
|
||||
|
||||
如果你愿意,我可以帮你直接画出一张 **“3 个月 C/C++ 路线图”**,每周明确学习内容和项目实战,这样你不会迷路。
|
||||
|
||||
你想让我画吗?
|
||||
Reference in New Issue
Block a user