笔试结束那晚,我盯着结果页面看了很久。某通信大厂的在线笔试,三道编程题,总分600分,最后只拿到340多分。第一题全过,第二题跑了几个用例就开始超时,第三题直接没写完整。系统显示"未通过",当时心态确实崩了一下。更难受的是,我明明刷了小半年的题,怎么一到正式机考还是这个结果。后来我在技术社区发了帖,本意是想请路过大佬帮忙诊断,结果评论区里几位前辈的话让我冷静了不少:有的说笔试没过其实比面试挂掉更容易补救,有的直接点出我的问题在于"只会做题,不会应试"。我把整个考试过程翻来覆去复盘了一周,这篇就当是给同样卡在笔试关的同学一个参考,也想说说那些刷题之外、真正影响结果的东西。
1. 收到结果那一刻,先别急着否定自己
1.1 先看懂"没全通过"到底是什么意思
很多人一看"未通过"就觉得自己被一票否决了,其实不是。大厂在线笔试的成绩判定不是"全对才过"或者"做错一题就挂",而是按总分排名划一条入围线。以我这次考的某通信大厂为例,三道题的基础架构是:一道简单题约100分,一道中等题约200分,一道偏综合的难题约300分。如果你简单题全对、中等题过一半用例、难题拿到一点暴力分,总分是可以超过及格线的。但那天的实际情况是,我只拿到340多分,距离入围线还差了几十分。
这里有一个很关键的点:"没全通过"不等于"没机会",但"没全通过"背后暴露的问题,比分数本身更重要。系统给出了各题的分项表现和超时用例数,这些数据比一个冷冰冰的分数更有价值。我后来把每一题的提交记录、编译结果、超时或内存报错全部截了下来,逐条分析,这份复盘材料比刷十道新题还有用。
1.2 我的笔试基本情况与失分分布
先把我的考试底子交代一下:某高校计算机相关专业在校生,刷题以力扣热题为主,中等难度能磕下来,困难题看情况。当时自认为准备得不错,结果被机考教育了一顿。这次笔试的时间是120分钟,环境是常见的在线编程平台,自带编译器,支持C++、Java、Python。我选了Python,因为平时写脚本顺手,但事后想,这个选择未必最优。
失分分布大致是这样:
| 题号 | 分值 | 我的得分 | 问题表现 |
|---|---|---|---|
| 第一题 | 100 | 100 | 全对,但花了45分钟 |
| 第二题 | 200 | 120 | 最后几个用例超时 |
| 第三题 | 300 | 120 | 只过了基础用例,部分边界情况WA |
很明显,我的问题不是不会写代码,而是把过多的时间耗在第一题上,导致后面的题没有足够时间优化和调试。第一题其实不难,但我当时反复确认输入输出格式,又写了大量防御性代码,把简单问题复杂化了。这种"求稳"的心态在机考中非常致命,后面我会详细展开。
1.3 从一位前辈的留言里读到的最扎心真相
帖子发出后,有位前辈留了一段话,大意是:你在力扣上刷题用的是"核心代码模式",系统已经把输入输出帮你处理好了,你只要写函数体。但大厂机考用的是"ACM模式",整份代码的输入解析、边界处理、输出格式全靠你自己写。平时练习不习惯这种模式的人,很容易在正式考试时被各种输入输出的坑消耗大量时间。
说实话,这句话一下子戳中了我。回想我刷题时确实很依赖平台自带的输入输出框架,自己从来没有主动写过完整的readline和split逻辑。到了机考现场,第一题光是处理多行输入就花了好几分钟,后面自然就紧紧张张。
复盘第一步不是去刷更多题,而是先认清:你挂掉的到底是知识储备,还是应试熟练度。这两者的补救路径完全不同。如果是前者,需要系统补基础;如果是后者,只需要针对性训练答题节奏和环境适应能力。从我的分数分布看,既有前者的影子,更多是后者的问题。
2. 复盘第一刀:把题目逐题过一遍,分清"不会"和"做错"
2.1 算法题:我的两道题分别栽在什么地方
考完当天晚上,我趁着记忆还新鲜,把三道题尽量完整地重新做了一遍。这一步很重要,等到第二天,很多细节就模糊了。我第一题是字符串处理,不难,但我在读题上花的时间太多,反复确认"要不要处理空字符串""数字之间可能有多个空格怎么办",这种犹豫消耗了大量时间。
第二题是个典型的图遍历问题,场景大概是给出一组依赖关系,要求判断能否完成所有任务。我用了DFS加记忆化,自己测试小数据没问题,但提交后显示超时。冷静下来看,我的实现里用了递归,Python的递归深度有限,而且递归调用有额外开销,在数据量一大就崩了。正确的方向是用拓扑排序加BFS,复杂度能降到线性。
第三题我做得更离谱,题目描述其实不难,是一个带条件的区间合并问题。但我完全没有往"区间排序加贪心"这个方向想,而是硬写了一套复杂的分类讨论,结果只过了基础用例,一旦出现题目里说的"区间端点重合"等边界情况,就输出错误。
重新做完后,我给三道题贴了标签:第一题是"不够果断",第二题是"算法选型错误",第三题是"方向性跑偏"。这三类问题本质上是不同的:"不够果断"是心态和考试技巧问题,"选型错误"是知识体系有漏洞,"跑偏"是解题思路训练不足。
2.2 非算法题:那些我没拿到的分其实在考熟练度
除了三道编程题,这套笔试还有一部分选择题和问答题,主要覆盖计算机网络、操作系统、数据库、编程语言基础。我选择题错了不少,主要集中在TCP拥塞控制的细节、进程间通信方式对比、数据库隔离级别的加锁表现这类"记得但不深"的知识点上。
这种题特别容易让人放松警惕。平时复习时你看到"TCP三次握手",觉得自己懂了,但笔试考的是"为什么两次握手不行""序列号初始值是怎么定的",问你的是一个需要理解本质的问题,而你只记住了一个流程。我把做错的选择题全部收集起来,对照着教材目录重新过了一遍相关章节,发现一个规律:凡是能用"为什么"来问的知识点,我都很容易丢分。
所以复盘非算法题,不是把题背下来,而是把每个选项背后的原理弄清楚:为什么这个选项对,其他三个错在哪里,分别适用于什么场景。这个过程比单纯刷十套模拟题更有效。
2.3 把"会做"和"能做对"分开:记录才是复盘的根基
我一直有个毛病:刷题的时候写对了就下一题,很少记录自己的思考过程。这次复盘我改变了做法,建了一张表,每一题都记录:题目类型、我的第一反应思路、卡住的点、正确解法、两个解法的时间复杂度差异、以及"下次遇到这类题应该怎么想"。这张表大概花了一个晚上整理,但它成了我后续备考的纲目。
比如在DFS那题旁边,我写了一句:"数据量超过10^5,优先考虑非递归写法,注意Python递归深度默认只有1000。"在区间合并那题旁边,我写的是:"连续区间的优化方向永远是排序+扫描,不要一上来想复杂结构。"这些不是网上的标准答案,而是我自己踩完坑后的总结,后面第二遍复习时,效率比看别人的笔记高很多。
3. 从失分点反推:这类大厂笔试到底在考什么
3.1 数据结构与算法的考察深度:比你想的更看重"最优解"
大厂笔试的算法题,表面上考"能不能做出来",实际上考的是**"在数据规模约束下能不能做出最优解"**。我第二题就是个典型:DFS+记忆化能过小数据,但题目给定的测试数据是10^5级别,预期解必须做到O(V+E)。这给所有备考同学的第一个信号是:刷题时不能只满足于"提交通过",还要养成"分析复杂度"的习惯。
怎么养成?在力扣提交时看一眼执行时间和内存分布,如果你的算法只击败了5%的人,说明你的实现很大概率不是预期的解法,这时候去评论区看看别人的思路,然后把更优的解法自己写一遍。这个过程比重复刷十道简单题有价值得多。刷题数量当然重要,但如果每道题都是囫囵吞枣地过,那数量的意义要大打折扣。
笔试的"中等题"和"困难题",往往是从一类经典问题的框架出发,加上一层场景包装。比如"课程表"对应拓扑排序,"区间合并"对应排序贪心,"网格最短路径"对应BFS/DP。考题考的不是你会不会这个知识点,而是你看到包装后的题目,能不能把它还原成经典问题。这是需要刻意训练的。
3.2 计算机基础:选择题丢分很多时候是因为"只会背书"
笔试中的选择题和问答题,覆盖的知识点是有限的,反复出现的高频区域我也总结了一下:
| 考点方向 | 常见考查角度 | 我的失误类型 |
|---|---|---|
| 计算机网络 | TCP状态转换、拥塞控制、HTTP缓存 | 细节记忆不准确 |
| 操作系统 | 进程线程区别、死锁条件、虚拟内存 | 原理理解不透彻 |
| 数据库 | 索引原理、事务隔离级别、锁机制 | 多个概念混淆 |
| 编程语言 | 内存管理、切片/指针语义、异常机制 | 实际经验不足 |
这里我想说一个可能有点反直觉的观点:计算机基础选择题丢分,往往不是因为复习量不够,而是复习方式太"线性"了。你按顺序把教材读一遍,每个知识点都觉得自己懂了,但题目是用多选或者情景题来出的,四五个概念交叉在一起,你就容易懵。正确的复习姿势是:每学完一个章节,自己尝试用一两句话讲清楚它的核心矛盾和解决思路,然后找一些综合性的题目来检验,而不是只看书上的例题。
3.3 场景设计与工程素养:容易被忽视的隐藏考点
我在复盘时才发现,这次笔试虽然没有单独的场景设计大题,但第三题其实隐含着工程上的任务拆分能力:题目描述很长,有很多边界条件,真正要写的部分并不复杂,关键在于你能不能快速抓住问题的核心,而不被无关信息干扰。
很多同学刷题时只看算法描述,不看完整题干,导致正式考试时面对大段文字一下子就紧张了。我的教训是:机考题干中80%的信息都是有效信息,包括数据范围、输入格式、边界说明,每一句话都可能是坑。平时练习时,要有意识地做"长题干阅读训练"——先读题,用一两句话概括题目要干什么,再动手写代码,这样能明显提高理解效率。
4. 二战备考的实操路径:我把时间切成三个阶段
4.1 第一个阶段:算法专项突破(每日安排与刷题策略)
复盘结束后,我重新规划了备考计划。第一阶段是算法集中训练,周期四周,目标是把高频考点刷透。我不再盲目刷力扣热题,而是按专题分类:数组与双指针、链表、二叉树、图与拓扑排序、动态规划、贪心、字符串、堆与栈。每个专题花三到四天,每天固定四到六道题,每道题写完都要再花至少十分钟复盘解法,如果这道题没有达到最优复杂度,就必须改成最优解法再写一遍,哪怕已经AC了。
每天的具体安排大致是这样的:
- 上午:做两道新题,重点关注中等难度以上的图、树、DP题,做完立刻记录思路。
- 下午:改一道之前没做出来的题,尤其是不看题解的情况下做不出来,那就先看题解,看懂后合上答案自己写一遍。
- 晚上:把自己写的代码重新读一遍,尝试写一句注释概括思路,然后去评论区看有没有更优解,有就抄下来对比。
这种做法的核心逻辑是:刷题的目的不是攒AC数,而是积累"模式识别"能力。看到一道陌生题,能快速对应到某个已学过的算法框架,这才是考场上最有用的能力。数量上,四周我能刷大概120道题,这个量不大,但每一道都过得很扎实。
4.2 第二个阶段:ACM模式与计算机基础补齐(环境适配训练)
第二阶段我开始做"环境适应训练"。每天固定抽一到两个小时,在牛客网的题库里做在线编程题,用的就是ACM模式:自己写input()解析、自己处理多行输入、自己控制输出格式。遇到Python性能瓶颈的题目,我会选择用C++写一遍,一是为了体会两种语言的差异,二是给自己多一个语言选择,防止正式机考时在某些题上被Python的运行效率拖累。
与此同时,把选择题涉及到的计算机基础按模块重新过了一遍。方法不是重读教材,而是直接做各平台整理的模拟选择题,做完后把每个选项都当成判断题来研究。做错的题整理成错题本,错误原因分三类:记忆模糊、概念混淆、完全不会。完全不会的知识点回归教材补齐,记忆模糊的用口诀和示例巩固,概念混淆的则通过画对比表格理清。这个过程大概持续两周,效果比之前漫无目的地复习好很多。
4.3 第三个阶段:全真模拟与心态训练(拿什么当作"最后一击")
最后一个阶段是模拟考训练。我在复习后期,每周安排两次完整时长的全真模拟:按照正式考试的题量和难度,找几套历年笔试模拟题或平台上类似的套卷,掐着时间做。模拟考的目标,不只是分数的提升,更重要的是检验时间分配和心理承受能力。
第一次模拟我差点又崩了,第一题做太慢,后面没时间检查。后来我给自己立了一个时间分配的"铁律":简单题最多20分钟,中等题最多40分钟,难题先花10分钟想思路,想不出就写暴力遍历,拿到基础的分数。这个规则让我在后来的模拟中稳定了很多。心态方面,我逐渐意识到,正式机考的紧张感主要来自"不知道下一题会遇到什么"。模拟考试练的就是这种不确定性下的适应力:题目再陌生,也要按部就班读题、分析、写代码、测用例。
5. 笔试之外的补救手段:不让一张成绩单卡住整条路
5.1 简历与项目描述的联动:把笔试暴露的短板补在"纸面"上
在准备下一轮笔试的同时,我也开始思考一个问题:如果笔试再次不理想,我还有什么办法把自己扯回牌桌上?答案是简历上的工程经历与实践项目。
那次笔试暴露出的问题之一是"只会刷题,缺少工程实战"——表现在多选题中涉及真实系统设计的题容易丢分,也表现在编程题遇到复杂场景时容易慌。我开始系统整理自己做过的一个模拟项目X,是之前课程设计里写的简单Web应用:虽然技术栈很常规,但我在描述时,把数据表索引的优化理由、接口并发量的估算过程、以及一次内存泄漏的排查记录都写进了简历。这样做的好处是,简历不再是技能清单,而是一个能展示"我有实际思考能力"的证据。
我建议每个人都认真打磨简历里的一到两个项目描述,用场景、问题、动作、结果的结构去写。笔试决定你能不能进面试,而简历上的经历,决定面试官在面试时对你有没有基础信任。如果笔试分数一般,项目经历里展现出的工程素养,反而是你面试翻盘的重要筹码。
5.2 面试环节如何解释笔试失利:诚实但别自贬
很多同学笔试没过就不敢投下一次了,其实没必要。如果你后续笔试通过了,却在面试中被问到之前的笔试情况,该怎么回答?我的体会是:别撒谎,也别过度自责。
可以这么说:之前笔试有些题确实没完全做出来,复盘后发现主要问题在于对ACM模式不够熟悉,对某类算法优化选型不够敏感,之后针对性地做了两个月的训练,在XX平台上的模拟成绩如何如何。这套话术的套路是:承认不足+给出具体原因+展示你已经做了什么。面试官更关心的是你的反思能力和成长速度,而不是揪着上次的失败不放。我后来在模拟面试中就用过这个说法,效果比支支吾吾好多了。
5.3 多投多对比:别把所有希望押在一家笔试上
这是这次笔试失败教会我的最重要的一件事:一定要多投几家公司,不要把鸡蛋放在一个篮子里。我在备考期投了很多类似的岗位,每个公司的笔试风格略有不同,有的更看重算法,有的更看重基础知识选择题,多投几家,不仅能增加笔试经验,也能减少单家公司笔试失利带来的焦虑感。每场笔试的真题都值得拿来复盘,哪怕这家挂了,题目也是宝贵的备考资料。投递的序号可以排长一点,给自己留足容错空间。
6. 写在最后:一段来自实际复盘的思考
要是你现在也正对着"未通过"三个字发呆,我给的建议挺简单的:先把情绪放一放,把系统给的各项数据截图存好,趁热打铁把能回忆起来的题目全部重做一遍,按题目类型和失分原因整理成一张复盘表——这个动作价值极大,它能把一次失利变成一份可复用的备考地图。然后,给自己定一个两周到四周的针对性计划,该补算法的补算法,该练ACM模式的练ACM模式,该梳理计算机基础的梳理计算机基础。
我个人的体会是,笔试没过这件事本身不可怕,可怕的是一直停在"我为什么这么菜"的情绪里不出来。那次发帖后,评论区有位前辈说的话我一直记着:"笔试是世界上容错率最低、也是最公平的筛选方式之一,它只看你当场能不能写出来。但人生不是一场笔试,你完全可以把它当成一次带着答案重考的机会。"后来我重新参加了模拟笔试,成绩比第一次提高了将近一半,这个进步不是靠意志力硬撑出来的,而是一道题一道题复盘出来的。希望正在经历或者即将经历大厂笔试的你,也能少走一点我走过的弯路。