Flipkart 于 9 月访问了我们的校园(实际上是🙂)参加校园招聘计划(2021 年的 SDE 实习班)。这个过程持续了一周,编码回合安排在星期一,面试安排在星期六,最终在星期天宣布结果。
第 1 轮(机器编码评估 90 分钟):有 3 个编程问题,如下所示。
- 给定 n 组歌手(作为一个大小为 n 的数组,其中 arr[i] 表示第 i 个组大小)和 m 个可用的麦克风,我们必须输出共享单个麦克风的最小最大组大小。一个组一次只能再分成两个组(即,在一个分区中,只能形成两个子组。此外,这些子组也可以使用相同的方法进行划分)。该方法是使用二分搜索并检查组大小的最优性。例如: input :[100, 60, 80, 40, 30] , m=9 output:40 (划分后的分组如下[40,40,20,40,20,40,40,40,30])时间复杂度:O(nlogn)
- 基于图:这个问题有 n 个节点,编号从 1 到 n 和 m 条边,目标是返回具有最大优先级总和的连通组件(为每个节点提供了一个优先级数组)。一个简单的基于 DFS 的解决方案成为可能。时间和空间:O(n)
- 给定一个数 n(也可以是负数),目标是获得具有最小量级的排列(不允许前导零)。例如:对于 901,输出应该是 109。[我通过创建一个数字数组并对排列进行排序] 时间复杂度:O(nlogn)
我解决了所有三个问题,花了大约 45 分钟,然后我提交了我的测试。[45 分钟仍然是 :)]。
12名学生入围技术面试。面试在AMCAT平台上进行。
第二轮(技术面试 1 大约 40 分钟):我向面试官打招呼,他也做了同样的事情。由于面试只安排了 30 分钟,他立即开始了编码问题。
-
第一个问题在屏幕上一闪而过,看到它我微微一笑。已经给出了一个排序数组以及要找到的目标编号,该语句是给出索引范围 [l,r] 使得该范围内的所有元素都是目标。如果目标不存在,则输出将是一个空数组 []。
例如:
Input:[5,11,15,80,80,101] Output: [3,4] (0-based)
我给出了 4 种解决问题的方法,面试官看起来非常确信。 🙂
- 一个简单的数组遍历是 O(n) 时间。
- 应用二分搜索,然后扩展第一个的两边找到了目标,但在最坏的情况下,这也可能是 O(n)。
- 分别对第一次和最后一次出现应用两次二分搜索。复杂度 O(logn+logn)。之后面试官说如果我可以访问库函数怎么办。
- 我告诉他我们可以用下界和上界来解决它。
-
然后我们来到下一个问题,给定一个只有数字 0-9 的数组,我们必须最大化数组中的桶数,条件是特定数字的所有出现都必须出现在同一个桶中。
例如:
Input: [0,0,1,1,2,1,7,8,7,9,9] Output: 4 ([0,0],[1,1,2,1],[7,8,7],[9,9])
考虑到我们存储数组中每个出现数字的第一个和最后一个索引,一个简单的 O(n) 解决方案是可能的。
-
接下来解决了另一个问题,语句:给定一棵 n 叉树,将其转换为一棵二叉树以存储在内存中,因为不可能存储一棵 n 叉树。
因此,我们必须为此实现 encode() 和 decode() 函数。最初,我的方法有点随意,但我一直在谈论它,他给了我一个微妙的提示,并给了我 30 秒的时间来找出解决方案。我使用虚拟节点的创建来接近它,因为在这个问题开始时他已经在空间和时间复杂度上免除了我的问题(我们晚了 10 分钟)。最后,他给了我一些测试用例,我的解决方案全部通过了,所以他听起来非常相信。
面试官很细心,协调得很好,在需要的时候给出指示和提示。
这是回合的结束。 7人晋级下一轮。
第 3 轮(技术面试 2 大约 37-40 分钟):这一轮以不同的方式开始,面试官首先问了我自己,让我简要描述我简历中的所有项目。我们聊了大约 10 分钟,然后他开始回答编码问题。问我是否喜欢 Graphs,我回答说这是我最喜欢的。
-
您将获得一个整数数组(使用 arr[i] 描述我们可以从第 i 个索引跳转到的数组索引)。我们被允许从当前索引移动到下一个索引或 arr[i] 如上所述。目标是确定到达最后一个索引的最少跳跃次数(遍历的边)。
我将每个索引与 arr[i] 和 (i+1) 与有向边连接起来,以对所需的图进行建模。然后,我给出了一个蛮力解决方案来生成所有路径并查看我们是否可以到达终点。他说太忙了,想让我用 BFS 而不是 DFS 来解决。我得到了提示并告诉他整个程序是如何工作的。时间复杂度:O(N) 空间复杂度:O(N) 他说要检查我对 BFS 的了解。 (不过,不需要代码 🙂 )
-
给定一个二进制矩阵(仅 0 和 1),其中所有“行”都已排序。我们要找到最大数量的零(在一行中)及其行索引。
例如:
Input: 0 0 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 1 1 1 1 1 1 1 Output:8 zeros in 4th row
我首先给出了遍历所有行和列的蛮力方法。时间复杂度:O(n*m)。他要求进一步优化它。
我给出了一个 O(n+m) 的方法。从第一行和第一列开始,我们将继续增加 col 索引,直到找到 1。当找到 1 时,更新答案并移至下一行。记住要注意边缘情况。
我被要求编写伪代码,我也很乐意这样做。
最后,面试官问我有没有什么问题要问他,我问了:
成为 Flipkart 的一员是什么感觉?什么样的项目会分配给实习生?他给出了答案,我们聊了一会儿,回合就结束了。
6 人能够进入招聘经理回合,这是最后一轮。我的面试被安排在第一个时段。我相信它会顺利进行。
第 4 轮(招聘经理轮约 25-30 分钟):这是一位高级经理参加面试,而不是前两轮。他首先向我打招呼,并询问我所在地区的 Covid19 情况、我住的地方等等。
然后他问我关于我所在的学期以及在那之前教过的科目。
现在他又要我介绍一下我自己。我简要介绍了我在计算机科学领域的旅程以及我的目标。
然后他生动地询问了我的技能和价值观(典型的人力资源问题)。我总是将这些问题与我生活中的一个轶事联系起来,继续讲述我如何失败、尝试、尽力而为、成功等等。我什至没有为一个问题做好准备,无论我说什么都很自然,这让他很印象深刻,他继续深入挖掘我告诉他的那些经历。我的 JEE 故事,学校里的爱好测验,大学里的戏剧(他甚至问我这部剧的整个故事“你不能带走”)等等。我很高兴能答应,这是一个梦想为我实现真正的人力资源回合。他说话的方式非常谦虚,四处提问,对我的所有回答都做出了很好的回应。 21 分钟后,他说他已经完成了,并问我是否有任何问题要问他。
我问了与上一轮完全相同的问题,他继续非常详细地讨论了这个问题,解释了他们目前在这些领域面临的挑战和研究范围的方方面面。
之后,我说我没有其他问题了,最后我们互相打了招呼,面试结束了。我知道我做得很好。
第二天公布结果,选了5个人实习,我就是其中之一。
我的一些建议:
- 如果你不破解面试,不要失去信心。影响它的因素有很多,你应该总是从每次经历中学到新的东西。
- 在面试前穿着正式,并确保在 D 日之前睡个好觉。
- 不要羞于在面试中说出你的心声,即使方法不明确,如果你与他互动并保持问题的目的,面试官也会想要帮助你。
- 确保您非常准确地理解问题,提出问题,重复,不要感到羞耻。您也可以要求此人为您运行测试用例。
- 只有在达成一致并完全优化后才开始编写代码。一次性完成,检查任何错误并调试它们。
- 始终保持微笑,不要试图伪造任何东西。那里的那些人,是了解你对这个角色的态度的大师。
- 最后,对于 HR 回合,请讲述您生活中表现出面试官想了解的品质的例子。他很容易以这种方式与他们联系,是的,尽量保持自然。
去摇滚舞台🙂(因为你应得的!)