📜  微软面试经历| 154套(1.5年经验)

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

鉴于我有 1.5 年的经验,我申请了位于海得拉巴的 Microsoft IDC 的软件工程师职位。我猜我的回合是中级水平。

第 1 轮: Hackerrank 测试
本轮有1个问题。
1.) 第一个问题是基于字符串的。给定字符串字符,会给你一个滚动函数。 roll函数将指定字符串的子数组 [s, e] 并且该子数组将被滚动多少次。示例:如果 s =”abcd” 并且 roll() 指定子数组 [0, 2] 滚动 2(滚动第 0 个位置 2 次),它将使第 0 个位置增加 2,因此 s[0] = c。 Roll函数可以被调用多次,然后会有一些查询来输出任何特定位置的字符。
解决方案:我通过保持任何字符被滚动的次数来做到这一点。为了保持计数,我使用了累积频率类型的方法,在这种方法中,我们将位置 ‘s’ 处的计数增加 n,然后将位置 ‘e+1’ 处的计数减少 n。这通过了所有测试用例。
2.) https://www.geeksforgeeks.org/count-ways-express-number-sum-consecutive-numbers/

在这轮笔试之后,我被要求进行现场面试。
第1轮:
这一轮基于数据结构。在这一轮中,我被问到了两个问题。有两个技术问题,我被问到我简历中的 2 个项目。
1.) 第一个问题是反转链表 n 组 k。
2.) 第二个是自底向上的二叉树之字形遍历。例如:如果树的层序遍历是 [1], [2, 3], [4, 5, 8], [6, 8, 9, 7]
那么所需的输出是:[7, 9, 8, 6], [4, 5, 8], [3, 2], [1]。
她希望我尽可能地优化。我首先谈到了使用递归的蛮力方法,然后我告诉她 2 堆栈方法。她希望我只使用堆栈并做到这一点。此外,作为一个有经验的人,他们希望您编写具有适当测试用例覆盖率的非常简洁的代码。他们可能在那一刻看不到,但他们会在采访后看到它。
每次面试后,我都会得到反馈。

第二轮:
这一轮的重点是DP。
1.) 这一轮的第一个问题是加权作业调度。我告诉他 DP 方法,然后他继续说你如何找到 DP 的状态。您通常如何处理 DP 问题。我讲述了最佳子结构和重叠。然后他让我为给定的问题编写递归代码。然后我们就它的复杂性进行了很多讨论。
2.) 其次是 LIS。
总的来说,这一轮很容易。然后,他继续讨论操作系统和网络的一些设计问题和一般概念。他让我设计缓存,负责可扩展性和可靠性。我谈到了分布式系统如何发挥作用、水平和垂直拆分、分片概念、副本等。
3.) 这个问题是当你在网络浏览器中输入一个 url 时会发生什么。他继续研究各种路由策略,如加权路由等。
我的简历中有 AWS CSA,所以他继续介绍 CDN 和云前端分发等概念。
我有一些博客供我投稿,面试官让我打开其中任何一个。我最近开始写关于云计算的博客并打开它。他问了一些关于这个的2-3个问题。
这一轮是最长的,大约 1.5 小时左右。我觉得非常互动。在这一轮中享受最多。

第 3 轮:
这一轮主要是讨论设计问题。
1.) 我们讨论的第一个问题是关于如何设计 malloc() API。内存分配是如何完成的。如果给你一个大的空闲字节数组,并且请求不断出现,你将如何分配它。分配后,你将如何解除分配。请注意,我们使用 free 进行解除分配,它仅使用指针来删除它所指向的内存。我们这里没有给出大小,因此,我们需要在我们的实现中维护每个分配请求的大小。
2.) 第二个问题是设计strtok()。然后他让我检查 strtok() 库函数是否有问题。我猜不出来。然后他给了我一个提示,让我考虑同时出现多个请求。基本上,API 不是线程安全的。我在我的代码中为其实现创建了一个向量。然后,问题简化为编写代码,即使多个进程尝试同时调用该函数,该代码也将确保仅创建一个向量。我告诉他我们如何使用单例设计模式来做到这一点。然后我写了它的代码,我们讨论了惰性和早期实例化。

第 4 轮:
这是Azure的最后一轮,问了一些行为问题。
主要是在这讨论了我的简历项目。
我们讨论的设计问题是设计搜索引擎的自动完成API,我根据他给我的数据和场景给出了trie解决方案。我被要求编写其完整的工作代码。然后他开始考虑在设计搜索引擎时需要注意的概念和事情。
此外,我主要被问到了一个问题,那就是为什么我要寻求改变。

大约 10 到 15 分钟后,我被告知我的面试进行得很顺利,我将获得延期。今天我有它🙂

我的建议:当我们有一些经验参加面试时,公司希望我们编写涵盖所有测试用例的完整工作代码。我们的方式应该有所不同,有经验的人编写代码和较新的人编写相同的代码。此外,必须具备设计问题的知识。他们在可扩展性、容错性、可靠性、用户体验、负载处理等方面测试我们。当提出设计问题时,保持开放的心态并尝试考虑所有前景。

我要感谢 GeeksforGeeks 提供的令人难以置信的网站,他们为我提供了丰富的知识和信心,并从中学习和贡献。