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

1. 项目中遇到的问题及解决方案

2. 多线程结构从有锁到无锁的改进点

  • 消除锁竞争、线程阻塞与上下文切换
  • 使用原子操作 atomic 替代锁
  • 使用 CAS 实现无锁更新
  • 无锁队列/环形缓冲区
  • 线程数据隔离,减少共享资源
  • 避免死锁、优先级反转

3. unique_lock 和 lock_guard 的共同点和区别

共同点:

  • 都是 RAII 风格,自动加锁、自动解锁
  • 防止异常导致死锁

区别:

  • lock_guard:轻量、无额外开销、不能手动解锁
  • unique_lock:灵活、支持手动 lock/unlock、可转移所有权、可配合条件变量、性能略低

4. 项目场景相关问题

5. 实习相关问题

6. 是否熟悉 CUDA 编程

了解核函数、线程块、共享内存,可用于并行计算加速,适用于模型推理、矩阵运算、图像处理等场景。

7. 短期内职业规划

深耕 C++ 高性能/高并发开发方向,专注自动驾驶领域;夯实底层原理、性能优化、高并发架构;快速成长为能独立负责核心模块的开发工程师。

8. 条件变量为什么必须配合 unique_lock?

  • 条件变量需要在等待时自动解锁、唤醒时重新加锁
  • lock_guard 不支持手动解锁,无法满足
  • 只有 unique_lock 具备 lock/unlock 能力,因此必须配合使用

9. C++ 内存序 memory_order 的作用?常用三种?

  • 解决多线程下指令重排、可见性问题
  • memory_order_relaxed:无同步,仅保证原子性
  • memory_order_acquire / release:读写屏障,解决可见性
  • memory_order_seq_cst:全局一致,默认模式,最安全

10. shared_ptr 引用计数是线程安全的吗?对象呢?

  • 引用计数是线程安全的,底层用原子操作
  • 对象本身不是线程安全的,读写对象仍需要加锁

11. epoll 水平触发 LT 与 边缘触发 ET 区别?

  • LT:只要有数据就持续触发,易用
  • ET:只有状态变化时触发,效率更高,必须非阻塞

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

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

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

全部评论

相关推荐

不会做题的小熊:我感觉我就算是找不到工作,我也不会作弊进去,作弊进去感觉一方面是自己不踏实,其次就是都靠作弊了,那后面肯定工作的心态是不一样的,没有一种内驱力。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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