目标:从零起步,拿一台 2C2G 的云服务器当主战场,系统学习 C++ 后端开发。 原则:基础 → 系统 → 网络 → 框架 → 工程化,渐进推进;每个阶段都在云服务器上产出可运行的作品。

总览

阶段主题周期云服务器上的产出
0Linux 基础与服务器上手起步阶段,边用边补workspace 工作目录、用户与权限体系
1现代 C++ 核心2-4 周编译与工具链的熟练度
2Linux 系统与网络编程4-6 周手写并发 HTTP 服务器
3框架与中间件6-8 周Drogon + MySQL + Redis 的 REST API
4工程化与云原生持续Docker 化部署 + CI/CD + 监控

时长按「每天 1-2 小时」估算,弹性理解;项目驱动,不以周数为硬指标。

阶段 0 不必一次啃完:进程管理、看日志、shell 脚本这些内容在后面每个阶段都会反复用到,随用随补即可。


阶段 0:Linux 基础与服务器上手

这一层要覆盖的内容:

  • 云服务器认识与使用(SSH、安全组概念)
  • 目录结构 / 磁盘分区与挂载(lsblk、df)
  • 基础导航与文件操作(ls / cd / pwd / mkdir / cp / mv / rm)
  • 权限体系(权限位、chmod、chown、useradd、su)
  • 把第一个 C++ HTTP 服务器编译部署起来,做到公网可访问
  • 进程管理入门(nohup / systemd,解决「断线服务就死」)
  • tail -f 看日志实战
  • shell 脚本入门(把编译部署流程脚本化)

阶段 1:现代 C++ 核心(2-4 周)

重点:能写出安全的现代 C++ 代码,不陷入语法细节陷阱。

  • 智能指针(unique_ptr / shared_ptr / weak_ptr)
  • RAII 与资源管理
  • 移动语义与右值引用
  • std::optional / string_view
  • 模板基础(不必精通元编程)
  • CMake 构建(必学,替代手敲 g++)
  • 包管理:Conan 或 vcpkg(了解即可)
  • GDB 调试 + ASan 内存检测(Valgrind 了解)

产出:把单文件的 http_server.cpp 改造成 CMake 工程;用智能指针重构其中的资源管理。

⚠️ 避坑:不要花大量时间刷算法题、不要钻研 STL 源码实现。优先建立「写出安全代码」的能力。

阶段 2:Linux 系统与网络编程(4-6 周)

重点:这是 C++ 后端的核心竞争力,而服务器上那个能跑通的 HTTP 服务器代码是绝佳起点。

  • 文件 IO(open / read / write / mmap)
  • 进程与线程(fork / pthread / std::thread)
  • 信号处理(signal / sigaction)
  • Socket API 深入(TCP 状态机、粘包处理)
  • IO 多路复用:select → poll → epoll(重点)
  • 并发模型:多线程同步 → Reactor 模式,理解为什么单线程 epoll 比多线程阻塞高效
  • TCP / HTTP 协议本质(报文、状态码、keep-alive、chunked)

产出(项目驱动,层层递进):

  1. 手写并发 echo server(多线程版)
  2. 升级为 epoll 版 HTTP 服务器,解决单线程串行排队的瓶颈
  3. 对照阅读 muduo 源码(陈硕),理解工业级 Reactor 设计

阶段 3:主流框架与中间件(6-8 周)

重点:每个技术点都配一个小项目落地。

  • Web 框架:Drogon(首选,文档完善)或 cpp-httplib(快速原型)
  • MySQL / PostgreSQL + ORM(sqlpp11)
  • Redis 缓存(会话管理、热点缓存)
  • gRPC + Protobuf(RPC 通信)
  • 服务发现与负载均衡(概念 + 简单实践)

产出:

  1. Drogon + MySQL 的 REST API(例如记账本 / 短链服务)
  2. 加 Redis 做会话管理
  3. 两个服务之间走 gRPC 通信(为分布式打底)

阶段 4:工程化与云原生(持续)

  • 测试:Google Test 单元测试 + CTest 集成
  • CI/CD:GitHub Actions 自动构建 / 测试
  • Docker:多阶段构建 C++ 镜像,docker-compose 编排服务 + 数据库
  • Kubernetes 部署基础
  • 可观测性:spdlog 日志、Prometheus 指标、OpenTelemetry 链路追踪(了解)

产出:把阶段 3 的 REST API 完整 Docker 化,用 GitHub Actions 自动部署到云服务器。


学习原则

  1. 项目驱动:每阶段必须产出可运行作品(REST API、聊天室、分布式 KV),不空学理论。
  2. 读优秀源码:muduo(陈硕)、libuv、nginx 模块——理解工业级设计,不止于能用。
  3. 云服务器贯穿始终:所有项目都部署到公网可访问的机器上,把「写 → 编译 → 部署 → 访问」这条链路练成肌肉记忆。
  4. 资源:
    • 书:《C++ Concurrency in Action》《Linux 高性能服务器编程》(游双)
    • 视频:B 站「码农高天」C++ 系列
    • 工具:GDB、ASan、perf(性能分析)
  5. 就业导向:国内大厂重基础 + 系统能力(epoll、内存、并发);海外 / 初创更看框架实战。两条腿走路。

心法

C++ 后端学习曲线陡峭,回报是对计算机系统的深层理解。当你能用 epoll 手写高性能服务器时,转 Go / Rust / Java 都是降维打击。 坚持 6 个月系统训练,可以达到初级工程师水平。

2C2G 这类低配服务器的现实问题:编译大项目时内存吃紧。两条出路——本地交叉编译后把可执行文件传上去,或者用 swap 文件把虚拟内存扩出来。