在 Linux 下把 C++ 从“会写”进阶到“能用、能调、能设计”,可以按下面这条路线系统推进。我会按阶段 + 核心能力 + 推荐资源来讲,偏实战,不空谈。
一、夯实基础(不要急着“高级”)
1. C++ 语言本身
重点不是语法,而是语义与代价。
必掌握:
- 对象生命周期(构造 / 析构 / 拷贝 / 移动)
- RAII(这是 Linux C++ 的灵魂)
- 智能指针(
unique_ptr / shared_ptr / weak_ptr)
- 右值引用与移动语义
- 模板基础(函数模板、类模板)
const、引用、指针、内存模型
推荐:
- 《Effective C++》
- 《More Effective C++》
- 《C++ Primer》(查缺补漏,不必通读)
2. Linux 系统基础(非常重要)
如果你是 Linux C++ 工程师,不懂系统,代码就写不稳。
重点:
- 进程 vs 线程
- 文件描述符、管道、重定向
- 信号(signal)
- 环境变量、权限
- 常用命令:
strace, lsof, ps, top, nm, ldd
推荐:
- 《UNIX 环境高级编程(APUE)》
- 自己写一个:
- 多进程 shell
- 简单 HTTP server(单线程)
二、系统编程 + 网络编程(进阶核心)
1. Linux 系统编程
重点:
- 进程:
fork, exec, wait
- 线程:
pthread(先会用,再学 C++ thread)
- 同步:mutex、cond、rwlock
- 文件 IO:
open/read/write,对比 stdio
mmap、socketpair
推荐:
- 《Linux 系统编程》
- 《UNIX 网络编程 卷1》
2. 网络编程(Linux C++ 关键)
重点:
- socket API(TCP / UDP)
- 阻塞 vs 非阻塞
- I/O 多路复用:
- reactor 模型
实战项目:
- 写一个 echo server
- 写一个简易 HTTP server
- 支持高并发(epoll + 线程池)
三、C++ 工程能力(决定你能不能“干活”)
1. 构建系统
- Makefile(要会读、会写)
- CMake(现代 C++ 必备)
重点:
- 头文件 / 源文件分离
- 静态库 vs 动态库
- 编译链接过程(非常重要)
推荐:
2. 调试与性能分析
这是进阶分水岭。
工具:
gdb(断点、backtrace、watch)
valgrind(内存泄漏)
perf(性能热点)
strace(系统调用)
asan / tsan(内存 & 线程问题)
目标:
四、现代 C++ 与设计能力
1. Modern C++(11/14/17/20)
重点不是“新特性”,而是写得更安全、更清晰。
重点:
auto / decltype
- lambda
std::function / std::bind
std::thread / std::mutex
std::optional / std::variant
- 移动语义优化
推荐:
2. 设计模式(结合 Linux 场景)
不要背,要理解“为什么用”。
常用:
- 单例(日志、配置)
- 工厂(对象创建)
- 观察者(事件)
- reactor / proactor
- 责任链(中间件)
推荐:
- 《设计模式:可复用面向对象软件的基础》
- muduo 源码
五、读源码(进阶最快的方式)
推荐顺序
-
muduo(强烈推荐)
- Linux 网络库
- reactor + epoll
- 代码质量极高
-
Redis
-
Nginx
六、进阶方向(选择一条深耕)
1. 后端 / 服务端
- 高并发
- 网络框架
- 微服务、RPC(brpc / grpc)
2. 基础架构
3. 性能 / 底层
七、学习建议(非常重要)
✅ 少看视频,多写代码
✅ 项目要“能跑、能压、能崩”
✅ 遇到问题先 man / strace
✅ 不要追求“全都会”,要追求“能解决一类问题”
八、一个现实进阶路线示例
第 1 阶段:Linux + C++ 基础
第 2 阶段:系统编程 + epoll
第 3 阶段:写网络库 / HTTP 服务
第 4 阶段:读 muduo + 重构自己的库
第 5 阶段:深入某一方向(后端 / 存储 / 性能)
如果你愿意,我可以:
- ✅ 给你一个 3 个月 Linux C++ 进阶计划
- ✅ 给你 实战项目清单(带难度)
- ✅ 结合你当前水平(学生 / 初级 / 转岗)定制路线
你现在处于哪个阶段?