Arista Networks 访问了我们的校园以提供实习机会。
在线编码第一轮:
测试是在 Hackerrank 上进行的,我们给出了 3 个编码问题。
1. 将给定的键(一个字符串)插入到一个 trie 中。 (如果你知道尝试就很容易)
2. 从循环链表中去除重复元素,重复元素在链表中连续出现。这很棘手,因为最后一个元素可能等于第一个元素,并且因为链表是循环的。
3. 找出给定的 n 叉树(具有任意数量子树的树)的从根到叶节点的最大和。
第一和第二个问题允许用 C、C++ 编码,但只允许一种语言来解决第二个问题——C 。
给Java用户的提示:学习用 C、C++ 编码,因为 Arista 在编码轮次中通常只允许这两种。
大约 13 人从编码轮次中入围。编码问题很简单,所以只有那些解决了所有 3 个问题的人才能入围。
第二轮(电话,面对面):
在 13 名学生中,有 6 人接受了 FTF 面试,其余的他们接受了电话面试。我也接受了电话采访。
我接到了 Arista 班戈洛中心的电话,他先是介绍了自己,然后让我做自我介绍。然后他给了我codeshare.io的网页链接,这是一个多人可以同时编写代码的平台,更改会出现在所有连接到它的人的编辑器上。
首先,他问了一些关于我的编码回合问题3的代码的问题。他指出了一些代码没有给出正确答案的测试用例(虽然它们没有包含在问题的系统测试用例中)并要求我进行必要的更改。然后他让我使用迭代方法来解决相同的问题问题而不是递归。我为它编写了代码。
接下来,他问了一些关于尝试的问题。
你将如何优化 trie 中的空间复杂度?
我们如何检查给定的键是否存在于 trie 中,而无需达到 trie 的深度,即迭代次数较少?
他期望在每个节点类型的解决方案中维护一个链表。我使用压缩的 trie 来回答它,它通常用于后缀尝试(尽管他并没有期望太多)。
基本上问题是,如果我们得到一个大 IP 地址,我们如何以较少的计算次数对特里树执行操作。我告诉他,我们甚至可以通过转换成不同的基数(可能是更大的基数)来修改地址,而不是修改特里树——这意味着缩短的等效地址。
然后他问我电话簿的问题。我们如何在我们的手机中实现这个系统来维护联系人列表,即电话号码和人名?
问题的解决方案是使用特里树,以便对于字符串的每个前缀,我们可以轻松找到与之关联的名称和数字。
我们如何实现维护我们经常联系的人员列表的常用列表?
解决方案是使用堆并在需要时弹出最常用的 k 个联系人。堆,因为更新和插入操作很快。
然后就我的学术项目进行了一些讨论。我做了一个关于云计算的项目,这让我在面试中获得了一些优势,因为 Arista 是一家网络公司。
最后他让我提交过去学期的成绩单,面试就结束了。
6个人从我们学院被选中进行为期2个月的暑期实习,我就是其中之一🙂