30+个最常问的数据工程师面试题及答案

2025年3月17日 | 阅读19分钟

1) 你对数据工程这个术语有什么理解?

数据工程这个术语在大数据领域中使用,主要关注数据收集和研究应用。来自各种来源的数据只是原始数据。数据工程是关于由各种来源生成的数据的研究和研究领域,并将这些原始数据转化为有用的信息。

换句话说,数据工程是关于原始数据的研究领域,以及将大型数据集进行转换、清洗、剖析和聚合转化为有用信息的过程。


2) 你为什么选择数据工程职业?/ 你为什么想从事数据工程职业?

这是数据工程师面试中必问的问题。通过问这个问题,面试官想了解你对数据工程领域的理解、你的动力以及你选择数据工程领域作为职业的兴趣。每个组织都希望聘用对自己的职业领域充满热情的人。

如果你是经验丰富的候选人,你可以说明你在这方面的技能和知识,以及你克服了哪些挑战才获得数据工程领域的知识或经验。在回答这个问题时,你可以分享你对数据工程的热情,这种热情让你每天克服挑战。你还可以分享你的故事和获得的见解,给面试官留下深刻印象,让你最兴奋的是成为一名数据工程师。


3) 数据工程师的主要职责是什么?

数据工程师的主要职责是建立和维护支持数据建模和信息相关应用程序的基础设施。数据工程师需要处理许多与获取原始数据和从中检索有用信息相关的职责。

随着IT领域的飞速发展,我们需要专业人士来维护大数据架构。数据工程师是理解数据、数据摄取、提取、转换、数据加载等方面专业人士。他们更偏向数据,与核心IT专业人士不同。他们也与数据科学家不同,因为后者致力于处理数据挖掘、识别数据中的模式、向业务领导层推荐基于数据的变更等。因此,我们可以说数据工程师是核心IT专业人士和数据科学家之间至关重要的联系。


4) 你对数据建模有什么理解?

数据建模是记录复杂软件设计作为图表的过程或方法,以便任何人都能轻松理解。它通过使用文本和符号来表示数据及其流动方式,创建软件系统及其数据元素的简化图表。它为设计新数据库提供了蓝图。它使用几种正式的技术来为信息系统创建数据模型。

换句话说,我们可以说数据建模是数据对象之间关联以及规则的概念表示。


5) 你有数据建模的经验吗?

这个问题主要问的是有数据建模经验的候选人。即使你没有任何数据建模经验,最好至少将其定义为数据建模是将提取的数据转换为有用信息,然后将其发送给相关人员的过程。面试官问这个问题是为了检查你的经验是否满足该职位的要求。你可以相应地进行解释。

如果你是经验丰富的候选人,你可以解释你在前一份工作中具体做了什么。你可以解释像Talend、Pentaho或Informatica这样的工具,它们主要用于数据建模。如果你不知道这些工具,你可以谈论你了解的任务和工具。


6) 数据工程师需要具备哪些核心技能?

数据工程师为了高效地履行职责,必须掌握以下技术和软技能:

  • 良好的编码知识。他们必须对一些编程语言有基本了解,如 C/C++、Java、Python、Golang、Ruby、Perl、Scala 等。
  • 操作系统知识,如 macOS、Microsoft Windows、Linux、Solaris、UNIX 等。
  • 对数据库设计和架构有良好的理解。他们还必须精通 SQL 和 NoSQL 数据库系统。
  • 在 Big Data 和 Hadoop 等数据存储和分布式系统方面的一些经验。
  • 他们必须在数据仓库和 ETL 工具方面拥有专业知识。
  • 他们必须具备批判性思维能力,以评估问题并开发解决方案。
  • 还需要一些机器学习技能和云计算工具知识。

7) 作为数据工程师,你如何处理与工作相关的危机?

问这个问题的主要动机是,面试官想了解你在工作方面的思维方式。数据工程师的责任很多,所以你工作中遇到挑战是很正常的。在回答这个问题时,你应该诚实地回答你在之前工作中是如何解决这类问题的。通过问这个问题,面试官还知道你是否遇到过任何紧急情况,或者这是你担任数据工程师的第一个职位。你也可以举一个假设性的情况来告诉面试官,如果你遇到这种情况你会怎么做。例如,你可以说,如果数据丢失或损坏,你会与 IT 部门合作,确保数据备份已准备好加载,并且其他团队成员能够访问他们需要的内容。


8) 你对我们公司有什么了解?为什么我们应该聘用你?

你会在任何工作面试中遇到这个问题。这是一个基本问题,你必须积极地回答。在回答这个问题时,你可以指出该职位和所涉及工作的有趣之处。在面试前,你应该对公司进行充分的研究。你可以陈述公司在该领域从事的哪些工作吸引并激励你加入公司。在这里,你还可以具体说明并强调你的资历、经验、技能和个性,以表明你的经验将如何使公司受益,以及你所获得的将帮助你成为一名更好的数据工程师。


9) 结构化数据和非结构化数据之间有什么区别?

以下是结构化数据和非结构化数据之间关键区别的列表:

结构化数据非结构化数据
结构化数据是一种定量数据。它通常包含数字和值。非结构化数据是一种定性数据。它通常包含音频、视频、传感器、描述等。
结构化数据存储在表格格式中,如 Excel 表格或 SQL 数据库。非结构化数据存储为音频文件、视频文件或 NoSQL 数据库。
结构化数据需要更少的存储空间,并且具有高度的可扩展性。非结构化数据需要巨大的存储空间,并且难以扩展。
结构化数据主要用于机器学习和推导机器学习算法。非结构化数据主要用于自然语言处理和文本挖掘。
结构化数据具有预定义的模型。非结构化数据没有预定义的模型。
主要的结构化数据来源是在线表单、GPS 传感器、网络日志、Web 服务器日志、OLTP 系统等。非结构化数据的主要来源是电子邮件消息、文字处理文档、PDF 文件等。
结构化数据的示例包括姓名、地址、日期、信用卡号、股票信息、地理位置等。非结构化数据的示例包括音频、视频、图像文件、日志文件、传感器或社交媒体帖子。

10) 在数据工程中,你对 *args 和 **kwargs 有什么理解?

这是一个高级别的数据工程师问题。这是一个复杂的编码问题,这类编码问题通常在数据工程师面试中出现。

*args**kwargs 都在 Python 中使用,并指定一个函数接受任意数量的参数。*args 用于定义一个有序函数,而 **kwargs 表示一个在函数中使用的无序参数。这里,*args 指的是常规参数(例如 myFun(1,2,3)),**kwargs 指的是关键字参数(例如 myFun(name="jtp"))。

例如,如果你想声明一个用于求和的函数。默认情况下,你会遇到一个问题,因为它只接受固定数量的参数。

示例

以下是一个用于求和的常规函数,它期望一个列表类型的参数:

我们可以用它来求和:

在这里,*args 让你无需使用列表即可完成相同的操作:

另一方面,**kwargs 用于解包字典。例如,如果你想将 3 个数字相乘,这些数字来自某个外部源并存储为键值对。这里,键总是相同的,但值会改变。

以下是简单的后端代码:

一种简单的方法:

使用 **kwargs


11) 数据仓库和操作数据库之间有什么区别?

操作数据库用于插入、更新和删除 SQL 语句。它们主要关注速度和效率。因此,在操作数据库中分析数据会更复杂一些。另一方面,数据仓库主要关注聚合、计算和 SELECT 语句。这些功能使数据仓库成为数据分析的理想选择。


12) 数据建模中有哪些不同的设计模式?

数据建模主要有两种设计模式。它们如下:

1. 星型模式:星型模式是数据仓库模式中最基本、最简单的模式。它遵循一种成熟的建模方法,被关系型数据仓库广泛采用。它需要建模者将模型表分类为维度表或事实表。维度表指定业务实体,即我们要建模的事物,业务实体包括产品、人员、地点和概念,包括时间本身。

星型模式主要用于开发或构建数据仓库和维度数据仓库。它是雪花模式的必要原因。星型模式在处理基本查询方面也很有效。

2. 雪花模式:雪花模式是星型模式的典型变体。它是多维数据库中表的逻辑排列方式,使得实体-关系图 resembling a snowflake shape。这就是为什么它被称为雪花模式。雪花模式由连接到多个维度的中心事实表表示。在雪花模式中,中心事实表连接到多个维度,所有维度都以规范化的形式存在于多个相关表中。

当星型模式的维度非常详细且结构高度化,具有多个关系级别,并且子表有多个父表时,就会出现雪花结构。此模式仅影响维度表,不影响事实表。


13) 星型模式的优缺点是什么?

以下是星型模式的关键优点和缺点的列表:

星型模式的优点

  • 它使查询简单:与需要从高度规范化的事务模式中获取数据的其他联接逻辑相比,星型模式使用非常简单的联接逻辑。
  • 它简化了业务报告逻辑:与星型模式相比,事务模式高度规范化。因此,星型模式阐明了常见的业务报告逻辑,例如“截至”报告和“周期对比”报告。
  • 无需设计立方体:所有 OLAP 系统都使用星型模式来有效地设计 OLAP 立方体。大多数 OLAP 系统以 ROLAP 模式运行,以星型模式作为源,而无需设计立方体结构。

星型模式的缺点

  • 星型模式是一种高度反规范化的模式状态,因此数据完整性可能是一个缺点。在此模式下,数据完整性未得到良好强制。
  • 它不是一个高度规范化的数据模型,因此如果分析需要规范化的数据模型,它就不够灵活。
  • 星型模式并不经常加强业务实体内的多对多关系。

14) Hadoop 应用程序的主要组成部分是什么?

以下是 Hadoop 应用程序主要组件的列表:

  • HDFS:HDFS 代表 Hadoop 分布式文件系统。它是 Hadoop 应用程序使用的主要数据存储系统。此文件系统存储 Hadoop 数据。它使用 NameNode 和 DataNode 架构来实现分布式文件系统,该文件系统提供跨高度可扩展的 Hadoop 集群的高带宽、高性能数据访问。
  • Hadoop Common:这是一组由 Hadoop 使用的通用实用程序和库。
  • Hadoop YARN:它主要用于 Hadoop 集群内的资源管理。我们也可以将其用于用户的任务调度。
  • Hadoop MapReduce:它用于大规模数据处理。

15) 雪花模式的优缺点是什么?

以下是雪花模式的关键优点和缺点的列表:

雪花模式的优点

  • 雪花模式提供更好的数据质量。在此模式下,数据更加结构化,因此数据完整性问题减少,不常见。
  • 雪花模式比反规范化模型占用的磁盘空间更少,因为在此模型中数据是规范化的,并且数据冗余极少。
  • 雪花模式模型中数据完整性违规的风险非常低,数据冗余水平也很低。因此,维护简单易行。
  • 在雪花模式中,我们可以使用星型模式无法处理的复杂查询。它为强大的分析提供了更多空间。
  • 雪花模式支持多对多关系。

雪花模式的缺点

  • 与星型模式相比,雪花模式更难设计。
  • 雪花模式需要更复杂的查询,这些查询使用大量联接,这会显著降低雪花模式的性能。
  • 由于数据仓库中存在许多不同的表,雪花模式的维护也更加复杂。
  • 雪花模式中的查询可能非常复杂,并且在许多表之间存在多个联接级别。
  • 由于需要进行大量联接才能生成最终输出,因此在某些情况下,雪花模式中的查询速度较慢。
  • 我们需要一些特定的技能来处理使用雪花模式存储的数据。

16) 星型模式和雪花模式之间有什么关键区别?

以下是星型模式和雪花模式之间关键区别的列表:

星型模式雪花模式
在星型模式中,维度表包含维度的层级结构。在雪花模式中,层级结构有单独的表。
在此模式下,维度表覆盖事实表。在此模式下,维度表覆盖事实表,然后由维度表进一步覆盖。
在此模式下,事实表和维度表通过单个联接连接。在此模式下,使用许多联接来获取数据。
它具有简单的数据库设计。它具有复杂的数据库设计。
即使使用反规范化的查询和数据结构,它也能正常工作。它仅适用于规范化的数据结构。
在此模式下,单个维度包含聚合数据。在这里,数据被分割成不同的维度表。
星型模式中的数据冗余很高。雪花模式中的数据冗余非常低。
它提供更快的立方体处理。由于联接复杂,雪花模式中的立方体处理速度较慢。

17) 大数据的四个 V 是什么?

大数据的四个 V 是:

  1. 速度 (Velocity):第一个 V 是速度,它指明了大数据随时间生成的方式。它用于分析数据。
  2. 多样性 (Variety):第二个 V 是多样性,它指明了大数据形式的多样性,如图像、日志文件、媒体文件和语音记录。
  3. 体量 (Volume):第三个 V 指明了数据的体量。例如,用户数、表数、数据大小或表中的记录数。
  4. 真实性 (Veracity):第四个 V 指明了与数据的不确定性或确定性相关的真实性。它用于决定数据的准确性。

18) OLTP 和 OLAP 之间有什么关键区别?

以下是 OLTP 和 OLAP 之间关键区别的列表:

OLTPOLAP
OLTP 代表联机事务处理 (Online Transaction Processing)。在这种数据处理类型中,会并发执行多个事务。例如,网上银行、在线购物、发送短信等。OLAP 代表联机分析处理 (Online Analytical Processing)。这种数据处理类型提供了一个系统,用于对海量数据进行高速的多维分析。它主要在数据仓库、数据仓库或其他人机中心数据存储上运行。
OLTP 主要用于管理操作数据。OLAP 主要用于管理信息数据。
它主要由客户、职员和 IT 专业人士使用。它主要由分析师、主管、经理和其他技术人员使用。
OLTP 以客户为中心。OLAP 以市场为中心。
它具有相对较小的数据库大小。它具有巨大的数据库大小。
它管理极其详细的当前数据,主要用于决策。它管理着海量历史数据。它用于管理海量历史数据。它支持聚合和汇总,并在不同粒度级别上管理和存储数据,因此数据更容易用于决策。
它遵循实体-关系数据模型以及面向应用程序的数据库设计。它遵循雪花或星型模型以及面向主题的数据库设计。
它是完全规范化的。它是部分规范化的。
它处理小数据量。它处理海量数据。
它提供读/写操作的访问模式。它主要提供写入访问模式。
处理速度非常快。其处理速度根据复杂查询和文件数量而变化。

19) 你对 HDFS 中的 NameNode 有什么理解?

NameNode 是 HDFS 中最重要的部分之一。它是 Apache Hadoop HDFS 架构中的主节点,用于维护和管理 DataNodes(从节点)上的块。

NameNode 用于存储所有 HDFS 数据,同时它还会跟踪集群中所有文件。它是一个高可用性服务器,用于管理文件系统命名空间并控制客户端对文件的访问。在这里,我们必须知道数据存储在 DataNodes 中,而不是 NameNodes 中。


20) HDFS 中的 DataNodes 是什么?

与 NameNodes 相反,DataNodes 是 HDFS 中的从节点。实际数据存储在 DataNodes 上。一个功能正常的文件系统可以有一个以上的 DataNode,数据会在它们之间复制。DataNodes 主要负责响应客户端的读写请求。启动时,DataNode 会连接到 NameNode,直到该服务启动。


21) Hadoop 中的 NameNode 和 DataNode 之间有什么关键区别?

以下是 Hadoop 中 NameNode 和 DataNode 之间关键区别的列表:

NameNodeDataNode
NameNodes 是 HDFS 的核心。它们用于控制和管理 HDFC。它们在 Hadoop 集群中被称为 Master。DataNodes 用于在 HDFS 中存储实际业务数据。它们在 Hadoop 集群中也被称为 Slave。
NameNode 仅存储实际数据的元数据。它充当文件系统中所有文件的目录树,并跨集群跟踪它们。例如,文件名、路径、数据块的数量、块 ID、块位置、副本数量、从机相关配置等。DataNode 作为实际工作节点,负责处理读/写/数据处理。
NameNode 负责从块构建文件,因为它知道 HDFS 中任何给定文件的块列表及其位置。DataNode 会与 NameNode 进行持续通信以完成工作。
NameNode 在 HDFS 中扮演着至关重要的角色;当 NameNode 宕机时,HDFS/Hadoop 集群将无法访问,并被视为宕机。DataNode 的重要性不如 NameNode;当 DataNode 宕机时,它不会影响数据或集群的可用性。NameNode 将为不可用的 DataNode 所管理的块安排复制。
NameNode 通常配置大量内存 (RAM),因为块位置存储在主内存中。DataNode 通常配置大量硬盘空间,因为实际数据存储在 DataNode 中。

22) 你对 HDFS 中的 Block 和 Block Scanner 有什么理解?

在 HDFS 中,块是数据文件的最小单位。当 Hadoop 接收到一个大文件时,它会自动将文件切分成称为块的小块。另一方面,块扫描器用于验证 DataNode 上存在的块列表是否成功放置。


23) 什么是 Hadoop Streaming?

Hadoop Streaming 是 Hadoop 提供的一个非常常用的实用程序。它随 Hadoop 发行版提供。此实用程序使我们能够轻松创建 Map 和 Reduce 操作。它也可以提交到特定的集群使用。


24) Hadoop 有哪些重要的特性?

以下是使 Hadoop 在行业中流行、使用可靠且功能强大的大数据工具的一些 Hadoop 特性列表:

  • Hadoop 是一个开源且免费使用的框架。它是一个开源项目,因此源代码可供任何人在线获取。任何人都可以理解和使用它,并根据其行业需求进行一些修改。
  • Hadoop 是容错的。如果您的某个系统意外崩溃,它会提供数据可用性。在 Hadoop 中,数据会在 Hadoop 集群的各个 DataNodes 上复制,从而确保随时可用。默认情况下,Hadoop 会为每个文件块创建 3 个副本并将其存储在不同的节点上。
  • Hadoop 提供并行计算,确保更快速的数据处理。
  • 在 Hadoop 中,数据存储在与操作分离的独立集群中。
  • Hadoop 提供高数据可用性。其容错特性为 Hadoop 集群提供了高可用性。如果任何 DataNode 宕机,您可以从存储了数据的任何其他节点检索相同的数据。
  • Hadoop 提供数据冗余功能。它用于确保数据不丢失。
  • 与其他需要昂贵硬件和高端处理器来处理大数据的传统关系数据库相比,Hadoop 具有成本效益。
  • Hadoop 提供灵活性,因为它设计得能够有效地处理任何类型的数据集,如结构化(MySQL 数据)、半结构化(XML、JSON)、非结构化(图像和视频)。

25) 当 Block Scanner 检测到损坏的数据块时会发生什么?它是如何处理的?

当 Block Scanner 检测到损坏的数据块时,它会遵循以下步骤:

  • Block Scanner 检测到损坏的数据块后,DataNode 会向 NameNode 报告。
  • 之后,NameNode 会使用原始的损坏块创建一个新的副本。
  • 最后,复制计数正确的副本并与复制因子进行匹配。如果找到匹配项,则不会删除损坏的数据块。

26) NameNode 如何与 DataNode 通信?/ NameNode 从 DataNode 接收到哪两条消息?

NameNode 通过消息与 DataNode 通信。在通道上传输的消息有两条:

  1. 块报告
  2. 心跳

27) 为实现 Hadoop 的安全性,我们应遵循哪些步骤?

我们应执行以下步骤来实现 Hadoop 的安全性:

  • 我们应遵循的第一步是保护客户端到服务器的认证通道,并为客户端提供时间戳。
  • 获得时间戳后,客户端使用收到的时间戳向 TGS 请求服务票证。
  • 最后一步是客户端使用服务票证来向特定服务器进行自我身份验证。

28) Hadoop 中的 Combiner 是什么?

Combiner 是 Hadoop 中一个在减少网络拥塞方面发挥重要作用的函数。Hadoop 框架提供了此函数。此函数是 Map 和 Reduce 之间的可选步骤。它主要用于在将 Map 的输出数据传递给 Reducer 之前对其进行处理。它接收 Map 函数的输出,创建键值对,然后将其提交给 Hadoop Reducer。它将 Map 的最终结果汇总到具有相同键的摘要记录中。它在 Mapper 之后、Reducer 之前运行。


29) 你对 Hadoop 中的 Heartbeat 有什么理解?

在 Hadoop 中,Heartbeat 是用于 NameNode 和 DataNode 之间通信的消息。DataNode 以 Heartbeats 的形式向 NameNode 发送信号。DataNode 定期向 NameNode 发送它,以表明其存在。


30) 你对 Hadoop 中的数据局部性有什么理解?

我们都知道,在大数据系统中,数据量巨大,因此将数据移动到网络上来进行计算没有意义。在 Hadoop 中,数据局部性是指将计算移近实际数据所在的节点,而不是将大数据移动到计算节点。此过程可最大限度地减少网络拥塞并提高系统的整体计算吞吐量。此过程称为数据局部性,因为数据保留在存储位置的本地。


31) HDFS 中 FSCK 的完整形式是什么?

在 HDFS 中,FSCK 是文件系统检查 (File System Check) 的缩写。它是 HDFS 中最重要的命令之一。当我们必须检查文件中的问题和差异时,主要使用它。


32) Hadoop 中 NAS 和 DAS 有什么区别?

以下是 Hadoop 中 NAS 和 DAS 之间关键区别的列表:

NASDAS
NAS 是网络附加存储 (Network Attached Storage) 的缩写。DAS 也是直连存储 (Direct Attached Storage) 的缩写。
在 NAS 中,计算层和存储层是分开的,存储分布在网络上的不同服务器上。因此,它提供了高存储容量。在 DAS 中,存储不分布,而是连接到进行计算的节点。因此,它提供了较低的存储容量。
NAS 的存储容量为 109 至 1012 字节。DAS 的存储容量为 109 字节。
Apache Hadoop 遵循将处理移近数据位置的原则。因此,它需要本地存储磁盘进行计算。DAS 在 Hadoop 集群上提供了非常好的性能。它也可以在通用硬件上实现,这比 NAS 更具成本效益。
NAS 存储仅在我们具有非常高的带宽时才受欢迎。DAS 可与任何带宽一起使用。
在 NAS 中,数据传输介质是 Ethernet 或 TCP/IP。在 DAS 中,数据传输介质是 IDE/SCSI。
在 NAS 中,每 GB 的管理成本适中。在 DAS 中,每 GB 的管理成本很高。

33) 你对 FIFO 调度有什么理解?

FIFO 调度是 Hadoop 的一种作业调度算法。顾名思义,FIFO 代表先进先出 (First In First Out)。因此,在 FIFO 调度中,最先到达的任务或应用程序最先被处理。这是 Hadoop 中使用的默认调度。