跳转至

腾讯 C++ 面经真题整理

参考来源

高频真题

1. 你对 C++11/14/17 的新特性了解多少?项目里用过哪些?

速答: 常见就答 auto、智能指针、右值引用/移动语义、lambdanullptrconstexproverride,再补一句项目里真正高频的是智能指针、移动语义和 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/freenew/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、多态、计网、数据库数据组织方式;答题要从“语言 + 系统 + 存储”三条线一起接。
细看: 内存管理 / 网络 / 数据库与缓存

算法 / 题单补充

答题提示

  • 腾讯这类题适合用“语言实现细节 + 系统链路 + 工程代价”三段式来答。
  • 如果问到对象模型/智能指针,主动补一句工程影响(性能、生命周期、可维护性)会更稳。
  • 如果问到支付或高并发服务,排障题尽量答成“先监控、再线程/依赖、再函数热点”。

这一类面经的腾讯风格

公开面经里,腾讯 C++ 岗常见风格是:

  • 一上来先问项目
  • 很快切到对象模型、STL、智能指针
  • 再追网络、数据库、算法和系统设计
  • 客户端 / 游戏线会明显更爱问红黑树、可靠 UDP、内存模型、多线程