拓冰建站拓冰建站
首页 / 资讯中心 / 正文

B站后端校招笔试卷B深度拆解:考点分析与备考指南

1. 从一份笔试卷B说起B站后端校招到底在考什么说实话每年秋招季看到“哔哩哔哩2023校园招聘后端开发方向笔试卷B”这种标题,我第一反应不是去搜原题而是先想一个问题B站这种体量的视频社区它的后端校招笔试和普通互联网公司有什么不一样答案藏在B站的业务特征里。B站的核心场景是视频播放、弹幕互动、UP主投稿、推荐流、直播、电商花火等这些场景背后全是高并发、高吞吐、低延迟的分布式系统问题。视频平台一天的API调用量以亿计弹幕这种超高频率的写入场景在业界都是罕见的推荐系统更是典型的算法与工程交叉地带。所以一份面向B站后端校招的笔试卷从来不会只考“茴香豆的茴字有几种写法”那种死记硬背而是围绕真实业务场景去考察候选人的基本功、工程思维和问题拆解能力。这篇文章我打算做一次深度复盘式的拆解把这类笔试卷B背后隐含的考点、准备路径、时间分配策略和避坑经验全部摊开讲透。无论你是正在准备校招的应届生还是工作两年想跳槽但想补基础的后端工程师这份拆解都能帮你建立一套“从题目到能力模型”的对照体系知道考什么、为什么考、怎么准备而不是拿到卷子就蒙头刷题。先纠正一个常见误区很多人以为笔试就是LeetCode刷得越多越好算法题一锤定音。但B站这类公司的后端笔试卷算法题通常只占一部分数据结构、计算机网络、操作系统、数据库、Linux、编程语言基础、甚至简单的系统设计题都会出现。笔试筛选的不是“刷题机器”而是“地基扎实、思维清晰、有工程感觉的人”。这一点从卷子B的模块分布就能明显感受到。2. 试卷结构反推B站后端校招笔试的能力模型2.1 从题量安排看考察重心一份典型的B站后端笔试卷时长通常在90到120分钟题量在30到50题之间题型包括单选、多选、填空、简答和两道左右的编程题。卷子B和卷子A的区别一般在于题库抽题不同、编程题难度档位略有差异但整体模块框架是一致的。从模块占比来看大致可以这样划分模块常见题量占比考察目标数据结构与算法30% - 40%编程基本功、复杂度分析、代码实现能力计算机网络15% - 20%对网络协议栈的理解特别是HTTP/TCP操作系统与Linux10% - 15%进程线程、内存、IO模型、常用命令数据库10% - 15%索引、事务、隔离级别、SQL编写编程语言基础10%Java/Go/Python语法、集合类、内存模型系统设计与架构常识5% - 10%高并发组件选型、缓存/消息队列/分布式事务等注意这个比例不是固定的每年会根据招聘方向微调但大方向不会变。它传递的信号很明确后端开发的核心能力是“语言数据结构和算法计算机基础工程组件”缺一不可。2.2 为什么算法只占三成多这里有同学可能会问B站笔试算法题才占三成多那我把LeetCode刷到500题是不是浪费了不是浪费但确实存在边际收益递减的问题。算法题在笔试中的核心作用是快速筛选候选人的“下限”——如果链表反转、二叉树遍历、动态规划入门题都写不利索后面的面试就不用约了。但算法能力只能验证“你会不会写代码”没法验证“你能不能把一个复杂业务拆成合理的系统模块”后者恰恰是后端工程师日常工作的核心。所以B站这类公司的笔试卷会把剩余六七成的题目放在计算机网络、数据库、操作系统这些计算机基础上因为这些东西才是后端开发的“地基”。我自己面试过不少候选人算法题写得飞起但问他“从输入URL到页面展示发生了什么”只能背出个大概问他“MySQL为什么用B树”答不上来问他“TCP三次握手为什么不是两次”直接懵。这种候选人就算笔试过了到了技术面也会很快暴露问题。2.3 从岗位JD看笔试与面试的衔接再和一个事情结合起来看就更有意思了B站后端校招的岗位JD一般会写“熟悉Java/Go至少一门语言、熟悉MySQL/Redis、了解分布式系统、有高并发项目经验优先”。笔试就是对这个JD的量化测试。举个例子JD写了“熟悉Redis”笔试就很可能出现Redis数据结构、缓存穿透/击穿/雪崩、持久化机制的题JD写了“熟悉消息队列”笔试可能出现Kafka/RocketMQ的基本概念和应用场景题。所以准备笔试前先把你投递岗位的JD反复读三遍把里面提到的每个技术点都列成一张自查表你会发现笔试题目有相当一部分就是从JD里长出来的。我在实际准备过程中还有个体会B站笔试卷的选择题陷阱很多选项之间往往只差一个词——“持久化”“持久性”“一致性”这种概念辨析题特别常见。这说明出题人想考察的是“精确理解”而不是“模糊的印象”。3. 重点模块逐个拆解这轮笔试最核心的六块内容3.1 数据结构与算法不止刷题更看思路笔试编程题通常有两道一道偏简单LeetCode中等偏下一道偏中等LeetCode中等偏上。高频考点包括数组、链表、栈、队列、哈希表的操作与复杂度分析二叉树的前中后序遍历、层序遍历、最近公共祖先排序算法的手写实现与稳定性、时间复杂度对比二分查找及其变体动态规划的经典模型背包、最长递增子序列、编辑距离、股票买卖图论的BFS/DFS、拓扑排序、最短路径Dijkstra、Floyd滑动窗口、双指针、前缀和等常规技巧刷题策略上我建议按“高频题型分类刷”而不是“按题号顺序刷”。你花一周把二叉树所有高频题刷完比一天换一个专题三天打鱼两天晒网要有效得多。辅助线LeetCode的Hot 100和剑指Offer是两个值得反复刷的题单Hot 100覆盖了绝大多数面试高频题型剑指Offer的题目风格和校招笔试非常接近。写编程题的时候有个容易忽略的细节笔试环境通常要求你处理标准输入输出和在IDE里跑力扣的函数签名完全不同。很多人平时刷题全是写函数到笔试时连Scanner怎么读多行数据都要想半天白白浪费半小时。建议提前一个月就切换到牛客网的在线编程环境练习熟悉读入读出的各种写法。3.2 计算机网络HTTP、TCP是绝对重点B站后端每天处理海量HTTP请求网络基础不扎实等于房子建在沙地上。笔试中计算机网络相关的题几乎绕不开这几个话题HTTP和HTTPS的报文结构、状态码含义200/301/302/403/404/500/502/503、GET和POST的区别、HTTP/1.1的keep-alive和管线化、HTTP/2的多路复用和头部压缩、HTTPS的TLS握手过程。TCP的三次握手和四次挥手细节、TIME_WAIT状态产生原因和危害、流量控制和拥塞控制的区别滑动窗口/慢启动/拥塞避免/快速重传/快速恢复、TCP和UDP的适用场景。DNS解析过程、从输入URL到页面展示的完整链路。这些考点为什么反复出现因为后端故障排查中网络层的问题占了相当大的比例——接口超时、连接池打满、TIME_WAIT堆积导致端口耗尽每一个都是线上事故级的痛点。笔试考这些本质上是想确认你具备“出了网络问题能快速定位”的基本素养。我特别提醒一句TCP状态机要画图理解不要死记。三次握手的状态转换SYN_SENT→ESTABLISHED、LISTEN→SYN_RCVD→ESTABLISHED和四次挥手的状态变化FIN_WAIT_1→FIN_WAIT_2→TIME_WAIT、CLOSE_WAIT→LAST_ACK如果理解了为什么需要这些状态就不用背了。3.3 操作系统进程线程与并发是出题热门后端服务都是跑在多进程、多线程模型上的所以操作系统考点高度集中在进程与线程。典型题目包括进程与线程的区别、线程切换的代价、协程的概念死锁产生的四个必要条件与银行家算法进程间通信方式管道、消息队列、共享内存、信号量、Socket各自优缺点线程池的参数配置核心线程数、最大线程数、队列容量、拒绝策略用户态和内核态的切换开销虚拟内存、页面置换算法LRU/FIFO/OPT其中线程池参数这个话题特别值得展开。笔试和面试都爱问“线程池大小怎么定”这个问题的标准答案是综合考虑CPU密集型N1、IO密集型2N的经验公式但实际生产中还要看业务特性、容器资源限制、下游依赖的吞吐能力。出题人其实想听的不是公式而是你有没有“先计算、再压测、再调优”的工程意识。Linux基础在B卷里以选择题形式出现比较多比如查看进程端口用什么命令netstat/ss/lsof、查看磁盘占用df/du、查看系统负载top/uptime、文本处理grep/awk/sed。这些都是后端日常排查问题的基本功没什么难度但不会就是不会考前花半天过一遍命令是性价比极高的投资。3.4 数据库MySQL为主索引事务并重数据库这块的考点几乎全落在MySQL上因为B站这类互联网公司的核心存储主要就是MySQL分库分表 Redis缓存 各类存储引擎的组合。高频题目类型有索引相关B树索引结构及为什么选用B树、聚簇索引与非聚簇索引的区别、最左前缀原则、覆盖索引、回表、索引失效的常见场景函数运算、隐式类型转换、LIKE前置通配符、不等于等。事务与锁ACID四个特性、隔离级别读未提交/读已提交/可重复读/串行化及各自解决的并发问题、MVCC机制原理、当前读与快照读、行锁/间隙锁/临键锁、乐观锁与悲观锁。SQL编写多表连接INNER JOIN/LEFT JOIN/RIGHT JOIN、子查询、GROUP BY配合HAVING、窗口函数的简单使用ROW_NUMBER/RANK/DENSE_RANK。这里我强烈建议不要只背概念要真去库里面建表、插入几万条数据、用EXPLAIN看执行计划。笔试里偶尔还会给出一段慢SQL问你为什么慢、怎么优化如果你没看过执行计划光靠猜是答不到点子上的。我自己在准备阶段就建了一个200万行的订单表把各种索引场景全部演练了一遍这对理解“哪些场景索引会失效”帮助非常大。3.5 编程语言Java为主Go为辅B站后端的主力语言是Java和Go。笔试的编程语言题主要以Java为主如果JD明确写了Go也会出少量Go的题。Java的高频考点包括HashMap底层原理数组链表红黑树、扩容机制、为什么线程不安全ArrayList和LinkedList的区别、扩容机制ConcurrentHashMap的实现演进分段锁→CASsynchronizedJVM运行时数据区、垃圾回收算法标记清除/标记复制/标记整理、常见垃圾收集器Java内存模型与volatile关键字类加载机制与双亲委派模型异常体系与try-with-resources最容易被忽视的是Java集合类的并发安全相关考点。面试和笔试都喜欢问“ArrayList为什么线程不安全”“HashTable和ConcurrentHashMap区别”这类问题。这类题目的价值在于考察你对“并发修改”这种真实问题的敏感度——后端开发写业务代码时集合类在线程间的共享是躲不开的场景用错一个容器就可能线上故障。3.6 系统设计简答题的降维打击B卷最后一般有一两道简答题或场景设计题形式比较开放比如“设计一个短链接系统”“设计一个排行榜功能”“设计一个弹幕系统”“如果B站视频播放量突然暴涨你会如何扩容”。这种题目看着吓人但其实考察框架非常固定你只要按下面这套思路来回答就不容易跑偏业务分析明确系统的核心实体和核心流程。比如弹幕系统核心流程是用户发送弹幕→弹幕服务写入→播放端读取弹幕列表。数据存储设计需要几张表字段怎么设计主键怎么选是否需要分库分表缓存怎么用。接口设计列出核心API请求参数和返回结构大致是什么样的。性能与可用性QPS估算、是否需要消息队列削峰、是否需要多级缓存、失败降级方案。扩展性考虑未来如果量再涨10倍系统哪个环节会成为瓶颈怎么扩容。举个具体的例子如果让你设计B站视频评论的点赞功能你可以这样思考每天视频评论点赞量级可能是千万级到亿级点赞是高频写入但单个用户操作频率不高。方案上前端的点赞请求打到点赞服务服务先写Redis的Hash结构key是评论IDfield是用户IDvalue是点赞状态再通过异步队列把增量同步到MySQL或者ClickHouse做持久化。热点评论的点赞数直接读Redis缓存缓存和DB的一致性通过版本号或更新时间来判断。这套方案核心是“Redis扛热点写异步落库最终一致”——这就是后端系统设计最常规也最实用的套路。4. 备考实操路线从零到一套完整的“模拟卷B”4.1 先做一次摸底自测再制定计划拿到这份拆解后你第一件事不是冲去刷题而是花一个周末做一次摸底。具体做法是找一套往年B站或类似体量公司的后端笔试题按正式考试的时间要求全部做完然后给自己打分。打分的维度不只是对错还要记录每道题耗时多少、哪些概念模糊、哪些题完全没思路。摸底的意义在于让你看到“现实和目标的差距”。我见过太多人备考三个月真正上了考场才发现自己认知里的“我会了”和实际能写出来之间差了十万八千里。摸底之后你会清楚地知道自己需要把时间花在哪个模块——如果计算机网络选择题错了一半那就要花一周专门补网络如果编程题两道都能AC那算法就可以少花时间多看看数据库和系统设计。4.2 按周拆解的准备计划参考版以下是我整理的一份八周备考计划适合基础一般专业课学过但遗忘较多的同学基础好的可以压缩到四周时间重点任务产出物第1周数据结构与算法数组、链表、栈、队列、哈希表、字符串完成Hot 100中对应专题约30题第2周数据结构与算法二叉树、图论、回溯完成二叉树高频题20题、图论基础10题第3周数据结构与算法动态规划专项完成DP高频题20题整理DP解题模板第4周计算机网络HTTP/HTTPS/TCP/DNS整理一份网络考点笔记覆盖所有高频题第5周操作系统与Linux进程线程、并发、命令整理进程/线程对比表、Linux命令速查表第6周数据库索引、事务、隔离级别、SQL建表实测EXPLAIN整理索引失效场景清单第7周Java基础集合、JVM、并发系统设计入门整理集合类源码要点、完成2个系统设计练习第8周综合模拟完整做3套模拟卷复盘错题形成个人错题集这个计划看起来简单但执行起来最大的敌人是“只输入不输出”。很多人复习网络时看了三天视频觉得都懂了一做题发现全不会。我的建议是每天复习两个小时后必须拿出一个小时来做输出——做题、画图、写笔记、甚至把自己当作老师讲给别人听任何一个形式的输出都好过单纯观看。4.3 编程题的“拿分”细节ACM输入输出实战校园招聘笔试最可惜的一种丢分不是题目不会做而是本地IDE跑得好好的一提交就是编译错误或超时。这背后往往是输入输出处理方式不对。这里分享三个实测有效的经验第一先写输入读取模板。笔试第一分钟不要急着想算法先把输入读取和输出格式写出来确保题目能跑通再往上加业务逻辑。这样即使最后没写完至少不会因为读取出问题得零分。第二处理多组测试用例时务必确认是否需要用while循环读取到底。很多平台是多组数据一次考完输入用hasNext或readLine逐个处理漏掉这层认识第一道题就跪。第三控制复杂度。笔试数据范围通常在10^4到10^6之间。如果你的算法是O(n^2)n10^5就会超时这时候就一定要想更优解法。平时刷题就要养成看题目的数据范围估算复杂度的习惯别等上场再临时判断。4.4 时间分配策略60分钟的选择题怎么做价值最大化B站笔试卷通常是单选、多选、填空和编程题混合我建议的做题顺序是先做编程题控制在40到50分钟再做数据库和Linux等“确定性强”的题目最后做计算机网络与操作系统的概念题。为什么把编程题放最前因为编程题是整张卷子里分值最高、最费脑力的部分。考试开始的前30到40分钟是一个人精力最集中的时段这时候就该攻最难啃的骨头。选择题就算时间不够蒙对的概率也不低而编程题如果时间不够代码残缺基本拿不到分。多选选择题要特别小心。B站的多选题通常“少选得部分分多选不得分”所以拿不准的选项宁可不选也不要冒险多选。这是一个考试技巧但也确实是很多同学容易忽略的心痛点。5. 常见问题与避坑实录我见过太多人死在这些地方5.1 “我LeetCode刷了800题笔试还是挂了”这是我见过最普遍的困惑也是我想重点聊的坑。刷了800题还挂问题往往出在两点第一刷题质量低。很多人刷题是在“背诵答案”而不是“训练思维”。一道题看懂了题解觉得自己会了直接点下一题三天后遇到同类型的题还是不会做。正确的刷题方法是独立思考30分钟做不出来再看题解看完题解后合上答案自己独立写一遍第二天再重写一遍。第二笔试考察的是综合能力算法只是其中一部分。卷子满分100分算法题就算全拿满分也只有三四十分剩下六七十分全在基础上。基础概念一塌糊涂算法再强也救不回来。5.2 计算机网络和数据库总是“好像知道但说不准”这种“模糊感”是准备校招笔试最大的杀手。比如问你HTTP 301和302的区别你大概知道一个是永久重定向、一个是临时重定向但选项里给你“301会改变请求方法吗”这种深入一点的问法你就懵了。解决模糊感的唯一方法是“精确化输出”。看书或看视频时看到任何一个概念立刻在笔记本上用自己的话写一遍准确的定义并配上场景例子。比如TCP四次挥手的TIME_WAIT状态不要只写“等待2MSL”要写清楚为什么需要TIME_WAIT、2MSL是怎么算出来的、TIME_WAIT带来的端口占用问题怎么解决。这个过程很费时间但没有捷径。你要相信考场上让你区分“清空缓冲区的命令是flush还是reset”这种题你平时的精确化输出就是你唯一的救命稻草。5.3 简答题/系统设计题别空着分步骤写就有分校招笔试的简答题很多同学直接放弃这是最大的浪费。系统设计题没有标准答案出题人看的是你的思考过程哪怕思路不完整只要有合理的分析框架就能拿到基础分。有个简单的拿分技巧任何设计题都用以下固定结构来组织回答——技术选型明确使用哪些组件如MySQL、Redis、Kafka、Nginx说明为什么选它们。数据模型核心表结构、字段说明、索引设计。核心流程用文字或箭头把主流程串起来比如“用户请求→Nginx→服务A→查Redis→未命中→查MySQL→回写Redis”。压测与扩展估算QPS、明确瓶颈、说明扩容方案。哪怕你只写了技术选型和数据模型两层也能拿到一部分分数。空着不写是0分写几行合理的思路可能就有5到10分——在激烈竞争里这几分可能就决定了你能不能进入下一轮。5.4 笔试环境的隐形陷阱在线笔试环境和刷题平台有一个很大的不同很多笔试平台不允许你使用本地IDE代码是在网页编辑器里写的没有自动补全没有语法检查更没有编译调试提示。这意味着你的代码必须“一次写对”。针对这个现实情况考前两周就应该切换到“裸写模式”——打开一个空白编辑器不依赖任何提示纯手写代码。开始会很痛苦简单代码都可能拼错但两周练习下来你的代码准确度和手写速度都会明显提升。另外务必提前测试你的浏览器、网络、摄像头如果开视频监控。笔试当天网络断线导致交卷失败的案例每年都有这类问题一旦出现就是不可逆的严重影响心态。我自己的做法是考前一周每天在同一时间登录笔试平台做一次模拟测试确保设备万无一失。5.5 笔试只是起点同步准备面试问题很多人笔试结束就松口气这是第二个误区。B站的笔试通过后通常一周内就会约面试面试中追问的技术点和笔试高度重合但深度会翻倍。笔试出“HTTP方法有哪些”面试就可能追问“POST和PUT有什么区别什么时候用PUT”笔试出“索引失效场景”面试就可能问你“联合索引(a,b,c)情况下条件where b? and c?会不会走索引”。所以笔试备考的同时就同步准备面试问题尤其是项目深挖和场景设计。如果你简历上写了一个电商项目就要能说清楚用户下单并发高怎么办、库存怎么扣、订单状态怎么流转、数据怎么分库分表、Redis和DB一致性怎么保证。这些内容平时就整理成文档不要等面试通知来了再临时抱佛脚。6. 我个人实操复盘做得最对的五件事和最后悔的一件事说句实话回看我自己的校招准备过程有几个决定影响了最终结果。做得最对的第一件事从第二周开始就整理错题集。不是简单地把错题复制粘贴而是把“错误原因、正确思路、同类题目特征、下次遇到如何快速识别”四要素写在每道题后面。这个错题集到考前一个月已经积累了300多道题最后冲刺阶段我只看错题集不看新题。第二件事找了两个同学组成刷题小组每周六下午花四个小时做同一套模拟卷然后互相讲题。这个过程的收获远超自己闷头刷题因为给别人讲题会逼你把每个细节想清楚而听别人讲题能让你看到不同的切入角度。第三件事把计算机网络和操作系统里所有“过程类”知识点全部画成图。三次握手画状态图四次挥手画时序图进程状态转换画状态机虚拟内存地址转换画流程图。画完这些图很多以前觉得绕的知识点突然就清晰了。第四件事坚持做“每周一设”系统设计练习。从短链接、排行榜、弹幕、秒杀、Feed流、评论系统这些经典题目里每周挑一个用固定的四段式框架写完整设计文档。到笔试时系统设计题对我来说已经变成套路题了。第五件事考前三天完全不做新题只复习错题集和笔记保持手感但不焦虑。最后悔的一件事前期花太多时间在Java语言的冷门知识点上比如类加载器细节、各种JDK工具类的底层实现导致计算机网络的基础花的时间不够笔试里丢了不少概念分。如果重来一次我会把前面的时间分配改为Java语言只复习高频考点集合、JVM、并发基础三件套省下来的时间全部给计算机网络和数据库。根据我个人的经验B站这类公司的笔试卷B本质上是把你放进一个“真实后端工程师的基础素养考场”。它不会用偏题怪题刁难你但会用大量细节考察你是不是真的理解计算机基础知识而不是考前突击背下来的。准备的时候放平心态拆好模块按计划执行你拿到的就不只是一份通过笔试的成绩单而是对后端工程师这个职业更清醒、更全面的认知。最后分享一个我在笔试时常用的心理技巧遇到完全没思路的题标记一下先跳过不要在一道题上卡超过三分钟。整张卷子的得分是由“做对的题”决定的而不是“做过的题”决定的。学会取舍把能拿的分稳稳拿下你就已经超过了考场上一大半的人。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门