Data Engineer 面试题
来自各公司指南的代表性 Data Engineer 面试题,按考察点分组。它们是备考示例,不是任何公司经确认的题库。
行为面 (18)
请讲述一次你负责解决其他团队所依赖的数据质量问题的经历。
请讲述一次你负责的数据管道在生产环境中发生故障的经历。你采取了什么行动,之后又发生了哪些变化?
请描述一次你与利益相关者在数据模型上意见不一致的经历,以及问题最终如何解决。
每日任务部分失败后,你会如何确保任务能够安全重跑?
请介绍一个由你设计、但在上线后需要调整的数据模型。
请介绍一个由你设计、但上线后不得不修改的数据模型。你当时哪里判断错了?
请编写一个查询,找出滚动窗口内每台设备的首次故障事件,并说明你会如何测试该查询。
请介绍一个上线后不得不修改的数据模型,并说明如果重新设计,你会做出哪些不同选择。
夜间作业部分失败后,你会如何确保其可以安全地重新运行?
请介绍一个由你设计、但在上线后不得不修改的数据模型。
编写一个查询,找出每台设备在某个时间窗口内的首次故障,并说明你会如何测试它。
你为什么特别想从事这个团队的数据问题相关工作?
请讲述一个上线后不得不修改的数据模型,以及你会采用哪些不同的设计。
请讲述一个上线后不得不更改的数据模型,以及你会采取哪些不同的设计方式。
你为什么想解决这个团队的数据问题?
编写一个查询,找出结算总额与交易总额不一致的账户,并说明你会如何测试。
请讲述一个由你负责、且其他团队依赖的数据质量问题。
讲述一个上线后必须修改的数据模型,以及你会采用哪些不同的设计。
编程 (8)
请编写一个查询,找出订单连续数月延迟发货的客户,并说明你会如何验证该查询。
编写一个查询,找出连续多日活跃的用户,并说明你会如何测试该查询。
编写一条查询,找出消费额逐月增长的客户,并说明你会如何验证结果。
编写一个查询,找出连续多天活跃的会员,并说明你会如何测试该查询。
编写一条查询,找出滚动窗口内每辆车的首个故障事件,并说明你会如何测试该查询。
编写一个查询,找出每个单元在一个窗口内首次失败的测量结果,并说明你将如何测试该查询。
QUALIFY是做什么用的?如果不用它,你会怎么写?
什么是缓变维度?你会如何实现二型?
系统设计 (24)
你会如何设计一条数据管道,用于摄取点击流事件,并在几分钟内让这些数据可供查询?
请设计一个系统:从多个区域摄取订单事件,并使这些数据可用于每日报告和近实时警报。
设计一条将原始应用事件转换为每日参与度指标的数据管道,并说明如何处理晚到一天的事件。
上游模式变更后,某项指标下降了。你如何判断这次下降是否真实?
设计一条数据管道,将多个地区的每日销售文件载入同一张报表表格,并在某个地区的数据延迟时避免阻塞其他地区。
下游仪表板显示的数据与源系统不一致。你会如何查明差异是在哪里产生的?
你会在什么情况下选择流处理设计而非计划批处理?这会带来哪些成本?
请设计一条数据管道,用于收集数千台设备的遥测数据,并让这些数据既可用于每日报告,也可用于临时分析。
下游团队表示昨天的汇总结果有误。你会如何找出数据管道在哪个环节引入了错误?
你会在什么情况下选择流处理设计而不是定时批处理?这种选择会带来哪些复杂度成本?
设计一条数据管道,将会员活动事件转换为每日互动指标,并妥善处理晚到一天的事件。
仪表板显示指标下降,但源系统没有出现下降。你会如何查明差异是在哪里引入的?
设计一条数据管道,从数百万台设备摄取设备诊断数据,并使其可供每日报告查询和隐私安全分析使用。
上游架构变更后,一项每日指标下降了。你如何查明这次下降是否真实?
设计一条管道,摄取大型车队的遥测数据,并使其可供每日报告查询和近实时警报使用。
某工厂仪表板显示的总数与源系统不一致。你会如何找出差异是在哪里引入的?
设计一条管道,将来自多个来源的支付事件核对后写入每日账本,并确保绝不重复计数。
这里有一条你从未见过的管道和一个失败的作业。请找出原因。
设计一条管道,从多条制造产线收集测试数据,并让这些数据可用于每日良率报告查询和临时分析。
每日汇总结果与源系统不一致。你会如何找出管道在哪个环节引入了差异?
为一个在线交易市场的订单历史设计表结构。你的事实表粒度是什么?
解释星型模式,以及你什么时候会主动进一步反规范化。
你会如何让一个管道具备幂等性?这对重跑为什么重要?
你会如何检测出一个管道运行成功了,但产出的数据是错误的?
技术 (31)
请逐步介绍你为订阅制业务设计的数据模型,并说明如何处理套餐随时间发生的变更。
某个夜间作业开始生成重复行。你会如何找出原因,并防止问题再次发生?
对于报表使用场景,你会如何在批处理与流处理之间作出选择?
你如何决定大型分析表中哪些内容应进行分区、聚类或建立索引?
你会如何确保回填可以安全重跑而不会重复计数?
你会在什么情况下选择列式格式而非行式存储,这会带来哪些代价?
对于产品指标,你会在什么情况下选择流处理而非批处理,其成本是什么?
你会如何确保夜间批处理作业能够安全重跑?
如何确保大规模回填能够安全地重新运行,而不会重复计数?
对于产品指标,你会在什么情况下选择流处理而非批处理?这样做有何成本?
你会如何确保回填可以安全地重新运行,同时避免重复计数?
你会如何确保大规模回填可以安全重跑且不会重复计数?
如果只有一个陌生 API 的文档,你会如何在一小时内构建可运行的数据摄取作业?
针对财务报告,你会在什么情况下选择流处理而非批处理?这会付出怎样的正确性成本?
如何确保大规模历史数据回填能够安全重跑且不会重复计数?
在监控用例中,你何时会选择流处理而非批处理,其成本是什么?
这个查询扫描了十亿行数据,耗时二十分钟。你会如何诊断?
解释分区(partitioning)和聚簇(clustering)的区别,以及各自适用的场景。
某相关方希望历史报表反映客户当前所在的地区。这会导致什么问题?
你会如何为一个乱序到达的事件流建模?
什么时候你会选择宽表而不是规范化模型?
上游数据源把昨天的数据又发了一遍。你的任务会发生什么?
你会如何在不打断每日加载的情况下回填两年的历史数据?
某个分区已经关闭三天后,延迟到达的数据才出现。你会怎么做?
你会监控什么指标?凌晨三点会因为什么而呼叫你?
什么会导致shuffle?为什么它的代价很高?
你的任务运行很慢,其中一个task耗时远超其他task。发生了什么?
解释数据倾斜(data skew),以及两种应对方法。
什么时候你会选择流处理而不是定时批处理任务?
「恰好一次」处理到底保证了什么?在哪些情况下它并不成立?
在窗口聚合中,水位线(watermark)是如何处理乱序事件的?