腾讯微信平台-微信支付团队-软件开发-后台开发方向(Java)
注:腾讯非常重视计算机基础和项目经历,虽然我投的Java开发,但纯Java的八股一句没问。
总时长 70min (40min笔试题目+ 30min面试)
上来先手撕两道代码:
1.反转链表
2.LRU缓存
面试官提示我多加一些注释,这个在后续考察里都是可以看到的,而且就算代码没写出来,你加一些注释也可以表明你的思考对吧。
两道题都是比较常见题目,我用的腾讯面试的平台,虽说挺好用的(有白板,可以画图;有ide,有提示;功能反正挺齐全的),但是对于代码的考察十分严格,比ACM模式还难,除了要自定义链表节点(这个很多同学平时不注意,一写就废,不信你现在立马拿张纸看能不能流畅的把链表节点定义准确无误写下来),输入输出的用例都要自己写,这就涉及到很多问题,比如说你一条链表的输入用例格式该是如何?(1->2->3?1,2,3?123)然后你还要对你这个特殊的格式做一些额外处理,所以平时练习的时候一定要注意。
面试官俩题给了我40min,最后墨迹了50min也没写出来,第一题我在定义结点的时候,给构造函数加了返回值,然后死活出不来结果,第二题直接不会写,反正最后一个没AC。
然后是计算机基础-计算机网络部分(因为我简历上计算机基础知识只写了计网的一些,他也就没再问其他的科目)
1.说一下HTTP状态码301和302分别代表什么,它们有什么区别(答不上来,根本没了解过,然后退一步问我)
2.有了解哪些HTTP的状态码吗(答不上来,再退一步问我)
3.TCP相关有了解吗,说一下三次握手和四次挥手(这个我准备的非常充分(毕竟直接写在简历上的(所以说刚开始面试的时候,不建议把简历上的技能点写的太过宽泛,就比如:熟悉计算机网络。然后就没了,这种就给了面试官很大发挥空间,刚开始面试可以引导性的去写,比如)),借助平台的共享白板,可以边画边答)
4.(接上个问题)那为什么断开连接的时候要多一次,区别在哪里呢
5.(进一步追问)(四次握手中)什么情况下会出现TIME_WAIT
然后开始撕项目:
1.平时有了解哪些密码学的加解密的算法(这个可能在他们业务中有使用,对于这种问题我们还是要提前了解下所面试的部门其业务中会涉及到哪些核心的知识块,比如:支付部门-密码学,学有余力的情况下,提前做做功课也是极好的)
2.(答不上来,又转到项目上)项目中有用到哪些加解密的算法(我项目中有些JWT令牌技术,模模糊糊说了两句)
3.你这个项目是在什么背景下做的
4.项目有上线吗,有没有人用呢
5.我看你这写着70多个接口的独立开发,其中管理端45个,用户端25个,规模还挺大的,能够介绍一下大概都有哪些功能呢
6.你这边用户使用的小程序,你是如何获取到是哪个用户在使用这个小程序呢,或者说你的后台收到用户的请求,要过来买药,那你的用户标识是什么,你怎样来标识一个用户?
7.简单说一下JWT令牌这一块的技术细节
8.看你项目里应该还有一些存储的内容,问一下缓存击穿、穿透、雪崩分别是什么样的概念以及有哪些应对方式?(这个我很熟,本想好好发挥一下来着,但时间快到70min了,就打断我了)
其他
1.你们研究生日常还有一些什么项目?跟导师在实验室有什么项目?
2.我看你的实验室是和物联网相关的,你有没有做过这一块的?
总结:或许面我的面试官不是搞Java的,一个纯Java问题都没问,但感觉腾讯的面试更偏向于计算机基础和项目,尤其是要根据自己的简历以及对应的部门有的放矢的学习,前期面试项目这块一定要有非常熟悉的点,聊着聊着面试官问不下去了就让你自己说了,说说你这个项目有啥特色,你哪块做的比较好,这时如果有你提前准备好的话,就能好好发挥一下了。
附上投腾讯的简历,不带简历的面经就是在耍流氓!!!(没有对应简历,面经参考意义不大),还是要对照简历去看待以上问题