微软面试经历 |校内实习
所有的轮次都是完全虚拟的,面试在 Microsoft Teams 进行,除了第一轮在 mettl.com 进行。我还被要求分享我的屏幕,为第 2、3 和 4 轮的问题编写代码。
第 1 轮:这一轮有 3 个简单的问题。这些问题是对以下问题的修改 -
- 检查字符串中的 URL。
- 给定 GP 的第二项和第三项,计算 GP 的前 n 项之和,并将答案四舍五入到小数点后 3 位。
- 平衡括号。
这一轮非常简单,所以大部分学生都能够完全解决所有 3 个问题,但他们也考虑了解决时间和 CGPA 入围。
第 2 轮:我有 2 个问题
- 不给定位置,左旋转和右旋转数组。
- 将所有字谜组合在一起。我告诉他这个问题可以通过在哈希映射中插入每个字符串来解决,这样用于字谜的键值是相同的。所以我告诉他,任何字符串的键都应该是排序后的字符串,因为排序后的字谜对应的是同一个字符串。
面试官很友善,不断讨论。
第三轮:首先面试官让我自我介绍,并让我简要介绍一下我的项目。然后他给了我一个与操作系统相关的问题。声明是——“给定 2 个不能相互交互的不同进程,描述这 2 个进程如何相互共享数据”。我试图用共享内存的概念向他解释,但他不满意,他问了我一个不同的问题。
接着,他问我:
- 当内存只能存储 200MB 数据时,如何对存储在文本文件中的 1GB 整数进行排序。
我向他解释了解决它的外部合并排序方法,并为它编写了代码。由于我不习惯处理内存,所以我问他是否可以将问题陈述转换为 - 排序 n(整数的大数),当您只能在内存中加载 k 个整数时(其中 k 远小于 n)。他还合作,让我转换问题陈述。
然后,他让我逐步解释解决方案的时间复杂度。之后,他问我是否有一些问题要问他。所以我请他简要介绍一下微软实习生从事的项目类型。
第 4 轮:这一轮从我的介绍开始,不久之后面试官问了我一个编码问题。问题是:
- 您有 n 个航班的航班详情,每个航班详情都包含来源、目的地、开始时间和结束时间。他要求找到航空公司不需要的飞机,以便可以覆盖每个航班。
他不想让我编写代码,但我必须向他解释方法以及应该使用哪种数据结构。这个问题的目的是测试我是否能够使用图形网络来可视化解决方案。我给了他一个基于 DFS 的解决方案。然后他问了我一些基本的问题,比如什么是运算符重载、运行时多态性和内部碎片。
最终判决:我被选中参加实习。
小贴士:保持冷静和自信。如果您想不出优化的解决方案,请从蛮力开始并寻求提示。在大多数面试中,面试官总是乐于助人,他也试图和你一起建立解决方案。不要惊慌,相信自己!!