📜  高盛面试经历| 2019 年 9 月 |有经验的

📅  最后修改于: 2021-09-23 06:02:37             🧑  作者: Mango

当我接到高盛关于某个团队招聘的电话时,我有 2 年的经验。总共进行了 6 轮(2 在线 + 4 现场)。

第 1 轮: Hackerrank

有 2 个问题您可以在家里尝试。由于首选语言是Java/ Python,因此我使用Java来解决它们。我不记得确切的问题。我有点记得第二个问题。问题是:

  • 根据某些条件合并数组的相邻元素,直到满足该条件。然后,输出是打印数组中的最后一组元素。

一周后,我接到了 HR 的电话,要求我敲定 Coderpad 回合的日期。 HR让我确认我是否精通Java/ Python 。我提到我知道 Core Java,但我想使用 C++ 进行编码,因为使用它进行编码很容易。她让我和面试官讨论这个问题。最终确定日期是电话会议后一周。

第 2 轮: Coderpad

我可以看到 C++ 可用于编码。但在与面试官讨论后, Java最终确定为编码语言。

  • 给定两个分数,它们表示为由两个元素(分子和分母)组成的数组,任务是找到减少的分数,即两个分数的总和。
  • 给定两个已排序的数组,找出它们的中位数。

第一个问题是一个简单的数学问题,它也将涉及 GCD。我讨论了该方法并在 5-10 分钟内对其进行了编码。我错过了负数的极端情况。我对此进行了验证,然后转到下一个问题。

第二个是标准问题,但我不知道最快的方法。我可以想到一种方法,我可以确保元素以两种方式进行排序,并且左侧数组的最后一个元素小于或等于右侧数组的第一个元素。我讨论了他理解的方法,然后我开始编码。当时间过去时,我几乎已经完成了编码。他说代码可以优化,但他理解我的方法。

然后我可以想到 O(n) 方法,它涉及合并两个排序数组,其中我们实际上不合并,只需要保持中间元素的计数。还有另一种方法是 O(logn) 并且涉及比较两个排序数组的中值。现场巡查的日期保留在两周后。

第三轮现场

  • 问题是修改此查找访问所有汽油泵的第一个循环游览。这里的附加条件是确保汽油利用率最低。

一开始我很难考虑最佳方法。然后我建议使用蛮力方法,我们可以在任何时候选择选择或不选择泵。我们可以从中选出最好的。然后经过一些讨论,我得到了一个提示,之后我可以想到一种涉及堆(优先级队列)的方法。我被要求编写这种方法。然后再次修改问题以添加一个条件,即在任何泵中,我们不能选择超过 x 量的汽油。我对我的方法做了一些有条件的改变,但想不出任何其他优化。

第二个面试官看了我的简历,想问一些JS相关的问题。我提到我不舒服,他可以问我Java 。他说没关系,他就完成了。但是第一个面试官问了我关于HashMap的问题,它的实现(负载因子等主题),get操作的最坏情况,heaps的实现等等。

第 4 轮:现场

  • 给定一组代表比赛中两支球队之间的比赛以及每对球队的相应获胜者的一组对,找到我们给两支球队的查询结果,我们必须找到他们之间的获胜者(假设两支球队没有打得更多不止一次)。

    我使用有向图解决了这个问题。我们可以使用锦标赛数据构建一个有向图。如果我们能在 T1 到 T2 之间找到一条路径,那么 T1 就是赢家。如果 T2 到 T1 发生同样的情况,则 T2 是赢家。如果找不到路径,则数据不足。

    该方法必须针对大量查询 (10^5) 进行优化。我使用哈希图来存储图形数据(邻接矩阵/列表),这在查询期间是最佳的。

  • 给定一个可以包含特殊字符的字符串,任务是找出使用字符(忽略特殊字符)形成的字符串是否是回文。

    我在 10 分钟内编写了代码。我在我的代码中遗漏了一个案例。我重新检查了一下,然后再次提交。重要的是要注意代码必须是生产级的(无错误)。即使我们快速编码,准确性也是一个重要问题。多花 5 分钟,但要考虑所有边缘情况。

第 5 轮:现场

  • 我们学院有一个系统,学生可以使用学生证登录,打开浏览器进行搜索。每次搜索都将存储在一个数据库中,其中包含以下数据:学生 ID、搜索请求和时间戳。在一天内收集所有搜索请求后,管理员可以在第二天查询该数据库。查询可以像查找最频繁的搜索请求(一般和针对学生)和类似的。

    我们需要设计两种方法——存储和查询。这里的任务是确保我们想出一种方法来使这些方法更快。我们可以进行权衡(在这种情况下,查询可以比存储更重要——这没有明确指定)。

    我用 hashmap 和 heap 来解决这个问题。面试官对这种方法很满意。

  • 我们还有 10 分钟的时间。第二个面试官提出了一个问题——有一个数字x。我们可以进行两次查询,其中第一个查询将给出 n = x ^ y (XOR),其中 y 是 100 个随机选择的数字中的一个数字。在下一个查询(例如)中,我们随机选择 100 个数字,然后返回 m = x ^ z (XOR) 其中 z 属于随机数集。任务是找到x。

    方法是记住一个数字与其自身的异或是 0。如果我们对给定的集合进行 n 的异或,我们将在第一个列表中的某个地方得到 x(y 将被取消)。同样,我们将在第二个列表中得到 x。在两个列表中搜索一个数字的相似性(假设唯一性)将得到 x。幸运的是我5分钟就解决了这个问题,面试官似乎很满意。

    第 6 轮:现场

    其中一位面试官在我看来是经理。我被要求用外行的术语解释我目前的工作。然后,有一个 DS 问题 – 找到一对与给定数字 X 的总和最接近的对。我编码并解释了我的方法,其中涉及两个指针。

    下一个问题与 DB(连接)有关。我解决了这个问题,但找不到简化的查询。我解释说这在 ABAP(我当前项目中使用的语言)中很容易解决。但他们说这没有任何用处,因为他们不知道这一点。

    最后一个问题是一个谜。给定 3 列在同一时间和地点开始的火车,我们可以将燃料从一列火车转移到另一列火车,这样限制不超过给定的 X(对于所有火车),找到任何火车覆盖的最大距离。我能够在提示后想到方法。我们可以在 1/3 间隔后将燃料从一列火车转移到另一列火车。对于 n 列火车,这可以推广为 1/n。由此产生的距离将是一个谐波级数。采访以一些一般性讨论结束。

    HR 告诉我,我的反馈是积极的。