小红书数据分析工程师面试题精选:10道高频考题+答案解析

结合小红书真实面试经验和高频考点整理,覆盖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),要求计算:

  1. 每个用户每天的平均单次访问时长(duration_seconds / page_views)

  2. 找出连续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题:业务分析 · 用户增长

题目:

小红书在某个综艺节目投放了广告,你觉得如何评估这次投放的拉新效果?

解析:

这道题在小红书面经里被反复问到,考的是归因分析和渠道评估的思维。

评估框架可以这样展开:

  1. 确定核心指标:投放期间的新增用户数、获客成本(CPA)、新用户次日/7日留存、新用户人均时长、新用户首周发布率(衡量"是否真正留下了有价值的内容贡献者")

  2. 归因方式:监测投放期的渠道来源,对比投放前后新用户量的变化趋势。可以用双重差分法------选一个没投广告的相似时间段作为对照,排除季节性因素的干扰

  3. 自然增量 vs 广告增量:看自然渠道新用户是否也有增长(品牌溢出效应),如果自然渠道也涨了,说明投放不仅有直接拉新效果,还有品牌曝光价值

  4. 同批次用户长期表现:投放拉来的用户不一定质量高。跟踪这批用户的30日、90日留存,和自然渠道的用户做对比,如果是"一锤子买卖"用户(来了就不活跃了),那这个渠道的长期价值就存疑

  5. 渠道归因模型:用户可能通过多个渠道触达小红书才注册,用"末次点击归因"还是"多触点归因"?不同归因模型下的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(数据管理平台)的定向能力变弱,匹配效率降低

分析流程:

  1. 先看大盘趋势:DAU、人均Feeds流浏览数、广告加载率、广告CTR、CPM,哪个指标变化最大

  2. 按广告主维度拆:大客户 vs 中小客户的消耗变化,分行业(美妆、穿搭、母婴等)看

  3. 按广告形式拆:信息流广告 vs 搜索广告 vs 开屏广告

  4. 做同期对比:和上月环比、和去年同期同比,排除季节性因素

  5. 看外部因素:有没有竞品抢广告预算?有没有政策调整?

改进建议可以是优化广告定向模型提升CTR、针对低消耗行业做运营激励、调整广告频次控制策略降低用户疲劳度。


第10题:数据可视化 · 指标体系设计

题目:

你的业务方(小红书社区运营团队)想跟踪"社区健康度",请你设计一套数据可视化看板,包含哪些指标?用什么图表类型?为什么这样设计?

解析:

这道题考的是指标体系的设计能力和可视化思维,没有标准答案,但好的回答要体现你对小红书业务的理解。

小红书社区健康度看板可以从四个维度来设计:

1)内容供给端(创作者侧)

  • 日均笔记发布量 → 折线图(趋势)

  • 活跃创作者数(日/周/月)→ 折线图

  • 新创作者占比 → 面积图

  • 笔记质量分分布(低质/普通/优质占比)→ 堆叠柱状图

2)内容消费端(用户侧)

  • DAU/MAU → 折线图

  • 人均Feeds流浏览笔记数 → 折线图

  • 人均时长 → 折线图

  • 单次session时长分布 → 直方图

3)互动活跃度

  • 日均点赞/收藏/评论/转发数 → 折线图,可把四个指标叠加在一起看趋势

  • 互动率(互动量/曝光量)→ 折线图

  • 评论正负面情绪占比 → 饼图或堆叠柱状图

4)平台健康度

  • 日/周/月留存率 → 折线图

  • 30日活跃用户中老用户占比 → 面积图

  • 用户发布率(活跃用户中发笔记的比例)→ 单值卡片或仪表盘

  • 笔记平均生命周期(从发布到不再获得推荐流量的天数)→ 折线图

看板上要设置预警阈值,比如某个指标连续3天下降超过5%就自动标红。还要有下钻能力,比如DAU下降时可以点进去看到底是新用户还是老用户的问题。

好的可视化不是把所有图表堆上去,而是有层次、有重点------CEO看的是数字和趋势,运营同学看的是漏斗和明细。所以设计的时候要区分"宏观概览页"和"明细分析页"。


📌 备考建议:
小红书数据分析师的面试总体上偏重业务理解 + 技术落地的组合能力。SQL和Python是基本功,但真正让你和其他候选人拉开差距的,是你对"小红书是什么样的平台"有没有深度理解------社区内容的推荐逻辑是什么?商业化怎么和用户体验平衡?你不能只是一个会跑数的工具人。

>

建议面试前多刷几遍小红书,真正去体验产品,理解用户行为背后的动机。面试官通常会问"你用小红书吗?你觉得哪里可以改进?"------这个问题既能考察你的产品sense,也能看出你是不是真的对这个平台有热情。

相关推荐
Mr数据杨2 小时前
房屋售价预测在房地产估价与风控中的应用
机器学习·数据分析·kaggle
段一凡-华北理工大学2 小时前
【高炉炼铁领域炉温监测、预警、调控智能体设计与应用】~系列文章06:智能决策:从经验驱动到数据驱动
网络·人工智能·数据挖掘·高炉炼铁·工业智能体·高炉炉温
AI科技星2 小时前
全域数学本源公理:0、1、∞ 三者核心关系 (典籍定稿版)
人工智能·算法·数学建模·数据挖掘·量子计算
AI科技星2 小时前
全域数学·第卷:场计算机卷(场空间计算机)【乖乖数学】
java·开发语言·人工智能·算法·机器学习·数学建模·数据挖掘
刘~浪地球2 小时前
DeepSeek V4 应用实战:构建智能数据分析Agent
python·数据挖掘·数据分析
AI科技星3 小时前
《全域数学》第一部 数术本源 第三卷 代数原本第14篇 附录二 猜想证明【乖乖数学】
人工智能·算法·数学建模·数据挖掘·量子计算
不懒不懒3 小时前
【从零入门本地大模型:Ollama 安装部署 + Qwen2.5 实现零样本情感分类】
人工智能·分类·数据挖掘·大模型·ollama
PaperData3 小时前
2003-2026.1北大法宝地方数字经济政策数据
数据库·数据分析·学习方法·经管
YangYang9YangYan4 小时前
2026IT行业学数据分析的价值分析
数据挖掘·数据分析