📜  微软面试经历| Set 92(1.8 年 IDC 经验)

📅  最后修改于: 2021-09-23 06:06:42             🧑  作者: Mango

我的简历是通过一家咨询公司转发给微软的。我在班加罗尔的 Microsoft IDC 接受了为期一天的面试。

第 1 轮(1 小时+):

问题 1:https://www.geeksforgeeks.org/median-of-stream-of-integers-running-integers/

我首先给出了插入排序算法,他告诉我改进它。我被困了一段时间,所以他给了我另一个问题:https://www.geeksforgeeks.org/k-largestor-smallest-elements-in-an-array/。我能够使用最小堆方法在几分钟内解决这个问题,所以他告诉我对他给我的原始问题进行类似的思考。经过大约 20-30 分钟的头脑风暴,我能够使用堆方法解决它。

问题 2:https://www.geeksforgeeks.org/count-possible-paths-top-left-bottom-right-nxm-matrix/

我很快就解决了这个问题。他问我之前是否遇到过这个问题;没有撒谎,告诉他我已经知道了。

随后讨论了 Microsoft 必应团队中发生的事情。

第 2 轮(1 小时+):
问题 1:给定一个大文本文件,找到一个有效的算法来找到任意两个给定单词之间的最小距离(以单词数衡量)。

使用散列解决了这个问题;然后他扩展了这个问题,说这个程序会被执行很多次(为了找到许多词对之间的距离),所以我需要改进我的算法,以便在第一次解决问题的迭代后降低时间复杂度。使用散列解决了这个问题,然后使用二分搜索找到第二个单词的最接近散列中第一个单词的索引的索引。

问题 2:他首先介绍了电话键盘中自动更正功能的工作原理,并解释了自动更正单词的概率将大于键入的单词。他告诉我要找到一种算法来找出长度为 n 的最有可能出现的单词,前提是有 m 个可能的字符。一个单词出现的概率为:P(第一个字母)*P(第二个字母,第一个已经被按下)*P(第二个字母)*P(第三个字母,第二个已经被按下)……。依此类推。此等式中各个项的所有值都已给出。

把问题想象成一个 mxn 网格,其中一列中的每个元素都通过某种权重连接到下一列中的每个元素。用蛮力解决这个问题是 O(m^n)。通过存储子问题的解决方案,复杂性将降低到 O(m*n),这是面试官想要的解决方案。

第 3 轮(1 小时):招聘经理轮:一般性问题,但有点出乎意料。首先询问我目前的工作以及我为什么想改变,然后谈话转到为什么我在本科期间选择了非 CS 课程,然后谈话开始了关于计算机可以做什么以及什么的完全不同的路径直到计算机科学一直达到图灵机,它才能做到。老实说,我在这一轮之后最紧张。

微软的所有练习题!