当前位置: 首页 > news >正文

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写一个多线程累加程序,并思考数据竞争问题
STL1. 容器: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. 测试与优化

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

    • 使用 valgrind 检查内存泄漏。

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

面试准备

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

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

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

资源推荐

  • 书籍

    • 《C++ Primer》

    • 《Effective C++》

    • 《STL源码剖析》

    • 《TCP/IP网络编程》(尹圣雨)

    • 《Linux多线程服务端编程》(陈硕,muduo作者)

    • 《MySQL技术内幕:InnoDB存储引擎》

  • 视频

    • 侯捷老师的C++系列课程

    • 牛客网、慕课网上的实战项目课(可以看思路,代码要自己写)

  • 开源库

    • muduo (GitHub - chenshuo/muduo: Event-driven network library for multi-threaded Linux server in C++11)

    • libevent (GitHub - libevent/libevent: Event notification library)

总结

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

http://www.xdnf.cn/news/1436797.html

相关文章:

  • Adafruit_nRF52_Bootloader 使用 uf2
  • Spring Cloud Config 核心原理
  • 【C++】编写通用模板代码的重要技巧:T()
  • CICD的持续集成与持续交付和Zabbix
  • 【C++】15. ⼆叉搜索树
  • 室内定位---apriltag 视觉定位demo
  • (四)Python控制结构(条件结构)
  • deepseek7b本地部署技巧,新手也能玩得转
  • 下载 | Win11 官方精简版,系统占用空间极少!(8月更新、Win 11 IoT物联网 LTSC版、适合老电脑安装使用)
  • Flink RuntimeContext和FunctionContext:状态计算的核心桥梁
  • Linux中断实验
  • 数字化转型的终极关怀:以人为本
  • Linux笔记14——shell编程基础-8
  • C#类对象映射AutoMapper
  • QT(2)
  • MTK Linux DRM分析(二十九)- MTK mtk_dsi.c(Part.1)
  • Linux 环境配置 muduo 网络库详细步骤
  • Linux 文本处理三大利器:命令小工具和sed
  • 从理念到实践:三层解耦架构与“无系统”论
  • 基于web的高校学籍管理系统的设计与实现-(源码+LW+可部署)
  • CodeBuddy 在进化:我只输入了一个地址,完成了OneCode3.0基础开发环境的配置构建
  • JWT在线解密/JWT在线解码 - 加菲工具
  • kukekey在线搭建k8sV1.30.4版本
  • 从栈中取出K个硬币的最大面值和-分组背包
  • 【学Python自动化】 8. Python 错误和异常学习笔记
  • 2025年工科生职业发展证书选择与分析
  • 【模型学习】LoRA的原理,及deepseek-vl2下LoRA实现
  • 力扣242:有效的字母异位词
  • JetBrains 2025 全家桶 11合1 Windows直装(含 IDEA PyCharm、WebStorm、DataSpell、DataGrip等
  • C++类和对象(中)- 默认成员函数