面试经验分享平台

将近几年的名企精品面试汇总、筛选、整理,再分享给大家
经验详情
Microsoft面试 - 面经+经验分享

之前一直有打算把我去微软面试的经历分享出来,苦于一直忙于各种作业deadline和paper deadline没时间考虑这个,这周paper搞的差不多了终于抽了个空决定在校内写下我的第一篇日志. 面经之前有在一亩三分地上发表过,这次re-post一下造福各位好友.原文请见: http://www.1point3acres.com/bbs/thread-22130-1-1.html

五大牛逼公司:Google,Facebook,Apple,Microsoft,Amazon 加上其他还有一些很不错的公司: eBay,IBM,Oracle,EMC, VMWare,SAP,Yahoo,Oracle,Linkedin,Twitter,Qualcomm,Intel,Akaimi之后要找全职也会考虑.目前对我来说MS还算是一个蛮decent的选择,去了之后再好好准备一下冲刺Google. 五大牛逼公司各有特点,但是最适合我的应该还是Google了...so...stay tuned

===============================我是分割线=================================

周一去Seattle, onsite一共五轮前四轮面的不错,最后一轮死在三哥manager的口音上了,不过不知道为啥最后还是牛逼了一下. 第一次在美国面就拿到了offer, 纯粹狗运啊. 等周末过来写一下感想以及面经,造福后人. 不知道地里是不是最近还有人陆陆续续去Seattle onsite呢?

-1.24.2012

 

===============================1.28.2012 更新==============================

首先介绍一下这次面试的全过程, 回报地里. 在下语文从小就很差, 文笔方面还请大家见谅 :-) 

On campus: 
和地里的众多农民一样也是在十一月左右的时候微软on campus interview. 面试官是一个project manager澳大利亚人,五十几岁了有些口音但是可以听懂. 看上去人比较nice笑嘻嘻的,一把年纪了代码也写人也管. 上来先问问项目经验,然后写了一个简单的反转字符串的程序,说了一下算法复杂度,还说了一下什么是一个好的code,如何测试自己的code之类的很莫名的拿到了微软的onsite. 因为我打算冬天外出旅游一个多月所以把本来十二月中的面试推到了一月二十几号...当时没有怎么多想, 觉得MS拿来练手也不错. 公司那么多, 随便找个实习也不难. (事后证明也不难)


On site: 
一月十六号结束了长达一个月的东部之旅回到Boulder, 面试在二十三号, 当中由于搬家找室友买家具等一系列琐事耽误了, 真正就复习了四天左右的样子. 和地里众多农民一样,我也粗略把careerup粗略扫了一遍,大概百分之二十的题写过代码,其余的看了一下思路,实在是来不及,总结了下各类套路, 还看了一些CS的基础知识, 其中包括了: Java语法, 常用Collections, c/c++的一些基础, 数据结构里面重点看了Tree和Graph的一些操作(BFS DFS等等), 多线程编程的一些best practice, 操作系统概念(死锁,线程的机制,paging之类), Java performance的best practice. 之后在飞机上再次熟悉了自己简历里面写的一些工作经验和项目经验. 由于早上实在太困,随身带的编程珠玑也只看了第一题. 到了Mariott我开始把地里面的面经都过了一遍, 再次快速扫了一边careerup就打算洗洗睡了. 当时觉得面试这个事儿也看缘分, 题目做的出就做的出,做不出再怎么突击也没有. 面试很吃经验也看缘分, 心态好点就行.

第二天约了十点和HR见面, 八点三刻我就到了大厅, 和HR聊了大概十几分钟, 主要问问我会如何选择实习offer, 自己的职业规划, 对于这次实习有什么期待,还申请了什么公司,有没有什么pending offer或者deadline之类. 然后告诉我十一点开始面试. 这下悲剧了,要从九点等到十一点...和我同去的有三个CMU来的undergrad:一个韩国的两个中国看上去都不太友好.还碰到一个已经拿了Amazon实习offer的osu的三哥master. 别的来面试的都西装笔挺的估计是面business的职位的. 我到处转了一会看看他们的新的windows phone顺带准备了和公司背景的问题, 以防最后环节没有问题问面试官. 好不容易熬到了十一点乘了微软的shuttle去了指定的building41, 面试终于开始了.


第一个面试官是个三哥, 在微软干了十八年. 题目是给一个游戏设计一个数据结构以及实现一个function. 游戏大概是在一个棋盘上面有几艘小船, 形状不规则. 设计一个fire()的函数, 使得每次对棋盘射击,如果击中了船, return hit,如果没有打中return miss如果船上的点全部被击中,return sink, 并销毁所有点. 感觉题目比较简单, 除了船身形状的问题和面试官讨论了一分钟后,别的都顺利写完. 之后介绍了一下自己以前的工作做的项目, 顺带问了一下自己的background和目前他们项目的match程度. 


第二个面试官是白人的lunch interview, 他一看上去就是写代码很多年的那种. 吃饭的时候问了些behavior的问题, 很容易应付, 主要看看你这个人是不是可以很快适应公司的背景, 表现的大方一点就可以, 多笑笑, 很好混过去, 还聊了聊之前项目管理的经验, 以及之前对在中国的外企的一些现象, 他表示很有兴趣. 吃完午饭, 首先问了项目经验, 然后技术问题: 给定一个树, 如何把树里面的数据结构保存起来传送到另一个机器上, 然后recover树里的信息. 然后好像还考了一个二叉树FindNextNode的问题, 之后他貌似有故意confuse我一下,说我代码里面有bug, 然后我给他解释了一下我的代码思路. 他说okay别紧张, 再看了看就过了. 感觉有时面试官会故意为难你一下看是不是对自己的代码有信心.这个时候要稳住沉着应对. 


第三个面试官是也是白人写前台UI的. 套路一样,介绍项目经验,然后出了一个计算后缀表达式的题目.我给了三个解法, 死做,不停的scan然后把中间结果替换进去, 用stack做, 还有用树做. 写到后面时间不够了,就说了一下每个解法的算法复杂度, 见我意思到了就好了. 个人感觉他有点混呵呵, 随便想的题目.


第四个面试官比较大牌,中间等了一个半小时...应该是大组的manager吧. 不过是三哥的名字...心里一颤. 三哥的口音是很致命的. 果然不出所料, 首先问了问什么是项目里面的people factor, 接着两个technical的题目的题意都理解错了. 1. 他给了个多线程程序, 问当程序运行的时候堆栈里面分别有几个变量. 2. 给定一个字符串 String str= where are you from*&**&^^&**....等一大堆没用的垃圾信息, 要求反转里面的words, 变成from you are where*&***^*&^... 要求是不给额外的buffer还要in place的交换 3. 第三题给定一个函数draw(x1, y1, x2, y2), 实现一个drawCircle的程序画一个圆. 4. 给两个arraylist写一个函数mergeSort一下, 要求去除重复. 感觉面试的不太好,因为口音的缘故, 一上来两个题目意思都理解错了, 不过经过提示勉强写完, 第三题给了一个解法他不满意说是invalid的解法...之后告诉了我答案. 第四题也草草写了一下. 然后给了我一下反馈, 说"***, you didn't do very well," 还说我不会solve the ambiguity, 要我以后多问问题. 瞬间感觉亚历山大, 明明是有口音,导致我开始有些紧张..不过三哥经理安慰我说面试有好多轮, 他们会综合考虑的.
总结: 自己准备比较仓促, 面试也遇到了特殊情况, 但还是运气比较好, 第一次面就拿了offer. 希望大家也有和我一样好的运气.

Tips:
1. 面试的时候要说话大方点,自信点, 表述要清楚有条理... 可以在强调的地方表述的慢一点, 把面试想象成一次presentation, 把自己的优势展现出来, 而不是告诉人家我的短处. 个人觉得我的口语占了很大的优势, 所以前三次都感觉面试官挺满意. 这也是我可以在最后一轮mess up的情况下拿到offer的原因. 面试结束他们都笑着把我带到了下一个面试官那儿去...这个就是一个很好的反馈.
2. 和面试官见面, 一般我先主动问好, 随便扯扯淡, 然后让他们介绍一下自己的项目和工作职责, 之后再结合一下面试官的项目, 介绍一下自己的技术背景和经验. 这样子take initiative的话, 感觉比被动的问问题要好. 为之后做technical question热热身, 也活跃了气氛
3. 碰到一些technical question一下子没有思路的, 可以ask for a hint, 然后可以和面试官多说说自己的理解, 一般来说工程师都会比较nice, 愿意帮助你. 
4. 写代码的时候也是要多和面试官互动, 说说自己代码的思路, 问些exceptions是不是需要处理, 是不是需要scale-up, 是不是会有内存的问题,并行之类的. 问清楚了这些才开始写代码, 而不是一开始就自己根据自己的想法. 这样的比较有条理的approach面试官应该会比较喜欢.
5. 一轮面试mess up了不要紧张,下一轮重新来过.  take it easy. 碰到口音的问题, 可以让面试官重复一遍问题, 之后可以叫他们画个图或者举一个例子说明一下之类的. 碰到三哥也别害怕, 也有很多nice的三哥.
6. 对自己的简历一定要熟悉, 每次和不同面试官介绍项目的时候最好说不一样的东西, 他们之间也会交流反馈. 而且在介绍项目的时候, 可以结合面试官自己的项目背景适当的问些问题, 表达自己对他们组的兴趣. 
7. 最后一轮不能放松, 不要以为最后一轮经理不懂技术, 或者不会问技术问题.(以前我一直assume经理面都是比较high level的) 这次最后一轮竟然问了四个technical question, 完全没有意料到.
8. 我们学校才三十几名算不上top tier的, 但是每次career fair都有一些大公司来招人. 拿到面试之后, 学校招牌和简历都没有用了, 完全看自己实力. 因此大家有拿到不太好的学校的MS不要慌, 练好基本功, 工作机会大大的有.我有知道有人拿到了一百两百名学校的CS的Master照样进了上述这些NB公司...所以这个完全看人的.