理想汽车 后端开发-C++ 三面

1. 项目拷打

2. vector vs 普通数组

  • vector:动态扩容、连续内存、自动管理内存、安全、支持迭代器、自带API
  • 普通数组:静态大小、栈/静态分配、手动管理内存、无边界检查
  • 日常开发优先 vector,极致性能场景可用数组

3. vector push_back 均摊 O(1)

  • 采用指数扩容(1.5倍/2倍)
  • 扩容次数极少,所有插入的总拷贝次数为线性级
  • 均摊后每次插入效率为 O(1)

4. vector vs list

  • vector:连续内存、随机访问快、尾插尾删快、CPU 缓存友好
  • list:链表结构、任意位置插入删除快、迭代器不失效、随机访问慢
  • 遍历读多用 vector,频繁中间插入用 list

5. 连续内存对 CPU Cache 好处

  • 空间局部性极佳,相邻数据会一起加载到缓存
  • 缓存命中率大幅提升,减少低速内存访问
  • 速度比缓存不命中快 10~100倍,高并发差距极大

6. inline 函数 vs 宏

  • inline:C++ 关键字、类型安全、调试友好、无副作用、作用域安全
  • 宏:纯文本替换、无类型检查、易出错、调试困难
  • 现代 C++ 一律用 inline,弃用宏

7. 长期职业发展规划

8. 为什么选择自动驾驶方向

9. 虚表、虚指针、多态底层内存布局

  • 含虚函数的对象,头部会多一个虚指针(vptr)
  • 虚指针指向虚表(vtable),虚表是虚函数地址数组
  • 多态的本质:运行时通过虚指针查找虚表调用函数
  • 多继承:对象含多个虚指针;虚继承:共享基类+偏移表

10. 完美转发 + 引用折叠原理

  • 引用折叠:只有 T&& + && 才是右值,其余都是左值
  • forward:还原参数左值/右值属性,实现完美转发

11. 移动构造/赋值被编译器删除的4种情况

  • 显式定义了拷贝构造或拷贝赋值
  • 类中有不可移动的成员变量
  • 基类不可移动
  • 显式定义了析构函数

12. 野指针、悬空指针、悬空引用区别

  • 野指针:未初始化的指针,指向随机地址
  • 悬空指针:指向已释放内存的指针
  • 悬空引用:绑定到已销毁对象的引用
  • 后果:未定义行为、程序崩溃、内存踩踏

13. C++ 无锁编程三大核心难点

  • ABA 问题:CAS 无法识别值被改回,需要版本号解决
  • 指令重排:编译器/CPU 乱序执行,必须用内存序控制
  • 缓存可见性:多核缓存不一致,需 acquire/release 内存屏障

14. 算法题:

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

C++ 常考面试题总结 文章被收录于专栏

本专栏系统梳理C++方向, 大中厂高频高频面试考点 , 内容皆来自真实面试经历,从基础语法、内存管理、STL与设计模式,到操作系统与项目实战,结合真实面试题深度解析,帮助开发者高效查漏补缺,提升技术理解与面试通过率,打造扎实的C++工程能力.

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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