微软面试经历 | Set 169(SDE 2 3.5 年经验)
第一轮(在线编码):
- 给定一个包含正整数和负整数的数组,找到最大乘积子数组的乘积。
- 对一个几乎排好序的数组进行排序,其中只有两个元素被交换。
- 给定一个整数值和一个指向链表头的指针,从链表中删除所有大于指定值的节点。
第二轮(DSA):
- 求 BST 的中位数。 BST 也可以有重复项。必须使用递归和回溯来编写生产级代码。我告诉他各种方法。然而,他只使用两个指针在一次扫描中寻找中位数。
第三轮(DSA):
- 介绍和详细的项目讨论。
- 查找数组中的多数元素。多数元素是出现超过数组大小一半的元素。我们讨论了各种方法,最后不得不为其中一种方法编写工作代码。
- 二叉树的左视图。需要工作代码和代码中的一些问题。比如,为什么你使用静态变量以及如何在不使用任何静态和全局变量的情况下做到这一点。
- 来自指针的一些问题,例如,
链表的结构是:
struct node{
int val;
node *next;
}
那么,如果你从节点 *next 中删除 * 会发生什么。
还有一些来自指针的更深层次的问题。
第四轮(设计) 。
- 设计一个实时的 URL 垃圾邮件过滤服务。我们拥有数十亿个 URL 的相关信息,无论它们是否是垃圾邮件。我们需要提出一种架构解决方案来存储所有 URL 并以最小的延迟检索信息。有一些限制,例如,您的内存非常小。因此,您只能在内存中为查询加载几个 URL。
- 为应用程序 x 实现你自己的 malloc 和 free,它应该控制应用程序 x 的堆内存使用。讨论了为请求分配内存的各种方法。
第五轮(人力资源)
- 项目讨论和一些行为问题。
- 手头有报价吗?
第六轮(招聘经理):
- 介绍。
- 最近项目的详细讨论。
- 一些行为问题。
- 给定二叉搜索树的前序遍历,构造 BST。需要完整的工作代码。
- 给定事件,例如,打开、关闭、拉椅子。设计一个架构来计算给定时间范围内的事件数量。时间范围可以是分钟、小时或天。
微软的所有练习题!