一面
1.C++中的继承,在祖父类、父类和子类这样一个场景中,子类对象的空间构成?
虚函数给对象空间造成的影响?
虚函数表的组成?
2.手撕代码
-
一个数组,其中元素有正有负,求最大子段和(连续子数组的最大和)
-
一个数组中有2N+1个元素,其中2N个元素相同,只有一个元素与其他元素不同,请你找出这个不同的元素?
3.多线程
请自实现一个生产者-消费者模型,仓库中存放int型元素,当元素个数>20时才可以消费,当元素个数<50就生产,仓库中的初始元素个数可以为20~50中间一个数量。生产者线程和消费者线程可以有多个。先说明需要考虑哪些问题,以及使用什么数据结构。
这里面,阻塞的话用什么实现?while还是sleep?它们有什么区别?
4.智能指针-shared_ptr
智能指针是线程安全的还是非线程安全的?
shared_ptr中都实现了哪些方法?
5.内存管理
场景:给定一个1G大小的空间,在一个循环的程序中,每次都会申请一个大小为100字节的string对象空间,使用完再释放。在每一次循环中,申请的空间个数可能不等,这一次多申请几个,下一次少申请几个。每一次循环中,在释放空间时可能只释放其中的几个空间。在这样一个模型中,如果做好空间管理?
面试官指出,这个内存管理问题在python里面有非常成熟的解决方法,让了解一下其底层实现。
二面
1.自我介绍
2.项目介绍
3.TinyHttpd讲一下?
4.I/O多路复用模型:select、poll和epoll的区别?
5.动态库和静态库的理解和区别?
6.Linux下进程间通信的方式有哪几种?
-
Linux下常见的信号
7.印象中面试官小哥问了很多Linux下网络编程的东西,都是比较基础的东西。
8.你有什么要问的?
三面
1.自我介绍
2.项目介绍
3.项目中遇到的内存泄漏和内存越界问题?
4.如果在平时写程序时避免或者检测到这种内存泄漏和内存越界问题?也就是你如何自己实现一个第三方检测工具?
5.你有什么要问的?