Indeed 实习面试经验 2022
Indeed 来到校园招聘 IIT Mandi 的软件开发实习生。
第一轮:在线编码测试:
这是一个长达 60 分钟的编码测试。该平台是 Hackerrank。总共有2个问题。
- 作业调度中的最大利润 https://leetcode.com/problems/maximum-profit-in-job-scheduling/
- 我使用地图+ DP解决了它。编写这个代码大约需要 35 分钟。(比预期的要长)。
- 输入以二维向量(图的加权边)、起始节点和结束节点的形式给出。我需要返回一个向量,其中向量的大小是边数,每个值表示该边是否属于从起始节点到结束节点的任何最短路径。
- 这个问题并没有那么简单。但总体思路非常相似。解决方案很简单:只需使用 Dijkstra 计算从起始节点到每个节点以及结束节点到每个节点的最短路径。但是我不相信我能够在剩余的时间内没有错误地实施它。所以我采用了部分解决方案并实现了 Floyd Warshall,这只是实现中的一个循环,复杂性是立方的。它通过了 7/14 的测试。
- 第二天结果出来了,5名候选人入围了第二轮和第三轮。我是其中之一。
第 2 轮: F2F 面试轮(变焦)60 分钟
- 他开始介绍自己,然后我介绍了自己。
- 只问了一个问题。面试官给我看了一张定向加权树的图像。他让我将所有叶子中路径最短的叶子节点返回到根节点。这只是一个简单的 DFS。我首先给了他一个非常糟糕的蛮力方法。在此之后,我解释了我的主要方法并对其进行了编码。他就我写的代码问了几个问题。他发现了一个错误,然后我修复了它。
- 在此之后,他在树中添加了一些边并将其转换为有向图。他询问当前的代码是否可以完成这项工作,复杂性将如何变化。新方法将是什么?首先我告诉他 Dijkstra 解决方案,然后我解释了 Dijkstra 算法。
一个小时过去了,面试结束了。面试的水平很简单。但主要关注点是对话,我是如何思考并找到解决方案的。
第三轮: F2F面试轮(放大)70分钟
- 与上一轮类似,这一轮也只有一个问题。我得到了一个这样的职位名称数组 - ['软件工程师','游泳老师','瑜伽教练','高级经理'等]
- 该数组的长度约为 100 万(10^6)。现在我将被问到数百万个查询。在每个查询中,我将得到一个字符串形式的句子,我需要返回该数组指示或需要哪个作业。例如——“我们需要一个有才华的软件开发人员”。现在从给定的工作中,我需要返回一个在这个给定句子中到达次数最多的工作。这个问题的答案是——“软件工程师”。每个查询中的单词数限制为 10。
- 我首先告诉他,对于每个查询,我将迭代职位名称数组并保持计数并返回最大值。这个复杂度大约是 10^13。那效率不高,所以我转向了第二种方法。
- 在这种方法中,我将预处理职位数组。预处理是这样的——我将从作业字符串中提取每个单词,对于这些单词,我将在地图中存储一个向量。此向量将存储标题中包含此单词的所有作业的索引。
- 现在在查询部分,我将提取给定句子中的所有单词。在预处理的地图中找到这些词,迭代为该词存储的向量并增加另一个地图中职位的计数,并保持最大计数和相应的职位。最后,问题完成了,我编写了代码。
- 在我实施的时候,由于连接不好,我无法听面试官的话。但他能够听我说话并看到我的代码。所以我在实现中保留了非常专业的变量,因为无法沟通,所以我尽量把每一个小细节都解释清楚。我也在评论代码,大部分行都被评论了。
- 代码超过 120 行,他似乎对解决方案非常满意。最后,他问了我一个关于碰撞的开放式问题。我向他解释了我的方法。
2轮面试后,3名候选人进入第4轮。
第 4 轮: F2F 面试轮(变焦)70 分钟
他展示了一幅图像。他讨论了图表。最初,我不了解图表的作用,但后来证明图表非常有用。
- 问题陈述是这样的。一家公司有工作,工作会定期添加和过期。总共有 2^64 个工作。每个作业都由一个作业 ID 表示,作业 ID 的当前状态可以是活动的或过期的。上图根据工作开始的年份解释了工作过期的可能性。工作越旧,工作 id 越小,工作过期的可能性就越大。现在我需要实现两种方法。在这两种方法中,我都会得到一个作业 ID 作为参数。在一种方法中,我需要返回此作业是否已过期,而另一种方法将用于使给定的作业 ID 过期。该公司只有 2 GB 的内存可供使用。我们只能在这个内存中存储大约 2^24 个长整数。
- 我与他讨论了许多方法,包括 LRU。在我理解图表之前没有任何效果。他给了我一个关于用这样的符号写作业的提示 - E - Expired Job, A-Active Job。例如——“AAEEEAEEEEAAAEE…….. 最多 2^64。我得到了解决方案。我可以通过创建一组连续的活动作业来存储作业,反之亦然。 2A 3E 1A 4E 3A 2E .....最坏的情况可能是 1A 1E 1A 1E 但这种情况永远不会发生,因为在图表中,新添加的作业更有可能处于活动状态,而旧的作业更有可能过期.因此,较小的工作 ID 情况将类似于 1000E 3A 250E 10A ……。而在更大的工作 ID 上,情况将类似于 1000A 3E 250A 10E……。
- 我们讨论了两种方法——一种通过链表,另一种通过平衡二叉搜索树。在链表中,我必须一次又一次地遍历以更改节点,因此该方法被丢弃了。现在对于 BBST,出现了 3 种类型的情况,其中节点被删除和添加。
- 之后,讨论了以下问题——所有可能发生的情况、所有数据将存储在节点中以及复杂性。
- 现在对于实施,剩下的时间很少,因为讨论时间太长了。我假设我有一个 BBST 类,只需要实现节点结构并按照我的意愿使用插入、查找、删除方法。我实现了其中一个功能,时间过去了。我很快向他解释了剩余的实现,但无法编写代码。
70分钟后,这一轮激动人心的比赛结束了。我真的很喜欢这一轮,并就这个问题集思广益。讨论真的很精彩。
半小时后,我们两人晋级HR轮。
第五轮: HR面试轮(确实平台)
- 幸运的是,这次采访没有放大,也没有出现网络问题。他非常冷静和放松。
- 他自我介绍,然后我自我介绍。我告诉他两个爱好,一个与编程有关,另一个与学术无关。我告诉他我多么喜欢解决问题,以及我如何享受第 4 轮。他问了我一些关于上一轮的问题,关于困难是什么,如果有机会我想改变什么。然后他给我介绍了公司,公司在美国有多大,公司的工作文化是什么等等。
- 之后,他向我询问了我在 B. Tech 的技术项目。我们讨论了项目背后的动机,以及我如何选择技术。其中一个项目在小组中,所以我们讨论了团队如何工作,我喜欢什么样的队友。
- 然后他问我关于我梦想中的公司。为此,我向他解释了一个理想的公司应该如何函数以及它的目标等等。
- 最后,他对问题持开放态度,我问了很多关于实习、流行病、导师等等的问题。我研究了 Indeed 和他们在海得拉巴的办公室。
30分钟后,本轮比赛结束。
最终,2名应聘者被选中进行为期2个月的暑期实习。