当我接到微软HR电话的,甚是欣喜!~毕竟在无数的developer中能够选到我的简历(未投简历,HR说是智联上看到的!)。约好了第二天面试,我就马不停蹄的准备。传说中微软所有的笔试、面试都是考察算法,所以我也做了很多准备。
笔试:
到达微软中国研究院的时候,由bony(美女,后来知道是个PM)带我上去,然后就开始做笔试题,笔试题时间1个小时,全部是英文,最后两道是算法编程题,而且注明了必须作答。看着满满三页的英文试题,说实话真心有点虚!第一道选择题,把指针相关的东西考了个遍,而且选项里全是陷阱,这道题做完,用了10分钟,同时我也觉得希望渺茫了。但是第二题、第三题...越往后越简单,基本全是算法的细枝末节。选择题最后,有5道智力题,题目特别长,阅读了半天终于算是做完了!~剩下20分钟开始编程题,两道题都不是很难,题目就不说了,都是基础算法题。主要考察编程的严谨,和边界的考虑。编程题非常顺利,做完后检查了一遍,交卷子。
面试第一轮:
面试第一轮是技术,2个人,一个女的,一个男的!无非就是笔试做的怎么样,等等的问题。关于最后的两道编程题,问了很多细枝末节的东西,最主要是我写的算法时间和空间复杂度是多少?还有能否用其他的方法,时间和空间复杂度又是多少?第一轮技术完毕,明显感觉到面试官很满意。就这样我进入下一轮。用时:30分钟。
面试第二轮:
面试第二轮还是技术:1个人,应该是技术的老大。问了我很多简历上写的项目经验,几个大的项目全部问了,非常详细。还有就是关于他们的岗位说明。到这里提一句,他们的面试节奏非常快,考虑的时间基本以秒为单位。这一轮聊得非常嗨,没有第一轮那么紧张。用时:1小时。
面试第三轮HR:到这里其实我已经非常疲惫了,毕竟前面已经折腾了几个小时,HR大致问了关于几个问题,然后就是薪水。问我年薪期望多少?我说税前20W/年。但是前提是能够交一部分在公积金账户,买过房的人都知道这是什么意思。人力资源说,他们的这个岗位预期 25W,所以能够满足我的要求。这个时候,我心里那个美啊!然后人力资源让我在另一个会议室继续等待。~用时:30分钟。
面试第四轮技术:我的妈呀!此时我接近奔溃的边缘。面试官是一个穿着很随意的一哥们(拖鞋),进来就说:“我们随便聊聊!”,开始问了几个基础的问题。后来说,如果现在10分钟写一个算法,你愿意做那块内容的?我说那就链表吧,单的双的随便。然后那哥们说,准备了吧!~我说恩!~然后他说,这个太简单!~然后他就随便出了一个题,用两个队列模拟一个栈。考虑时间复杂度和空间复杂度以及安全性。(此时我心里想,你妹的,这是随便吗?),然后他就出去了,然后我就写代码!我先在草纸上画了图,谢了伪代码,刚写完入栈的函数,时间到了!~然后他让我讲整体的思路。讲了很长时间,他到处挑毛病,最后我又改了程序。总算OK~他最后让我等HR,我以为当天能出结果呢!~但是5分钟后,HR说,今天的面试OK了,等待复试通知!~我从微软研究院出来,下午6点10分!下午面试:13:30-----18点:10
五天后,隔了个小长假(3)天,HR打电话说,我进入了复试!~并说10个人只有两个进入复试。复试定在了当天下午,我基本没有时间准备,还是13点半,我到了微软研究院,我确实看懂了和我一同进入复试的哥们,顺便说一句,那哥们一看就学术帝!
面试第五轮技术:妈呀!还是技术。面试官问了我几个技术性的问题,然后又出了一道编程题,非常之难啊!~大体意思是,有很多不同形状的方块,填满一个不同规则的图像。考察点是链表、图的遍历、递归算法等等。20分钟,伪代码写完,面试官又开始挑毛病,讨论时间空间复杂度!~就这个问题讨论了,近1个小时。最后,面试官说,结果还行!然后他开始在电脑上写评语。我以为终于结束了!~但是他还是让我等待。
面试第六轮(最后一轮):面试官进来,第一句话就说这个是最后一轮了,放心吧!~其实我在冒汗,中午没来得及吃饭,整个人发虚了!这个面试官说话,特别快!~而且一个问题追问到底~开始问了一些基础的算法,让我写了一个算法!~还好,不是太难!但是我写完后,没有注意到忘记拷贝一个结束符。然后面试官直接说:你觉得这个函数可以run吗?我仔细看了看,没啥问题!但是他又说:你确定?此时我心里慌了,我看了看,改了几行代码!他看了后说,你确定这个可以run?我彻底奔溃!我说可以,然后他告诉我我改的几行全部改错,因为源代码没错,只是少了一个结束符。我晕!他说话太快了,给我的思考时间就5秒左右。此时,我手心里全是汗!好歹大公司的面试也参加过很多次,但是没有这么狼狈的!面试官,又开始考察另一个算法,很简单的算法!~但是用不同的时间和空间复杂度实现,我记得是C语言课本上,有过哪几个算法!~然后我只写出了1种实现方法,时间复杂度 O(n),但是另一种方法没有实现,只写出了伪代码。此时,我基本发慌,大脑一片空白!他还是那种语速,问了几个相关的问题,我答得都不怎么样!~期间他不断地便问我,边敲着键盘,应该是写评语。最后,我们又聊了10分钟题外话,大体意思是,能够进第六轮的,凤毛麟角!能够通过第六轮的凤毛麟角中的凤毛麟角!他还给我介绍了很多经典的算法的书以及数学的书。最后,我问了一个问题:“我问你们所有的developer 和所有的code都是精益求精吗?”,他的回答是:“他们的developer分两种,online和offline。大意就是 online是给用户使用的,必须精益求精。Offline是内部的demo,稍微差一点,但是这些岗位都是实习生!”。最后愉快的把我送出了微软研究院。
总结: 微软和其他的上市公司的要求确实不一样,微软更注重思维(第五轮)、基础、以及code的严谨;最主要的是效率,也许这就是一个高效率企业最基本的要求吧!~如果我这次失利,一定是失利在了基础上,这个基础并不是你的编码基础,而是对计算机以及编程的理解基础。就是第六轮一直考察的。出师未捷身先死,继续努力把!总有一天我会再去的!~PS:他们的咖啡间太棒了!哈哈!应有尽有!
-----------------------------------5.16 update--------------------------------------------------------------------------------
后来又加了两轮面试,全部通过!下周一入职了~新的平台继续努力!