小红书数据岗笔试复盘:从SQL窗口函数到内容生态分析
1. 第三批笔试的整体盘面题量、结构与时间分配2024年春招小红书数据岗笔试我报的是第三批。说实话关注小红书数据岗笔试的人不少但第三批能参考的经验贴明显比第一批第二批少。大家可能觉得批次越靠后题库重复率越高随便刷刷前两批的面经就能过关实际上完全不是这样。第三批的题型覆盖和出题倾向跟前两批有明显差异尤其是业务场景题的比重比前两批更重更考验你对内容社区数据体系的理解。先说说整场考试的结构。我参加的那场总时长是120分钟题量大致在30道左右分为四个部分单选题、多选题、SQL编程题、Python/算法编程题。单双选加起来大约20道分布在数据基础、概率统计、机器学习常识和业务常识几个方向。后面的编程题一共两道一道SQL一道Python每道题都有明确的业务背景包装不是裸写算法而是把问题嵌在“小红书场景”里。这里有个很关键的差异点前两批笔试很多人反馈SQL题和Python题都比较常规比如排名、分组聚合、链表反转之类但第三批的SQL题明显加大了业务复杂度会给你一张包含多个维度字段的用户行为表让你在“内容曝光-点击-互动”这条链路上做计算而不是单纯跑一个简单的group by。所以如果你只是机械刷LeetCode和SQL题没理解业务含义很容易在题目理解上栽跟头。时间分配上我的建议是单选多选控制在40分钟以内剩下的80分钟全部留给两道编程题。因为编程题的输入输出描述往往很长还要处理表结构说明、字段含义、业务规则读题就需要好几分钟两道题加起来光读题和理清输出逻辑就要花15分钟以上如果你前面选择题磨蹭太久后面编程题就会写得仓促而编程题的分值占比很大一道题可能顶五道选择题。从题量结构来看第三批笔试其实在暗示一个信号小红书数据岗要的不是只会刷题的人而是能理解社区产品逻辑、能从数据里解释内容生态现象的人。后面我会拆开每一部分细讲包括题型具体长什么样、哪些地方容易丢分、备考时该重点补什么。2. SQL题从“会写”到“写得对”的差距2.1 高频考点留存、漏斗与窗口函数小红书数据岗第三批笔试的SQL题整体难度我在做的时候觉得属于中上不是那种“一条SELECT就能过关”的水平。核心考点集中在三个方向留存计算、漏斗转化、窗口函数。这三个方向恰好也是内容社区日常数据分析中最常用的场景所以与其说是笔试不如说是在模拟你入职后第一周可能接到的取数需求。留存计算这道题核心逻辑是“用户在某个时间窗口内有过特定行为就算作留存用户”里面叠加了日期差、去重、分组统计几个要素。主流做法是用窗口函数先给每个用户标记首次行为日期再和后续行为日期做差算出每个用户在第N天是否活跃最后按日期和维度字段汇总留存率。这里最容易出错的两个地方是日期差的计算口径以及去重逻辑。题目里如果要求按用户维度计算留存你必须在子查询里先distinct user_id和date的组合否则后面join的时候会重复计数留存率直接翻倍结果错得离谱。漏斗转化题则更贴近小红书的业务实际。比如给你一张笔记曝光表、一张笔记点击表、一张互动表让你计算从曝光到点击再到互动点赞、收藏、评论任一即可的转化率。这里有一个小坑曝光表的粒度是“用户-笔记-日期”点击表和互动表可能粒度相同但互动表里存在一个用户对同一笔记多次互动的情况如果没有先去重漏斗的每一步人数都会被虚高转化率反而不降。正确的做法是把每一步都做成用户粒度也就是先group by user_id再去join漏斗的下一层。窗口函数这块常见的考察点是row_number、rank、dense_rank的区别以及sum、avg结合over(partition by ... order by ...)做累计值或移动平均。第三批笔试有一道题是让你计算每个用户在连续N天内的累计阅读量这个用rows between ... and ...的窗口范围来实现很多人会漏掉order by之后的窗口边界定义。如果你对窗口函数的语法不够熟建议考前把以下范式手写五遍累计求和、分组TopN、相邻两行差值、滑动窗口平均值、占比计算。这五个范式基本覆盖了数据岗笔试和日常工作中80%的窗口函数需求。2.2 我在笔试里犯过的低级错误我这场笔试的SQL题整体逻辑想明白了但最后在输出格式上吃了亏。题目要求输出某个指标保留两位小数并且要求按日期升序排列。我用round函数处理了小数位却忘了在order by里指定排序列默认输出顺序跟预期不一致。虽然SQL判分系统可能只校验部分结果但输出顺序错了后面的行对齐全部混乱很容易被判错过关。另一个低级错误是字段重命名。SQL题里经常有两张表都有user_id和create_time如果你在select里直接写create_time没有加表别名前缀就会报ambiguous column错误。这种报错在本地编辑器里会提示但在笔试的在线编辑器里有时候编译报错信息不够明显一道题的浪费几分钟去排查心态就会开始紧张。所以我建议不管题目中的字段重名不重名一律在select子句里写表别名.字段名这个习惯养成了能帮你避开大量低级问题。还有一个小细节容易被忽略输入数据的表名和字段名大小写敏感程度。有的在线笔试环境里表名是小写你写了大写也能跑通但有的环境严格区分大小写写错就直接报错。进笔试系统之后第一步应该快速看一下题目给的建表语句和示例输入别急着写代码先确认环境和数据格式比什么都重要。2.3 小红书风格的业务SQL题目长什么样说一道让我印象深刻的题目类型。题目给了一张“笔记互动流水表”字段大概包括log_id、note_id、user_id、action_type、create_time其中action_type有view、like、collect、comment、share五种。要求计算每种互动类型在周维度上的用户数并且要求输出每个用户最常用的互动类型。这个需求看起来不难但仔细想其实有几个层次。第一层是按周和action_type做group by去重用户数第二层是找出每个用户最常用的action_type第三层是把两个结果合并成一张表。很多人的解法是先分组统计生成临时表再join用户最常用类型逻辑确实能跑通但会显得非常绕。更清爽的做法是分两步第一步用group by user_id, action_type得到每个用户每种行为次数第二步用dense_rank() over(partition by user_id order by cnt desc)标出排名最后过滤rank1得到用户最常用类型。这种题目考的不是你不会而是你能不能找到最直接、可读性最强的写法。面试官看的是你的代码风格和思维清晰度不是越炫越好。3. Python与算法题考察的是数据处理思维3.1 从pandas操作到算法基础题目跨度很大第三批笔试的Python题跟第一批有一个很大的不同第一批有比较直接的“反转字符串”“两数之和”这种经典算法题第三批则更多偏向于数据处理能力。我遇到的一道题给了你一个嵌套的JSON结构里面记录了用户浏览笔记的时间序列数据要求解析并提取出每个用户连续浏览的最长天数。这题说白了就是LeetCode 128最长连续序列的变体只不过数据要自己先从JSON里拆出来。所以备考Python这部分不能只刷纯算法题还得把pandas的基础操作练熟尤其是这几类APIgroupby之后agg多个字段、merge时处理键冲突、apply自定义函数、pivot和melt做宽表和长表的互转、用datetime列做resample重采样。这些在小红书数据岗的实际工作中经常出现笔试也愿意考因为能直接看出你处理脏数据的能力。如果你对pandas不太熟我建议考前专门跑一遍“数据清洗五件套”读入CSV、查看空值、类型转换、按条件过滤、按组聚合。这套流程半小时就能过一遍但能让你的手感提升一大截。笔试现场如果遇到能顺手用pandas解决的题确实可以绕开复杂的手写循环但要注意题目环境里是否已经安装了pandas。我参加的那场笔试环境是支持pandas的但如果你不确定可以在答题前先尝试import pandas as pd如果报错就迅速改用纯Python处理不要在一棵树上吊死。3.2 现场写代码这些细节决定你能不能过在线笔试的Python题判分系统一般会有隐藏测试用例而且经常包含极端情况比如空列表、大量重复数据、超大数据量。这种情况下你需要注意几个细节。第一个是复杂度。如果数据量达到10的6次方级别O(n^2)的解法就可能超时。我的经验是写之前先估算一下时间复杂度和空间复杂度如果感觉可能要超时就提前优化成排序或哈希表的方案。比如最长连续序列这种题核心做法是先把元素放进set再去重查找复杂度控制在O(n)但如果你傻乎乎对每个元素都去数组里in查找复杂度就变成O(n^2)大数据量必挂。第二个是输入解析。笔试的输入格式经常不是列表一行给你而是多行字符串需要你自己split和map。如果输入里包含嵌套结构或者特殊符号最好先打印出来确认一下写个简单的读入函数再往下处理。我在笔试里就遇到过一次读入时忘记strip换行符导致最后一个数字拼接错误排查了十分钟才发现。从那以后我养成了一个习惯所有输入先用strip()清理再按delimiter切分。第三个是输出格式。有的题目要求输出保留指定小数位、有的要求按空格分隔、有的要求每组答案换行这些都要仔细看题目描述。我见过不少同学代码逻辑全对但因为输出多用了一个空格或者少换了一行被判错。这里有个小技巧把题目的示例输入在本地跑一遍对比自己的输出和示例输出用眼睛逐字符核对能避免大部分格式问题。3.3 数据采集与内容解析类题目的出现逻辑细看热搜词里出现了“小红书爬虫”“小红书分享链接解析id”“小红书图片下载”“小红书视频解析”这些词很多人会以为这是工具类需求但在数据岗笔试里这些词背后对应着一类很实际的题目方向内容ID解析、URL拼接、抓包字段提取。我记得第三批笔试的Python题里有一道就涉及到“输入一串小红书分享短链接解析出其中的笔记ID”这种题本质上就是字符串处理加规则匹配。这类题型的出现并不意外。数据岗日常要跟大量内容数据打交道笔记ID、作者ID、评论区ID都是最基础的主键字段能不能从一段混杂文本里快速提取出ID决定了你后续做关联分析、去重、统计的效率。笔试里考这道题就是在模拟你入职后每个人都要干的基础活。解题思路一般就是正则表达式或者字符串查找定位把ID前后特征字符串找出来然后按固定规则截取。我觉得这里有必要多说一句掌握字符串解析是为了理解数据链路不是为了私下抓取数据。虽然爬虫类工具在市面上讨论很多但从个人求职角度你更需要关注的是“如何在一个合法的数据体系内用好接口返回的内容”。所以准备这类题目时重点放在正则、split、replace、startswith、endswith这类基础操作上了解不同ID格式的规律即可没必要去研究什么绕过策略。4. 机器学习与业务场景题如何答出“数据岗”而非“算法岗”的区分度4.1 推荐冷启动问题不只看你怎么建模更看你怎么定义问题小红书的数据岗笔试里机器学习相关的内容肯定会出现但考察方式跟算法岗有本质区别。数据岗更关注“如何把一个业务问题量化成可分析的问题”而不是让你手推公式实现SVM。第三批笔试的多选题里就有一道关于“新笔记冷启动问题”的题目如果一篇新发布的笔记没有互动数据应该用什么策略让它获得初始流量。选项包括随机分配少量曝光、基于内容标签匹配兴趣人群、参考同领域历史爆款笔记、直接按粉丝量排序推荐。正确的倾向是把内容标签匹配和历史爆款参考结合起来而不是简单随机曝光。这里其实是在考你对内容平台分发逻辑的理解不是考一个具体算法。你需要在几个选项之间判断“哪些做法的收益是可度量、可迭代的”再用排除法选出和数据产品设计一致的方向。这种题很多人会凭感觉选但数据岗的答题逻辑应该是先明确北极星指标发布者活跃、内容生态丰富度、用户消费时长再倒推策略是否有利于指标提升。如果你只是背概念不把业务目标挂上去很难选出最优项。4.2 因果推断与A/B实验最容易被拉开差距的地方第三批笔试的机器学习题里A/B实验相关的内容占了很大一部分。有一个单选题让我印象很深要评估一个推荐策略改版的效果实验组和对照组的总点击率都有提升但实验组的用户活跃度下降了问最可能的原因是什么。备选项包括辛普森悖论、样本量不足、策略生效期延迟、实验组和对照组流量分配不均匀。这里的正确方向是分析是否存在辛普森悖论也就是总体上看实验组提升但拆到各个用户分层后可能反而下降了。这种题在纯算法岗笔试里很少出现但在数据岗考得非常多因为数据岗日常工作就是看实验报告、判断策略上线与否你如果只看总体指标、不看分层结构很容易被数据表象误导。准备这类题我建议把以下概念用通俗例子过一遍第一随机化分桶是A/B实验的前提不然人群本身属性不齐结果不可信第二显著性水平p值不是“策略有效”的概率而是“原假设为真时拒绝原假设的概率”第三全局指标和分层指标要结合起来看防止辛普森悖论干扰判断第四新奇效应和首因效应会造成实验初期的数据波动至少观察一个完整业务周期再下结论。4.3 内容理解与生态指标小红书特有的数据命题方向小红书是内容社区数据岗的题目自然围绕内容展开。我印象最深的一道多选题问的是“哪些指标可以用来衡量一个内容社区的生态健康度”。选项有日活用户数、人均浏览时长、高互动笔记占比、创作者一个月后的留存率、单篇笔记平均曝光量。正确的多选题应该把高互动笔记占比、创作者留存和曝光量都选上因为社区生态健康度不能只看规模和时长还要看内容供给侧的体验。这里其实暴露了一个筛选信号数据岗不是只会跑数就行你需要懂社区产品的运营逻辑。小红书的数据分析工作经常要跟内容理解团队、生态策略团队协作所以你至少要清楚“内容发出去之后平台关注的是不是只有流量”。流量再大如果腰部创作者疯狂流失、内容供给断层那个DAU也是虚的。这就是为什么笔试里反复出现“内容生态”类题目它考的不是知识点而是你是否具备社区产品的数据直觉。5. 从热搜词看笔试风向爬虫、解析ID与officeai审校背后藏着什么5.1 为什么“爬虫”“视频下载”这类词会出现在笔试讨论里我看到相关热搜词里密集出现“小红书爬虫”“小红书视频下载”“小红书图片提取”这些词时第一反应是现在很多准备数据岗笔试的同学可能都在研究小红书的内容数据结构。这背后有个朴素逻辑笔试归笔试但你如果提前拆解过小红书的分享链接、图片地址、视频地址你会对内容数据库里的字段理解得更深笔试中碰到解析ID、提取数据这类题就会顺手很多。但我想提醒一句研究内容格式没问题但不要真的想靠爬虫去获取用户数据做所谓“深度分析”。数据岗笔试考的是你对数据链路和字段规则的理解不是你绕过风控的能力。即便你能写一个高并发采集脚本它也不能帮你判断内容平台的内容分发逻辑更不会让你在业务场景题里拿到高分。把精力放在理解数据结构和业务关系上性价比高得多。5.2 内容ID解析与链接分享逻辑其实是数据链路基本功小红书的数据岗笔试里出现的“分享链接解析笔记ID”类题目表面上考的是字符串处理实际上考的是你对数据链路的理解。在小红书的内容体系里用户复制出来的是一个短链接或者带参数的URL其中藏着笔记ID、作者ID、分享来源、时间戳等信息。如果你能把这些参数解出来就能把一条分享行为还原成一次内容分发事件进而做分享转化分析、社交裂变分析。我在备考阶段做了一套这样的练习题给定一批短链接要求提取笔记ID并统计每个笔记被分享的次数。做法是先用正则匹配链接中的ID字段再按ID做词频统计。这个过程十几分钟就能跑完但它让我理解了为什么很多数据分析需求都要从URL解析开始因为业务埋点不一定覆盖每个场景而URL参数往往保留了最原始的用户意图。对于这类题目准备时要注意正则表达式匹配时尽量写成非贪婪模式防止贪婪匹配把ID后面的参数也吞进去多个ID字段并列时先确认业务主键是哪一个再决定按哪个维度汇总。5.3 合规底线数据采集与分析的边界问题借着热搜词里的“爬虫”话题我想说点实在的。作为准备入职的数据岗候选人你不需要在笔试或面试里展示如何爬取小红书数据反而应该展现出对数据合规边界的清晰认知。面试官如果问到“你怎么获取数据”正确答案不是“写爬虫抓”而是“优先使用内部数据仓库、官方开放接口、以及合规的第三方数据服务”。笔试里如果遇到跟内容解析相关的题你可以把它当作一道纯粹的技术题来解但千万别觉得这就是公司在鼓励你搞爬虫。恰恰相反现在各家公司都越来越重视数据安全和个人信息保护笔试出这种题只是为了考察候选人的编程基本功。你能不能在字符串里提取出关键ID本质上和爬虫没有任何关系它只是一个通用的数据处理技能。所以准备阶段看到那些“小红书视频无解析下载”之类的工具宣传我的建议是直接忽略别把时间花在研究绕过措施上。把正则、数据清洗、字段提取的基本功练扎实比什么都管用。笔试不会因为你“会爬”而加分但一定会因为你写不出一个干净的解析函数而扣分。6. 备考时间线复盘与资料推荐6.1 一个月备考时间线怎么安排最稳我这批笔试从投递简历到笔试通知中间大约有三周多的准备时间。复盘下来我觉得最有效的备考路径可以分成三个阶段。第一阶段第1周把SQL窗口函数和留存、漏斗计算练熟。我当时的做法是把牛客网SQL题库里的中等难度以上题目刷了50道重点看涉及窗口函数和连续日期的题目每道题都自己手写一遍不看参考答案。这周的目标是不需要思考就能写出“分组求TopN”和“累计求和”的SQL模板。第二阶段第2周集中过Python数据处理和算法基础。pandas的操作每天练一小时算法就刷LeetCode的哈希表、字符串、双指针、动态规划入门这四类。小红书数据岗笔试的Python题不会出到竞赛难度但基础算法必须熟练。每天写5道题左右先保证AC再回头看有没有更优解。第三阶段第3周模拟笔试全套练习。留出两三个完整的两小时严格按照考试时间自己做一套模拟题最好找那种包含单选、多选、SQL、Python的整卷练。模拟的时候一定不要中途翻资料手机放远一点就当成真实考试来对待。我第一次模拟的时候SQL超时了就是因为前面选择题犹豫太久后面调整了策略真正笔试时时间才刚好够用。6.2 值得刷的资料和工具按优先级排序先说工具层面我备考时用的主力工具如下SQL练习本地装一个MySQL或者直接用在线SQL练习平台重点练窗口函数、日期处理、多表join。建议自己在电脑上建一张用户表、一张行为表自己给自己出题比如“计算每个用户最近7天的活跃天数”“统计每天新增用户次日留存率”这种自拟题目的方式比纯刷题更容易内化。Python练习本地装好pandas环境准备一份JSON格式的模拟业务数据反复练习读取、解析、清洗、聚合。算法题用LeetCode刷题按标签分类练。统计与机器学习基础不用抱着西瓜书啃把假设检验、置信区间、中心极限定理、线性回归、逻辑回归、决策树这些核心概念过一遍每一类都找一个生活化例子说清楚。比如假设检验可以类比成“想判断一个新的菜谱是不是真的比旧菜谱更好不能只试一次要看多次结果是不是稳定更好”。资料方面我觉得不需要买一堆付费课程公开的SQL题库、LeetCode免费题、几篇经典的A/B实验原理文章就够用了。重点不是题量而是当你做错一道题时有没有把错误原因总结成一句话写下来。我备考时整理了一个“错误清单”文档里面记录了所有我踩过的坑比如“窗口函数over里order by用desc还是asc”“group by之后select里只能出现分组字段和聚合函数”“JSON解析前先检查非空”。考前最后一天不看新题只看这个错误清单效率非常高。6.3 春招笔试的临场心态三个决策点笔试考的不只是知识储备还有一个很容易忽略的东西决策能力。我在实际考试里遇到过的三个决策点分享给你参考。第一个决策点是“遇到不会的选择题怎么办”。第三批笔试有一道关于贝叶斯更新的多选题我平时练习得少第一反应是蒙。但我给自己定的规则是不确定的选项宁可少选不要多选因为多选判分通常是漏选得部分分、错选不得分。所以遇到模糊选项我选择保守处理。这个策略帮我稳住了基础分。第二个决策点是“SQL和Python哪道先做”。我的选择是先做SQL因为SQL题的逻辑相对固定写出来就能运行能快速建立信心Python题如果涉及较复杂的数据解析可能需要更多调试时间放在后面做不容易心慌。当然这因人而异但建议你模拟考时试验一下自己的舒适顺序。第三个决策点是“最后五分钟检查什么”。我给自己定的检查顺序是先检查所有输出格式是否正确再检查SQL里的表名前缀和字段名拼写最后检查有没有题目要求输出的指标被漏算。代码逻辑在最后五分钟很难大改但格式错误往往是一眼能看出来的千万别因为少了一个别名白白丢分。最后再分享一个小技巧把笔试当项目复盘笔试结束之后不管感觉好不好我强烈建议你趁热打铁写一份复盘文档。不要只记“对了还是错了”而是记录每个题型的考察点、你的答题思路、卡壳的地方、以及如果再考一次你会怎么改进。比如我复盘时就发现选择题里关于A/B实验的题目错了两道根本原因是我把p值的含义理解错了。后来我花了一个晚上把假设检验重新捋了一遍还自己画了一张流程图贴在笔记本上。后面二面时面试官正好问到怎么判断实验是否显著我因为复盘过回答得比笔试时清晰很多。春招笔试只是整个求职流程的第一道关它当然重要但也没必要把一次失利看得太重。关键是每次笔试后都能积累一点经验下次遇到同类题不再慌。小红书数据岗的笔试风格整体偏业务、偏场景化你如果能在备考阶段就把自己代入到“小红书的数据分析师”这个角色里去思考问题会比其他候选人更接近他们的用人标准。