C++ 暑期实习必备八股:50 题 + 准备策略
准备策略
1. 先定方向
- 后端 / 客户端:STL、智能指针、并发、现代 C++ 权重大
- 嵌入式 Linux:基础语法、内存、OOP 为主,并发了解即可
- 游戏 / 高性能:内存、移动语义、STL 性能相关多问
2. 三轮复习(约 4–6 周)
- 第一轮:50 题全部过一遍,不会的标红
- 第二轮:只啃标红题 + 每类 Top 3,每题准备 1 个追问
- 第三轮:8 道题绑定自己的项目,做 2 次模拟面试
3. 背诵方法
- 结论先行,30 秒内说清主干
- 成对记忆:指针/引用、new/malloc、深拷贝/浅拷贝
- 对象布局、虚表、vector 扩容——画过一遍就不容易忘
- 智能指针、lambda、移动语义——各写一小段代码跑通
4. 时间配比
- 八股 60% + 算法 30%(Hot 100 中等题)+ 项目话术 10%
- 每天:1.5h 八股(10 题)+ 1–2 道算法 + 10min 复习昨日错题
5. 避坑
- 只背定义不会举例 → 每题想一个项目场景
- 50 题全背答案全文 → 记「关键词 + 对比 + 一句例子」就够
- 忽略算法 → 很多岗一面就手撕
- 项目讲流水账 → 按「职责 → 技术选型 → 踩坑」准备
核心大厂开发面试题以及基础八股文资料汇总:
https://www.nowcoder.com/creation/manager/columnDetail/Mq7XWW
50 道高频题
C++ 基础(1–10)
- 指针和引用的区别?各自适用场景?
const修饰变量、指针、成员函数分别表示什么?- 值传递、指针传递、引用传递的区别?
- 堆和栈的区别?各自存什么、谁分配释放?
- 左值和右值是什么?
std::move做了什么? #define和const、inline的区别?static在全局变量、局部变量、类成员上的作用?- 四种类型转换(
static_cast等)分别用在什么场景? - 函数重载的条件?和重写(覆盖)有什么区别?
- 野指针和悬空指针怎么产生?怎么避免?
面向对象(11–20)
- 类对象在内存里大致长什么样?
- 虚函数的实现原理?vptr 和 vtable 是什么?
- 为什么基类析构函数通常要声明为虚函数?
- 构造函数里调用虚函数为什么不安全?
- 重载、重写、隐藏的区别?
- 深拷贝和浅拷贝的区别?什么时候必须自定义拷贝构造/赋值?
- 三法则、五法则、零法则是什么?
- RAII 是什么?在 C++ 里怎么体现?
- 构造函数和析构函数的调用顺序(单继承)?
- 多继承的菱形问题是什么?虚继承怎么解决?
内存管理(21–28)
new/delete和malloc/free的区别?- 内存泄漏是什么?常见原因有哪些?
- 什么是内存对齐?为什么需要对齐?
- 栈溢出一般怎么发生?
- 堆上对象和栈上对象的生命周期有何不同?
new失败了会怎样?- 什么是内存碎片?怎么缓解?
- 如何检测和定位内存泄漏?
智能指针(29–34)
- 为什么需要智能指针?
unique_ptr和shared_ptr的区别与使用场景?shared_ptr的引用计数是怎么工作的?shared_ptr循环引用怎么产生?weak_ptr怎么解决?make_shared比直接new好在哪里?shared_ptr线程安全吗?
STL(35–42)
vector的底层实现和扩容机制?vector哪些操作会导致迭代器失效?vector和list怎么选?map和unordered_map底层分别是什么?怎么选?emplace_back和push_back的区别?- 迭代器失效的常见场景有哪些?
deque和vector的区别?- 常见 STL 容器查找、插入、删除的时间复杂度?
现代 C++ 与并发(43–48)
- C++11 有哪些你用过的重要新特性?
- 右值引用和移动语义是什么?解决什么问题?
- 移动构造和拷贝构造的区别?
lambda的[=]、[&]、[x]捕获方式区别?mutex、lock_guard、unique_lock的区别?- 死锁产生的条件?怎么避免?
项目结合(49–50)
- 项目里哪里用了 C++?为什么选这些 STL 容器或智能指针?
- 项目里遇到过什么内存或性能问题?怎么定位和解决的?
复习优先级
必背 | 1–20、29–34、49–50 | 实习几乎必问 |
重点 | 21–28、35–42 | 后端 / 客户端必考 |
选背 | 43–48 | 投并发相关岗再加 |
查看11道真题和解析