📜  MTS 实习生的 Nutanix 面试体验 |校外 2021

📅  最后修改于: 2021-11-18 01:34:15             🧑  作者: Mango

大家好,我最近面试了 Nutanix 的技术人员 (MTS) 实习生职位。由于持续的大流行情况,整个过程是虚拟的,包括 1 轮编码、1 轮调试和 2 轮 F2F 面试。以下是面试问题:

编码回合(2 个问题 – 75 分钟):

  1. 给定一个二进制矩阵(只能有 1 和 0 作为元素),它有 n 行和 m 列,最初由全 0 组成。 Q 查询如下。查询可以是 4 种类型:

    1. 1 R指数
    2. 1 C指数
    3. 2 R指数
    4. 2 C指数

    在每个查询中,第一个输入是查询的类型,第二个输入是我们是否必须考虑行 (R) 或列 (C),第三个输入是行/列的索引。对于每个类型 1 查询,我们需要翻转具有给定索引的行/列的元素。对于每个类型 2 查询,我们必须输出具有给定索引的行/列中存在的零数。

    约束:

    N - 1 to10 ^ 5, Q - 1 to 10 ^ 5.
  2. 给定一个有 n 行 m 列的矩阵,其中每个元素是一个从 1 到 10 ^ 9 的数字,我们需要找到最长的递增路径,即下一个单元格的值应该大于当前单元格的值。我们只能移动到相邻的单元格,即与当前单元格共享一侧的单元格。此外,路径可以在矩阵中的任何位置开始和结束,但不能两次访问任何单元格。

我能够做 1.5 个问题。对于第二个问题,我使用了 DFS + DP 的方法,并且所有测试用例都通过了。解决方案类似于 https://www.geeksforgeeks.org/find-the-longest-path-in-a-matrix-with-given-constraints/。对于第一个问题,我进行了蛮力尝试,清除了一半的测试用例。我之前有一些承诺,所以我必须在一个小时内完成考试,所以我没有尝试进一步优化它。幸运的是,我仍然晋级并入围了下一轮。

调试轮(1 个问题 – 45 分钟):下一轮是调试轮。这一轮大约有 20 人,我们所有人都必须同时进行这一轮。我们获得了一段用于并发文件写入和顺序确认的代码,正如您从名称中判断的那样,这是一个基于操作系统 (OS) 的回合。我们每个人都得到了一个单独的文档,其中包含问题陈述和代码。我们不得不建议更改并评论当前代码有什么问题,为什么我们认为应该进行更改等。由于我根本没有为操作系统做好准备,所以最初我很沮丧,但后来我注意到所有的功能都是问题陈述中明确提到,这意味着大部分问题都可以通过理解给定的代码来完成。我们只被要求注意逻辑错误,而不是语法错误。到最后,我已经指出了 10 或 11 个错误,我对此非常满意。我想说的不仅仅是了解理论,这一轮是为了看看你在理解现有代码和找出基本错误和逻辑错误方面有多好。本轮后有9人入围。

技术面试 1(数据结构和算法轮 – 1 小时):第一轮 F2F 面试是 DSA 轮。最初的 5 分钟是介绍。然后我不得不登录到hackerrank上的代码对链接,她给了我一个问题。所以这个问题有点像一个共同的前提,在这个前提下提出了后续问题。前提如下:

一排有n栋房子。房屋的索引从 1 – n。每个房子都有一些与之相关的钱,你会得到一个数组中的值。现在志愿者不得不为一些非政府组织募款。志愿者可以通过两种方式收款:

  1. 志愿者可以按任何房屋顺序收款。
  2. 志愿者只能从连续的房子里收钱。

现在有3个非政府组织。任何向所有三个非政府组织分配等量资金的志愿者都有资格获得奖励。我们需要找到有资格获得奖励的最大志愿者人数。假设多个志愿者可以从同一屋子里收钱,但一个志愿者不能从同一屋子里多次收钱。

在这个前提下,一一问了4个问题:

  1. 如果所有志愿者只能以第一种方式收款,请找出将获得奖励的最大志愿者人数。重要的是要从前提中理解这只是意味着找到数组的子集的数量,使它们的总和可整除 3。因此,我提供了时间复杂度为 O(n) 和空间复杂度为 O(n) 的动态规划解决方案.她进一步询问如果有 k 个非政府组织会怎样。复杂度将简单地变为 O(n * k) 时间和空间复杂度。我不得不编写整个解决方案。
  2. 如果所有志愿者只能通过第二种方式收款,请找出将获得奖励的最大志愿者人数。再次我们必须明白,问题现在变成了识别总和可被 3 整除的子数组的数量。因此,我使用了一种基于 Hashmap 的方法,类似于 https://www.geeksforgeeks.org/count-sub-数组总和可分 K/。我也必须为此编写整个解决方案。
  3. 假设所有志愿者只能以第二种方式收款,假设存在形式为 (l, r) 的查询,因此您只能考虑范围 [l, r] 内的房屋,请找出将获得奖励的最大志愿者人数。查询的数量高达 10 ^ 5。为此,我使用了段树方法,她对解决方案印象深刻,因为她期待其他问题。
  4. 最后一个后续问题是,在上一个问题中,我们现在可以进行形式 (index, val) 的查询,这意味着将索引处的房屋价值更改为 val。这再次很容易被段树数据结构处理。

这一轮非常顺利,面试官印象非常深刻,因为她没想到面试会持续到第 4 个后续问题,并因此表扬了我。

技术面试 2(系统设计轮 – 1 小时):最后一轮是系统设计轮。我被要求为 Pastebin 做一个系统设计,并给出了我必须满足的一组要求。从未做过或什至不了解系统设计轮次的我有点紧张,并且在面试前 15 分钟随机浏览了有关该主题的博客。但是,面试官非常乐于助人,并全程指导我。我必须给出 API 的签名,讨论我将使用哪种类型的数据库及其优缺点,数据库将拥有的各种集合,如何处理缓存,LRU 缓存的设计等。有趣的回合,事实上,我在回合中学到了很多东西。我及时完成了这一轮,并对这一轮的进展感到非常满意。

结论:我被选中并获得了从 2 月 1 日开始为期 5 个月的实习机会! 🙂 这是我经历过的最顺畅的面试经历之一,我也很感谢 Nutanix。