微软社招STCA面经
电话面:
- 自我介绍
- 项目问答
- 技术框架
- 简单八股
- 总结:电话面没有考算法题,可能是和面试官比较聊得来,针对项目的提问会问的比较宽,向多个相关领域发散提问
一面 55分钟:
- 自我介绍
- 项目问答
- 算法题:假设有一系列的从起点到终点的路径,形如[(start1, end1), (start2, end2), (start3, end3), ...],现在需要保证同一个节点上最多只有3条经过的路径,问最少删掉多少路径就可以满足要求。每条路径的起点和终点都是正整数,一条路径所覆盖的节点包含起点和终点。例如输入:[(1, 3), (2, 4)], 那么对于节点1,2,3,4来说,经过它们的路径数分别为1,2,2,1
- 总结:算法题应该不是leetcode原题,像是一个题的变种但具体是哪个题想不到,不过也可能是我刷的不够多,如果有见识过的大佬麻烦指个路。这一面算法题解的时间稍长了一点,最后在面试官的提示下过了
二面 60分钟:
- 自我介绍
- 项目问答
- 算法题:①链表删除倒数第K个节点,②由1和0组成的平面N*N矩阵,1代表可通过,0代表不可通过,现在需要从左下角走到右上角,问最短需要多少步,③电梯调度算法
- 总结:前两个题基本上leetcode原题,第一题秒了,第二题面试官说先讲讲思路,讲完了思路后面试官说不用写了,然后问了如果让我设计电梯调度的话,怎么去设计,和面试官边聊边说设计思路就过了
三面 50分钟:
- 自我介绍
- 项目问答
- 算法题:找到两个单链表相交的起始节点
- 英语考察
- 为人处事
- 总结:针对项目问问题的时候问的很细,会问为什么这么做,这么做的时候遇到了哪些阻碍等等。算法题leetcode原题,要注意边界条件。英语考察是算法题解完之后考察的,当时的面试官问我英语怎么样,我说还行,日常交流没问题,然后面试官就说那你用英语总结下刚才的面试过程吧,我:……OK。这个考察来的太突然,我一紧张嘴上说的时候就有点磕巴了。英语之后就是问了问之前工作遇到些什么问题,怎么解决的,未来可能会有哪方面的工作,能不能接受等等。
四面 45分钟:
- 自我介绍
- 项目问答
- 数学题:样本的无偏估计,样本方差和总体方差,样本均值和总体均值等
- 为人处事
- 总结:这一面已经是最后的大老板了,多数时间在聊天,考察数学题是我没想到的,答对了一半错了一半吧
至此面试就结束了,网上看到微软如果面试通过的话大部分情况都会当天或者第二天就确定录用,但是我等了快半个月还没消息,后来HR联系我说原先的组有一些别的安排,问我愿不愿意换个组再尝试一下,会尽量帮我减少面试轮数。想来可能是最后一面数学题没答好,加上为人处事环节有些做法没表述清楚导致挂了吧。我跟HR说可以换组再尝试一下,然后是换组之后的面试,帮我省去了电话面和第二轮的前面两面,直接从三面开始。
三面 55分钟:
- 自我介绍
- 项目问答
- 算法题:LRU改编题
- 总结:项目问答问的很细,有一个点和面试官沟通解释了很久,项目问完都半个小时过去了。算法题刚好前一晚复习到了LRU,题目只是加了一点设定,只有能手撕LRU就没问题
四面 38分钟:
- 自我介绍
- 项目问答
- 算法题:有依赖的一组任务,给出完成任务的顺序
- 总结:这一轮很快,中间还有人找面试官,面试暂停了一会,算法题就是leetcode210,注意边界条件,比如有循环依赖的任务怎么办,解完算法题面试官发散问了一下如果想得到所有可能的执行顺序应该怎么做,我说了下思路就结束了
换组后的面试至此就结束了,面试结束之后的心态很平和,感觉没戏了,因为三面的时候和面试官讨论项目讨论了很久,虽然最后解释清楚了但感觉面试官会觉得我表述不够好,四面的时候面试官问完算法题就直接结束了,都没问我有没有什么想问的。但是但是转折很快就来了,四面结束不到十分钟,HR的电话就打来了说面试通过了,后面需要准备balabala……
以上所有的面试中只有那一次考察了英语,其他所有的面试问答都是中文。很少考察八股,更多的是从简历的项目中发散的去问,这需要对写在简历上的每个项目都了解透彻,可以想象自己就是面试官,看到这份简历后会问些什么。算法题基本以leetcode中等难度为主,会有基于原题的改编,解出来后可能会有基于算法题的扩展。我的这几轮面试整体感觉难度是递进的,而且没有考察系统设计,可能是因为我是1.5年工作经验就跳槽的原因吧。最后的结果也验证了网上的说法,如果面试通过的话录用的消息很快就会传来。