本文基于八股精 C++ 专题约 2570 条有效面试记录(2025-2026 年),梳理腾讯、字节跳动、百度、快手、Shopee、京东六家公司在 C++ 岗位面试中的考察侧重与高频真题,帮助求职者有针对性地准备。

一、数据概况
本次统计覆盖 C++ 专题约 2570 条有效面试记录,时间范围为 2025-2026 年。统计口径为:题目本体或其重复题命中年份在 2025/2026 年内才纳入。以下按代表题量降序,依次介绍六家公司的考察特征。
二、公司考察解读
腾讯(代表题量 284)
核心结论:虚函数与多态机制是腾讯 C++ 面试的绝对重点,内存管理紧随其后。
腾讯在六家公司中代表题量最高,考察深度也最为突出。其常考知识点集中在 内存管理、C++ 智能指针、虚函数机制、引用计数、移动语义、RAII、析构函数、多态 这几个方向。值得注意的是,腾讯对「虚函数机制」和「多态」的考察频次明显高于其他公司,Top 3 真题中有两道直接围绕虚函数表和多态原理展开。
真题示例:
- 编译器是如何实现虚函数调用的?虚函数调用比普通函数调用慢在哪里?
- 请说明多态的实现原理,包括虚函数表(vtable)的内存布局,以及多重继承下的虚表结构。
- 指针和引用有什么最本质的区别?如果函数内部需要修改指针本身的值,能否使用引用?
避坑/得分点: 腾讯喜欢追问到底层实现细节。回答虚函数问题时,不能只说"通过虚函数表实现动态绑定"就结束,要能画出 vtable 的内存布局、说清 vptr 的位置、解释多重继承下多张虚表的组织方式。指针与引用的区别看似基础,但追问"能否用引用修改指针本身"时,需要明确区分"引用的引用"和"指针的引用"在语法上的差异。
字节跳动(代表题量 248)
核心结论:智能指针与 STL 容器底层原理并重,考察范围覆盖面广。
字节跳动的常考知识点包括 C++ 智能指针、内存管理、引用计数、虚函数机制、RAII、资源管理、移动语义、右值引用。与腾讯相比,字节对「智能指针的使用场景」和「STL 容器选型」的考察更为突出,Top 3 真题中出现了红黑树 vs AVL 树的对比、智能指针管理非内存资源等偏应用层的问题。
真题示例:
- 请解释 C++ STL 中为何选择红黑树而非 AVL 树作为关联容器的底层实现。
- C++ 智能指针的使用场景有哪些,如何用智能指针管理文件、数据库连接等资源?
- 请介绍 static 的作用,头文件声明 static 变量,包含头文件的 c 文件内可以访问到吗?类成员函数声明为 static,编译器行为如何,其与普通函数有什么区别?
避坑/得分点: 字节的题目风格偏"为什么这样设计",而非单纯"是什么"。回答红黑树 vs AVL 树时,要从插入/删除时的旋转代价、查询效率的常数差异、工程实践中的综合权衡三个维度展开。static 关键字的考察跨度很大,从文件作用域到类作用域再到链接属性,建议按作用域层次逐一梳理,避免遗漏。
百度(代表题量 130)
核心结论:智能指针与内存管理是核心考点,对"为什么"的追问较为深入。
百度的常考知识点为 C++ 智能指针、内存管理、资源管理、虚函数机制、RAII、引用计数、多态、内存模型。题量虽不及腾讯和字节,但对智能指针的考察深度不低,Top 3 真题中有两道直接与智能指针相关,且要求"介绍原理+管理方式"的完整回答。
真题示例:
- 请介绍一下智能指针以及如何管理里面的指针。
- 为什么析构函数要用虚函数,若不用会有什么影响?
- 对比 new/delete 与 malloc/free 的区别(可从构造/析构函数、异常处理、运算符重载角度分析)。
避坑/得分点: 百度喜欢从"对比"角度切入,比如 new/delete vs malloc/free 这道题,题目已经提示了三个分析角度(构造/析构、异常处理、运算符重载),回答时务必覆盖这三个维度,不要只答"new 会调用构造函数"就收手。虚析构函数的问题看似经典,但要答出"通过基类指针 delete 派生类对象时,若析构非虚则只调用基类析构,导致派生类资源泄漏"这一完整因果链。
快手(代表题量 103)
核心结论:多继承内存布局与移动语义是特色考点,注重底层机制理解。
快手的常考知识点包括 C++ 智能指针、虚函数机制、内存管理、RAII、移动语义、多态、操作的原子性、引用计数。在六家公司中,快手对「多继承虚表布局」和「移动语义/右值引用本质」的考察较为突出,Top 3 真题中这两道都是深度原理题。
真题示例:
- 在 C++ 中,当类采用多继承且每个父类都包含虚函数时,其对象的内存布局以及虚表指针(vptr)是如何分布的?
- std::move 和右值引用的本质是什么?什么时候用移动语义?
- 请解释 vector 的底层实现原理,特别是它的扩容机制。在实际使用中,有哪些方法可以避免 vector 的反复扩容?
避坑/得分点: 快手的多继承题比腾讯更具体------直接限定"每个父类都包含虚函数"的场景,需要说清每个父类子对象各自持有 vptr、派生类对象中 vptr 的数量等于拥有虚函数的基类数量。std::move 的本质是"类型转换"而非"移动操作"这一点,是很多候选人的失分点,务必点明。vector 扩容机制除了说清 1.5 倍或 2 倍增长策略外,还要给出 reserve()、swap 惯用法等实际规避手段。
Shopee 虾皮(代表题量 43)
核心结论:STL 容器对比与综合设计题是特色,考察广度大于深度。
Shopee 的常考知识点为 虚函数机制、编译期计算、内存管理、多重继承、动态数组、容器选择、引用计数、C++ 智能指针。与其他公司相比,Shopee 更侧重「容器选型对比」和「综合性开放问题」,Top 3 真题中出现了 vector/list/deque 三容器对比、以及一道包含五个子问题的 STL 容器综合题。
真题示例:
- 请对比 C++ 标准库中的 vector、list 和 deque 这三种容器,说明在什么场景下分别适合使用它们?
- 请谈谈一个你熟悉的 STL 容器:底层数据结构、是否线程安全、适用场景、插入/删除的时间复杂度、查找的时间复杂度。
- 请详细介绍 C++ 中的智能指针的类型、实现原理与使用注意事项。
避坑/得分点: Shopee 的综合题要求一次性覆盖多个维度(数据结构、线程安全、场景、复杂度),回答时建议用结构化方式逐条展开,避免遗漏。容器对比题不能只说"vector 连续内存、list 链表",要从随机访问、插入删除效率、内存局部性、缓存友好性等维度做系统对比。
京东(代表题量 40)
核心结论:智能指针的实现细节与线程安全性是考察重点。
京东的常考知识点包括 内存管理、C++ 智能指针、引用计数、动态数组、操作的原子性、内存模型、资源管理、指针。京东对「智能指针」的考察尤其细致,Top 3 真题全部与智能指针或虚析构直接相关,且明确要求分析线程安全性和循环引用问题。
真题示例:
- 为什么需要虚析构?虚析构的实现原理是什么?
- 请对比分析 C++ 中 unique_ptr 和 shared_ptr 的区别,包括具体场景选择、底层实现和作用域等方面。
- 请说明 std::shared_ptr 的实现原理,其线程安全性如何,出现循环引用的问题该如何解决?
避坑/得分点: 京东对 shared_ptr 的线程安全性考察很细------需要区分"引用计数的操作是原子安全的"和"对托管对象本身的访问不是线程安全的"这两个层面。循环引用的解决方案除了 weak_ptr,最好能给出一个具体代码场景说明问题如何产生、如何用 weak_ptr 打破循环。
三、横向观察
从六家公司的考察数据中,可以提炼出几个跨公司的共性趋势:
智能指针是覆盖面最广的知识点。 六家公司的常考知识点中均出现了"C++ 智能指针",且腾讯、字节、百度、快手、京东五家的 Top 3 真题中都有至少一道与智能指针直接相关。这说明智能指针已经从"加分项"变成了"必考项"。
虚函数机制与多态是第二高频考点。 腾讯、字节、百度、快手、Shopee 五家均将其列入常考知识点,且腾讯和快手的 Top 3 真题中有两道围绕虚函数展开。但各公司的追问方向有所不同:腾讯偏重虚表内存布局,快手偏重多继承场景,百度偏重虚析构的必要性。
内存管理与 RAII 是基础底盘。 六家公司中有五家将"内存管理"或"资源管理"列入常考知识点,RAII 思想也频繁出现。这反映出 C++ 岗位面试对资源管理能力的重视是一以贯之的。
移动语义与右值引用的热度在上升。 腾讯、字节、快手三家的常考知识点中均包含"移动语义",快手和字节的真题中也有直接考察。建议将移动语义作为重点准备方向之一。
四、备考建议
结合上述六家公司的考察侧重,给出以下可操作的备考建议:
1. 以智能指针为主线,串联内存管理知识体系
智能指针在六家公司中均为高频考点,且题目往往不局限于"说出三种智能指针的名字",而是要求讲清实现原理(如 shared_ptr 的引用计数控制块)、使用场景(如 unique_ptr 用于工厂模式返回)、线程安全性、循环引用等深层问题。建议以 shared_ptr 的实现为切入点,向上关联引用计数和 RAII,向下关联 weak_ptr 和循环引用,形成完整的知识链。
2. 虚函数机制要准备到"能画图"的程度
腾讯和快手都对虚函数的底层实现有深度追问,仅背诵"通过虚函数表实现动态绑定"远远不够。建议能手绘单继承、多继承场景下 vptr 和 vtable 的内存布局,能说清虚函数调用的完整流程(取 vptr → 查 vtable → 间接调用),能解释虚函数调用比普通函数调用多出的开销来源。
3. STL 容器要准备"对比型"回答
Shopee 和字节都出现了容器对比或选型类题目。建议按"底层数据结构 → 时间复杂度 → 内存局部性 → 典型使用场景"的四维框架准备 vector、list、deque、map(红黑树)、unordered_map(哈希表)等核心容器,做到面对任何对比题都能结构化作答。
4. 移动语义与右值引用不可忽视
腾讯、字节、快手三家均将移动语义列入常考知识点。建议理解 std::move 的本质(static_cast 到右值引用)、移动构造/移动赋值的实现方式、完美转发(std::forward)的使用场景,以及移动语义在容器扩容、工厂函数返回值优化中的实际应用。
5. 经典对比题要覆盖"题目提示的分析角度"
百度和京东的真题中多次出现"对比 A 和 B"的题型,且题目本身会提示分析角度(如 new/delete vs malloc/free 提示了构造/析构、异常处理、运算符重载三个角度)。答题时务必按题目给定的维度逐一展开,避免只答自己最熟悉的一两个点而遗漏其他维度。
数据来源于八股精(C++专题)约 2570 条真实面试记录,覆盖 2025-2026;结论基于统计,仅供参考。