主要面试了四家,车载系统中间件方向,关于c++的面试内容大概如下:
第一家
两个面试官,一轮面试通过,项目经验比较匹配,问的比较详细,c++稍微问了几个问题:
1. 多重继承如何避免二义性
2. unorder_map 底层数据结构是?如何避免冲突
3. template的注意事项,必须在.h实现定义,为什么?
4. 如何查看可执行文件的链接库, ldd还有 readif?
第二家
一轮面试fail,感觉面试官偏年轻自傲,纠结于一些技术细节,项目经验基本不懂:
1. vector如何释放多余内存,swap
2. shared_ptr是否阅读过源码,是否线程安全
3. order_map与unorder_map底层是什么?红黑树原理?为什么要左旋右旋
4. 多态的实现,重写与重载,虚函数表是跟着类还是实例?
5. mutex的一般用法,多线程编程时需要引用哪些库
6. linux 的内存模型
7. lambda表达式如何判断this是否存在
算法题
链表反转
第三家
二轮技术面+hr面,技术与项目经验的考察相当全面系统,不会纠结某个细节,互有沟通学习:
1. unique_lock与lock_guard的区别
2. 线程互斥的多种实现方法,原理,区别,condition变量设计
3. shared_ptr的实现原理,是否线程安全?make_shared与直接用shared_ptr初始化的区别
4. weak_ptr的使用场景及原理,unique_ptr的实现原理
5. 如何禁用拷贝构造函数? = delete
6. 死锁时如何检测
7. std::move的作用,使用场景?
8. 设计模式:单例?策略模式?工厂模式?发布订阅模式?是否用template实现过设计模式
9. 使用template的场景,如何获取类类型(萃取),在.c定义template会报什么错(redefine)
10. lambda表达式的几种捕获方法,生命周期
11. 发布订阅模式(dds?)的生命周期
算法题:链表是否有环,环的长度如何计算;c++实现version大小比较
第四家
三轮技术面,还在等通知
mqtt/restful/dds等通信机制的区别与选取标准
(待补充)
算法题:
反转链表,寻找数组中大于一半长度的值
转载:https://blog.csdn.net/qt_dog/article/details/128555074