腾讯 C++ 面经真题整理¶
参考来源¶
高频真题¶
1. 你对 C++11/14/17 的新特性了解多少?项目里用过哪些?¶
速答: 常见就答 auto、智能指针、右值引用/移动语义、lambda、nullptr、constexpr、override,再补一句项目里真正高频的是智能指针、移动语义和 lambda。
细看: C++11 ~ C++20 高频新特性
2. 一个 C++ 源文件编译成可执行程序要经过哪些步骤?¶
速答: 先预处理,再编译生成汇编,再汇编成目标文件,最后链接成可执行文件;面试里最好顺手补 ODR、头文件和链接符号。
细看: STL、模板、编译链接、const/static/inline
3. 红黑树的原理是什么?和 AVL 相比怎么选?¶
速答: 红黑树是弱平衡树,查询高度略差但插删旋转更少,所以工程里比 AVL 更常见。
细看: 数据结构与算法面试基础
4. 如何实现一个轻量的可靠 UDP?¶
速答: 本质是把序列号、ACK、重传、超时、乱序处理这些可靠性机制补到 UDP 之上;别把它答成“UDP 天然更快”。
细看: TCP、UDP、HTTP、HTTPS
5. C++ 类的大小由什么决定?¶
速答: 主要看非静态成员、内存对齐、继承子对象和虚函数相关开销;静态成员通常不计入对象大小。
细看: 对象模型、内存布局、类与多态
6. 在构造函数中可以调用虚函数吗?¶
速答: 技术上可以,但不会按“最派生类版本”那样工作,因为对象还没构造完整;这是经典坑。
细看: 对象模型、内存布局、类与多态
7. STL 了解到什么程度?迭代器什么时候会失效?¶
速答: vector 扩容、erase 后续元素移动、unordered_map rehash 都可能让旧迭代器失效;面试里最好把原因讲回容器底层存储。
细看: STL 容器深挖
8. 说说智能指针,尤其是 shared_ptr 的问题。¶
速答: unique_ptr 表示唯一所有权,shared_ptr 表示共享生命周期,代价是控制块、引用计数和循环引用风险。
细看: 值类别、引用、移动语义、完美转发、智能指针
9. malloc/free 和 new/delete 有什么区别?¶
速答: malloc/free 只管原始内存,new/delete 还负责对象构造和析构;更完整的回答要补 operator new 和 placement new。
细看: 内存管理
10. 多态的底层是怎么实现的?¶
速答: 主流实现通常靠对象里的 vptr 指向类级共享的虚表,运行时经由虚表完成动态分派;代价是布局复杂化和间接调用开销。
细看: 对象模型、内存布局、类与多态
11. 数据库里的数据是怎么组织的?¶
速答: 如果面向 MySQL/InnoDB,通常可以从页、B+树、聚簇索引、二级索引、回表这些层次讲;别只回答“数据库里是一张表”。
细看: 数据库与缓存:MySQL、Redis
12. 为什么析构函数经常要设计成虚函数?¶
速答: 只要类可能被当作多态基类通过基类指针删除,就应该优先考虑虚析构,否则派生对象销毁会出问题。
细看: 对象模型、内存布局、类与多态
13. 线程池怎么设计,为什么不能只是开一堆线程?¶
速答: 线程池的核心不是线程复用四个字,而是任务队列、拒绝策略、优雅关闭和并发度控制;否则很容易把系统拖进上下文切换和资源耗尽。
细看: 设计模式、系统设计、高并发项目问答
14. 为什么 unordered_map 不一定比 map 快?¶
速答: 因为哈希冲突、rehash、负载因子和局部性都会影响实际表现;平均 O(1) 不是无条件更优。
细看: STL 容器深挖
15. 什么是拥塞控制?和流量控制有什么区别?¶
速答: 流量控制是别把接收端打爆,拥塞控制是别把网络路径打爆;这两个概念腾讯网络题里很容易连着追。
细看: 网络进阶:重传、拥塞控制、长连接、WebSocket
16. 如果线上 CPU 飙高,你会怎么排?¶
速答: 先看监控和线程热点,再用 top/perf/火焰图 定位是死循环、锁竞争、自旋还是系统调用过多;腾讯这类题很喜欢看你是不是会从现象收敛到函数级热点。
细看: 设计模式、系统设计、高并发项目问答
17. 如果支付或高并发服务 RT 突然升高,你先怀疑什么?¶
速答: 优先看下游依赖、线程池积压、数据库慢查询、锁竞争和网络抖动;答题时最好体现“先全局后局部”的排障顺序。
细看: 项目面试题:性能优化、线上排障、系统思维
18. 如果让你设计一个高性能 C++ 服务器,你会从哪几层拆?¶
速答: 一般从网络层、并发层、内存层、协议层、稳定性层和数据层拆;腾讯这种题更看你有没有系统分层意识。
细看: 设计模式、系统设计、高并发项目问答
19. 为什么高并发服务里日志本身也可能成为性能问题?¶
速答: 因为同步刷盘、字符串拼接、锁竞争和大量 IO 都会吃掉请求路径时间,所以日志也要分级、异步、限量。
细看: 项目面试题:性能优化、线上排障、系统思维
20. 如果一个服务需要同时兼顾性能和可维护性,你会在哪些点做取舍?¶
速答: 常见取舍点在运行时多态 vs 模板、多线程复杂度 vs 易维护、缓存收益 vs 一致性成本;腾讯这类题很适合答工程平衡。
细看: 设计模式、系统设计、高并发项目问答
21. 问完项目后,常见还会追哪些八股?¶
速答: 腾讯客户端/支付线公开面经里很常继续追 malloc/new、多态、计网、数据库数据组织方式;答题要从“语言 + 系统 + 存储”三条线一起接。
细看: 内存管理 / 网络 / 数据库与缓存
算法 / 题单补充¶
- LeetCode 公司页:https://leetcode.cn/company/tencent/
- 建议优先刷:哈希、堆、树、字符串模拟、状态机类题
答题提示¶
- 腾讯这类题适合用“语言实现细节 + 系统链路 + 工程代价”三段式来答。
- 如果问到对象模型/智能指针,主动补一句工程影响(性能、生命周期、可维护性)会更稳。
- 如果问到支付或高并发服务,排障题尽量答成“先监控、再线程/依赖、再函数热点”。
这一类面经的腾讯风格¶
公开面经里,腾讯 C++ 岗常见风格是:
- 一上来先问项目
- 很快切到对象模型、STL、智能指针
- 再追网络、数据库、算法和系统设计
- 客户端 / 游戏线会明显更爱问红黑树、可靠 UDP、内存模型、多线程