📜  微软面试经历| 3年经验

📅  最后修改于: 2021-11-18 01:23:32             🧑  作者: Mango

第1轮(在线编码轮):

  • 招聘人员在星期一给我发送了测试链接,并要求我在星期二之前完成它,如果我想在星期五获得驱动器的邀请。
  • Codility 平台,2 道编码问题,70 分钟
  • 这只是一轮资格赛。任何得分超过 50% 的人都会被邀请参加安置活动。

展示位置驱动

  • 面试于周五上午 9 点开始。每一轮都是淘汰赛。
  • 每轮结束后,我都会接到招聘人员的电话,告知下一轮的详细信息。
  • 每个面试官最后都会给一些时间来提问。试着准备一些问题。

第二轮(技术面试第一轮):

  1. 给定数组是山形数组
    • https://leetcode.com/problems/valid-mountain-array/
    • 编码了一个简单的 O(n) 解决方案。
    • 面试官很满意,因为他想从一个简单的问题开始。
  2. 2个不同大小的排序数组的中位数
    • https://practice.geeksforgeeks.org/problems/median-of-two-sorted-arrays1618/1/
    • 告诉他这个问题的两种方法。
    • 他让我用时间复杂度 O(m+n) 编写第一种方法
    • 然后他给了我几个例子,并让我用这些例子试运行代码。
    • 在试运行期间进行了一些优化后,他对代码感到满意。

第三轮(技术面试第二轮):

  1. 讨论了我在当前公司从事的项目。让我做我当前项目的 HLD,连同要求和架构图。
  2. 为前端服务设计 API。
    • 使用Java和 Spring JPA。
    • 对实体、存储库、服务、业务服务和控制器层进行编码。
    • 此外,为 yml 连接配置和所需的依赖项编写了一个片段。
    • 她问了一些后续问题,最终对整个代码感到满意。
  3. 有一个 Windows 服务在生产中运行。它根据优先级轮询 DB 前 10 条记录(任务),并将这些记录推送到队列中进行处理。任务的优先级值可以是 P1、P2 和 P3。由于某种原因,队列被阻塞。来自客户端的临时请求以处理较低优先级的任务(例如 P2)
    • 当没有内置这样的机制并且队列也被阻塞时,可以采取什么步骤来处理这样的临时请求?
    • 在这个系统中还可以进行哪些其他修改以使其为任何此类进一步的临时请求做好准备并处理阻塞队列?
    • 我们就这些方法进行了长时间的讨论。她对我的所有建议都提出了反问。
    • 从这个问题,她想检查我对故障设计和其他系统设计概念的整体理解。

第4轮(技术面试第3轮)

  1. 在排序数组中查找重复元素
    • https://www.geeksforgeeks.org/find-repeating-element-sorted-array-size-n/
    • 使用二分搜索编码 O(log n) 方法
    • 他有一些例子,他想用这些例子来试运行代码。
    • 他对这种方法很满意,并迅速转向第二个问题。
  2. 设计一个特殊的记录器系统 (LLD)。该系统接收日志消息和时间戳。如果在 10 秒的时间范围内收到相同的消息,则要求丢弃该消息。但是每次收到消息时,它的计时器都应该重置,并且该计时器应该在上次请求的接下来 10 秒内保持有效。
    • 例如,如果在 t=1 接收到 msg M1。现在,如果在 t = 9 接收到相同的 msg M1,则应将其丢弃,因为它在 10 秒内。但是现在,这个窗口应该在 t=19 之前有效,因为最后一个 M1 消息是在 t=9 时收到的。
    • 我们对可以使用的数据结构进行了很多讨论。
    • 他最终同意我使用 MaxHeap(PriorityQueue) 和 HashMap 的组合。
    • 我最终编写了整个解决方案,并讨论了所有边缘情况。
    • 经过大量的讨论和修改,他终于对最终的代码感到满意。

第5轮(招聘经理轮):

  • 作为驱动的一部分,前 3 次技术面试于周五完成。
  • 这次采访定于周二晚上进行。
  • 这是在决定是否要为您推出报价时拥有最终决定权的人。
  • 他对我之前的所有轮次都有详细的反馈,包括被问到的问题以及我的表现。
  • 他对我在前几轮的整体表现感到满意,我们还讨论了一些让我感到舒服的技术堆栈。

设计问题(LLD):

  • 设计电话簿应用程序
  • 我列出了我能想到的所有功能/要求。
  • 我们继续讨论了这些功能中的每一个以及我们如何实现这些功能。
  • 最后,他让我只关注 3 个特性——listContacts()、searchContacts()、displayFavourite()
  • 我为 listContacts() 推荐了 InMemory-DB (SQLite),为 searchContacts() 推荐了 Trie,为 displayFavourite() 推荐了 MaxHeap,然后向他解释了使用这些数据结构中的每一个的方法。
  • 经过一番讨论,他终于对我的做法感到满意。

他给了我最后几分钟的时间问一些问题。在他回答后,他暗示我会收到 HR 的消息以进行进一步的处理。

第二天,我接到招聘人员的电话,说我被选中了,HR 当天就联系我索要文件。