【转】2009-2014腾讯、百度、阿里面试经验
腾讯面经
本人IT***丝一枚,毕业4年,5年经验(大四在腾讯实习一年,实习生工资,工作内容同正式员工一样)。非常幸运,先后收到过腾讯、百度和阿里的offer,在这里跟大家分享下经验,同诸君共勉。
本人职业生涯的起点开始于腾讯,能入职腾讯其实非常偶然。09年腾讯校招的时候,在本人的学校(学校是2本就不说名字了)开宣讲会,学院很多同学都去了,因为当时对腾讯兴趣不大所以没去,当时希望去中软金蝶这样的传统软件公司。一个宿舍的兄弟要去参加腾讯校招的笔试,我作为亲友团陪他一起去。腾讯的hr很nice给了我一张笔试题和意愿表让我填。本来我想从学校北门直接坐车回家,既然来了反正也没什么事就写了,算是为以后找工作热身。笔试内容主要是编程基础和排序查找算法之类的题,还有用程序实现递归这样的,具体的忘记了。
笔试题感觉很简单,附加题也答上了(本人专业课学霸、其他科学渣)。答完也没检查就坐车回家了,吃饭的时候收到腾讯叫我第二天去一面的短信,刚好我爸爸妈妈在南山的同学去我家做客,就乘阿姨的顺风车回学校准备第二天的面试。
腾讯一面的面试官非常的nice也是我后来的组长,非常有人格魅力的一个人,我去的时候还特意给我倒了一杯水。主要问我了解的技术,我就介绍了下在大学期间做的C++、.Net和J2EE项目,规则引擎、财务系统、学业预警系统、爬虫引擎这些。因为完全没准备所以回忆起来有点吃力,还好面试官没有刁难,发挥还可以。问了Java的内存机制,会不会导致内存泄漏,这个答的不太好;问了下hibernate的机制和作用都回答上了,让写了下爬虫程序的核心代码和正则表达式。
一面整整面了30分钟感觉有戏,就回去好好准备2面的内容,把当年工程代码翻出来复习以免再出现忘记的尴尬。很快第二天就通知去进行技术二面。技术二面就是传说中的压力面,被好一顿虐待。项目中的问题一个没问,问的全是操作系统、数据结构的问题。还好专业都是A+,大多数题都回答上了。问了下我树转二叉树,这个小意思。还问了Java内存机制和是否会有内存泄漏什么情况下会泄漏,good这个在一面回去之后就看了,回答的完美。最后一题是问的查找QQ号。小case,写了个二分查找;他说你认为我会满意吗,我想了想又写了一个哈希查找,他说还是不满意。这个时候我已经有点小不爽了,就说不知道。在有点尴尬的气氛中结束了面试。当时觉得没戏了,有点失落。回家看了下算法导论,原来有一个极为高效的算法是二叉查找,唉,人家已经提示了,但是还没想到,有点小遗憾。
过了一周收到腾讯的hr面试邀请的时候,说实话非常的意外。听说我们学校本科生全军覆没,就我一个过了2面,研究生只有3个过了2面。hr面没问什么特别的,此处不表。一周后收到腾讯的正式offer,还是有点小激动的。薪水方面超过了我的预期,但最主要的是一面的面试官看起来很厉害的样子,感觉腾讯也是一家很厉害的公司。
在腾讯干了四年,正式三年,实习一年。后来开始负责招聘,我们部门在选择求职者的时候主要看聪明程度、视野、大局观、气场等软实力。当时我负责面了一个孩子,各方面挺不错的,组长觉得也还行,但是被总监毙掉了,原因是太软不够霸气。还有一个哥们技术和基础感觉都还行,但是被组长毙掉了,原因是视野和聪明度不够。
所以准备面试腾讯的同学,建议多留意近期的互联网的最新动态,多练练表达。如果能在面试中批判一下近期腾讯的决策失误和产品缺陷,无论对错都会认为这个孩子不错,那么一定会加分的;但是也不能过了,完全说的不对还侃侃而谈会让人觉得你这个人很浮夸也是会被毙掉的。尺度的拿捏很重要。还有一点,语速快而且语气坚决目光坚毅自信的比语速慢表达不流畅的同学成功几率高。我面过一个哥们,后来他顶替了我领域负责人的位置,这是后话。他在面试的时候就非常的自信,如果问一些“弱智”问题会被他反讽,当时大家就觉得这个人很厉害,面试也很顺利,1天连续面了5面,当天就发了offer。腾讯社招是电话面、技术一面、组长面、平台总监面、部门经理面、hr面。总共6面,面谈是5面。
面试的时候首先要自信,如果能做到不卑不亢其实就已经成功了一半。我感觉大多数程序员都不太自信,给人感觉有点文弱,如果你自己都对自己不自信,怎么能奢求公司对你自信呢。但是也不能太自信,自信心爆棚就是自大,面过一个2年开发经验的问他技术都不知道,就谈项目。问他项目中做了什么就谈项目是什么。在我这就被毙掉了还问你们能不能开到30w,我只能让他回家等消息了。
百度面经
接上篇,刚加入腾讯的日子还是很happy的,第一个项目就是独立开发一个抽奖营销项目,之后跟一个技术很厉害又有想法的前端牛人一起负责比较重要的项目,当然是他带我(当时的目标就是超越他,可惜到现在还没实现。大牛当年教育我说,新人刚参加工作这几年回家之后不要玩,要多学习这样才能成长的快,当时我还不以为然;现在想想真是金玉良言啊)。
在10年底的时候得到了一个机会去负责全新的领域iOS开发和
Android开发,因为我个人对前端技术(JavaScript等)不怎么感冒,还是比较喜欢做编译型语言的开发工作。当时组里的几个大牛对终端兴趣不大,老板就把这个光荣而又艰巨的任务交给了我。
经过11年一年的艰苦奋战,本人和另一个一起入职的兄弟从无到有分别开发了iOS和Android两个应用(iOS是我们一起开发的,android是我自己开发的)。虽然现在看来当时的成果不算什么,但当时是在没有什么资料和经验的情况下摸索出来的,还是相当的不易。可惜当时的领导觉得我们做的并不好,一年下来才弄出这么个小东西,这是他的原话。年底的时候基本上一天被领导当着全组的面骂一次,这个领导是新领导,不是当年面试我的那个领导了。当时也是年轻不敢顶撞领导,但是不爽和负面情绪肯定是有的。所以开启了离职找工作的程序。
12年初的时候被猎头推荐去北京的一家公司,后来才知道就是大名鼎鼎的百度。因为自信心爆棚,牛逼哼哼就去了。结果就是兵败莫斯科。被大大的打击了一顿。
百度面试跟腾讯完全不同,百度面试非常重视技术、重视应聘者的基本功、算法、数据结构、C++、操作系统、面向对象、软件体系结构、系统设计和模块划分上的能力,可以说锱铢必较。这些东西在大学的时候本人可以说得心应手,但是面试的时候基本上一问三不知,连我自己都觉得不好意思。印象比较深刻的几个题。ObjC基础,这个就不说了,干了1年iOS开发的都会;响应者链是什么和原理,没答上;堆栈;进程调度;查找算法、排序算法;面向对象设计的原则;移动应用安全;c++指针运算,如何把一个数存到0x00这个位置。iOS性能调优。画出你的项目的模块图。很多都没答上来,面试官很nice说可能是太长时间没用了忘记了,机制没回答上来就问我你不知道机制没关系你可以提出自己的看法,猜他是怎么实现的,答对了一样有分。算是帮我挽回了点面子。
这次面试失败对我的打击非常大,因为面试的内容并不难。想了一宿,其实加入腾讯只职业生涯的一个起点而已,并不代表你比别人优秀多少,很多比你更优秀的人没进来可能只是运气没你好而已。职业生涯跟长跑差不多,一开始你比别人领先一点,只要稍微放松,马上就会有比你更努力的人追上并超过你,不同的是,长跑更容易发现自己已经落后了,而职场上等你发现的时候可能已经晚了。程序员跟赛车手差不多,不是说你每天开车你的驾驶技术就能成为职业赛车手,而是必须经过专业的训练,有针对性的训练;同理不是你写了几万行代码你就是个技术专家,必须经过刻苦的学习才行。
本人的缺点是容易得意忘形,优点是越挫越勇。经过这次打击,每天最少用4个小时的时间学习iOS各种机制、数据结构、重拾C++。疯狂写代码,每月5000行编码量,用了1个月时间重构了2w行代码。到了7、8月份的时候感觉功夫已经到位了,就决定再找公司练练手,检验下这个阶段的学习成果。
这次猎头又给我推荐到了百度,去的是深圳百度分公司。感觉到百度好像很缺人,因为周一提交的简历周三就让我去面试了,百度筛选简历出了名的慢。一面还是上回那些,难度加了些问了写内存管理、线程调优的内存。小case,早就在我掌控之中。问了些Core
Data、数据存储的内存,问了下闭包block和block在内存中位置,同函数指针的区别。一面进行了一个多小时。完事后让我等一下,看起来这把有戏。
二面还是技术面,难度感觉比一面没高多少,因为考察的都是面向对象、设计模式上的内容,呵呵,这个对我来说太简单了,本人最大的爱好就是研究各种设计模式和软件体系结构。问了下我的项目中的体系结构,问了下MVC的优劣,如果设计松耦合的模块,组件化模块化的之类的。
三面主要是精神层次的,
问下未来的职业规划,iOS和Android的差异性。你为什么不继续做前端转做iOS,如何看待iOS的生态系统。问为什么想跳槽,我回答说想专注iOS,现在腾讯让我又搞iOS又搞Android,又搞联调有点杂。最后问有没有什么要问他的。其实本人当时根本没有过档的打算所以说没有。接着hr面,这个时候已经很晚了,云了三个多小时,也不给一口水,有点小不爽。Hr面带着情绪面的,看在妹子挺可爱的份上控制了自己的坏脾气,hr可能也感觉到了我的抵触情绪,草草收场让回去等消息了。
四轮面试都要自我介绍,说的我都有点恶心了,感觉像失足介绍自己来自哪,等客人挑选。人格魅力感觉都不如腾讯的组长。
过了三天接到电话,问我这边的意愿,工资又远远高于的预期(本人就是这么鼠目寸光,老婆骂了我好多次)。当时身上有个很重要的公司级的项目,又觉得对不起腾讯的知遇之恩(因为这个老婆埋怨了我很多次),就拒绝了。
但是对自己开发能力的训练机制算是稳定了下来,还是有收获的,基本上每天都自学到10点11点。后来易迅(易迅被腾讯收购其实就是腾讯的一个部门)的总监让我过去做iOS易迅客户端,承诺说办手续最多3个月。虽然机会很诱人,但是为了报恩也好,责任感也好依然拒绝了。
其实公司和个人之间本质上讲就是商业关系没什么恩义,公司培养一个人也不是为了这个人的发展还是为了自己。business just
business,跟感情混为一谈吃亏的还是自己。放弃了这两个机会之后,半年后本人经历了职业生涯中到目前为止最大的危机。如果人有预知能力就不会有那么多苦恼了。
总体上感觉百度的面试要比腾讯容易些,因为腾讯注重的是软实力,也就是说天赋,知识、技能、经验都可以后天培养,但是天赋是天生的没法后天锻炼,只能通过努力拉近差距没法逾越。不过2011年后腾讯大扩张(不到一年狂招1w多人),招聘的门槛也没有那么高了。而百度更注重计算机技术和科学,这些东西通过努力都可以获得。
郑重声明:本人只是参加过以上几家公司一两个部门的面试,一个公司不同部门的面试风格是不一样的,每位面试官的风格也是不同的,所以本人的观点是非常片面的。完全是个人的感悟和心路历程,不承担任何法律责任。
阿里面经
接上篇,2012年可以说相当的辛苦经常有加班到11点、凌晨的情况,基本上是9点之后才能下班。为了这个重要的项目大家都很努力,终端领域也终于向好的方向发展,直到年底。
年底发生了一件不愉快的事情,内容就不说了跟主题无关。本人又开始了找工作之旅。
1、第一次进军阿里
当时听说阿里在无线发力,taobao和tianmao都在招人,两个部门都对我发出了邀请,但是集团规定只能面其中一家,本人就选的tianmao。一面是组长面,电话面的,问了下项目,问了网络通讯协议,为什么用json不用xml,pb协议的好处和坏处。因为本人负责的是非常敏感的业务,对安全有很高的要求,所以还问了些关于安全策略设计和构造。这个是本人的强项,因为当时在终端安全方面吃了大亏,经过好几个不眠之夜之后设计的三层换票加密算法,除非有内鬼,否则即使反编译了我们的代码也无法解析我们的加密协议。感觉不错,就让我保持手机畅通准备技术面。
技术面应该是一个组员面的,问的全是基础的问题。iOS
runtime、多线程几种实现方式、如果进行网络通讯、对于block的看法,基本上都回答上了。最后问了下我对iOS6的新特性的认识,这个回答的不太好。因为本人当时忙一个大项目,基本每天搞到11点多,没怎么充电。面试完了查了下iOS6的新特性,也没什么特别的,有点遗憾。
过了2天,那边来电话让我去一个酒店进行终面,他们的老大来深圳出差顺手面我一下。面试整整持续了一个小时。问了我对微信的看法,问我们有没有跟微信合作。如果缩减安装包体积,这个问题我当时觉得自己回答的不错。一年后回想起来,其实回答的很差,缩减安装包的体积要从资源文件上下手,尽可能用Core
Graphics自绘代替资源图片。如果是用户可能用不到的功能,那么应该只把代码合成进去而资源文件应该在用户第一次使用的时候从服务器下载并缓存在本地。裁剪第三方开源库的代码等等。面试进行了一个小时,面试官客气的把我送出房间。
过了一段时间没消息,让猎头帮忙问下情况,回复是工作年限太短,没戏了。还是被小小的打击了一下。如果面试管表现的特别客气那么你就要小心了,很可能被毙了。
2、广州之旅
面试阿里失败之后去了广州一家互联网公司,就不说公司名字了,因为对这家公司的怨念到现在本人还不能释怀。不过这家公司好处是比较清闲,所以本人又开始了疯狂学习计划。老婆在深圳,我一个人在广州反而可以腾出时间充电,公司管饭又省去了觅食的麻烦。每天学到12点,经常看书到凌晨2点。除了iOS开发外,还复习了C++
Primer红宝书,这本书非常经典,强烈推荐。这家公司延了本人一个月的试用期,hr还让我去签字确认,我说现在是午休时间我不去,他说很快的,反正我就不去她也没办法,延期我试用期的第二天我向领导提出了辞职。领导竟然敢说他很意外,挽留了我一下,但是我对这里毫无好感,再三请求之下脱了1个月终于离职成功。
3、回到深圳
回到深圳后就进了我现在这家公司,老板是个技术很厉害的人,对本人也非常欣赏,负责了几个重要模块的设计和开发工作。一个是即时通讯类的模块、一个是视频加工编解码的模块,就是凭着这两个模块的设计开发经验本人跟阿里又一次产生了交集。
4、第二次进军阿里
这次去阿里面试可以说非常非常的偶然和戏剧性,因为本人根本没投简历,以至于阿里hr给我电话的时候我一度认为是诈骗电话。因为深圳这家公司不错我还想在这里干个两年左右再考虑考虑。
这个时候的本人已经发生了很大的转变,从刚进腾讯的浮躁、自大、惧怕面试,已经转变为淡泊、谦虚,并且喜欢上了面试,感觉每次面试就像杨过跟大雕过招一样,武功都能精进不少。本着去看看技术面内容的心态去了福田东海大厦。
一面没有技术面直接就是组长面,首先是自我介绍,之后问了下项目内容。我就说了下即时通讯和视频加工两个模块。他让我画出模块的架构图,这个建议大家准备一下,阿里和百度都有要求应聘者画模块图考察应聘者的开发层次和思路。本人没什么准备,不过当时设计评审时的UML还记着,就把模块图和类图画了下。面试官又问,有没有遇到困难;我说有,性能瓶颈、卡顿的问题、瞬时信息量过大导致的UI卡死;他就问如何解决的:我说由实时刷新改为定时刷新。他问还有没有更好的实现方式,我回答有用任务队列。我们又争论了下任务队列的设计应该用先进先出还是后进先出。这个时候本人已经完全忘记是来面试的了,只想争赢。语速也越来越快、声音也越来越大。他质疑我这个机制在效率调优上没有意义,因为系统会进行cell缓存;我说在中间的时候系统缓存可以生效,在最底部的时候就失效了,就会卡顿。最后还是我争赢了,时间就这么不知不觉中过了一个小时。问通讯消息腾讯是如何做的,我说不知道我猜测是这么做的巴拉巴拉。问了下我滤镜的使用和原理,如何美白,我说修改OpenGL的值就可以了,问如何进行视频合成,这个很简单就是把视频和音频轨道抽出来再用composition合成就可以了。问了下加水印、也是从文件中把视频轨道layer抽出再把图片layer加在这个layer上就可以了。把开始时间和持续时间、帧率设置好就ok了。又问了下为什么来面试,本人说没想过换档,是你们叫我来面试的。一面官最后问了下,考不考虑杭州,本人非常坚决的说不考虑。他又说其他城市考虑吗,本人说吉林就考虑。
一面结束让我去休息之后是二面,二面的面试官很nice。让我做自我介绍之前竟然先做了自我介绍。他负责的部门是个很核心的部门。面试的内容跟一面差不多。让我在白板上画我设计的系统架构图之后就是讲解。问了下我的职业规划,我说现阶段还是想写代码。他问多久,我说2年吧。他有问你对管理岗位怎么看,我说一个好的管理首先要能帮助组员解决问题,我现在水平还达不到这个境界,想多写点代码,代码量上去后设计能更合理一些,像这个设计当时有几个优化点没考虑到,有点遗憾。面试官问我有什么问题之后我就询问了下他们部门的情况和企业文化。面试官好像比较满意,就让我去hr面,还特别强调就是跟hr聊聊不算面试。
hr面过程不表,就是问了下杭州房价问题。问我能不能来杭州发展,我说我考虑下,还不知道你们会不会录用。闲扯了半个小时,就打道回府了。3天后收到阿里的offer通知介绍。给的薪水又一次超过了本人的心理预期,还有本人一直梦寐以求的期权。实在是没法拒绝。
阿里的面试跟腾讯百度都不同,感觉更注重项目实践一些。总结来说BAT的技术面都差不多。只要把内功和外功都修炼好了再配合点实战经验基本上都可以应付三大的面试了。
面试的核心流程都是:
技术一面、技术二面(组长面)、总监面、hr面。腾讯会多一个经理面。但是一般总监认为可行的人,9成的应聘者都会通过经理面的,除非发现严重的撒谎行为。hr面就是走过场,刷人的机率基本上为零。以前招聘过一个同学,hr想刷掉,理由是没有大公司经验,被我们组长一顿叼,说这个人各方面都很适合又踏实,如果你们觉得这个不行你们就要负责招一个你们认为行的,否则我们工作做不下去了,hr就软了。后来事实证明,这个同事工作完成的相当好,人的能力跟公司大小没关系。最难的就是二三面,人也基本上是这两面中刷下去的,大家一定要小心。我个人的经验来看,总监越严肃通过的机率越大,越客气就越危险。
最后说一下,面试准确讲不应该叫面试应该叫面谈,就是interview。劳资双方坐下来谈谈聊聊,互相了解。我们程序员作为技术工作者不是去求职的,只是去看看你的机会,你可以保留你的职位,我保留我的做事方法。