01
重构初体验
什么是重构?为什么重构?重构 vs 重写。从一个混乱的排序算法开始,感受重构的魅力。
重构入门
02
代码坏味道识别
识别重复代码、过长函数、过大的类、过长参数列表、发散式变化等常见坏味道。
坏味道代码质量
03
重构基本功
提炼函数、内联函数、提炼变量、内联变量、改变函数声明。
基础手法
04
封装与抽象
封装全局变量、封装条件判断、用多态取代条件表达式。
封装多态
05
数据重构
自封装字段、以对象取代数据值、以值域取代数组、拆分可变数据。
数据可变性
06
条件逻辑简化
分解条件表达式、合并条件表达式、以卫语句取代嵌套条件表达式。
条件简化
07
API重构
将查询函数和修改函数分离、函数上移/下移、以异常取代错误码。
API异常
08
继承体系重构
字段上移/下移、构造函数本体上移、以委托取代继承、以继承取代委托。
继承委托
09
大型重构
梳理并分解过大的模块、提取继承体系、将过程化设计转化为面向对象。
大型模块化
10
性能分析入门
为什么性能优化需要先测量?使用 perf、gprof、Valgrind 进行热点分析。
性能profiling
11
编译器优化与代码生成
理解 -O1/-O2/-O3/-Os 的区别、RVO/NRVO、内联展开对性能的影响。
编译器优化
12
内存布局与缓存优化
结构体对齐、缓存行友好、数据局部性原理、避免伪共享。
内存缓存
13
减少动态内存分配
对象池、内存池、栈分配 vs 堆分配、std::pmr 的使用。
内存池pmr
14
字符串优化
std::string 的 COW/SSO 机制、避免不必要的拷贝、string_view 的正确使用。
字符串string_view
15
容器选择与优化
vector vs list vs deque、map vs unordered_map、reserve 的重要性。
容器STL
16
算法优化
用 STL 算法替代手写循环、避免不必要的排序、查找算法的选择。
算法STL
17
多线程基础与同步
std::thread、mutex、lock_guard、条件变量、死锁预防。
多线程同步
18
无锁编程入门
原子操作、memory_order、CAS、无锁队列的简单实现。
无锁原子
19
任务并行与异步编程
std::async、std::future、std::promise、线程池的简单实现。
异步线程池
20
I/O 性能优化
缓冲 I/O vs 直接 I/O、mmap 的使用、异步 I/O 入门。
I/Ommap
21
编译期优化
constexpr、consteval、模板元编程基础、类型萃取。
编译期模板元
22
移动语义与完美转发
理解移动构造函数、std::move、std::forward、避免不必要的拷贝。
移动语义完美转发
23
RAII 与资源管理
智能指针的正确使用、自定义 RAII 包装器、资源获取即初始化。
RAII智能指针
24
设计模式在重构中的应用
策略模式、观察者模式、工厂模式在 C++ 中的现代实现。
设计模式重构
25
大型项目重构策略
增量重构、脚手架法、并行修改、重构与测试的配合。
策略增量
26
代码审查与重构
如何做 Code Review、常见的重构审查点、自动化检查工具。
Code Review自动化
27
测试驱动重构
单元测试框架(Google Test)、编写可测试的代码、重构时如何保证正确性。
TDDGoogle Test
28
性能回归测试
建立性能基准、自动化性能测试、使用 Google Benchmark。
基准测试Benchmark
29
实战案例一:日志系统
重构一个遗留的日志系统,提升写入性能 10 倍。
实战日志
30
实战案例二:实时数据管道
重构一个实时数据处理管道,降低延迟 50%。
实战低延迟