摩根士丹利 2021 年数据工程师面试经验
摩根士丹利是全球领先的投资银行和财富管理公司,主要专注于机构证券、财富管理和投资管理三个主要业务部门。
我是三级大学计算机科学与工程专业的 B.tech 研究生。我在 LinkedIn 上推荐了摩根士丹利孟买/班加罗尔分部的数据工程师职位。在做出最终决定之前,摩根士丹利包括五轮数据工程师角色。
招聘过程如下:
第一轮:初赛(在线测试)
这是在 Hackerrank 平台上进行的 TEDRA-India-Data-Engineering-Recruiting-Test。测试的总持续时间为 2 小时,由 4 个部分组成,每个部分都单独计时。这些部分是:
- SQL 编码问题:
- 基于Python和 SQL MCQ 的问题:
- 一个基于数据结构的编码问题:
- 关系数据库事务和基于管理的场景问题:
- 基于 Unix 和操作系统的 MCQ 问题:
我体面地完成了所有 SQL 问题和所有基于技术的 MCQ 部分,并通过了编码问题的所有测试用例。我在 1 小时 50 分钟内完成了我的测试。编码问题的水平是中等的,基于 MCQ 的问题是中等到难的。
尖端:
- 专注于基本级别的数据结构主题,例如 Array、String、Stack、Queue、Linked List 和 Tree(仅限 Binary Search Tree)。
- 主要关注 SQL 概念和查询(聚合函数、窗口函数(非常重要)、不同类型的连接、如何在不同场景中使用不同类型的连接、联合操作、分组依据、子查询、Having 子句等)您可以参考 https://www.geeksforgeeks.org/sql-tutorial/ 熟悉 SQL 概念。
- 专注于 DBMS 概念。您可以参考 https://www.geeksforgeeks.org/dbms/ 学习 DBMS 概念(实体关系概念、规范化、事务和并发控制)。
- 主要关注Python数据结构,例如 List、Tuple、Set 和 Dictionary(中级)。您还可以深入研究 Pandas(Python库)。
- 浏览基于 Unix 的命令和如何编写 shell 脚本(简单级别)。大多数情况下,每个人都熟悉基于 UNIX 和 Linux 的命令。在尝试评估之前,您可以简单地浏览 https://www.geeksforgeeks.org/essential-linuxunix-commands/。
第 2 轮:技术面试 1
- 我接到 HR 的电话,说我的在线测试通过了,我被列入技术讨论的候选名单。这一轮持续了大约 1 小时 20 分钟,由摩根士丹利的经理进行。
- 本次面试主要围绕 SQL based 问题、 Python编码问题、大数据概念、Spark、数据摄取工具 Sqoop、 Hive、HDFS、Map Reduce 概念、云计算概念、SDLC、Agile 方法论(高层基于 Scrum 框架) ,
- DevOps 策略(基础级别)、CI/CD 管道、Git、数据库概念、NoSQL 数据库(Stardog 图形数据库)、基于 AWS 服务的场景问题和简单的数据结构基础问题(数组和堆栈)。
一些被问到的 SQL 编码问题:
- 考虑两个具有“id”列的表 A 和 B,如下所示:
id |
---|
1 |
2 |
1 |
id |
---|
1 |
1 |
1 |
我被要求找出所有四种情况下最终输出中存在的行数:内连接左连接、右连接和完全外连接。
- 解决 SQL 查询 https://www.geeksforgeeks.org/sql-query-to-find-the-nth-largest-value-in-a-column-using-limit-and-offset/。
- 给定具有属性的员工表是 empId、empSalary、empDeptId 和具有属性 deptId、depName、CourseOffered 的部门表。我被要求使用记事本上的 windows 功能编写一个 SQL 查询来查找每个部门中薪水最高的员工。我使用了 dense_rank 窗口函数来构建 SQL 查询。我被要求解释使用 dense_rank 而不是 rank 函数的原因。
- 一些问题基于领先、滞后和标题窗口功能及其用途。我通过举例和编写 SQL 查询很好地解释了它们。
基于 Apache Hive和 Sqoop 的问题:
- 首先,他让我按照官方的定义来解释Hive 。 hive 使用哪个默认数据库来存储元数据。我告诉他“默认情况下, Hive使用内置的 Derby SQL 服务器”。
- 关于蜂巢分桶和分区及其差异的一些基于场景的深入探讨问题。
- 使用表元数据和 ACID 事务概念的外部配置单元表和托管配置单元表之间的区别。
- 我们如何从Hive删除的外部表(错误地)中获取数据?
- 1 个基于 Sqoop 增量负载的问题,并要求我通过使用任何用例来编写相同的 Sqoop 命令。
- 我被要求编写一个 Sqoop 命令将所有关系表从 MySQL 导入 HDFS。
基于 CI/CD、Git 和 DevOps 的问题(基础级别):
- 我被要求解释 CI/CD 的完整形式。我告诉 CI/CD 代表持续集成持续交付/持续部署。然后,他问我持续交付和持续部署的区别。
- 我还被要求详细解释 CI/CD 的工作。我以 GitLab 内置 CI/CD 为例进行了深入的解释。
- 基于 Gitlab runner 和 DevOps 生命周期的问题(我在 Gitlab 工作时)。他让我举一些我熟悉的 DevOps 工具的例子。我向面试官解释了高层次的 Jira 和Jenkins 。
我被问到的其他几个问题是:
- 我被要求解释 HDFS 的机架意识和 Apache Spark 架构的内部工作。
- 他让我解释一下当你将 spark 应用程序提交到 spark 引擎时会发生什么。带示例的窄变换和宽变换之间的区别。
- spark中合并和重新分区之间的区别。哪一个在性能方面更好。我被要求解释在应用合并和重新分区后创建的分区数量对于同一数据集是否保持相同或不同。
- 如何使用 Databricks 安排 Spark 作业。
- 基于Hadoop如何实现高可用的讨论。
- 基于概念的问题基于数据湖、数据仓库模式(Star & Snowflake 模式)、云服务(例如一点关于(AWS EC2 机器、IAM 策略和角色、S3 存储桶如何存储数据)提出了问题。
- 他让我编写代码,使用 boto3 库在 S3 存储桶上上传 CSV 文件。我在记事本上使用Python和 boto3 库编写了相同的代码。但是,我不记得正确的语法,但他对方法和伪代码没问题。
- 基于 SDLC 和敏捷方法的 2-3 个问题。我被要求解释我对敏捷的了解程度。我通过使用 sprint、Jira Board 和迭代方法的概念详细解释了敏捷与敏捷框架 (Scrum)。为什么敏捷优于瀑布模型。
最后,他问我是否有任何问题。我向他询问了他们数据平台团队中使用的技术堆栈。他向我详细解释了他们的技术堆栈。
第三轮:技术面试 2
我收到了摩根士丹利副总裁的第二轮技术邮件。这一轮持续了大约45-50分钟。面试从我的介绍、我的专业知识、我所从事的技术技能开始。大多数问题都是基于数据建模、Databricks Lakehouse 架构、PySpark 和架构设计(ETL 设计)提出的。首先,他教了我如何为关系数据库创建数据模型。我使用了所有规范化和非规范化技术来创建关系数据模型。然后,
- 我被要求解释 Databricks 的工作和内部 Lakehouse 架构。我被要求深入解释 ETL 管道的数据摄取和数据转换概念。我以 AWS 胶水 ETL 工具和 Redshift 数据仓库为例,详细解释了所有步骤。还有一些问题如下: 面试官给了我一个场景,让我解释一下在设计 ETL 管道时我应该注意哪些初步检查。
- 基于使用 Spark 的批处理和流处理提出了一到两个问题。
- 暂存层如何在数据管道及其用途中工作。
- 问题基于数据仓库架构。
- 我被要求解释单元测试用例的用例以及如何使用 SQL 和 PySpark 代码创建单元测试用例(正如我在之前的项目中创建单元测试用例一样)。
- 他让我编写伪代码以使用Python构建虚拟 ETL 管道。我使用Python数据结构和 pandas 库来提取、清理数据、转换数据并将最终数据集加载为 CSV 格式。
- 基于 Spark 监控和 Spark 性能管理提出的问题。我通过实际例子深入解释了所有答案。
这一轮完全专注于数据建模、PySpark 和 ETL 管道设计。
第四轮:技术管理轮
本次采访由摩根士丹利执行董事接受。这一轮持续了大约45分钟。我被要求自我介绍。然后,讨论了我参与的大学项目、我在 ZS Associates 的实习经历、我在项目中的角色和职责。我还被要求解释我在 IEEE 和 Springer 国际会议上发表的关于基于 Web 流量和页面浏览量对网站进行排名的 Web Crawler 的研究论文。他喜欢我在 B.tech 课程中撰写研究论文的优势和意愿。其中一些问题与摩根士丹利的核心原则和我的灵感有关。然后他问了有关团队管理和领导素质的问题。我主要被问到基于情境的问题,例如“如何克服团队中面临的挑战”。然后,他跳进了我的简历,问了我一些与 Spark、Databricks、AWS 和 Delta Lakes 相关的技术问题。我记得的一些问题是:
- AWS 粘合如何获取数据源的元数据(存储在 S3 存储桶上的 parquet 文件或 CSV 文件)。
- 什么是 parquet 文件格式及其在增量表中的意义?
- 增量表在您的项目中有什么用?增量表的优点是什么?
- Delta Lake 使用什么格式存储数据?
- 我被要求根据我的项目的执行程序内存、工作节点数量、每个工作节点的执行程序数量、每个执行程序的核心数量和驱动程序内存来解释 Spark 集群的配置。
- 一些问题与 S3 存储桶、Redshift 数据仓库和关系数据库有关。
- 简述Hadoop的内部工作原理
最后,他问起了我的 B.tech 成绩。我告诉他,我是 B.tech 课程的大学学士。他对我的回答印象深刻,也对我的 B.tech 百分比印象深刻。
第五轮:人力资源轮
- 这一轮持续了大约15-20分钟。我被问及我的大数据项目经验、我的爱好、我的优势和劣势。他询问了我的家庭背景,之前的面试经历,我人生的最终目标。最后,他问我“我们为什么要雇用你”和“是什么激励你加入摩根士丹利”。最后和HR讨论了薪资问题。
- 第二天,我得到了HR的积极反馈。幸运的是,我被选为摩根士丹利的数据工程师职位。
最后,我是我梦想中的公司摩根士丹利的一员