前段时间春招都陆陆续续开始了,我也投了一些公司,反馈都比较慢,反而之后投的微软安排很快,两周之内就收到了onsite面试通知,当然是选择接受。投递的岗位是微软官网挂出来的Data Mining/Algorithm/Machine Learning Scientist Intern,因为秋招想找算法岗,所以实习也想找一找相关的,奈何现在又缺乏拿得出手的算法经历,不过好在听说微软面试只问算法题,这也是我投递微软的一个原因吧。
辗转到了苏州之后,直奔微软。在旁边随便找了家餐厅解决了午饭,随后随便逛了逛,看时间差不多就去微软前台报到了,随后面试官下来带我去面试房间。第一面是一个非常和蔼可亲的小哥,和他说话有一种很舒服的感觉,随便聊了聊简历,然后开始做算法题。因为看我简历上写了自己实现过各种机器学习算法,然后说到了线性回归,问我熟不熟悉最小二乘,我说熟悉。然后他出的第一道题目是:
在二维平面上给出一堆点,要求用分段最小二乘的形式,求出最优的拟合方案。即可以用多条直线拟合这些点,每多增加一条直线,总的损失会增加一个常数C。
一开始确实大脑一片空白,然后给出了一个贪心的解法,面试官提出这种解法不一定能得到最优值,然后想到了用动态规划来求解,面试官听完比较满意,然后就是手写代码。第一次手写代码偷懒,有很多不规范的地方,面试官也给我指出了。后来就是出了第二道题:
有G个组,给出每组的人数,同时有T张桌子,每张桌子最多可以坐10个人,并且同一组的人不能坐在同一张桌子上,问如何判断是否有解?
这道题我想了一段时间没什么思路,然后面试官提示可以往图论方向思考,我说图论不太熟,他就换了个比较简单的搜索题:
给定二维平面上的一堆点,给定距离d,距离不超过d的点可以归为一类,要求输出总共有几类点,并且给出每一类里有哪些点。
这道题用简单的深度优先搜索就可以求解,跟面试官说了思路之后还是要手写代码,顺利通过。然后一面所剩时间也不多了,面试官还善意地提醒了我一些要注意的点,主要是代码规范方面的问题,说有的面试官可能比较在意(后来视频三面才深切体会到这位面试官的良苦用心)。
然后是第二面,第二面的面试官有点高冷的感觉,同样是上来随便聊了聊简历,然后开始做题。二面只做了一道题:
给定一个二维数组,代表一个滑雪场。二维数组中的数字代表滑雪场对应地方的海拔高度。规定滑雪只能从高处滑向低处(两处相等也不能滑),求最长的滑雪距离。
咋一看是一道搜索题,跟面试官讨论了一下可以直接遍历深搜,但是时间复杂度比较大。面试官说可以先认为数据量很小,然后就让我手写了最原始的暴搜版本。接着分析了时间复杂度和空间复杂度,然后提出对当前版本的优化。思考了一下可以用记忆化搜索,面试官听了思路表示赞同,然后又是手写代码,因为是对上一版本的修修补补,所以很乱,实现的也不够优雅,有点“曲线救国”的感觉,后来又写了一版较优雅的版本,面试官看了也点头表示赞同。不知不觉二面的一个小时就这样过去了。最后问了面试官所在部门,以及实习生一般做什么工作,多久会有后续通知,onsite两面至此结束。
然后找苏州的小伙伴一起吃晚饭,路上一直觉得二面没发挥好,有点遗憾。正和小伙伴在餐厅闲聊,就收到了微软的三面邮件通知,是线上面试。三面前向之前在微软实习的学姐打听了一下,说三面是manager面,一般就是聊一下,然后也会问算法题,也会问开放性问题。我早早的来到了微软的网上面试房间,等待面试开始。后来面试官来了,听声音也是很和蔼,一直在笑,问我有没有准备英文面试,有点突然,也只好硬着头皮上,跟面试官进行了简单的英文对话,问题类似于爱好、对微软的了解之类的,现在回想起来当时答得都不太好,应该多聊几句。然后面试官给了一个链接用于在线写代码,他那边可以同步看到。面试官给的问题非常简单:
给出年月日三个数字,要求输出是那一年的第几天。
我三下五除二就写好了代码,面试官直接说你这个代码有问题,会crash。我找了半天,急的直冒汗,然后问他输入是否一直合法,他反问道“你说呢?”当时就有种不好的预感,平时刷算法题输入输出范围都是规定好的,突然来这么一出还确实有点不适应。然后加了输入合法性判断,并且在面试官的提醒下改了判断是否是闰年的bug。然后面试官说这个代码能用,但是不太好,还可以改进。我急的直冒汗,想了一会儿问他是不是代码风格方面的问题,他说算是吧。之后又是修修补补,他都说没改到点子上。就这样过去了40分钟,面试官说时间也不多了,第二题也来不及问了,我们就结束吧,我连忙问他我有哪些需要改进的地方(内心戏是想死的明明白白),他说是代码规范的问题,比如函数的命名、返回的类型等,并且建议我多去看一看不同语言的编码规范。
三面面完心情极度低落,但晚上六点多却收到了通过面试的邮件,不得不感叹微软效率之高,自己的运气还不错。
总的来说,微软的面试体验还是很棒的,这次面试也学到了不少东西,希望自己以后与人交流的时候能少点紧张,展现出自己应有的水平,秋招有个满意的结果吧。