📜  微软面试经历

📅  最后修改于: 2021-11-10 06:28:38             🧑  作者: Mango

我想在这篇文章中分享我的微软面试经历,以便对准备即将到来的面试的学生有所帮助。首先,我想说的是,选拔过程很愉快,整个过程中微软的面试官都非常友善。

微软于 2020 年 8 月参观了我们位于丹巴德的 IIT (ISM) 校园。整个招聘过程是虚拟的,简而言之,包括 4 轮。

第 1 轮(编码轮):本轮 90 分钟内解决 3 道编码问题。它在Mettl平台上举行。这一轮很容易,我在 20 分钟内完成了它。

  1. 给定一个整数,找出设置位的总数,第一个和最后一个设置位。
  2. 给定一个字符串,找出最长的回文子序列。
  3. 给定一个整数数组,找出数组中的反转次数。预期的时间复杂度为 O(n 2 )。

在编码回合之后,有 3 轮面试。

第二轮(技术面试):这一轮进行了将近50分钟,还算顺利。面试官问的第一个问题是基于我的项目、经验和我目前在实习中的工作。在此之后,提出了一个基于二进制搜索的编码问题。

  • 给定在某个点旋转(旋转某个数字)的排序数组,找到给定元素的位置。

我立即给出了一个蛮力 O(n) 方法,并明确表示我正在考虑优化解决方案。后来,我用二进制搜索解释了 O(log n) 解决方案,并被要求编写相同的代码。他在我的代码中发现了一些奇怪的东西,我不得不通过一个测试用例来证明自己。对编写的代码进行交叉提问后,接着是一个问题,以便在我的代码可能会失败的测试用例上试运行代码。我建议了一个测试用例,但它失败了。最后,我做了更正,面试官很满意。这一轮进行得很顺利。

第三轮(技术面试):这一轮进行了近1小时20分钟。它不像前两轮那么顺利,我猜大部分候选人的过滤都是在这一轮中进行的。在这一轮中,我测试了我的分析、编码和解决问题的能力。

  1. 为什么我对机器学习和深度学习(这是我感兴趣的领域)而不是我的核心分支学科感兴趣?
  2. 然后,问了 3 个输出问题,其中一个是基于指针的,另一个是基于递归和存储类的。第三个不记得了。
  3. 下一组问题基于 LRU 缓存。定义 LRU 缓存以及您将使用什么数据结构来实现它?我的第一种方法是使用队列,但后来,我觉得矢量化实现和散列一起工作。我被问到它的空间和时间复杂度,还被要求进一步优化空间复杂度。我以时间复杂度为代价给出了优化空间复杂度的解决方案。他似乎对解决方案很满意。然后,我被问到LRU缓存的一个真实例子,当时我想不出一个例子。
  4. 基于银行业锁定交易的问题。如果在同一时间从同一个账户进行 2 笔交易会发生什么?银行为检查欺诈而进行的不同检查有哪些?我根据日常生活中的分析思考和观察提出了一些方法。
  5. URL 是如何缩短的?
  6. 给定一个整数数组,最大的 OR 值是多少?找到给出最大 OR 值的最小子集?我使用动态规划解决了这个问题。
  7. 给定一个 BST,找到给定值的 2 个节点之间的距离。我通过将一个元素作为根来解释 DFS 方法。

第四轮(技术+人力资源面试):本轮持续约45分钟。本轮问题基于以下主题:

  • 操作系统
  • 数据结构和算法
  • 机器学习和深度学习(我感兴趣的领域)
  • 基于项目的问题
  • 联网
  • 系统设计
  • 人力资源问题
  1. 前几轮你觉得难的题是什么?他开始盘问他们。您将如何开发一个机器学习模型来检测银行部门的欺诈行为? (正如我之前提到的,LRU 缓存和银行业问题的现实示例具有挑战性)在很短的一段时间后,我能够回答他真正想要的问题。
  2. 你做过哪些项目?解释他们。
  3. 在过去的 2 年里,你在大学里遇到了哪些挑战?
  4. 您是如何从电气工程部门从事编码和机器学习的?
  5. 你在大学课程之外做了什么? (课外+所修课程+技术经验)
  6. 下一组问题基于网络。输入账号后,银行如何关联账户持有人的账户?完成此操作时使用哪些协议?什么是客户端-服务器脚本?还问了一些网络问题。我不知道网络概念,但我一直在互动,并试图根据我在 CBSE 第 12 课中学到的网络基础知识来回答一些问题。
  7. 您将如何设计电梯系统?您将使用什么调度算法?我知道调度算法,因为它是操作系统中的一个重要主题。我为此建议了两种方法,一种是基于优先级(非抢占式),另一种是 SJF(最短作业优先)。但他要求不使用这两种算法的解决方案。我建议了第三个,它基于选择当前目的地路径中的电梯呼叫。他让我提出另一种方法。我几乎没有想法,因为我已经给出了我能想到的所有可能的选择。我向他建议在紧急情况下采取基于紧急情况的方法,但我知道这不切实际,我也提到了这一点。
  8. 如何删除双向链表中的节点?借助我对链表的了解,我可以对其进行解释和编码。他对我的做法很满意。

最后,他让谈话冷静下来,让我在劳累了一天后冷静下来。

我对所有将在未来几周或几个月内参加面试的候选人的建议是在整个过程中保持冷静和自信。只有当您冷静沉着时,您才能发挥出最佳水平。据我所知,这些公司不仅测试你的技术知识,还测试你在面试中如何互动以及如何处理困难的情况。学生通常关注 OOP、DS/Algo,但我认为准备操作系统、网络和系统设计等主题对面试过程非常有帮助。

给每位求职者的主要提示是与面试官保持互动,大声思考,以便面试官了解您的方法。

感谢您阅读这篇文章。希望大家通过阅读,有所收获。干杯!