行业资讯
📅 2026/8/30 20:31:50
2023秋招算法岗笔试复盘:从KMP到动态规划的考点与时间分配
2023年度小满秋招算法岗第二批笔试是我秋招季里做得最“憋屈”的一场——不是题目完全不会而是会做的题没时间做完做完的题没时间检查。两小时线上笔试系统随机抽题7道题里2道选择5道编程语言限定C、Java、Python三选一。考完我复盘了整整三天把每道题的考点、卡壳点和更优解都拆了一遍发现这场笔试其实在传递一个非常明确的信息算法岗笔试已经不是“会背模板就能过”的阶段了它既要你手撕数据结构也要你讲得清机器学习算法为什么这样设计。这篇文章就把我复盘后的完整笔记摊开来讲包括题型分布、高频算法考点、考场时间分配和考后反思给后面要投算法岗的朋友做一个可以直接参考的路径。1. 从7道题看小满算法岗的出题审美题型拆解与分数权重1.1 线上笔试的硬规则时间、环境与输入输出先说笔试规则。这场笔试是在赛码网系统上进行的双机位监控手机架侧面电脑开屏幕共享前后摄像头都得保持打开状态。两小时倒计时中途不能切出浏览器一旦切走超过三次画面会标黄超过五次直接判违规。整个流程给人感觉不是防作弊而是逼你在高压环境里做决策——这和真实业务里的“有限资源下快速交付”是一个逻辑。语言三选一但系统里预置的代码模板有细微差别C默认给了bits/stdc.hJava默认给了Main类Python默认只给了import sys。我选的是C后来看群里大家反馈Python选手普遍在输入解析上多花了五分钟Java选手则经常被类的命名规范坑到。建议不管是刷题还是正式笔试都提前在赛码、牛客这类在线评测系统上模拟几次不要只在自己本地编译器上练习。本地IDE和OJ的输入输出差异在某些场次就是决定过不过的现实问题。另一个容易被低估的硬规则是本地IDE里样例能过提交却可能0分因为大部分题目都有多个隐藏测试点而且边界条件卡得非常死。这场笔试的7道题里至少有3道题需要处理“多行输入”“字符串含空格”“数值范围超过int”这些情况。如果平时刷LeetCode用的是函数式调用一上笔试遇到标准输入输出很多人会突然懵掉——这种能力上的断档是算法岗笔试最常见的失分点。1.2 七道题的考点全景我回忆下来的整体情况7道题的分值和题型可以用一张表说清楚题号题型核心考点难度建议用时第1题单选KMP算法的next数组计算中等5分钟第2题单选排序算法的稳定性与时间复杂度简单3分钟第3题编程Top-K问题海量数据取最大K个中等15分钟第4题编程图论单源最短路Dijkstra中等20分钟第5题编程贪心区间调度或活动选择中等偏易15分钟第6题编程动态规划背包问题变体较难25分钟第7题编程机器学习KNN距离计算或交叉熵简单10分钟注意这7道题并不是按照从易到难排列的。第1题KMP的next数组计算拿给不熟悉字符串算法的同学可能卡半小时第7题反而简单到像送分。所以考场上第一件事永远是“扫题”而不是从第1题开始硬啃。这个策略我在后面专门讲。从整体分布来看数据结构与算法占了5道题机器学习与深度学习原理占了2道题。这种比例很符合算法岗的画像基础算法能力是硬门槛机器学习理论是区分度来源。不太好的消息是这场笔试几乎没有考察系统设计或工程化内容说明小满的筛选逻辑是“先确认你会写代码再确认你懂模型最后才在面试里看工程能力”。1.3 与行业热搜考点对照算法岗笔试的“浓度表”一个很有意思的现象是我复盘时把这些考点和当时的搜索热度做了对比。你会发现网上的算法热搜词——排序算法、KMP、贪心算法、Dijkstra、数据结构与算法、动态规划——几乎就是这张笔试考点的“浓度表”。真正被反复点名的从来不是什么冷门偏题而是工程里最常用、面试官最笃定你应该掌握的那一批算法。数据结构的排序算法在热搜里常年霸榜和笔试第2题的排序稳定性考察对应KMP算法作为字符串匹配的经典模板直接出现在第1题贪心算法、堆排序算法、Dijkstra算法这三个热词包揽了第3到第5题而机器学习算法、深度学习算法、聚类算法、KNN算法的热度则对应了第7题和可能出现的理论问答题。那些偶尔冒出来的粒子群算法原理、模拟退火算法、卡尔曼滤波算法虽然没进这场笔试的题目但它们会在不同公司的不同岗位里交替出现尤其是做机器人、自动驾驶、控制优化方向的团队。如果你投的算法岗偏基础平台可以不看这类但如果偏业务模型或决策优化最好还是留个印象。2. 字符串、堆与图论三道必答基础题的解法和考场变通2.1 KMP与next数组字符串匹配的套路化速解先说第1题。题目给了模式串pabacaba要求计算next数组。这类题在力扣和剑指Offer里出现过无数次但笔试选择题里有个陷阱不同教材对next数组下标的定义不一样。有的教材约定next[i]表示“当前字符之前的字符串中最长相等前后缀的长度”也就是失配时模式串该回退到的位置也有的教材把next[i]定义为“包括当前字符在内的最长相等前后缀长度减一”。这两个定义只差一个下标偏移如果题目没有明确标注“next[i]定义为……”就会产生歧义。这场笔试很贴心题目明确写了next[i]定义为模式串前i个字符组成的子串中最长相等前后缀的长度。按这个定义手算一遍abacabanext[0]约定为-1或0看题目说明通常是-1next[1]子串a没有真前后缀取0next[2]子串ab前缀a后缀b不相等取0next[3]子串aba最长相等前后缀是a长度1next[4]子串abac前缀a、后缀c不等前缀ab、后缀ac不等取0next[5]子串abaca最长相等前后缀是a长度1next[6]子串abacab最长相等前后缀是ab长度2next[7]子串abacaba最长相等前后缀是aba长度3。所以答案是[-1, 0, 0, 1, 0, 1, 2, 3]如果题目把next[0]定为0则整体右移后再做处理。这类题拿分的关键是平时就把“最长相等前后缀”的概念嚼碎不要只记模板。我在候考群里看到有人直接套用“前缀表整体减一”的写法算出来是[-1, -1, -1, 0, -1, 0, 1, 2]和标准答案差了一截。不是算法错而是没读清楚题目定义。2.2 Top-K与堆排序O(n log k)的计算量推演第3题是典型的Top-K问题给一组海量整数输出最大的K个元素。这道题有很多种解法考场上关键是在“堆”和“快速选择”之间做选择。最稳妥的思路是维护一个大小为K的小根堆。遍历所有元素时如果堆的大小不足K直接入堆如果当前元素比堆顶大就把堆顶弹出把新元素压入。这样堆里始终保存着当前已遍历元素中最大的K个最后堆内K个元素就是答案。时间复杂度是O(n log K)空间复杂度O(K)。为什么需要堆顶最小的小根堆因为我们要用一个“最小的门槛”来挡掉不配进入前K的元素每次遇到更大的就替换门槛让门槛慢慢抬高。也能用快速选择Quick Select来做平均O(n)但最坏O(n²)而且代码复杂度高、递归深度大、容易写错边界。笔试题如果数据量是百万级堆排完全够用如果特意把数据量出到千万级且要求稳定那快速选择的常数优势就出来了。我当时的判断标准很简单题目没有特别强调“必须O(n)”时一律用堆排序因为它的正确性最容易验证。C实现时要注意priority_queueint, vectorint, greaterint小根堆的写法和大根堆只差一个greaterint笔试场上真有人写反。更推荐直接写vector加push_heap/pop_heap或者手动实现make_heap避免被底层容器搞晕。Python选手用heapq.nsmallest(k, arr)一行搞定但这个函数内部是堆还是排序取决于K和N的关系保险起见还是自己维护堆。这里还有一个隐藏考点如果这题改成“从10亿个数中找TopK”堆方案依然成立但你可能需要在外部排序的框架下分批读入数据。笔试系统一般不真出这种大数据量场景但选择题里有可能会问“最适合海量数据的Top-K数据结构是什么”答案是堆而不是快排或插入排序。2.3 Dijkstra与堆优化最短路题的边权陷阱第4题是单源最短路。我印象比较深因为题目本身不难但加了一个小拐点图中边的数量很多且出现了部分边的边权很大——大到我用int存储时中间计算直接溢出。Dijkstra算法的前提是图中不能有负权边。它每次从“未确定最短路的节点”中选一个距离最小的节点然后对它的邻接边做松弛操作。这个“选最小”的操作朴素实现是每次扫一遍所有节点O(V²)用优先队列维护候选节点可以把复杂度降到O(E log V)。笔试里我遇到的情况是有向图节点数约10万个边数约20万条起点固定求起点到每个节点的最短路。这种数据规模就必须用堆优化。我在现场写了一个小根堆存(dist, node)每次弹出时判断if (d ! dist[v]) continue;这个判断是用来跳过过期出队记录的。很多人漏掉这行就会反复处理同一个节点的旧距离导致死循环或TLE。另一个坑是初始化数组的INF不够大。如果边权累加后超过int上限最短距离可能溢出成负数写在答案里直接WA。经验值建议用0x3f3f3f3f作为INF比INT_MAX安全因为INT_MAX再加一个正数会变成负数而0x3f3f3f3f 0x3f3f3f3f仍然在int范围内。如果题目把图改成边权全部为1就别用Dijkstra直接BFS复杂度O(VE)更快也更不容易写错如果改成存在负权边但无负环则要Bellman-Ford或SPFA。笔试的时间不允许你把每种算法的模板都临场推导建议平时就把这三种最短路模板背成肌肉记忆。2.4 如果卡常快读与内存的实战方案笔试复盘时群里不少同学反映第4题在本地跑样例秒出提交后TLE。我后来看了他们的代码发现普遍用的是cin n m没有关闭输入输出流同步。C的cin默认会和C标准IO同步性能比scanf慢数倍。在海量输入的场景下这个差异就是TLE和AC的分界线。我在考场上直接用了快读模板。以下是一段我自己维护的C快读函数笔试时可以直接抄#include bits/stdc.h using namespace std; inline int read() { int x 0, f 1; char ch getchar(); while (ch 0 || ch 9) { if (ch -) f -1; ch getchar(); } while (ch 0 ch 9) { x x * 10 ch - 0; ch getchar(); } return x * f; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n read(), m read(); // ... return 0; }这样写两行关同步语句再加一个手写read()基本能扛住百万级输入。Python选手可以用sys.stdin.buffer.read().split()一次性读入再转整数比input()循环快非常多。这些细节平时不起眼但在算法岗笔试里它们可能就是决定你通过不了隐藏测试点的最后一根稻草。3. 经典算法思想贪心、动态规划与搜索的正确打开方式3.1 贪心题的“证明直觉”区间调度的反悔与排序依据第5题是区间调度。题目描述大致是有若干个活动每个活动有一个开始时间start[i]和结束时间end[i]同一时间只能参加一个活动问你最多能参加多少个活动。这个问题的经典解法是按结束时间从小到大排序然后依次选择每个区间——如果当前区间的开始时间晚于等于上一个选中区间的结束时间就选中它。答案是区间数量最多。这里有一个很多人不理解的地方为什么按开始时间排序或者按区间长度排序不行我用一个生活化的类比解释假设你一天有多个会议你想尽可能多地参加会议那么你每次应该优先参加“结束得最早”的那个会议。因为会议结束得越早给后面的会议留下的空闲时间就越充裕。如果你优先参加“开始得最早”的会议可能它持续一整天导致你后面一个会议都参加不了如果你优先参加“持续时间最短”的会议它可能恰好卡在两个更长会议的中间反而破坏连续性。在考场上你不需要写出严格的数学证明但你需要有这个“正确性直觉”。如果题目要求手写证明可以用“交换论证法”假设最优解中第一个选中的区间不是结束时间最早的那个我可以把最优解的第一个区间替换成结束时间最早的区间剩余区间依然可以全部保留而且替换后解不会变差。这就是贪心算法在笔试中最常见的证明套路。3.2 动态规划状态定义比转移方程更重要第6题是DP也是整场笔试区分度最高的一道题。具体题面我记不全了但核心是背包问题的一个变体——不是普通的0/1背包而是带限制条件的物品数量N很大背包容量V也很大但每个物品的价值和重量都有特征可以用某种方式合并。我复盘时发现这道题的难点不在转移方程而在状态定义。很多同学一上来就写dp[i][j]表示前i个物品、容量j时的最大价值直接二维数组开爆了。实际上N和V都可能到10的5次方级别二维DP根本存不下。正确方向是思考“这个题目究竟限制了什么”。如果物品重量很大、价值很小可以反转状态——用dp[i][j]表示前i个物品、总价值为j时的最小重量最后扫一遍找重量不超过背包容量V的最大j。这是0/1背包的经典变体也是背包问题的通用思维当你觉得一个状态维度太大时试着把“容量”和“价值”交换。DP的另一个关键点是初始化。dp[0] 0其他位置设成INF表示“总价值为j时所需的最小重量为无穷大即当前不可达”。转移时dp[j] min(dp[j], dp[j - value[i]] weight[i])。注意遍历顺序0/1背包要从后往前遍历j避免同一个物品被重复使用如果是完全背包则从前往后遍历j。这个细节在笔试中反复出现几乎每次考背包必有一批人栽在这里。我自己的教训是不要一上来就写转移方程先在草稿纸上把状态定义写清楚然后问自己三个问题——这个状态是否能覆盖所有决策初始值是否合理遍历顺序是否正确三个问题都确认了再动键盘。3.3 搜索题的时间线管理回溯、剪枝与随机优化这场笔试虽然没有直接考回溯但从我看到的行业热搜词来看回溯、剪枝、粒子群、模拟退火这些算法经常出现在算法岗笔试的题库里。尤其是“剪枝算法”和“模拟退火算法”这两个关键词搜索热度一直不低。它们从来不是主线但偶尔会在某道压轴题里以“不可能用暴力解”的形式逼你优化。如果笔试遇到一个看起来只能用DFS/BFS解决的问题数据范围却特别大先别急着放弃。你可以尝试几种剪枝策略按照某个指标的剩余上界做可行性剪枝把搜索顺序调整为更容易找到优解的顺序记忆化搜索避免重复状态。最经典的例子是求一个排列的某个最优解如果暴力枚举是O(n!)但加入“当前代价已经大于已知最优解”的剪枝后很多分支会被砍掉实际运行时间可能接近多项式级别。至于粒子群和模拟退火这类随机优化算法它们在正规算法岗笔试里出现的概率很低。如果真出在选择题里大概率只问你“模拟退火的核心思想是跳出局部最优解”“粒子群算法的每个粒子代表一个候选解”这类概念不会让你手写完整代码。所以这类知识点背熟概念就行不必花大量时间刷代码。4. 机器学习与深度学习算法岗笔试题里的“高阶门槛”4.1 KNN、聚类与评估指标理论送分题第7题是机器学习题考的是KNN距离计算。题目给了一组训练样本每个样本有若干特征和标签然后给一个测试样本要求用KNN算法预测它属于哪个类别。这类题本质上是送分题却也最容易因为粗心丢分。KNN算法的核心只有三句话确定距离度量方式通常欧氏距离找距离最近的K个训练样本对这K个样本做多数投票得到预测类别。但笔试会从三个角度加深第一距离计算可能带特征权重。比如不同特征的单位尺度不同直接算欧氏距离会被数值大的特征主导。常见的处理是标准化。如果题目没有明说你在答题时可以直接按原始特征算距离但要心里清楚特征尺度不一致时KNN结果不可靠。第二K值怎么取。K太小容易过拟合K太大会让决策边界过于平滑。笔试选择题里可能会问“当K为奇数或偶数时投票可能出现平局怎么办”答案是“K尽量选奇数如果平局就随机选一个或按距离加权”。第三KNN是“惰性学习”算法它没有训练过程所有计算都发生在预测阶段。这个特性经常被拿来和聚类算法对比。聚类算法如K-Means是典型的无监督学习而KNN是有监督学习。有同学把两者搞混因为缩写相似。面试官问到机器学习基础时这是最容易被戳穿的漏洞。此外第7题还可能扩展考评估指标精确率Precision和召回率Recall的区别、F1分数、ROC曲线和AUC。我的建议是记一个例子在垃圾邮件分类场景里精确率是“你预测为垃圾邮件的邮件里真的是垃圾邮件的比例”召回率是“所有真实的垃圾邮件里你成功找出来的比例”。这两个指标总是此消彼长F1是它们的调和平均数。如果笔试考到按这个思路解释阅卷人一眼能看出你是真懂。4.2 梯度下降与损失函数优化思想怎么考机器学习这块还有一类高频考点损失函数和梯度下降。虽然这场笔试没直接出大题但选择题里出现了“下列哪个损失函数更适合分类任务”的选项。答案是交叉熵损失而不是均方误差MSE。从原理上解释分类问题的输出通常是经过Softmax的概率分布交叉熵可以度量预测分布和真实分布之间的差异。而MSE在Softmax场景下会导致梯度消失——当预测值接近0或1时MSE对参数的梯度非常小模型训练会变得很慢。交叉熵配合Softmax正好在概率值偏离目标时给予足够大的梯度这也是深度学习分类任务几乎都用交叉熵的根本原因。梯度下降算法本身也值得展开。全量梯度下降每次用整个训练集计算梯度稳定但慢随机梯度下降SGD每次用一个样本快但抖动大小批量梯度下降Mini-batch GD是两者的折中深度学习训练中最常用。笔试选择题如果问“为什么深度学习常用Mini-batch而不是全量梯度下降”答案通常是兼顾计算效率和梯度稳定性也方便硬件并行。优化器方面Adam是面试高频词。它结合了Momentum和RMSProp的思想用梯度的一阶矩估计和二阶矩估计动态调整学习率。笔试不需要你默写Adam的更新公式但如果你能说出“Adam为什么比SGD稳”在面试里会是一个加分项因为它为每个参数自适应调整学习率缓解了训练初期梯度稀疏和尺度不一致的问题。4.3 KL散度与注意力机制模型原理题怎么答才不丢分从热搜词里可以看到“KL ELBO算法原理详解”这个词冲上了算法榜。我当时看到这个词就觉得深度学习原理的考察正在往生成模型方向渗透。如果你投的是大模型、多模态、生成算法方向KL散度和ELBO几乎是绕不开的概念。KL散度用来度量两个概率分布之间的差异。它的数学形式是D_KL(P||Q) ∑ P(x) * log(P(x)/Q(x))。要注意的关键性质是KL散度是非对称的即D_KL(P||Q) ! D_KL(Q||P)所以它不满足距离的对称性不能叫“两个分布之间的距离”。在VAE变分自编码器中KL散度扮演的角色是约束编码器输出的隐变量分布让它不要偏离标准正态分布太远。ELBO证据下界的推导逻辑是直接最大化数据的对数似然很困难转而最大化一个下界这个下界等于“重构对数似然”减去“隐变量后验分布与先验分布的KL散度”。这句话如果能在面试里完整说出来面试官基本会认为你有生成模型的底子。Transformer的注意力机制也是一个高频原理题为什么Q和K的点积要除以sqrt(d_k)因为当维度d_k较大时点积的数值会变得很大经过Softmax后梯度非常小除以sqrt(d_k)可以保持输出的方差稳定让梯度传播更顺畅。这些原理题有个共同的答题套路先给公式或机制再解释“为什么这么设计”最后举一个实际例子或后果。这种“公式动机案例”的结构在笔试主观题里得分率最高。4.4 延伸视角PID、卡尔曼滤波和粒子群在算法岗笔试中的出现逻辑最后顺带提一类特殊算法PID算法、卡尔曼滤波算法、粒子群算法。它们在纯互联网算法岗笔试题里很少出现但如果你投的是自动驾驶、机器人、运筹优化或者控制相关方向的算法岗这些算法的出现概率会明显上升。PID是比例、积分、微分控制的缩写核心思想是根据当前误差、历史误差累计和误差变化趋势来调节输出。卡尔曼滤波则是用状态预测和观测更新做最优估计常用于定位和跟踪。粒子群算法和模拟退火算法属于元启发式优化适合解离散组合优化问题。从我的经验看如果你不是这些方向可以不管如果是建议至少掌握PID的三个环节分别解决什么问题、卡尔曼滤波的预测-更新两步流程、粒子群算法的“个体认知”和“群体认知”两个更新驱动力。这些属于背下来就能拿分的知识点性价比很高。5. 两小时实战复盘时间分配、得分策略和考后清单5.1 考场时间轴前45分钟、中间60分钟、最后15分钟我考完复盘时最懊恼的就是没有严格执行时间分配。当时我在第1题KMP的next数组上花了接近12分钟在选择题里反复核对定义直接挤占了我做第6题DP的时间。如果重来一次我会把两小时切割成三段并且在心里默念“不恋战”。前45分钟浏览全部7道题把第1、2、3、7题这种“一眼有思路”的题先拿到手。写代码前先想清楚边界条件和复杂度不要边写边想。这4道题如果全对基本上已经拿下了50%左右的分数。中间60分钟集中攻第5题贪心和第4题Dijkstra。这两道题只要打过模板正常不应该超时。拿完这两道题的分数后再挑战第6题DP。如果第6题20分钟内没有清晰的状态设计思路我的策略是先跳过把前面的代码重新检查一遍。最后15分钟检查边界。逐个输入输出自查数组有没有开够多组输入是否处理了空行排序时当数值相同时是否需要按第二关键字处理有没有变量发生溢出这一步不要写新题只做防御性检查。我当时没有跳题的习惯总觉得“既然做出来了就应该把它写完整”结果在第1题上纠结太久导致后面的DP写得仓促状态转移漏了一种情况。现在总结一句话算法岗笔试是在有限时间内做战略取舍不是证明你什么题都会而是证明你在给定时长内能做出最多的正确答案。5.2 编程题输入输出与边界条件的高频坑第3、4题都有多组输入的影子但很多选手没有意识到OJ对输出格式的严格程度。常见问题有输出答案后多了个空格每行输出末尾没有换行题目要求保留两位小数但用了cout ans而不是printf(%.2f, ans)字符串类型的行前有空白字符没读掉。这里整理一个自查清单笔试提交前按顺序过一遍检查数组长度是否考虑到了n1或更宽的边界检查所有循环变量是否可能出现越界或死循环检查while循环读取多组输入时EOF处理是否正确检查数据计算结果是否可能超出int范围必要时改成long long检查换行符和空格是否与题目要求完全一致检查输出是否需要在末尾加额外的空行检查当输入为空或只有一个元素时程序是否还能正常结束。这些看起来琐碎但对0分和满分的区别起着决定性作用。第3题Top-K如果K大于数组长度有的实现会直接越界第4题Dijkstra如果起点和终点相同有些模板输出0有时候没问题但有的题要求输出-1或者也输出0必须看题面要求。5.3 我踩过的坑一个for循环的边界让我丢了20分说一个真实的遗憾。第6题DP我设计的转移方程完全正确逻辑也在草稿纸上验证过两遍但写循环时把一个写成了导致容量恰好等于某个物品重量的情况没有被处理。本地样例恰好没有覆盖这个边界我提交后只过了两个测试点后面的全挂。后来我在本地加了一行if (capacity weight[i])的测试数据立刻发现问题。这种“只差一个等号”的错误在笔试里最冤。查错思路通常是从中间状态输出开始排查而不是直接看最终答案。比如DP题把每行的dp数组打印出来对比手算的前几行马上就能定位到是转移方程的问题还是初始化的问题。这个经历让我养成了一个习惯无论什么代码写完以后先自造3组最小边界数据和1组最大数据测试。最小边界包括空数组、单元素数组、极端K值最大数据用于验证复杂度和溢出的鲁棒性。在OJ上这相当于“带病自检”比提交后等判题结果再猜效率高得多。5.4 考后复盘把笔试题转化为面试素材笔试结束后很多人的第一反应是“终于考完了”然后就把题目忘干净。但如果你想让这场笔试发挥后续价值一定要在24小时内做一次结构化复盘。记忆是会快速衰减的拖到第二天你可能连题目背景都记不全了。我的复盘方法是建一张表格五列题目描述、核心考点、我的解法、更优解法、错误原因。对于做错的题一定要追到“知识点层面”而不是“题目层面”。例如第1题做错不是“abacaba不会做”而是“对next数组的定义掌握不牢”第6题做错不是“这题没见过”而是“0/1背包的容量和价值维度互换技巧不熟练”。这样做的好处有两个。第一你可以在面试前用这张表快速过一遍自己的薄弱项有的放矢。第二笔试中遇到的真实题目可以转化成项目面试素材。比如第4题Dijkstra如果你能在面试中说出“我当时在处理10万节点20万边的图时用堆优化把复杂度控制在O(E log V)并解决了int溢出问题”这比干巴巴地说“我会Dijkstra”有说服力得多。还有一个隐藏价值很多公司的笔试题目风格是有连续性的。你复盘了第二批笔试如果在后续批次或者来年再次投递你会发现出题方向高度重合。这不是说你能碰到原题而是你熟悉了对方的技术品味和考察重点准备起来会从容很多。最后说点个人感受。算法岗笔试的题目难度一年比一年稳定但筛选逻辑其实很直白——你不需要解出每一道题但你需要让阅卷人看到你在有限时间里的判断力。哪些题先做、哪些题果断放弃、哪些边界条件必须检查这些比“会做所有题”本身更能反映真实的工程素养。希望这份复盘能帮你省下一点时间少踩一点我踩过的坑。