📜  微软面试经历| SDE-II

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

第 1 轮(DSA、设计、 Java)
1. 编写一段代码,找出数组中第 k 大的元素。
面试官立即对最佳解决方案感兴趣,并从头开始为所有堆操作编写代码。https://www.geeksforgeeks.org/k-largestor-smallest-elements-in-an-array/

2. 编写代码合并 k 个大小为 n 的排序数组。
再次使用堆方法并编码。
https://www.geeksforgeeks.org/merge-k-sorted-arrays/

3. 设计停车场。他上了一堂停车场课。他让我设计支持 park() 和 unpark() api 的面向对象架构。
然后,他讨论了不同类的所有其他支持 api 的工作以及调用的最小参数列表。内部算法也在最后进行了优化。
供您参考,您可以从以下链接获取帮助:
https://www.education.io/collection/page/5668639101419520/5692201761767424/5770234338213888
4. 什么情况下使用抽象类,什么时候使用接口。

5. 您在项目中遇到的任何设计挑战。

第二轮(设计)

1. 设计分布式缓存系统。
对于来自客户端的数据,我在两者之间使用了聚合器的概念,以便定期将该数据转储到缓存端。但是在转储时应该对数据进行排序。
因此引入了一些挑战,他要求对具有 200 mb 主内存的大 GB 文件进行排序。使用 n 路外部归并排序。在某种程度上同意我的方法后,他要求我编写涵盖所有边缘情况的完整代码。
此外,我在缓存层之前使用了负载均衡器的概念。所以,面试官问你实际上是如何实现负载均衡的。我使用一致散列的概念来解释负载平衡部分,它在添加/删除服务器时最小化负载的重新分配,并且还通过使用虚拟服务器的概念帮助减少任何缓存上的偏斜负载。
参考视频:https://www.youtube.com/watch?v=zaRkONvyGr8


第三轮(设计)

1.设计必应搜索的自动完成功能。
所有关于您将如何有效地使用数据结构以及您将如何对建议进行排名以及将向用户输出多少建议的所有讨论。
您将如何分片 trie 数据库并设计其他支持系统组件。
我最后的实现类似于下面给出的链接:
https://www.youtube.com/watch?v=us0qySiUsGU

2. 实现并发标记和清除垃圾收集器。我在垃圾收集器上使用了并发哈希图的概念,并相应地设计了标记和扫描算法。然后讨论了所有并发挑战。由于我来自Java背景,他问了我这个问题。

第 4 轮:(与 Director – Office 365 Web 应用程序团队)

这位负责人在过去 25 年里一直是微软的一部分。
1. 讨论项目和项目架构。他问我正在处理框架的哪一部分。
由于他很资深,我开始先从业务角度介绍我当前和以前的项目,然后再详细介绍架构部分。
然后他强调了我在当前项目中开发的功能,以了解相同的确切业务用例。
2. 我定期面临的挑战以及您如何解决这些挑战以确保及时交付您的产品。
3. 然后他解释了他们针对 Office 365 产品的所有挑战和 Web 应用程序模型。就在 Web 上部署 SaaS 而言,Office 365 的当前方案存在巨大差异。

回合已完成。主管说HR会联系我。几天后终于拿到offer了🙂