📜  微软面试体验(2018年实习)

📅  最后修改于: 2021-11-17 09:58:53             🧑  作者: Mango

完整的流程包括一轮在线,一组飞,很少的技术面试,高级经理的f2f面试。

在线编码回合:

这一轮有3个问题,在cocubes平台上进行。我得到的问题是:

  1. 给定汽车编号和日期列表,返回从汽车中收取的总罚款。如果日期是奇数,则每辆偶数车将被罚款 250 卢比,反之亦然。 (2 分)
  2. 中缀表达式的评估。 (3 分)
  3. 从 n 位数字中去除 k 位数字,使形成的数字最小。与此类似。 (5 分)

CGPA 好(9+)或至少完成 2 道题的人进入下一轮。

组飞:

大约有22人给这群人转了一圈,其中15人被选中参加面试。在这一轮中,我们被问到两个问题,我们必须与导师讨论该方法并在页面上编写可编译的代码。问题是:

  1. 检查两个给定的二叉树是否互为镜像。可以在此处找到解决方案。
  2. 给定文本和字典,检查文本是否可以分解为属于字典的单词。如果您还可以说出可以通过多少种方式来完成,则可以加分。这可以通过递归方法(没有 DP)来完成,但这需要指数时间。我们期望在空间和时间上优化该方法。可以在此处找到解决方案。

尝试使用大量注释和正确的变量名称编写干净的发现。他们还考虑了您是否给出了迭代方法或递归方法(迭代更受欢迎,因为它更快,但最终没有太大区别)。

技术面试:

我有 3 次技术面试,尽量多和面试官互动。如果你给他们一个蛮力的方法,确保你在跳到优化的解决方案之前告诉他们它的问题是什么。

第一轮:这一轮的所有问题都基于数组。

我得到的第一个问题是计算大小为 k 的窗口中不同数字的数量。可以在此处找到解决方案。在使用 O(n) 解决方案之前,我给出了 2-3 种方法及其时间和空间复杂度。

接着,他让我在大小为 k 的窗口中打印最大的数字。可以在此处找到解决方案。我不得不为这个问题编写一个可编译的代码,我使用 dequeue 解决了它。他还让我创建测试用例并试运行我的代码,我的判断标准是我是否能想到我的方法中的边角案例。

第 2 轮:这一轮有很多问题。

第一个问题基于二进制搜索,只是为了预热。他问了我一些关于字符串的问题(比如具有唯一字符的最大子字符串和 LCS),但我告诉他我以前已经看过它们,所以我们继续讨论动态编程问题。

在下一个问题中,我得到了一个布尔数组,其中 A[i]=1 表示第 i 个地方是安全的,而 A[i]=0 表示第 i 个地方包含炸弹。给定初始速度 k,在到达安全点后,您可以将我的速度增加或减少 1,或者保持不变。您可以在数组中精确移动 k 步,其中 k 是您当前的速度。如果您到达数组的末尾或您的速度在任何安全点变为 0,则您获胜。如果您踩到炸弹或超出阵列大小,您就会死亡。你有多少种方式可以赢得比赛?我首先给了他一个递归的解决方案,然后尝试了一个动态规划的方法来解决这个问题。除了少数极端情况,我可以解决这个问题。

这一轮的最后一个问题是基于树的,我得到了一个二叉树,其节点包含 0-9 范围内的数字,因此从根到叶的每条路径都可以被认为是一个 n 位数字,其中 n 是路径长度.我必须找到所有路径的总和。由于总和可能溢出,我不得不使用模运算。后来他让我为此编写一个可编译的代码。

在我解决这些问题时,有人问了我一些关于我的项目的问题。这些问题通常与身份验证(会话和令牌)和数据库有关。

第三轮:这一轮相当简单,我被问到基本问题。

首先,我被要求编写一个使用星号 (*) 打印金字塔图案的代码。后来星号被帕斯卡三角形取代。

最后,我被要求编写一个返回通用树高度的代码。

最终面试:

这更像是一次互动而不是采访,高级经理和我讨论了微软正在进行的各种项目,他向我展示了他正在从事的项目。他很友好。

最后,在面试了 15 个多小时后,我和我大学的其他 5 个人一起被选中了!