[原创]我通过微软亚洲研究院面试的经历-(更新 10.29)
[B][center]我通过微软亚洲研究院面试的经历[/center][/B]
我是广州大学新闻学院广播电视新闻系01级1班的,05年7月走出广大校门。今年3月,我有幸地被推荐到了微软亚洲研究院,应聘图形学助理研究员,经过三个月的漫长progress,终于在6月初收到了口头offer。但很可惜的是,7月初,正在我踌躇满志地准备向北京进发的时候,因为部门调整,IG暂停招收新员工,我的offer也必须回收。离MSRA只有一步只遥,尽管最后还是留下了无限遗憾,但作为一个广大的学生,一个文科生,我能通过三次电话面试,闯到北京希格玛大厦,直面最著名的微软面试,也最终通过了面试,已经觉得很对得起自己,对得起多年的努力。
借此我想给各位广大的学弟学妹分享这一次宝贵的面试经历,希望给大家信心。进入微软研究院这样的大机构其实并不是清华北大的高材生的专利,只要有能力,它的大门是会向任何人打开的。
[B]一、背景[/B]
我非常喜欢编程,非常非常喜欢,尽管我一直以来都读文科,理科成绩不理想,但我耗尽了几乎所有的课余时间写程序,研究图形学。进入了广大新闻系后,这四年我也一直在研究图形,立志要做一套中国人的渲染器,所以把自己磨得非常尖,C++、ASM、Raytrace、WIN32API、虚拟机、编译器,每个渲染器相关的领域我都研究得很深。大三的时候,我已经自己重新设计出了一整套面向对象运行时系统。04年初,我开始着手设计渲染器。
05年3月,因为毕业实习需要,我选择了和专业对口的南方电视台,到都市频道的城市特搜栏目做实习记者,一做就是半年,没拿到过一分钱。到了7月份,我在网上发布了已经成形并且可以运行得非常好的渲染器。这个已经达到准实时光线跟踪级别的图形系统引起了很多人注意,特别是很多游戏制作者的的注意。在几天里,我收到了十几家公司的 offer,大部分都是游戏公司,也不乏盛大这样的大公司。但最后我挑了无锡的一家新公司,好莱坞(中国)数码艺术研发中心。当时考虑它是一家新的公司,发展空间比较大,而且我请了几天假飞到无锡去看过了,感觉很不错,所以即使offer开得其实挺低的,试用只有3200(税前),也决定去试一试。
就这样,从05年11月到06年3月,我在无锡度过了5个月。06年过年后,回到无锡,一些项目开始启动,当时我给公司谈转正的事情,然后老板给我开了 5k(税前)。老实说,当时感觉还是挺郁闷的,因为离自己的理想数字有一定距离,而刚好当天上海的一家外资游戏公司接触我,他们开口就给我提目前的两倍工资,另外还配公司期权,所以我周六马上就奔上海去谈了。周日在上海和他们谈了三个小时,就开出了试用6.5k,正式税后8k的offer。那时候虽然很开心,不过自己对于这样马上跳槽心里还是没有底,而且觉得和公司还有一些商量的余地,毕竟做渲染器比做游戏要有趣一些。但最后公司还只是给我开出了6k的 offer,有点感觉去意已决。
但就在我准备跳到上海的同时,上海一位刚认识的朋友,很偶然地把我介绍给了他在微软亚洲研究院的朋友。其实这只是一次意外,那是我第一次和他吃饭,谈天说地中,我开玩笑地说,如果能去微软亚洲研究院,就是给我1k一个月,我也愿意。后来他就问我,你真的愿意到那里去?我说,梦寐以求!
两天后,微软亚洲研究院IG(Internet Graphics)的一位副研究员联络我了,先问我要了VC,然后约我一个下午做第一次的Phone Interview。
[B]二、第一次Phone Interview[/B]
那是3月13日,星期一下午,2点。当时我很紧张,非常紧张,因为我没任何底,这是我第一次做这样正式的interview。毕业前后我找工作基本上都只是谈,和负责人谈,或者直接和老板谈,没有做过正式的interview。对方是在SIGGRAPH发表过三篇论文的副研究员,还曾经被邀请到过盖茨家作客,我很清楚我在和世界级水平的人打交道,和平时在网上那种小混混完全不能相提并论,所以一定要非常谨慎小心。
对方一开始也先让我不要太紧张,然后让我打开我写的代码,针对代码的各个部分进行提问。问题并不是很难,比如IndirectDiffuse的用途,PhotonMap的一些基本知识,还有CPU结构体系,优化算法,图形学的一些前沿知识。对话进行了大约一个小时左右,感觉对方还是挺满意,不断地说“不错、不错”。最后他让我等消息。
几天后,他告诉我,VC已经给老板了,真正的Application Progress开始。而此时我决定了不再逗留在无锡,选择了回广州准备微软的Interview,尝试全力冲一下微软。从朋友的口中得知,我还是“很有机会”的。
[B]三、第二次Phone Interview[/B]
回到广州后,我就全身心投入到原来的渲染器编写中,尽量磨尖自己的一些必须能力,特别是Coding。但事实上后来我发现我错了,Coding技术其实并不是重点,重点还是Algorithm。
3月底回到家,一直到4月中,才收到了一封email。当时非常兴奋,是IG的Team Lead寄过来的,约我Phone Interview的时间。从这一封email开始,所有的联络就开始转入英文,而我所有的回复也必须使用英文了。
已经忘了是4月十几日了,总之在一个我似乎没有任何准备的下午,那位拥有图形学PhD、资深的研究员打了电话过来。这是一次非常难忘的Interview,虽然我表现得很差劲,但对方教会了我很多很多,也给我提了很多终生受用的建议。
一开始他问了一些关于BSP的问题,以及光线跟踪空间加速算法。这方面我比较熟悉BSP,但他问的角度和我平时研究的完全不一样,因为我缺乏工程学知识,很多东西都凭着感性去理解,没有从理性、抽象的角度进行推理和演算,所以我薄弱的学术底子在功力深厚的研究员面前暴露无遗了……很多地方,我说不过去,但又怕让他感觉我不知道,所以就想胡混过去,结果他告诉我,他提的问题并非想在我这里得到什么很确切的答案,只是想看我的思路和思维方式,所以知之为知之,不知为不知。于是接下来的问题,我不懂的就再不敢装了。
接下来问了我一些算法的问题,然后就是职业规划的问题。这方面还比较好,我都是比较能侃的人,大致给他介绍了我如何自学,如何自己研究等等。他问我为什么不考研究生,我说我用一年的时间去拼搏,做自己不喜欢的事情,不太值得。他说,工作中可能会有更多时候要你用两年、三年甚至更多的时间去做自己不愿意做的事情,来换取更好的机会做自己的事业,这样如果连一年都不愿意付出,那更大的牺牲怎么会付出呢?我无语,其实当时我还是很想考研究生的,但我没底,也没勇气。
最后他给了很多建议我,也告诉我,如果要考研究生,他可以给我推荐。
这次我表现很差,主要是在家呆的时间长了,没有维持着工作状态,和在无锡的时候相比差太远,另外在面试前准备得其实也不是很充分,以为这次会和第一次一样简单顺利,但这次不一样——Team Lead和研究员关心的重点不一样,研究员只关心你的技术是否达到一定水平,而Team Lead更重视你的工作态度和思维方式。
Interview以后我以为这么糟糕的表现会导致这次求职完了,结果在第二个星期,我收到了Team Lead的第三次Interview通知。
[B]四、Offline Interview[/B]
出乎我的意料之外,我得到了一次Offline Interview的机会,TTG的Team Lead和我联系了,给出了一道题目,题目的内容是保密的,我遵守这个协议,所以这里也不能说出来了。只能说,这是一道说难不难说易也不易的题目,它考察的范围很广,从数据结构和算法到界面设计,而且“陷阱”很多,可以从中看出应试者的编程修养。
星期一下午我接到题目,希望在星期五前提交答案。其实在我看过题目后,对采用的算法就已经心里有数了。要实现其实真的很容易,但对方要求我尽量写出最高水平的Code,所以我花了更多的时间找尽可能好的算法,并顾及代码的优雅、稳定、可维护性等。
结果我用了一天进行算法测试、一天Code、一天进行最终测试,其中几乎没怎么睡过觉。星期四晚上提交了代码。然后那天晚上我查出了一个致命的错误,在12点多的时候再提交多一份修正版的代码。
虽然在第二天我被告知Please stop working on that problem,但同时亦被告知,HR会很快通知我,我将要到北京进行Formal Interview。
[B]五、Formal Interview[/B]
不得不佩服微软Interview的严谨,即使在后面我又经历了Autodesk和网易的Interview,回头看还是微软的招聘最完美、最一丝不苟。
首先HR会发一封email,确认你得到了一个到北京进行面试的机会,并提示你需要带备的身份和学历证明。微软会为你报销来回的机票,以及为你订两天的酒店,这样你的旅程基本费用由他们支付。
我和HR预定好了在5月11日进行Formal Interview,而我会在5月10日抵达北京,5月12日离开。两日的行程很紧凑,而我本想趁着第一次到北京的机会,到处逛一下,但后来还是决定一切以面试为主,以后还是会有很多机会逛的。
在此之前我就已经听说过了,关于微软的面试,很多各种各样的描述,包括他们的智力题,还有Lunch Interview。在确认了我可以去北京以后,我重新认真地在网上搜索了所有关于微软面试的资料,包括国外和国内的,集齐了各种各样的智力题和编程题,还有各种情商的应变考核题目。在一遍又一遍地熟读这些题目、以及面试流程以后,我近乎可以“虚拟”出一个个自己面试的片断。
到了9日,我把所有关于面试的资料,一下子都删掉了,然后不再想,不再看,开始收拾东西,准备旅程。只是在最后关头,我突然发现自己竟然有一个非常大的漏洞——到面试前两天我竟然还不会写排序算法!因为图形学里面很少会用到常规的排序,一般我都用stl或者crt。于是我把《算法与数据结构》随身带上了,准备面试前一天晚上复习。
10日,我坐中午的航班,飞抵北京。到了北京以后,已经是下午了,坐机场大巴可以直接到北航——微软给我预定了北航培训中心里面的招待所。到北航,找到招待所以后,我用微软面试的名义check in了。房间是挺漂亮的双人房,设施齐备,大概准三星级标准,很舒服。这样对应试者提供了一个不错的休息环境。
整理好行李后,我决定先去买面包作为晚饭,因为第二天就要面试了,害怕吃东西会容易坏肚子(尽管几率很低,但我绝对不能冒这样的险),然后还要买几支矿泉水,因为微软的面试要谈一天,有很多话要说,所以一定要保证有足够水(至少带一支,其它的放在房间喝,北京干燥,必须补充足够的水分)。
从超市回到房间,吃过 “晚饭”后,我决定先去探一探路,预计好时间,免得第二天迟到,迟到毕竟是面试的大忌。到北京以前我已经在go2map查看过从北航到希格玛大厦的路况了,但毕竟那还只是电子地图,和真实的路况有很大区别,所以我记下了大体的方向和路线,就决定散步一次到希格玛大厦,做一次演练,也顺便先实地考察。
走了很长的时间,还翻过了轻轨,我终于走到了希格玛大厦前。望着灯火辉煌的五楼,感觉无限向往。希格玛大厦的顶楼竖着一块微软的广告牌,看上去也有些日子了,颜色偏淡,上面写着“你的潜力,我们的动力”。
熟悉了路线,我估计可以用半小时走完,于是决定9点启程,9点25到希格玛大厦,9点30可以准时面试。
回到房间,我打开了随身的本本,再看了一下Raytrace的代码,然后把几种常用的排序算法立即演算了一下,掌握主要的原理。最后看了看一些图形学的概念,再巩固一下。11点左右,我睡了。
这是一个失眠的夜晚,不是不能睡着,而是睡了又醒睡了又醒。我很紧张,非常紧张,那种感觉比高考前一天晚上还难受。可能一辈子就这么一个机会,所以我无法不紧逼自己、一定要抓住。北京的早晨很早就天亮了,我记得6点多我就全醒了,逼着自己睡到7点,然后打开电视一边看凤凰早班车,一边梳洗准备。吃过面包当作早饭后,换好衣服,深深地吸了一口气,就出发了。
今天阳光明媚,风和日丽,我感觉应该会是挺顺利的一天,于是信心也满满的,不管如何,向着希格玛大厦进发。
再次走到希格玛大厦前,我感觉有点怯场,但看着时间已经到了9点25了,既然已经到这里,也就硬着头皮冲上去吧!随即,和一群正在上班的微软精英答上了电梯。
五楼,一出电梯门口就看到微软亚洲研究院的前台,虽然不算豪华,但很大气,看上很高贵典雅。银色的Microsoft标志,非常显眼。同在前台的还有一些其它的应试者,据说平均一天有5人面试,看来面试的通过率是相当的低的。由于我属于社招,不是计划招聘,所以我的面试单独进行,不属于那种集体面试,那我就一个人对一个HR。
HR姐姐出来了,就是传说中的Stella。她微笑着把我带到了三楼,传说中的微软亚洲工程院ACT,带到三楼的一个休息间。然后我看到,第二次Interview的Team Lead,也就是IG的SIGGRAPH组的老板,已经坐在那里等我了,手上拿着一份我的简历,另外还有一张纸,估计是评分表之类的。HR姐姐把我交给他以后就走了。相互寒暄一番后,面试也就算正式开始。
华丽的分割线————————————————————————————————
暂时称Lead为T,T很和蔼,感觉没有一点架子,他招呼我坐下后就开始和我聊起来了。这种面试其实不能算是一种“考试”式的面试,只是不断地聊天,围绕着一定的主题,而从沟通交流中,观察应试者的能力和技术水平。我很喜欢这种面试方式,因为交谈中可以有互动、有交流,一方面考官对你进行考察,另一方面和考官的交流也能提高自己的见识和水平,谈得不错的还能交上朋友,所以我很喜欢这种交谈式的面试。
和T的交谈刚开始的时候还有点紧张,后来就逐渐放松了,可能因为T很和蔼,也说了很多鼓励我的话,另外进入了主题以后,焦点就放到交流的内容上了。我就是这样的人,一旦谈起了自己熟悉和喜欢的话题,就很忘我地滔滔不绝。但我还是不断地控制着自己,告诉自己这是一个很重要的面试,要控制尺度。
T 之前已经电话面试过我了,所以他对我有一个大体的了解,问的都是一些之前的补充,以及一些细节。然后T给我出了一道题目,让我在草稿纸上演算,尝试做一下。这是一道图形学题,几何类,很基础的,我一看脑海里就有相关的想法了,但T把题目扩展出去,我只掌握了特殊情况下的解,而没有掌握一种涵盖所有情况的解。
机会是留给准备充足的人的,在来之前我浏览过了好多有微软面试经验的应试者的blog,看过很多建议和教训,知道和考官进行不断的交流是非常重要的,考官出题其实并非要得到一个答案,而是要看应试者的解体思路、以及面对难题时的态度。
每个人面对难题都有不同的反应,微软需要的,是有面对难题挑战能力的人。题目越难、技术越深、就越要表现得兴奋与无所畏惧,这样才是一个合格的研究员所要具备的工作态度;相反,面对难题愁眉深锁、患得患失、退缩畏惧的,不会得到进入到下一轮面试的机会。
同时要懂得表达自己的思路,要懂得和对方交流自己的想法,不要认为只是自己在解题,对方是监考官。这并不是一场考试,微软面试的一个重要特色,是做题目的时候,需要你和考官两个人一起解决。他是一个引导者的角色,也是你的临时搭挡。如果你只是一个人独立解决了难题,而不跟他进行任何的沟通,这会被认为是一种团队协作能力的缺失。团队需要的并不是独行侠,能够独立解决这些难题的牛人微软一个都不缺,他们需要的是可以融入到团队里,有沟通能力、有协作能力的人。
所以我在解题的时候,很注意和T的交流,不断地把一些想法表现出来,表达自己的思路,并从他那里获取充分的信息。
最后,我在T的提示和协助之下,解出了正确的算法,而T也对我的能力有了一定的认定。在开始下一轮面试前,T带我到茶水间,让我随便拿里面的饮料——整个茶水间就像小卖部一样,但所有的东西都是随便你拿的!这就是大企业的做法吧,回想在无锡、一杯小小的咖啡也要一个铁饼。后来到Autodesk的时候,看到他们也是这样,听说那里的茶水间还有伊云矿泉水任拿……国内的企业,什么时候可以做到这样地以人为本呢?
( to be continued… )
9.17更新
http://bbs.gzhu.edu.cn/dispbbs.asp?BoardID=12&ID=28112&replyID=434941&skin=1
10.29更新
http://bbs.gzhu.edu.cn/dispbbs.asp?BoardID=12&ID=28112&replyID=463124&skin=1