微软软件工程师实习面试经验 |校园 2021
简要概述:微软于 2021 年 8 月来到我们校园挑选暑期实习的候选人。在申请 SWE Intern 职位的 200 多名候选人(来自 CSE + ECE + EEE + ENI)中,最终只有 13 名学生被选中.整个过程是虚拟的,分 4 轮(1 轮编码 + 3 轮面试)进行。
编码轮:在 Codility 平台上进行,包括 2 个应该在 90 分钟内解决的问题。问题描述如下:
- 这个问题是标准合并间隔问题的一个简单变体。这在 15-20 分钟内是可行的。
- 这个问题很有趣,最优解并不那么容易弄清楚。给出了一个大小为 N*M 的二维二进制数组(0 和 1 的数组)。并且任意两个单元格之间的距离作为它们的曼哈顿距离(两点(x1,y1)和(x2,y2)之间的曼哈顿距离为|x1 - x2| + |y1 - y2|)。此外,您将获得一个整数“K”。我们应该找到值为 0 的单元格的总数,使得每个值为 1 的单元格的距离不超过 k 个单位。约束:2 <= N,M <= 400; 1 <= K <=800;至少有一个值为 1 的单元格。我实际上想出了一个不太直观的 O(n*m) 解决方案。我几乎花了剩下的 70 分钟来编写我的解决方案并提交它,更多的是因为您的代码仅在示例案例上运行,并且在您对自己的解决方案完全有信心之前,您永远不会知道隐藏案例的正确性。
最后,我和其他 25 名候选人被选中参加面试。
总面试轮次:3
平台: Microsoft Teams、Codility
第一轮:这一轮对我来说持续了近 60 分钟。面试官很友好,先让我介绍一下自己。之后,我们直接讨论编码问题。他与我分享了一个代码链接,我应该用它来编码。我被问到一个 DSA 问题和一个谜题。
- DSA 的问题是找到 BST 的第二大元素。通过首先讨论一些边缘案例和方法,我及时将其编码好。然后,他将问题推广到 BST 的第 k 个最大元素。在面试官的提示下,我终于想出了最优化的方法,但他对整体解决方案非常满意。这大约需要 35-40 分钟。
- 然后他问我一个谜题,就是想出一个最佳策略来赢得比赛,而不管对手的动作如何。游戏的描述如下:你应该在[1,9]之间选择一个起始数字'x'。然后你和你的对手轮流抓住机会。如果一个玩家在最后一回合选择了数字“n”,那么另一个玩家可以选择 [n+1, n+10] 之间的任何数字。游戏继续进行,直到其中一名玩家达到 75 号。选择“x”以使您每次都获胜。一开始我想出了一个错误的方法,但经过仔细思考后,我想出了一个解决方案,幸运的是它是正确的。 (PS:答案是——x 应该是 9。找出原因:p)这花了我大约 15-20 分钟,最后,面试结束了,面试官问了一个问题。
第二轮:这一轮在我第一轮结束后的 5 分钟内开始,应该是 30 分钟。而且,这是所有三轮中最简单的。面试官正式开始让我自我介绍,然后直接进入 DSA 问题。
- 这个问题很标准。它是检查有效括号的一种变体。我将其编码并在 15-20 分钟内向面试官解释了我的方法,这标志着我的第二轮结束。
第三轮:最后一轮
- 这一轮也是在我的第二轮完成后的 5 分钟内开始的(此时我连续 90 多分钟说话有点累了)。这是我最喜欢的一轮,持续了将近一个小时。面试官非常友好,首先让我介绍自己以及我的一天是如何度过的,以及我简历中的其他一些问题。然后他让我分享我之前实习经历的细节。然后他询问了我之前的几轮以及我在同一轮中的详细方法。然后问我最喜欢的代码编辑器(显然是 VSC <3)并让我打开它并显示屏幕。然后他分享了一个 DSA 问题,这是 BST 边界遍历的标准变体(我的问题是以顺时针方式而不是逆时针方式打印遍历)。然后,我们继续讨论各种方法、极端情况和实现最佳方法的方法(在单次遍历中,而不是在三个单独的遍历中)。显然,我被要求编写一个特殊案例,这标志着面试中解决问题部分的结束。他对我的方法、代码和沟通印象深刻,并分享了积极的反馈。然后我们聊了聊拿到实习offer后的项目流程和校园分配。终于结束了这一轮。
- 晚上,我从我们的安置单位听到了好消息,我和其他 12 名候选人获得了微软印度公司的实习机会。
面试小贴士:
- 面试前一天读了很多很多的面试经历(不管公司是不是微软)。
- 在面试过程中保持冷静和沉着。面试你的人是为了选择你而不是拒绝你!
- 始终保持沟通你的思维过程和方法,因为这就是面试官正在寻找的。
- 总是询问你不确定的案例的结果,一旦你想出一个解决方案,在实际编码之前在测试用例上试运行它。
- 尝试编写注释良好且可读性强的代码。