2017 年 7 月微软实习面试经历:
第一轮是 75 分钟的在线轮,其中提出了 3 个简单的问题。
- 第一个问题给出了两个数字 n,m 找到一个最接近 n 并且可以被 m 整除的数字。
- 第二个问题给出了一个仅由 0,1,A,B,C 组成的字符串,其中 A=AND B=OR 和 C=
异或。假设没有优先顺序,计算从左到右移动的字符串的值。 - 第三个问题:给你一个整数二叉树和一个“和”。返回从根开始到叶节点结束的最短路径的长度,使得沿该路径的数字总和等于“总和”。
飞轮:
- 第二轮是笔试,问了两个问题。
- 第一个问题是句子颠倒
- 第二个问题是最大乘积子数组。
编写整洁的代码,除了优化时间复杂度之外,还要注意优化空间复杂度(当然,如果可能的话)。使用好的变量名。
MS面试经历:
第1轮:
- 我被要求填充二叉树中的下一个右指针。首先我使用队列,但被要求进一步优化它,使其消耗 O(1) 额外空间。被要求为他们编写代码。
第二轮:
- 线程和进程之间的区别?…类似的其他操作系统问题。
- 什么是抽象、封装、继承等。
- 被要求解释LRU算法。
- 我被要求编写编辑距离问题(geeksforgeeks 标准问题)。
- 他从设计一个应用程序开始,该应用程序将跟踪和绘制其他用户的位置,并为我提供了各种场景,例如,如果发件人离线,我将如何处理内存溢出。这持续了超过 10-15 分钟。
第 3 轮:
- 我被要求实现 LRU 缓存。
- 此外,关于如何在一个数据结构中实现散列(键和值是字符串),给定三个操作 insert()、get1() 和 get2(字符串 s),其中 get1() 返回最近最少使用的字符串和 get2 (s) 返回映射到 s 的字符串(面试官坚持我将 get(1) 减少到 o(1) 因为它是一个缓存)。我以某种方式设法将复杂性降低到 O(log(n)), O (1) 和 O(log(n)) 并且他似乎被说服了。
- 我被问到很多关于我的深度学习项目(机器理解)。他进一步问我在实习期间我想从事什么样的项目,以及我是否有任何问题要问他。