数据科学必备数据工程师用Python面试QA 9例

参加面试可能是一个耗时且累人的过程,而技术面试可能会更加紧张(包含各种意想不到的笔试)!这里给大家准备在数据工程师面试期间会遇到的一些常见问题。将学习如何回答有关数据库、Python 和SQL的面试问题。

在这里插入图片描述

数据工程师做什么的?

数据工程角色可以是一个广泛而多样的角色。需要具备多种技术和概念的工作知识。数据工程师的思维很灵活。因此可以精通多个领域,例如数据库、软件开发、DevOps和大数据。

鉴于其不同的技能组合,数据工程角色可以跨越许多不同的工作描述。数据工程师可以负责数据库设计、模式设计和创建多个数据库解决方案。这项工作还可能涉及数据库管理员。

作为一名数据工程师,可以充当数据库和数据科学团队之间的桥梁。在这种情况下,还将负责数据清理和准备工作。如果涉及到大数据,那么的工作就是为该数据提出一个有效的解决方案。

可能还需要为报告和分析进行有效的数据查询,需要与多个数据库交互或编写存储过程。对于高流量网站或服务等许多解决方案,可能存在多个数据库。在这些情况下,数据工程师负责设置数据库、维护它们并在它们之间传输数据。

数据工程师为何首选 Python

Python 在数据科学、后端系统和服务器端脚本中特别有用。 这是因为 Python 具有强大的类型、简单的语法和大量的第三方库可供使用。 Pandas、SciPy、Tensorflow、SQLAlchemy 和 NumPy 是不同行业生产中使用最广泛的库。

最重要的是 Python 减少了开发时间,这意味着公司的开支更少。 对于数据工程师来说,大多数代码执行是受数据库限制的,而不是受 CPU 限制的。 正因为如此,利用 Python 的简单性是有意义的,即使与 C# 和 Java 等编译语言相比,其性能也会降低。

关于关系数据库的问题

数据库是系统中最重要的组件之一。几家大公司推出了几种新的工具和技术其中包括 NoSQL、缓存数据库、图数据库、SQL 数据库中的 NoSQL 支持
在这里插入图片描述

Q1:关系数据库与非关系数据库

关系数据库是以表格形式存储数据的数据库。每个表都有一个schema,它是记录必须具有的列和类型。每个模式必须至少有一个唯一标识该记录的主键。换句话说,数据库中没有重复的行。此外,个表都可以使用外键与其他表相关联。

关系数据库的一个重要方面是模式中的更改必须应用于所有记录。这有时会导致迁移过程中的损坏和大麻烦。非关系数据库以不同的方式处理事情。它们本质上是无模式的,这意味着可以使用不同的模式和不同的嵌套结构来保存记录。记录仍然可以有主键,但模式的更改是在逐个条目的基础上完成的。

需要根据正在执行的功能类型执行速度比较测试。可以选择INSERT、UPDATE、DELETE或其他功能。架构设计、索引、聚合数和记录数也会影响此分析,因此需要彻底测试。

数据库的可扩展性也不同。非关系型数据库的分发可能不那么令人头疼。这是因为相关记录的集合可以很容易地存储在特定节点上。另一方面,关系数据库需要更多的思考,并且通常使用主从系统。

Q2:SQL 聚合函数

聚合函数是对结果集执行数学运算的函数。一些示例包括AVG、COUNT、MIN、MAX和SUM。通常需要 GROUP BY 和 HAVING 子句来补充这些聚合。一个有用的聚合函数是AVG,可以使用它来计算给定结果集的平均值。

Q3:加速 SQL 查询

速度取决于各种因素,但主要受以下各项的数量影响:加入、聚合、遍历、记录。

连接数越多,复杂度越高,表中的遍历次数也越大。对涉及多个表的数千条记录执行多个连接非常昂贵,因为数据库还需要缓存中间结果!此时,可能会开始考虑如何增加内存大小。

速度还受数据库中是否存在索引的影响。索引非常重要,它允许快速搜索表并找到查询中指定的某些列的匹配项。

索引以更高的插入时间和一些存储为代价对记录进行排序。可以组合多个列以创建单个索引。例如列之间可能会合并,因为查询取决于这两个条件。

Q4:调试 SQL 查询

大多数数据库都包含一个 EXPLAIN QUERY PLAN 描述数据库执行查询的步骤。对于 SQLite,可以通过在语句 EXPLAIN QUERY PLAN 前面添加 SELECT 来启用此功能。

关于非关系数据库的问题

非关系数据库 NoSQL,目标是突出与关系型数据库的优势、差异。
在这里插入图片描述

Q5:使用 MongoDB 查询数据

与 SQL 类似,基于文档的数据库也允许执行查询和聚合。但是功能在语法上和底层执行上都可能不同。事实上可能已经注意到 MongoDB 保留 $ 字符以在记录上指定一些命令或聚合,例如 $group。

即使语法可能仅略有不同,但在底层执行查询的方式却存在巨大差异。因为 SQL 和 NoSQL 数据库之间的查询结构和用例不同。

Q6:NoSQL 与 SQL

如果有一个不断变化的模式,比如金融监管信息,那么 NoSQL 可以修改记录并嵌套相关信息。想象一下如果有八个嵌套顺序,必须在 SQL 中执行的连接数,而且这种事情会经常发生!

现在如果想运行报告、提取有关该财务数据的信息并推断结论怎么办?在这种情况下,需要运行复杂的查询,而 SQL 在这方面往往更快。

不过速度并不是唯一的衡量标准。还需要考虑事务、原子性、持久性和可伸缩性等因素。交易在金融应用中很重要,这些功能优先级是较高的。

关于缓存数据库的问题

缓存数据库保存经常访问的数据。它们与主要的 SQL 和 NoSQL 数据库并存。目标是减轻负载并更快地处理请求。
在这里插入图片描述

Q7:如何使用缓存数据库

缓存数据库是一种快速存储解决方案,用于存储短期、结构化或非结构化数据。它可以根据需要进行分区和扩展,但通常比主数据库小得多。因此存数据库可以驻留在内存中,从而无需从磁盘读取。

当一个请求进来时首先检查缓存数据库,然后是主数据库。这样可以防止任何不必要的重复请求到达主数据库的服务器。由于缓存数据库的读取时间较短,因此还可以从性能提升中受益!

关于设计模式和 ETL 概念的问题

在大型应用程序中,经常会使用不止一种类型的数据库。事实上可以在一个应用程序中使用 PostgreSQL、MongoDB 和 Redis!一个具有挑战性的问题是处理数据库之间的状态变化,这使开发人员面临一致性问题。

如果得到了一个不一致且过时的结果!从第二个数据库返回的结果不会反映第一个数据库中的更新值。任何两个数据库都可能发生这种情况,但当主数据库是 NoSQL 数据库并且信息被转换为 SQL 以进行查询时,这种情况尤其常见。

数据库可能有后台工作者来解决这些问题。这些工作人员从一个数据库中提取数据,以某种方式对其进行转换,然后将其加载到目标数据库中。当从 NoSQL 数据库转换为 SQL 数据库时,提取、转换、加载 (ETL) 过程会执行以下步骤:

  • 提取:每当创建、更新记录等时,都会有一个 MongoDB 触发器。在单独的线程上异步调用回调函数。
  • 转换:部分记录被提取、规范化,并放入正确的数据结构(或行)中以插入到 SQL 中。
  • 加载: SQL 数据库批量更新,或作为单个记录进行大容量写入。

此工作流程在财务、游戏和报告应用程序中非常常见。在这些情况下,不断变化的模式需要 NoSQL 数据库,但报告、分析和聚合需要 SQL 数据库。

Q8:大数据中的设计模式

想象一下阿里需要创建一个推荐系统来向用户推荐合适的产品。数据科学团队需要大量数据!他们去找你(数据工程师)并要求创建一个单独的临时数据库仓库。他们将在那里清理和转换数据。

收到这样的请求,可能会感到震惊。当拥有数 TB 的数据时,将需要多台机器来处理所有这些信息。数据库聚合函数可能是一个非常复杂的操作。如何有效地查询、聚合和利用相对大的数据?

Apache 最初引入了 MapReduce,它遵循 map、shuffle、reduce 工作流程。这个想法是将不同的数据映射到不同的机器上,也称为集群。然后可以对数据执行工作,按键分组,最后在最后阶段聚合数据。设计模式构成了大多数大数据工作流的基础。

Q9:ETL 流程和大数据工作流的共同点

两种工作流程都遵循生产者-消费者模式。 工人(生产者)产生某种数据并将其输出到管道。 该管道可以采用多种形式,包括网络消息和触发器。 Producer 输出数据后,Consumer 消费并使用。 这些工作人员通常以异步方式工作,并在单独的进程中执行。

可以将 Producer 比作 ETL 过程的提取和转换步骤。 类似地在大数据中,mapper 可以看作是 Producer,而 reducer 实际上是 Consumer。 这种关注点分离在应用程序的开发和架构设计中极其重要和有效。

猜你喜欢

转载自blog.csdn.net/qq_20288327/article/details/124170837
今日推荐