📌  相关文章
📜  Cloudera Inc. 面试经历 |软件工程师(实习+全职/校园)

📅  最后修改于: 2022-05-13 01:58:26.010000             🧑  作者: Mango

Cloudera Inc. 面试经历 |软件工程师(实习+全职/校园)

关于公司

Cloudera Inc. 是一家总部位于美国的大数据解决方案公司(成立于 2008 年),提供在开源 Hadoop-Apache 框架上运行的企业软件,并通过集成的 ML 和 AI 框架简化信息检索和数据挖掘流程。它是基于企业 Hadoop-Apache 框架的发行版的领先供应商,最近与 Hortonworks 合并,后者是合并前的最大竞争对手。

工作地点:班加罗尔(印度)
面试地点:Manipal Institute of Technology, Manipal(印度)

概括:

总共有 5 轮,第一轮是基于计算机的在线测试,随后是 4 轮对入围学生的技术、管理和人力资源面试。我通过了所有回合并最终接受了offer,这是我的面试经历。为即将到来的实习机会向读者提供了很多好运,因为运气确实在实习面试中发挥了很小但至关重要的作用。

第一轮:在线测试

与许多其他公司不同,Cloudera Inc. 的在线测试甚至没有一个多项选择题,而只有五个编码问题,分为两个部分。其中三个问题是强制性的,属于第 1 部分,而可以选择从剩余的两个问题中选择任何一个问题,这些问题在第 2 部分中被归类为高级。测试在 Hackerrank 上进行,持续时间为 120 分钟。参加考试的资格有 CGPA 和分支标准,并且仅适用于第 7 学期的学生。

第 1 部分:(全部为必填项)

第一个问题与数据结构和算法有关。你得到了一个按到达时间排序的字符串数组,其中每个字符串都是对用户名的请求。您的工作是通过按给定顺序处理请求,为每个请求提供唯一的用户名。如果之前已经分配了请求的用户名,则必须通过将请求的用户名的基本字符串与将生成唯一用户名的最小可能正整数连接来给出另一个用户名。如果之前未分配请求的用户名,您可以按原样分配。此处的解决方案:使用 Trie 分配用户名的程序

Example:
input: {a1, a, a, a1, b, b}
output: {a1, a, a2, a11, b, b1}

我使用 Trie 数据结构实现了它,但是使用 STL 映射有一个更简单的实现,它可以节省您编写大量代码的时间。

第二个问题与 DBMS 和 SQL 有关。给定一个简单关系数据库的模式,您必须根据上述条件查询一些元组。这个问题很简单,唯一的问题是添加ORDER BY命令。有 1 个可见的测试用例在没有添加ORDER BY的情况下工作,而有几个需要完美查询的后台测试用例。我强烈推荐 GeeksForGeeks MySQL 线程来准备和修改 SQL 相关问题。

第三个问题与字符串操作和文件处理有关。给定一个在 Linux 系统上包含作为格式化字符串的 HTTP 请求(每行 1 个请求)的文本文件,找出发送/接收超过给定字节数的请求数以及交换的总字节数。将两个结果分别写入输出文件中的不同行。虽然我使用 C 来解决问题,但如果允许,我强烈推荐Python ,它是。

第 2 部分:(选择任何一项)

第四个问题是博弈论范式中的一个问题,著名的尼姆游戏问题。解决方案:组合博弈论 |第 2 组(尼姆游戏)

第五个问题与数据结构和算法有关。监狱中有一个 2D 网格的铁条,每条间隔单位距离,M 条水平杆和 N 条垂直杆安装在围绕它们的墙壁、天花板和地板上。两个维度的第一个和最后一个铁条与墙壁、天花板和地板的距离为单位距离。
具有N = 8个垂直条和M = 4水平条的网格。星号 (*) 代表墙壁,逗号 (, ) 代表天花板,反引号/反引号 (`) 代表地板。

,,,,,,,,,,,,,,,,,,,
*_|_|_|_|_|_|_|_|_*
*_|_|_|_|_|_|_|_|_*
*_|_|_|_|_|_|_|_|_*
*_|_|_|_|_|_|_|_|_*
* | | | | | | | | *
```````````````````

每件事物都被单位距离隔开,正方形单元格是单位面积。你得到了这样一个网格,其中一些铁条在两个维度上都丢失了。求一个没有铁条的矩形的最大面积。例如,如果移除所有铁条,则最大面积将为(M + 1) * (N + 1) 。输入包含两个数组,其中包含保留在网格中的条的索引。这个想法是在O(n*log(n))时间内对数组进行排序,并在 O( O(n) ) 时间内找到两个数组的连续元素之间的最大差异。然后将两个差异相乘以获得最大面积。

我对在线回合的总体体验是积极的。这是一个非常简单的测试,只是为了测试学生的编码能力而不是技能,并筛选出入门候选人。它检查了在 Hadoop 集群中工作所需的所有领域:基础编程、数据库知识和非常基础的文件处理。我与其他 34 人一起完成了一轮面试,入围百分比为 11.5%。

第二轮:技术轮

第一轮面试由他们工程部门的一个人进行,持续了大约 45 分钟。它从两个谜题开始,然后是一些数据结构和网络问题。

谜题 1:谜题 12 | (最大化白球概率)

谜题 2:谜题 4 | (使用 7 单位金棒支付员工工资?)

当您在浏览器上输入 URL 时会发生什么?这是一个非常开放的问题,我围绕 TCP/IP 模型、DNS 服务器和路由进行了回答。其他可能的答案可能围绕数据链路层协议或客户端服务器架构展开。这里可能的答案之一是:当您键入 URL 时会发生什么?
正如人们所预料的那样,围绕这个问题进行了长时间的讨论,他巧妙地检查了我所有的计算机网络知识。最后他并不完全相信我的答案,尽管他承认没有正确的答案。

第四个问题相当简单。给定一棵二叉树,判断它是否是二叉搜索树。我给出了简单的空间优化有序遍历解决方案,它标志着第 2 轮的结束。这里的解决方案:检查二叉树是否为 BST 的程序

35人中有14人通过了这一轮。

第三轮:技术轮

第二次面试是在第一次面试后大约五分钟开始的,也是由他们工程部门的一个人参加的,持续了大约 45 分钟。下半场面试都是关于数据库的,上半场是基于简历的讨论,我被问到很多关于我的项目的问题,特别是关于我的开源贡献,正如人们所期望的那样。

面试的后半部分由菊花链式 DBMS 问题构成,其中一个问题的答案引发了下一个问题。

第一个问题是在关系数据库中表示继承。我给出了臭名昭著的Living Beings -> Animal, Plants -> Mammals, Amphibians -> Dogs, Humans的例子,并写下了相同的模式。这里有一些参考:增强型 ER 模型

第二个问题与数据库安全性和 ACID 属性有关。他还借此机会让我编写一个 C++/ Java类来对银行数据库中的安全性和原子性进行建模,他也从该数据库中测试了我的 OOP 技能。这个问题展开了长时间的讨论,因为当我反复删除它们时,他可以在我的解决方案中找到漏洞,直到它相当正确。

第三个问题是优化数据库中的存储和搜索,我直截了当地提到了 B+ 树,这是一个很大的错误。他让我编写用于从 B+ 树中删除的伪代码,而我不会写。但是我没有浪费时间去尝试,而是画了一个B+树的例子,并在图中展示了删除一个节点的过程,这让他信服了。这里有一些参考:B+树的介绍
然后他问我分布式集群如何帮助进一步减少这个问题。

主线 DBMS 与他在整个面试过程中提出的问题有一些其他偏差,但没有什么是无法回答或困难的,面试官非常乐于助人和冷静。这一轮最重要的收获是能够非常彻底地证明你的简历的合理性。

关于我的项目的几个问题和一些面试反馈标志着第三轮的结束。

14人中有10人通过了这一轮。

第 4 轮:技术管理轮

第三次面试是一个人,他们管理部门的项目经理,持续了大约35分钟。尽管是最短的采访,但它似乎包含了最多的内容,而且理由很充分。这次面试有关于我的开源项目、核心操作系统问题、系统设计和管理问题的基于简历的问题。

前 5 分钟,他和我聊了我之前的面试经历、我的大学经历以及我未来的计划和梦想。很琐碎的东西,很期待。

然后他开始问操作系统问题。他通过询问示例问题向我询问了关于颠簸和分页的问题。然后他让我解释竞争条件、互斥和死锁等术语,还让我为彼得森的临界区问题的解决方案编写代码。

他让我为 Readers Writers 问题编写代码,并建议进行设计更改以防止在无限的读者流时写者饿死。

他在进一步浏览我的简历时问了我一些关于工作安排的基本问题,最后问了我一些关于实时操作系统的详细问题,因为那在我的简历中。然后我们聊了一些非正式的东西和我之前的一次实习,这标志着第 4 轮的结束。

10人中有7人通过了这一轮。

第五轮:人力资源轮

最后一轮是由他们人力资源部门的一个人参加的,持续了短短的 15 分钟。他还向我询问了我的项目,但这次我知道我必须以“人力资源的方式”提供答案。

他向我询问了我未来的计划,关于更高的学习和/或公司角色,并消除了一些后勤方面的疑虑。他从我那里得到了一些关于工作地点、工作描述和录取通知的口头确认。

差不多就是这样,之后我们耐心地等待结果,在同一个小时内宣布。

7 人中有 3 人通过了这一轮并获得了这份工作(实习 + 全职)。我们三个人都接受了。

结论:

整个过程在时间、内容、难度和结果上都非常整齐、完整、充分。与一些学生不同,我不必在两次面试之间等待,而且过程对我来说非常精简。我期待着从 2020 年 1 月开始工作。
给读者的几点建议:

  • 不用说,把GFG当作你的圣经。在 Interview Bit、Hackerrank 和 Code Chef 上练习有竞争力的编码。
  • 在此过程中的任何时候都不要惊慌。很大程度上取决于您沟通的巧妙和流利程度。记住,如果你不能告诉你的面试官,那么才华横溢是没有意义的。
  • 回答一些问题,如果不是全部。不要试图跳到答案或者只是呆在原地。相反,尝试缓慢而稳定地通过解决方案爬行。
  • 一些人力资源问题是具有主要答案的主要问题。不要情绪化地回答这些问题,我的意思是当你所要做的只是说一个简单的是或否时,“大胆”和“坦率”是没有意义的。
  • 谷歌搜索你错过的那些问题的答案,在你得到面试之间的时间。如果您有机会,请寻求简短的面试反馈,并尝试通过询问定向提示(而不是解决方案)来关闭面试室本身的任何未解决问题,这表明您的面试官您渴望解决问题。
  • 穿着得体,严格遵守行为准则。他们在看着你!
  • 不要在你的简历上撒谎。说真的,不要。曾经。

祝你生活中一切顺利!