微软 SDE-1 面试体验(校外)
第 1 轮(在线评估轮)– 2 个编码问题必须在 90 分钟内解决。测试的平台是 codility。请记住,在 codility 平台系统的测试用例是隐藏的。您可以针对您的测试用例测试代码。
- 在一个计划上给出了 N 个点(从 0 到 N-1 编号)。第 k 个点在坐标 (X[k], Y[k]) 处,该点的标签是 S[k]。我们想要做一个圆心在 (0,0) 的圆。圆圈不应有两个具有相同标签的点。圆内的最大可能点数是多少?
- 给定一棵有 N 个节点的树,编号从 0 到 N-1。每个节点只能包含字母“a”或“b”之一。长度为 N 的数组 A 用于表示树。 A[k](对于 K 从 0 到 N-1)表示第 k 个节点的父节点。字母表示为字符串S[k]。您需要找到树中最长路径上的顶点数,这样路径上的任何相邻顶点都不会包含相同的字母。
幸运的是,我可以运行这两个代码。几天后,我收到了一封邮件,我被选中进行进一步的面试。
面试流程:共面试3次。
面试第一轮(技术面试):她自我介绍,让我自我介绍。然后她直接转向数据结构。她问了我两个问题——
- 给定一棵树(具有左、右和前一个指针),您需要填充每个前一个指针以指向其前一个左节点。如果没有前一个左节点,前一个指针应该设置为NULL。
- 矩阵的螺旋打印。
最后,她问我是否有任何问题。我请她分享她的经验以及她目前正在与之合作的团队。
一周后,我接到电话说我入围了下一轮。
面试第二轮(技术面试):他介绍了自己。然后,他问了我一些关于我的项目的问题(大约 5-10 分钟)。
然后他问我是否乐于解决多线程问题。我告诉他我还没有学过多线程这门学科。因此,他转向有关数据结构的问题:
- 打印字符串的所有可能排列。然后他让我修改我的代码,以便没有重复。
- 打印字符串的所有子序列。
由于我们还有一些时间,他问了另一个问题。这是一个日程安排问题。他只想知道哪种数据结构最适合这种情况。我告诉了优先队列,他似乎很满意。我不记得确切的问题。
幸运的是,我被选中进入下一轮和最后一轮。
第 3 轮面试(最终 AA 轮): AA 代表“酌情”。这一轮是技术和管理问题的混合体。
他开始采访有关时间复杂度和空间复杂度定义的问题。
- 最佳时间复杂度是多少?
- 最佳空间复杂度是多少?
然后他给了我一个编码问题。
- 沿环形路线有 n 个加油站,第 i 个加油站的加油量为 gas[i]。从车站到下一个 (i + 1) 车站要花费成本 [i] 的汽油。给定气体和成本的两个整数数组,如果您可以用足够的气体沿顺时针方向绕电路一圈,则返回起始加油站的索引,否则返回-1。他想要一个 O(n) 的方法。
- 然后他问了我一些关于我的项目的问题,比如为什么是MongoDB ?它的优点。
- 他继续询问我喜欢的任何产品,例如 Alexa、Google Home 等。我说谷歌主页。然后他问了一些问题,比如它如何知道将输入作为语音执行什么操作。
- 为什么选择微软?
我的采访提前 15 分钟结束。
最终判决:一周后,我收到了一封邮件,我被选中担任全职软件工程师职位。
建议:
- 与面试官沟通好。
- 说实话。如果你不擅长任何主题,首先要非常清楚。
- 向面试官表示愿意接受这个机会。
- 继续编码。
我希望你喜欢阅读这篇文章。祝学习愉快,万事如意!