第一轮:
第一轮是在黑客平台上进行的。共有3个问题,我们有75分钟的时间来解决所有问题。我记得其中两个。
一个问题是,给定两个字符串str1和str2,必须找到str1中包含所有str2字符的最小循环子字符串的长度。例如,给定字符串“hackerrank”和“kh”,答案应该是2(而不是4,因为允许使用循环子字符串)。预期时间复杂度O(n)。这是这个问题的一个简单变体—— https://www.geeksforgeeks.org/find-the-smallest-window-in-a-string-containing-all-characters-of-another-string/
第二个问题——给定一个未排序的数组,求出乘积等于给定数k的无序三元组数。预期时间复杂度O(nlogn)。你可以在这里找到问题—— https://www.geeksforgeeks.org/count-number-of-triplets-with-product-equal-to-given-number-set-2/ .
你需要解决至少两个问题才能入围。在我的校园里坐着的80人中,有6人进入了下一轮的候选名单。
第二轮:
这是一轮持续约30分钟的电话采访。面试官看了我的简历,让我描述一下我最具挑战性的工作。他问了很多关于我实习的问题。这些问题非常深入,与我的工作/项目领域相关。
小贴士——仔细填写你的简历。描述一个你最有信心的项目/工作经历。记住,与简历相关的问题不仅与实际工作有关,还将考验你的领域知识。
第三轮:
这是一轮持续约1小时的Skype采访。这次采访测试了我的数据结构和算法基础。他给我出了两道题,让我在collabedit上写代码。通用域名格式。
第一个问题是克隆一个带有下一个随机指针的链表—— https://www.geeksforgeeks.org/a-linked-list-with-next-and-arbit-pointer/
第二个问题是箱子堆放问题的一个变体—— https://www.geeksforgeeks.org/box-stacking-problem-dp-22/ .他让问题变得简单了一点,让我用信封代替盒子。所以在我的例子中,只有两个维度(长度和宽度)。
面试官非常友好,每次我遇到困难时,他都会提供不多但足够的提示。而且,面试官很可能会不完整地描述问题,所以在做出任何假设之前,先和他/她把一切都弄清楚。
小贴士——在找到最好的解决方案之前,与面试官讨论所有的解决方案。首先讨论你的方法,然后编写代码。您需要编写完全没有bug的代码。必要时写评论。
第四轮:
这也是一个持续约一小时的Skype回合。这主要是一场抽象的头脑风暴。首先,他让我描述一个我被困在某件事上(并最终克服它)的时刻。这引发了对我的实习和我在那里所做工作的深入讨论。他没有问任何问题,但允许我详细描述我的工作。由于我的大多数项目都基于机器学习/深度学习,他问我:“如果我是一名为Facebook工作的数据科学家,能够访问Facebook的所有数据,我会怎么做?”(是的,他说了完全一样的话)。随后,经过大约40分钟的讨论,我从用户和Facebook本身的角度提出了许多有用的想法和可能性。他对任何想法的实际实施都不感兴趣,但想看看我是如何思考和改进自己的想法的。
小贴士——对于这样的开放式问题,一定要陈述你的想法背后的假设和理由。在面试官之前找出你想法中的优点/缺点。
第五轮:
这是一次与首席执行官的人力资源对话,持续了大约25分钟。对我来说,这是最有趣的一轮。首先,他问了一些正常的问题,比如,描述你所面临的困难情况,描述你最感兴趣的项目等等。当他知道我会弹吉他时,他问了我一个设计问题——你如何在歌曲中发现拉格,这导致了一场技术性较低、以音乐为基础的讨论。最后他问我为什么想加入CodeNation。采访结束时,我问了他两个关于编码的问题。
以下两条建议最为重要——
- 相信自己。
- 保持冷静,做好准备。
我收到了邀请。