📜  微软全职面试经验(校园)

📅  最后修改于: 2022-05-13 01:58:39.363000             🧑  作者: Mango

微软全职面试经验(校园)

微软于 2018 年 8 月在我院进行了在线融资。大约 270 名学生申请了考试。

第 1 轮(在线):在 CoCubes 上进行,包括 3 个问题,时间限制为 75 分钟。问题如下:

1.2分)https://www.geeksforgeeks.org/find-the-first-repeated-character-in-a-string/

2.3分) https://www.geeksforgeeks.org/find-patterns-101-given-string/

问题与此问题相似,不同之处在于可能存在也没有 0 的情况。

3.(5分) https://www.geeksforgeeks.org/remove-bst-keys-outside-the-given-range/

这一轮对我来说有点容易,我在 20 分钟内解决了所有问题。

建议:总是阅读以前的面试经验。

结果: 270 名学生中有 68 名进入第二轮,即小组传单

第 2 轮(团体传单):学生被分成 7/8 人一组,并提供一名导师。

给出了 2 个问题,您必须与导师讨论该方法并将优化的方法写在纸上。

问题 1: https://www.geeksforgeeks.org/word-break-problem-using-backtracking/

给出了上述问题的变体,必须找到可以用于制作给定句子的最小单词数。

问题2:不同身高的学生正在参加集会。问题是,如果学生的身高小于或等于站在他上方的学生,那么他/她就看不到集会。任务是随机找到最小数量的学生,以便最大数量的学生可以看到集合。

例如:9 1 2 3 1 5

输出:必须删除 2 个学生,即 9 和 1,以便 4 个学生可以看到程序集。

我看到了一种模式,它是 LIS 的实现。

建议:总是尽可能多地与导师讨论你的方法,并在纸上写出非常整洁的代码。始终尝试给出您提供的解决方案的时间和空间复杂性。这一轮是集体传单,但您必须单独编码。

结果: 68人中有30人进入下一轮。

3/4的面对面面试排成一列,每轮为淘汰赛。

Round 3(1st Technical F2F) :面试官看起来很友好,他通过询问我的情况让我平静下来。他问起我的项目。我的篮子里有现场项目。他让我提供链接(不要对你的项目撒谎,没有做好项目是正常的)。展望未来,他问我基于数据结构的问题。

1. 在二叉树中找到给定节点的祖父母。

我给出了一个使用 O(n) 空间的蛮力实现。他要求我优化我的解决方案。我想了一会儿,给出了我的方法。

取两个节点,即父母和祖父母初始化为NULL。当您发现给定节点返回祖父母时,递归调用左右子树。在递归调用之前使祖父母=父母并将根作为父母传递。返回不为 NULL 的左或右答案。

然后他让我把代码写在纸上。

如果不考虑使用递归堆栈,则为 O(1) 空间。

2. https://www.geeksforgeeks.org/count-pairs-with-given-sum/

我通过散列数字的频率给出了基于无序地图的解决方案。

O(n) 时间和 O(n) 空间复杂度。

建议:在编写最终解决方案之前,始终在脑海中对问题有一个正确的印象。尽可能多地提出有效的疑问,总是在遇到问题时立即给出蛮力解决方案。然后与面试官讨论优化的解决方案并为其编写代码。自己制作测试用例并使用您的代码进行测试,如果出现问题,请修复代码。总是讨论你在做什么,如果你走错了方向,面试官总是会给出提示。如果面试官给你机会问一个好问题,一定要问好问题。始终保持微笑,不要惊慌。

结果:我和 15-16 名学生一起进入了下一轮。

第 4 轮(第 2 次技术 F2F):这对我来说是一场艰难的比赛,你可以说是决胜局。他问我是否对数据结构感到满意(显然答案是肯定的)。

问题 1: https://www.geeksforgeeks.org/the-celebrity-problem/

最初,当我遇到这个问题时,我并不清楚。我问了很多关于如何输入的问题,一个人可以知道很多人的输入等等。他让我写下代码。我对我的代码并没有真正的信心,并讨论了他帮助我的一般方法,提示你必须消除每个决策中的元素。经过一番努力,我想出了使用 2 指针方法的优化解决方案。他帮助我找到了最终的解决方案。给出优化答案后我很放松,面试官很满意。

问题 2: https://practice.geeksforgeeks.org/problems/boundary-traversal-of-binary-tree/1

这个问题对我来说简直是小菜一碟。

2 基于操作系统的问题:什么是死锁?什么是页面错误?

问题非常基础,需要基本的操作系统知识。

建议:如果没有任何问题,您尽可能多地提出问题,因为如果您不提出问题并且不给出解决方案,那么您无论如何都会出局,幸运的是您可能会得到一个提示,您可以使用它来找到解决方案。当许多学生在同一个联盟中时,达成解决方案非常重要。

结果:我和 9-10 名学生一起进入了下一轮 F2F。

第 5 轮(第 3 次技术 F2F):这一轮是为了测试我的基本概念。他给了我一个问题,即给定 n 个盒子,每个盒子里都有 x1、x2、x3、….xn 个球。您需要通过转移球来达到最终状态,以便最后每个篮子都包含相同数量的球。判断一个人是否可以达到稳定状态。条件是,如果盒子 n2 有 x2 个球,如果盒子 n1 正在转移到 n2,那么他必须转移 x2 个球,或者已经存在于任何盒子中的相同数量的球必须转移到同一个盒子中。

他和我讨论了这个方法,并问我如何预测转移是否可能以及是否会达到稳定状态。我使用哈希来预测给定状态,然后他问我哈希表的实现。我把我知道的一切都告诉了他。他被说服了。他让我问他任何问题。这标志着这一轮比赛的结束。

第 6 轮(第 4 次 HR + 技术):询问我的学术情况,我在 Ruby on rails 中所做的项目,询问有关 Semaphores 的实施。最后他给我留下了一个问题,即外星人词典。他让我问他任何问题。这标志着这一轮比赛的结束。

面试一直持续到晚上1点。结果是在早上 5:00 在 MICROSOFT 提供 FTE 的 5 名学生,我是其中之一。那是我一生中最美好的一天。

我感谢 GeeksForGeeks,geeksforgeeks 的定期练习在面试过程中帮助了我很多。专注于寻找解决方案,而不是在实践中知道解决方案。

由 Yash Kapoor 提供(iamaverage)