CodeNation 面试经验(全职 SDE,校外)
我通过一家名为 CareerSocially 的第三方公司与 CodeNation 招聘的人建立了联系,该公司通过我的 LinkedIn 个人资料搜索了我。在简要讨论了工作角色和面试过程概述后,我被引导进入了面试过程。
第 1 轮(电话,简历筛选):这一轮大约 30-35 分钟,完全基于我的简历。最初我被要求描述自己,然后我们就我的简历进行了大约 10 分钟的讨论,面试官在多个主题上跳来跳去,以确保我知道我输入了什么。然后他让我挑选 3 个我的顶级项目,然后问我选择它们的理由。在那之后,我不得不再次选择其中一个,我们就构建它的方法以及如何做得更好进行了简短的讨论。采访到此结束。
第 2 轮(视频会议、数据结构和算法):这一轮大约一个小时。问我的问题是:
- 假设你得到了一个没有平行边的无向图。每个顶点代表一个城市,边是通往另一个城市的道路,具有不同的旅行时间(给定)。如果现在源顶点0 感染了冠状病毒,那么整个图被感染的最短时间是多少?
回答:我最初提出了一种动态编程方法,对于每个节点 n ,我会使用 BFS 或 DFS 首先找出它的所有前辈(与它有直接链接),并且感染 n 的最短时间将是min(xi + ti) (对于所有这样的节点 x 和边缘时间 t)。我们不能有一个不是前驱的节点,但会导致更短的路径(三角形不等式)。他似乎对逻辑感到满意,并要求我编写代码,没有任何错误。在这里,我遇到了递归关系的问题,由于时间不多了,我问他是否可以改变我的实现。他接受了这一点,我编写了一个解决方案,我从源运行Djikstra到每个节点 S 以找到最短时间,然后进行 BFS 以找出其中的最大值,这就是解决方案。 - 然后我被问到如果我可以自由地删除恰好一个边缘,我将如何修改我的解决方案以找出病毒传播所需的最长时间。我的回答是,我会一个一个地删除每一条边,然后运行之前的算法。然后他问我是否可以将任何有关边缘删除的MST属性应用于此问题,我们讨论了其中的一些(我还编写了 Kruskal 代码以证明我的知识),但我的回答是它不适用在这种情况下。他的下一个问题是关于可以进行哪些优化来加速算法。我建议搜索关节点(这将立即将答案设置为 Infinity),通过 Fibonacci Heap 实现 Djikstra 等。
- 最后我们讨论了一些标准算法的时间复杂度、最喜欢的数据结构及其使用(我选择了Trie ,这导致了关于它的效率与 HashMap、Linked Tries 等的讨论) 、我在面试中的强项等。
第三轮(视频会议,系统设计): 1小时40分钟。我有两个问题要解决,它们是:
- 在这个世界上,我们有魔方比赛,由志愿者随机洗牌,然后将其交给同时解决它的参赛者。现在,举办此类比赛的公司使用计算机生成洗牌序列,并从人群中选出志愿者。现在,这种方法有两个问题:a) 志愿者可能会弄乱序列以故意破坏竞争对手的机会,或者 b) 志愿者犯了一个诚实的错误。乍一看可能并不明显,其中一个立方体的排列略有改变。想象一下,您是一位创新者,他的任务是设计一个系统,如果与立方体一起呈现该系统,则可以就其顺序是否正确给出“是”/“否”的答案。我们不希望系统耗时或昂贵。
答:我最初建议基于计算机视觉的 ML 算法被拒绝,因为我不清楚这些算法是如何工作的。我的下一个方法是提出一种基于物联网的解决方案,该解决方案依赖于使用魔方上的传感器来检测转弯并匹配序列——这被拒绝了,因为我们无法修改行业标准魔方。我建议了一个使用谷歌助手语音匹配的协议,它只会引入新的故障点。最后,有人建议我们将使用一个固定的盒子,里面装有摄像头;志愿者将把立方体放在那里,所有面部的图像都将被拍摄,这些图像将简单地逐个像素地进行比较(没有 ML,我能够描述这一点),这应该可以工作,因为立方体中的 RGB 值非常不同。盒子足够紧凑,不会有可能干扰图像的方向问题。他对此表示同意,然后让我自己批评它,我照做了。 - 第二个问题是为以下问题创建一个类图(UML 模型):假设你有一架无人机,它的工作是播种,你将如何编写它的导航模块,以便它可以执行它的工作而不会崩溃和离开一个指定边界框?他没有给我更多信息,我不得不询问他以了解现有接口,我可用的硬件功能(例如用于获取身高,位置等),然后我们进行了结对编程讨论,因为我们都试图设计尽可能干净的界面。他特别注意我的类/方法名称、松散耦合、关注点分离等。
第 4 轮(视频会议,CEO/HR 轮):这是最短的一轮,只有 15-20 分钟。他首先解释了 CodeNation 的一般结构,然后我被问到关于我自己的一般性问题,我对 CodeNation 的期望,我可以如何帮助他们,讨论我使用编程解决现实生活中的任务的时间(我给出了一些自动化的例子我写的脚本)。之后,他问我是否有任何问题要问他,采访就这样结束了。
接到一个电话,说我第二天被选为 SDE 职位,瞧,我的录取通知书在等我! 🙂