今天4月19号,校招状态显示已经完成所有面试流程了,以流水账的方式给这次校招做个记录。
4月份开始的是腾讯校招的面经,因为之前阿里内推已经三面挂了,阿里的校招又在四月底,所以就报了腾讯的校招。本来对于腾讯校招是不抱什么希望的,因为在岗位要求那一栏看到移动客户端需要有Native开发经验,笔试考察的知识也以C++为主。笔试的时候不少比较简单的C++知识都忘记了,然而9天后(4月11号)还是收到了面试通知,后来才知道腾讯这次校招笔试几乎没有刷人,没怎么做笔试题的都收到了面试通知。
一面时间安排在下午五点,据道听途说的消息,一般实际面试时间会比安排要晚,所以我就没太急着赶过去。面试所在酒店算是个地标性建筑,但酒店的门实在不好找,我从建筑的另一边商城的门进来,在里面绕了很久才找到面试地点,当时还有20分钟到下午五点。遇到两个同年级的同学,大概问了下被问到什么题,有直接出情景题写解决方案的(21亿数据的检索方式,和火车票那个题),也有问计算机基础知识的。当时想的是要是少问计算机基础知识就好了,毕竟没时间复习,都不怎么记得了。拿整理好的JAVA博客看了一看,到5点40的时候被叫号了,就到面试官的房间进行面试。
首先当然是做了一个自我介绍,自我介绍的时候面试官全程无表情,也不嗯也不问,就看我的简历。自我介绍完了还在看,搞得我有点尴尬,心想这次肯定是压力面了。一面的面试官问项目是盯着我的第一个项目问的,一开始让我把这个项目的现状做了个简要介绍,包括用到的技术、技术团队的组成、产品的现状等等(因为我是技术团队负责人,这个项目是创业项目)。这么简要介绍一遍后面试官问我要APP,我才发现APP昨天删了旧分支后新分支build出来的apk没有刷到手机上,可惜了。之后问了我这个项目大概的实行流程,因为本身就是合伙人,所以我给讲得很清楚,从总体的商业模式到产品设计、开发和运营等部门的协作都过了一遍,面试官看起来挺满意的。
大体介绍完成后,顺带就问到我自己在项目中的角色,当然作为技术负责人也是要写代码的,而且在这样的小团队还要写大部分的代码,我没有直接说代码大部分是我写的,而是给面试官一边画系统架构图,一边讲解每个模块怎样组装的,包括前后端选择的框架和原因、如何做容器化、如何做CI/CD等等,面试官这段时间并不发问,只是在我的简历上写东西。我知道需要讲些难的东西了,于是把里面图片加载和用户认证的解决方案跟面试官提了,果然就引出了不少问题,包括安卓本地的缓存、各种引用等等。关于用户认证这块我说用户临时token用的base64加密,被打断反问了一句“base64算是加密算法么?”我没想到面试官会这么问,就反问他,难道是压缩算法?面试官又反问我,我只好答不知道了。这块答得不太好,算是给自己挖了一个坑往里跳。后面面试官就顺路问了哈夫曼、gzip等等,且全问的是他们的实现中的某个细节,自然是都答不出来,夸张的是因为源码没看过还会有听不懂问题的情况,心态开始不好了。
随后面试官开始问STL源码,因为C++本来就不熟悉,所以对于STL里的几个常用类比如Map啊Vector啊都不太熟悉,只懂基本比如说要怎么用啊内部数据结构是什么啊,连环发问第二波就答不出来了,这么问了两三个问题我觉得在这么下去肯定不行,必定会越来越炸,只好跟面试官说STL的源码我还是看得少了,对于内部的详细机制没有很深的了解。这算是一个转折点,面试官开始问JAVA了。
首先只是问了一些很简单的问题,比如GC机制、线程安全的类、内存管理之类的,这些全是基础知识,我全都讲到面试官叫停为止。这其实算是一种策略,对于你熟悉的问题,讲得久一点,可以减少之后面试官问到你不会的问题的几率,因为参加校招的人很多,面试时间还是有限的。JAVA基础问完之后就开始问各种锁,先答用法后答实现机制,问得很深。但是这一块由于之前我报阿里内推就是JAVA岗,腾讯在这块问的难度并不及阿里,所以我答得都还不错,面试官也比较满意,在这个过程中较少打断我,这一块的问题大概用掉二十分钟,唯一的一个失误是脑子短路忘记了HashMap做put的时候哈希冲突指的是什么,本来懂的地方没有答出来。总之JAVA部分应该还答得不错。
问完JAVA问了安卓,虽然做过一些安卓,但面试官老问service和content provider,而且动辄问Android源码里的实现,答得非常不好,基本都是连环发问只能答出第一层。于是面试官降低难度,叫我画一个Fragment生命周期,还好我很快给画了出来,画的时候还被打断突然来一句Fragment有onStop方法么?这明显是压力面试,就看你对某个知识掌握牢固不牢固,我说有啊,面试官就不问了。开始问计算机基础。
首先问的是计算机网络,还是从很简单的问题开始,让我解释OSI七层模型。正好旁边有纸笔,我就把七层模型画出来并且做了一些简单解释,包括他们与TCP/IP协议族的对应关系等等。之后面试官果然就问到了TCP、UDP,正中下怀。我把自己知道的基本都说了一遍,包括报文的封装方式、各个协议头的格式、连接的建立和终止、流控机制等等。说完面试官问我用UDP怎么膜拟TCP的,看来是想考察我对前面说知识的真正理解,这个问题也好答,我并没有怎么详细说,只是说明了要在应用层的代码里实现原来操作系统内核为TCP实现的流控啊可靠性啊等等功能,然后补充一下这个场景会在不支持TCP的平台上出现,所以这个问题很有实际意义,面试官看来比较满意,并未追问细节。其实我没怎么看过linux内核里面的TCP实现,更没有真的在应用层试过用UDP膜拟TCP,要是追问肯定跪的。
然后开始问操作系统了,都是些基础题,像进程间通信啊内存管理啊什么的,有答出来的也有没答出来的,不过面试官没有太追问。问完操作系统开始问编译原理,问了两个听不懂的不知道什么题直接答不知道,面试官就开始问数据结构了,数据结构问得少就一两题,但是也答得不怎么样,都忘记了。当时感觉比较炸,除了JAVA和计网其它领域都没回答好,已经有了赶紧面完挂掉回去准备考试的想法了。最后是手写代码环节,开始要写快排,其实快排我是能写的,因为前一天才练习手写过一遍,然而面试官看我犹豫了一下(其实应该是压力面太累了),就转而叫我写单例模式,我说那我写个适配器吧,面试官说太长了你就写个单例模式,于是我就写了最简单的静态内部类单例模式,面试官看完不太满意稍微追问了下,我当时也没怎么答好,这块也是属于自己熟悉但没讲好的。其实自从阿里三面把冒泡写成选择排序后我就对手写代码有阴影了,再加上平常缺乏练习,总是在写业务代码,一道算法题都没有刷过,所以这次手写代码也发挥得非常差。这块真的是要改进下了。。。后面问的面试官两个问题,一个是对全栈看法一个是自己的缺陷,面试官都说了一下,说得比较详细。面试结束了,还建议我保持这个学习的势头,然后一边整理桌上的东西(估计我是那天最后一个面试的,面完就下班了,毕竟6点40了)一边和我聊他感兴趣的话题,反编译啊南北桥啊GPU啊这些,发现这个面试官很牛逼,什么都懂。。。
一面出来跟同学在线上讨论的时候我就说自己挂了,因为感觉腾讯招人都招C++,问了几个学长也是这么说,等待面试的时候还听说JAVA开发会被故意问难题然后挂掉。。。所以我面完就没回等待区域直接出酒店回学校了,后来也没管这事,因为第二天要参加一个路演就准备去了。结果第二天晚上复习考试的时候收到二面短信,只好在第三天实用数据库期末考试的时候提前交卷去参加面试。。。有点担心挂科。。。。。
二面面试官看起来很友好,也不像一面面试官那样面无表情,开始气氛整得挺轻松的。一开始也问我第一个项目(估计是因为一面面试官在这个项目上做注释比较多),还是照样把一面那些东西过了一遍,我想再画架构图的时候面试官表示不要画了这个太简单(一波嘲讽。。。)。然后面试官对我这个项目的创业属性很感兴趣,问我关于创业的想法,和一些我们商业模式的细节,我就开始扯,扯完之后面试官就换了一副教育我的态度,先说我们这个项目的一些缺陷比如说APP膜式太重和功能冗余和创新少之类,然后开始说技术人员创业要谨慎,必须先把基础打好什么什么的。总之说了很大一堆,说得我还有点怕,印象最深刻的一句是学生直接出来创业这个东西风险很大因为时间宝贵你现在如果选择创业一旦失败可能到三十多岁的时候一无所有那时就很绝望了。。。说了一大堆,看我比较尴尬,面试官又说其实他也有创业的激情的。
其实我还真没有要单干一番的意思,我的想法和二面面试官大概是一致的,这么大半年也感觉到,自己终究还是太弱了,做不成什么事,最好还是按照正常一个程序员的成长流程去接受规范训练。。。。
接着面试官和我聊第二个项目,问到TensorFlow相关的东西,我这方面的水平仅限于照着论文实现一遍,又没怎么答好。面试官又摆出一副教育的态度说了很多,说他也会用TensorFlow啊什么什么的,这个东西虽然是开源的但想要彻底搞清楚还是要花很大功夫的。接下来就开始问安卓的题,安卓的进程间通信、memory leak、ANR、OOM、广播的机制等等,基本都涉及到DVM源码,我感觉自己答得无比差劲,只好不停地说出自己开发过程中的实际问题去补救,比如什么情况下会内存泄漏啊,如何在安卓弄出OOM错啊,用什么去查看内存占用啊等等。后面想起来这块有点后怕,对于不了解底层实现的某个问题,我答出来一些实际经验,估计是没有被刷掉的原因。
后面面试官主动评价我说我很有技术热情,但需要一个安静的环境让自己静下来好好学东西,我听出言外之意,就赶紧问要是我能加入腾讯的话接下来一两个月要怎么准备,面试官就把要学的大致跟我说了一下(其实按照他说的什么基础我都要重新学一遍。。。蛤蛤蛤)。我感觉能应变地提出这个问题也算是一个加分项吧,不然二面答成这样还能过。。。面完我出去过两条街找东西吃,吃了碗xijinping主席同款的山西什么面,吃到一半看见微信上状态更新为HR面了,感觉一颗赛艇。
HR面被安排在第二天的上午,很巧的是又和一门叫软件过程管理课的期末考试冲突了,我只好再次提前交卷,这次更为夸张,为了面试不迟到只写了不到一小时,有点担心挂科。。。。HR姐姐问的题里面有几个感觉比较有压力的,一个是说出腾讯的十款产品,我说一个她数一个,说了八个实在想不出来只好答LOL和CF了。。。另一个是腾讯八大开放平台,我听都没听过只好直接答不会。。。除此之外还了解了基本情况比如实习时间啊,实习城市啊,家乡籍贯啊,成绩啊竞赛啊,挂科重修啊,我向她问了我所在的事业群,得知是SNG,感觉一颗赛艇,SNG是做QQ的啊!最核心的事业群!之前在知乎上看到一个帖说有技术因为有创业的思想被HR刷了的,所以问到创业项目的时候我比较顾虑,回答得很谨慎。。。这位HR问项目并不抓住一个问,而是每个项目我只能提一次,再重复提必然要求我换一个项目来说,还好我项目经历丰富,没有遇到无话可说的情况。
HR面两天后微信状态更新为已经完成所有面试流程了,按照我们面完的同学私下交流分析的结果,这就是过HR面了。想来这次参加腾讯校招,不像上次参加阿里内推时候那样没有面试经验比较靠技术硬撑,我的面试技巧相比上次又提高了(所以虽然被阿里拒了但是在天猫面三次还是很有帮助的),这次面试技术部分感觉发挥得并不好,有不少本来会的题都没答好,也是不自信能过的最主要原因,事实上基本没有所有问题都能答出来的大牛,自身除了技术必须过硬之外,还是要考虑一些临场发挥的因素。姿势水平和情商要齐飞,才能稳稳的拿offer。