金山 C++开发 面经
2022/11/18 一面(30min)
1、自我介绍
2、介绍select
3、poll、epoll和select的区别
4、多态
5、析构函数声明为虚函数
6、棱形继承(虚继承)
7、析构函数能否抛出异常
8、用catch捕获异常后,抛出异常的代码是否还往下执行
9、malloc和new的区别
10、free如何知道释放多大的内存空间
11、vector的扩容策略
12、map和unordered_map的区别
13、红黑树的特点
14、是否用过QT
反问:
1、公司业务方向?
主要和QT相关。
2、培养机制
3个月集训+1年导师
11/22 二面(45min)
1、C和C++的struct的区别
2、如何把基类指针转为子类指针,能否保证安全转换
3、如何判断dynamic_cast是否转换成功,dynamic_cast的返回值(根据返回值是否是nullptr判断是否转换成功)
4、字节对齐(字节对齐规则)
5、static的作用(局部变量、普通函数、成员变量、成员函数)
6、vector添加元素的过程,vector分配在栈上还是堆上,sizeof求vector大小(3个指针,12个字节)
7、class有静态成员变量和没有静态成员变量的sizeof的区别
8、class的成员函数加virtual和不加virtual的sizeof的区别(虚表指针)
9、map的底层原理,查询时间复杂度(红黑树,O(logn))
10、list的底层原理,查询时间复杂度,如何进行排序及时间复杂度
11、介绍你最熟悉的项目