微软面试体验(校外)
微软校外招聘面试经验,我通过 Microsoft Engage Program 2021 获得了这个机会。
Round1 ( Coding Round on Codility ):有两个问题需要在 120 分钟内解决。问题是中等难度。
- 这个问题是基于多源 BFS 的。给出了一个图表和一系列医院,现在对于所有非医院节点,我们需要找到救护车到达它们可能需要的最长时间。 (中等硬度)
- 这个问题基于 Graph DFS + DP。不记得确切的问题,但它是在使用 DFS 的图形节点上应用包含-排除原则。 ( 难的 )
我能够解决这两个问题并在 60 分钟内通过了所有给定的测试用例。有人提到,对于隐藏的测试用例,代码也会在提交后进行判断。
第 2 轮(团队面试第 1 轮):本轮持续约 45 分钟。我被问到 2 个编码问题。
- 零子数组总和,早些时候他要求一个布尔值,然后他要求我返回所有此类子数组的开始和结束索引。
- 给出一棵二叉树,节点值可以是 0 或 1。现在从根移动到叶形成二进制表示的十进制数。我被要求找出所有这些可能的十进制数的总和。所有这些可能的数字将等于二叉树中存在的叶节点的数量。
我能够快速解决第一个问题,然后在面试官的一些提示下解决第二个问题。我被要求在我最喜欢的编辑器中编写代码并为一些测试用例运行代码。面试官最后很满意,问我有没有什么问题要问他。半小时后,我接到了第二轮的电话。
第3轮(团队面试第2轮):这一轮持续了大约50分钟。我被问到 2 个编码问题。
- 被问到切杆问题,我先解释了重叠子问题,然后用DP优化。我被要求运行代码并检查许多测试用例(包括边缘用例)。面试官对代码很满意,然后他说我们有时间让我们解决另一个问题。
- 字符串问题 DP + Rabin Karp Hashing。给定一个字符串向量和一个目标字符串,找出字符串数组的一个子集是否可以连接到目标字符串,如果有多种可能的方式,则返回子集中元素最少的那个。我首先向他解释了散列如何有助于在制作目标字符串时比较重叠的子问题。然后我被要求编写相同的代码。
两个问题都解决后,面试官看起来很高兴,所以我很确定我有资格进入下一轮。
第 4 轮(团队面试第 3 轮):这一轮是在前两轮的 4 天后进行的。
- 面试从我的介绍开始,我被要求简单介绍一下我的实习和项目经历。然后他问我,如果我的项目(网络开发)被百万用户使用,可能会出现什么问题。它采取了系统设计的方向,我们详细讨论了如何减少延迟时间。
- 然后经过 20 分钟的讨论,他问我一个编码问题,以便快速编码。问题是基于一个字符串。如果所有字符具有相同的频率或最多两个不同的频率,则字符串是有效的。示例 – aabb 有效,aabbccdd 有效,aabbccd 也有效,但 aabcddd 无效。这个问题很简单,但我花了一些时间来理解它。我写了代码,然后面试官让我在一些测试用例上运行它。
当天晚上,我收到了我被选中的邮件。我很高兴并开始庆祝。
编码回合提示–
- 练习基于图表的问题及其变体。尝试将 print/cout 语句与您的代码一起编写,这有助于您更快地调试。
- 试着用有意义的函数名来评论你的代码。
- 确保检查边缘情况(very imp)。
面试技巧 –
- 在提示您的解决方案之前,请仔细聆听问题并首先澄清问题。
- 如果您遇到困难,请讨论您所知道的以及您面临的问题,这有助于面试官提供直接的提示。
- 在讨论了你的方法之后,不要忘记解释时间和空间的复杂性。
- 对你的答案充满信心并大声思考。
我希望这有帮助 !!