腾讯实习生笔试、面试总结
更新日期:
拿到腾讯的实习 offer 也有一段时间了,把之前记的一些日志整理一下,算是对整个笔试、面试做一个总结。
写在前面
首先,能够最终拿到腾讯的实习 offer,当然是又惊又喜。就自己目前阶段的技术能力来说,我从没觉得自己有机会去 BAT 中的任何一家。但最终通过笔试、三轮面试,拿到实习 offer,我无疑是非常幸运的。我不知道自己到底是哪点打动了面试官,但至少既然已经得到了这样的一个机会,我就需要用自己的实力去证明自己。当然,还是要对腾讯说一声感谢,感谢给我这个机会。
这学期自己原本是有三个大的计划,而暑期实习当然是其中最重要的一个,但没想到是第一次笔试、第一次面试就直接拿到了 offer。因为这学期就只有一门课,所以自己有很多的时间去系统的学习一些自己感兴趣的新东西,本打算是先学点别的,然后再为实习做做准备,但没想到 BAT 这些大公司的实习招聘竟然都非常的早,其实真正没有用太多时间去准备笔试、面试。最后就是把算法这本书上的常用算法熟悉了一下,就直接去参加笔试、面试了。
笔试
腾讯和阿里的笔试刚好是在同一天,腾讯是下午在学校里考的,而阿里则是在晚上跑去华科考的。腾讯的笔试题相对阿里的个人感觉是要难很多,题目基本上是考了大学所有专业课的各个方面,大概有概率论、算法、数据结构、操作系统、网络、数据库方面的主要问题。笔试题让我觉得难其实是因为对那些知识的不熟悉,很多东西都是似曾相识的感觉,看到都有一种这个我好像见过但又记不清楚了。归根结底还是以前学的时候压根就没好好学,基本都是为了应付考试敷衍而过,真正到了用的时候就根本想不起来了。笔试题可能唯一自己做的比较满意的题目就是附件题中的算法题,但无论如何从笔试中最大的收获就是自己基本功根本不够扎实,或者说基础其实很差。
面试
当周围所有人都收到了面试通知的时候,我着实紧张了一下,我的面试通知貌似是最晚的一批,因为当我才要去一面的时候已经有同学二面了。当收到邮件让我去面试的时候,心里其实并没有太多的高兴,因为我不知道面试的时候面试官会跟我聊什么,总是在担心自己会被面试官随便两个问题给问的没话说了,总之是想尽了各种最坏的结果。而准备面试的那两天依旧在看算法那本书,因为网上所有的面试经验都说了面试会问算法。
一面,就聊了几分钟便打消了我所有的顾虑,而且一点也不紧张了。一面的面试官是一个很年轻而且很帅气的人,一米八的个头加上一身的肌肉,完全没有一丝印象中程序猿的屌丝形象。进去递上我的简历,简单问候过后,他没让我做自我介绍便直接看着我的简历开问。首先问道的就是自己曾经做过的一个 App,在得知网上有项目的代码后,便立即上网去 github 看了项目的代码,这时候我一下子就轻松很多了,根本不紧张了,我结合网上的代码给他大概讲了讲这个 App。之后他就直接出了一个算法题让我做,题目很简单,就是反转一个链表,当然这在平时来看是很简单的,但当时我听到他让我写的时候还是有点懵的,脑子里根本一片空白,不知道是因为没了刚才的紧张感,还是其他,总之这个题目我在旁边想了好几分钟。但当我开始写的时候,面试官突然说他要马上参加一个电话会议,只让我说了一下这个算法的大致思路,之后便让我去另一位面试官那里继续面试,就是最开始分配给我的面试官。
二面,最后才明白这次算是二面了,而我的一面仅仅不过 10 分钟。首先二面到我的时候已经是 12 点多了,此时不光我等了一早上很累,面试官看上去也有点累了,心理就觉得可能会悲剧了。二面面试官看上去要比一面面试官年龄稍微大一些,成熟稳重一些,一看就是个 leader 之类。同样没有自我介绍,上来先是问我自己觉得笔试情况如何,如果再让我重新做一次会不会好一些。我直接就说自己笔试做的很烂,因为有很多基础知识,而自己确实在基础知识上掌握的不好,再做一次也不会有太大的差别。目测我当时要说做的还可以,再做一次能好一点,面试官肯定得让我立马再做一下笔试题。接下来就问我对算法了解的怎么样,说完就让我立马写一个算法。
1 2 3 | 第一个算法题:输入一个字符串,反向输出,只能用 c 语言。要求2min内搞定。 第二个算法题:有10w 个数,他们的范围是0~100w,要求在 O(n) 内对这10w 个数排序。要求4min内搞定。 |
当听到让我在纸上写算法的时候,我已经心跳加速了,然后还要求我必须在规定时间内写出来,当时手心的汗抓笔都抓不紧了,但赢着头皮还是得上,也许这就是所谓的压力面(后来听说的一个高达上的词。。。)。
首先第一题因为面试官问了我对什么语言熟悉,而我说的 java,所以他要求我用 c 实现,当时就傻了,上次写 c 都不知道什么时候了,结果就是将面向过程的 c 写成了面向对象的四不像。。。面试官也只有摇头苦笑,好不尴尬。。。而且我前一分钟在拼命想 c 的语法,当面试官催着我说还有一分钟的时候我就直接把脑子里想的写下来了,结果自然就是悲剧了。
第二题听到时候就更懵了,10w 个数排序,OMG!!! 还得在O(n)
内搞定,我猜到了要考算法,却没猜到会考这样的问题。我想到了之前遇到过的一个类似的问题,首先设置一个大小为 100w 的数组(100w 大小的数组。。。这得多大啊!),然后依次遍历 10w 个数,如果i
存在,就将a[i]++
, 最后打印数字就 ok 了,时间复杂度刚好就是O(n)
,这是当时脑子里立马就想到了的方法,也没做太多的论证,就直接开始写了,4min 内差几行没写完,面试官看了后就问我能不能在优化一下,让程序占的内存少一些,说实话我之前写程序从没考虑过内存什么的,所以他让我做内存优化就更想不到了,沉默了一会傻笑着说不知道了,面试官却依旧说再想想、仔细想想,最后实在没办法就没继续问下去。后来也去查了一下类似的题目,我的方法可以说是简单粗暴,但对内存占用确实很大,内存一次性读取一个 100w 大小的数组,放我电脑上估计直接崩溃了吧,后来看到编程珠玑上有过这类问题的介绍。
在熬过了两个算法题后,面试官问了我几个常用的 linux 命令,一些简单的其他小问题(其实是忘了。。。),然后问我有没有什么问题需要了解。当时说实话我已经被那两个算法虐的没有精神了,真不知道该问什么。所以首先弱弱的问了下面试官现在还写程序吗,他说已经很少写了(确实是个 leader 啊,我真是脑残了问这个问题),又问了问他对我这次面试表现的看法,然后就是简单的聊了聊。最后是我也已经累的不行,面试官也一脸疲态了,简单道别后我就走了。
出来后其实还是挺失望的,一方面自己表现的确实不够好,另一方面看了看手机我进去了也就 20 来分钟而已。。。要知道之前的人都是差不多最少也进去了半个小时以上,觉得希望不大了。
三面,hr 面,当收到通知的时候,我已经不太懂腾讯的此次招聘了。终于不面技术了,我也可以跟 hr 多扯扯了,hr 面首先是需要做一个 1min 左右的自我介绍,然后我就介绍了我的姓名、学校等基本信息,其他我也不知道有啥好说的。hr 面基本就是对自己的性格、爱好、家庭等方面的综合考量,当聊着聊着 hr 发现我对产品有自己独特的看法的时候,就告诉我说为什么不考虑将来去做产品经理,当时我就义(tou)正(nao)言(fa)辞(re)的说,我就是要做一个程序猿,我想等我 40 岁、50 岁的时候依然可以写代码。总之,整个 hr 面还是很轻松愉快的,也能感受到腾讯这家公司的朝气。
总结
如果让我再重新把整个面试再来一次的话,可能我会表现的更好。首先我可能会在面试中更加主动一些,主动去跟面试官聊一些话题,而不是被动的等着面试官提问。将面试官看作是一个学长,而不是一个高高在上的老师,将他们的提问看作是一个学长分享的经验,自己只需要去表达自己内心最真实的想法,哪怕是错误的。当面试官让我问他一些问题的时候,应该更加灵活,问一些有价值的问题,比如我应该仔细的问问二面面试官第二个算法题有什么更好的解法,或者我的解法有哪些具体可以优化的地方,问问 hr 在公司大家会一起去看世界杯、看 NBA、去跑步吗,了解了解在深圳的生活。总之,对于我的第一次求职来说,可能整个过程中存在着各种各样的问题,但很庆幸最终是一个完美的结果。