📜  微软面试经历 |校内实习

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

微软面试经历 |校内实习

所以,最近,微软来我们校园实习,在大约 150 人中,有 10 人被选中。这是我整个面试过程的经验。

第 1 轮(在线编码轮):

编码回合在 mettl 上进行,我们必须在 90 分钟内解决三个问题。这些问题是从一个庞大的数据库中挑选出来的,因此,每个人都被分配了不同的集合。我的问题是——

1)给定一个linux中的目录路径,在遍历完完整路径后,找出你离主目录的距离。

https://www.geeksforgeeks.org/simplify-directory-path-unix-like/amp/

2)找到给定字符串的最长回文子串。

https://www.geeksforgeeks.org/longest-palindrome-substring-set-1/

3) 一排有 n 个邮局。您会知道每个邮局到您家的距离。如果两地之间的距离小于或等于 x,则邮局可以将邮件发送到另一个邮局。给你 q 个查询。每个查询包含两个邮局的索引。您必须确定邮局是否可以互相投递邮件。 (预期时间复杂度 - O(n+q))

例如 -

输入:n=3, post[n] = {2, 3, 5}, x=2, q=2

查询 1:{1, 2}。输出:是(邮局 1 和 2 可以投递邮件,因为它们之间的距离小于 2)。

查询 2:{1, 3}。输出:是(虽然 1 不能直接投递给 3,但 1 可以投递邮件给 2,而 2 可以投递给 3。所以,1 可以间接投递邮件给 3)。

问题并不难,但在线编译器有点不同。例如,函数中的输入不是字符串和数组,而是指针作为输入。在第三个问题中,查询输入以双指针的形式给出。有的同学对指针的处理不熟悉,无法完全解决问题。

本轮结束后,共有75人入围组飞轮。

第二轮(团体飞轮):

我们必须在 60 分钟内解决 2 个问题。我们必须将代码写在纸上并提交。

问题一:

找到最多具有 k 个不同元素的最长连续子数组。

https://www.geeksforgeeks.org/longest-subarray-not-k-distinct-elements/

问题2:

假设一个包含 n 个元素的数组。我们定义了一个新的排序,我们将数组分成两个相等的部分,并检查其中任何一个部分是否已排序。我们继续这个过程,直到我们得到一个排序的子数组。找到已排序子数组的最大长度。

例子 -

输入:n = 6, arr[] = {7, 10, 9, 8, 11, 3}

输出:2 {7, 10} 或 {8, 11}

解释:由于数组没有排序,我们将数组分为{7,10,9}和{8,11,3}。我们再次将第一个数组划分为 {7, 10} 和 {9}。因此,最大排序子数组是 {7, 10},其长度为 2。

本轮结束后,18人被选中进行面试。

第三轮(第一轮面试):

每轮面试持续约 30-40 分钟。面试官先问了我自己,然后问了我的项目。然后,他问了我2个问题。对于这两个问题,他都问了我时间复杂度和空间复杂度,在他对方法感到满意后,他让我在纸上写代码。

1) 给定一个数组,求最长正弦子数组的长度。 (正弦子数组意味着元素应该以递增 - 递减 - 递增的方式,反之亦然)。

我的方法是设置一个增加/减少的标志,然后检查是否满足正弦条件。如果是,则增加计数并更改标志,否则,在更新 maxCount 后将计数设置为 0。时间复杂度 - O(n),空间复杂度 - O(1)

2) 求图的连通分量数。 (标准 BFS/DFS 方法)

https://www.geeksforgeeks.org/connected-components-in-an-undirected-graph/

第四轮(第二轮面试):

1) 给定一个数组,从数组中选出总和最大的 k 个元素。我们讨论了具有不同时间复杂度的这个问题的许多方法。一些方法是排序(O(nlogn)),最大堆(O(nlogn)),dp(O(nk)),递归(O(2 ^ n)),找到k个最大元素(O(nk))。

2)给定一个数字金字塔,找到从根到最后一层的最小路径值。

例如-

1

2 3

5 4 6

最小路径 – 7 (1-2-4)

我们为此讨论了 dp 方法。

dp[i][j] = max (dp[i-1][j], dp[i-1][j-1]) + arr[i][j] 其中 i 是级别索引,j 是该级别的元素索引。 (请记住为所有 dp 问题编写基本案例和极端案例)。

第五轮(第三轮面试):

1) 给定一个整数数组,选择两个差值最小的数。首先,我给了他一个排序解决方案,您可以对数组进行排序并找到相邻元素之间的最小差异。然后,他让我不分拣就去做。我首先给了他一个 O(n^2) 的蛮力解决方案,但是当他要求我进一步优化它时,我无法这样做。

2)店主出售卢比的物品。 5. 想购买商品的顾客络绎不绝。客户有任何卢比的笔记。 5,卢比。 10或卢比。 20.我们要找出店主在什么条件下不能卖更多的东西,并找出他在每一个条件下所赚取的利润。

例如 - customers[] = {5, 10, 10, ....}。对于这种情况,在第 2 位顾客之后,店主将无法退回 Rs 的零钱。 5给第三位客户,因为他只有卢比。 10 和他一起注意。因此,业务停止,利润为卢比。 10.

在这个问题之后,他要求我将问题概括为包括卢比。 1,卢比。 2,卢比。 50,卢比。 100等笔记。他问我这个系统将如何在现实生活中实施,因为有这么多类型的面额和这么多不同价格的产品类型。

之后,他还问了我一些基本的 OOP 问题,比如 OOP 的 4 个支柱是什么,并分别描述了它们。

第6轮(人力资源轮);

这一轮是最简单的,对我来说只持续了大约 10 分钟。面试官问了我同样的基本问题,以及我为什么想加入微软。然后,他问了我关于 DSA 的两个基本问题:

1)给定一个包含许多单词的句子,反转字符串中的单词。

https://www.geeksforgeeks.org/reverse-words-in-a-given-string/

2) 求 BST 中任意两个节点的 LCA。

https://www.geeksforgeeks.org/lowest-common-ancestor-in-a-binary-search-tree/

每一轮面试结束后,面试官都会问我有没有什么问题要问他。我问他们如果我得到实习,在来之前我需要培养哪些技能。

整个体验有点累,因为从早上 9 点开始的采访一直持续到晚上 9 点。但是,这是一次很棒的经历,因为面试官非常友好,给了我足够的时间来思考解决方案。要记住的重要一点是,即使您不知道完整的解决方案,您也必须与面试官保持沟通,因为他通常会帮助您走上正确的道路并引导您找到解决方案。

结果是在晚上出来的,我是被选中的 10 个人之一。在这10个人中,也有一些女孩参加了微软组织的Codess项目,因此直接进入面试,没有进行编码测试,也没有小组飞行。

我建议从 geeksforgeeks 和 interviewbit 练习(仅在涵盖 geeksforgeeks 的基础知识之后),因为他们有大量的问题,几乎涵盖了所有主题的所有子主题。此外,在任何面试之前,请仔细阅读人们在此处提供的实习经历,以便您了解公司在面试中提出的问题类型。

此外,即使他们没有就这些主题问我太多问题,我还是建议修改 OOP 和 DBMS 的概念,因为很多公司在面试时都会从这些主题中提问。

谢谢!