C++后端开发重点知识点

将"理论理解 -> 实践验证 -> 项目集成"形成一个闭环,每学完一个知识点进行实践,保证深入理解为未来开发生涯打下坚实的基础。

第一阶段:夯实基础 & 循环学习(理论+实践)

这个阶段的目标是:不仅要知道是什么,还要知道为什么,并且能写代码证明它。

核心知识点清单
类别 关键知识点 实践建议("弄懂"后立刻动手)
C++基础 1. 面向对象 :封装、继承、多态(虚函数表原理) 2. 内存管理 :new/delete, malloc/free, 内存布局,栈 vs 堆 3. 关键字 :const, static, extern, volatile, explicit 4. 智能指针 :unique_ptr, shared_ptr, weak_ptr(循环引用问题) 5. RAII 机制与资源管理 1. 实现一个简单的字符串类(MyString),处理拷贝构造、赋值运算符 2. 写代码验证虚函数表的的存在(通过指针偏移访问) 3. 用shared_ptrweak_ptr模拟一个循环引用的场景并解决它
C++11/14/17新特性 1. 移动语义 :右值引用,std::move, 完美转发 std::forward 2. Lambda表达式 3. 类型推导 :auto, decltype 4. 多线程 :std::thread, std::async, std::future 5. 容器:std::unordered_map, std::array, std::tuple 1. 为你的MyString类添加移动构造函数和移动赋值运算符,对比性能提升 2. 使用Lambda和std::sort对自定义结构体向量进行排序 3. 用std::thread写一个多线程累加程序,并思考数据竞争问题
STL 1. 容器 :vector, list, map, set 的底层实现(数组、链表、红黑树)及时间复杂度 2. 迭代器 :种类及失效问题 3. 算法:find, sort, copy 等 1. 对比vector在push_back时与list的性能差异(使用chrono计时) 2. 写代码触发vector的迭代器失效(如插入元素),并分析原因
操作系统 1. 进程与线程 :区别、通信方式(管道、消息队列、共享内存等)、同步方式(互斥锁、信号量、条件变量) 2. 虚拟内存 :分页、分段、页面置换算法 3. 进程调度 :常见算法 4. 死锁:条件及避免 1. 用pthreadstd::mutex编写一个多生产者-多消费者模型 2. 编写一个简单的程序,使用fork()创建进程,并用管道进行通信
计算机网络 1. TCP/IP模型 :各层协议(重点TCP/UDP) 2. TCP :三次握手、四次挥手、状态转换图 、流量控制(滑动窗口)、拥塞控制(慢启动、拥塞避免) 3. HTTP/HTTPS :报文格式、方法、状态码、缓存、SSL/TLS握手过程 4. Socket编程 1. 必做 :用Socket API(C/C++)写一个简单的TCP回显服务器(Echo Server)和客户端 2. 使用Wireshark抓包,亲眼查看TCP三次握手、HTTP请求响应的原始报文
数据库(MySQL) 1. 索引 :B+树原理、聚簇/非聚簇索引、最左前缀原则 2. 事务 :ACID特性、隔离级别、幻读/不可重复读 3. :乐观锁、悲观锁、行锁、表锁、间隙锁 4. SQL优化:Explain命令 1. 创建一张表,插入百万数据,对比有索引和无索引的查询速度 2. 开启两个MySQL会话,模拟事务的不同隔离级别下出现的问题
设计模式 1. 单例模式 (线程安全) 2. 工厂模式 3. 观察者模式 4. Reactor模式对网络服务器极其重要 1. 实现一个线程安全的懒汉/饿汉单例 2. 必做:实现一个简单的Reactor模型(事件驱动),这是你后续HTTP服务器的核心

第二阶段:高性能HTTP服务器项目

这是你简历上的亮点,能串联起上面绝大部分知识点。

项目核心特性与目标
  • 核心技术IO多路复用(epoll)。这是"高性能"的基石。

  • 核心架构Reactor模式(单Reactor多线程/多进程,或多Reactor)。这是现代高性能网络服务器的标准设计。

  • 编程语言:C++17/20

  • 目标:能处理高并发连接(数千以上),性能指标可通过压测工具(如wrk)进行验证。

功能模块拆解
  1. 基础网络库(核心中的核心)

    • 封装Socket API

    • 封装Epoll,实现事件循环(Event Loop)

    • 实现Channel类,负责每个fd的事件分发

    • 实现Acceptor类,负责处理新连接

    • 实现EventLoopThreadPool,线程池,这是支持高并发的关键。

  2. HTTP处理模块

    • HTTP请求解析器(Parser):状态机解析HTTP报文。

    • HTTP响应构建器。

    • 实现静态资源请求(URL映射到本地文件)。

    • 实现简单的API(如返回当前时间)。

  3. 高级特性(加分项)

    • 定时器 :用于处理超时连接(如std::priority_queue或时间轮)。

    • 数据库连接池:集成MySQL,支持用户登录/注册等功能。

    • 日志系统 :异步日志(生产者-消费者模型),记录服务器运行状态。

    • 配置文件解析

    • 支持HTTP长连接(Connection: keep-alive)。

学习与开发路径
  1. 先模仿 :学习 muduo/libevent 等优秀网络库的设计思想。切忌直接抄代码,理解其Class划分和数据流。

  2. 再动手

    • 第一步:实现一个最简单的Reactor,能接受连接并回显消息(基于你之前的Echo Server)。

    • 第二步:加入线程池,让IO线程和计算线程分离。

    • 第三步:加入HTTP解析模块。

    • 第四步:一步步添加定时器、日志等高级功能。

  3. 测试与优化

    • 使用 wrkab 进行压测,查看QPS(每秒请求数)。

    • 使用 valgrind 检查内存泄漏。

    • 使用 perf 进行性能分析,找出热点函数。

面试准备

  • 复盘项目:必须能清晰地讲出你的HTTP服务器的架构、为什么这么设计、遇到了什么困难、如何解决的、性能如何。

  • 刷题LeetCode(Top 100-150题,至少刷两遍)。重点:链表、树、二分查找、动态规划、回溯、栈/队列。

  • 八股文:基于第一阶段的知识点,进行系统性复习和背诵。你通过实践理解的"八股",会比别人深刻得多。

资源推荐

总结

学习一个知识点 -> 写代码验证 -> 记入笔记/博客 -> 思考如何用到HTTP项目中 -> 集成到项目里

相关推荐
半桔4 小时前
【网络编程】UDP 编程实战:从套接字到聊天室多场景项目构建
linux·网络·c++·网络协议·udp
Lucis__4 小时前
C++相关概念与语法基础——C基础上的改进与优化
c语言·开发语言·c++
草莓熊Lotso4 小时前
《算法闯关指南:优选算法--滑动窗口》--14找到字符串中所有字母异位词
java·linux·开发语言·c++·算法·java-ee
奔跑吧邓邓子5 小时前
【C++实战㊳】C++单例模式:从理论到实战的深度剖析
c++·单例模式·实战
MATLAB代码顾问5 小时前
Python实现手榴弹爆炸算法(Grenade Explosion Method, GEM)(附完整代码)
开发语言·python·算法
人工干智能5 小时前
Python的大杀器:Jupyter Notebook处理.ipynb文件
开发语言·python·jupyter
SuperCandyXu6 小时前
P2168 [NOI2015] 荷马史诗-提高+/省选-
数据结构·c++·算法·洛谷
zpf_叶绿体学编程6 小时前
一命速通:Go 语言操作 Office Excel 文档,从入门到实战解析
开发语言·golang·excel
running thunderbolt6 小时前
c++:SLT容器之set、map详解
开发语言·c++