尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

小红书算法岗笔试备战指南:考点拆解与解题思路

小红书算法岗笔试备战指南:考点拆解与解题思路 每年春招季小红书算法岗的笔试总能引起不少人讨论原因无他——题量不小、覆盖面广、业务特色明显。2024年春招第二批算法岗笔试我当时前后准备了一个多月考下来最大的感受是光靠刷题还不够还得对小红书这种内容社区背后的推荐、搜索、内容理解链路有自己的理解。这篇内容不是官方真题复盘而是我结合自己的备考经历和同批反馈整理出来的“经验地图”。如果你正在准备小红书的算法岗笔试或者对内容平台算法岗的考察方向好奇这篇文章能帮你少走很多弯路。我会把第二批笔试的整体结构、核心考点、编程题思路、业务简答题侧重点以及我在实际考试中踩过的坑一条条拆开来讲。1. 笔试概况第二批到底在考什么1.1 考试形式和整体节奏小红书算法岗的笔试一般在春招季分批进行第二批通常安排在3月中下旬到4月初。笔试形式以在线笔试为主平台一般是牛客网或赛码全程双机位监控手机摄像头要拍到桌面和双手环境一定要提前整理好。总时长通常在120分钟左右题量不算小时间紧的话选择题来不及细想就可能被拖住。从题型分布来看第二批笔试大致分为三块基础知识选择题约15到20道覆盖数据结构、算法、机器学习、深度学习、概率统计。编程题一般2到3道难度梯度明显从LeetCode Medium到Hard靠拢。业务简答题1到2道多是开放性设计题和推荐、搜索、内容理解强相关。这样的结构意味着它不像纯算法竞赛那样只拼代码也不会像纯理论考试那样只背概念。小红书算法岗的考察逻辑一向偏“工程 业务”既看你基础扎不扎实也看你能不能把算法用到内容分发的真实场景里。第二批和第一批相比题目风格基本一致但编程题的边界类用例出得更细业务题的社区属性更强比如更关注笔记去重、多模态内容理解这些方向。1.2 为什么说小红书算法岗笔试有“社区基因”小红书的算法岗和其他互联网公司的算法岗有个明显区别它的核心业务是“内容社区 种草决策”。这意味着算法工程师不光要做推荐还要处理搜索、内容标签、多模态理解、去重、打压低质内容等一系列和 UGC 强相关的问题。笔试里出现的业务题通常不会纯考模型推导而是给你一个具体场景比如“新笔记如何冷启动”“如何判断两篇笔记是重复内容”让你给出可落地的方案。所以备考时不能只看《机器学习》和《统计学习方法》还要主动去理解小红书的推荐链路是怎么设计的。比如经典的“召回 → 粗排 → 精排 → 重排”漏斗模型在内容社区里会遇到什么特殊问题小红书笔记的图文、视频、标题、话题标签、用户互动行为点赞、收藏、评论、关注、转发这些信号在特征工程里怎么组合这些问题笔试不一定会直接问但你答业务题时如果带出这些理解会很加分。2. 基础选择题高频考点全梳理2.1 数据结构与算法基础KMP、排序、堆、树都绕不开小红书笔试的选择题里数据结构与算法是最稳定的一块。常考的知识点包括KMP 算法的 next 数组计算、各类排序算法的稳定性和复杂度、堆的调整过程、二叉树遍历、哈希冲突处理办法、图的最短路径算法等。热搜词里那个“kmp 算法next 数组定义为 pabacaba”就是非常典型的考法。以 KMP 为例很多人记模板能记但笔试选择题会给你一个具体模式串让你手算 next 数组或者 nextval 数组。这个真得自己推一遍不能只背代码。比如模式串p abacaba它的 next 数组按经典定义next[i]表示当前字符失配时模式串应该跳转到的位置通常从next[0] -1开始挨个算下来是-1, 0, 0, 1, 0, 1, 2, 3不同教材的边界定义略有差异但考察逻辑一致。如果只是懵着记考场上很容易在边界条件上翻车。排序这里常见考点是快速排序是不是稳定的不是。堆排序建堆的时间复杂度是多少O(n)但很多人会误选成O(nlogn)。归并排序需要多少额外空间O(n)。这些细节一定要自己推一遍。我备考时做了一个大表把快排、归并、堆排、希尔、冒泡、选择、插入的“平均/最坏复杂度、稳定性、额外空间、适用场景”全部列出来对比记忆效果很好。树和图也常考。比如给定一棵二叉树的前序和中序遍历让你推出后序遍历给一个无向有权图让你跑一遍 Dijkstra 的每一步。Dijkstra 的核心是“贪心 松弛”每轮选择当前未访问节点中距离最小的节点然后更新它的邻居距离。选择题里经常挖“第几步时 dist 数组是什么样”的坑建议考前亲手在纸上走一遍。2.2 机器学习与深度学习基础原理理解比背公式重要机器学习部分小红书笔试的侧重点是“原理 场景”。像逻辑回归、SVM、决策树、随机森林、GBDT、XGBoost、K-Means、KNN、朴素贝叶斯、EM 算法这些经典模型考频都很高。常考形式包括模型的损失函数是什么正则化项 L1 和 L2 的区别为什么 L1 更容易得到稀疏解偏差和方差怎么权衡过拟合怎么检测和缓解。这里有一个“热搜词”相关的点——KL 散度、ELBO、EM 算法之间的关系小红书笔试很喜欢出。很多同学看到KL ELBO 算法原理详解会觉得头大其实可以用一个很朴素的类比EM 算法就像在做“先猜后修正”——先根据当前的模型参数猜隐变量的分布E 步再根据猜出来的分布重新估计模型参数M 步迭代到收敛。ELBO 是 Evidence Lower Bound也就是对数似然的一个下界最大化 ELBO 等价于最小化真实后验和近似后验之间的 KL 散度。简答题里如果遇到“如何设计一个聚类/降维算法”这类开放题能把这个“变分推断”的思路讲清楚会是很不错的加分点。深度学习部分CNN、RNN、LSTM、Transformer、Attention 机制都是高频考点。常考的点包括卷积层的参数量和感受野计算1×1 卷积的作用通道变换、降维为什么 Transformer 要加位置编码self-attention 的时间复杂度为什么是O(n^2)BatchNorm 在训练和推理时的区别Dropout 为什么能缓解过拟合常见的激活函数ReLU、sigmoid、tanh、GELU各自的优缺点。这些题偏理解和计算建议在纸上手推一遍卷积输出的尺寸公式输出尺寸 (输入尺寸 - 核大小 2×padding) / stride 1这个公式笔试高频出现。2.3 概率统计与数学基础贝叶斯和信息论不能丢数学基础部分概率统计是重头戏。常考的知识点包括条件概率与贝叶斯公式、期望与方差的计算、常见分布正态、二项、泊松、均匀、最大似然估计、置信区间、相关性 vs 因果性。有一类题目特别典型给你P(A)、P(B|A)、P(B|非A)让你求P(A|B)这就是贝叶斯公式的直接应用。还有一个高频点是“三门问题”的变体本质也是贝叶斯但只要理解“主持人打开门时并不是随机开而是知道奖品在哪”就能想清楚。线性代数部分矩阵乘法、特征值特征向量、正定矩阵、SVD 分解是常客。推荐系统里 SVD 和矩阵分解是基础所以小红书笔试出特征值、特征向量相关题目并不奇怪。信息论部分信息熵、交叉熵、KL 散度之间的关系几乎是必考的交叉熵 信息熵 KL 散度分类任务里我们最小化交叉熵等价于最小化预测分布和真实分布之间的 KL 散度。这个关系搞清楚了选择题和简答题都能用上。3. 编程题实操从读题到 AC 的完整思路3.1 编程题的难度分布与常见类型小红书算法岗第二批的编程题整体难度不低但也不会刻意出偏题怪题。按我观察一般 2 到 3 道题的难度分布大概是第一道LeetCode Medium 偏简单常见类型是数组/双指针/模拟适合热身。第二道LeetCode Medium可能涉及动态规划、贪心、二叉树的遍历与构建。第三道LeetCode Medium 到 Hard 之间常见类型是图论拓扑排序、最短路、复杂 DP、字符串处理。考察的题目类型和热搜词高度重合动态规划、贪心、快速幂、KMP、堆排序、拓扑排序Kahn 算法、二分图匹配HK 算法、网络流相关也有概率出现。不过小红书并不是 ACM 风格不会出特别偏的竞赛题更看重“能否在限定时间内把问题拆解成标准算法模型”。3.2 一道典型动态规划题的完整拆解我遇到的第二道编程题是一道编辑距离的变体大致意思是给定两个字符串s和t你可以在s中插入、删除、替换字符但每次操作都有不同的代价插入代价、删除代价、替换代价各不相同求把s变成t的最小总代价。这道题本质是“加权编辑距离”经典解法是二维 DP。定义dp[i][j]表示把s[0:i]变成t[0:j]的最小代价。状态转移分三种情况如果s[i-1] t[j-1]则dp[i][j] dp[i-1][j-1]。删除dp[i][j] min(dp[i][j], dp[i-1][j] delete_cost)插入dp[i][j] min(dp[i][j], dp[i][j-1] insert_cost)替换dp[i][j] min(dp[i][j], dp[i-1][j-1] replace_cost)初始条件要注意dp[0][j] j * insert_costdp[i][0] i * delete_cost因为从一个空串变过去只能一路插入/删除。边界条件漏了样例能过但一旦字符串长度是 0就会数组越界或者结果全错。这个坑我踩过真的非常经典。如果你写成 Python代码大概是def min_edit_cost(s: str, t: str, insert_cost: int, delete_cost: int, replace_cost: int) - int: m, n len(s), len(t) dp [[0] * (n 1) for _ in range(m 1)] for i in range(1, m 1): dp[i][0] i * delete_cost for j in range(1, n 1): dp[0][j] j * insert_cost for i in range(1, m 1): for j in range(1, n 1): if s[i - 1] t[j - 1]: dp[i][j] dp[i - 1][j - 1] else: dp[i][j] min( dp[i - 1][j] delete_cost, dp[i][j - 1] insert_cost, dp[i - 1][j - 1] replace_cost ) return dp[m][n]这类题只要把“最后一步的动作”想清楚就能推导出状态转移。如果现场一下子没思路我的建议是先写暴力递归把递归的“选择分支”列出来再改写成记忆化搜索最后转成迭代 DP。这条路线比直接盯着空编辑器硬想靠谱得多。3.3 字符串题与 KMPnext 数组别只靠背字符串处理也是高频题比如查找子串、判断重复模式、求最长回文子串等。这里 KMP 算法是躲不开的尤其是 substring 匹配的扩展题。虽然笔试前我提醒自己“总不能考 KMP 吧”结果就真考了一道判断字符串是否由一个子串重复构成的题。常规暴力法就是枚举所有可能的子串长度去拼接但最优解就是 KMP 的一个性质如果len % (len - next[len]) 0那么这个字符串就是由一个长度为len - next[len]的子串重复构成的。这里要注意很多教材里next数组的定义有区别。有的定义next[i]是“包含当前字符在内的最长相等前后缀长度”有的定义next[i]是“失配时跳转到的位置”。笔试代码题不管你怎么定义但一定要能在代码里正确实现。我习惯的写法是vectorint getNext(const string p) { int n p.size(); vectorint next(n, 0); for (int i 1, j 0; i n; i) { while (j 0 p[i] ! p[j]) j next[j - 1]; if (p[i] p[j]) j; next[i] j; } return next; }这个写法里next[i]表示p[0:i]的最长相等前后缀长度。比如p abacaba算出来是[0, 0, 1, 0, 1, 2, 3]配合“重复子串判断”的结论可以很漂亮地解决那道题。选择题里如果是另一套从-1开始的定义也别慌本质上区别不大先把定义看清。3.4 快速幂、堆排序与图论小题边界条件决定成败除了 DP 和字符串编程题里还经常出现快速幂、堆排序、拓扑排序、最短路这类“标准算法题”。快速幂的核心思想是二分幂把指数按二进制拆开x^13 x^8 * x^4 * x^1这样只需要O(log n)次乘法而不是O(n)次。代码很短def fast_pow(base: int, exp: int, mod: int) - int: res 1 base % mod while exp 0: if exp 1: res res * base % mod base base * base % mod exp 1 return res注意如果模数是质数可以用费马小定理做优化如果题目要求大数取模每一步乘法后都要取模不然 Python 可能没问题但 C/Java 就会溢出爆long long。堆排序考得少一点但“用优先队列求 TopK”几乎是必会的因为业务场景里推荐系统的粗排阶段经常要做 TopK这个思路在简答题里也可以用来做方案设计。图论小题里拓扑排序Kahn 算法考得比较多因为和依赖关系、任务调度强相关。思路是统计每个节点的入度把所有入度为 0 的节点入队然后逐个弹出更新邻居入度邻居入度变 0 就入队。最终如果拓扑序列的长度小于节点总数说明图里有环。代码不难但要注意题目有没有让输出“字典序最小”的拓扑序——如果有队列要换成优先队列。4. 业务简答题推荐链路与内容理解的思考框架4.1 推荐场景的常见出题方向小红书算法岗的简答题几乎不会脱离“内容推荐”这个大背景。常见的有两种题型一种是“策略设计题”比如“新笔记没有互动数据如何冷启动”另一种是“数据分析题”比如“某个指标下降了怎么排查原因”。以“新笔记冷启动”为例光回答“给新笔记流量扶持”是不够的最好能给出完整的方案首先要给新笔记一个“冷启动流量池”比如 200 到 500 曝光观察点击率、完播率、互动率。其次要解决冷启动阶段的特征稀疏问题。可以用内容理解来补充特征比如对图文和视频做多模态标签OCR、场景识别、语音转文本再用标签和已有优质笔记做相似度匹配作为召回阶段的补充。然后要设计探索和利用的平衡。简单做法是用 UCBUpper Confidence Bound或者汤普森采样给互动数据不足的笔记更高的探索权重。最后要设置淘汰和加速机制如果冷启动阶段表现超过同类笔记的某个分位数就加大流量如果低于阈值就减少曝光避免浪费流量。这种回答方式既有框架又有细节面试官看了会认为你真正思考过推荐系统怎么落地。4.2 内容理解与多模态方向从标签到去重小红书是典型的 UGC 社区用户每天上传海量图文和视频笔记所以内容理解在算法岗的业务中占比很高。简答题很可能会考“多模态内容理解”比如“如何为一篇笔记生成标签”“如何检测低质内容”“如何做相似笔记去重”。这部分可以结合一个完整流程来讲图文笔记先做 OCR 识别图片里的文字再用视觉模型如 CLIP、EVA-02 等提取图像特征文本侧用 BERT 或类 ChatGPT 模型提取语义特征。视频笔记先抽帧再用视频理解模型提取动作、场景、物体等维度特征同时使用 ASR 把语音转成文本。把多模态特征拼接或对齐后做多标签分类或者向量召回。比如用向量数据库存笔记的 embedding在线服务时通过 FAISS 做相似度检索。去重场景也常考。可以用的方案是“SimHash 汉明距离”把文本和图像特征哈希成 64 位指纹汉明距离小于某个阈值就判定为重复。或者更现代一点用 embedding 算余弦相似度超过阈值就拦截。注意去重不是简单地“完全一样”而是要处理“改了一句话”“加了滤镜”“换了 BGM”的变体。所以在线去重之外通常还需要离线挖掘“同源笔记”建立相似图做社区发现相关的策略。4.3 系统设计与 A/B 实验从模型到评估简答题还可能涉及系统设计和实验评估。比如“推荐系统 A/B 实验的指标怎么选”。这里不要只答 CTR、完播率而要分场景关注用户活跃和留存看次留、7 日留存、人均使用时长。关注推荐质量看 CTR、互动率点赞、收藏、评论、长按“不感兴趣”的比例、举报率。关注生态健康看低质内容曝光占比、创作者涨粉效率、内容多样性比如曝光类目的 Shannon 熵。注意“沉没指标”一个改动可能让 CTR 提升了但同时导致用户刷到的内容越来越单一长期留存下降。所以短期指标和长期指标要结合看。如果在简答题里遇到“让你设计一个推荐模型”可以从召回、粗排、精排、重排四个阶段来展开。召回阶段讲双塔模型user embedding 和 item embedding 的内积强调实时性粗排阶段讲轻量模型或者向量检索精排阶段讲 DeepFM、DIN、BST 这类模型强调特征交叉和用户行为序列建模重排阶段讲多样性控制、MMR 算法、打散策略。能把这套框架讲清楚基本就能做到“自圆其说”。5. 常见问题与备战建议5.1 笔试现场最容易翻车的几个环节我见过不少同学笔试翻车主要集中在几个地方选择题耗时失控。有人在一道数学题上纠结 10 分钟导致后面编程题没时间写。我的建议是选择题平均一题不超过 1.5 分钟卡住就先标记跳过编程题永远优先于选择题。编程题输入输出写错。小红书笔试一般用标准输入输出有的题目有多组输入有的单组输入。多组输入一定要用while循环读别一上来只处理一组。还有个别题尤其是输出浮点数对精度有要求注意保留几位小数。编译环境不一致。本地跑得好好的代码一提交 CECompilation Error大概率是头文件缺失或者用了本地独有的库。考前先去牛客或者赛码的模拟环境测一套代码确认编译命令和 C/Python 版本。简答题没时间写。简答题放在最后但分值不低。至少留 20 到 25 分钟。这要求前面选择题控制在 35 分钟内编程题每题不超过 30 分钟。编程题如果真的没有思路先把暴力解法写上至少能过部分测试点。5.2 刷题与复习的优先级建议如果你的时间有限比如只剩一周我的优先级建议是编程题先把 LeetCode 高频题刷透。重点刷数组、字符串、双指针、哈希、二叉树、DFS/BFS、动态规划、贪心、堆、快速幂。在这个阶段动态规划每天至少做 3 道把“状态定义、转移方程、初始化、遍历顺序”四件套想清楚。选择题数据结构KMP、排序、树、图 机器学习基础损失函数、正则化、过拟合 深度学习基础CNN、Transformer三大块优先。在牛客上找“算法岗真题”分类刷很多公司是互相参考的。业务题每天读一篇推荐系统相关的技术博客重点关注“特征工程”“召回”“排序”“冷启动”“A/B 实验”这些关键词。不用背公式但要把框架记住能够用自己的话复述一个完整的推荐系统链路。我个人的经验是用“输出倒逼输入”的方式最有效率每天写完题之后假装给一个不懂的人讲一遍思路讲不出来就说明没真正理解。这个方法听起来笨但真的能帮你在考场上快速建立思路。5.3 心态与细节笔试不是一锤子买卖最后说一点心态上的体会。很多同学对“第二批笔试”有一种误解觉得第二批是不是意味着第一批已经招满了自己只是陪跑。实际上春招的批次更多是时间安排的差异和录取概率关系不大。小红书的春招名额在几轮笔试之间动态分配第二批笔试照样有大量候选人进入面试环节。我在实际准备过程中最大的心得是笔试考察的核心不是“你会不会背知识点”而是“你在有限时间内能不能稳定输出你已经会的东西”。所以考前一周不要再纠结那些偏题怪题老老实实把高频考点的代码默写一遍把选择题的错题看一遍比什么都管用。我踩过最深的坑就是考前看了太多“冷门算法”的教程结果上考场发现真正卡住我的不是算法本身而是一道很普通的 DP 题没看清题目条件把数组开小了。根据我个人经验如果你能坚持把中等难度的动态规划题、KMP 的 next 数组手算、以及推荐系统召回-精排-重排的基本链路这三点吃透这套笔试的把握就能高出不少。最后再分享一个小技巧笔试开始前先花 90 秒把三部分题目都扫一遍先做“自己看着最有把握”的题不要按题目顺序硬着头皮一路做到底。这样既能建立信心也能保证把该拿的分都拿到。
返回列表