明明在北邮人上找了学姐内推,也收到邮件让我完善简历了,但后来还是发短信让我参加笔试,奇怪了,不管了,该走多少程序就走多少吧,这样的大公司也是抱着能走多远走多远的心态。
模拟笔试
收到短信的第二天就是模拟笔试,安排的还是很紧的,最近实在是忙成了狗,多线程工作令我有些过载,不过还好模拟笔试只是一小时,终于还是抽出时间。
前半个小时,15道选择题,其中掌握不熟练的有C++的语法题,指针题(free,delete的用法),计算设备的使用效率(多个任务,单CPU,双设备,可抢占),二分查找效率,时间复杂度的计算,网络层协议种类(传输层:TCP和UDP,网络层:IP,ARP,RARP,ICMP,IGMP)等等。
后半个小时,3道编程题,这时间对我来讲有些紧张,第一道生成N阶格雷码(去年在leetcode似乎做过),第二道求数组中出现次数超过数组元素个数一半的数,第三道是大数乘法(大二程设做过,大三汇编也写过一次,可是这次还是思路不清,加上时间紧迫,最后没有写完)。补充一句,腾讯的在线编程是可以支持Python的。
笔试
腾讯的正式笔试居然在清明放假的时候,也是够拼的,不定项选择没有一题我敢保证自己是对的,真是心塞塞啊,然后四道大题,第一题考sql写法,sql我只会简单的增删改查,每次还是查资料才写的出来,结果考个高级点的卡了我好久,最后也不一定写对;然后是编程题,问字符串删除任意字符后得到的保持顺序的最长回文字符串长度,回溯法写的蛋疼(后来看到讨论区做法很巧妙啊,先对字符串求逆,然后求最长公共子序列就好了),第二题纯模拟倒是写出来了,看来算法这块我还是欠缺的很,而且回溯之前一直用Python写,如果用C++可能又是另一种写法了,这个之后也要继续学习;最后问答题谈谈stack和heap的区别,也是随便扯了几条而已,总的来说这次笔试是不开心的,而且其中几题还偷偷用手机查了下,输了考试还输了人,不开心。
笔试结束后几天,突然收到短信,说更新了PC客户端的岗位要求,建议我转后台开发,可能是PC客户端投的人太多了,于是我就转了后台开发方向。
一面
腾讯在苏州街海润艾丽华酒店租了一层进行面试,挺近的。面试现场如战场,超级多人,超级多面试官,等着领号,像科目二考试一样,也接受霸面简历。
一面考题总结:
自我介绍,感觉得总结一个套路啊;
项目,还是讲的加密流识别,感觉不合今天这个面试官胃口;
网络,TCP三次握手;
数据库,MySQL存储引擎,Innodb的索引;
操作系统,线程安全,poll,select,epoll的区别;
数据结构,红黑树,哎,基本不懂,平衡搜索二叉树还稍微懂点;
日志分析,日志包含两项,第一项是IP,第二项是时间,日志有5亿条,IP去重后也有1亿条,而内存只有100M,要讲IP按出现次数从大到小排序,怎么办,往外部排序去考虑了,但还是没答出来面试官想要的;
手写C++程序,int count(const char * page),统计page字符串中"tencent"的出现次数,字符串由单词组成,单词由空格分开(可能有多个空格),这题不难,但要求10分钟内用C++写完,0bug算过;
什么时候能来,实习能持续多久,意向北京还是其他;
面试结束从苏州街走回学校,路过人大西门,吃了碗米线,路过城乡仓储超市,买了瓶汇源果汁,促销,才五毛钱。
二面
一面后一天接到二面通知,中间相隔一天,二面直接骑自行车去的,大概10分钟就到了,非常快。预约10点半,大概10点15就叫到我的号了,那么我就进去了,又是一个老者,我现在对老面试官有点怵。
面试官先看了我简历大概2分钟,我以为二面项目为主呢,结果大概实在是对我的项目不感兴趣啊,就说咱们问点基础吧,总结如下:
C++,多态怎么实现,const * 和 * const的区别,STL中如何实现枚举(应该谈迭代器的吗),vector和list的区别,list是如何枚举的,函数模板如何定义;
Linux,把文件夹打包成文件怎么做,让一个程序定时执行怎么做(Linux真的不熟悉,其实这些问题很基础,但是我答的不好),socket编程;
算法,有1000万个自然数,大小为1~100 0000,是乱序的,怎么以最快的速度排成有序(我正要从最基础的假设内存够大说起,可以用哈希map,结果直接被打断,告知面试结束);
知识获取,平常看了哪些书(这个问题很常问啊,我应该攒一波高逼格书单应对);
总的来说,腾讯二面极其糟糕,2/3的题目回答不好,甚至有些答不出来,暴露了自己Linux和大数据算法面前的薄弱,急需加强。回来查状态,居然是处于HR面试环节,难道过了二面,如果真过了绝壁是意涵团起作用。
HR面
二面结束心灰意冷,结果中午吃饭回实验室就收到了下午两点半HR面的信息,流程效率有点高,但是也就是说我下午还得跑一趟啊,哎,没事,往好的方面想,今天就能把腾讯面试给告一段落,多好。
到点按时面试,HR是SNG的,问我如果岗位是腾讯云的后台开发有没有问题,其实我选OMG是因为我以为只有OMG在北京呢,没想到SNG也有,那当然是更好啦。基本上HR面就是聊一聊教育背景、以前的实习经历、实习对自己而言最大的收获、岗位符不符合自己需求、什么时候能来、能来多久这样的问题,但是HR最后一般都会问你还有什么问题问我的吗,这个时候我往往提不出可以加分的问题啊,好纠结,是时候冥思苦想一个问题备用着了,很关键。
至此,腾讯校招实习面试流程走完了,回去等消息就好啦。
专家加试
本以为HR面结束流程就结束了,没想到还杀出个专家面,大概还是自己不够优秀吧,又备胎了。专家面主要还是一些基础问题,倒是也能答上来一些,或许是没有项目让面试官感兴趣吧,面完感觉也不好,面试官说缺乏大型项目经验,maybe还是跪了,但是问题还是要总结的:
C++:纯虚函数和虚函数的区别,重载和多态的区别,STL中map的实现方式;
操作系统:堆和栈的区别,多进程和多线程的实现,进程间、线程间的通信方式,信号量和共享内存的区别,gdb中找到文件某一行的命令;
计算机网络:TCP的三次握手;
算法:常用的排序算法有哪些,堆排序的时间复杂度和推导,斐波那契走楼梯,棋盘从左上角走到右下角的走法;
一些知识点还是知道的,但是电话上的表达我很难非常清晰地讲清楚,再一个短板就是Linux不熟悉和大型项目的缺乏,花点时间把Linux一些常用命令看看大概还可以补上,大型项目经历我真是没办法了哟。