2023届秋招已经过去一段时间了,小红书后端开发岗的笔试是我那年完整参加下来印象最深的一场。很多同学私信问这场笔试到底考什么、难度怎么样、怎么准备才不浪费机会。我干脆把整个流程和复盘写出来,不涉及具体原题,重点说题型分布、知识点权重、时间分配、答题策略,以及那些只有真正上过考场才会发现的坑。无论你是准备下一届秋招,还是刚开始规划后端开发学习路线,这篇都能给你一份可以直接照着用的大纲。
先说结论:小红书后端岗笔试的调性,和字节、美团这类公司不太一样,它更看重基础打得牢不牢,同时对工程思维和业务理解有明确考察。整个笔试时长一般在120分钟左右,题目分几大块,算法题不会刻意出特别偏的难题,但选择题覆盖面很广,从操作系统、网络到数据库、Java/Golang都有,甚至会有少量中间件和场景设计题。这个组合意味着,单纯刷LeetCode是不够的,必须把后端的核心知识体系过一遍,否则选择题会丢很多分。
下面我按笔试的完整拆解顺序来写,从笔试前的信息准备,到各题型怎么答,再到备考路线和实战避坑,尽量把这场笔试还原成一个可以复盘的完整过程。
1. 笔试整体结构与备战前要搞清楚的事
1.1 投递节奏与笔试通知机制
我是从官网投递的简历,投完大概两周左右收到了笔试邮件,邮件标题是“小红书2023秋招后端开发岗位笔试邀请”。这里有个经验,想投小红书的话,尽量走内推或者赶早批,早批简历筛选会更宽,笔试排期也会更充裕。投递时岗位名称要看仔细,后端开发岗在小红书体系里分得比较细,有的偏业务后端,有的偏基础架构,笔试内容虽大体一致,但侧重点会有差异,比如偏平台的岗位算法题权重可能更高,偏业务的岗位场景设计题会更多。
笔试通知一般提前3到5天发到邮箱,同时短信提醒。邮件里会写明考试平台、考试时间段、设备要求。小红书用的是在线笔试平台,支持浏览器答题,需要提前测试摄像头和屏幕分享权限。我那年要求双机位,一台电脑答题,一部手机放斜后方监考,手机要登录指定的监考小程序。这个要求一定要提前准备好,别等开考了才发现手机没电或者没装小程序。
还有一点容易忽略:笔试时间是固定的,不是全天任选。通常分为两场,比如下午一场、晚上一场,选一场参加就行。一旦选定并进入考试,中途不能随意退出,断网、断电、误关页面都会算作异常记录。所以开考前务必清空后台应用,关掉消息弹窗,把电脑电源插上。
1.2 考试平台与题型分布
考试平台我碰到的是牛客网,有的场次可能是赛码,功能上大差不差。答题界面左侧是题目列表,右侧是代码编辑区,支持C++、Java、Golang、Python等主流语言。代码题需要自己处理输入输出,这个和力扣的“只写函数”模式不一样,必须记住标准输入输出的写法,否则题做对了也可能因格式问题判0分。
从题型上看,大致分为三类:
- 单选题与多选题:一般20到30题,覆盖数据结构、算法分析、操作系统、计算机网络、数据库、编程语言基础。
- 编程题:一般2到3题,难度从简单到中等偏上,偶尔有一题接近Hard,但不属于竞赛级难题。
- 简答/设计题:有的批次会有一道简答题,让你描述某个系统设计方案或某个线上问题的排查思路,不写代码,纯文字回答。
这里要特别强调,选择题占比其实很高,二十分的选择题如果错误率超过30%,后面编程题全对也可能过不了。我见过不少算法很强的同学折在选择题上,因为太久没复操作系统和网络细节,看到题觉得“学过”但选不出来。
1.3 不同岗位方向的侧重点差异
后端开发岗不等于“Java开发岗”。小红书的服务端技术栈以Java和Golang为主,也有不少中间件是自研的,所以笔试不会只盯着一门语言。你可以在答题时选择自己熟悉的语言写代码,但选择题里会出现Java和Golang的相关问题。如果只精通Python,理解Java的并发题就会比较吃力。
我当时主攻Java,所以复习时把JVM内存模型、并发编程、Spring常用机制都过了一遍。但考场上也碰到了Golang的垃圾回收相关选择题,以及Redis、Kafka这类通用中间件题。这说明准备后端笔试不能只看语言,核心是掌握后端开发的通用知识体系:数据结构、算法、操作系统、网络、数据库、缓存、消息队列。这些内容在平时做项目时也会用到,只是笔试会考得更细更基础。
2. 选择题与基础题:那些不能丢分的模块
2.1 数据结构与算法高频选择题
第一类必考的是数据结构基础。比如栈和队列的应用场景、二叉树遍历方式、堆的调整过程、哈希冲突的处理方法、图的最短路径算法适用条件。看似简单,但出题人特别爱在“最优时间复杂度”“最坏情况”“平均情况”这些字眼上做文章。比如问“在有序数组中查找某个数,最快用什么算法”,如果选成二叉搜索树就错了,因为数组随机访问是O(1),二叉搜索树还要从根节点开始。
这种题拿高分的办法,不是背结论,而是理解每个数据结构的底层实现。我复习时把数组、链表、栈、队列、树、哈希表、堆、图这八类东西的增删改查复杂度重新推了一遍,并且把典型应用场景列成一张表对比,效果很好。考场上遇到“最适合实现LRU Cache的结构”这种题,马上能答出“HashMap+双向链表”,因为底层细节和场景都印在脑子里了。
2.2 计算机网络与操作系统考点
网络题几乎是必考的,而且考得比大学期末深入。TCP三次握手、四次挥手是基础,重点是TCP为什么需要TIME_WAIT、HTTP和HTTPS区别、DNS解析流程、HTTPS握手过程、TCP拥塞控制里的慢启动和拥塞避免。还有一类很实用的问题:输入一个URL到页面显示,中间经历了什么。这道题虽然不直接写代码,但选择题会从各个阶段出细节,比如DNS用UDP还是TCP、CDN缓存在哪一层、TCP连接复用是怎么回事。
操作系统方面,进程与线程的区别是送分题,但容易被追问细节。比如进程间通信方式有哪些,线程切换开销大的原因,虚拟内存和页面置换算法,进程调度算法,死锁产生的四个必要条件。我印象里有道题问“发生系统调用时,CPU状态如何切换”,答案是用户态切换到内核态,但很多选项会混淆“中断”“异常”“陷入”的概念。这种题就是靠复习时抠概念细节,靠考前突击容易漏。
2.3 数据库与MySQL常见坑
数据库选择题的密集程度很高。索引的原理和应用是重中之重,聚簇索引与非聚簇索引的区别、联合索引最左前缀原则、覆盖索引、索引失效的几种情况,基本是必考。事务的ACID特性、隔离级别、MVCC原理、锁机制,包括行锁、表锁、间隙锁,也经常出现。
这里分享一道让我印象深刻的题:表中有一个联合索引(a, b),查询条件是where b = ? and a = ?,问索引会不会生效。很多人以为最左前缀必须按顺序写,但实际上MySQL优化器会自动调整顺序,只要WHERE条件里同时出现了a和b,索引就会生效。这种细节只有真正设计过表、用EXPLAIN看过执行计划的人才能快速判断。
Redis的题也有,比如Redis持久化机制RDB和AOF的区别、缓存穿透和缓存雪崩的解决方案、Redis分布式锁的实现方式。这些内容属于后端开发实战中会碰到的,笔试出现说明出题人希望候选人不仅会写SQL,还了解生产环境的常见组件。
2.4 Java基础与并发编程细节
如果你用Java答题,这部分很关键。String、StringBuilder、StringBuffer的区别,HashMap和ConcurrentHashMap的底层实现与线程安全性,ArrayList和LinkedList适用场景,这些都是老熟人了,但出题人会往深处挖。比如HashMap在JDK8的扩容机制、红黑树引入的条件、ConcurrentHashMap在JDK8如何用CAS+synchronized保证并发安全。
还有并发编程的原子性、可见性、有序性,volatile关键字的作用,synchronized和ReentrantLock的区别,线程池的核心参数和拒绝策略,ThreadLocal的原理和内存泄漏问题。我建议复习时自己画一画JVM内存区域图,把堆、栈、方法区、程序计数器的分工搞清楚,选择题里经常会把“栈溢出属于什么错误”和“常量池放在哪里”混在一起考。
这个模块的复习材料不用多,市面上主流的Java后端面试题合集够用,但一定要自己动手验证,比如写一段多线程代码修改共享变量,看看结果和预期差异,再理解内存可见性。只背题的话,换一个问法就容易懵。
2.5 选择题答题策略与蒙题技巧
选择题占比高,但时间有限,建议单项选择控制在40分钟内完成。遇到不会的题,先跳过还是先蒙,我的策略是:先快速作答,拿不准的标记,最后统一处理。因为后面编程题需要整块时间,不能因一道选择题纠结太久。
多选题是最容易丢分的,因为少选、错选都不得分,选多也扣分。应对方法是看选项之间的逻辑关系,如果两个选项表达的是同一个意思,通常都不是正确答案;如果某个选项明显过于绝对,比如“一定会”“必须”,也要警惕。当然这也只是技巧,核心还是知识面要够。
注意:在线笔试系统一般不允许复制粘贴,选择题页面不能开IDE调试。想验证代码逻辑,只能在编程题的编辑器里写,所以平时的代码基本功很重要。
3. 算法编程题:刷题策略与实战复盘
3.1 算法题风格与难度定位
编程题部分,小红书后端岗的难度我体感是:力扣中等题为主,偶尔一道偏难。题目通常和业务场景有结合,不会直接让你写“反转链表”,而是会包装成一个社区内容推荐的场景,比如“根据用户点赞数为笔记排序”“计算连续登录天数和签到奖励”这类。本质还是经典算法,但是题意理解需要花点时间。
我那年遇到的三道题,一道是贪心或模拟类的数组操作题,一道是有关字符串处理的题,还有一道是带一点动态规划思想的题。这个组合很有代表性:不需要你写出特别冷门的算法,但需要你在有限时间内把思路理清楚,并且代码写得干净。
3.2 必须掌握的几类题型
如果按出现频率给后端笔试算法题排个序,我会排成这样:
- 数组与双指针:快慢指针、左右指针、滑动窗口,这类题能覆盖很多字符串和数组题目。
- 哈希表辅助:两数之和、分组统计、频次统计,尤其是笔试场景题中很常见。
- 排序与自定义比较器:比如按某个规则给对象排序,不止考排序算法本身,还考你熟不熟悉语言里的排序API。
- 二分查找:有序数组里找边界、找目标值,注意开闭区间的细节。
- 链表操作:反转、合并、找环,考基本功。
- 二叉树遍历与递归:层级遍历、最近公共祖先、路径和问题。
- 动态规划:背包问题、最长公共子序列、打家劫舍类问题,通常作为压轴题。
- 图的简单应用:DFS/BFS,连通分量,拓扑排序,不过不会考太深。
我建议按照这个优先级刷题,先保证前六类能快速写出正确代码,再花时间看动态规划和图论。小红书笔试的编程题不会故意考冷门东西,所以覆盖面比深度更重要。
3.3 编程题做题顺序与时间分配
编程题一般2到3道,我给自己的硬性要求是前30分钟先把所有题目都读一遍,判断每道题的难度和熟悉度。先做最有把握的,保证至少在编程题上有两道AC;剩下时间再攻难题。
读题时一定要看清输入输出格式。有些题目的输入是一行整数,有些是多行,有些包含字符串中的空格,这些细节决定了解析逻辑。写代码前我习惯先在草稿纸或注释里列一下测试用例,尤其是边界情况,比如空数组、只有一个元素、数组长度极大、数值溢出等。别小看这一步,能省下面调试时间。
代码写完一定自己构造测试用例验证。在线笔试环境没有“运行测试用例”按钮会少很多,有的平台允许本地运行,但数据量一大就超时。我通常用两种方式验证:一是手算一个简单用例,看输出是否和预期一致;二是想想极端输入,比如字符串长度为10万,看代码复杂度是否太高。
3.4 一道典型模拟题的思考过程
为了说明我的做题思路,我举个例子,这题不完全等于笔试原题,但出题风格接近。题目大概是:给定一个点赞记录数组,每个元素是用户ID和时间戳,要求统计连续3天都有点赞行为的用户数,并按用户ID升序输出。
第一眼这题和“连续登录天数”很相似,核心是去重和日期连续性判断。我先用哈希集合对每个用户的三天记录去重,再把日期转成整数形式,排序后判断相邻日期是否连续。因为只需要判断连续3天,所以不需要用动态规划,直接遍历即可。
但这里有个坑:如果用户一天内有多次点赞,直接处理会重复计数。所以第一步必须“按用户+日期去重”。我想到先用Set 保存“用户ID-日期”这样的组合字符串,然后遍历每个用户时再排序日期。这样代码量不大,逻辑也清晰。最后要注意输出顺序,把用户ID放进TreeMap或最后排序。
从这道题能看出,笔试算法不要求奇技淫巧,而是考察你能不能把业务问题抽象成数据结构问题,并且注意到边界条件。
3.5 编程题的代码风格与判分机制
在线判题系统按测试用例给分,AC一道题就直接拿满分,不会根据代码风格扣分。但代码可读性会影响你的调试效率,也影响后续面试官看笔试记录时的印象。我写编程题时会把核心逻辑抽成单独方法,变量命名用有意义的英文单词,避免到处都是a、b、c这种临时变量。
另外,很多平台对代码有“超时”限制,复杂度太高的暴力解法可能只过部分用例。比如数据范围是10^5,O(n^2)大概率超时,必须想O(n)或O(n log n)的做法。比赛经验不足的同学尤其要注意,写完代码后在脑海里估算一下最内层循环的执行次数。
4. 系统设计与业务场景题:容易被低估的部分
4.1 为什么笔试会考设计题
小红书是内容社区产品,后端开发每天面对的是Feed流、笔记发布、评论点赞、用户关注关系、消息通知等真实业务场景。笔试里出现系统设计题或业务场景题,本质上是在筛选“具备工程思维”的候选人,而不只是会写算法。
这类题目的形式通常是:给一个场景描述,让你设计一个方案,或者让你排查一个问题。比如“设计一个短链服务”“设计一个排行榜功能”“线上接口突然变慢,怎么排查”。不要求写出完整代码,重点考察答题思路是否清晰、有没有考虑性能和数据一致性。
我当时看到这题时有点意外,因为大多数刷题攻略都忽略了它。好在平时做过项目,也有线上故障排查的经验,回答起来不算吃力。如果你的项目经验主要来自课程设计,建议多看系统的架构设计文章,尤其是缓存和数据库一致性、消息队列削峰、分库分表这些内容。
4.2 设计题回答框架:从需求到架构
我在笔试简答题里用了一个固定的框架,屡试不爽。第一步,确认需求场景和数据量级。比如设计短链服务,先说明短链生成算法有几种方案,自增ID还是哈希取模,对比优劣之后选一种。第二步,设计存储结构,说明用MySQL存映射关系,还是用Redis做缓存加速。第三步,考虑高并发下的稳定性,比如缓存击穿、缓存雪崩、并发去重。第四步,总结方案的优缺点。
这个框架看起来朴素,但能保证回答不跑偏。判卷人不会指望应届生设计出完美的高可用架构,他们更看重你思考问题有没有条理,能不能把大问题拆成小问题。
那道简答题我印象里是关于“内容评论区如何设计”,要支持排序、分页、异常评论过滤。我写的时候先定义了评论的数据模型,包括评论ID、父评论ID、作者ID、内容、时间戳、状态字段,然后说存储用MySQL,热评用Redis缓存,列表接口先查缓存未命中再查库,最后补充了怎么防止恶意刷评论。没有用什么高深的架构,就是很务实的“从0到1”的思路。
4.3 常见场景题的准备清单
如果你还有时间,建议把这几类典型设计题提前写一遍答案:
- 短链服务:生成算法、存储、重定向、过期策略。
- 排行榜:Redis Zset的使用、分数相同怎么办、实时榜和周期榜的区别。
- 关注/粉丝关系:存储模型、粉丝数统计、Feed流推送还是拉取。
- 点赞和评论:防重复点赞、计数一致性、排序规则。
- 消息通知:推模式、拉模式、推拉结合、消息去重。
- 线上接口变慢:从CPU、内存、IO、数据库慢查询、外部调用超时逐层排查。
准备的时候别只看文章,要动手画一下表格或流程图,哪怕只是把自己脑海里的方案用文字写出来,写的时候会发现很多地方之前根本没想清楚。
5. 备考计划与后端开发学习路线整理
5.1 一个月冲刺的时间线安排
如果你离笔试还有一个月,完全来得及。我按三周加一周的模式做了安排,第一周巩固数据结构与算法基础,第二周集中刷题并复习计算机网络和操作系统,第三周过数据库、中间件和场景设计题,最后几天做整套模拟题并复盘错题。
具体到每天,我基本是上午两小时刷算法题,下午两小时看计算机基础,晚上两小时做项目和整理笔记。时间不用排得太满,但每天必须保持代码手感。笔试前一周开始,每天严格按照考试时间做一套模拟卷,中间不中断不看手机,让大脑适应连续两小时的高强度思考。
如果你准备时间更长,可以直接把路线放宽到两到三个月。前期重点放在算法刷题上,后期再针对后端开发的知识体系做系统梳理。不要把战线拉太长又不做题,那种“收藏了很多路线但一道题没刷”的状态最危险。
5.2 后端开发到底需要学什么
关于后端开发学习路线,我结合笔试经验说下核心模块。
第一是语言基础,建议Java或者Golang二选一。学Java的话,要掌握面向对象、集合框架、IO、多线程、反射、JVM基础;学Golang的话,要掌握语法、goroutine、channel、垃圾回收机制、标准库的常用包。两者都要求能熟练用该语言写算法题。
第二是数据库,MySQL是重点,不仅要会写SQL和增删改查,还要懂索引原理、事务隔离级别、锁机制、日志体系和主从复制。Redis作为常用的缓存组件也必须掌握,包括常用数据结构、持久化、过期策略、缓存问题。
第三是计算机网络和操作系统,这两个是选择题重灾区,也是后端开发的底层支撑。网络重点掌握TCP/IP协议栈、HTTP/HTTPS、DNS、加密流程;操作系统重点掌握进程线程、调度、内存管理、文件系统、I/O模型。
第四是中间件与框架,熟悉Spring Boot、MyBatis等Java生态,了解消息队列Kafka或RocketMQ的基本使用和适用场景。这部分笔试直接考得不多,但会体现在项目经历里。
第五是项目,准备一个和自己技术栈匹配的完整项目。小红书这类公司很看重项目有没有落地,如果你的项目用到了Redis缓存、MySQL事务、消息队列,面试时能讲清楚为什么用和怎么用的,会很加分。
5.3 开发环境与前后端联调常识
笔试虽然不考环境搭建,但备考阶段做项目时会用到相关工具。如果你的项目是前后端分离的结构,后端同学至少要会用IDEA开发后端接口,知道怎么连MySQL和Redis,怎么用Postman或Apifox调试接口,怎么处理跨域。哪怕笔试不直接考,后续面试被问项目时也会涉及。
有一类被反复提及的问题比如“idea如何进行前后端开发”,其实就是讲清后端起服务、前端用Node起开发服务器、通过代理转发接口,或者后端直接托管静态资源。这个模式不难,但建议自己完整走一遍,理解前端和后端是怎么通过HTTP协议通信的。
5.4 刷题平台与复盘方法
刷题不用开很多平台,一个力扣加一个在线笔试题库就够了。力扣按标签刷,优先数组、哈希表、双指针、滑动窗口、二叉树、动态规划。每个标签做20到30题,基本能覆盖笔试常见题型。
复盘比刷题更重要。我每做完一道题,不管有没有AC,都会把题解看一遍,想明白为什么我的解法慢、为什么别人能想到那个优化点。然后把这题的思路用自己的话写到笔记里,包括核心套路、易错点、复杂度分析。笔试前翻笔记比翻题目列表高效得多。
另外,尽量找目标公司的往年笔试题或模拟题来做。小红书、字节、美团的题库风格有差异,提前适应能减少考场上的陌生感。有些题库平台会有“互联网公司笔试历年真题”,虽然不保证100%命中,但题型可以当练手。
6. 常见问题与实战避坑
6.1 笔试平台环境问题
在线笔试最让人崩溃的不是题目难,而是环境出问题。几个高频情况我全部经历过:开考前摄像头黑屏、浏览器弹窗拦截、电脑上不了网。我的解决办法是提前一天在考试平台上做一次“环境检测”,按照邮件指引安装插件、授权摄像头和麦克风,并且换一个稳定的浏览器,Chrome和Edge都可以。
考试当天一定要提前半小时把手机和电脑都打开,确认电量充足、网络稳定。如果中途断网,不要慌,第一时间恢复网络并刷新页面,系统一般会保留之前的作答记录。但如果长时间离线,可能被判为作弊,所以最好提前准备一个手机热点作为备用网络,不要嫌麻烦。
6.2 时间分配与做题顺序的致命误区
我身边有同学笔试挂在时间分配上。打开试卷先死磕第一道编程题,花了一个小时没AC,后面选择题匆忙作答,正确率惨不忍睹。这是非常典型的错误。
正确做法是拿到试卷先花两到三分钟扫一遍全部题目,标记出哪些题自己会、哪些题拿不准,然后先做有把握的,再啃难题。选择题和编程题之间要用“剩余时间”作为切换标准,比如计划选择题40分钟,编程题每题20到30分钟,最后留15分钟检查。
如果真的遇到一道怎么都想不出来的编程题,建议先写一个暴力的朴素解法,尽量保证能过一部分用例,拿部分分。不要浪费时间去追求最优解,笔试的评分按用例通过率来,部分AC也比空着强。
6.3 边界条件与代码鲁棒性
编程题最可惜的一种情况是,算法思路完全正确,但代码因为一个边界条件挂了几个用例。比如数组长度为0、输入包含负数、整数溢出、字符串里有空格、链表只有一个节点。
所以写代码时宁可多写两行,也要保证这些边界情况被处理。如果题目没明确说明数据范围,默认要考虑最坏情况。比如求和题目,如果数值可能很大,就要用long而不是int。还有递归题,如果树很深,递归可能爆栈,这时要考虑迭代写法。
6.4 考场上最容易忽视的“软技能”
笔试考察的不只是知识,还有你的心理素质和习惯。开考后先深呼吸,不要因为某一题卡住就乱了节奏。我做题时会开着草稿纸,把每道题的关键思路先写下来,防止思路被打断后忘记。
考场上尽量别去翻网页搜索,在线系统有防切屏检测,切出页面几次就可能被判作弊,得不偿失。万一不小心切屏被提醒,也不要继续操作,立即回到考试页面,正常作答,通常不会直接取消成绩。我在笔试时见过提醒弹窗,心里一紧,但后续没有异常,继续正常答题就行。
还有一点是关于“交卷前检查”。最后留三分钟检查一下代码有没有多余调试输出,输出格式是否和题目要求一致,有没有多个空格或换行导致格式错误。选择题有没有漏答,多选题是否选得太多。这些细节看着不起眼,但每一点都可能是一道题的分数。
写在最后的一些体会
去年做笔试的时候,我最大的感受是这场考试更像是一场“后端基本功的体检”,不是看你背了多少难题,而是看你在压力下还能不能保持清晰的思维和稳定的代码输出。我在备考时也走过弯路,比如前期只顾着刷算法题,忽略了数据库和网络基础,结果选择题做得战战兢兢。后来调整了复习结构,把时间重新分配,才逐渐建立起信心。
如果你也准备参加类似的后端开发岗笔试,我的建议是:不用追求把所有知识点都学得透彻无比,但一定要保证高频考点足够熟练,项目经历能够完整自洽。笔试只是第一关,过线之后还有面试继续考察项目深度和思维广度。希望这篇复盘能让你少踩几个坑,把精力放在真正值得投入的地方。