📜  MTS 实习生的 Nutanix 面试体验 |校内 2021(虚拟)

📅  最后修改于: 2021-11-18 02:18:18             🧑  作者: Mango

大家好,我最近接受了 Nutanix 技术人员 (MTS) 职位的面试。由于当前的大流行情况,整个过程都是虚拟的。选拔过程包括1轮编码、1轮调试、1轮技术和1轮系统设计。

编码回合(2 个问题 – 90 分钟平台 – HackerRank)

  1. 你必须出版 X 漫画不同的漫画书。为此,您有 Y 印刷机和 Z 装订机。第 i 台打印机需要 Print[i] 分钟的时间来打印漫画书的所有页面。每台装订机需要 K 分钟来装订漫画书的所有页面。在一个时间点,每台机器(印刷或装订)只能处理一部漫画的大部分页面。

    发布的步骤如下:

    1. 一台被占用的印刷机我开始印刷漫画书的页面。
    2. 在print[i] 分钟后,打印的页面从第i 台打印机中取出。
    3. 经过非负的时间后,漫画的印刷页面被放置在一个空置的装订机中。
    4. K 分钟后,页面从装订机中取出。

    找出出版 X 部漫画书的最短时间。

    Constraint:
    
    1<=X<=10^6   
    1<=Y<= 10^5 
    1<=Z<=10^9 
    1<=K<=10^9 
    1<=print[i]<= 10^9
  2. 一行中有 N 个机器人,每个机器人都有一个整数值。每个机器人都可以在左侧或右侧终止最近的机器人。当一个值为 x 的机器人终止另一个值为 y 的机器人时,被终止的机器人会将值更改为 xy。所有机器人将互相完成,直到剩下一个。找出最后一个机器人的最大可能值。
    Constraints
    
    1<=N<=500000 
    -10^9<=A[i]<=10^9 

    我能够用所有测试用例完成第二个问题。对于第一个问题,我能够通过 20/21 测试用例。

本轮过后,13名学生入围。

调试轮(45 分钟):这一轮是通过缩放调用进行的,监考人员与每个候选人共享一个单独的文档,我们被要求调试代码。

  • 该代码与一个标准的操作系统问题有关,即读写器问题。我们必须在给定的代码中找到逻辑错误。
  • 每个函数的功能为每个函数被明确定义,所以没有理由恐慌,因为它是完全合乎逻辑的。
  • 在为这一轮做准备时,我能够在代码中找到错误。
  • 我建议为这一轮准备读者-作家,生产者-消费者,用餐哲学家等标准问题。
  • 本轮有7名候选人通过。

技术面试轮(DSA – 1 小时到 1 小时 15 分钟):在此轮之前,2 名候选人已经收到了另一家公司的录取通知,因此他们退出了招聘流程。只有 5 名候选人进行了技术轮次。 Nutanix 在这一轮中的特别之处在于他们自己制定了他们的问题,而这些问题在任何地方都没有。他们测试你如何解决问题的思维能力。

采访是通过变焦电话进行的。面试官先让我做自我介绍,问了我的兴趣爱好。他非常友好,甚至问起我最喜欢的电视节目。然后他分享了一个谷歌文档链接,并要求我为以下问题编写代码。

  1. 给定具有 N 个节点的树。树中节点 i 和节点 j 之间的每条双向边 (i,j) 都带有一个权重。树中有一个特殊的节点 X。计算所有节点到这个特殊节点 X 的距离总和,即 dis(X,1)+dis(X,2)+dis(X,3)…..+dis(X,N)。我的方法是将树视为图(因为双向边),然后执行 BFS 来计算总和。时间复杂度是 O(V),空间复杂度太线性了。
  2. 下一个问题是上一个问题的后续问题。现在提供了一个大小为 K 的集合 S,它表示这棵树中的 K 个特殊节点。对于树中的每个节点 i,计算 i 到这 K 个节点中的每一个的距离总和,即 Val(i)= dis(S[1],i) + dis(S[2],i)+…。 .+dis(S[K],i)。找到最小值 Val[i] 和该值最小的节点。换句话说,找到 min(Val(1), Val(2),…..Val(N)) 和存在最小值的节点。面试官要我编辑我之前问题的算法,并为这个问题形成一个解决方案。每当我被卡住时他都会给我提示,我能够想出一个解决方案,我们必须首先将所有 K 个特殊节点推送到队列中,然后执行 BFS,同时通过将它存储在一个保持到现在为止找到的最小距离最小距离变量。面试官对我的方法和代码很满意。
  3. 下一个问题是全新的,面试官只是想让我为它编写方法和伪代码以及它的时间复杂度。问题是——在一个城市里,有几栋房子。您需要找到一种最佳方式,使每个房屋都能获得供水。每个房子都需要供水。此外,在每所房子里开一口井都会产生成本。 Cost[i] 表示在房子 i 中开井的成本。此外,还提供了图表。每条双向边(i,j) 都有在房屋I 和房屋j 之间建立供水的成本权重(i,j)。现在找到一种方法来确保每个房子都能得到水。整个安排的成本必须尽可能低。我的第一种方法是一种对成本数组进行排序的贪婪方法,然后检查在城市 i 中建造良好的成本 [i] 是否小于边缘的权重。方法是错误的,所以面试官给了我一个提示,我能够推断出首先,我们必须构建最小生成树,然后删除权重大于在该城市建新井的边。由于最耗时的部分是构建最小生成树,因此解决方案的时间复杂度为 O(VlogE),空间为 O(V+E)。

面试官真的很友好,每当我有疑问时都会帮助我。他还纠正了我犯的错误,并让我改正。本轮过后,将选出 3 名候选人参加下一轮。

系统设计回合(1 小时):这一回合也进行了缩放调用。

  • 面试官先自我介绍,然后让我做同样的事情。
  • 然后他给了我设计Domino’s Pizza Delivery System的问题陈述。这轮我有点紧张,因为我从来没有做过系统设计。我只为它准备了几个 3-4 小时,对它的概念有了基本的了解。
  • 面试官在这个过程中真的很有帮助,每当我遇到困难时都会给我一些提示。他让我首先为系统设计一个基本结构。然后他问了我几个后续问题,功能需求,非功能需求,哪个数据库更合适,模式设计表,如何保证用户的安全和隐私,使用哪种协议,假设数据库得到完整如何使它具有可扩展性,您将使用哪种数据结构来构建您的数据库以及为什么,如何更快地优化对用户的请求,您将使用哪种缓存,您将使用哪种数据结构作为您的缓存,您将如何使用存储用户登录的时间戳,以便他们不会长时间保持登录系统,如果有大量用户请求,您将如何处理。
  • 我能够以适当的理由回答后续问题。面试官接受了我对问题陈述的解决方案。最后问了一些公司工作环境的问题,他很耐心的给大家讲解。在我看来,面试进行得非常顺利。

结论:我是唯一一个获得 Nutanix 实习机会的候选人。面试过程真的很顺利,面试官很友好,很感谢Nutanix提供的这个机会。