腾讯-微信后台(腾讯系二进宫)
继续发面经攒好运
7.9 一面 3小时39分钟
这是我面过最长的一段面试了,从七点半面到十一点多,饭都没吃
#####笔试
开始就要做题,三道编程,最后还有三小道Linux杂题,要求一小时做完。
第一道是比较版本号,不能用额外空间,第二道写lru,第三道实现一个快照,最后一题是写Linux统计文件行数、输出文件中出现某个字符的行信息、简述符号链接和硬链接的区别
编程题中第二道力扣原题,运行成功了;第一题调用函数时大小写没注意,一直error,就只给他讲我写的代码思路,但是面试官很强硬的要求必须运行,弄了好一会儿,后面是面试官发现函数调用问题,可惜因为没有提前调试,现场没运行出来,出现了数组越界(尴尬);第三题看题目感觉像mysql的mvcc版本链,套用这个思路去写,写到一半面试官说时间到了,看我还在写就多给我十分钟,最后写出来运行成功了,但是面试官说版本链复杂度为On,效率不行,让我思考有没有更好的方案,我想了个加头尾节点,或者用map或牺牲空间用数组来做版本映射(说完我自己都觉得不行,只能继续头脑风暴),好不容易想出用跳表优化,面试官说没那么复杂,还有更好的方法吗。最后还是没想出来,不甘心,逮着面试官问他的想法,他说用平衡树或者红黑树,然后二分查找(说完秒懂,之前看过这种解决思路,但是一时半会想不起来了)
最后Linux统计文件行数没用过,写不出来,其他两个写出来了,也口述了思路,但是软链接和硬链接有点忘记了,给他讲了个大概,没答好。
#####面试
开始面试,把我的项目底裤都看完了,挖的很深,设计理念以及实现细节都拷打了一遍,说到不明白的还让我用白板手绘思路(后续基本全程白板讲思路),还问了服务的落地情况,以及使用场景中的可用性问题,没考虑?那怎么解决?还有没有更好的方法?
关于实验室项目的发散问题,我基本就靠着redis和mysql的一些机制去衍生想法回答他,因为这两个工具在可用性上都考虑的很到位,学以致用就是。但是离谱的是他好像还了解加解密相关的算法,简历上提了一嘴,被追着问aes和sm3的算法区别,为什么不用sm4,这块有点忘记了,答得不好。
第二个项目是分布式的东西,本着展示自己的目的,把项目思路和自己做完项目后的思考给他讲了一遍,接着就被深挖细节拷打,让我调出项目代码给他看,一边看一边讲,还好我真的写了。最后又问了可用性怎么保证。问怎么和mysql联动,一致性怎么保证,反正项目中有的,没有的都要问。面试官很懂技术,很多问题一针见血。
最后一个项目他没问。
问完项目又快速过了一下基础八股,还问了一些衍生问题,比如一进程多线程都了解,那多进程的模式了解吗,怎么使用呢,讲一下。被拷打了三个小时,现在已经不记得其他的题了,但是应该都答出来了。
最后反问环节一看时间我都乐了,问他是不是leader,面这么久,他说不是...然后问了业务场景,最后唠着唠着又向他输出我这段时间看了什么,有什么收获,他反问我的优势,在他面前已经不敢说优势了,就说暂时没想到(害怕)。
总的来说面试之前就没想着能过,所以面试的时候比较松弛,算是一个学习的态度,所以不会觉得压力大。不过还是挺有收获的,最后还问他要了个学习网站哈哈哈