跳转到内容

00 · 学习路线图(两个月完整版)

🌐 在线学习站(推荐)https://cpp-interview-prep.pages.dev —— 手机也能学,带搜索/答题/刷题卡片/进度追踪。 🖥 离线阅读版:双击 交互阅读器.md 为内容源,改完跑 tools\update.bat

适用对象:有 C++ 基础但不清楚自己盲区、2 个月内要投游戏开发/引擎实习的同学。 核心思路:语言八股打底(第1-6周)→ 游戏专项扫盲(第7周)→ 算法+综合冲刺(第8周)。 每天投入 2~3 小时即可,重在“能讲出来”,不在“看过就算”。


一、先搞清楚:游戏岗 C++ 面试考什么

Section titled “一、先搞清楚:游戏岗 C++ 面试考什么”

大厂游戏开发/引擎岗(含实习)的面试权重大概是:

考察项 占比 说明
C++ 语言八股 50% 编译链接、内存、指针、类、虚函数、STL、模板、并发、新特性
手撕代码 20~30% 笔试/面试现场写题,算法题 + 少量系统设计(如线程池、单例)
游戏/引擎常识 10~15% 游戏循环、ECS、渲染管线概念、UE/Unity 机制(问的是概念不是实现)
项目经历 10% 怎么把项目讲清楚,含游戏相关的亮点

结论:C++ 八股是绝对大头,也是你现阶段最该砸时间的。游戏专项部分按你的要求做到“概念清楚、能说出 1-2 句亮点”即可。


第 1 周:编译链接 + 内存模型 + 指针引用

Section titled “第 1 周:编译链接 + 内存模型 + 指针引用”
  • 02 编译链接与内存模型(编译四阶段、静态/动态库、内存分区、内存对齐、大小端)
  • 03 指针引用与内存管理(指针/引用区别、new vs malloc、智能指针三兄弟、循环引用、内存泄漏)
  • 产出:能画出“从 .cpp 到可执行文件”流程图;能手写 shared_ptr 的循环引用示例并解释 weak_ptr 解法
  • 04 类与对象(构造/析构顺序、拷贝/赋值/移动、初始化列表、深拷贝、explicit)
  • 05 继承多态与虚函数(虚表机制、多态原理、菱形继承、虚继承、抽象类)
  • 产出:能手画虚函数表示意图;能回答“为什么析构要虚”“空类为什么是 1 字节”
  • 06 STL容器与迭代器(各容器底层结构、扩容机制、迭代器失效、选择依据)
  • 产出:一张“容器特性对照表”;能把 vector 扩容、map 底层红黑树、unordered_map 哈希讲清楚

第 4 周:模板 + 现代 C++(11 核心)

Section titled “第 4 周:模板 + 现代 C++(11 核心)”
  • 07 模板与泛型(模板机制、特化/偏特化、SFINAE、enable_if、可变参数模板)
  • 08 现代C++新特性:C++11 部分(auto/decltype、右值引用、移动语义、完美转发、lambda、nullptr、constexpr、智能指针)
  • 产出:能手写完美转发代码;能解释“为什么 std::move 不是移动”

第 5 周:现代 C++(14/17/20)+ 并发入门

Section titled “第 5 周:现代 C++(14/17/20)+ 并发入门”
  • 08 现代C++新特性:14/17/20 部分(结构化绑定、if constexpr、fold 表达式、concepts、协程、三向比较)
  • 09 并发与多线程:线程/互斥/锁/死锁
  • 产出:能讲清“协程 vs 线程”;能手写死锁并说明如何避免

第 6 周:并发进阶 + 设计模式 + 性能

Section titled “第 6 周:并发进阶 + 设计模式 + 性能”
  • 09 并发与多线程:condition_variable、atomic/内存序、线程池、单例线程安全
  • 10 设计模式与工程实践(单例/工厂/观察者/状态/命令/对象池)
  • 11 性能优化进阶(缓存友好、虚函数开销、内存池)
  • 产出:能手写线程安全单例(C++11 magic static 版);能说出游戏里为什么用对象池/ECS

第 7 周:游戏/引擎专项(概念扫盲,不写代码)

Section titled “第 7 周:游戏/引擎专项(概念扫盲,不写代码)”
  • 12 游戏开发专项概念(游戏循环、固定/可变步长、数学基础、ECS、碰撞、空间分区)
  • 13 游戏引擎专项概念(渲染管线、DrawCall、UE 的 UObject/反射/GC、Unity 的 Mono/IL2CPP)
  • 产出:能对着面试官把“游戏主循环”和“ECS 优点”各讲 1 分钟

第 8 周:手撕代码 + 综合冲刺 + 模拟面试

Section titled “第 8 周:手撕代码 + 综合冲刺 + 模拟面试”
  • 14 高频手撕代码题库(排序/链表/树/DP/滑动窗口等)
  • 15 高频八股题库合集(全库快速过一遍,卡壳的回去补对应章节)
  • 16 项目梳理与面试策略(简历话术、项目怎么讲)
  • 至少 2 次模拟面试(让我帮你模拟,或者你对着墙讲)

三、每日学习法(每天 2~3 小时)

Section titled “三、每日学习法(每天 2~3 小时)”
0:00-0:30 复习:把前一天学的高频题 Q&A 快速过一遍(不看答案讲)
0:30-2:00 学新章节:读核心知识 → 看代码例子 → 读高频题 Q&A
2:00-2:30 输出:合上文档,把今天学到的一个考点讲给自己听/写笔记/画图

三条铁律:

  1. 输出为主:能讲出来才算会。每章末尾自测是底线,每周日做一次“合书复述”。
  2. 追本溯源:不要死记答案,每道八股题要能说出“为什么”(比如内存对齐是为了 CPU 访问效率)。
  3. 标记盲区:做题时把“不会/半会不会”的题目记下来,第二天第一件事优先补。

四、各章 ↔ 高频面试题对照(学完看表自查)

Section titled “四、各章 ↔ 高频面试题对照(学完看表自查)”
章节 学完你应该能秒答的代表题
02 编译四阶段?静态/动态库区别?全局变量放哪?sizeof 怎么算内存对齐?大小端怎么判断?
03 指针与引用区别?new/malloc 区别?shared_ptr 循环引用?野指针怎么避免?
04 构造析构顺序?拷贝/移动什么时候触发?初始化列表为什么快?空类大小?explicit 干嘛用?
05 虚表怎么组织的?多态为什么不生效的情况?菱形继承怎么解决?析构为什么必须虚?
06 vector 扩容机制?map 为什么用红黑树?unordered_map 冲突怎么解决?迭代器失效?
07 模板实例化时机?函数模板能偏特化吗?SFINAE 是什么?怎么展开参数包?
08 move 是做什么的?完美转发?lambda 捕获原理?constexpr vs const?C++20 有哪些新东西?
09 死锁四条件?lock_guard vs unique_lock?虚假唤醒?内存序?线程池?
10 单例的线程安全实现?观察者/状态/命令在游戏里的应用?对象池为什么省内存?
11 虚函数有性能开销吗?什么是缓存友好?怎么定位性能瓶颈?
12 游戏主循环?固定 vs 可变步长?ECS 优缺点?四元数为什么用?
13 什么是 DrawCall?怎么减少?UE 的 UObject/反射/GC?Unity IL2CPP vs Mono?
14 快排/链表反转/最长回文子串/二叉树遍历/背包问题……
15 全部八股的浓缩版本,用于最后冲刺
16 项目怎么讲才加分?被问“你最大难点”怎么答?

五、进阶提示(面试官爱追问的方向)

Section titled “五、进阶提示(面试官爱追问的方向)”
  • 会一道题 ≠ 会一类题:比如问完 shared_ptr,一定会追问“weak_ptr 原理”“循环引用”“线程安全吗”“make_shared 和 new 的区别”。对应章节都写了,务必看完 Q&A 全部追问。
  • 游戏岗会考“C++ 在游戏里的实际应用”:内存池/对象池、ECS 数据布局、多线程 job system、缓存友好——这些在第 10/11/12 章都有,属于加分项,别跳过。
  • 手撕代码注意基本功:笔试白板题经常考“手写智能指针”“手写字符串类”“手写线程池”,第 14 章专门收录了。

  • 能不看资料讲完 15-高频八股题库合集 里的 80% 以上
  • 手写代码:排序、链表反转、二分、BFS/DFS、背包、字符串类 各能 15 分钟内写完
  • 游戏专项:能各讲 1 分钟“游戏循环”“ECS”“渲染管线概念”
  • 项目:有 2~3 个可讲的项目/练习,每个能讲 3 分钟含亮点与难点
  • 简历:投递前发我帮你看一遍
  • 完成过 1~2 次模拟面试(找我)

进度记录(每周日更新):

  • 资料库:07~16 章节文档已补齐(2026-08-13),学习尚未开始
  • 第1周:02/03 已通读(用户自述“做完了”)
  • 第2周:04 已通读;05 已完成自测 → 精批见 05 文档 9.1 节(5、9 题知识性错误已修正,7、10 题需补完整)
  • 第3周:
  • 第4周:
  • 第5周:
  • 第6周:
  • 第7周:
  • 第8周: