Oracle 面试体验 |校园应用工程师/服务器技术工程师
第一轮:MCQ测试轮(在线)
没有令我惊讶的编码问题。整个测试分为4个部分。
- 资质:
数学(概率,基于方程),
推理(基本谜题),
观察(您只需通过观察和观察来判断上面给出的 10×3 表中存在 4 个选项中的哪一个),
流程图(给出了给定情况的流程图,一些条件(标准菱形框)是空的。你必须告诉哪个选项适合哪个条件框。同一个流程图上有3,4个问题,所以好好学习该图表可以帮助您回答所有相关问题)。 - 基于编码输出:
大多数问题都是基于给定代码片段的预测输出(树中有很多问题(任何子主题)),
一些基于复杂性的问题。 - 核心项目:
来自操作系统、DBMS、OOPS 的基本(大多数)和棘手(少数)问题。 - 英语理解:
看不见的基于段落的问题,
基于语法的问题,
以有意义的顺序排列句子,
最好的基于同义词替换的问题。
第一轮涉及很多练习和运气。你不需要特别练习 Aptitude 部分,除非你的基础当然不是。但是彻底而细致地学习这些科目很重要,因为它也会在接下来的几轮中有所帮助。记住这些概念是没有好处的,除非你能对它们有感觉,以便在需要时可以在实际情况中使用它们。树是第一轮第二部分中问题最多的主题(遍历、AVL 树、插入、删除、给定节点的高度、给定高度的总节点)。
在 250 名学生中,有 50 人入围了第二轮,另外 15,20 人被保留在候补名单中(我认为只有当主名单上的人表现不佳时,他们才会有机会,自从他们在主名单中入围了近 50 个)。
—————————————————————————————
第二轮:技术轮(在线)
我所有的朋友都被问到关于 OOP 概念、操作系统概念、链表问题(遍历、反转)、排序算法(如果他们愿意,他们也会要求编码)、谜题(这里是最常见的谜题)的基本问题)。
但不幸的是,我只被问到一个编码问题。
首先,他开始介绍自己。并让我自我介绍。然后让我解释我最喜欢的项目。 (始终为您的项目做好充分准备。不要写(在您的简历中)或说(在面试期间)您不知道的任何事情。并且始终清楚您在项目中的贡献,因为他们往往会问什么任务是分配给你)。然后他给我发了一个codepair.com的会话链接。对这个问题进行了完整的讨论。从头脑风暴到编码和运行代码。
问题:给出了一个字符串。您需要以最少数量的分区对字符串进行分区,以便特定分区中出现的字符不会出现在任何其他分区中。然后将返回分区的长度。
例如:
输入:S = “ababcbacadefegdehijhklij”
解释:
所需的分区是“ababcbaca”、“defegde”、“hijhklij”。这些是分区,因此每个字母最多出现在一个部分中。
输出:[9, 7, 8]
我的方法会在文末提到。
由于面试是在 Zoom 会议(分组会议室)中在线进行的,所以我不知道有多少人被列入候选名单。(但也有很多人在这一轮之后被淘汰)。
所以关键是与你的面试官沟通,并有信心回答一些问题。如果您发现您的方法有任何问题,请告诉他们并尝试重新考虑再次要求一点时间。对于编码问题,尝试试运行你的方法,看看它们是否正确。不断告诉面试官你在想什么,为什么要写一段代码。
——————————————————————————————
第三轮:技术轮(线上)
面试官首先介绍了自己,并要求我也这样做。然后他问我最喜欢/最近的项目。所以我告诉他我的基于网络的项目。然后他开始了同样的讨论。我们再次转向代码对。在那里,他给了我一份与我的项目相关的问题陈述。我在我的项目中使用了一个名为 Wireshark 的应用程序,所以他让我设计一个类似于 Wireshark 的应用程序,并带有一些定制的功能。他还问我适合哪种语言。
这一轮是 1 小时,在这 1 小时内,我必须使用我所有的网络、操作系统、数据结构、系统设计、分布式系统的基础知识。在我看来,提到多线程是一个很大的卖点。他还想知道我将特别使用哪种数据结构以及为什么。只需清楚基础知识即可。(例如,为什么矢量而不是数组是有益的)。还有一个关于线程池的讨论(他希望我将其与对象池相关联,即创建足够的向量并将它们放入池中,并在任务到达时使用并将向量对象释放回池。他问这个的主要动机是因为他不想我每次都动态分配内存)。
所以,简而言之,当提到一个你最喜欢的项目/主题时,请确保你真的比其他人更深入地挖掘那个主题/项目。并且您对其他 CORE CS 概念(尤其是线程)有很好的了解。
面试官非常乐于助人。无论我在哪里卡住,我都会请他给我指点方向,幸运的是他会,这足以让我掌握他想让我去的地方。发声并寻求帮助很重要(但不是每次都如此)。
你也可以一直问面试官你是否走对了方向。
———————————————————————————————
第四轮:人力资源轮(在线)
好吧,这应该是最寒冷的一轮。这也很寒冷+具有挑战性。
面试官非常友好和礼貌。我们从相同的介绍开始。然后他问我的其他回合怎么样。我照原样告诉他。他有兴趣了解我在这些回合中发现的挑战。
然后他问我最喜欢的主题,我告诉他是分布式系统(没有多少人敢于选择这个主题)XD
然后他开始问我 DS 的基本概念。我能够回答所有问题,因为我真的很喜欢这个主题,所以我对此了解很多。他似乎很高兴。
然后我们转向一些管理问题。比如你什么时候面临生活中的挑战,你是如何应对的。告诉他们一个好故事,每个人都喜欢一个好故事(但不要太肤浅XD)。
这是一个非常反复的讨论,我们俩似乎都很享受。
——————————————————————————————
我对第一轮技术编码问题的处理方法:
面试官首先让我解释一下我的方法。我第一次尝试就错了。但他没有告诉我这些。在解释了我的方法之后,我开始在他提供给我的示例示例上运行我的方法。我很快发现我的方法是错误的。我要求重新思考片刻,然后当我解释我的另一种方法时,他说“是的”。
因此,发声并让面试官知道您的想法非常重要。
首先,我认为计算字符的频率会以某种方式帮助我。但是干跑之后我发现它是不够的。所以然后在查看测试用例时,我知道我需要知道字符的第一次出现和最后一次出现是什么,因为我制作的任何分区都必须在其中包含字符的第一次和最后一次出现(包括端点) .我仍然不知道如何继续前进。所以我所做的是我开始写下每个字符的范围,即它们在字符串中的第一次和最后一次出现(基于 0 的索引)。然后在写这些的时候,我觉得每个字符跨度都在形成一种间隔。我已经在 leetcode、interviewbit 上做了一些基于区间合并的问题,因此我现在知道如何进行了。
所以我将所有字符的第一次和最后一次出现存储在一个映射中,这样键是字符,值是包含第一次和最后一次出现的对。 //
现在我遍历了字符串,并做了 3 个案例。
- 如果被遍历的字符的区间完全在当前区间内,那么什么都不做,继续进行,因为分区显然是由已经更大的当前区间决定的。
- 如果被遍历的字符的区间完全在当前区间之外(通常它会紧邻当前区间,即如果当前区间是从索引 [2,6] 中说的,那么新区间将为 [7,x]。在这种情况下,存储上一个间隔的长度并将当前索引标记为新间隔的开始。
- 如果被遍历的字符的区间部分在当前区间内,就像当前区间是从索引 [2,6] 中说的,那么新区间的起点将在 [3,5] 之间的某个位置,而终点将在[7,x]。在这种情况下,只更新当前区间的端点,因为这个新字符可以增加当前区间的长度。
做区间合并题将帮助你清楚地理解这个概念。
————————————————————————————————————————
判决:被选为服务器技术工程师。
特别感谢 GeeksForGeeks。