微软2015春季校园招聘面试
之前报名参加了微软2016预科生计划,即面向2016年毕业的学生进行的实习招聘活动。
先是在hihocoder上参加了4月3日举行的在线笔试,做出了前2道题,估计排在300多名吧,就这样。
有幸收到了面试邀请邮件,今天参加了3轮面试。
早上10点,第一轮。面试官比较随和,问了我之前在MSRA做过的项目,聊了一会儿。接着是一道题,给你一本英文书籍,设计一个方法能够告诉书中每个单词出现的频率。这个题目我没有做过多的思考,直接回答使用哈希表存储单词,随着读取每一个单词,要么加入哈希表,要么其出现的次数加一。给出思路后,让我把代码实现了,这个问题不大,一切顺利。后面问我对移动APP开发是否感兴趣或了解过,回答或者说交谈了许多,我总的表态是不是很感兴趣,因为自己主要钟情于后台开发。最后还聊到了前端开发的一些特点,请教了他对于这方面该怎样学习。
早上11点,第二轮。面试官的表情单一,同样的,问了我之前在MSRA做过的项目,我再次将自己实习做的项目描述了一番。然后问我除了实习做过的项目外,其它觉得有挑战性的项目还有哪些?我回答了自己在实验室从事的关于Java程序内存泄露检测的研究,当讲到Java程序的内存泄露时,他说内存泄露的定义是…(如此种种,即C语言中的内存泄露),意思是我说错了。我并不奇怪,很少人知道Java程序也有内存泄露,而且其定义与传统的C或C++程序中的内存泄露并不一样,因此我向他解释了何为Java程序的内存泄露、“冷对象”的概念等。然后讨论了一些项目的细节性问题。接下来就是问题了,我说自己对C很熟悉,于是他连续问了四五个关于C的一些较peculiar的问题,诸如static
关键字的作用、指针的考察、头文件中定义全局变量等,基础不熟悉的话,任何一个问题都是陷阱。不过没关系,我最有把握的就是回答关于C的问题,一切OK,在我看来都很容易。然后是数据结构的考察,二叉树的遍历方法有哪几种、写出中序遍历的代码,这都好办,但是他接着让我写出中序遍历二叉树的非递归实现,先向他解释了自己的思路,但代码最后写了半天,没有实现正确。此轮面试结束。
12点中上午的面试结束,微软很大方,提供了很多饮料食物以及给每个人买了盒饭。上午两轮面试结束后走了六七位同学,剩下六七位,不知剩下的是面试结果好的还是差的 :(
下午2点,第三轮。面试官应该是香港或台湾人,因为从口音能听出来,从年龄看应该是级别高些的人。同样的花了大概20分钟讨论在MSRA做过的项目问题,问如果现在再让自己去做,会考虑哪些改进或优化?又问了职业上的规划,简单介绍了STC部门的实习方向:即移动APP开发和后台数据挖掘(我立刻明白了为什么第一位面试官问我是否对移动APP感兴趣)。当然,重点还是在最后,他给的问题是:在一个包含中英文字符及标点符号的文本中,把类似于“一千八百六十万”这样的以汉字描述的数字抽取出来,并将其转换为阿拉伯数字,依次存储到一个数组中。这个问题非常tricky,我的自我评价是做的很不好,如果你有兴趣可以自己试试解决方法。最后问我有什么问题,我问了他该问题主要出现在什么应用场景中?他回答说没有应用,主要是用于考察面试者思考解决问题的方式,也就是思维方式,并不是一定要做对做全。我恍然大悟,不应该一上来就开始写代码,而应该自己考虑一些简单的例子,再着手考虑解决方案。
回忆这几天的面试(包括上周的腾讯面试),的确是略感疲倦,收获也很多。基础知识很重要,算法和数据结构永远是核心,编写代码的能力要训练,不要写的婆婆妈妈的,而且要整洁大方最好。面试过程的心里状态要控制,沉着应对,每一次面试都是一次对话,是为了让面试官了解你,不要刻意表现也不要闷头不语。问的问题做不出来不要灰心,一点也不丢人,关键是要知道自己为什么做不出来,或许题本身有难度,或许是自己某个地方没有学明白,总之,是有原因的,一定要去发现。
静静的等待两家公司的面试结果。该着手做自己的项目了,踏实做事。