本人基本情况:双非本硕,有过一个小公司的NLP实习和一个比较水的Java项目,投递的是微软STCA苏州的software engineer intern 岗位,现在已经拿到offer。我是元旦放假期间在微软官网投了简历,1.6收到了简历通过的邮件,1.17-1.21面试,1.27收到意向书,2.10收到offer。当知道微软提前批开始时,正值期末考试期间,没时间准备面试,就想着去碰碰运气,听说苏州扩招了,应该会容易点,就投了这个,没想到最后居然过了。
面试的主要内容如下:
一面(1.17)
上来是自我介绍,然后问了之前在做项目时遇到了什么问题,怎么解决的?然后就开始做算法题了。面试官本来打算用Teams的聊天窗口把题目发给我,但我找了半天就是没找到Teams聊天窗口在哪,最后不得不改为面试官口述题目,然后任选一门语言实现。
第一题:给你一个数组和一个数target,要你将数组中值等于target的数删除,并把后面的数前移,要求空间复杂度为O(1)。这个直接双指针很快就ac了。
第二题:给你一个数组,两个人轮流从数组两端取数,取出的数之和大的为赢,假设两个人都以最佳选择取数,请问先开始者会赢还是会输?(后来才知道是leetcode486原题) 得到这道题后,我完全没思路,面试官提示说是动态规划问题,但我还是不会,然后面试官又开始了锲而不舍的提示。最后,在面试官不断的提示下,我终于在快结束的时候写出了状态转移方程。
最后是反问环节。
二面(1.19)
一面和二面是平行面试,只要通过一轮就行,由于我一面侥幸通过了,二面就跳过了。
三面(1.21)
上来面试官让英文自我介绍,我说没准备,就用中文了,然后面试官就开始对我的简历开始了提问。面试大致内容如下:
项目用到了什么模型?(提到了crf)
CRF是生成模型还是判别模型?
什么是判别模型?
你都用过哪些机器学习模型?(提到了决策树)
决策树每次划分子集的算法是什么,具体怎么工作的?
请介绍一下你的项目?( NER,用到了远程监督)
什么是远程监督?
远程监督具体是怎么用到项目中的?(词典匹配)
远程监督的匹配错误问题怎么解决的?
词典匹配怎么做的?
匹配算法的时间复杂度是多少?
你能优化一下你的词典匹配算法吗?(提到了字典树)
字典树具体怎么用?
你能针对此问题设计一种数据结构,并任选一门语言把它实现出来吗?
(这个没写过,只能硬着头皮去实现字典树了)
时间快到了,面试官开始提示我,不要只顾着写字典树,你要设计一个接口,方便进行词典匹配,降低原算法的时间复杂度
我照着他的要求写了一个供词典匹配的接口,然后就结束了
最后依然是反问环节
总体感觉:微软的面试官非常nice,不会的时候他还会耐心的提示。面试完后,我就感觉自己凉了,最后没想到我居然过了,也许他面试不只是考你能否把题做出来,还看沟通、理解和抗压能力吧。