Round1:
先自我介绍,然后聊了聊项目。
问题基本由浅入深。
1、说说从浏览器输入URL到加载出网页的基本过程。
2、网络协议栈
3、HTTP状态码
4、TCP三次握手,四次挥手
5、四次挥手过程中TIME_WAIT状态。
6、如果TCP连接只有两次握手会有什么问题?我答如果服务端的ACK报文丢失,服务端已经打开的socket,但是client端以为服务器不可达,造成服务端的socket一直打开无法关闭占用资源。然后面试官就接着问如果socket不能关闭会占用哪些资源。
7、c++ unordered_map实现原理。如何实现扩容的。我不太清楚unordered_map如何扩容,面试官就问当unordered_map出现哈希碰撞的时候,如果是我会如何解决。
8、说说B树和B+树,为什么mysql索引采用B+树而不是二叉树,B+树相对B树有什么优势。MYSQL在通过B+树搜索叶子节点记录的过程中,是如何判断接下来该访问哪个孩子节点的?
9、编程题:单链表,第1、3、5、7位等奇数位的元素是递增的,偶数位的元素是递减的,把整个链表转换成一个降序链表,要求线性时间复杂度,常量空间复杂度。
10、CPU用户态和内核态有什么区别?库函数和系统调用有什么区别?
11、什么是中断?中断有什么用?
Round2:
自我介绍,针对项目相关问了一些
1、STL问题,vector是如何实现扩容的,vector是线程安全的吗?
2、auto_ptr和shared_ptr。
3、写一个线程安全的map。我写的map就是传统的一个map,一个读写锁。面试官又问可不可以继续优化一下。
4、写出快速排序的时间复杂度表达式,假设每次参考值都放到了数组中间的位置。
5、编程题:单链表插入排序。
Round3:
这次没有自我介绍了,问了问项目经历,技术栈,完成了哪些工作,解决了哪些重点难点。
1、面向对象的相关知识,类,对象、接口等。
2、编程题:求二叉树任意两点间距离的最大值。
3、编程题:假设数据库里面有几十万个国内IP地址段,给定一个IP,如何快速判定这个IP是不是属于国内IP。
4、你理解的继承、封装、多态。
大致就记得这么多了,有的问题可能遗漏了。