微软 SDE-1 面试体验(海得拉巴)
我有大约 1.5 年的工作经验,并通过 LinkedIn 接到了招聘人员的电话。
第 1 轮(难度级别 - 中等): 90 分钟的顺应性测试,包括 3 个编码问题。
- 第一个问题:使字符串成为有效括号所需的最小括号数。
这个问题预计将在一次遍历中解决,否则它会给出 TLE。 - 第二个问题:给定字符串中仅出现一次的最小子字符串
https://www.geeksforgeeks.org/smallest-substring-occurring-only-once-in-a-given-string/ - 第三题: matrix和DP相关,难度大,耗时
- 需要解决 50% 才能进入下一轮
第 2 轮:(技术面试第 1 轮)难度级别 - 中等:面试官提供了一个简单的链接,并要求我解决一个问题。
- 问题:给定一个 BST,在树中找到两个错误放置的节点。
注意- 首先使用蛮力方法解决它,然后提供优化的解决方案。我使用简单的中序遍历解决了它并给出了所需的输出。 - 面试官非常友好,每当我遇到困难时都会帮助我。
第 3 轮:(难度级别 - 难):面试官给出了两个问题的 codility 链接,并要求我解决它们。
- 第一个问题: https://www.geeksforgeeks.org/program-generate-possible-valid-ip-addresses-given-string/
- 第二个问题:给定 2 个城市 A 和 B,并给定一组对 (costA, costB),其中 costA = 将人员移动到城市 A 的成本,而 costB = 将人员移动到城市 B 的成本。编写一个程序将 2N 人移动到这两个城市城市 A 和 B 使得 N 人在 A 和 N 人在 B 并且成本最小。
方法:我根据两个城市的成本差异对数组进行了排序。可以使用Java中的比较器接口进行排序。
第 4 轮:(难度级别 - 中等):这一轮由项目经理进行。
- 当被要求设计一个微型 URL 系统时,考虑到我多年的经验,面试官帮助我解决了获取需求和计算吞吐量的基本设计问题。
https://www.geeksforgeeks.org/system-design-url-shortening-service/
第 5 轮:(难度级别 - 困难):这一轮由软件工程经理进行。提供了一个包含 1 个要解决的问题的代码链接
- 问题:给定 2 个值 N,冲刺所有 N 个数字的组合,使得它们的总和为 S。
示例:输入 – N=2,S=6
输出: [0,6],[1,5],[2,4],[3,3],[4,2],[5,1],[6,0]。 - 如果 N = 2,问题可能很简单,但 N 会发生变化,并且允许重复并且允许所有组合。我使用递归方法解决了这个问题,其中一个数字保持不变并开始填充其他数字,使总和等于 S。
第 6 轮:AA 轮(难度级别 - 中等):这是最后一轮,称为 AA(视情况而定)。面试官给出了一个与 1 个问题需要解决的 codility 链接。
- 问题:给定一个包含 2N 个数字的数组,重新排列数组,使偶数在偶数索引中,奇数在奇数索引中。没有多余的空间可以使用。
- 使用单次遍历解决了它,面试官已经针对多个测试用例和所有极端情况测试了代码
建议:微软的主要关注点是解决问题和系统设计技能。在 gfg 上练习 LeetCode 和 Microsoft 标记问题有很大帮助。
- https://www.geeksforgeeks.org/microsoft-interview-preparation/