news 2026/9/1 16:49:11

数据岗笔试备战复盘:从SQL窗口函数到业务分析策略

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数据岗笔试备战复盘:从SQL窗口函数到业务分析策略

1. 2023秋招小红书数据岗第二批笔试:先弄清楚它到底考什么

2023年秋招的小红书数据岗第二批笔试,是很多应届生和初级数据从业者绕不开的一道坎。相比第一批笔试,第二批的题量更大、题型更杂,而且部分题目会故意设置一些“看起来能做、上手就错”的坑。当时我在准备这批笔试时,最强烈的感受是:它不像传统互联网大厂那种“两道算法题定生死”的风格,而是把数据处理全流程拆成选择题、SQL题、Python题、业务分析题放在同一套卷子里,时间还压得比较紧。正因如此,很多人不是败在知识储备上,而是败在时间分配和答题节奏上。

这篇复盘想解决的核心问题是:第二批发数据岗笔试到底在考什么,以及应该按什么优先级复习。不管你是刚投完简历准备笔试的应届生,还是想跳槽到社区类产品做数据分析的初级打工人,这篇文章都会尽量按照我当时“踩过坑之后整理出来的复习框架”来讲,尽量少说废话,多给能直接落地的思路。

先说结论:这类笔试复习真正的权重排序应该是——SQL > 数据结构与算法 > Python数据处理基础 > 业务分析思维 > 数据治理等概念题。不是说你每个岗位都要按这个顺序,而是从“投入产出比”来看,SQL是单位时间内提分最快的,算法题决定了你能不能过系统筛选,Python题则直接影响你在面试官印象里的专业度。接下来的章节就把这些模块逐一拆开,结合具体的场景和题型来说。

2. 核心考点拆解:从数据结构到业务题的复习优先级

2.1 数据结构与算法题:该刷到什么程度?

数据岗的算法题没有纯后端岗那么硬核,但也不能完全不准备。我观察到的普遍情况是,小红书这类偏业务和内容生态的公司,笔试里的算法题会刻意“场景化”。比如给你一段用户日志,让你统计连续登录天数;给你一批订单记录,让你找出金额最大的Top N用户。这些题本质上还是在考察数组、哈希表、排序、双指针、动态规划等基础能力,但包装了一层业务外衣。

我当时给自己定的目标是 LeetCode 前 200 题里,简单题稳定过关,中等题能写出暴力解并尽可能优化。尤其是哈希表这种数据结构,在数据岗笔试里出现频率极高,因为很多题最后都会落到“去重”或“计数”上,哈希表是最直接的工具。图的遍历虽然出现频率不高,但一旦出现就会很致命。像“判断两个用户是否是好友关系链上的闭环”这类题,如果没复习过 BFS/DFS,现场很容易卡住。

为什么不建议花大量时间刷 hard 题?因为数据岗笔试时间有限,算法题往往只占 30% 左右的分数,你把 90 分钟全耗在一道 hard 题上,后面的 SQL 题可能连题面都没看。我当时就犯过这个错误,在第一道算法题上硬刚了 40 分钟,结果后面有两个 SQL 表结构题没写完,直接拉低了整体得分。复盘之后我才意识到,算法题的目的是“筛掉完全不会写代码的人”,而不是“筛出竞赛选手”。

2.2 SQL数据提取:窗口函数练到条件反射

SQL 是数据岗笔试里的绝对大头。如果给各模块估分,我倾向于认为 SQL 题能占 30% 到 40%,比算法题更重。小红书这类以内容和社区为基本盘的平台,业务场景天然适合出 SQL 题:用户发布的笔记、浏览记录、点赞评论、订单转化、直播互动等,每个场景都能衍生出一堆查询题。

考察重点集中在几类:分组聚合、条件筛选、多表关联、子查询,以及最重要的窗口函数。窗口函数几乎成了互联网数据岗笔试的标配考点,尤其是 ROW_NUMBER()、RANK()、DENSE_RANK()、LAG()、LEAD()、SUM() OVER(PARTITION BY ...) 这类写法,必须练到能盲写的程度。

举一个很典型的例子,假设题目是“统计近30天内,连续3天以上发布笔记的用户数量”,你会怎么做?很多人的第一反应是用自连接或者子查询,但更高效的思路是用 LAG() 函数构造出每个用户的前两次发布日期,再判断当前日期和这两个日期之间是否连续。代码大概是这样的:

WITH t AS ( SELECT user_id, publish_date, LAG(publish_date, 1) OVER(PARTITION BY user_id ORDER BY publish_date) AS prev_date_1, LAG(publish_date, 2) OVER(PARTITION BY user_id ORDER BY publish_date) AS prev_date_2 FROM user_publish_log WHERE publish_date >= DATE_SUB(CURRENT_DATE, INTERVAL 30 DAY) ) SELECT user_id FROM t WHERE DATEDIFF(publish_date, prev_date_1) = 1 AND DATEDIFF(publish_date, prev_date_2) = 2;

这类题看起来不难,但考场上容易漏掉去重环节,也就是同一个用户同一天发布多条笔记时应先聚合一次。这个细节我需要重点提醒,因为我在练习时就踩过:如果不加DISTINCT,结果会多出一堆重复行,最后的计数自然就偏了。SQL 题给分往往看最终结果,一道题结果不对,中间过程写得再漂亮也拿不到多少分。

2.3 Python与pandas数据清洗与处理:实操题重灾区

pandas 数据清洗和处理是笔试里比较能拉开分差的模块。有的同学觉得 SQL 好写,Python 难写;有的同学正好相反。但小红书这批笔试的画像更偏向“数据分析和数据运营候选人”,所以 pandas 题目的难度一般控制在:拿到一个 DataFrame,做缺失值填充、重复值去除、字段类型转换、时间处理、多表合并等操作。

我当时遇到过一类很典型的题型:给你一份用户表和一份订单表,订单表里有一些下单时间为空、用户ID重复、金额字段是字符串类型的数据,需要你把两份表合并成一份宽表,再按用户维度统计每个用户的订单数、订单总额、最近一次下单时间。这个题有完整的操作链条,每一个中间步骤都有明确的分数点。

其中最重要的心法不是背 API,而是理解每一步在做什么。缺失值填充用fillna不稀奇,但什么时候用method='ffill',什么时候用中位数填充,是根据业务含义决定的。用户ID重复时要用drop_duplicates,但也要注意是保留第一个还是保留最后一个,这会影响统计口径。字段类型转换用astype,但不能硬转,遇到异常值要先处理。时间处理用pd.to_datetime,但很多笔试环境里的 pandas 版本可能不支持新参数,建议优先用最基础的方法,比如:

df['order_time'] = pd.to_datetime(df['order_time'], errors='coerce') df = df.dropna(subset=['order_time']) df['order_date'] = df['order_time'].dt.date

这种写法简洁、兼容性好,也能清楚表达你的处理逻辑。我个人的经验是,不要在这种题里写“过于聪明”的代码,比如用一堆高阶函数或者列表推导式,阅卷人(或者自动判分脚本)更看重的是你能不能把逻辑写清楚,而不是炫技。

3. 从热词反推笔试考点:数据治理、数据集与业务分析的隐藏分

3.1 数据治理与数据质量:概念题也能看出工程素养

很多人在准备数据岗笔试时,会忽略数据治理和数据质量这类偏“工程规范”的概念题。这类题目不会直接要求你写代码,但会以一种背景题的形式出现,比如“给你一个数据仓库,怎么设计数据质量监控方案”“怎么处理重复上报的埋点数据”等。如果你只是在刷 LeetCode 和 SQL 题,看到这些题时很容易懵。

我复习时把这部分当成“补工程常识”来处理,重点理解几个关键词:数据血缘、数据标准、数据质量监控、数据备份与恢复。尤其是“数据备份与恢复”,在业务场景里非常重要,笔试中常以“如果某一天的数据缺失,如何通过备份恢复或者重新计算得到”的形式出现。虽然不要求你写出恢复脚本,但你要能说出可行的方案,比如离线备份表、增量备份、全量重跑等。

数据治理题的高分答题思路是:先定义问题,再拆解分层,最后落到可执行的动作。比如“如何保证埋点数据的准确性”,我会这样回答:先看埋点上报链路,确认是否存在延迟和丢失;再看数据仓库的清洗规则,是否有去重和空值过滤;最后加一个监控预警,基于同环比波动来触发告警。这样的回答既有工程视角,又不会空泛。

3.2 数据集构建与数据标注:算法向笔试的高频场景

如果你的意向方向是算法数据岗,那“数据集构建”“数据标注”“数据增强方法”这类关键词的命中概率会显著提升。这些题往往考察你对训练数据源头和特征工程的理解。比如给你一组小红书笔记文本,要求你做文本分类任务,你怎么构建训练集?怎么处理类别不平衡问题?怎么选择数据增强方法?

我自己复盘时发现,数据增强并不是简单地说“加噪声”“做同义词替换”就能拿分,笔试更看重的是你有没有考虑过“增强后的数据是否符合原始数据分布”。以文本分类为例,如果直接对短文本做随机删除,很可能会把核心语义删掉,反而让模型学到错误信息。更好的做法是先定位关键词,再做局部扰动。如果你能写出类似“按实体替换 + 回译 + 最小编辑”的组合策略,分数会比干巴巴列一堆术语高很多。

另外,“yolov8训练自己的数据集”“mmrotate训练dota数据集”这类偏视觉的热词也说明,算法方向的笔试或者加分题,可能会涉及数据标注格式、类别不平衡、数据增强策略等问题,并不要求你上手训练模型,但至少要知道标注数据结构长什么样,比如 COCO、VOC、YOLO 格式的区别,以及如何从一份原始数据构造出符合训练要求的标注文件。这里不需要特别深入,但概念不能是空的。

3.3 业务分析与数据可视化:把统计结果讲成决策建议

数据岗笔试最后往往有一道业务分析题,通常不会提供真实的数据,而是给一个开放性业务场景,比如“小红书笔记的平均曝光量下降了,请你分析可能的原因,并给出数据验证方案”。这类题没有标准答案,但非常能看出一个人是不是只会跑数、不会思考。

我的建议是,答题时采用“先拆维度、再给假设、最后给验证方法”的结构。先拆维度,把曝光量下降拆成渠道、内容类型、用户分群、时间周期等;再给假设,比如“某一天推荐策略变更导致低质内容曝光占比上升”“某类作者发布频率下降导致供给不足”;最后落到验证方法,比如看分桶实验、对比历史同期、分析用户行为漏斗。不要一上来就写“加强内容审核”“提升推荐准确性”这种正确的废话。

数据可视化也是容易被忽略的点。笔试里不一定会让你画图表,但可能会给你一组数据,问你“用什么图表最合适”。比如“连续30天DAU趋势”应该用折线图;“不同品类笔记占比”应该用饼图或堆叠柱状图;“用户阅读时长和点赞量的关系”要用散点图。你要能说清楚为什么选这个图表,而不是把所有图表类型都列一遍。数据可视化的本质是把信息编码成视觉元素,选错图表等于编码错误,即使数据没错,读者也读不出结论。

4. 实操过程中的时间分配与常见翻车点

4.1 笔试环境与时间分配:先做哪类题更划算?

笔试时的时间分配,往往比多刷几道题更重要。我自己的经验是,拿到卷子后不要立刻从第一题开始做,而是先花两分钟把整张卷子的题型、题量和分值分布扫一遍。如果分数占比最高的是 SQL,那就先保证 SQL 有时间做完;如果你明显擅长 Python,也可以先做 Python 热身,再回来啃算法题。

常见的考试配置可能是四部分:选择题10-15道、编程题2-3道、SQL题2-3道、业务分析题1道。我的策略是:先做选择题,因为选择题往往是最花时间但单位分值偏低的,而且答案是从几个选项里选,纠结太久会崩心态。建议每道选择题控制在2分钟以内,拿不准的做个标记后立刻跳过,最后再回头补。

编程题和 SQL 题建议分开做,中间穿插一两个简单选择题换换脑子。业务分析题虽然主观性强,但只要写下结构化思路,得分往往比较稳定,所以宁愿编程题AC率低一点,也要给业务题留出15到20分钟。另一个容易被忽略的点是,笔试系统断点续做的兼容性不一定好,开考之前一定要测试网络环境,关闭所有自动更新和弹窗,避免写代码时被系统打断。

4.2 代码细节导致AC低的三个典型原因

我复盘过一批数据岗笔试,发现很多同学明明思路正确,但代码就是AC率很低。最常见的原因有三个:变量名拼写错误、列表越界、忘记处理边界条件。这三类问题都非常隐蔽,因为在本地编辑器里你可能已经通过了大部分测试用例,但在笔试系统的隐藏用例里就会暴露。

第一个是变量名拼写错误。笔试时间一紧张,很多人会把user_iduserID混着写,Python 对这种大小写敏感,一旦写错就直接完蛋。我建议在写代码之前先统一命名风格,想清楚用什么变量名,再开始写。

第二个是列表越界,尤其是在处理指针和排序问题时。比如双指针的循环条件,如果你只写了while left < right,但没考虑leftright在边界处的更新顺序,很容易出现数组越界或死循环。更好的做法是先把边界条件写清楚,再写循环体。

第三个是忘记处理空值或者空数组。数据岗笔试题给的输入往往是模拟的“表数据”,如果你在代码里假设列表一定非空、字典一定包含某个键,那一旦出现None或空行,代码就会崩。解决方案是在数据读入阶段,先做一次必要的空值检查,不要指望测试用例里全部都是干净数据。

4.3 业务题答题陷阱:答得越多得分越低?

业务分析题最容易犯的错误,不是答得太少,而是答得太多、太散。很多同学为了显得专业,会把所有知道的指标和术语都堆上去,比如转化率、留存率、ARPU、LTV、DAU、MAU。但面试官其实最反感这种“名词堆砌”式的答案,因为它没有体现逻辑链条,只是证明你知道这些词。

正确的答法是选一个最核心的分析路径,讲透。比如题目问“为什么推荐流人均时长下降了10%”,你可以选“分位点分析 + 新老用户差异”这一个切入点,先看时长下降是否集中在某个分位点,再看新用户和老用户是否有显著差异,然后给出假设和验证方案。一条清晰的逻辑线,比你列十个指标但没有结论要强得多。

另一个业务题陷阱是忽视成本约束。比如你说“我们可以上线A/B实验来验证”,但题目背景里如果写了“当前资源有限,无法做长期实验”,那就要考虑用历史数据模拟或者同期群分析来替代。能意识到约束条件并用合适方法回应,才是业务分析师区别于普通跑数员的加分点。

5. 给后来者的一条条实干建议

回顾这批笔试,我最想强调的一句话是:数据岗笔试考的不是某个单独的知识点,而是你面对一个不熟悉的业务数据问题时,能不能快速拆解、找到数据入口、给出可执行的分析方案。这个能力通过短期刷题不一定能突飞猛进,但可以通过刻意练习慢慢建立起来。

具体来说,我建议在接下来两周内做三件事。第一,把SQL窗口函数刷到闭眼能写,尤其是ROW_NUMBER()LAG(),这是性价比最高的提分点。第二,用一份真实的业务数据模拟笔试流程,给自己定90分钟,做完之后严格对照答案复盘,重点看有没有因为代码细节扣分。第三,把常见业务分析题整理成自己的答题框架,每次答题先分维度再给假设,最后落到验证方案,形成肌肉记忆。

我在实际准备过程中还有一个体会:不要迷信“面经里的原题”。笔试题目每年都在变,但考察底层能力是稳定的。如果你能把数据结构、SQL、数据清洗、业务分析这四个模块都过一遍,即使题目换成新的业务场景,你也知道该从哪下手。这时候再回头看小红书数据岗第二批笔试,你会发现它没有那么神秘,它就是一份“业务+技术”的融合型试卷,认真准备的人都能拿到一个体面的结果。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/1 16:44:45

开发者合规使用AI编程助手:从API集成到工作流实践

最近在技术社区看到不少开发者讨论如何获取和使用最新的AI工具来提升开发效率&#xff0c;其中关于GPT-4等高级模型服务的访问和订阅是一个高频话题。对于开发者而言&#xff0c;能够稳定、合规地使用这些强大的工具来辅助代码编写、技术方案设计和问题排查&#xff0c;无疑能极…

作者头像 李华
网站建设 2026/9/1 16:40:23

贝壳找房秋招Java笔试复盘:考点、算法与避坑指南

贝壳找房的秋招笔试&#xff0c;我是参加的第二批。如果你也正在投递简历、准备技术笔试&#xff0c;我可以先把结论放在前面&#xff1a;贝壳这套Java工程师笔试题&#xff0c;题型结构非常接近一线互联网公司的常规筛选组合——基础知识选择题加算法编程题&#xff0c;广度大…

作者头像 李华
网站建设 2026/9/1 16:39:59

跑团回放制作指南:从标题到取舍,让回放成为作品

三小时的跑团语音&#xff0c;七张手绘地图&#xff0c;十几个角色发言片段&#xff0c;最后只留下一句话标题&#xff1a;《莫索里哀的圣职者》07 有钱人的床。这是我最近在讨论一个跑团replay项目时看到的篇目。说实话&#xff0c;这位制作者已经比我见过的大多数回放更像一部…

作者头像 李华
网站建设 2026/9/1 16:38:29

Python 和Java 哪个更适合做自动化测试?——软件测试圈

诸多小伙伴, 于功能测试领域开始工作, 历经二到三年后, 发觉自身已然在作此功能测试时做到极优情境, 已然抵达职业发展以及薪资发展的瓶颈阶段, 遂萌生出想要去学习一些内容, 以对自身技能予以提升的想法。那对于功能测试升级来讲, 正常会有类似这样的3个主流发展走向: 其一为性…

作者头像 李华
网站建设 2026/9/1 16:38:00

如何用Python实现多目标水库调度优化?

一、多目标水库调度优化中的建模与求解概述于水资源管理范畴内, 多目标水库调度优化属于一个典型的颇为复杂的优化问题。其核心面临的挑战之处在于, 怎样于多个彼此相互冲突的目标, 像发电、灌溉、防洪这些目标之间去开展权衡, 并且在非线性、高维度以及多约束的状况条件之下, …

作者头像 李华