年年校招季技术岗的同学都会经历一波“笔试轰炸”。猿辅导2023校园招聘技术类笔试一出来之后不少学弟学妹来找我聊说这套题看起来不难但真上手做总在细节上翻车。作为一个连续两年参与校招辅导、自己也走过多轮笔试面试的过来人我决定把这次笔试的题型逻辑、准备思路和实战经验完整拆一遍。这套笔试本质上不是“难题选拔”而是“基础能力筛选”。它考察的核心是算法功底、代码实现能力、数据库和计算机基础。对于非科班和自学选手来说这套题反而比很多大厂的卷子友好因为它的题型分布相对固定踩点得分的机会更多。这篇文章适合所有准备投递技术岗的同学尤其是目标教育科技公司、在线教育平台开发岗的人看完之后你对“这类笔试该往哪个方向复习”会有一个非常清晰的认知。1. 考前摸底猿辅导技术笔试到底在筛什么人1.1 技术类笔试的定位与考察逻辑先说一个很多人容易误解的事校招笔试不是用来招“天才”的而是用来做“减法”的。几百上千份简历投进来面试官不可能每个人都聊一遍笔试的作用就是用统一标准快速筛掉那些基础不扎实、代码写不顺的人。猿辅导技术类笔试一的考察范围我根据题目回忆和同行交流大致可以归纳成三块算法与数据结构、SQL与数据库、计算机基础。其中算法是绝对的主角占比通常在60%到70%左右。这个比例很能说明问题技术岗日常做的业务开发最核心的能力就是“把需求拆解成逻辑再把逻辑转化成高效代码”而算法题正是这一能力的浓缩考察。它的考察逻辑和ACM竞赛不一样不追求“偏题怪题”更看重“能不能在有限时间内写出正确的、可运行的代码”。我做过不少校招笔试一个最大的感受是很多题难度不如LeetCode Hard但很“绕”绕在边界条件、输入输出格式、数据范围限制上。你在牛客网刷题时如果只关注“核心算法”不关注“IO处理和边界校验”遇到这种卷子很容易吃亏。1.2 试卷结构与时间分配感受整套试卷的题量一般在四到五道编程题左右外加几道选择题或者问答题总时长通常是一百二十分钟。我实测下来时间紧张程度属于“中上”——如果前面选择题犹豫太久后面编程题就基本告别AC了。这里给出的一个建议是拿到卷子先花三分钟把全部题目扫一遍判断每道题的难度和自己熟悉程度然后按“先易后难”的顺序做。不要按照题号顺序死磕尤其是第一题有时候反而不是最简单的。猿辅导的题一般会把一个简单题放在靠前位置用来稳定军心但也不排除偶尔出现“排序题简单但输入格式恶心”的情况。我自己习惯的节奏是前十分钟做选择题和问答题因为这些题不需要编译能快速拿分然后直奔最熟悉的算法题确保AC一题保底剩下的时间再啃中等偏难题。这个策略在多次笔试里都帮我稳住了心态因为只要你AC了两道题基本就能进面试轮。2. 高频题型拆解五类考点的解题逻辑2.1 算法题不只考“会不会”更考“稳不稳”猿辅导笔试的算法题通常覆盖这么几类数组和字符串操作、链表、二叉树、动态规划、贪心、二分查找、以及一些简单的回溯。从难度分布来看数组和链表往往是送分题动态规划和二叉树是拉开差距的中档题难题偶尔会出现但比例不高。我印象最深的一道题是“合并两个有序链表”这题本身非常基础但它在笔试里会被包装一下比如改成“合并K个有序链表”或者“链表表示的两个数相加”。这类变体题的考点不变还是链表指针操作和边界处理但如果你只会背原题答案没有真正理解指针的指向关系一变就懵。应对这类题的核心训练方法很简单把LeetCode前一百题里面的链表类题目全部自己手写过一遍别用IDE的自动补全就在牛客网的在线编辑器里敲。链表题最坑的不是思路是代码里的指针越界和空指针判断这些只有多写才有肌肉记忆。再说说动态规划。猿辅导笔试的动态规划题一般不会太冷门最长上升子序列、01背包、编辑距离、打家劫舍这种“经典老番”出现频率很高。解题套路三步走先定义状态再找状态转移方程最后处理初始化。初学者最容易在“状态定义”这一步卡住我的建议是做题时先用语言描述“dp[i]代表什么”写清楚再动代码比直接上手写转移方程靠谱得多。2.2 SQL和数据库业务题里的稳定拿分项数据库题在猿辅导技术笔试中占比虽然不大但绝对是拿分效率最高的一部分因为它的题型高度固定基本就是多表联查、分组聚合、子查询、窗口函数。你只要花三天时间把SQL基础语法过一遍就能拿下一道题的分数。我记得有一道题目大概是“给定员工表和部门表查询每个部门中薪资最高的员工信息”。这个需求乍一看要分组取最大值但如果直接用GROUP BY和MAX你取不到对应的员工姓名。正确思路是先用子查询找到每个部门的最高薪资再把这个结果和原表做关联查询。这题考的就是“SQL的执行顺序”——很多初学者以为SELECT的字段在GROUP BY之后就能随便取其实只有聚合字段和分组字段才是合法的。另外一个高频考点是窗口函数。猿辅导的SQL题并不回避新特性ROW_NUMBER()、RANK()、DENSE_RANK()这几个一定要会区分。特别是RANK和DENSE_RANK一个会跳号一个不会面试官特别爱在这种地方埋坑。使用场景也很明确分组TopN问题直接上窗口函数别再用各种奇怪的嵌套子查询折磨自己了。2.3 计算机基础网络和OS的必背“八股”选择题部分主要考计算机网络和操作系统。网络方面TCP三次握手、四次挥手、HTTP和HTTPS的区别、TCP和UDP的区别是“万年老演员”。操作系统方面进程和线程的区别、死锁的四个必要条件、虚拟内存、页面置换算法出现的概率也极高。这些知识点没什么捷径就是“背理解”。但这里的理解不是死记硬背而是能用自己的话说清楚“为什么”。比如TCP为什么要三次握手不是因为“三次稳定”而是因为“在不可靠的信道上双方都需要确认自己发送能力和接收能力都正常”。这种层面的理解比背十遍状态转换图都有用。因为笔试选择题往往会把选项改得模棱两可只有真正懂了原理才能一眼识破干扰项。2.4 场景设计题思路比标准答案更重要部分批次的笔试会加入一道场景设计题或系统设计题比如“设计一个短链接系统”“设计一个秒杀系统的库存扣减方案”。这类题考察的不是你已经会多少技术栈而是面对开放性问题时能不能条理清晰地拆解需求、给出可行方案。回答这类题有一个万能框架 需求分析功能需求非功能需求→ 数据估算 → 核心流程设计 → 存储设计 → 接口定义 → 可能的优化点。你不需要写代码但需要把每一步都说到。比如设计秒杀系统你至少要提到“库存预热到缓存”“接口限流”“防刷”“异步扣减”“最终一致性”这几个关键词。面试官在阅卷时看的不是你用了什么高深框架而是你能不能把握住核心矛盾——高并发下数据不错乱、系统不宕机。2.5 智力题心态放平别被带节奏以及部分套题中会出现一两个智力题或者概率题比如“有两个瓶子容量分别是5升和3升怎么量出4升水”。这种题在大学里早就不稀奇了但有道变体每年都能放倒一批人“你有三枚硬币一枚两面都是正面一枚两面都是反面一枚一面正一面反。随机拿出一枚抛一次结果是正面请问这枚硬币另一面也是正面的概率是多少”答案是三分之二不是二分之一。因为已知抛出正面说明这枚硬币不可能是双反面硬币所以样本空间缩小到“双正面硬币”和“正常硬币”两个但双正面硬币有两面都为正面被选中的概率更大。这类题考的其实是“条件概率”你用贝叶斯公式去推会非常快。笔试遇到智力题心态上别慌很多题其实就是高中数学概率题换了一层皮。3. 实战演练三道典型真题的完整推演3.1 数组滑动窗口最大连续子数组的平均值先来看一道典型的数组题变体给定一个整数数组和一个整数k请找出长度为k的连续子数组的最大平均值。这题看起来简单但如果用两层循环暴力求解在数组长度较大的时候会超时必须用滑动窗口把时间复杂度降到O(n)。我第一次做这题的时候也踩了坑直接两层for去求每个窗口和结果只过了60%的样例。后来才意识到每次滑动窗口其实只需要减去左边滑出的元素加上右边新进入的元素窗口和就能复用。核心代码如下def find_max_average(nums, k): window_sum sum(nums[:k]) max_sum window_sum for i in range(k, len(nums)): window_sum nums[i] - nums[i - k] max_sum max(max_sum, window_sum) return max_sum / k这道题有几个容易忽略的细节一是k可能等于数组长度此时只需要算一次二是数组元素可能是负数所以max_sum的初始值不能设成0要设成负无穷或者第一个窗口和。我当时就是在初始值这里吃了哑巴亏把max_sum设成了0导致全负数组时结果错误。3.2 链表操作两两交换链表中的相邻节点链表题里有一道“两两交换相邻节点”也很喜欢出现在技术类笔试中。题目描述很直白给定1-2-3-4要求输出2-1-4-3。很多同学看到这题第一反应是“直接交换节点的值”这种方法虽然在本题能通过但面试官在后续面试环节问“如果节点值不允许交换怎么办”的时候你就傻眼了。正确的通用思路是用“迭代三指针”重排链表。我们需要一个dummy节点指向头节点然后用prev、cur、next三个指针完成两步反转。我习惯写成递归版本因为代码更短但笔试的在线编辑器往往不限制你用什么方式只要最终结果对就行。关于递归我想多说一句。递归在笔试里最大的问题不是思路难而是“容易爆栈”或者“边界条件想不清楚”。如果某道链表题你递归写得比较顺就坚持递归但如果你对递归没把握迭代版虽然代码长一些但写出bug的概率更低。笔试求的是AC不是炫技。3.3 SQL窗口函数学生成绩排名最后来一道数据库题。假设有一张成绩表score字段包括student_id、course_id、score要求查询每门课程成绩排名前三的学生ID和成绩。这类“分组TopN”的题目用普通SQL写会很麻烦但用窗口函数就是一套标准模板SELECT course_id, student_id, score FROM ( SELECT course_id, student_id, score, ROW_NUMBER() OVER (PARTITION BY course_id ORDER BY score DESC) AS rn FROM score ) t WHERE t.rn 3;这里要注意三个点。第一子查询别名t不能省略MySQL要求派生表必须有别名没写别名直接报错。第二ROW_NUMBER()、RANK()、DENSE_RANK()的选择要看业务需求只取前三名且名次不重复用ROW_NUMBER如果分数相同要并列排名且后续名次跳号用RANK并列排名且不跳号用DENSE_RANK。第三如果分数有并列SQL执行顺序是先内层排序生成行号再在外面过滤内外层别搞混。这道题在笔试现场是“秒杀题”因为只要见过一次模板基本不会写错。它占据的就是“稳定拿分项”的位置前提是考前把窗口函数的语法烂熟于心。4. 备战策略与避坑指南4.1 考前复习优先级怎么排很多同学备考校招笔试时非常焦虑总觉得“这也不会那也不会”然后从GitHub上找到一份几千题的大清单开始从头刷。我的建议是时间有限的情况下千万不要按照题号顺序刷LeetCode一定要按“题型分类 高频优先”来刷。优先级可以这样排数组、哈希表、字符串、链表这类“基础数据结构题”排第一档因为这些题占笔试的送分题大头二叉树、DFS、BFS、二分查找排第二档这是中档题的主要来源动态规划、贪心、回溯、堆排第三档用于冲刺难题。每一档都保证经典题能默写出来再考虑往下走。这个分配方式能让一个月时间备考的人拿到一份60分左右的笔试成绩足够过技术类筛选了。4.2 在线编辑器里最容易被忽视的细节牛客网笔试的在线编辑器和平时的IDE体验差别很大没有自动补全、没有代码提示、甚至没有便捷的Debug工具。平时习惯了PyCharm和VS Code的同学第一次用这种裸编辑器很容易抓瞎。我的经验是平时训练就用牛客网或者力扣的在线编辑器写代码并且写完之后把代码复制到一个本地干净文件里用命令行手动编译运行模拟笔试环境。另外一个细节是输入输出格式牛客笔试是标准的输入输出有时候需要你解析一整行多个整数有时候又是多行循环输入。我见过太多同学在“读入一条字符串用空格分割成整数数组”这一步卡了十分钟。提供一个小技巧用Python的同学写一个统一的读入模板处理不定长数组时用list(map(int, sys.stdin.readline().strip().split()))一行搞定能省下大量的时间。另外如果题目给了多个测试用例记得用 while 循环处理输入直到EOF不然只能过第一个用例。4.3 心态管理遇到没思路的题先跳我每次笔试前都会跟自己说一句话你不是去考满分的你是去拿通过的。校招笔试和期末考试最大的区别在于“没有绝对分数线”它按比例刷人。你只需要做到“会的题全对、难啃的题能拿部分分”就够了。部分算法题即使AC不了用暴力解法也能拿到一部分测试点的分数。很多在线判题系统是按测试点比例给分的所以你完全不要因为一上来看到难题就心态崩了。先用暴力法把简单测试点跑通把该拿的分拿到手再回头想优化。我见过不少同学明明暴力解就能过一半用例非要死磕最优解最后时间不够交了个半成品0分这才是最亏的。4.4 笔试之后别等结果立刻复盘笔试结束不代表这件事就结束了。我的习惯是趁印象还新鲜立刻把这次考过的题目整理进自己的错题本哪怕答得再差也逐题复盘。复盘的重点不是“我哪里错了”而是“这道题背后的考点是什么、我下次遇到同类题能不能一眼识别出来”。这种复盘做多了你会发现校招笔试的出题范围高度重复。今天的“最长回文子串”明天可能就是另一家公司的“最长回文子序列”这里的“TopK问题”那里可能就是“数据流中的中位数”。考点永远是那些变化的是包装形式。积累到一定程度之后考试前只需要看一眼错题本就能快速进入状态。5. 经验补充分享我踩过的那些“坑”5.1 别小看选择题它决定了你的上限很多人以为笔试就是算法题定生死其实选择题的分数同样关键。尤其是当你算法题只AC了一题的时候选择题的正确率就变成了你能不能过线的那根稻草。我在参加模拟笔试的时候就吃过亏算法题写得顺手但选择题因为没复习数据库索引相关的知识点连蒙带猜错了一大半总分直接被拉下来。所以复习计划里一定要给选择题留出时间。不要只刷算法题TCP握手状态、进程调度算法、SQL索引结构、HTTP状态码这些都是选择题的重灾区。花两个晚上集中背一遍收益比做十道Hard题高得多。5.2 关于笔试环境与网络问题的准备说出来你可能不信我见过同学在笔试当天因为网络波动直接掉线重连之后发现代码没保存心态全崩。在线笔试最怕的不是题目难而是环境出问题。我的建议是笔试前至少提前半小时准备找一个网络稳定的地方用有线网就千万别用Wi-Fi把浏览器更新到最新版本关闭所有无关的弹窗和广告拦截插件。有些笔试平台要求在特定浏览器下运行考前一定要看清邮件说明并提前测试。还有拿一个本子和笔放在手边——别笑算法题的草稿推演比你在脑子里空想要靠谱得多尤其是动态规划的状态转移表画出来瞬间就通透了。5.3 针对猿辅导题型的最后叮嘱结合猿辅导这家公司自身的业务特点它的技术笔试里偶尔会加入一些与在线教育场景相关的业务背景题比如“设计一个课程表冲突检测系统”“统计一个学生在一段时间内的学习时长”等等。这类题目本质还是算法和数据结构题但场景包装偏向“排课”“打卡”“成绩统计”等教育业务常见场景。因此备考时建议多刷一刷“区间合并”“哈希表计数”“时间戳处理”相关的题目。尤其是时间段的处理“给定多个起始时间和结束时间求重叠时间段”这种题在线教育场景非常喜欢考。理解了这层背景你对题目的理解就会比别的候选人更深一层答题时还能顺带写上一些业务维度的思考这往往是加分项。我个人在实际刷题和辅导过程中发现校招笔试的发挥确实存在“练手和练心各占一半”的规律。技术底子是练出来的但考场上遇到没见过的题能否稳住心态往往决定了最终成绩。我强烈建议你在正式笔试前至少完整模拟三次限时笔试严格按考试时间来中间不暂停、不翻书、不看答案。模拟的时候体验越接近真实到了考场上你反而会越放松。最后再分享一个小技巧笔试前一天晚上不需要再刷难题把错题本打开翻一遍把所有需要背的复杂度、模板代码、SQL窗口函数语法过一遍然后就放下手机早点睡。充足的睡眠对第二天代码状态的影响比我之前以为的大得多——清醒的大脑写出AC代码的概率真的比熬夜状态高出一截。