C++大厂常考面试题总结,真正能拉开差距的不是背答案
很多人学C++的时候都有一种错觉:
把语法学完,就能面试了。
但真正到了大厂面试才发现,C++面试根本不是“会不会写代码”那么简单。
尤其是后台开发、客户端、游戏开发、基础架构、高性能服务这些岗位,C++面试深度非常夸张。
很多学生刷了几百道算法题,结果二面直接被:
- 智能指针
- 虚函数
- 内存模型
- 多线程
- STL源码
- 左值右值
- 线程同步
直接问懵。
更真实的是:
很多C++八股不是“知道概念”就够了,而是会连续追问。
比如:
“shared_ptr为什么线程安全又不完全线程安全?”
“vector扩容为什么是2倍?”
“虚函数表存在哪里?”
“new和malloc区别是什么?”
“右值引用解决了什么问题?”
“mutex和atomic区别是什么?”
这些问题一旦答浅了,面试官会一直往下追。
所以很多人真正挂掉的原因不是没学过,而是:
只会背,不会理解。
核心大厂开发面试题以及基础八股文资料汇总:
https://www.nowcoder.com/creation/manager/columnDetail/Mq7XWW
C++大厂高频面试题分类
一、C++基础高频题
这是所有面试必问区域。
基本逃不掉。
常见题目:
- new和malloc区别
- delete和free区别
- const作用
- 指针和引用区别
- 宏和inline区别
- static作用
- define和const区别
- sizeof和strlen区别
- 野指针是什么
- 内存泄漏怎么产生
- 什么是悬空指针
- 深拷贝和浅拷贝
- struct和class区别
- C和C++区别
- extern作用
- volatile作用
- typedef和using区别
二、面向对象高频题
很多公司特别喜欢问。
尤其是腾讯、字节、华为这种。
常见题目:
- 什么是封装
- 什么是继承
- 什么是多态
- 多态底层原理
- 虚函数实现原理
- 虚函数表存在哪里
- 构造函数能否是虚函数
- 析构函数为什么建议虚函数
- 纯虚函数是什么
- 抽象类是什么
- override和final作用
- public/private/protected区别
- 菱形继承问题
- 虚继承原理
- RTTI是什么
- dynamic_cast底层原理
三、STL高频题
大厂尤其爱问STL源码。
因为这部分最容易区分水平。
高频问题:
- vector底层实现
- vector扩容机制
- vector为什么连续存储
- list和vector区别
- deque底层结构
- map和unordered_map区别
- 红黑树原理
- 哈希冲突怎么解决
- set底层实现
- priority_queue底层实现
- iterator失效问题
- resize和reserve区别
- emplace_back和push_back区别
- sort底层实现
- allocator是什么
四、智能指针高频题
现在基本必问。
尤其现代C++岗位。
高频问题:
- shared_ptr原理
- unique_ptr和shared_ptr区别
- weak_ptr作用
- 循环引用怎么解决
- 引用计数怎么实现
- make_shared优势
- shared_ptr线程安全吗
- auto_ptr为什么废弃
- RAII思想是什么
五、左值右值高频题
这是很多人最容易崩的区域。
因为特别抽象。
高频问题:
- 左值和右值区别
- 什么是右值引用
- std::move原理
- move之后对象还能用吗
- 完美转发是什么
- universal reference是什么
- forward作用
- 移动构造函数
- 拷贝构造和移动构造区别
- 为什么需要移动语义
六、多线程高频题
现在很多岗位都会问。
尤其后台、服务器、音视频。
高频问题:
- 进程和线程区别
- 线程同步方式
- mutex原理
- 自旋锁和互斥锁区别
- 死锁产生条件
- 如何避免死锁
- condition_variable作用
- atomic原理
- CAS是什么
- ABA问题
- 内存屏障是什么
- 读写锁是什么
- 信号量是什么
- 线程池原理
- future和async区别
七、操作系统高频题
C++岗位经常一起问。
高频问题:
- 虚拟内存是什么
- 页表是什么
- 用户态和内核态区别
- 进程调度算法
- mmap原理
- 零拷贝是什么
- select/poll/epoll区别
- epoll为什么高效
- Reactor模型
- Proactor模型
- TCP三次握手
- TCP四次挥手
- TIME_WAIT作用
- 粘包问题
- HTTP和HTTPS区别
八、Linux高频题
后台开发基本逃不掉。
高频问题:
- Linux常用命令
- grep/sed/awk
- top和ps区别
- gdb怎么调试
- core dump分析
- 动态库和静态库区别
- dlopen原理
- fork原理
- exec系列函数
- 管道通信
- socket编程
- select和epoll实战
- Makefile原理
- cmake使用
- gcc编译过程
九、设计模式高频题
很多中高级岗位喜欢问。
高频问题:
- 单例模式
- 工厂模式
- 观察者模式
- 策略模式
- 责任链模式
- 适配器模式
- 装饰器模式
- MVC思想
- 为什么需要设计模式
十、项目拷打类问题
真正拉开差距的地方。
很多人八股会背,但项目一问就崩。
高频问题:
- 项目最大难点是什么
- 怎么定位Bug
- 性能怎么优化
- 为什么这样设计
- 有没有出现死锁
- 内存泄漏怎么查
- CPU占用高怎么定位
- 如何做压测
- 怎么保证线程安全
- 如何优化延迟
- 为什么不用其他方案
大厂真正喜欢的,不是“背诵型选手”
很多人最大的问题是:
只会标准答案。
比如:
“vector底层是动态数组。”
然后就没了。
但真正大厂会继续问:
- 为什么扩容2倍
- 为什么不是3倍
- 扩容后iterator为什么失效
- realloc为什么不用
- vector线程安全吗
这时候如果只是死记硬背,很快就会露馅。
所以C++真正的学习方法一定是:
“源码 + 原理 + 场景”。
不是只看八股。
C++面试最有效的准备方法
很多人刷了半年效果还一般。
原因是方法不对。
真正有效的方法是:
第一阶段:建立知识体系
先把:
- C++基础
- STL
- 多线程
- Linux
- 操作系统
- 网络
串起来。
不要东学一点西学一点。
第二阶段:高频八股重复刷
C++八股有明显高频。
很多问题反复出现。
一定要:
- 高频重复
- 自己讲出来
- 能扩展回答
而不是只看答案。
第三阶段:源码理解
重点看:
- vector
- shared_ptr
- thread
- mutex
- unordered_map
理解设计思想。
第四阶段:项目深挖
项目一定要做到:
“别人继续追问,你还能答。”
很多人项目只停留在:
“我用了XXX技术。”
真正厉害的人会说:
- 为什么这样设计
- 遇到什么问题
- 怎么优化
- 为什么不用别的方法
最后
C++面试真正难的地方,从来不是语法。
而是:
知识深度。
很多人学了几年C++,其实只停留在“会用”。
但大厂真正想要的是:
理解底层的人。
所以不要只背八股。
真正重要的是:
理解为什么。
