我在 codenation 申请了为期两个月的夏季(2021 年)实习。这是一次校内实习招聘(二级大学)。
共有 4 轮,包括在线编码轮。
编码轮:测试是在黑客等级上进行的。它由基于 DSA 的 3 个问题组成。 2 相对容易,而 1 有点棘手。一些学生在编译时遇到了问题
- 从由小写英文字母组成的字符串删除 k 个字符。在所有这些可能的字符串,返回字典序最大的字符串。
- 类似问题:https://leetcode.com/problems/remove-k-digits/
- 给定两个整数数组,返回所需的最小移动次数,使得第二个数组是第一个数组的子序列。您可以一次性在第一个数组的任何索引处插入一个元素。第二个数组中的元素是不同的。两个数组最多可以有 10^5 个元素。
- 我通过首先将第二个数组的每个元素的索引存储在哈希图中来解决它。对于第一个数组中的每个元素,如果它也存在于第二个数组中,则将它在第二个数组中的索引(使用哈希图)附加到另一个列表中。这个列表的 LIS 将是我们可以在不执行任何操作的情况下匹配的最大元素的长度。第二个数组的长度——LIS 就是答案。
- 给定一个整数数组和形式为 l, r, s, t 的 x 查询。每个查询的答案是范围 [l, r] 中大小为 s 且按位和 (&) 大于 t 的子数组的数量。数组最多可以有 10^5 个元素,查询次数为 500。
- 维护从 2^0 到 2^30 的所有位计数的前缀总和,然后使用滑动窗口方法回答每个查询有助于通过所有测试用例。
所有解决至少 2.5 道题的人都将入围下一轮。 5 名候选人进入下一轮。
第 0 轮:这是一个项目讨论轮,您将被问及您的项目和深入工作。如果你精通你的项目,这是最容易通过的一轮。本轮有2名学生被拒绝。这一轮是通过电话进行的。
第 1 轮:在 DSA 轮中,我被问到了 2 个问题。面试官真的很无聊,没有互动。他甚至没有阅读问题,只是将问题粘贴到共享的谷歌文档中。这一轮是在 google meet 上进行的,我被要求在共享的 google 文档上编写代码。 (平台也取决于面试官,因为我朋友的一个面试是通过缩放电话进行的。)
- 第一个问题是,给定以下函数f,我必须定义另一个函数,给定一个数字 n,返回其质因数及其幂。
C++
long long f(long long n) {
if(n == 1 || n is a prime) {
return n;
}
else {
return any of the proper divisors of n;
}
}
- 第二个问题是:https://leetcode.com/problems/backspace-string-compare/description/
- 我应该在线性时间和恒定空间内解决它。
在一些提示的帮助下,我能够完全解决第一个问题和第二个问题。我在这一轮被拒绝了。
第二轮:我的一些被选中参加这一轮的朋友被问及那里的项目,然后给出了一个开放式问题。此轮用于检查候选人的创造性思维能力,通常由高级员工进行。
总体而言,这是一次与 codenation 进行面试的良好学习体验。只有一名学生获得了最终的实习机会。线上一轮入围后,整个过程耗时2-3天。