Epam Systems Hyderabad 对初级软件工程师(2019 年毕业生)的采访
第 1 轮:(Java在线编程挑战赛)
这是一个关于Java的在线编码挑战(150 分钟)。必须使用网络摄像头才能进行此测试。共有 3 个问题:1 个简单、1 个中等和 1 个困难。如果我们已经提交了上一个问题,我们只能进入下一个问题。
问题 1:这是一个简单的问题,我们必须扩展一个抽象类,覆盖其中的 2 个方法并添加更多方法。我在 6 分钟内解决了它,尽管为此分配的时间是 40 分钟。(我猜有点太多了)
问题2:这是中等问题,这个“中等”标签误导了我。这个问题相当简单,但我没有正确阅读这个问题并且一开始编写了一个错误的解决方案。我最终在分配的 50 分钟内的 30 分钟内解决了它。如果我正确阅读了这个问题,我可以在 10 分钟内轻松解决这个问题。这是一个基于数组操作的简单临时问题。
问题 3:我在 1 小时的分配时间内用 18 分钟解决了难题,结果证明我解决这个问题的时间比中等问题要少。这是一个基于最长回文子序列的问题,过去几个月我对动态编程的深入练习帮助我轻松通过了所有测试用例。
总的来说,我花了大约 50 分钟完成测试并获得 100/100 分。我觉得我有很好的机会晋级第 2 轮,我最终做到了,并被要求在海得拉巴的 MLR 理工学院进行进一步的轮次。我的大学只有 2 名学生有资格进入下一轮,我很高兴能成为其中的一员。
第 2 轮:(Java编码挑战赛)
本轮包含 11 道 20 分的 MCQ 问题,基于Java、OOPS、C++、DBMS、网络和操作系统。还有 2 道Java编码问题,其中一道中等题,一道难题。该测试的总时间为 2 小时。这一轮的截止分数是 40/100。分数低于 40 分的学生被要求离开,而 40 分以上的学生则被要求留在原地继续参加下一轮。我在 4 分钟内解决了中等问题,困难问题需要解决正则表达式的知识。从给定的字符串中,我必须弄清楚它是 IPV4 地址还是 IPV6 地址,或者两者都不是。我不知道正则表达式,但我仍然找到了解决它的方法,通过了除 2 之外的所有测试用例。我在那个问题上得分 34/50。我没有再尝试,因为我知道我已经获得了下一轮的资格,因为我已经为上一个问题获得了 30 分。我最终得到了 75.2/100 分,考虑到其他学生的表现,后来证明这个分数非常出色,但老实说,我觉得我应该做得更好。 150 多名学生中的 37 名学生(针对该特定中心)通过了第 2 轮并被要求去吃午饭。
第三轮:(小组讨论)
接下来是小组讨论环节。实际上这很有趣,因为我们有机会认识对方,并且在比赛结束后交了几个朋友。我们得到了一个地球将在接下来的 15 分钟内被摧毁的情况。我们中只有 3 个人可以生存,我们必须决定谁 3 将成为幸运/不幸的人。这一轮没有人被淘汰,我们被要求进行技术轮。
第四轮:(技术面试)
这是一个艰苦的 40 分钟到 1 小时的面试会议,小组中只有一名成员。但是我已经在 TCS 有过面试经验,因此我并没有被吓倒,保持冷静。
采访者:好的,那么 Riddhi 你来自加尔各答?
我:是的,先生。
采访者:很好,其实我喜欢孟加拉人,因为他们很勤奋。
我:不是真的先生。我认为我们是你见过的最懒惰的人。
面试官:哈哈,好吧,让我们开始提问吧。这将是一个快速射击回合,您必须非常快速地回答。那么你准备好了吗?
我:是的,先生。
面试官:什么是字符串不变性?
我:解释
面试官:什么是字符串池化?
我:对不起,先生,我不知道。 (后来我发现我知道这个概念但不知道它被称为字符串池。)
面试官:写一段代码来演示动态方法分派。
我:做过
面试官:什么是抽象类?
我:告诉。
面试官:可以覆盖静态、私有、最终方法吗?
我:没有,先生。然而,覆盖静态方法不会给出任何编译时错误,但其他 2 会。
面试官:好。接口和抽象类有什么区别?
我:告诉。
采访者:那么 Riddhi,你将如何在Java中实现多重继承?
我:在界面的帮助下,先生。一个接口可以实现和扩展多个接口。
面试官:什么是静态类?
我:告诉
面试官:内部类和嵌套类有什么区别?
我:告诉。 (他现在似乎对我很满意)
面试官:解释final类,final方法。
我:做过
面试官:什么是final field,static field。给我它的应用程序
我:做过
面试官:什么是单例类。写一段代码来解释它是如何工作的。
我:写的
面试官:什么时候可以覆盖 Object 类的 clone 方法。
我:先生,只有当该类实现 Cloneable 时,这是一个标记接口。只有当出现浅拷贝问题时,我们才应该这样做。
采访者:是哇,概念到pura clear hain tumhara!
我:谢谢先生。 (得到面试官的称赞可能是有史以来最好的事情。我的神经得到了解决。但是下一个问题……)
面试官:什么是可扩展框架?
我:(相信我,我还没有找到这个问题的答案)。
面试官:记住,如果别人回答这个问题,你就走了!
我:(被拉回地球,我的信心受到打击)
面试官:好的,那你说说为什么Java是平台无关的?
我:告诉
面试官:我们可以在一个类中有多个构造函数吗?如何实施?
我:是的,先生,通过构造函数重载。
采访者:你知道super和this吗?
我:是的,先生并解释了。
面试官:String Builder 和 String Buffer 有什么区别?
我:缓冲区是线程安全的先生,但另一个不是。
面试官: == 和 .equals() 有什么区别?
我:告诉
面试官:好的,给我解释一下 Hash-map 在Java中的内部工作原理。
我:使用单独的链接方法和使用桶数组彻底解释了他。也被问了很多问题。
采访者:您使用了链表,我们可以使用其他更好的数据结构吗?
我:先生可能是平衡的 BST。
采访者:是的,在Java 5 之前他们使用的是链表,但现在他们使用的是平衡 BST。
我:点头。
面试官:嗯,Riddhi,你是我遇到的第一个能真正回答这个问题的候选人。没有人可以。所以你做得很好并且有很大的机会。不要把它扔掉。
我:当然,先生会尽我所能。 (重拾信心)
面试官:好的,Riddhi 现在让我们测试一下你解决问题的能力。你在第二轮中得了 75 分。哇,那太棒了。让我们看看你在这里是怎么做的。让我们开始?
我:是的,先生。
面试官:我有一个未排序的数组。我希望您从该数组中返回一对 2 数字,使得总和等于 x。以最有效的方式为我做这件事。告诉我方法。
我:先生,可以通过运行两个循环并一一检查所有对的组合来实现 O(N^2) 的方法。
面试官:我说的是有效的解决方案!
我:给我2分钟先生……(思考,思考……。几秒钟后)好的,我明白了先生。我将在 Nlogn 中完成。我将首先对数组进行排序,然后对于 a[i] 的每个值,将在数组中应用二进制搜索来查找数组中是否存在 xa[i]。如果找到我就完成了。对于每次迭代,我都会做登录工作。
面试官:很好,会起作用的。转到下一个问题。
假设我有一个由 0 和 1 组成的数组,并且它们没有排序。我怎样才能以有效的方式对它们进行排序?
我:先生,我将使用两个指针方法在 O(n) 和一次遍历中完成它。
面试官:你将如何检测链表中的循环?
我:将保留一个布尔数组,如果我访问一个循环,则将其标记为已访问……。
采访者:(打断我)我不想浪费多余的空间。
我:好的,让我再试一次,先生……
采访者:这里用两个指针怎么样?
我:好的,先生,我知道了。 (用两个指针向他解释了我的方法)。
采访者:你将如何只打印一棵树的左视图?
我:先生使用级别顺序遍历,并将始终打印队列中的第一个元素。
面试官:你如何找到字符串中第一个不重复的字符?
我:用哈希图向他解释了我的逻辑。
面试官:如何通过最短路径从矩阵中的 (0, 0) 位置到达 (n-1, n-1) 位置。
我:先生,我将使用 BFS。
采访者:如果费用不同怎么办?
我:然后将使用动态编程,因为 BFS 仅适用于单位值。我们将使用最小成本路径算法。
面试官:太好了。现在假设我有一个分散的 1 和 0 的矩阵。 1 的簇形成一个岛。你将如何找到这样的岛屿的数量?
我:先生,连接组件的数量将是答案。
采访者:你会怎么找到它?
我:先生,我将多次使用 BFS 或 DFS,直到我访问了所有节点。 (之后向他解释了整个方法,他似乎很满意)
采访者:好的,让我们继续解谜吧。你喜欢解决它们吗?
我:是的,先生。(虽然当时我不是。我很确定你读到这里很无聊,而我是真正经历了一整天的人。我没有心情解决难题)
采访者:有8个球。其中之一更轻。使用最小称量找到较轻的那个。
我:3先生。 (虽然答案是 2)
采访者:好的,Riddhi,我说完了。谢谢你的时间。
我:谢谢先生。
我通过了技术回合并进行了另一轮(HR),持续了大约 30 分钟。然后我们中的 5 个人被带到一个房间,我们被告知在成功清除所有回合后我们已入围。然而,他们无法确认我们的报价,因为他们必须访问其他中心,并将接收来自印度各地的总共 200 名候选人。
这是一次很棒的经历,我第一次感觉到我对竞争性编码的热情在很大程度上帮助我破解了编码和技术回合。等待结果。手指交叉。