我在微软ATC的面试经历

本文纯属自娱自乐,请勿转载

前言:这篇blog写的是我去年毕业时在微软面试的经历,马上毕业生又要开始找工作,希望对某些网友有用。虽然没去微软是个遗憾,不过我现在在一家欧洲公司工作,公司很好,而且刚到公司就去法国培训工作了三个月,所以说塞翁失马,焉知非福,呵呵

今天总算和一家比较心仪的公司签约了,找工作这么长时间, 经历的正式的面试只有微软ATC、联想和我签的这家公司了,虽然微软在最后一轮被cut了,不过还是想把这一轮笔试和五轮面试的经历写出来,毕竟还是很涨经验值的,经历过微软的面试后觉得其他的面试都是小case了,呵呵。
11月得知微软亚洲工程院要组织大规模的笔试,就在网上报了个名,本来也没抱多大希望,结果笔试那天我大学的下铺结婚,去喝了两杯酒就匆匆赶往笔试地点,当时感觉不错,考完才知道最后两道题俺一字没写,呵呵,根本就没发现,唉,喝酒误事啊,不过本来就没抱希望也没什么遗憾的,就把这事搁到一边了,没想到12月1号晚上8点接到了atc的通知让我第二天去希格马大厦面试。
第二天下午早早赶到了面试地点,本来以为肯定会人头攒动的,没想到大厅里稀稀拉拉没几个人,一打听,只有一个和我同校的也是来面试的。呵呵,捱到四点叫我了,面试官是一个美国总部过来的华人,很精干的样子,当他跟我说nice to meet you的时候,心里还是咯噔了一下,我没想到这是全英文面试,坐下后他先做自我介绍,是从美国总部过来的,负责在上海组建一个team,做的产品会成为windows的一部分,以前是开发Visual Studio的。完了叫我介绍一下自己,blabla了一通,然后叫我在白板写一个函数,计算一个字符串里有多少个单词,很快写了出来,他说我的程序里有一个bug,找了一会也给找出来了。然后又给我出了一道智力题,就是那个很经典的称药片的题,可惜俺当时太紧张了,想了一会说can't figure it out,他提示了一下,总算给解了出来,他说比较看重人的problem solving的能力,呵呵。最后问我想去上海还是北京,虽然知道他是招人去上海,不过还是没多想就说了北京,不过还是强调上海是个international city,有很多chance(应该说opportunity,呵呵)。然后就回来等消息了,谁知道过了两个星期没一点动静,又觉得没戏了,谁知在不抱希望的时候又收到上海ATC的面试通知,让俺去上海做一个on-site interview

到了上海,才发现这里的物价好贵啊,呵呵,吃一顿就没下过15块,比北京还贵,随便在徐家汇找了一个小破旅馆也是198一晚。到了面试现场,接待我们的是一个美国总部过来的HR mm,她先向我们交代了当天的日程,有五位面试官面试我们,都是比较seasoned的,所以我们比较lucky ,当天的candidates也是五个人,只有我是外地+应届,其余的都是上海本地+社会,每轮都是一对一,时间一个小时左右,完了以后到接待厅安排下一位,就是连轴转。第一轮是一个老外,没聊两句就让我在白版上写一个程序,很简单,比较两个字符串,很快就写出来了,然后就是写这个函数的test case,可以说微软的特色就是让你做题了,写程序和测试用例的时候应该考虑全面一点,写的代码应该有错误检查,其实出的题都不太难,主要看你的problem solving能力和编码风格,虽然这里很看重个性的发挥,但是一个生产高质量的软件产品的公司可能更看重你的“engineering”方面的东西,所以考虑问题越全面越好。第二轮也是一个从美国回来的华人,也是没聊几句就做题了,将字符串转换为整型,一会就写出来了,跟着就是测试,这次做的很快,剩下的时间就是瞎聊了,我应聘的职位叫SDET(Software Design Engineer in Testing),不过并不是单纯的黑盒测试,而是写代码测试别人的代码,SDET和SDE往往是一对一的,SDE写代码,SDET写代码测试他的代码,SDET还会开发一些自动测试的工具。语言方面以前一般都是用的C++,近年来已经逐渐转向C#了。

接着说第三轮,也是一个华人,这是唯一一个跟我用中文进行交流的面试官,本来也是英文的,但是他不小心冒出一句中文,我顺着他的话说下去,结果就成中文了。  上来就是做题,俺的不顺也是从这儿开始的,呵呵,题目是一道完全二叉树变换的题,可惜他说的题我没理解题意,我问他的问题他也说不懂我在说什么  。然后他说这道题太复杂了,换一道吧,唉,就给我换了一道链表的题,匆匆忙忙做出来,他说我的解法效率不高,马上又接着改,刚好做完时间就到了,sigh。这是已经是又累又饿了,呵呵,其实微软的面试既是脑力活也是体力活,而且在当时那种状态精神高度集中,很消耗脑细胞的。上次在北京面试过我的那位面试官没有面试我,最后一轮是一个老外,是微软的高层,四五十岁的样子,88年就加入微软了,上来就介绍自己,扳着指头跟我数他开发过的产品Windows、SQL Server、Visual Basic、Office,反正是牛得不能再牛了。唉,俺就是在这一轮全线溃败了,不过也确实是自己在某些方面存在缺陷。这里要说一下,每面试过一轮,面试官就会集中在一起讨论15分钟左右,接下来面试你的人就会根据上一轮你的不足之处进行面试,所以面试的时候千万不要不懂装懂,不知道的东西就老老实实说不知道,一个人如果要在四五轮都不露出马脚估计得经过专业训练才行。如果你撒谎被发现的话,无论你有多牛也就没戏了。而且这个时候也正好是你发现自己的弱点的时候,让你知道自己应该在哪些地方加以改进,所以暴露弱点也并没有什么不好的。OK,这位面试官告诉我前面都是给我出的我见过的题目,这次要出一个我从没见过的题目,因为微软经常会需要解决一些从没遇见过的问题。这道题是叫你写出5+3=8的二进制表示和负二进制表示,呵呵,各位网友可以考虑一下,当时主要原因是我没弄懂题意,开始没想到base minus two就是负二进制,还以为是他自己发明的一种表示方法,唉。结果在他的再三提示下我才做出来。而且我的弱点之一就是不善于在很大的压力下思考问题,呵呵,而且是从没遇到的问题。第二题是一个小学的数学应用题,我解到一半算出答案是无穷大,以为自己的解法有问题,就把已经做的给划了,他问我为什么把这些cross out了,我给他解释一通,他说我的算法是对的,我真是ft,看来还是要相信自己啊。后来他问我有没有什么问题,我脑子已经木了,就说没什么问题了,当时出来已经快中午12点了,面试了差不多四个小时。然后HR mm告诉俺面试结束了。回来后没多久就收到现在这家法国公司的面试通知,再去这里面试已经是自信满满了,呵呵。

经历了这次面试,感受还是很多的,微软的面试官都非常热情,给人感觉很有亲和力,而且他们对你的态度也是真心的希望你加入他们公司,而不是有意刁难你,不过我后来发现外企有很多都是这样,怪不得很多人都希望去外企。如果想去微软做SDE或SDET,打好基础是最重要的,无论是笔试还是面试,都一再让我认识了数据结构和算法的重要性。现在很多大学生觉得这些东西没用,去学什么ASP等等,其实是本末倒置,编程语言也不是最重要的,面试的时候只要你能表达思路,用任何语言都没问题,我主要是用的java,其中的面试官就说我可以用Java做题。而且经历了这次我也看到了进微软其实并不难,起码并不是遥不可及,确实微软有很多牛人聪明人,但这种聪明并不是什么天才天生来的,而是考扎实的基础和不断的实践锻炼出来的。全世界只有一个爱因斯坦,大部分人其实谁也不比谁傻多少。除了打好基础外,分析问题和解决问题的能力也很重要,微软的题目都不是很难,但也不会让你一看就知道答案,如果你只应聘软件开发,不会问你“怎么向爱斯基摩人推销冰箱”这种问题,所以平时的学习要注重独立思考,比如堆栈这个东西,学过DS的都知道,但要问这个数据结构应该应用在什么场合,能解决什么问题可能很多人就答不上来了。这些题目一般都不会在教科书上直接找到答案,比如有道题是如何对单向链表进行排序,一般的教科书只有对数组进行排序的。再一个就是要培养自己的测试能力,微软是很看重测试能力的,每写完一个函数就会要你写test case,这是思路一定要开阔,任何想到的test case都可以说出来,比如测试一个字符串,你应该想到这个字符串会不会太长装不进内存,是不是含有非英文字符,每个字符是单字节存放还是双字节存放等等。呵呵,这些就是我的体会了,想去试试微软的网友可以参考一下,另外就是面试的时候多跟面试官交流,有时一道题你可能做不出来,但起码应该把你的思路告诉他。就是这么多,祝大家好运

你可能感兴趣的:(JAVA,JAVA,其他)