ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

小红书数据分析笔试题解析:SQL、统计与业务思维全攻略

小红书数据分析笔试题解析:SQL、统计与业务思维全攻略 小红书2020校招数据分析笔试题这块内容我前前后后带过不少应届生复盘也亲眼见过有人靠着一套系统的准备拿到offer也有人连基础SQL都写不顺就冲上去裸考结果自然不太好看。今天我就把这份笔试题背后考察的东西掰开揉碎讲一遍同时把数据分析岗位校招笔试常见的套路、知识点和踩坑点整理出来希望对正在准备校招、或者想转行做数据分析的朋友有实际帮助。这套笔试题虽然名字带“小红书”但它并不是只适用于小红书一家。互联网公司的数据分析笔试尤其是校招层级核心考察方向高度相似SQL能力、统计学基础、业务分析思路、数据敏感度。你把小红书这套题吃透了再去面其他大厂的数据分析岗位至少能避开80%的常见坑。1. 小红书2020校招数据分析笔试题整体拆解1.1 轮次设置与考察范围先把这套题放在当年的校招流程里看。小红书数据分析岗的校招一般分简历筛选、笔试、业务面、HR面几个环节笔试是简历通过后的第一道硬门槛。2020年那会儿笔试基本线上完成题型以选择题、SQL题、简答/分析题为主整体时间在60到90分钟之间题量不小节奏很快。从考察范围来看这套笔试题覆盖了三个核心模块SQL与数据处理主要考察取数能力比如表的连接、聚合、窗口函数、去重、空值处理。统计与概率基础均值、中位数、方差、假设检验、概率计算这部分是判断候选人有没有基本的数据sense。业务分析题给你一个业务场景比如笔记曝光下降、用户留存变差、某类目GMV波动让你拆解原因、给出分析框架、提出解决方案。有些版本还包含Excel题或者Python题但2020年这个节点小红书对Python的要求还没那么高重点还是SQL和业务分析思路。1.2 为什么这套题值得反复研究我见过很多人刷题只刷力扣SQL或者只刷统计学教材实际上笔试挂掉往往不是因为某一项能力缺失而是因为“不知道对方在考什么”。小红书这套题最大的特点是它不考死记硬背的概念而是把数据和业务绑在一起考。比如给你一个“用户发布笔记后7日留存”的数据表让你写出计算逻辑再比如告诉你“某天推荐流量占比突然下降”让你分析可能原因。这些问题没有标准答案但能明显区分出你是“只会写SQL的工具人”还是“能通过数据理解业务的分析师”。另外这套题也代表了当时互联网公司对校招数据分析师的定位不需要你有非常深的算法功底但你必须能把一个模糊的“业务问题”转化为“数据问题”再用“SQL/统计工具”去解决最后把结果用“业务语言”讲清楚。这四个环节笔试里全部覆盖。注意准备小红书或其他大厂数据分析笔试时不要只刷题不思考。公司想看到的不是一个“数据库查询员”而是一个能站在业务角度用数据说话的人。2. 核心题型精讲SQL、统计与业务分析2.1 SQL题从取数到窗口函数的进阶考察SQL题在校招数据分析笔试中占比最高小红书2020这套题也不例外。选择题会考一些基础语法大题则直接给你一个业务数据表让你写出查询语句。常见考察点包括多表连接内连接、左连接的区别什么时候用left join而不是join。聚合函数与group by按用户、按日期、按品类分组统计。去重计数count(distinct user_id)的使用。窗口函数row_number()、rank()、dense_rank()的区别以及sum() over(partition by)这类累计计算。子查询与临时表如何通过嵌套查询实现多步计算。日期函数日期间隔计算、按周/月聚合。举个例子有一道经典题目是“统计每个用户首次发布笔记的时间并计算从注册到首次发布的天数。”这道题看着简单但很多人会卡在“取每个用户首次发布笔记时间”这一步下意识想用group by却不知道该用什么函数把对应的发布时间带出来。正确的做法有两种-- 方法一min() group by 后 join select a.user_id, a.first_publish_time, datediff(a.first_publish_time, b.register_time) as diff_days from ( select user_id, min(publish_time) as first_publish_time from publish_log group by user_id ) a left join user_info b on a.user_id b.user_id;-- 方法二窗口函数 row_number() select user_id, publish_time, datediff(publish_time, register_time) as diff_days from ( select p.user_id, p.publish_time, u.register_time, row_number() over(partition by p.user_id order by p.publish_time asc) as rn from publish_log p left join user_info u on p.user_id u.user_id ) t where rn 1;方法一逻辑直观方法二更简洁还能顺便处理“同一用户同一天发布多条笔记”时的排序问题。笔试时推荐用窗口函数因为代码更紧凑而且在面试环节面试官通常更欣赏你对窗口函数的熟练度。实际操作中还会遇到一个坑日期字段的格式不统一有的存成字符串2020-01-01有的存成时间戳做datediff之前必须先格式化。线上数据表经常有这种脏数据笔试虽然不会故意整你但养成先检查字段格式的习惯没有坏处。如果笔试环境允许使用Python也可以用pandas处理import pandas as pd publish_log pd.read_csv(publish_log.csv) user_info pd.read_csv(user_info.csv) first_publish publish_log.groupby(user_id)[publish_time].min().reset_index() first_publish.columns [user_id, first_publish_time] result first_publish.merge(user_info, onuser_id, howleft) result[diff_days] (pd.to_datetime(result[first_publish_time]) - pd.to_datetime(result[register_time])).dt.days有些公司笔试平台支持jupyter环境能用pandas就尽量用pandas既快又不容易出错但前提是你对pandas的groupby和merge足够熟悉。2.2 业务分析题从数据波动到归因拆解另一类必考题型是业务分析题也就是给你一个业务现象让你分析原因。小红书2020笔试里这类题通常放在简答题最后分值很高也是最容易拉开差距的部分。举一个常见题干“某天发现社区笔记的日均曝光量下降了10%请分析可能的原因并给出你的分析思路。”很多应届生看到这种题第一反应是“可能是算法策略改了导致流量分配变化。”这个回答不是不对而是太笼统缺乏结构化思维。正确的打开方式应该分四步走确认数据的真实性先排除数据口径问题比如是否因为埋点缺失、报表bug、流量日志丢失导致数据“假下降”。这一步很多人会忽略但实际工作中10%的波动真有可能是数据问题。维度拆解把曝光量按渠道、用户类型、内容类型、设备端、时间维度进行拆解找到是哪个维度导致的整体下降。内外部因素分析内部看产品改版、算法策略调整、推荐位变动、活动结束等外部看竞品动态、节假日效应、舆情事件等。提出验证方案比如拉取分维度数据验证假设或者做AB实验验证策略影响。回答的时候最好结合具体的数据公式来拆。比如曝光量可以拆成曝光量 活跃用户数 × 人均浏览笔记数 × 人均产生曝光次数如果曝光下降10%先看是哪个因子变了是DAU降了还是人均刷的笔记数降了还是每次浏览产生的曝光变少了。不同因子的变化对应完全不同的排查方向这种“先分拆、再定位”的思路是面试官最想看到的。这个公式拆解法在数据分析工作中几乎每天都在用。无论是GMV、订单量、留存率只要遇到指标波动第一件事就是构建指标公式然后逐层拆解。这也是商业数据分析的核心思维之一。2.3 统计与概率容易被忽视的送分题和失分题统计与概率题在校招笔试里一般占比在20%到30%难度不算高但很琐碎容易因为粗心丢分。常见考点包括描述统计均值、中位数、众数、方差、标准差以及它们对异常值的敏感度。概率计算条件概率、贝叶斯公式、排列组合求概率。分布正态分布、二项分布、泊松分布的基本性质和应用场景。假设检验p值含义、第一类错误与第二类错误、置信区间。AB实验实验分组、显著性判断、样本量计算。有一道很经典的送分题“一组数据中有三个数24100请问中位数和均值分别是多少哪个更能代表数据中心”均值是35.33中位数是4显然中位数更能代表这组数据的典型水平因为100是明显的异常值。这类题本身不难但很多人对“p值”的理解是模糊的。比如问“p值小于0.05意味着什么”正确答案是“在原假设为真的前提下观察到当前样本或更极端样本的概率小于5%”而不是“原假设为假的概率小于5%”。这两个表述有本质区别面试官常借此考察候选人有没有真正理解假设检验的逻辑。再补充一个跟小红书场景相关的例子如果平台要把一个新推荐算法上线先做小流量实验实验组和对照组各覆盖10万用户观察点击率是否有显著提升。这里就需要知道样本量估算的基本思路至少要理解“样本量越大越容易检测出微小差异”这个直觉。3. 实操复盘一道完整笔试的解答过程3.1 经典题目复现与分步解答下面我从2020年流传出来的题目版本里选一道有代表性的题完整走一遍解答过程。题目大意是有用户表user_info(user_id, register_date, city)和内容发布表publish_log(pid, user_id, publish_date, tag)。请计算2020年1月每天新增用户的次日留存率。这个题考察的是留存计算几乎是所有互联网数据分析笔试的必考题。即使不是小红书你在其他家也可能遇到类似的问题所以务必吃透。我一般建议分三步解答第一步先理解“次日留存率”的定义某日新增用户中第二天下单这里就是发布内容、登录根据业务定义的占比。第二步拆解SQL逻辑先找到2020年1月每天新增的用户再找到这些用户在注册日第二天是否有活跃行为最后用次日活跃人数除以当日新增用户数得到留存率。第三步写SQLselect a.register_date, count(distinct a.user_id) as new_users, count(distinct b.user_id) as retained_users, count(distinct b.user_id) / count(distinct a.user_id) as next_day_retention_rate from ( select user_id, register_date from user_info where register_date between 2020-01-01 and 2020-01-31 ) a left join ( select distinct user_id, publish_date from publish_log where publish_date between 2020-01-01 and 2020-02-01 ) b on a.user_id b.user_id and b.publish_date date_add(a.register_date, interval 1 day) group by a.register_date;这段SQL里有两个关键点一是用left join而不是join否则活跃用户没记录时会直接丢掉新增用户新用户数会被少算二是活跃行为表里要先做distinct防止一个用户当天发布多条笔记导致重复计数。如果你使用的平台支持CTE写成下面这种结构可读性更好with new_users as ( select user_id, register_date from user_info where register_date between 2020-01-01 and 2020-01-31 ), active_users as ( select distinct user_id, publish_date from publish_log where publish_date between 2020-01-01 and 2020-02-01 ) select n.register_date, count(distinct n.user_id) as new_users, count(distinct a.user_id) as retained_users, count(distinct a.user_id) / count(distinct n.user_id) as next_day_retention_rate from new_users n left join active_users a on n.user_id a.user_id and a.publish_date date_add(n.register_date, interval 1 day) group by n.register_date;笔试现场不一定支持CTE但多数在线编译环境如Hive、MySQL 8.0以上都能跑。如果平台只支持旧版MySQL就用子查询的写法别在关键时刻冒险。3.2 笔试时间分配与答题顺序小红书这套笔试题的时间压力不小。我建议的分配方法是前5分钟快速浏览全部题目判断哪些题有把握、哪些题比较陌生。SQL大题优先做因为每道分值最高且一旦写出来了基本能拿满分。每道SQL控制在15到20分钟内。业务分析题其次做这类题没有标准答案只要逻辑清晰、表达完整得分空间很大。统计选择题最后做虽然知识点碎但每题分值低即使时间紧张也可以用直觉猜一猜。做题顺序为什么这么安排因为笔试过程中人越往后写越疲惫而SQL题需要高度集中。把最强状态留给分值最高的题是性价比最高的策略。我当年自己参加笔试也栽过“先做简单题结果SQL没时间写”的跟头后来每次都是先扫全卷再排序整体命中率高很多。另外要特别注意有些在线笔试题会限制每道题单独计时SQL题过了时间就交卷不能回看。这种情况下必须看准倒计时不要在一道题上死磕到最后一分钟。3.3 常见错误与排查技巧我总结过候选人做这套题时最常犯的几类错误供大家避坑问题现象常见原因解决办法SQL计算结果比预期多很多join时未去重一对多关联导致数据翻倍先对事实表distinct再关联维表留存率超过100%或为负数日期格式不统一date_add逻辑写错先统一日期格式再用字段粒度校验极端值count(distinct)结果过慢数据量太大且未加分区条件查询里先过滤日期范围减小处理数据量业务分析题只写一两点分维度不够缺乏指标拆解意识每个分析题都强制先写指标公式再拆维度还有一个容易被忽略的小坑笔试环境里的SQL可能是Hive SQL不是MySQL。Hive中的date_add语法没问题但字符串日期需要用cast转成日期类型或者直接使用date_sub、datediff等函数时注意格式。如果编辑器支持本地调试先跑一小段数据验证再交卷真的能省掉很多低级错误。4. 从笔试到工作数据清洗、可视化与数据分析思维4.1 数据清洗与准备笔试不考却是工作日常笔试考的是SQL和逻辑但真正入职之后你第一个星期大概率在跟数据质量作斗争。小红书这类内容平台数据埋点体系庞大客户端、服务端日志格式经常不一致同一个“曝光事件”在不同端上可能叫不同的名字甚至同一个字段在不同时期的数据类型都不同。所以我要特别提醒准备校招的朋友不要只盯着笔试题也要具备基本的数据清洗思路。比如拿到一个原始日志表第一步不是急着分析而是先看数据是否有重复、空值分布在哪些字段、异常值是否在合理范围。用Python做分析的话pandas里的drop_duplicates()、isnull()、describe()以及Excel里的“删除重复项”“条件格式”都是最基础的工具。我用小红书场景举个例子你想分析“京沪两地用户发布笔记的互动量差异”但原始数据里city字段有些是“北京/上海”有些是“beijing/shanghai”还有些直接是空值。如果不做清洗和标准化后面分析结果根本没有可信度。数据分析领域有一句话叫“garbage in, garbage out”数据没洗干净模型和结论再漂亮也是白搭。4.2 数据可视化从Excel到专业BI工具笔试题很少直接考可视化但在业务面或者实习工作里图表表达能力非常加分。我见过不少候选人口头分析头头是道一到画图就只会用Excel画个饼图这其实是不够的。Excel当然是最基础的透视表、vlookup、条件格式、基本的折线图和柱状图这些是必备技能。如果你能熟练掌握以下这些工具中的任意一两个会给面试加分不少Excel快速出临时报表尤其是数据量不大百万元组以内时最灵活。Python可视化库matplotlib、seaborn、plotly适合做探索性分析和需要自定义样式的图表。BI工具Tableau、Power BI、Metabase适合搭建固定报表。小红书内部数据分析师日常会用自研或开源的BI平台但底层技能是相通的。DBeaver如果你做SQL查询和数据探索DBeaver这类数据库客户端非常方便可以直接看表结构、跑查询结果甚至支持简单的图表可视化。很多面试官如果看到你的简历里写了熟悉通用数据库工具会默认你是能直接上手的候选人。可视化的核心不是“画得好看”而是用最合适的图表把业务问题讲清楚。时间趋势用折线图对比构成用柱状图/堆叠图占比用饼图但要慎用分类多时饼图很难读地理分布用地图相关性分析用散点图。这些基本的图表选择逻辑笔试不考但面试项目介绍时很可能会被追问。4.3 数据分析思维从取数员到业务伙伴小红书2020这套笔试题里最值钱的不是那些SQL题而是业务分析题背后的思维方式。如果你能想明白那几道业务题的解答逻辑你就已经超过了大多数只会写SQL的候选人。数据分析思维里最重要的三条第一目标导向。接到一个分析需求先搞清楚老板或业务方到底想解决什么问题这个问题的成功标准是什么。很多时候业务方给的需求是“帮我看看数据”但实际上他想知道的是“为什么不涨了”或“下一步该做哪个方向”。澄清需求本身就是一个很重要的能力。第二假设驱动。不要一上来就统计全量数据。先基于对业务的理解提出几个可能假设再有针对性地取数验证。比如笔记曝光下降先假设是不是推荐策略变了再看是不是内容供给不足最后看是不是竞品分流。每个假设对应一个数据验证方案整个分析过程会高效很多。第三量化表达。不要只说“涨了很多”“用户流失严重”要量化成“环比上涨12%”“次周留存率从38%下降到30%”。同一件事量化与否给决策者的感觉完全不一样。5. 准备建议与学习路线5.1 校招准备时间规划如果你还有两到四个月准备校招我建议按下面的节奏来第一个月重点突击SQL。把所有常见的SQL写法过一遍包括join、group by、子查询、窗口函数、日期处理。每天至少写3到5道SQL题题库可以刷LeetCode数据库板块、牛客SQL实战以及各个公司的历年笔试题。这个阶段不追求难题只求基础语法熟练。第二个月重点补充统计学和业务分析框架。统计学不需要啃大部头把概率论基础、假设检验、AB实验这些核心知识点弄明白即可。业务分析部分多看看行业分析案例比如“某App留存率下降原因分析”“某品类GMV增长拆解”学着用指标拆解的方法写分析报告。第三个月及以后反复刷历年真题同时准备自己的项目案例。项目不在多一两个能讲清楚的数据分析项目就够重点是要能回答“你为什么要分析这个问题”“用了什么方法”“结论是什么”“业务方采纳之后效果如何”这一整套问题链。5.2 刷题工具与环境准备笔试题有的平台支持在线执行SQL有的不支持只让你在文本框里写。不管哪种都要提前熟悉以下环境牛客网有大量公司历年笔试题和面经适合专项刷题。LeetCode DatabaseSQL题难度梯度清晰用来练窗口函数很合适。Hive/MySQL本地环境如果电脑配置允许装一个MySQL或者用Docker起一个Hive环境自己建表造数练习效果比光看不练好太多。Excel PythonExcel练透视表和函数Python练pandas和seaborn两个工具配合使用处理日常分析场景完全够用。另外如果看到笔试题里描述了一个你完全不懂的业务概念比如“北极星指标”“AARRR模型”“漏斗分析”先不要慌把题目里给的数据和条件吃透用最基本的比率、趋势、对比来回答往往也能答对一半以上。业务概念可以快速补充数据逻辑则是硬功夫。5.3 一些容易踩的面试坑笔试只是第一关后面还有面试。我见过不少笔试成绩不错的人挂在面试上原因不是技术不行而是表达方式和思维习惯出了问题。第一个坑只会给结论不给推导过程。面试官问“你觉得留存率下降可能是什么原因”你直接回答“产品体验变差了”等于没说。你应该说“我首先会计算不同维度的留存率比如新老用户、不同版本、不同渠道先定位下降主要是哪个人群带来的然后再结合产品迭代时间点分析。”先给分析框架再给具体假设最后给验证方法这套表达方式在任何业务面试里都好用。第二个坑不懂装懂。数据分析面试覆盖面很广遇到不会的问题很正常。与其硬编一个答案不如坦白说“这块我之前接触不多我的理解是……如果有不对的地方希望能得到指点”。比起一个会胡编的候选人面试官更欣赏真诚和学习意愿强的候选人。第三个坑忽略业务场景。很多候选人喜欢把SQL技术、算法模型挂在嘴边但一到“这个分析对业务有什么价值”就讲不清楚。数据分析岗位终究是服务于业务的不能落地到业务动作的分析在公司眼里价值有限。6. 写在最后的一些经验小红书2020校招数据分析笔试题本质上是一面镜子照出你对数据基本功的掌握程度也照出你的业务思维和问题拆解能力。我在带人的时候经常说笔试不是“考试”更像一次“模拟实战”只不过把平时工作中的取数、分析和汇报压缩到90分钟里。如果你正在准备校招我建议不要抱着“刷完题就万事大吉”的心态。笔试题会变但底层能力不会变SQL写得干净利落统计概念能讲清楚面对一个模糊的业务问题时能迅速拆解成数据问题这三件事做到位你基本能轻松应对大多数互联网公司的数据分析校招笔试。最后再分享一个小技巧每次做完一套笔试题无论结果是过了还是挂了都要留出半小时复盘。把错题归类统计一下自己是因为SQL语法不熟扣分、统计概念混淆扣分还是业务分析结构不完整扣分。这个复盘动作比多刷十道题还有用。我自己当年就是这样一边刷小红书这类真题一边给自己做错误归因到后面几家公司笔试时基本上看一眼题目就能判断出对方想考什么。机会是留给有准备的人的希望你能在笔试这一关走得稳一点。
返回列表