头条一二三面(后台开发)
约的下午1点面,前面排队18个人,嗯,,排了大概58min
一面(40min):
0. 自我介绍(blalala...)
1. 上来就撕代码,找出数组中只出现一次的那个数,其他都出现两次;(异或)
2. 接上面,如果数组中有两个数只出现一次呢?(懵...纸上划了划,还好几分钟后突然灵光一现)
3. 悲观锁和乐观锁;
4. 讲讲你知道的锁;
5. ReentrantLock实现原理;
6. 接上面,讲到了AQS;
7. 讲讲AQS怎么实现的Fair和NoFair;
8. ssh是什么原理?(RSA非对称加密,生成一个公钥和一个私钥)
9. 项目用到了redis,讲讲你项目用到了redis的哪些特性;
10. redis的单进程单线程模型;
11. 延伸到IO多路复用;
12. 一路延伸到epoll、poll、select(主要讲了三者使用的数据结构区别以及各自的特点);
13. 再次手撕代码,BST中任意两个节点差的最小值;(题应该算简单的,一紧张脑子就不好用了,磨蹭了会儿才搞出来);
14. 序列化;
15. 看到简历上有写zookeeper,zookeeper怎么保证数据一致性的;
16. 简历上面有个项目是自己做的一个小轮子,问应用场景;
17. over
忐忑不安的等了大概二十几分钟(??),开始二面:
0. 自我介绍;
1. redis支持哪些数据类型;
2. redis中的字符串类型是怎么实现的;(SDS)
3. SDS相比原生的char[]有什么优点;(共有4个优点,前不久刚看过,当时只回忆起1个优点。。)
4. 关于redis对象系统的一个问题;(我说忘记了,记得redis设计与实现有写,面试小哥:忘记了那就不问了)
5. cookie、session、token三者区别以及优缺点(熟悉归熟悉,突然很懵,说得不全,我说我组织一下语言,面试小哥:别组织了,干脆我问你吧)
6. 讲讲一致性hash,然后套路了一波虚拟节点;
7. git rebase实现原理(我说没用过,不是很熟悉,只讲了个大概,面试小哥:那跳过吧)
8. 简历上作死写了不熟悉的Go语言,那讲讲你对Go的理解吧(我直说学过一段时间,但是不熟悉,然后讲了自己对Go感受比较深的一个特性,协程);
9. 撕个代码放松放松,判断二叉树是否中心对称(我来了个深呼吸,面试小哥:别紧张,放轻松);
10. 继续放松,大数相乘;(劈里啪啦一顿敲,面试小哥好像没见过我这种大数相乘的算法??)
11. 面试小哥:好了,等下一面吧:)
又忐忑不安的等了大概半小时(??),终于,等到了面试官向你发起面试邀请,然后一阵阵卡顿,退出、重登,又是一阵卡顿,如是三番,面试官留言:网络太卡,我联系HR给你换一个面试官,看会不会好点。。
又是一阵紧张的等待,抓紧时间复习以前写的题。。。
三面开始(40min):
0. 自我介绍
1. 上来就是一个堆排序,面试大哥:5分钟写完吧,然后关了语音和视频不知干嘛去了;
隐约记得堆排,一阵敲,5min过去,有个数组越界的bug没搞定,有点慌,不知过去多久,面试大哥回来。。
我:大致是这样,不过有个小问题还没搞定,数组越界了。。
面试大哥:你觉得出现问题的在哪行?
我:指了下xx和xx行..
面试大哥:为什么会越界呢?
沉思,我:不应该啊,我判断了越界条件啊..
无果,面试大哥:可能是牛客的问题吧,这个先不管了。
事后查看,是我把子节点用2k和2k+1计算,但是数组还是从0开始(当时脑子真是懵了)。。
2. 讲讲项目
3. 项目用到了netty,问了netty相关的一个问题,具体是什么忘了。。
4. 然后又是select、epoll;(详细讲了一遍)
5. 项目用到了protostuff序列化库,很多面试官都以为是Google的protobuf,然后就讲讲它们的区别 :)
6. 项目用到了zookeeper,讲讲你对zk的理解吧;(主要讲了zk的数据模型和watch机制,zab记得不牢不敢讲)
7. 你对什么感兴趣?(我说了中间件和分布式)
8. 你能实习多长时间?
9. 你意向的工作城市,北京还是上海?
10. 最后,介绍了自己的部门,然后说:恭喜你,你过了!
第一次得到面试的肯定,感受到丝丝兴奋~
总结:最近几场面试下来感受最深的就是,面试需要充分的准备以及运气。
充分准备不用说,之前在面经里频繁看到select、poll、epoll,也看过一些博客,但每次还是一知半解,前些天下定决心非要把这几个函数调用弄懂,花了一两天时间,阅读了很多博客(有些文章质量真是堪忧,估计作者也没真搞懂,还copy来copy去)以及书籍(Unix网络编程卷一第四五六章,讲得真的是好),甚至还找来源码读了一遍,才终于有底气可以讲清楚这三个函数。
还有就是运气,今天三次面试的面试官都很nice,比较match自己的风格,所以运气还不错。有时候面试不成功,并不是你的实力不行,真的是面试官和你不够match,当然,这是建立在你准备充分的基础上。
祝各位都有一个好offer!