结合小红书真实面试经验和高频考点整理,覆盖SQL、Python、统计学、指标体系、业务分析、数据可视化六大方向。
第1题:SQL · 用户行为路径分析
题目:
有一张用户点击行为表 user_click_log,包含字段(user_id, click_time, page_id, event_name)。另有一张笔记品类表 note_category,包含字段(page_id, category_name)。请用SQL找出每个用户点击次数最多的前3个笔记品类,并输出用户ID、品类名称、点击次数、排名。
解析:
这道题是小红书面经里的高频考题,考的是窗口函数 + 多表联查的组合用法。面试官想看你是否熟练使用 ROW_NUMBER() 或 DENSE_RANK() 来做分组TopN。
思路分三步走:第一步把两张表关联起来,按用户和品类聚合算出每个用户在每个品类上的点击次数;第二步用 ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY cnt DESC) 给每个用户内部的品类排个序;第三步筛选出排名 ≤ 3 的记录。
sql
WITH user_category_cnt AS (
SELECT
u.user_id,
n.category_name,
COUNT(*) as click_cnt
FROM user_click_log u
JOIN note_category n ON u.page_id = n.page_id
GROUP BY u.user_id, n.category_name
),
ranked AS (
SELECT
user_id,
category_name,
click_cnt,
ROW_NUMBER() OVER(
PARTITION BY user_id
ORDER BY click_cnt DESC
) as rk
FROM user_category_cnt
)
SELECT user_id, category_name, click_cnt, rk
FROM ranked
WHERE rk <= 3;
面试官可能会追问:如果品类A和品类B的点击次数一样,都想保留怎么办?这时候 RANK() 或 DENSE_RANK() 就比 ROW_NUMBER() 更合适了。另外也可能问数据量大的时候怎么优化------可以考虑对 user_click_log 按 user_id 做分区、对关联键加索引、或者用临时表缓存聚合结果。
第2题:SQL · 留存率计算
题目:
有一张用户登录表 user_login,包含字段(user_id, login_date)。请计算2025年1月的新用户次日留存率、7日留存率和30日留存率。(新用户定义为该月首次登录的用户)
解析:
留存率是小红书最核心的指标之一,面试官考这个就是想看你有没有真正理解"同批次用户"这个概念。
先找出1月首次登录的用户:用 MIN(login_date) 按 user_id 聚合,筛选出首次登录日期在1月范围内的。然后把这些用户的首次登录日期当作"基准日",去关联后续的登录记录。次日留存就是:在首次登录后第1天还有登录记录的用户数 ÷ 新用户总数。7日和30日同理。
sql
WITH first_login AS (
SELECT user_id, MIN(login_date) as first_date
FROM user_login
GROUP BY user_id
HAVING MIN(login_date) BETWEEN '2025-01-01' AND '2025-01-31'
),
retention AS (
SELECT
f.user_id,
COUNT(CASE WHEN u.login_date = DATE_ADD(f.first_date, 1) THEN 1 END) as day1,
COUNT(CASE WHEN u.login_date = DATE_ADD(f.first_date, 6) THEN 1 END) as day7,
COUNT(CASE WHEN u.login_date = DATE_ADD(f.first_date, 29) THEN 1 END) as day30
FROM first_login f
LEFT JOIN user_login u ON f.user_id = u.user_id
GROUP BY f.user_id
)
SELECT
COUNT(*) as total_new_users,
SUM(day1)/COUNT(*) as day1_retention,
SUM(day7)/COUNT(*) as day7_retention,
SUM(day30)/COUNT(*) as day30_retention
FROM retention;
面试里常见追问:如何判断用户是"真实新用户"还是"老用户换设备重新注册"?这时候可以结合设备ID、手机号、注册时间等多个维度交叉验证。或者问如果新用户量级很大,SQL跑不动怎么办------可以用Hive/Spark做分布式计算,或者先抽样再计算。
第3题:Python · Pandas处理用户活跃数据
题目:
给定一个DataFrame df,包含字段(user_id, date, duration_seconds, page_views),要求计算:
-
每个用户每天的平均单次访问时长(duration_seconds / page_views)
-
找出连续3天及以上活跃的用户(即连续3天都有登录记录的用户)
解析:
第一问很简单,df['avg_duration'] = df['duration_seconds'] / df['page_views'] 然后 groupby 求均值就行。但要注意处理 page_views 为0的脏数据,否则会出现除零错误。
第二问是经典的"连续性问题",Pandas 里用 diff 加 cumsum 的手法来处理。先把日期去重排序,然后用 df['date'].diff() 算出相邻日期差,不等于1天的时候标记为"新分组的开始",用 cumsum() 生成分组ID,再在每个分组内 count 分组内天数,筛选出 ≥3 的。
sql
# 问题1:平均单次访问时长
df['avg_session_duration'] = df['duration_seconds'] / df['page_views'].replace(0, np.nan)
daily_avg = df.groupby(['user_id', 'date'])['avg_session_duration'].mean()
# 问题2:连续活跃3天以上的用户
active_dates = df[['user_id', 'date']].drop_duplicates()
active_dates = active_dates.sort_values(['user_id', 'date'])
active_dates['gap'] = active_dates.groupby('user_id')['date'].diff().dt.days
active_dates['new_group'] = (active_dates['gap'] != 1).astype(int)
active_dates['group_id'] = active_dates.groupby('user_id')['new_group'].cumsum()
consecutive = active_dates.groupby(['user_id', 'group_id']).size()
result = consecutive[consecutive >= 3].reset_index()['user_id'].unique()
面试里可能会追问:如果数据量达到上亿级别怎么处理?这时候就要考虑用 Spark DataFrame 或者直接写 Hive SQL 了。
第4题:统计学 · AB测试显著性检验
题目:
小红书在首页推荐流中上线了一个"双列转单列"的改版方案。实验组(单列)和对照组(双列)各有10万用户。实验组的人均点击笔记数为 8.2(标准差 3.5),对照组为 7.9(标准差 3.4)。请判断这个改版是否显著提升了点击量(α=0.05)。
解析:
这是小红书的经典AB测试场景,社区和电商两个方向的迭代几乎天天都在跑AB测试。因为样本量很大(各10万),所以用双样本Z检验或者t检验都行。
Z统计量 = (8.2 - 7.9) / sqrt(3.5²/100000 + 3.4²/100000) ≈ 0.3 / 0.0154 ≈ 19.48
Z值远大于1.96(α=0.05的双侧临界值),p值几乎为0,所以统计学上显著。
但面试官真正想听的不只是算算数,而是你对业务效果的理解。显著不等于有效------日均点击从7.9涨到8.2,涨幅3.8%,绝对数值看着不错,但要追问:用户人均时长变了吗?广告收入呢?双列变单列虽然点击多了,但用户刷到的信息量变少了,会不会导致长期留存下降?有没有辛普森悖论------某些细分人群(比如新用户 vs 老用户)的效果是否一致?
另外还要讨论:实验分流的随机性是否保证?有没有Interleaving实验设计?这些都是小红书面试里会深挖的点。
第5题:数据分析指标体系 · DAU波动归因
题目:
周五发现小红书的DAU相比前一周同一天下降了5%。作为数据分析师,你会从哪些维度展开归因分析?
解析:
这道题在小红书面经里出现过很多次,面试官想看的不是"你会不会算DAU",而是你有没有系统的分析框架。
标准的归因思路可以按"内部拆解 × 外部排查"两条线走:
内部拆解:
-
按用户分层拆:新用户 vs 老用户,DAU下降是哪部分用户造成的?如果是新用户少了,看拉新渠道和获客成本;如果是老用户流失了,看留存曲线是否有拐点
-
按产品模块拆:社区 feed、搜索、商城、消息通知,哪个模块的日活下降最多?
-
按版本拆:最近有没有发新版本?新版是否有bug或者交互体验变差?
-
按地域/渠道拆:iOS vs Android?一线城市 vs 下沉市场?
外部排查:
-
竞品动作:抖音、快手、微信视频号是不是同期有运营活动?
-
季节性因素:是不是节假日、考试季、开学季的影响?
-
技术层面:有没有接口异常、CDN延迟、崩溃率升高?
最后要给出结论和行动建议。比如"发现是新用户次日留存从60%降到45%,主要原因是周五的拉新渠道从信息流广告换成了线下地推,用户质量下降"------这才是业务能落地的东西。
第6题:业务分析 · 内容运营
题目:
小红书的笔记曝光量在近一个月持续下降,但笔记发布量是稳定的。请分析可能原因并给出建议。
解析:
曝光量下降但发布量稳定,说明问题出在流量分发端而不是内容供给端。核心要排查推荐系统的效率和内容质量的变化。
可能的方向:
-
推荐系统的匹配效率:用户的点击率、完播率、互动率是否在下降?如果用户对推荐的内容不感兴趣,曝光再多也没用。可以分析推荐列表的CTR趋势、session内跳出率
-
内容质量下滑:虽然发布量没变,但低质量内容(标题党、同质化内容、搬运内容)占比是否上升了?可以用NLP模型给笔记打质量分,看低分内容的曝光占比是否在增大
-
流量池规则调整:小红书的内容是分级流量池机制,如果新发布内容的冷启动流量变少了,会导致整体曝光下降。看一下新笔记进入一级流量池的比例是否在变化
-
竞争引入:信息流中的广告位、电商卡片是否增多,挤压了自然内容的曝光空间
-
用户疲劳:老用户的活跃频率是否降低?可能是内容同质化导致用户刷几下就关闭了
建议:优化推荐算法权重、加强低质内容打压(降低推荐分)、调整流量池分配策略、适度控制广告加载率。
第7题:业务分析 · 用户增长
题目:
小红书在某个综艺节目投放了广告,你觉得如何评估这次投放的拉新效果?
解析:
这道题在小红书面经里被反复问到,考的是归因分析和渠道评估的思维。
评估框架可以这样展开:
-
确定核心指标:投放期间的新增用户数、获客成本(CPA)、新用户次日/7日留存、新用户人均时长、新用户首周发布率(衡量"是否真正留下了有价值的内容贡献者")
-
归因方式:监测投放期的渠道来源,对比投放前后新用户量的变化趋势。可以用双重差分法------选一个没投广告的相似时间段作为对照,排除季节性因素的干扰
-
自然增量 vs 广告增量:看自然渠道新用户是否也有增长(品牌溢出效应),如果自然渠道也涨了,说明投放不仅有直接拉新效果,还有品牌曝光价值
-
同批次用户长期表现:投放拉来的用户不一定质量高。跟踪这批用户的30日、90日留存,和自然渠道的用户做对比,如果是"一锤子买卖"用户(来了就不活跃了),那这个渠道的长期价值就存疑
-
渠道归因模型:用户可能通过多个渠道触达小红书才注册,用"末次点击归因"还是"多触点归因"?不同归因模型下的ROI差异很大
第8题:Python · NumPy实现用户评分矩阵
题目:
假设有10万个用户和1万篇笔记,每个用户对笔记有"点赞(1)"或"未交互(0)"两种状态。数据存储在CSV文件里,格式为:(user_id, note_id, liked)。请用NumPy高效构建一个用户-笔记交互矩阵,并计算每篇笔记的点赞率和用户活跃度(用户交互过的笔记数)。
解析:
这道题考察的是用NumPy做大规模矩阵运算的能力。直接建一个10万×1万的矩阵在内存里是存不下的(约8GB),所以要考虑稀疏矩阵。
用 scipy.sparse.coo_matrix 或者 csr_matrix 来存储,只存有交互记录的位置。
sql
import numpy as np
import pandas as pd
from scipy.sparse import csr_matrix
# 读取数据
df = pd.read_csv('user_note_interactions.csv')
# 构建稀疏矩阵
user_ids = df['user_id'].values
note_ids = df['note_id'].values
likes = df['liked'].values
# 将ID映射到矩阵索引
users_unique = np.unique(user_ids)
notes_unique = np.unique(note_ids)
user_map = {uid: i for i, uid in enumerate(users_unique)}
note_map = {nid: j for j, nid in enumerate(notes_unique)}
rows = np.array([user_map[uid] for uid in user_ids])
cols = np.array([note_map[nid] for nid in note_ids])
# 构建稀疏矩阵
interaction_matrix = csr_matrix((likes, (rows, cols)),
shape=(len(users_unique), len(notes_unique)))
# 计算笔记点赞率
note_like_count = interaction_matrix.sum(axis=0).A1
note_interaction_count = (interaction_matrix != 0).sum(axis=0).A1
like_rate = note_like_count / np.maximum(note_interaction_count, 1)
# 计算用户活跃度
user_activity = (interaction_matrix != 0).sum(axis=1).A1
如果面试官追问更大规模的情况(比如千万级用户),可以聊Spark的 RowMatrix 或 IndexedRowMatrix。
第9题:商业化分析 · 广告收入归因
题目:
小红书的信息流广告收入环比下降了10%。请分析可能的原因并给出改进建议。
解析:
商业化收入分析是小红书数据分析师的核心工作之一,面试官很看重你有没有商业sense。
广告收入 = 广告展示量 × 广告CPM(千次展示收入)。可以按这个公式逐层拆解:
广告展示量下降的可能原因:
-
整体DAU或人均session数下降------用户来得少了
-
广告加载率下降------是不是产品调整了广告位策略?
-
内容供给不足导致用户刷不到底------Feeds流里的笔记数量不够
CPM下降的可能原因:
-
广告主出价降低------是不是大促后进入淡季?
-
广告点击率下降------广告创意疲劳,或者用户对广告免疫了
-
广告填充率下降------DMP(数据管理平台)的定向能力变弱,匹配效率降低
分析流程:
-
先看大盘趋势:DAU、人均Feeds流浏览数、广告加载率、广告CTR、CPM,哪个指标变化最大
-
按广告主维度拆:大客户 vs 中小客户的消耗变化,分行业(美妆、穿搭、母婴等)看
-
按广告形式拆:信息流广告 vs 搜索广告 vs 开屏广告
-
做同期对比:和上月环比、和去年同期同比,排除季节性因素
-
看外部因素:有没有竞品抢广告预算?有没有政策调整?
改进建议可以是优化广告定向模型提升CTR、针对低消耗行业做运营激励、调整广告频次控制策略降低用户疲劳度。
第10题:数据可视化 · 指标体系设计
题目:
你的业务方(小红书社区运营团队)想跟踪"社区健康度",请你设计一套数据可视化看板,包含哪些指标?用什么图表类型?为什么这样设计?
解析:
这道题考的是指标体系的设计能力和可视化思维,没有标准答案,但好的回答要体现你对小红书业务的理解。
小红书社区健康度看板可以从四个维度来设计:
1)内容供给端(创作者侧)
-
日均笔记发布量 → 折线图(趋势)
-
活跃创作者数(日/周/月)→ 折线图
-
新创作者占比 → 面积图
-
笔记质量分分布(低质/普通/优质占比)→ 堆叠柱状图
2)内容消费端(用户侧)
-
DAU/MAU → 折线图
-
人均Feeds流浏览笔记数 → 折线图
-
人均时长 → 折线图
-
单次session时长分布 → 直方图
3)互动活跃度
-
日均点赞/收藏/评论/转发数 → 折线图,可把四个指标叠加在一起看趋势
-
互动率(互动量/曝光量)→ 折线图
-
评论正负面情绪占比 → 饼图或堆叠柱状图
4)平台健康度
-
日/周/月留存率 → 折线图
-
30日活跃用户中老用户占比 → 面积图
-
用户发布率(活跃用户中发笔记的比例)→ 单值卡片或仪表盘
-
笔记平均生命周期(从发布到不再获得推荐流量的天数)→ 折线图
看板上要设置预警阈值,比如某个指标连续3天下降超过5%就自动标红。还要有下钻能力,比如DAU下降时可以点进去看到底是新用户还是老用户的问题。
好的可视化不是把所有图表堆上去,而是有层次、有重点------CEO看的是数字和趋势,运营同学看的是漏斗和明细。所以设计的时候要区分"宏观概览页"和"明细分析页"。
📌 备考建议:
小红书数据分析师的面试总体上偏重业务理解 + 技术落地的组合能力。SQL和Python是基本功,但真正让你和其他候选人拉开差距的,是你对"小红书是什么样的平台"有没有深度理解------社区内容的推荐逻辑是什么?商业化怎么和用户体验平衡?你不能只是一个会跑数的工具人。
>
建议面试前多刷几遍小红书,真正去体验产品,理解用户行为背后的动机。面试官通常会问"你用小红书吗?你觉得哪里可以改进?"------这个问题既能考察你的产品sense,也能看出你是不是真的对这个平台有热情。