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++,其实只停留在“会用”。

但大厂真正想要的是:

理解底层的人。

所以不要只背八股。

真正重要的是:

理解为什么。

全部评论

相关推荐

评论
1
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务