数据来源:真实面经整理 | 版本:final


一、公司画像 & 校招节奏

小红书成立于,总部上海,是国内最具代表性的内容社区与社交电商平台。旗舰产品小红书App被称为"中国版Instagram+Pinterest",以种草、好物推荐、生活方式分享为核心,电商和直播带货业务持续扩展。

截至底,小红书月活超3亿,日活过1亿,员工约7000人。体量不算顶级,但技术密度极高——推荐算法是其核心护城河,而不是规模。

有一点值得单独说:小红书是国内女性用户占比最高的大厂,约70%。这直接影响推荐算法的设计逻辑——不只是"用户喜欢什么",还要理解"什么内容适合这个社区调性"。这是小红书推荐系统与其他平台最大的差异点。

技术栈核心特征:

  • 后端主力:Go语言(不是Java,这是小红书校招的核心特色)
  • 前端:Web+小程序+React Native全覆盖,性能要求极高
  • 推荐算法:多目标优化是标配,不能只会CTR
  • 基础设施:k8s + Prometheus + 大量Go编写的内部工具

主要招聘方向

方向 代表业务 技术侧重
后端开发(Go为主) 社区、笔记、购物 Go+微服务,高并发
算法工程师 推荐、搜索、广告 Python+C++,多目标优化
前端开发 Web/H5/小程序 React/Vue,性能优化
数据开发 用户行为分析、报表 Flink/Spark/ClickHouse
客户端 iOS/Android Swift/Kotlin
运维/SRE 基础架构稳定性 k8s/Prometheus/Go

校招节奏怎么理解?

阶段 时间 说明
暑期实习转正 最稳妥的入职通道
正式网申 campus.xiaohongshu.com
笔试 编程题+技术选择题
技术面试 2-3轮技术面+1轮HR
Offer发放 整体节奏比字节稍慢

整体定位:小红书校招面试难度中上,以Medium为主,Hard题相对少。但Go语言深度和性能优化的考察强度,超过大多数公司。


二、岗位 JD 解析:技术要求拆解

后端开发(Go方向)

必备项(有一项不达标就很难过): - 扎实的Go语言基础,了解GMP调度、GC机制 - 熟悉微服务架构,了解RPC框架(如gRPC) - 熟悉MySQL、Redis,会基本的性能调优

加分项(区分普通和优秀候选人): - 理解Go runtime的内部实现(切片/Map底层、goroutine调度细节) - 有高并发场景的实际经验或项目 - 了解分布式系统基础(一致性、服务发现)

隐性要求(JD没写但面试会考): - 能从业务视角理解技术选型,不只是"知道怎么做" - 了解小红书的产品形态,能结合笔记/推荐场景聊问题

前端开发

必备项: - React/Vue任选其一,要求熟练(不是"用过") - 理解浏览器渲染原理,能做基础性能分析 - 熟悉HTTP基础,能处理跨域、缓存等常见问题

加分项(小红书前端特别在乎的): - 熟悉Core Web Vitals(FCP/LCP/FID/CLS),会用Performance API分析 - 了解React Fiber调度原理 - 有小程序开发经验(小红书有自己的小程序生态)

隐性要求: - 小红书前端对性能的要求超过大多数公司,连面试也会深问性能优化细节,这不是"加分项",而是基本门槛

算法工程师

必备项: - 扎实的机器学习基础(CTR预估、Embedding、排序模型) - Python+C++编程能力 - 熟悉推荐系统整体架构(召回+排序)

加分项(算法岗竞争最激烈): - 多目标优化经验(不只是单一指标CTR) - 了解小红书特色的去中心化推荐理念 - 有冷启动相关的研究或工程经验


三、LeetCode 高频题 Top 20(真实面经数据)

小红书刷题策略:Medium为主,滑动窗口是特色高频。前端方向算法难度会适当降低,Go后端方向算法之外还会专门考语言特性。

第一梯队:必刷(这些没刷到就别去面)

# 题号 题目 考频 核心考点
1 206 反转链表 ⭐⭐⭐⭐⭐ 链表入场券,30秒写出是底线
2 3 无重复字符的最长子串 ⭐⭐⭐⭐⭐ 滑动窗口基础,小红书特色高频
3 102 二叉树的层序遍历 ⭐⭐⭐⭐ BFS模板,变形题极多
4 146 LRU缓存机制 ⭐⭐⭐⭐ 推荐系统缓存的经典映射
5 21 合并两个有序链表 ⭐⭐⭐⭐ 链表基础,merge sort的子问题

No.3 特别说明:小红书对滑动窗口的偏爱程度明显高于其他公司。建议不只是背代码,要真正理解"什么时候移动左指针"的逻辑。

No.146 特别说明:面试官会把LRU和"小红书推荐缓存过期策略"结合起来问,准备一下"LRU在推荐系统中的应用场景"的回答。

第二梯队:高频(面试出现概率60%+)

# 题号 题目 核心考点
6 215 数组中的第K个最大元素 堆/快速选择
7 15 三数之和 双指针经典
8 141 环形链表 快慢指针
9 236 二叉树的最近公共祖先 递归,后序遍历
10 88 合并两个有序数组 双指针,从后往前
11 25 K个一组翻转链表 链表进阶,考察代码工整性
12 56 合并区间 排序+贪心
13 42 接雨水 双指针/单调栈,考察思路深度
14 200 岛屿数量 DFS/BFS,图的基础
15 53 最大子序和 动态规划入门

第三梯队:中频(补充刷完更稳)

# 题号 题目 备注
16 5 最长回文子串 DP或中心扩展
17 46 全排列 回溯基础
18 239 滑动窗口最大值 单调队列,滑动窗口进阶
19 121 买卖股票的最佳时机 贪心/DP
20 322 零钱兑换 完全背包经典

刷题规律总结

规律1:滑动窗口是小红书招牌高频 No.3、No.239、No.76(最小覆盖子串)这三题要全部掌握。理解"模板"比背代码更重要:当右指针扩张时做什么,当左指针收缩时做什么。

规律2:Go方向有语言特性加题 纯算法通过后,后端方向很可能追问"用Go实现这个LRU,goroutine安全怎么保证",或者直接考切片/Map的底层实现。

规律3:前端方向算法难度适当降低 Hard题基本不考,但笔试可能有JS异步题(Promise链式调用、async/await的执行顺序)或性能相关实现题。

规律4:场景题结合推荐系统 LRU背后是"推荐缓存过期策略",布隆过滤器对应"过滤已读笔记",这些结合点值得准备一下。


四、技术面试考点

Go语言专项(后端核心,权重⭐⭐⭐⭐⭐)

这是小红书区别于其他大厂的核心考察维度。如果你准备小红书后端,Go语言必须比准备Java系大厂时更深入。

切片底层原理(小红书标志性考点)

Go的slice底层是一个三字段结构体:

type slice struct {
    array unsafe.Pointer  // 指向底层数组的指针
    len   int             // 当前长度
    cap   int             // 容量
}

扩容规则: - len < 1024:新容量 = 旧容量 × 2(双倍扩容) - len ≥ 1024:新容量 = 旧容量 × 1.25(增加25%)

高频追问点:切片截取(s[1:3])后,修改新切片会影响原切片吗? 答:会,因为共享底层数组。但如果append触发了扩容,新切片会指向全新数组,此后互不影响。这是Go初学者最容易踩的坑。

Map底层原理(小红书标志性考点)

hmap结构核心: - buckets:桶数组,每个桶存8个键值对 - tophash:每个key的哈希值高8位,用于快速比较 - overflow:溢出桶链表

扩容策略有两种: - 装载因子 > 6.5 → 翻倍扩容(元素太多) - 溢出桶数量过多 → 等量扩容(删除操作产生空洞,内存碎片化)

Map并发不安全原因:Go的map没有内置锁机制,并发读写时会触发panic: concurrent map read and map write。解决方案: - 加sync.RWMutex(读多写少时用读写锁) - 使用sync.Map(适合读多写少、key固定的场景)

GMP调度模型

G(goroutine)、M(系统线程)、P(逻辑处理器),三者关系: - P的数量由GOMAXPROCS控制,默认等于CPU核数 - M必须绑定P才能执行G - 当M阻塞(如系统调用),P会解绑并寻找空闲M继续运行G

Work-stealing:当P本地队列空了,会从其他P的队列"偷"一半G来执行,保证负载均衡。

GC:三色标记 + 写屏障

三色含义:白色(未访问)、灰色(已访问但子对象未处理)、黑色(已处理)。GC结束时,所有白色对象被回收。

写屏障的作用:GC过程中如果程序继续修改对象引用关系,写屏障保证不会漏掉存活对象。

实际调优:GOGC参数控制触发GC的阈值(默认100,即堆增长100%时触发)。


操作系统(权重⭐⭐⭐⭐)

孤儿进程 & 僵尸进程(小红书特色OS考点)

这是小红书面经中出现频率远高于其他公司的OS题,建议单独准备。

孤儿进程:父进程先于子进程结束。此时子进程被init进程(PID=1)收养,正常运行,最终由init回收。本身不危险,是正常现象。

僵尸进程:子进程已结束,但父进程没有调用wait()回收其PCB(进程控制块)。结果:进程条目残留在进程表中,占用PID资源。

危害:大量僵尸进程会耗尽系统PID资源(Linux默认PID上限约32768),导致无法创建新进程。

处理方法: - 父进程显式调用wait()或waitpid() - 父进程注册SIGCHLD信号处理函数,收到子进程退出信号后调用wait() - 终极方案:kill掉父进程,僵尸进程被init收养后由init回收

高频追问:如果父进程本身是一个守护进程(Daemon),长期不退出,如何处理它产生的僵尸进程? 答:在父进程中用signal(SIGCHLD, SIG_IGN)忽略SIGCHLD信号,内核会直接回收子进程,不产生僵尸。

进程间通信选择

方式 适用场景 特点
pipe(管道) 父子进程间,单向 简单,有容量限制
FIFO(命名管道) 不相关进程间 通过文件系统通信
共享内存 需要高吞吐量 最快,但需要自行同步
socket 跨机器或本机进程间 最通用,有网络开销

epoll ET vs LT 模式

  • LT(水平触发):只要缓冲区有数据就持续通知,类似轮询,编程简单
  • ET(边缘触发):只在状态变化时通知一次,要求一次性读完所有数据,性能更高但编程复杂

小红书高并发服务通常使用ET模式,相关追问可能涉及"为什么ET模式要用非阻塞IO"。


数据库(权重⭐⭐⭐⭐)

MySQL:索引与查询优化

最左前缀原则:联合索引(a, b, c),查询条件WHERE b=1 AND c=2无法命中索引(跳过了a)。索引顺序和查询条件必须从左对齐。

EXPLAIN分析重点: - type字段:ALL(全表扫描)→ 警戒;ref/eq_ref → 合格;const → 优秀 - Extra字段:Using filesort、Using temporary → 需要优化

Redis:推荐系统的好帮手

ZSet(有序集合)实现内容热度排名:ZADD hot_notes 热度分 笔记ID,ZREVRANGE hot_notes 0 9获取Top10。

布隆过滤器过滤已读笔记:用户A已读100篇笔记,推荐时如何快速判断某篇是否已读?布隆过滤器用极小的空间(相比HashSet节省10倍以上)实现近似查询,适合"大规模、允许一定误判"的去重场景。


推荐系统(算法岗方向,权重⭐⭐⭐⭐⭐)

这是算法岗竞争最激烈的部分,也是小红书最有差异化要求的地方。

系统整体架构

用户请求
   ↓
召回层(从千万级内容中召出几千篇)
   ↓
粗排(几千篇 → 几百篇,轻量模型)
   ↓
精排(几百篇 → 几十篇,重型模型)
   ↓
重排(多样性、去重、运营规则)
   ↓
展示给用户

召回层常见策略

  • 协同过滤:基于用户行为相似性,"喜欢A的人也喜欢B"
  • 矩阵分解:将用户-物品矩阵分解为低维Embedding
  • 双塔模型:用户塔和内容塔分别生成Embedding,点积计算相似度

多目标优化(小红书特色)

普通推荐系统只优化CTR(点击率)。小红书需要同时优化: - 点击率(用户愿意点进来) - 完播率(用户看完内容) - 互动率(点赞/收藏/评论) - 分享率(用户主动扩散)

这些指标之间存在冲突:标题党内容CTR高但完播率低。多目标优化需要找到帕累托最优解,常用方法:独立模型打分后加权、多任务学习(MTL)。

小红书特色:去中心化推荐

不同于抖音的"强马太效应"(头部内容越推越大),小红书推荐机制会给新内容一定的初始流量("流量池"机制)。新发布的笔记会进入小流量池,根据初始互动表现决定是否扩大推送。

这种机制的背后是运营考量:如果完全靠历史热度,新用户的内容永远得不到曝光,社区内容会越来越固化。

冷启动策略(高频追问点)

新用户冷启动(不知道兴趣): - 基于注册时填写的偏好标签 - 基于地域、设备类型的群体画像 - 前几次曝光做多样化试探,根据反馈快速收敛

新内容冷启动(没有历史交互): - 基于内容本身的文本/图片特征做相似内容推荐 - 给予固定的初始曝光机会,用真实互动数据评估


前端专项(前端方向,权重⭐⭐⭐⭐⭐)

性能优化(小红书前端标志性考点)

小红书对前端性能的要求,明显高于行业平均水平。面试可能直接问:"你怎么统计页面的加载速度?"

Core Web Vitals 四个核心指标: - FCP(First Contentful Paint):首次内容绘制,用户首次看到页面内容的时间 - LCP(Largest Contentful Paint):最大内容绘制,页面主要内容加载完成的时间(Google认为<2.5s为优秀) - FID(First Input Delay):首次输入延迟,用户首次交互到浏览器响应的时间 - CLS(Cumulative Layout Shift):累积布局偏移,页面内容意外移动的程度

Performance API 实战

// 获取各阶段时间戳
const timing = performance.timing;
const FCP = timing.responseStart - timing.navigationStart;
const DOMReady = timing.domContentLoadedEventEnd - timing.navigationStart;

// 现代方式:PerformanceObserver
const observer = new PerformanceObserver((list) => {
  for (const entry of list.getEntries()) {
    if (entry.name === 'first-contentful-paint') {
      console.log('FCP:', entry.startTime);
    }
  }
});
observer.observe({ entryTypes: ['paint'] });

上报策略的正确做法: - 不要同步上报(阻塞主线程) - 使用requestIdleCallback在浏览器空闲时上报 - 生产环境按比例采样(如10%采样),不要100%上报,否则数据量爆炸

React Fiber 调度原理

Fiber是React 16之后的核心架构。核心思想:把同步渲染拆分成可中断的异步任务。

关键机制: - 将渲染工作切片(Time Slicing),每个切片有时间限制(通常5ms) - 如果时间用完,把控制权交还给浏览器(保证60fps不卡顿) - 低优先级任务可以被高优先级任务打断(Concurrent Mode)

首屏优化方案

  • 代码分割(Code Splitting):React.lazy()按需加载,避免首屏加载所有JS
  • 关键CSS内联:首屏样式直接写在<head>中,减少CSS阻塞
  • 图片懒加载:IntersectionObserver监听图片进入视口再加载
  • 预渲染/SSR:对SEO要求高的页面用服务端渲染

五、面经规律总结

面试风格画像

面过小红书的同学普遍反馈:技术深度要求高,但氛围比较友好。面试官喜欢聊技术细节,不是死记硬背题,而是真的会追问"你为什么这样设计"、"你遇到过这个问题吗"。

几个值得注意的规律:

1. Go切片和Map是标志性考点

能清楚讲出扩容机制、共享底层数组的坑、Map并发不安全的原因——这些能直接让面试官眼前一亮。很多候选人知道Go,但不了解底层,小红书的面试官对这种差别敏感。

2. 推荐系统面试结合小红书业务

纯算法八股回答完,面试官大概率会追问:"那小红书的笔记推荐,你会怎么设计冷启动策略?"这是在考察你对产品的理解,不只是算法能力。提前了解小红书的产品逻辑(流量池机制、去中心化推荐)是加分项。

3. 前端性能优化是硬门槛

Core Web Vitals这些指标在大多数公司只是"加分项",在小红书是基本考察内容。如果你连FCP和LCP的区别都解释不清楚,前端面试很难过。

4. 整体风格偏对话式

小红书面试官喜欢"聊",不是单纯的问答题。如果你能在回答问题时主动延伸("这个场景在小红书这类社区平台上还有一个相关问题是……"),会给面试官留下更好的印象。

高概率追问链

实战中最常见的追问组合:

Go切片追问链 - 切片底层结构是什么? → 追问:切片截取后,修改会影响原切片吗? → 追问:什么情况下会不影响?(append触发扩容) → 追问:扩容时发生了什么?(内存拷贝,新指针)

Go Map追问链 - Map为什么并发不安全? → 追问:怎么解决?(sync.RWMutex 或 sync.Map) → 追问:sync.Map适合什么场景?(读多写少,key相对固定) → 追问:sync.Map底层用了什么机制?(read/dirty两个map)

僵尸进程追问链 - 什么是僵尸进程? → 追问:有什么危害?(耗尽PID资源) → 追问:怎么彻底解决?(kill父进程 或 SIGCHLD忽略) → 追问:孤儿进程和僵尸进程有什么区别?

推荐系统追问链(算法岗) - 你了解推荐系统的整体架构吗? → 追问:小红书有大量新创作者,新笔记如何冷启动? → 追问:如何平衡探索(新内容曝光)和利用(历史热门内容)? → 追问:你会用什么指标评估冷启动策略的效果?

笔试特点

  • 题型:编程题3-4道 + 技术选择题(Go/OS/数据库)
  • 难度:Medium为主,Hard偶尔出现
  • 时间:90-
  • 前端方向特殊性:笔试可能有JS异步执行顺序题(Promise、async/await)或性能相关的代码题
  • Go方向特殊性:可能有Go语言特性的选择题,不只是通用算法

校招节奏

总体策略

小红书备考的核心是:Go语言深度 > 算法广度。如果你的时间有限,宁可把Go底层原理搞透,也不要刷太多Hard算法题。

前端方向策略调整:把"Go语言深度"替换为"前端性能优化体系",其余时间分配类似。

详细时间安排

阶段 时间 重点任务 目标产出
Go语言深度 切片/Map底层原理、GMP调度、GC机制、sync.Map 能手画切片和hmap的内存结构,能解释并发不安全的根因
操作系统 进程/线程、孤儿进程和僵尸进程、epoll ET/LT 追问链能完整回答,不卡壳
数据库+Redis MySQL索引最左前缀、EXPLAIN分析;Redis ZSet+布隆过滤器 能给出一个慢查询优化的完整思路
推荐系统(算法岗) 召回/排序基础、多目标优化、冷启动策略 能用自己的话描述小红书推荐流量池机制
算法专项 滑动窗口系列(No.3/239/76)、LRU实现、链表全系列 滑动窗口模板手写不卡顿
冲刺 前端岗:Core Web Vitals体系+Performance API;看最新面经;整理项目亮点 能用说清楚自己最有技术含量的项目

最低备考标准 Checklist

每项打勾后才算准备充分:

Go方向 - [ ] Go切片的三字段结构(ptr/len/cap)和扩容规则能手写出来 - [ ] Go Map并发不安全的根本原因能解释清楚 - [ ] sync.Map的适用场景和底层机制能说出要点 - [ ] GMP调度的基本工作原理能讲30秒 - [ ] GC三色标记的流程能用通俗语言描述

操作系统 - [ ] 僵尸进程和孤儿进程的区别及各自的处理方法能说清楚 - [ ] 追问链(见第五章)能完整回答不断

算法 - [ ] 滑动窗口模板(以No.3为例)能30秒内写完 - [ ] LRU缓存机制(No.146)能不借助外部内存写完

推荐系统(算法岗替换前端性能优化) - [ ] 召回+粗排+精排+重排的流程能描述清楚 - [ ] 冷启动至少能给出2-3种解决方案 - [ ] 多目标优化的基本思路(MTL或加权)能说明

前端方向 - [ ] Core Web Vitals四个指标(FCP/LCP/FID/CLS)含义能说清楚 - [ ] Performance API获取FCP的代码思路能描述 - [ ] React Fiber的核心思想(可中断调度)能解释

第29-模拟面试清单

  • 找同学模拟一次"Go切片→追问链"的完整面试对话
  • 准备一道你最有信心的算法题,练习30秒写完的状态
  • 准备一个结合小红书业务的场景题回答(推荐冷启动或布隆过滤器去重)
  • 对照你的项目,找出1-2个"技术含量最高"的决策点,准备讲清楚


📚 你可能还需要这些

同类社区平台对比

想了解相似赛道的其他大厂要求? - 📌 快手校招备考攻略(Go语言同样是主力,对比视角很有用) - 📌 哔哩哔哩校招备考攻略(内容社区,推荐系统考察角度相似)

算法方向参考

  • 📌 阿里巴巴算法岗备考攻略(多目标优化考察更深)
  • 📌 字节跳动算法岗备考攻略(推荐系统工业界标杆)

基础能力补强

  • 📌 大厂C++技术面试常考题(OS基础部分对Go方向也适用)
  • 📌 大厂笔试面试八股文-算法-数组常考题

💡 关注我,少走弯路

我会持续分享: - ✅ 大厂高频题整理(按公司、岗位精准分类) - ✅ 最新面经汇总(第一时间更新,不放过新考点) - ✅ 面试技巧实战(真实追问链还原) - ✅ 内推信息(不定期发布)

这篇攻略整理了大量真实面经,如果对你有帮助: - 👍 点个"赞"和"在看",让更多备考同学看到 - 💬 评论区聊聊你的进度,或者补充你知道的小红书考点 - 🔄 转发给同样在备考小红书的朋友

有问题随时留言,看到都会回!


数据来源: 本文技术考点来自真实面经整理与官方文档(Go语言规范、MDN Web Docs、Google Web.dev),不含任何第三方刷题网站数据。