📌  相关文章
📜  软件开发实习生的 Flipkart 面试经验

📅  最后修改于: 2021-11-10 06:14:14             🧑  作者: Mango

第 1 轮(编码测试):这是在有抱负的头脑(后来也用于面试)平台上进行的长达 90 分钟的编码测试,包括 3 个难度越来越大的编码问题。

  • 问题 1(基本字符串匹配):我们得到两个字符串,’text’ 和 ‘name’,我们需要计算字符串’name’ 在 ‘text’ 中的实例数。匹配需要在不区分大小写的情况下完成。没有给出字符串的长度,所以我首先尝试了一种适用于所有测试用例的基本蛮力。但是,使用滚动散列或 KMP 算法可以实现更有效的解决方案。

    链接: https : //www.geeksforgeeks.org/frequency-substring-string/

  • 问题 2(两个指针):给定一个数字列表,合并相邻元素以形成可能的最大长度回文。这个问题的理由与链接中给出的理由相似。我们只需要同时从左和右迭代,并将两者中较小的与下一个元素合并。

    链接: https : //www.geeksforgeeks.org/find-minimum-number-of-merge-operations-to-make-an-array-palindrome/

  • 问题 3(高级字符串匹配):给定一个字符串“drawstring”和一个字符串数组“coupons”,我们需要找出有多少优惠券作为子串与容差为 ‘k’ 个字符的抽绳匹配。此外,几乎没有可以对优惠券字符串以形成匹配,包括将 ‘a’ 更改为 ‘o’ ,将 ‘t’ 更改为 ‘l’ 以及删除优惠券字符串中的任何一个字符。我尝试使用 brute 生成包含一个已删除字符的字符串,然后使用递归来检查包含所有条件的匹配项。我能够通过 20/21 测试用例。

14名学生被选中进行面试。我认为测试用例是根据测试用例的总数而不是完全解决的问题数量进行加权和选择的。

第二轮(技术面试 1 DSA – 45 分钟):简单介绍后,他直接跳到解决问题的问题上。

  • 问题 1(前缀总和):这只是一个热身问题,我只是被要求在给定的整数数组中找到各种子数组的总和。我用前缀 sum 很快地回答了它,他似乎很满意,没有要求编码。

    链接: https : //www.geeksforgeeks.org/prefix-sum-array-implementation-applications-competitive-programming/

  • 问题 2(两个指针):找到可以使用 x 轴上的垂直线形成的最大容器的通用问题,其高度在给定的整数数组中定义。我被要求为此编写一个函数代码。

    链接:https://www.geeksforgeeks.org/container-with-most-water/

  • 问题 3(数组操作):给定两个数组,一个带有字母表,另一个带有这些字母表的索引。我需要根据相应的索引就地排列字母(不使用任何额外的空间)。我定义了一个循环不变量,仅当使用交换函数固定第 i 个索引时才向前移动。然后,他扩展了相同的问题,在没有任何额外空间的情况下重复相同的过程“k”次。基本上,他希望我使用一些技术,以便我可以在数组中的同一位置存储多个索引。由于索引的值将保持在 1 到 n 的范围内,因此我将索引存储为 0*n+idx、1*n+idx、2*n+idx 等,并使用 %n 操作提取它们。我被要求为此编写一个伪代码。

面试官非常乐于助人和冷静。他在整个采访过程中都支持我,最后还给了我一些人生建议。除了代码,我还被要求解释所有问题的时间复杂度。

8名学生进入下一轮。

第 3 轮(技术面试 2 DSA – 45 分钟):与上次面试类似,从简要介绍开始,然后转向解决问题。

  • 问题 1(博弈策略):给定一个整数数组,我可以在一次移动中从左侧或右侧选择元素,并且需要在给定的“k”步中最大化我的总和。乍一看,这看起来像是一个 DP 问题,我向他解释了基于三个变量定义 DP 状态的解决方案。时间复杂度变为 O(n*n*k),他问我是否可以做得更好。仔细观察,这个问题要简单得多,我们只需要在 k 个元素的窗口中找到元素的最大总和,它要么在开头,要么在结尾,或者在开头的某个部分,有些在结尾。我能够用 O(k) 的时间复杂度解决它。我被要求写代码。

    链接:https://www.geeksforgeeks.org/maximize-sum-of-k-elements-in-array-by-taking-only-corner-elements/

  • 问题 2(单词数组中的回文对):问题与链接中给出的问题完全相同。我尝试了蛮力检查每一对,但他想要一个更好的解决方案。经过一番挣扎,我说用trie解决它。他似乎很满意,但想知道完整的程序。我试图解释,但在他帮助我的几个部分中挣扎。然后,详细讨论了每个步骤的时间复杂度。我没有被要求为这个问题编写代码(可能是因为时间较少)。

    链接: https : //www.geeksforgeeks.org/palindrome-pair-in-an-array-of-words-or-strings/

面试官在整个面试过程中再次非常有帮助,并迫使我朝着特定的方向思考。他想知道我在想什么的细节。

最后一轮选拔了 5 名学生。

第 4 轮(招聘经理面试安排为 30 分钟,但持续了 55 分钟):这一轮由 Flipkart 的一名高级开发人员进行,是人力资源轮和技术轮的混合。简单介绍后,他问我关于我的项目。他让我详细解释其中之一。然后,有关于面临的挑战、缺点、群体问题以及其他类似问题的问题。

他问我关于大学课程中涵盖的科目。我用DSA、DBMS、OOP等基础科学回答。他询问了 DBMS 涵盖的主题,我列出了一些常见的主题。然后,他问我 DBMS 中事务的 ACID 属性以及它们是如何维护的。

他问我最喜欢的主题,我回答了 DSA。然后,他问了我一个关于链表的抽象问题。他想让我想办法优化排序链表中的搜索和插入操作。我想出了各种方法来使用二分搜索、二分搜索树来处理附加数组。但他希望我不要使用与链表一样多的额外内存。所以,我试图设计一个基于索引的解决方案(如在 B 树的帮助下的 DBMS)。然后,对此进行了长时间的讨论,他为我提供了各种方案来解决我的问题。这持续了大约 40 分钟,之后他说他没有进一步的问题。

在所有轮次结束时,面试官问我是否有任何问题要问他。随后是大约 15 分钟的关于公司的健康而热烈的讨论,我了解了有关运作、几个部门、工作完成情况以及他们面临的挑战的各种细节。

在所有的面试之后,有 4 名学生获得了实习机会,我就是其中之一。