一面
首先简单介绍了一下自己,然后聊了一下项目,由于项目和多线程相关,面试管就开始的他的机关枪式的提问
问了线程同步(锁,条件信号),线程安全(不了解),信号量等
进程与线程的关系,中间穿插让画出进程的内存分布
网络,说出SOCKET编程的相关函数,以及调用的顺序,问了select和epoll
算法,写了一个队列实现栈,然后问了hashtable的实现,以及hashtable的冲突解决办法
面试官是根据你的回答然后进行更深一部的提问,直到回答不上来,所以中间很多问题都不太记得了
几乎是一直处于快速问答的情况
二面
二面面试官特别温和。。
首先说明前面面试官问了的就不再问,然后问了一个C++类中,拥有一个该类的指针,在析构函数中判断这个指针不为空了之后去delete是否有问题,
实际是有问题,如果两个对象循环的引用会导致一个循环的析构,找出堆栈溢出
类的静态成员函数的参数是该类的一个对象,直接访问这个对象的私有成员是否有问题,答案没有问题,可以这么写
问了一个定时器的实现,每次选用定时器去循环检测时间最近的事件时间是否需要执行,采用什么数据结构,用最小堆
怎么判断一个序列是否为二叉排序树的后续遍历,被自己想复杂了,其实就是每次取序列最后一个数字,小于这个数字的连续的数列为左子树
大于这个数字的连续数列为右子树,递归的判断。
快排和堆排序选一个,写的堆排序,有个失误,在堆排序的时候最后的heapsize需要减一,这个地方大意写错了,要注意
三面
先聊了一下项目,说了一下项目为什么这么做,相对于别人的工具有什么优缺点
然后说到QQ的通讯方式,要求把QQ发送消息到对方接收消息的整个流程说一下,经过哪些设备,用到哪些协议
我说QQ应该是用的UDP,然后说的应用层来保证可靠性,然后扯到TCP和UDP的关系,聊了TCP的各种机制,比如拥塞控制,滑动窗口
问既然有报文确认,为啥还要使用滑动窗口
算法,也是leetcode上面类似的一题,一串珠子,有五种颜色的珠子,要求找出包含五种颜色的最短的序列,
写了一个算法,然后面试官说是首尾相连的珠子,然后修改,说了下思想,看了下代码
教训:面试写代码有疑问一定要先问,搞清楚题目限制条件和边界条件再动手写,心态要稳
最后和面试官聊了一下百度的工程师文化,面试官很耐心,跟我说了很多
只是最后走的时候我说谢谢,面试官也说谢谢,还和我握手,有点受宠若惊。