SQL 和 Python 广告技术面试题:完整指南

最后更新: 四月8 2026
  • 广告技术领域的面试主要考察中级 SQL、Python(含 pandas)以及分析能力。
  • 掌握 SQL 中的 JOIN、GROUP BY、子查询和窗口函数以及 pandas 中的等效函数至关重要。
  • 了解准确率、F1 或 ROC-AUC 等模型评估指标,对于高级分析岗位来说具有重要价值。
  • 有效的备考方法包括理论学习、大量的实践练习以及学习如何大声解释推理过程。

广告技术面试题:SQL 和 Python

如果你正在准备广告技术、数字分析或数据分析方向的面试,迟早都会遇到令人头疼的技术测试。公司会通过这个测试来检验你是否真正掌握了简历上列出的技能:比如用 SQL 提取数据,用 Python 处理和分析数据,以及一些分析思维能力,以免在大量的表格和脚本中迷失方向。

好消息是,技术面试并非神秘莫测:它们通常都围绕着SQL、Python 和模型评估这几个核心概念展开。如果你能透彻理解这些基础知识,通过实际案例练习巩固所学,并学会清晰地阐述你的思路,那么你就能比其他候选人更具优势。

为什么技术面试令人恐惧(以及如何缓解恐惧)

人工智能参数
相关文章:
人工智能的参数及其如何塑造模型

在广告技术领域的数据分析师或产品经理岗位上,技术面试通常会结合概念性问题和实际操作练习。你可能会被要求解释某个 SQL 子句的功能,或者解决一个涉及程序化广告活动数据的业务案例。

通常情况下,你会从三个方面接受评估:中级 SQL 技能(JOIN、GROUP BY、子查询、窗口函数)、面向数据的 Python 编程技能(pandas、数据清洗、聚合、合并)以及解读结果和沟通分析的能力。他们寻找的不是资深数据科学家,而是能够以稳健可靠的方式处理数据的人才。

许多求职者常犯的错误是只注重死记硬背语法,而忽略了练习完整的习题,例如 HackerRank、StrataScratch 等平台或公司内部测试中常见的那些题目。你的目标应该是,在面试前就已经解决过几十个非常相似的查询和脚本。

广告技术和数据分析师面试中通常需要具备 SQL 水平。

在广告技术或数字营销领域,分析师职位通常要求应聘者精通经典关系型 SQL:能够从多个表中提取数据、合并、分组、筛选数据并创建有用的指标。​​他们不会要求你具备数据库管理技能,但你应该能够熟练地处理中等复杂程度的查询。

通常,测试会包含结合了INNER JOIN、LEFT JOIN、带有 WHERE 子句的筛选器、带有 GROUP BY 的聚合以及使用 HAVING 子句对聚合结果进行条件判断的查询。在此基础上,在更高级的场景中,经常会看到用于排名、累计总计和行比较的子查询和窗口函数。

在广告技术领域,你很可能会回答一些业务问题,例如“哪些广告系列的点击率高于行业平均水平?”或者“哪些发布商的展示次数比上个月有所下降?”要高效地解决这些问题,通常需要对相关子查询和窗口函数有一定的了解。

常见的 SQL 基础问题(以及如何解答)

几乎所有数据相关的技术面试都会包含一些基本的SQL理论题。他们并非想刁难你,而是为了确保你拥有扎实的基础。

最常见的问题之一是WHERE 和 HAVING的区别。最简单的解释是,WHERE在分组之前筛选单个行,而 HAVING 筛选已经聚合过的分组。此外,需要注意的是,涉及聚合函数(COUNT、SUM、AVG 等)的条件应该放在 HAVING 子句中,而不是 WHERE 子句中。

另一个经典问题是: JOIN有哪些类型,以及何时使用哪种类型:INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN,以及在某些情况下使用的 CROSS JOIN 或自连接。在数据分析中,当需要保留完整的主数据集(例如,所有用户)时,即使辅助表中没有关联的记录(例如,购买记录),也广泛使用 LEFT JOIN。

基本 SQL 查询及其逻辑示例

为了让您了解“最低合理”水平,您应该能够从内存中编写查询,例如选择特定列、筛选行和对结果进行排序。最基本的常见问题包括:如何从表中提取所有列、如何仅选择某些列,或者如何使用 AS 应用易读别名。

经常会被问到如何使用WHERE 子句处理多个条件,例如结合使用 AND、OR 和 NOT,或者如何对数值和日期使用比较运算符(<、<=、>、>=、=)。许多公司强调NULL值过滤,在这种情况下,仅仅使用等号是不够的;还需要使用 IS NULL 或 IS NOT NULL。

另一种经典的过滤方式是基于文本的,使用LIKE函数和通配符 % 和 _ 进行模式匹配。例如,您可以查找名称包含特定词语的营销活动,或者电子邮件地址以特定域名结尾的用户。需要注意的是,LIKE '%text%'会在字符串中的任何位置搜索该模式。

最后,本基础部分通常会介绍如何使用 UPDATE 语句更新记录,如何使用 WHERE 子句筛选要修改的行,以及如何使用DELETE FROM 语句并清除条件来删除行。务必始终强调使用特定 WHERE 子句的重要性,以避免意外删除表中一半的数据。

中间查询:GROUP BY、HAVING、子查询和 UNION

一旦你晋升到初级以上级别,几乎所有公司都会开始重视你对GROUP BY、聚合函数以及 HAVING 子句结合使用的筛选功能的掌握程度。你将每天使用这些功能来生成广告系列、受众群体和创意素材的效果报告。

  什么是 HTML 5:完整介绍

它的工作原理如下:GROUP BY 子句按一个或多个列对行进行分组,您可以对这些组应用SUM、COUNT、AVG、MIN 和 MAX 等函数来计算指标。HAVING 子句接下来用于仅保留满足特定条件的组,例如,销售额超过某个阈值的客户。

另一个反复出现的主题是子查询:即在一个查询中嵌套另一个查询。它们通常用于根据先前步骤中计算出的值进行筛选,例如选择销售额高于全球平均水平的客户或展示次数高于 90% 分位数的广告系列。

你经常会被问到UNION 和 UNION ALL的区别。UNION 将两个具有相同模式的结果集合并,并删除重复项;UNION ALL 也执行相同的操作,但会保留所有行,即使它们重复出现。在数据分析中,出于性能考虑以及为了保留所有原始记录,你通常会更倾向于使用 UNION ALL。

窗口函数:SQL 的又一次飞跃

窗口函数已成为一定程度的技术测试标准,尤其是在广告技术相关岗位上,需要分析一段时间内的趋势、广告系列排名或投资总额。

关键在于,窗口函数会计算与当前行相关的一组行的值,但不会像 GROUP BY 那样折叠结果。换句话说,你仍然可以看到每一行,但同时还会看到基于“窗口”数据计算出的聚合值。

典型的语法是使用函数(SUM、AVG、RANK 等),后跟 OVER,并在 OVER 中定义分区(PARTITION BY)和排序(ORDER BY)。例如,计算销售人员的销售排名或每日累计展示次数。

如果您想展现您的熟练程度,您应该熟悉RANK、DENSE_RANK、ROW_NUMBER、LAG 和 LEAD等函数。这些函数对于根据广告系列的效果对其进行排名、比较每个周期与前一个周期,或识别关键指标的同比变化都非常有用。

CTE、累计总数和移动平均值

在现代求职面试中,SQL 代码的可读性备受重视。因此,你经常会被问到公共表表达式 (CTE)。CTE 本质上是一种命名的临时表,使用 WITH 子句定义,并且仅在查询执行期间存在。

CTE(公用表表达式)用于将复杂的查询分解成逻辑块,并重用中间结果。例如,您可以先在 CTE 中计算每个广告系列的每日指标,然后在主查询中对该结果执行额外的聚合或筛选操作。

另一个非常常见的做法是使用 SUM 函数作为窗口函数来计算累计总数。在广告技术领域,经常会要求提供累计展示次数、点击次数或支出金额,以便了解广告系列随时间推移的表现。

与此相关的是移动平均线,它将平均值作为窗口函数应用于偏移后的行帧(例如,前两个日期和当前日期)。这是一种平滑时间序列和检测趋势的简单方法,无需过度依赖每日峰值。

数据分析师通常需要具备一定的 Python 水平

大多数数据分析师职位(包括广告技术领域)并不要求你成为机器学习专家,但确实希望你熟练掌握 Python 和 pandas 库。通常,你会被要求加载数据集、清洗数据集、转换数据集,并获取简单的指标或可视化图表。

Python 测试通常侧重于诸如从 CSV 文件读取数据、检查空值和列类型、过滤行、创建新列、使用 groupby 进行聚合以及连接 DataFrame 等操作。在很多情况下,测试语句与 SQL 部分几乎完全相同,只是采用了 pandas 的格式。

分析师测试中通常不会要求从头开始构建复杂的模型,但他们可能会重视你使用 scikit-learn 连接来训练基本模型的能力,以及最重要的,你对衡量模型性能的基本指标的了解。

你应该掌握的 pandas 基本操作

要成功完成任何 Python 数据练习,您必须熟练掌握 DataFrame 的基本操作。第一步通常是使用`read_csv`加载文件,并使用 `head()`、`info()` 或 `describe()` 等方法探索其结构。

清理空值的部分通常也会出现:使用 isnull().sum() 计算每列中有多少个空值,决定是使用 dropna() 删除整行或整列,还是使用 fillna() 填充缺失值,例如使用列的平均值或中位数。

至于筛选器,你需要根据数值或类别列构建条件,例如选择销售额超过特定金额的数据,或者选择满足多个条件的行,并使用 & 和 | 运算符进行组合。关键在于熟练掌握如何编写df 语句。

pandas 中的`groupby` 函数的解释几乎总是包含在内,因为它直接等价于 SQL 中的 `GROUP BY` 函数。你可以按一个或多个列进行分组,然后应用诸如 `sum`、`mean`、`count` 等聚合函数。`groupby('column').agg()` 语法至关重要。

数据框之间的连接和合并

就像掌握 SQL 中的 JOIN 操作至关重要一样,掌握pandas 中的pd.merge 函数也必不可少。公司会想了解你是否知道如何连接共享一个键的数据集,例如,将用户表与事件或购买记录表连接起来。

合并函数接受两个要连接的 DataFrame、键列(on)和连接类型(how)作为参数,连接类型可以是“left”、“right”、“inner”或“outer”,就像 SQL 中一样。在数据分析中,左连接主要用于保留主数据集,并添加来自辅助表的属性或指标。

  关于编程中的实例

在面试中,最好提及一些细节,例如当键两侧出现重复键时该如何处理,或者如何处理列名与参数后缀冲突的情况。这能展现出更高的成熟度。

典型的、更偏理论性的Python问题

除了 pandas 之外,许多面试还会包含一小段Python 通用问题,以考察你对这门语言的理解。这些问题通常比较简短,涉及 Python 的特性、内存管理、数据类型或一些简单的语法点。

反复出现的主题之一是Python 中的自动内存管理,它基于用户不直接访问的私有堆和负责释放不再有引用的对象的垃圾回收器。

人们也经常被要求将Python 与 Java进行比较,这并非为了宣布谁胜谁负,而是为了证明你理解它们之间的区别:Python 更具动态性,语法更简洁,非常适合原型设计和数据科学,而 Java 则往往在企业和高性能生态系统中占据主导地位。

其他常见问题包括lambda 表达式(用于简单操作的匿名函数)、将对象序列化为字节并检索它们的序列化/反序列化过程,以及列表和元组之间的区别,其中列表是可变的,用方括号定义,而元组是不可变的,用圆括号定义。

面试中更多关键的Python概念

在Python中,经常会被问到如何删除或复制对象。通常,只需解释可以使用`del`语句删除引用,浅拷贝使用`copy.copy()`,而深拷贝则需要`copy.deepcopy()`即可。

另一个可能会出现的概念,尤其是在后端配置文件中,是所谓的“狗堆效应”,它描述了许多用户或进程同时攻击资源(例如网站或缓存)导致系统饱和的场景。

与生态系统相关的问题还包括Python 可以使用哪些数据库。最明智的做法是列举一些常用的数据库,例如 MySQL、PostgreSQL、SQLite、MongoDB 和 Oracle,并指出 Python 通常可以很好地与各种关系型和 NoSQL 数据库引擎集成。

最后,经常会出现一些更简单的问题,例如如何使用 sorted on items 对字典进行排序,命名空间是什么以及它的用途是什么(将名称与不同作用域中的对象关联起来),或者如何使用 subprocess 模块和 run() 或 Popen() 等函数启动子进程。

Python 模型评估指标:您应该了解的最低限度知识

虽然许多分析师职位不要求你设计深度学习架构,但熟悉评估分类模型的基本指标是很常见的,尤其是在广告技术中涉及数据产品、广告活动归因或欺诈检测的情况下。

首先是混淆矩阵,它总结了二元或多类分类器的成功和失败情况。在二元分类中,混淆矩阵分为真阳性 (TP)、真阴性 (TN)、假阳性 (FP) 和假阴性 (FN)。透彻理解这四个类别至关重要。

从矩阵中可以导出准确率(衡量正确预测占总预测数的百分比)、精确率(真阳性/正例预测数)和召回率或灵敏度(真阳性/实际正例数)等指标。当类别不平衡时,后两个指标尤为重要。

F1分数结合了准确率和召回率,并使用调和平均值进行计算,对过低的准确率或召回率进行惩罚。在假阳性和假阴性都会造成损失的场景中,例如欺诈检测、线索评分或疾病检测,F1 分数是一个常用的指标。

其他高级指标:ROC曲线下面积、对数损失、杰卡德系数等

对于数据科学或市场分析方面要求较高的职位,公司会考察你是否掌握了更高级的指标,例如ROC-AUC,它衡量 ROC 曲线下的面积,反映模型区分类别的能力。

ROC曲线表示不同决策阈值下真阳性率(召回率)与假阳性率(1-特异性)之间的关系。随机模型的曲线会落在对角线上,而好的模型则会更接近左上角。曲线下面积越大,模型的判别能力就越好。

另一个常用的指标是对数损失(logloss),它评估预测概率的质量,并对过度自信和错误进行严厉惩罚。一个完美的模型的对数损失为 0,通常来说,对数损失越低越好。

他们可能还会问你关于杰卡德指数的问题,该指数衡量两个集合之间的相似度,计算方法是用交集的大小除以并集的大小。它常用于评估分类器、分割器和推荐系统等。

在某些情况下,会提到增益图和提升图,它们展示了仅使用部分人群(例如,模型评分最高的 20% 用户)就能覆盖多少目标受众。这在营销中被广泛用于决定优先定位哪些目标群体。

柯尔莫戈罗夫-斯米尔诺夫检验、基尼系数和深入评估

如果公司非常注重评分或风险模型,则可能会出现Kolmogorov-Smirnov (KS) 统计量等指标,该统计量衡量正负分数分布之间的分离程度。

KS 值接近 100(以百分比表示)表明该模型几乎完美地区分了两个群体;接近 0 的值则表明该模型的区分能力与随机猜测无异。实际上,现实世界中的模型通常介于两者之间,需要相互比较以选择最佳模型。

  Brackets IDE:权威指南——最流行的代码编辑器之一的历史、安装、扩展和优势

基尼系数是另一个从 ROC-AUC 推导出的指标,公式为 Gini = 2 × AUC – 1。它在信贷和保险领域非常流行,也被解释为不平等程度的衡量标准:基尼系数越高,模型将真正阳性结果集中在较高分数的能力就越强。

在更高级的面试中,你可能会被要求解释如何使用scikit-learn在 Python 中实现这些指标(例如,confusion_matrix、accuracy_score、roc_auc_score、f1_score……),并根据问题的性质和类别不平衡情况,评论何时使用每个指标。

技术面试中如何组织你的回答

除了你编写的代码之外,面试官还会密切关注你的思考方式和表达能力。即使你知道正确答案,结构混乱的回答也会让你显得比实际资历更浅。

回答技术问题的一个非常有效的方法是:首先,用一句话解释概念;然后,提供一个具体的例子(最好与你自己的项目相关);如果相关,还可以提及其他方法或细微差别。这种方法同样适用于 SQL、Python 或模型指标。

例如,如果有人问你 CTE 是做什么用的,你可以说它是一个命名的临时子查询,可以提高复杂查询的可读性,还可以补充说,当你需要多次重用中间结果时,就可以使用它,并提到在某些情况下,即使嵌套子查询不太清晰,它也可以被嵌套子查询所替代。

大声思考也至关重要。如果你遇到困难,不要保持沉默:把你正在尝试做的事情、你缺少哪些信息、你做了哪些假设都说出来。这有助于面试官了解你的思考过程,有时甚至能给你一些线索或澄清,让你更容易继续前进。

技术数据面试中最常见的错误

许多候选人被淘汰并非因为他们缺乏足够的SQL或Python技能,而是因为准备不足和沟通失误等因素共同作用的结果。充分了解常见的陷阱并避免它们至关重要。

第一种是死记硬背而不理解。如果你不能解释在什么情况下会使用这些工具,或者为什么它们比其他替代方案更可取,那么即使知道 RANK 或 lambda 函数的语法也用处不大。

另一个非常常见的错误是练习中未能检查数据质量。如果给定一个数据集,在开始汇总之前,建议检查是否存在空值、重复值或异常值,这些都可能影响分析结果。这体现了良好的判断力和实践经验。

避免提出澄清性问题也是非常不利的。例如,在讨论广告活动的商业案例时,询问季节性因素、目标时间范围、衡量指标是按用户还是按展示次数计算等等,都是非常合理的。保持沉默并妄加猜测往往会导致最终的解决方案与面试官的预期大相径庭。

最后,要避免“过度编码”的做法:明明查询或脚本可以更简单,却创建了不必要的复杂解决方案。在实际工作环境中,清晰性、可维护性和效率才是关键,而不是像解谜一样复杂的解决方案。

为期两周的强化训练计划

如果面试前时间有限,你可以制定一个精简的学习计划,涵盖三个关键领域:SQL、Python(含pandas库)以及实际应用。14天的时间不可能让你创造奇迹,但你可以达到扎实的技能水平和足够的自信。

头几天最好把重点放在初级到中级的 SQL上:复习基本语法、JOIN、GROUP BY、子查询以及最常用的窗口函数。要抽出时间阅读示例并编写自己的查询。

第二阶段,重点学习pandas:数据加载、清洗、筛选、分组、合并,以及使用 matplotlib 或 seaborn 进行一些简单的可视化。你不需要构建复杂的仪表盘,但你需要能够在 Python 中实现与 SQL 中相同的转换操作。

然后抽出几天时间,在 HackerRank 或技术面试题库等平台上进行实践练习。目的是熟悉这种形式、时间限制以及在受控环境下编写代码的压力。

最后,尝试进行一到两次完整的面试模拟:使用公开数据集,提出合理的业务问题,用 SQL 或 Python 解决这些问题,并大声解释你的整个推理过程,从最初的探索到最终的结论。

通过理论复习、指导练习和实际练习的良好结合,你将在面试当天具备扎实的SQL 中级知识、用于数据分析的 Python 以及模型指标——这正是大多数广告技术和数据分析公司所期望看到的。