弱校本科生算法岗春招实习面经:从手撕代码到机器学习理论全记录

📅 发布时间:2026/8/30 21:36:34
弱校本科生算法岗春招实习面经:从手撕代码到机器学习理论全记录
春招实习这一路我大概把能踩的坑都踩了一遍。写这篇面经的时候我已经拿到了几个算法岗实习的offer回头看看那段从简历石沉大海到面试被问到怀疑人生的日子很多东西确实值得记录下来。标题就很直白弱校本科生算法岗春招实习。这三个词放在一起本身就带着一种不太容易的味道但这篇文章想说的恰恰是这条路虽然难但不是走不通。以下内容全部基于我个人在春招期间的真实面试经历按面试环节和时间线整理每道题都尽量还原当时面试官问的方式再附上我的复盘和后来补课得到的理解希望对背景类似的朋友有点帮助。1. 写在前面弱校本科生到底难在哪以及我是怎么准备的先交代一下背景。我本科学校是双非专业是计算机科学与技术没有名校光环没有顶会论文实验室资源也一般。投算法岗春招实习之前我一度很犹豫因为身边几乎没有人走这条路大家默认算法岗是985硕士的天下。但仔细想了一下算法岗也分很多种有做纯研究发paper的也有做业务落地调模型的后者对工程能力和动手能力的要求其实很高本科学历虽然吃亏但并不是完全没有机会。春招开始前大概三个月我花了大量时间做两件事刷题和整理项目。刷题我主要用的是LeetCode和AcWing按照高频考点去刷一开始没有盲目追求题量而是先保证每个类型的题目都能独立写出最优解。我之前听说过很多人说刷了三百题四百题但我觉得刷题这东西数量只是一方面一遍两遍地重复更重要。我的策略是先把数组、链表、二叉树、堆、栈这些基础数据结构吃透然后上排序、二分、双指针、滑动窗口、DFS、BFS最后再啃动态规划和图论。时间不够的情况下优先保证核心题型足够熟练冷门题型至少知道思路。项目这块我没有实习经历主要靠的是自己做的两个项目一个是基于公开数据集的推荐系统另一个是一个自然语言处理相关的文本分类方案。这两个项目都不算惊艳但好在我把每个细节都摸了一遍数据怎么清洗、特征怎么构造、模型怎么选、评估指标怎么定、踩了什么坑、后来怎么改的。面试官问项目的时候最怕的就是一问三不知所以我把每个项目的每一个环节都写成文档反复过了好几遍。还有一个很重要的准备就是面试复盘。我每面完一场都会把面试官问的问题记下来包括那些我当场没答出来的然后回去翻书、查博客、补知识。这些复盘内容就成了我后面面试的弹药库。说句实在话面经这东西看别人的只是图个心理安慰真正有价值的是你自己在面试现场被问到然后事后搞懂的那些题。2. 算法题面经汇总那些被问到手撕的代码题算法题是算法岗面试里最硬核的一关每个公司都在考而且考得很直接就是让你写代码。我面的公司里有让你在在线编辑器里直接写的也有让共享屏幕在本地IDE里写的还有连写都不写直接口述思路的。下面这些是我遇到的题目里比较典型的一些按考点分类整理。2.1 高频基础题排序、二分、链表与数组操作排序算法几乎是必考。我印象比较深的一次是面试官让我写快速排序写完之后追加了一个问题快排在什么情况下会退化成O(n²)怎么优化。这就是典型的一题两问代码写完还得说原理当时我除了回答“基准值选得不好会退化”之外还补充了随机选基准和三数取中的方案面试官看起来比较满意。还有一道让我手写冒泡排序的题目我当时有点意外因为太基础了。但面试官的后手问题是这个排序稳定吗为什么它和插入排序相比谁更优。所以不要以为考得简单就是放水恰恰是在这些简单题上能拉开差距。回答的时候一定要把“为什么”讲清楚而不是背出代码了事。二分查找也考过几次考法比较灵活。一次是让我在一个有序数组中找目标值的第一个和最后一个位置这就是LeetCode 34。另一次是让我实现一个求平方根的函数要求精确到小数后若干位这个是二分答案的经典应用我用了浮点数二分的写法然后用左右边界逼近。注意浮点数二分不能直接比较等于要用精度范围去判断这个细节面试官可能会有追问。链表相关的题目里我遇到的是反转链表和判断链表是否有环。反转链表我写了迭代版面试官又问能不能用递归写这个基本功得会两种写法都要熟练。判断链表是否有环我用的是快慢指针写完后面试官追加了一个问题如果链表很长快慢指针会不会有性能问题。这个就涉及到时间和空间复杂度分析了答案是O(n)时间和O(1)空间性能没有问题。数组操作类的题目我遇到过合并两个有序数组、移动零、最大子数组和。这几道都属于“看起来简单但写起来要稳”的题考察的是边界条件处理能力。比如合并两个有序数组我记得题目要求从后往前填充这样可以避免覆盖原数组元素这个思路如果之前没见过现场想可能要卡一会。2.2 字符串专题KMP、回文与模拟题字符串是算法岗面试的座上宾尤其是KMP算法几乎每一轮技术面都有可能被问到。我面试的时候确实被要求手写KMP的next数组。当时面试官给的模式串是类似abacaba这样的形式要求写出next数组的求解过程。这里有个小坑不同教材里next数组的定义不完全一样有的从0开始有的从-1开始有的next[i]表示最长公共前后缀长度有的表示失配后跳转的位置。我当时先和面试官确认了一下定义然后按照next[i]表示“失配后模式串回退到的位置”这个口径来写这样写出来就是-1、0、0、1、0、1、2这样的序列从0下标开始next[0] -1。KMP的优化也值得注意。传统next数组在模式串出现连续重复字符时会造成多余比较这时可以用nextval优化。我在一次面试中提到了这个点面试官明显来了兴趣追问了具体怎么优化以及什么时候该用nextval。我的回答是若p[i] p[next[i]]那么失配后跳转的位置还要继续往前跳所以把next[i]更新为next[next[i]]这样避免了重复匹配同一个字符。字符串里我还遇到过一个回文串判断的题目要求判断一个字符串能否通过删除最多一个字符变成回文串。经典的贪心思路左右指针遇到不相等时尝试删左边或删右边递归判断即可。另外还有一道模拟类的字符串题要求实现一个简单的规则解析器类似把a2[b3[c]]展开成abcccbccc这种形式。这类题看着陌生其实就是用栈模拟展开过程当时我把数字和字符分开压栈遇到]就弹栈展开有点绕但能写通。2.3 数据结构与二叉树遍历、路径与最近公共祖先二叉树算是算法岗面试里出现频率比较高的数据结构了。前序、中序、后序遍历当然要能手写而且还可能问非递归版本。我遇到一次面试官让我同时用递归和栈模拟两种方法写中序遍历然后分析两者思路上的差异。递归版本的顺序是“左-根-右”非递归版本需要用栈来模拟系统栈的行为先把左子树一路压栈弹栈访问根节点后再转向右子树这个思考过程其实比背代码重要得多。二叉树层级遍历也是高频题我用队列实现每一轮记录当前层的节点数然后一次性处理完整个队列这样就能按层输出。面试官追加的问题是如果要求从下往上、从右到左输出每一层怎么办。这个本质就是把结果反转或者调整遍历顺序思路不难关键是能不能快速反应过来。二叉树的最近公共祖先LCA我遇到过一次题目比较经典递归判断左右子树是否包含目标节点。如果是二叉搜索树的LCA就可以利用左小右大的性质直接迭代判断。我那次遇到的是普通二叉树所以写了递归。面试官追问了时空复杂度以及如果这棵树会频繁查询LCA应该怎么预处理。我当时想到了用倍增法维护节点的祖先信息但说了个大概现场没完全说好事后补课才真正弄明白倍增法的细节这个是典型的“听过但没吃透”的教训。路径类题目我还遇到过一个求二叉树中所有根到叶子路径上节点值之和为某个目标值的路径。就是DFS加回溯维护当前路径节点列表到叶子节点时判断路径和是否等于目标值。这个题比较常规但考察的是代码的严谨性比如什么时候把结果加入答案、什么时候回溯。2.4 图论与搜索DFS、BFS、拓扑排序与最短路图论的题目在实习面试里出现的频率不如前面那些高但一旦出现就挺考验人。我遇到过一个求岛屿数量的题目就是二维网格里1表示陆地0表示水问有几个连通的陆地板块。这题本质是连通块计数用DFS或者BFS都能做关键是访问标记的处理别重复遍历也别漏遍历。我当时写的是DFS每发现一个陆地就把它所属的整个连通块标记为已访问然后计数加一。面试官追问了空间复杂度如果网格特别大递归会不会栈溢出这个就得注意DFS的递归深度跟连通块大小有关极端情况下可能爆栈这时候可以改成显式栈或者BFS。拓扑排序也考过一次场景是课程表先修关系判断能不能修完所有课程。这就是判断有向图是否存在环的问题用Kahn算法维护入度为0的节点队列每弹出队列就对邻接节点的入度减1如果最后处理的节点数不等于总节点数就说明有环。这个算法思路不算难但写起来要细心邻接表要建对入度数组要更新对。最短路径我遇到的是Dijkstra算法。面试官没有直接让我写完整代码而是让我讲思路然后针对某个细节追问如果边权有负数Dijkstra还能用吗为什么应该改用哪个算法。这就是在考底层原理答案是Dijkstra基于贪心每轮确定一个最短距离的节点有负权边的时候贪心失效需要用Bellman-Ford或SPFA。这题我答上来了因为我之前专门把最短路径类算法的原理对比过一遍。二分图相关的算法虽然面试时没有被直接要求手写但我自己准备过匈牙利算法和HK算法后来在一次面试的闲聊环节被问到“你了解哪些匹配算法”的时候派上了用场。算法岗面试除了写题也会考察知识广度知道一些经典算法的名字和适用场景偶尔会有意外收获。2.5 动态规划背包、区间DP与状态设计动态规划是我面试里遇到的最多的类型之一也是我花时间最多的部分。最长递增子序列考过我用的是O(n²)的DP思路面试官追问能不能优化到O(n log n)这就涉及到耐心排序的贪心加二分的做法维护一个tails数组每个元素表示当前长度的递增子序列的最小末尾值然后用二分找到插入位置。背包问题我遇到过一次是一个“子集和能否达到目标值”的变体本质是0-1背包用一维滚动数组优化空间。当时面试官问了一个从没遇到过的问题如果每个物品可以用无限次状态转移方程应该怎么改。这就是从0-1背包变完全背包遍历顺序从倒序变成正序我当时解释了一下为什么顺序变化会导致同一个物品被多次取用面试官点头了。还有一个区间DP的题目让我印象深刻是经典的“戳气球”问题。这个题我当时没写出来只想到了递归的思路但状态定义一开始想错了。面试结束后我花了一天时间专门把区间DP的题目刷了一遍才算真正理解了为什么这类题要先枚举区间长度再枚举左端点再枚举分割点。这个经历让我明白了面试题答不上来不代表这件事就结束了把它学会后面的面试才有意义。2.6 贪心、排序检索与搜索策略题贪心算法的题目我遇到过一个会议室安排问题就是给定若干时间段问最多能安排多少个不重叠的会议。经典解法是按结束时间排序然后贪心地选择结束时间最早且不与之前冲突的会议。这题的证明思路是“替换法”贪心选择的方案可以通过交换操作替换成某个最优解而不改变结果理解了这个证明思路同类题目都能串起来。搜索策略里面试官问过“有哪些常见的剪枝策略”。我结合自己刷搜索题的经验回答了几类可行性剪枝、最优性剪枝、重复状态排除、启发式排序以及位运算状态压缩。面试官接着问我有没有用过模拟退火算法或者粒子群算法。这个就有点超纲了我只是了解过原理没有实践过。我如实说了然后简单讲了一下模拟退火的核心思想就是在搜索过程中以一定概率接受劣解来跳出局部最优温度逐渐下降接受概率逐渐减小。面试官也没有为难我说明诚实交代自己不会并且能把知道的一部分讲出来比硬编一个答案要好。2.7 手撕代码的小技巧与注意事项手撕代码环节除了题目本身有几个细节非常影响面试观感。首先写代码之前先和面试官确认一下输入输出格式和边界条件比如数组长度、值的范围、是否为空这些确认过程能让面试官看到你的工程意识。其次动手写代码的时候变量命名尽量有意义不要全是i、j、k偶尔用用left、right、index这类的单词代码会干净很多。第三写完之后主动说一遍时间复杂度和空间复杂度如果还有优化空间自己提出来比面试官提醒要好得多。最后写完代码不要急着说“写完了”先自己顺着代码逻辑跑一个简单例子能当场发现大部分低级错误。3. 机器学习与深度学习理论面经八股文的正确打开方式算法岗面试里的理论问题和学校里考名词解释完全不一样。面试官会更喜欢用“场景追问”的方式考察你对原理的理解深度。我整理了我在面试中被问到的一些代表性的问题按主题分类写在这里。3.1 经典机器学习回归、树模型与SVM让我比较意外的是实习面试里传统机器学习的内容反复出现尤其是决策树和集成学习。面试官问过XGBoost和GBDT的区别是什么XGBoost做了哪些优化。我当时的回答是XGBoost在GBDT的基础上做了二阶泰勒展开用了正则化项来控制模型复杂度支持列采样并且在特征分裂点的寻找上做了并行化处理。面试官接着问为什么二阶信息比一阶信息更好。我的理解是二阶梯度蕴含了一阶梯度变化趋势的信息对目标函数的近似更精确因此每一步的提升方向更准。SVM也被问到过几次。经典问题是SVM的损失函数是什么为什么要用合页损失以及软间隔中的C参数有什么作用。合页损失在置信度大于1且分类正确时损失为0而小于1时会有线性惩罚这样既保证了分类正确又保证了足够大的分类边界。C参数控制着对误分类样本的惩罚力度C越大模型越不愿意容忍错误可能过拟合C越小模型泛化能力可能更好但也可能欠拟合。这些回答如果离开公式直接讲直觉会让面试官觉得你只背了结论最好还是在脑子里形成那个几何图像再回答。逻辑回归是我被问到最多的问题之一。面试官问过逻辑回归的损失函数为什么用交叉熵而不是均方误差。这个问题要从优化角度回答交叉熵损失关于参数的梯度里含有预测误差项而均方误差的梯度里还含有sigmoid导数的因子当预测值接近0或1的时候梯度会变得非常小导致收敛速度极慢。聚类算法里K-Means被问过初始点怎么选K值怎么确定。我当时提到了K-Means和肘部法则。面试官还追问了K-Means对异常值敏感为什么我当时回答是因为平方误差里异常点会产生大距离误差从而拉偏簇中心。这块后来我也复习了DBSCAN这类基于密度的算法因为面试官后面问了一句“如果数据分布不是球形怎么办”从K-Means切换到DBSCAN来回答就很自然。3.2 深度学习基础CNN、激活函数、梯度消失与网络结构深度学习的内容也是重头戏。CNN的问题从基础到进阶都有常见的有卷积的感受野怎么计算、参数共享有什么用、为什么堆叠小卷积核能替代大卷积核。最后一问我当时有点卡壳后来想明白了两个3x3卷积堆叠的有效感受野是5x5参数数量却比单个5x5卷积少并且中间多了一层非线性变换表达能力更强这也是VGGNet设计的核心思想之一。激活函数的问题也几乎每场必考。面试官会问ReLU和sigmoid相比有什么优势ReLU有哪些缺点怎么缓解。ReLU的优势是计算简单、正区间梯度恒为1、能减缓梯度消失但缺点是负区间输出恒为0可能导致某些神经元永远不激活也就是Dead ReLU问题缓解方案包括使用Leaky ReLU、PReLU或者像ELU这样的替代版本。梯度消失和梯度爆炸的原理我也被问到过。回答这类问题要先从反向传播的链式法则出发说明梯度是连续相乘的结果如果每层乘子都小于1多层相乘后梯度会指数级变小如果都大于1则会指数级增长。缓解手段包括合理的权重初始化、使用Batch Normalization、调整激活函数、使用残差连接以及梯度裁剪。残差连接在如今的大模型里也无处不在它让梯度可以走一条“高速公路”直接传回浅层解决了深层网络难以训练的问题。在大模型知识点上我被问过Self-Attention的原理和Transformer的结构。自我感觉这块准备得相对充分我把Q、K、V三个矩阵的来源缩放点积注意力的公式以及为什么除以根号d_k避免点积结果过大进入softmax饱和区都讲了一遍。面试官追问了位置编码的作用和为什么Transformer需要位置编码这是因为Attention本身不包含顺序信息词序变化后输出会完全一样所以必须靠位置编码把位置信息注入输入序列。在面向大模型应用的团队里还会追问一些和推理、部署相关的问题这块我实践不多主要靠看资料了解过一些。3.3 模型评估、过拟合与样本不平衡问题模型评估这一块我被问过精确率、召回率、F1、AUC的含义和适用场景。尤其在正负样本极不平衡的情况下准确率会严重失真这时候更适合用AUC或者PR曲线来评估。面试官追问AUC为什么对样本不平衡不敏感。AUC只依赖排序结果不依赖预测值绝对值所以正负样本比例改变时如果模型对样本的排序基本不变AUC的变化就不会太大这和准确率判定的方式是完全不同的。过拟合的识别和解决也是标准问题。我通常会分几个层次回答数据层面可以扩充数据、做数据增强模型层面可以降低模型复杂度、加正则化、做Dropout训练层面可以用早停法、交叉验证、简化特征集。面试官如果追问为什么Dropout能防止过拟合可以从集成学习的角度回答每个batch训练的是不同的子网络最终是无数子网络的集成效果所以泛化能力强。样本不平衡问题面试官问过如果正样本只占1%你怎么训练分类模型。我回答了几个方向一是重采样做过采样或者欠采样二是修改损失函数比如给少数类样本分配更高的权重或者用Focal Loss三是用异常检测的思路处理当成单类分类问题四是评估时改用PR曲线和AUC这些对不平衡不敏感的指标。这个问题的回答尽量体现出你有实际处理过而不是只会背名词。3.4 大模型与前沿方向Attention、Transformer、蒸馏与量化算法岗实习面试已经绕不开大模型了尤其是一些做AI平台或者应用型团队会直接问你对大模型训练和推理的理解。我面试中遇到的一个有代表性的问题是训练一个LLM大概包括哪些阶段以及每个阶段在干什么。经典的答案是预训练、监督微调SFT、基于人类反馈的强化学习RLHF或DPO、推理部署这几个阶段。虽然是八股但每个阶段后面都能展开很多细节面试官如果感兴趣会一直往下追问。还有一次被问到知识蒸馏的原理。我的回答是用一个大模型或教师模型去指导一个小模型或学生模型让学生模型拟合教师模型的输出分布而非硬标签这样能学到教师模型在类别间模糊关系上的软信息使得小模型在保持推理速度的同时逼近大模型的效果。面试官追问了蒸馏的温度参数怎么设置这要从softmax的软化效果来回答温度越高输出分布越平滑软化程度越高携带的相对关系信息也越丰富。参数量评估、模型量化和推理加速这些内容也有被问到。量化这块我简单回答过把FP16或者FP32的权重用INT8表示减少显存占用加快推理速度但同时可能会掉点需要用校准数据做量化感知训练或训练后量化。我对这个方向了解不深面试时表达得比较保守也主动说了自己目前还在学习阶段面试官没有继续深挖。4. 项目经历面试细节少讲模型多讲思考和取舍项目环节是很多简历上没有实习经历的本科生的救命稻草。但也正是这一环最容易暴露问题。我的经验是项目讲解的套路其实是可以设计的而且一定要从“解决什么问题”出发而不是从“我用了哪些模型”出发。4.1 怎么讲项目才能不露怯我自己的项目讲法分成四步背景、问题、方案、结果。背景是说这个项目解决什么场景下的什么问题比如推荐系统是给用户推荐可能感兴趣的物品文本分类是把客服消息自动分成几个大类。问题是指在这个场景下真正棘手的是什么比如数据稀疏、类别不均衡、冷启动怎么解决。方案部分要讲清楚你用了什么方法以及为什么选这个方法这里一定要解释“为什么”这是面试官最看重的部分可以说数据量小所以选了轻量模型或者线上有延迟要求所以要控制特征数量和模型复杂度。结果部分要给出可量化的指标比如准确率提升了多少响应时间降到多少或者和哪些baseline比较过。我当时讲推荐系统项目的时候面试官追问的问题是协同过滤和矩阵分解的区别是什么你的方案里为什么没直接用深度学习模型。这两个问题恰好都是我的思考盲区之前我更多是照着一篇开源方案复现没有仔细推敲过背后的取舍。后来我补了课协同过滤直接使用用户物品交互矩阵计算相似度矩阵分解则是把交互矩阵分解成用户和物品的低维隐向量利用隐向量内积来预测泛化性更强冷启动问题依然存在但可以通过内容特征辅助缓解。至于为什么不用深度学习模型要从数据量和可解释性两个角度回答数据规模不足时复杂模型容易过拟合而且工业界很多场景对可解释性有强需求。4.2 面试官最爱追问的几个“坑”项目环节最容易被追问的有几类问题数据从哪里来、数据量多大、特征怎么构造、模型结构是什么、超参怎么调的、评估指标为什么选这个、有没有线下线上不一致的问题。这些问题其实都是考察你是不是真的做过项目而不是背了个demo。其中“特征怎么构造”是最容易被问到的。我的经验是要讲清楚特征的类型和它对应的业务含义比如用户历史行为序列特征、时间衰减特征、交叉特征。如果讲师说“我用了一个embedding”面试官很可能追问embedding是怎么训练出来的、维度怎么确定的、冷启动怎么解决。我当时被问到“embedding维度怎么确定”时确实楞了一下因为我只是照搬了论文里的64维没有想过去验证。后来我补了一课理解到embedding维度本质上是一个超参和词表大小、样本量、任务复杂度都有关可以先从较小的维度开始通过验证集效果来调整不必盲目追求大维度。“有没有做过A/B测试”也是高频问题。如果项目只是离线实验就得坦诚说明离线评估和线上真实效果的差异同时可以提一下如果上线会怎么设计实验包括流量划分、实验周期、显著性检验这些。这个问题我没法造假就老实说没有上线条件但给出了一个实验方案面试官也表示认可。4.3 弱校本科生没有实习经历要怎么包装项目包装这个词听起来有点贬义但其实不是让你造假而是把已有的经历用更好的方式呈现出来。如果没有实习经历就尽量自己做一两个完整项目项目不一定要多高级关键是闭环数据获取、数据清洗、特征工程、模型训练、评估、分析思考全套走完。哪怕用的都是公开数据集也能证明你有独立做事情的能力。在简历上项目部分不需要写太多废话突出你做的事情和量化结果就行。我见过很多简历写“负责xx系统的开发”没有结果也没有细节这种描述在筛选阶段几乎等于没有。好的写法是“基于xx数据集设计xx特征实现xx模型将准确率从88%提升到92%并通过xx方法解决了类别不均衡问题”一眼看过去就有画面感。面试的时候还可以主动把项目往职位方向上靠。比如面的是搜索推荐方向的算法岗就多讲推荐系统项目里的排序、召回、用户行为建模细节。面的是大模型应用方向就多讲文本处理、Prompt设计、模型微调相关的内容。方向匹配度在面试里是隐形的加分项。5. 面试流程复盘从一面到HR面每轮在考什么春招实习的流程大体都差不多简历筛选、技术一面、技术二面、HR面有些公司还会有笔试和加面。我这里按我经历的流程环节把每一轮的特点和考察重点说一下大家可以根据这个框架来调整自己的准备重心。5.1 技术一面基础与项目为主算法题为辅技术一面通常是未来和你同团队的工程师或者技术骨干来面考察的重点是基础能力和项目真实性。我当时的一面绝大多数是从两三个基础题开始的比如问讲一下HashMap的实现原理、TCP三次握手为什么是三次、进程和线程的区别。这些是计算机基础算法岗也躲不掉所以复习的时候别只盯着算法和机器学习计算机网络、操作系统、数据库的基础也是要过一遍的。一面里项目环节占的比重比较大面试官会非常仔细地追问项目里的细节力求确认这个东西确实是你自己做的。除了项目一面还喜欢问一道中等难度的算法题或者机器学习基础题。我遇到的一道题是实现一个LRU缓存这是经典题目用哈希表加双向链表实现面试官还追问了为什么用双向链表而不是数组。另一个我印象深刻的题是给我一个场景让我设计一个推荐策略这已经是偏方案设计的题目了需要从召回、粗排、精排、重排的链路里选一部分来讲。5.2 技术二面方案设计、发散思维与底层原理二面一般是团队负责人或者更资深的人来面侧重点会从“会不会”转向“能不能做事情”。二面的问题更开放比如“如果给你一个大规模文本数据集你会怎么构建一个分类系统”“对于新上线的特征你怎么评估它有没有效果”。这类问题没有标准答案考察的是解决问题的思路。我当时遇到的一个问题是如果推荐系统里物品发生冷启动除了基于内容的方法还能怎么做。我回答了利用用户行为序列构造伪交互、利用图神经网络做热启动传播、以及用探索策略把新物品曝光给部分用户拿到反馈后再介入。面试官没有说这个答案“对”或“错”反而顺着我的思路继续聊了下去这让我感觉到二面更像是在看你适不适合在这个团队工作。二面还喜欢问底层原理。比如问过Transformer里的Layer Normalization为什么比Batch Normalization更常用尤其是序列长度经常变化的时候。回答时要讲清楚BN在batch维度上统计均值和方差序列变长变短或者batch较小时统计不稳定LN则在单样本内部做归一化和序列长度无关所以更稳定。这个答对了之后面试官明显对我深入原理的态度比较认可。5.3 HR面谈薪、意愿与稳定性HR面虽然不像技术面那么硬核但翻车概率也不低。HR面主要考察的是求职意愿、沟通能力、稳定性以及你对公司和团队是否有基本了解。有一个问题几乎必问你还投了哪些公司目前进展怎么样。这个问题回答要有策略既不能只说“只投了你们一家”显得没有竞争力也不能高调地把自己说成offer收割机显得随时会跑路。比较稳妥的说法是“还有两三家在进行中但贵司是我很倾向的方向”然后再具体说为什么倾向。另一个HR常问的问题是“你的职业规划是什么”。这个问题我一开始回答得比较大而空被HR继续追问“具体到两年内你希望达到什么水平”之后才意识到人家问的不是宏大理想而是你对自己的定位有没有想清楚。后来我的回答变成了两年内先把算法的落地流程走通熟悉特征工程、模型训练、上线部署、评估迭代的整个闭环能独立负责一个子方向的迭代优化。这样听起来就更具体、更可信。HR面还会问一些压力测试问题比如“你觉得你最大的缺点是什么”“如果导师布置的任务很重你怎么平衡”。这类问题建议提前准备几个合适的答案核心是真实而不致命并且要给出改进的行动方向不要让面试官觉得你止步于自我批评。5.4 笔试与在线测评准备要点春招笔试有相当一部分是在线编程题模式通常是在牛客网或者公司自己的平台。我的经验是在线笔试比面试手撕代码更考验熟练度因为时间是连续的题目数量多你不能在一道题上磨太久。笔试前最好提前熟悉平台的操作方式比如输入输出的读取方式、有没有代码自动补全、能不能编译调试这些看起来不起眼的细节在考场上能省下很多时间。笔试题目里贪心、二分、动态规划、图论、字符串这几种类型出现频率很高。我的做题策略是先扫一遍所有题目的难度把自己最有把握的题先做完拿到保底分再回头啃难题。不要在一道题上花超过20分钟做不出来先跳过把能拿的分全部拿到才是笔试的核心目标。有些公司笔试里还会有选择题考察机器学习基础、操作系统、网络等基础知识这部分需要平时积累短时间突击效果有限。6. 常见问题与复盘技巧我在春招里踩过的坑最后这部分我整理一些自己在春招过程中踩过的坑和总结出来的经验不一定是面试题本身但都很关键希望你们不用再走一遍。6.1 简历投递策略海投还是精准投我的经历是第一波投递特别盲目看到算法岗就投结果很多简历石沉大海。后来复盘才发现我没有把简历里的关键词和岗位要求对齐。比如有些岗位明确要求熟悉推荐系统我就应该把推荐系统项目放在前面并且突出相关的技术点。所有投递的岗位都共用一份简历这其实是个误区至少应该准备几份不同侧重点的版本针对不同的岗位方向做调整。投递渠道方面除了常规的招聘网站和公司官网找内推比海投效率高不少。内推可以让简历更快被看到也让你有机会提前了解团队在做的事情。我第一轮没有找内推吃了很多闭门羹后来通过学长和论坛找到了一些内推码和微信渠道面试机会明显变多了。如果你不认识任何内推渠道也可以直接去开源社区里找一些公司的员工分享的技术文章评论区往往能找到联系方式。6.2 面试时间安排不要在同一周堆太多的面试我开始面试的时候犯了一个错误就是把自己能约的所有面试都挤在一周内结果前几场因为紧张表现不佳面完之后又没时间复盘后几场还在犯同样的错误。我的建议是如果面试时间可以自己约尽量隔开一到两天每次面试完留出足够的复盘时间。复盘不要只记录题目要把“我哪里答得不好”“面试官为什么追问这个”“如果再来一次我会怎么回答”都写下来这些才是真正能让你成长的东西。有一些面试会和笔试冲突需要做好优先级选择。我当时的原则是已经进展到面试流程的公司优先笔试时间可以尝试申请调整如果实在冲突就把精力放在进度更接近拿offer的那个流程上。毕竟春招窗口有限把时间花在最接近成功的地方收益才最大。6.3 心态管理被挂是常态复盘才是关键算法岗的面试尤其是弱校本背景被挂是大概率事件。我统计了一下自己春招期间投了四五十份简历进面试的可能只有十分之一面试通过率也不高。这里面的原因很多有背景筛选的因素也有自己准备不足的因素但最忌讳的就是因为被挂就自我否定。我分享一个对我很有帮助的做法把每场面试都当成一次免费的一对一辅导。面试官愿意花半小时到一个小时来和我聊天指出我知识体系里的漏洞这其实是一种很高效的学习方式。被挂了之后我会重点复盘那些答不上来的问题把它们彻底搞懂争取下一场面试遇到同类问题能回答得更完整。抱着这种心态我后来的面试状态反而越来越松弛通过率也慢慢上来了。6.4 经典面试题速查表为了让大家方便自测我把春招里高频出现的一些问题做成了表格形式大家可以拿来自查看看哪些能流畅地答出来哪些还需要补课。不要只背答案试着说出背后的“为什么”。分类高频问题考察点基础算法快排原理、退化情况和优化方法复杂度分析和实际编码能力基础算法KMP的next数组怎么写如何优化字符串匹配原理边界条件处理数据结构LRU缓存怎么实现哈希表双向链表的设计能力数据结构二叉树最近公共祖先的几种解法递归与倍增思想动态规划最长递增子序列的两类解法状态设计与优化意识机器学习XGBoost相对GBDT的改进二阶梯度、正则化、并行化理解机器学习逻辑回归为什么用交叉熵损失梯度特性与优化原理深度学习ReLU的优缺点及缓解方案激活函数对训练过程的影响深度学习Transformer为什么需要位置编码Self-Attention的结构性缺陷项目特征是怎么构造的为什么这么构造业务理解与特征工程能力项目为什么不用更复杂的模型场景约束与方案权衡意识HR面还投了哪些公司进度如何意愿和稳定性评估6.5 复盘笔记怎么记才有价值最后分享一个我觉得很重要的习惯就是复盘笔记一定要按照“问题、回答、改进”三个维度去记而不是简单地记录题目内容。我在春招期间的复盘笔记格式大致是这样的问题是什么我当时是怎么回答的面试官的反馈是什么我后来查资料得到的标准答案或更好的答法是什么。把这三个维度填清楚一篇笔记才有复用的价值。我是用Markdown文档来维护这份复习笔记的按公司和面试时间分了目录每周会在面试结束后的晚上统一整理不会拖到第二天。说实话这些笔记到最后面试结束也没有全部复习完但整理笔记本身的过程就是一次深度复习。写到这里的很多东西比如KMP的nextval优化、Dijkstra为什么不能处理负权、LN和BN的适用场景我都是在复盘过程中才真正搞明白的。如果有人问我要一份面经我觉得分享复盘笔记比分享面试题目列表更有用因为面试题目是死的但复盘思路是可以复用的。最后说一点体会。弱校本科生找算法岗实习难吗难。但回头看这个过程中真正让我成长的并不是拿到了哪个offer而是自己把一个一个知识盲区补齐、把一场一场面试打下来的过程。如果你也在走这条路希望这篇文章能帮你少走一点弯路也希望你能在春招里等到适合自己的那个机会。