昨天在苏州微软现场面试了三面,算是把微软这一系列的流程给走完了,现在写个总结。
一、笔试
笔试环节就不说了,微软都是在hihocoder上做类似ACM的题,4道两个半小时。如果有需要可以提前刷刷题目,这些题目相比lintcode,难度更大一些,而且更灵活。
今年的微软笔试有一个补试,之前有过一次笔试,当时是太难了,两个小时我一道题没做出来,就给页面关闭了,也没有提交任何答案(因为本地没有正确输出,现在看看这是一个明智的选择)。过了几天微软那边发了一个链接,询问是否因为其他原因没有参加上次考试,给了个补考的链接(我同学提交了没有分数的没有收到这个邮件),于是我幸运的通过了这次笔试,拿到了面试的资格。
二、面试
收到了面试的邮件之后才发现,这个面试环节也有很多差别。因为牛客网上有个提前都收到了好几轮的skype电话面试,而我从来没有收到过,也不清楚为什么。
到了苏州微软之后,先是会给你一个标志贴到身上,然后等待面试官叫你。
到了约好的时间之后,会有人刷卡给你带上楼,到一个会议室等待。
- 一面:
面试官是一个很年轻的家伙,由于之前有在腾讯面试的经历,以为这也是外面找的志愿者,结果一问就是我的面试官,后来聊天得知30岁。
上来是自我介绍,由于我的课题比较偏,他问了问我一些医疗方面的内容,说只是感兴趣,不是考察项目。闲聊几分钟后开始做题。
题目不难,给定一个乱序的链表,给定一个数字,把比这个数字大的结点放在后面,比这个数字小的结点放在前面,要求稳定性,即保持原数字之间的相对位置。
想了想写完了,我写的方法跟他心中想的不一样,于是他多看了会,跟我说,一般别人看到题目想到的是那个partition算法,但是你没用,所以他在验证我正确与否的时间稍微长点,还鼓励我这样不错。然后他又说那在换一题吧。
第二题是找出数组中的中位数。
我想了想问面试官,您刚才说到partition,是想让我写这个算法?他大概说了下差不多,于是这道题直接用partition给解决了。
- 二面:
年纪稍微大一点的家伙,看了看简历跟我闲扯了一番,上来的一个问题竟然问我有没有用过C++ 14,当时有点懵了,自己写代码还是挺少的,没用过,后来有问的operator重载是否能改变参数类型,还有类型转换有哪几种等等。然后又问了C++为什么要设计多态这种功能,同时还问了多态的优点和缺点。
根据简历问了点问题之后,又是一个算法题,也不难,动态规划。
一个n * m的棋盘上,起点在左上角,终点在右下角,每个位置上有不同的金额。只能向左边和下边两个方向移动,要求找到最大的金额以及路径。
后来做完题时间剩的也挺多,就跟面试官扯了一会,他说他比较喜欢什么都能跟他侃的人,而且这一面也只是做为参考,最重要的还是第三面。
- 三面:
一面、二面之中过了任何一面,会有第三面。
三面的面试官明显大前两个人几岁,而且题目也会难一点。上来先说了下interface之类的问题,我也不会,他想了下这个好像是Java里面的,说了几个看我都不会直接做题了。
4个数字,算24点。
题目很简单,当时自己给自己绕进去了,最后在他的提醒下算是大概写出来了。但是时间也到了。
现在想想,开始不该在自我介绍里面扯太多东西,也不该发散的,既然知道了微软这边的要求就是做题,应该多留点时间做题的。
面试官人依旧很好,会有提示和鼓励,并且在结束后还安慰我说,应该先给你做另一道题的,相对简单点,能给你点信心。
因为现场会有其他来面试的同学,大概问了问题目分布,感觉这个也是看面试官,每个人的问题知识点差别都很大,但是流程都差不太多,做题为主,不过有个家伙三面是问项目,没有做题。在微软一般都会管中午那一餐,伙食还算不错。
好了,大概就写到这里吧。
你好,想问问收到结果了吗?
嗯,收到了