FDE SQL 面试:考察内容与准备方法

前沿部署工程师的工作围绕客户的数据展开,因此几乎每一轮 FDE 面试流程都包含 SQL 环节,而且其要求高于基础的 SELECT/WHERE 筛选。面试会涉及多步骤的数据转换、窗口函数,以及那些奖励你对数据正确性进行推理的问题。

FDE SQL 环节考察什么

这一环节与其说是考冷知识,不如说是考你能否从真实且不完美的数据中得出正确结果。面试官会关注几个具体的习惯。

粒度与连接的正确性

最常见的错误是“静默扇出”:连接一对多关系时,指标被重复计算却毫无察觉。优秀的候选人会在连接之前先说明每张表的粒度,比如“一行代表一个订单明细”,并在每一步之后核对行数是否合理。

窗口函数

ROW_NUMBER、RANK 以及 SUM/AVG OVER (...) 可以回答“每组前 N 名”和累计求和的问题,而且不会像 GROUP BY 那样把行折叠掉。这是 FDE SQL 环节中最大的区分点。

CTE 与可读性

真实的数据转换往往是多步骤的。将它们拆分为命名的 CTE,表明你能写出客户团队可以维护的 SQL——而这正是这份工作的要求。

NULL 处理

NULL 不等于任何值(要用 IS NULL),而且聚合函数会静默跳过 NULL。粗心对待 NULL 是经典的错误答案陷阱。

常见题型

几种模板题型覆盖了大部分 FDE SQL 环节。识别出你拿到的是哪一种,就成功了一半。

每组前 N 名

“每位客户金额最高的三笔订单。”在 CTE 中使用窗口函数(ROW_NUMBER 或 RANK,按组分区、按指标排序),然后筛选 rank <= N。这里只想着用 GROUP BY 就是陷阱。

累计求和与移动平均

“按天累计的收入”或“7 天滚动平均”。使用 SUM 或 AVG OVER (ORDER BY date ROWS BETWEEN ...)。要明确指定窗口帧;默认的窗口帧常常出乎意料。

同期群与留存

“一月份注册的用户中,之后每个月有多少人活跃?”先把每个用户锚定到其首个事件,然后按月份偏移量连接回活跃数据。它同时考察连接粒度和日期分桶。

去重与缺口

将重复行折叠为最新版本,或找出序列中的缺口。ROW_NUMBER 为每个键选出一行;LAG 和 LEAD 则将某一行与其相邻行进行比较。

如何准备

要在真实数据库上练习,而不是背卡片;这一环节考察的正是编写和运行查询的肌肉记忆。反复练习 GROUP BY 配合 HAVING、多表连接,尤其是窗口函数,直到“每个部门收入最高者”和“每位客户的累计总额”这类问题能脱口而出。

Rung 提供了一个浏览器内的实时 SQL 沙盒,包含 19 道题目,从简单的 GROUP BY 到 Hard 难度的窗口函数和关联子查询题,每道题都会与参考结果进行核对。

立即试用,无需注册账号

基于原始日志的各服务错误率

每行日志的格式应为 "service level message"(由三个或更多空格分隔的部分,其中 level 为 INFO、WARN 或 ERROR)。给定一个列表……

在浏览器中直接解题 →

编辑器和测试运行器直接在页面中加载。这正是 FDE 编程轮使用的格式。

在实时沙箱中练习 FDE SQL

常见问题

前沿部署工程师面试会考察哪些 SQL 内容?

GROUP BY 和 HAVING、多表连接、子查询、CTE,以及最重要的窗口函数(ROW_NUMBER、RANK、SUM/AVG OVER)。题目通常是基于真实业务模式的多步数据转换,而不是单行小知识题。

FDE 面试会考窗口函数吗?

会,窗口函数是 SQL 轮中最能拉开差距的考点之一。请准备好应对“每组前 N 名”、累计求和以及仅靠 GROUP BY 无法干净解决的排名类题目。

如何快速准备 SQL 面试?

练习编写并运行真实查询,而不是死记语法。重点放在连接粒度(避免重复计数)、窗口函数和多步 CTE 上。一个能将你的答案与参考结果进行核对的实时 SQL 沙箱,能最快培养正确的直觉。

FDE SQL 轮与数据分析师 SQL 筛选有何不同?

题型有重叠,但 FDE 轮更侧重于在杂乱、贴近真实的模式上进行多步转换,以及口头推理正确性(粒度、NULL、重复计数),因为实际工作中你是在客户的数据库里现场编写这些查询,而不是面对一张干净的面试表。