这一次面试真的很感慨,能走到三面已经是我意料之外了。非常感谢我遇到的各位面试官,很和蔼,我不会的问题引导着我去思考,我也深刻地认识到我对于各个组件的底层原理理解的薄弱。一面:拷打了一些八股,对于我简历上的项目问了更深的一个层次,我勉勉强强回答上来,在问的过程中问到了一些偏底层的东西,比如说:C++在分配内存,操作系统,CPU等都做了些什么工作,为什么能够分配内存等。手撕了一道算法题,秒了。二面:被匹配到了基础平台研发部门,不得不承认这个部门的面试很难,开局手撕了两道算法题,秒了。然后没有问任何项目相关的问题,问了很多基础的知识,又一次问到了C++智能指针相关,C++虚拟内存分配等,malloc分配内存的全过程(如前128K使用了哪些系统调用,后面使用了哪些系统调用,这些调用做出了哪些优化等);TCP相关的一些知识;僵尸进程等相关知识点。答得磕磕绊绊,面完半个月没有信息,以为挂了,结果走到了三面。三面:面试官是一个很和蔼的大叔。当时的面试状态也非常糟糕,面的一塌糊涂,把面试官都面笑了,不知道该问我什么了。先是根据之前的面评,问了更底层的智能指针(共享指针部分)让我手写一个共享指针(非模板库)。我对于这些知识很多仅限于理论,平常都是写一些算法,项目上只是会用即可,有时候用法也记不清需要现查,确实很少用过这些。我凭借着印象大概描述了一下,存在优化上的问题。后面谈到了交叉引用,面试官让我用模板库里的实现一个交叉引用的案例,实话实说,想不起来。后面面试官又挑了redis问了关于快照与日志相关的问题,问到了快照在内存上是如何操作的,在保存为快照的过程中依旧会有缓存的更新,redis与操作系统都做了哪些工作等。不会,我凭理解与印象回答了一部分,答得不对。等等等等,一大堆抽象的事情。手撕代码并不是算法题,没有写过这种题,不会,真的想不出来。大致意思是有一个链表,你不能将其放到内存中,你有一个函数getnext可以取下一个数据,你不知道有多少个数据,你有一个函数next可以判断是否还有下一个。现在你需要随机的等概率的取出K个节点(每一个节点被选择的概率均为一样的),我的思路被驳回了,链表只能扫描一遍,不能重复扫描,各个节点之间被选择必须是独立的,选择节点必须是等概率的。最后没写出来。挂了。很难受很惋惜也很感慨。也怨不得别人,菜了就是菜了,挨打就立正。下去接着下功夫吧,只能看客户端能不能把我捞起来,或者春招再战。不过拼多多的工作强度确实很大啊,哈哈,一面的面试官一脸的憔悴,黑眼圈特别大。