📜  DE Shaw 实习面试经历 |校园 2022

📅  最后修改于: 2022-05-13 01:57:55.017000             🧑  作者: Mango

DE Shaw 实习面试经历 |校园 2022

DE Shaw 于 2021 年 7 月在我的大学举行了 QTE 实习生(2 个月)职位的校园招聘活动。

选拔过程共进行了三轮:

第一轮(技术测试-Hacker Rank 95 分钟):本次测试共有三个部分。

  • 第一部分由 14 个简单到中等难度的 Aptitude MCQ 组成,在 28 分钟内完成。
  • 第二部分由 12 个技术 MCQ 组成,涉及查找 C++ 代码逻辑中的错误、猜测代码问题的输出、DBMS、SQL 和相关概念,需要在 17 分钟内完成。
  • 第三个是编码部分,有两个编码问题,第一和第二个问题分别为 20 分钟和 30 分钟。这两个问题是: (i) 给定一个包含 n 个整数的数组,您可以将数组分成包含 k 个元素的部分(n 可以被 k 整除)。每个部分的分数是该部分中元素的乘积。找出你能达到的所有部分的最大分数总和。 (ii) 假设您有三个项目 A、B 和 C,您需要将它们按特定顺序放置,这样就不会有三个连续的相同项目。给定 n 个形式为 (a, b, c) 的查询,其中 a、b 和 c 是您拥有的物品 A、B 和 C 的数量,找出您可以订购的 A、B 和 C 物品的最大数量通过遵循上述约束。 (约束很低)

技术面试第 1 轮(60 分钟的黑客等级代码对):有两个面试官。其中一个跑得有点晚,另一个采访从他的介绍开始,然后问我的。然后他说另一个面试官有点晚了,我们为什么不先从第一个问题开始:

  1. 给我的第一个问题如下:我们有 N 个块需要使用 K 种颜色进行绘制,条件是最多只有一对相邻的块可以具有相同的颜色。这是一种 DP 问题,我很快发现了它,并给了他们递归和记忆的方法。他告诉我做一些试运行,然后他似乎对解决方案感到满意。
  2. 现在第二个面试官已经加入了,他首先给了我一个谜题:我们从家里到办公室再回来,因为只要你遇到红绿灯总是红灯。现在,从你家去办公室时,你会停下两次,但从办公室回家时,你只会停下一次。这种情况怎么可能。他让我画出并正确解释我的解决方案。 (提示:当你需要左转时,你不需要在红绿灯前停下)。我花了大约 5-10 分钟来解决这个难题。
  3. 然后他问我下一个问题。有一栋N层楼,你有一个鸡蛋。您需要找到鸡蛋在掉落时破裂的最低楼层。鉴于鸡蛋在某个楼层及其上方会破裂,并且不会从其下方的任何楼层破裂。唯一的解决方案是我们从最低层开始扔鸡蛋并向上直到它破裂,这不能进一步优化,因为我们只有一个鸡蛋。然后他问我这个解决方案的时间复杂度,我说它是 O(N)。
  4. 然后他修改了这个问题,并对上一个问题进行了跟进,询问如果我们有 2 个鸡蛋来找到鸡蛋在掉落时破裂的最低楼层,那么最优方法是什么。起初,我给出了另一种 O(N) 方法,但他问是否还有另一种更优化的方法,我给出了二分搜索方法。我们将使用其中一个鸡蛋来缩短搜索范围,然后在新范围内执行线性搜索。然后他问我哪些楼层会有最坏的情况和最好的情况,这里最坏的情况和最好的情况是指我们必须进行最少跌落次数的楼层。
  5. 现在第一个面试官问我是否知道LRU缓存是什么?我告诉他们我只知道一点点,并解释了我所知道的一切。然后他让我实现一个可以用作 LRU 缓存的系统。这是一个设计问题。起初,我给了他们一个非常未优化的方法,他们问我是否可以让它更有效率。我无法找到最优化的解决方案,我找到了一个系统,我们有一个类似优先级队列的结构和一个哈希图。它的预期解决方案是基于链表和哈希图的优先级队列。
  6. 最后,他们问我有什么问题,我问他们在做什么,他们的角色是什么。

技术面试第 2 轮(HackerRank 代码对 60 分钟):又是两个面试官。介绍后,他们从问题开始:

  1. 他们从一个数学难题开始,他要求找出两者中哪一个更大,50^(99) 或 99!,一旦我说 50^99 更大,他们然后问我为什么?我能够给出一个合乎逻辑的答案,我们将两个数字都更改为 100,然后进行比较,但他们似乎对此并不完全满意。
  2. 我的第二个问题是,有很多学生和很多课程,一个学生可以参加尽可能多的课程。我们正在制定考试时间表,其中每个学生每天只应进行一次考试,并且应尽量减少考试的天数,并要求我们找出进行考试所需的最少天数。例如:如果有两个学生,他们选择的课程如下:学生 1:M,P 和学生 2:M,C。然后我们可以进行如下检查:第 1 天:{M} 和第 2 天:{P,C)。这样,没有学生必须在一天内进行两次考试,并且总天数的跨度最小化。我花了一段时间才终于观察到我们可以有一个类似图形的结构,其中节点代表一门课程,边代表有一个学生,他的两个节点都由该边连接作为科目。现在要找到最小天数,我们必须执行拓扑排序并在拓扑排序图中找到不同级别的数量。然后他问我什么是拓扑排序,然后是一个真实的例子,以及我们如何在一个模块中安装模块,其中一个模块可能依赖于需要在它之前安装的其他模块(再次拓扑排序)。
  3. 另一位面试官又给了我一个问题,如下:我们有一个数据库类的表,由于一些操作被改变如下——行和列都必须以某种随机的方式混乱,我们需要检查表中的数据是否仍然一致(混杂的数据只要值没有改变就一致)。我提供了一种方法,我们可以对列执行自定义排序,然后在主键和原始表的帮助下检查行的一致性。他要求我以其他方式解决这个问题,我告诉他我们可以修改表格并成为结构数组,然后轻松检查一致性,然后他问我是否可以使用类和对象来解决它我说我可以,然后他没有要求我编写问题代码并解释类和结构之间的区别。
  4. 现在时间差不多了,所以他们问了我最后一个问题,这更像是一个开放式问题,我被要求告诉我应该在电子商务网站的结帐页面上测试所有内容(例如作为 Flipkart)。我讲了几个点,比如检查是不是两个人付钱,只剩下一件物品,物品与数据库的一致性等。最后他们问我有没有问题,我问他们在做什么,做什么实习生会继续工作。

每轮结束后,您可以向面试官提出您可能提出的任何问题。