📜  微软 2020 年暑期实习面试经验

📅  最后修改于: 2021-11-10 06:47:45             🧑  作者: Mango

第1轮)在mettl.com上进行的笔试

有一堆问题,每个人在 1.5 小时内得到了 3 个问题。问题分为简单、简单和中等水平。我被问到以下问题:

  1. 求给定二次方程的根。棘手的部分是他们要求返回(而不是打印)它们只有 3 个小数位。
  2. 检查给定代码段中的平衡括号。
  3. 给定 n 个学生、m 个大学和 n*m 布尔矩阵,该矩阵表示学生是否已申请大学。此外,鉴于大学的席位数量,总共可以提供的最大可能录取人数是多少。

为了安全起见,我做了这三件事。但令人惊讶的是,截断率低至 1.6 个问题已解决。他们有与极端案例、时间复杂度案例等相关的特定测试案例。每个问题 10 个测试案例。

54名学生入围下一轮。

Round-2) 组飞轮

我想知道为什么它被称为群飞轮,既没有任何群,也没有任何飞行。在这里,他们在 1 小时内给出了 2 个问题,我们必须用您选择的任何语言在纸上编写完整的代码。建议使用 C、C++ 或Java。问题是:

  1. 打印与目标节点距离为 k 的所有节点。
  2. 洪水填充算法,即给定 n*m 矩阵,每个像素具有不同的颜色。给定一个坐标(i,j)和一个新颜色k,你需要在给定的坐标处填充k个颜色,所有相邻的相同颜色的像素都将填充新颜色。这是以递归方式完成的,直到边界具有不同的颜色。

我做了他们两个。我会建议练习数据结构和基本算法。这些区域依次包括树、堆栈、链表、图形和动态规划。在这一轮之前解决所有问题将为你提供备份,以防你破坏了一轮面试。尝试编写整洁干净的代码,不要取消任何语句。

这一轮结束后,他们休息了一下,随后由公司官员进行了介绍。午餐时间过后,结果公布,21 名学生进入下一轮。

Round-3) Technical-1

我以前以为一开始,他们会问各种有味道的问题,比如自我介绍之类的。字面意思是,我一进门,面试官就说,让我们从解决问题开始吧。他告诉我,首先向我解释你的方法,如果可以,然后为它编写代码。

  1. 给出递增递减数组,编写程序搜索其中的元素。
  2. 在输入的字符流中,跟踪每个实例的第一个非重复字符。

我用一个例子解释了这个方法。在向他解释代码后,他让我为它编写测试用例。编写测试用例时最重要的是应该检查程序可以采用的所有路径。

Round-4) Technical-2

直到我被卡住的时候,它都是一种快速射击。他从什么是HashTable开始?我们为什么用它?与各种操作相关的时间复杂度是多少?什么是好的哈希函数?如何解决冲突?如果所有 n 个键都进入相同的哈希值,则违反了 O(1) 搜索,如何仍然实现这一点? HashMap 是如何实现的?现在,让我陷入困境的问题出现了,“从给定的 HashTable 返回一个随机数。”他写的是,X = H.random();如何实施?说真的,我试图说服面试官,但他似乎不太满意。然后他说,让我们开始解决问题。

  1. 给定一个只包含 0、1 和 2 的数组。对其进行排序。
    解释了多种方法。现在,他开始试运行我为荷兰国旗算法编写的代码。他声称我的代码不起作用。我向他解释了 3 次,但每次他都错过了一些东西并导致错误的结果。然后他说,我们的时间不多了,让我们转到下一个问题。
  2. 你知道动态规划吗?我说是的,所以他问我,你解决了哪些dp问题。我列出了 12-15 个不同模式的问题。他回答说,好的,我不会问你任何问题。(可能我已经听说过他列表中的所有问题)然后他问如何一次检查给定的链表是否是回文。

我为他们两个都写了代码。最后他似乎很不满意。他说祝你有美好的一天。我想,现在结束了。但是,这只是开始。人力资源协调员让我去另一个房间等待。我在想,他们应该直接说再见的,但几分钟后我就有了惊喜。 HR打电话给我,请过来。

第5轮)技术+人力资源

你在之前的公司学到了什么?为什么是 MTech 呢?你最近的学习兴趣是什么?这更像是一次谈话,因为我以前的公司在微软办公室旁边,所以有点邻居谈话!你提到了数独求解器,它是什么?你是如何实施的?好的,让我们转向一个基本问题。他让我写出 0-1Knapsack 问题的递归方程并解释。他很高兴,问我的写作和组飞如何。我告诉他我做了所有的事情,但我可以用更好的方式完成 1 个问题,所以他印象深刻。

我立刻被叫了进来。

第6轮)技术+人力资源

有17年经验的总经理接受了这次采访。她问你最喜欢哪个网站。我太累了,几乎说不出话来。我没有正确吃午饭,也没有吃零食。尽管如此,我还是说了些什么,并告诉了她关于 Quora 以及我喜欢 Quora 的原因。然后她问我名人问题。我无法思考,但她帮助我思考,我能够第三次回答。除了平时的时间,你还做什么?我告诉她关于马拉松和足球的事。好的,我们完成了。任何问题?我们会告诉你结果,你可以离开。

结果在当天晚上宣布,我是被选中的 6 人之一,随后是庆祝活动。

一些建议:

  • 从任何网站准备,如 leetcode、geeksforgeeks、careercup、interview bit 等。但坚持一个,不要被其他人在做这件事而我没有做的事情弄糊涂了。
  • 学习在纸上编写代码,而不仅仅是在计算机上编写代码。
  • 在面试中放弃解决方案之前尝试尝试。面试官是非常非常慷慨的人,他们会帮助你很多。认为他们来这里只是为了带走你,所以你已经解决了一切。
  • 确保你在简历上写什么,你必须知道你写的一切。少写,多说。如果你写得更多,你会在面试中说什么。
  • 我建议你写一些可能很小的小项目,但你从中学到了一些不错的概念。我提到了数独求解器,他们问我。
  • 每次面试后他们都遵循基于反馈的系统,即他们继续附上您以前使用过的所有表格并写下他们的反馈并将其转发给下一个面试官,因此如果一次面试不顺利,请不要难过,尽力而为在下一次面试中,他们可能仍然会选择你。

最后,如果您无法一次性编写所有代码,请不要灰心。在一天内学习一个概念并解决 3-5 个问题。总有一天,当这一天属于你时,一切都会来找你。

到那时,干杯!