DE Shaw 于 2021 年 7 月在我所在的学院举办了 QTE 实习生职位(2 个月)的校内招聘活动。
选拔过程分为三轮:
第 1 轮(技术测试 – HackerRank 上的 95 分钟):本次测试共有三个部分。
- 第一部分由 14 个简单到中等难度的 Aptitude MCQ 组成,需要在 28 分钟内完成。
- 第二部分由 12 个与查找 C++ 代码逻辑错误、猜测代码输出问题、DBMS、SQL 和相关概念相关的技术 MCQ 组成,需要在 17 分钟内完成。
- 第三个是编码部分,有两个编码问题,第一和第二个问题分别为20分钟和30分钟。这两个问题是: (i) 给定一个由 n 个整数组成的数组,您可以将该数组划分为每个包含 k 个元素的部分(n 可被 k 整除)。每个部分的分数是该部分元素的乘积。找出您可以达到的所有部分的最大分数总和。 (Greedy) (ii) 假设您有三个项目 A、B 和 C,您需要将它们按特定顺序排列,以便没有三个连续的相同项目。给定 n 个形式为 (a, b, c) 的查询,其中 a、b 和 c 是您拥有的 A、B 和 C 项的数量,找出您可以订购的 A、B 和 C 项的最大数量通过遵循上述约束。 (数学,约束很低)
第二轮(技术面试1-60分钟Hacker Rank Code Pair):有两个面试官,都是自我介绍,并介绍了他们在公司的工作。在这之后,他们要求我介绍。所问问题的摘要是:
- https://www.geeksforgeeks.org/maximum-profit-by-buying-and- sell-a-share-at-most-twice/。他让我首先解释我的方法,当他对它感到满意时,让我为此编写代码并在两个测试用例上检查它。
- 问了两个谜题: (i) 你家和办公室之间有两个交通灯。从你家到办公室,你停了两次,但从办公室回家,你只停了一次。鉴于无论何时遇到交通信号灯都是红色的,这种情况怎么可能。他让我正确地画出并解释我的解决方案。 (提示:当你需要左转时,你不需要在红绿灯前停下来)。 (ii) 有一栋 100 层的建筑,你有一个鸡蛋。您需要找到鸡蛋掉落时破裂的最低楼层。 (唯一的解决方案是我们从最低层开始扔鸡蛋并向上直到它破裂,这无法进一步优化,因为我们只有一个鸡蛋)。
- 给定一个链表和一个节点,你将如何从链表中删除该节点?当我有一个指向链表开头的指针时以及当我只有指向要删除的节点的指针时,他让我解释我的方法。
- 可以使用哪种数据结构来实现LRU Cache。
- 给定一个整数 n,您可以任意次数地执行以下两个操作:(i) 将 n 减 1 或 (ii) 将 n 除以除 self 之外的任何因子。找出将 n 转换为 0 的最少操作次数。
第 3 轮(HackerRank Code Pair 的技术面试第 2-60 轮):再次有两个面试官。他们首先询问我的介绍和我的抱负,以及它如何与他们提供的 QTE 实习生职位保持一致。其他问题的总结是:
- https://leetcode.com/problems/two-sum-ii-input-array-is-sorted/。他想要 O(n) 时间和 O(1) 空间复杂度的两点解决方案,并在我解释完我的方法后让我编写代码,并让我自己检查不同测试用例上的代码。
- https://www.geeksforgeeks.org/next-greater-element/。他让我在两个测试用例上试运行我的堆栈方法。
- https://www.geeksforgeeks.org/sliding-window-maximum-maximum-of-all-subarrays-of-size-k/。我给出了一个多集方法,但他想要一个更快的方法,并给了我一个使用堆栈的提示。
- 给定一棵二叉树,首先打印其左侧视图,然后打印其右侧视图。只打印一次根节点。他只是想要方法和时间复杂度,并要求我试运行我的方法并详细解释两个测试用例。
- 您将获得一个函数getManager(int id),它返回传递了 id 的员工的经理。您需要实现一个函数getCManager(int id1, int id2) ,它应该返回传递 id 的两个员工的最低公共经理。您没有提供实际的树结构,只有 getManager函数。我的方法是我们可以为这两个员工制作一个伪树并对其执行 LCA,但他想要一个更好的方法。接下来,我建议使用 unordered_set 来存储其中一名员工的所有经理,然后检查另一名员工的连续经理是否在集合中。他对这种方法很满意,并问我如果我必须测试一个已经实现的 getCManager函数,我会检查哪些测试用例,并在我忘记提及一两个测试用例时帮助我。
判决 – 选择
每轮结束后,您可以向面试官提出您可能遇到的任何问题。
祝一切顺利!