2026/10/17 0:31:21

2020春招后端与算法岗面试全攻略:线上笔试、手撕代码与项目深挖

2020春招后端与算法岗面试全攻略:线上笔试、手撕代码与项目深挖 2020年刚开年那阵子身边准备春招的朋友普遍都有个感受往年学长学姐留下的面经套路突然就失效了。线下宣讲、现场笔试、群面大战这些经典环节被彻底重排大部分流程都搬到了线上一轮接一轮的视频面、电话面加上在线写代码平台五花八门很多人前期拿到笔试邀请时甚至手忙脚乱。我当时同时准备后端开发和算法工程师两个方向前后投了三十多份简历经历过在线笔试系统崩溃、被面试官连环追问到说不出话、也有过一周连挂三家的情况。这篇文章不是标准答案更像是我把自己整理过的高频考点、踩过的坑、复盘出来的方法分享出来给同样在准备校招后端或算法岗位的人做个参考尤其是那些实习经历不多、两个方向都在犹豫的朋友。1. 春招备战的整体布局方向定位与简历打法1.1 我当时的时间线与投递节奏2020年春招其实很早就开始了很多人以为金三银四才投实际很多提前批在2月底就已经挂出来。我的建议是不要等所有岗位都放出来再动先投一批你并不最想去但类型匹配的公司练手把在线笔试、视频面试的流程先跑通。我就把第一周投了大概8家非目标的公司全都是做在线笔试用来熟悉不同平台的操作。春招的节奏可以分为三批这个时间线现在回头看依然有效提前批2月中到3月初流程快部分岗位有直通面试的通道。正式批3月到4月中旬岗位最多但竞争也最密集。补录批4月底到5月很多被鸽的公司重新放岗位也是捡漏的好窗口。我当时踩了一个明显的坑前期花大量时间刷题却没有留出足够时间准备项目和基础知识问答。结果第一场正式批面试时算法题写得还算顺利反而被项目细节和基础八股问得有点被动。后来我才意识到刷题和专业基础这两块每天最好按比例搭配着练而不是一整个月只做一件事。1.2 后端和算法双投时简历如何差异化很多同学跟我情况类似本科或硕士阶段既做了偏工程的项目又做过一些机器学习相关的课题投递时想两个方向都试试。这里最关键的一条经验是不要投两个方向用同一份简历尤其不要用同一段项目经历描述去同时应对两边。我后来把两份简历分开整理本质上是同一段经历但讲法完全不同。比如我当时做过一个推荐类项目简历面向后端岗位突出整个系统的工程架构、接口设计、数据库表结构、缓存方案、接口响应时间优化过程。简历面向算法岗位突出特征选择、模型选型、训练数据构造、评估指标、离线与在线效果对比。这样做的好处是面试官第一眼就能看出你申请的岗位是什么并且顺着你的经历去问他自己熟悉的方向而不是产生你到底想做哪个的困惑。我试过把两段内容都写在一起结果面试官问了我半小时工程问题之后再问模型细节两边都问得不太深入反而显得每个方向都不扎实。顺带提一句简历上的专业技能栏不要只写熟悉Python/C/SQL这种宽泛描述最好标明熟练程度和使用场景。比如Python项目中主用语言熟悉多进程与协程处理高并发任务这个信息量比单纯一个名词高得多。1.3 关于刷题量多少题才够用后端和算法工程师的面试都逃不开手撕代码区别是后端往往更偏基础数据结构和常规思路算法工程师会更频繁出现动态规划、DFS/BFS、以及一些需要数学推导的题。我当时的完成量大约是在线刷题平台积累了三百六十多道题不算多但足够覆盖大部分面试场景。真正重要的是把高频题型做成自己的套路库。比如二叉树的遍历、层次遍历、根据遍历序列建树链表的反转、环检测、合并字符串的滑动窗口、最长子串、回文动态规划的背包、最长递增子序列、编辑距离。这几类做熟了大部分手撕题都能找到母题影子。我很少硬背题解更多的是每道题做完之后在记录里写下它的关键触发词和对应解法套路。另外有一个真实建议不要太早放弃困难题。面试里出现困难题的概率不低但通常不会是纯偏怪题而是一道中等题加了一个边界条件或者合并两个知识点。平时练的时候可以把困难题作为思维拓展而不是额外负担我当时大概每天做一两道困难题理解它的解法思路反而在面试里遇到类似变形时能更快反应。2. 在线笔试与手撕代码关从AC到系统崩盘的意外处理2.1 在线笔试平台的隐藏规则判分逻辑与骗分思路2020年大量笔试都改成了在线方式不同平台之间的体验差异非常大。有些平台支持本地IDE调试后复制粘贴有些平台只能在网页代码框里写甚至还有的不允许跳出页面跳出去自动交卷。这些规则一定要提前去官网帮助文档弄清楚否则可能辛苦写了半天代码最后一键交卷却因为违规被判零分。我经历过两个比较细节的判分特点。第一个是部分通过也会计分绝大多数平台的编程题是按照测试用例通过比例给分的不是非0即1所以如果有题目完全没思路不要空着暴力解法能过一两个用例就能拿一点分有时候一两道题的差距就决定了能不能进面试。第二个是在线IDE的编译环境可能与本地不一致比如本地Python能跑通的代码平台却提示语法错误后来发现是因为平台用的旧版本Python不支持某些新语法。所以不管用哪种语言提交前多看几遍编译报错避免因为语法兼容性白白丢分。还有一点容易忽略的是考试时间分配。笔试通常涵盖选择题和编程题我的习惯是先快速浏览所有编程题把有思路的优先做掉回头再慢慢推难题。选择题反而常常存在语言陷阱比如问你某个算法的平均时间复杂度四个选项里有两个看起来都合理这时候不要恋战先标记等后面有时间再回来看。2.2 高频题型与具体例题复盘我在春招笔试里遇到过不少重复率很高的题这里挑两个有代表性的回顾一下。一类是括号类问题。最常见的是判断括号字符串是否有效进阶版是求最长有效括号的长度。这题的暴力思路是遍历每个起点逐字符判断括号数量是否归零复杂度很高用栈或动态规划才能达到线性时间。当时我在平台写的解法是用栈保存左括号的下标遇到右括号时出栈并计算当前有效长度这个思路在面试里也很容易讲清楚。另一类是矩阵路径问题比如矩阵中的最长递增路径。这题的关键是记忆化搜索避免重复计算。我第一次笔试时直接用DFS裸遍历结果在大矩阵用例上超时后来才意识到增加一个memo数组记录每个位置的最长路径长度可以把指数级降到多项式级。这类题在算法岗的手撕环节尤其常见因为同时考察了搜索思路和复杂度优化意识。其实很多看似复杂的题没有必要死记答案而是把它拆成几个简单的组件先想暴力怎么做再想暴力慢在哪里再看能不能用空间换时间。这个拆解过程本身就是面试官想看的思考路径。2.3 面试中手撕代码的三种玩法进入面试阶段的代码考核比笔试更看重你的思路表达和沟通方式。我遇到的面试官风格大概分成三种对应不同的应对策略。第一种是给一个在线编译器链接允许调试。这种最接近笔试但面试官会全程看着你的操作所以不要闷头写要一边敲一边简单说自己的思路哪怕只是两句话也可以。第二种是共享屏幕让你本地用IDE写。这种通常环境完整可以随时编译调试但要注意代码规范比如函数命名、变量命名、注释这些都会给人留下潜移默化的印象。第三种是在记事本或无代码补全的在线框里直接写。这是压力最大的一个场景因为没有语法高亮和提示容易在细枝末节上写错但面试官更关心的是你的思路框架。这时候不要慌可以优先写出核心结构和关键逻辑忽略部分边界细节写完后主动说明哪些地方是在无补全环境下容易疏忽的。无论哪种方式接到题目后先不要急着写花一两分钟和面试官确认输入输出、数据规模、边界条件然后简述思路得到面试官一句可以之后再动手。这个习惯非常多面试官都吃这一套因为它代表你真的理解了题目而不是一上来就碰运气。2.4 在线面试的意外处理断线、没声音、系统过期线上面试的稳定性问题在2020年格外突出我自己就亲历过一次视频面中途网络中断画面卡在面试官脸上整整一分钟。那次之后我给自己定了一套应急流程提前把手机热点打开放在旁边作为备用网络。约定好断线后的联系方式比如双方通过邮件或某个即时通讯工具先确认状态。面试前试用同一个会议软件调好摄像头和麦克风确定自己的环境没问题。如果写代码平台需要登录授权提前一天确认授权还在有效期否则临时重登可能耽误时间。听起来这些都是小事但面试当场遇到真的会影响心态。我当时断线重连后深吸一口气向面试官简单说了句网络恢复一下我们继续重新把刚才的思路捋了一遍结果后面的问题反而回答得更顺了。从那次起我才意识到线上面试的技能本身也是需要练习的不能只练内容不练形式。3. 后端方向的计算机基础问答高频考点与回答框架3.1 网络与操作系统的高频题从概念到场景追问后端岗位面试计算机网络和操作系统几乎是一必考组合。高频的题目看起来大家都准备过比如TCP三次握手和四次挥手、TIME_WAIT存在的原因、进程与线程的区别、select/poll/epoll的区别。但真正拉开差距的是面试官往下追问的那两三个为什么。比如问TCP为什么需要三次握手简单答法是为了防止历史请求建立失效连接。但如果面试官继续问如果只有两次握手会怎样你就要能具体描述出一种异常场景客户端发送的第一条SYN因为网络延迟很久才到达服务端服务端返回SYNACK客户端收到后认为连接建立开始发送数据但此时这个连接其实是一个废弃连接会造成服务端资源浪费。这种具体到场景的回答方式比单纯背概念更有说服力。操作系统里的进程线程题也有类似的追问习惯比如上下文切换到底切换的是什么很多人会答寄存器、程序计数器这些最好能再补上虚拟内存映射、内核栈等切换时一些缓存也会失效把这个过程描述得更具象。我当时在准备这些内容时反复用结论、机理、例子、扩展的框架来组织答案亲测下来很管用。3.2 数据库、并发与场景设计索引失效怎么答数据库的考察集中在索引、事务、隔离级别、MVCC、锁这几个方向这部分比网络更强调记忆理解结合。面试官特别喜欢问索引失效的场景比如对索引列使用函数、隐式类型转换、最左前缀原则不满足、范围查询后面的列无法用到索引等。我当时被追问过一次为什么对索引列使用函数会导致索引失效这个问题的关键是B树索引是按原始值排序的如果你在比较时对列做了函数运算原来的有序排列就没有意义了数据库只能全表扫描替代索引查找。并发方面线程池参数是一个经典考察点核心线程数、最大线程数、队列容量、拒绝策略这四者的配合逻辑要能讲清楚。有一道比较经典的追问是如果核心线程数是4最大线程数是8队列长度是100在任务数达到多少时会触发拒绝策略这里需要先记住流程任务先进入队列队列满了才去创建新线程线程数达到最大值且队列满时才触发拒绝。这种场景推理题比单纯背诵参数含义更有区分度。系统设计题在后端校招里出现的概率略低于社招但偶尔也会遇到基本是设计一个短链接系统或设计一个缓存层这类。这类题不要求完整落地而是看你的思考框架先估算规模再划分子模块再说存储选型然后说缓存与一致性方案最后提一嘴监控与降级。把这个框架装进脑子里即使碰到没做过的系统也能说出个清晰的大纲。3.3 从背答案到讲原理回答框架的价值后端面试有一个很容易被识破的问题回答问题太像背书。比如HashMap和Hashtable的区别如果只说出线程安全、不允许null、继承不同面试官基本会当场让你再想想还有没有别的区分点。更聪明的答法是把两个东西放到同一个维度下比较。比如先提整体结构数组链表红黑树再说哈希函数与扩容机制再说线程安全层面最后补一个实际使用中的差异比如在已知容量时初始化指定大小可以避免频繁扩容。这样整段回答是立体的而不是并列的知识点。我在准备后期给自己定了一个规则每道高频题都要尝试用3句话向完全不懂的人讲明白它的核心机制如果讲不清说明我自己还没吃透。这个方法推进很慢但效果扎实。可以说后期我在面试里被追问多次能比较稳地接住靠的就是这个练习方式而不是考前突击背题。4. 算法方向的技术面准备从模型八股到公式手推4.1 机器学习高频问答过拟合、评估指标与样本不均衡如果你投的是算法工程师岗位除了编程题机器学习基础知识的比重通常很高。2020年那会儿机器学习岗的高频问题跟现在差别不算太大核心还是集中在几个板块。过拟合与欠拟合是必问题目。面试官不仅会问什么是过拟合更会问你有哪些解决办法常见的思路有增加数据量、数据增强、正则化、Dropout、早停、降低模型复杂度、交叉验证。比较好的答法是先判断当前模型到底是过拟合还是欠拟合再针对性地给方案而不是一口气把所有方法都倒出来。评估指标的选择也是常见考点。比如为什么分类问题在样本不均衡时不能只用准确率更容易被接受的指标是AUC或F1。面试官如果追问AUC为什么不受样本不平衡影响需要能解释到AUC本质上是排序能力的评估衡量的是正样本得分大于负样本得分的概率所以比例变化不会直接影响这个排序关系。这里建议配合正负样本在坐标轴上画一个简单的PR和ROC曲线对比来说明物理解释比死记公式更能加分。样本不均衡的处理方法也很常考过采样、欠采样、合成样本、类别权重、用Focal Loss等。如果你能针对具体业务场景选择一个方案并给出理由面试官印象会深很多。4.2 手推公式怎么做从逻辑回归梯度到SVM对偶算法方向还有一个传统考察项目——手推公式。我当时被要求推过逻辑回归的梯度、softmax的求导、还有SVM的对偶形式。准备这部分没有捷径就是拿纸笔反复推。以逻辑回归为例整个推导链条是模型假设(线性组合 sigmoid) - 极大似然估计 - 取对数 - 负对数作为损失 - 对参数求导 - 得到梯度表达式。面试官真正想看的不只是最后的梯度公式而是你能否解释每一步的动机比如为什么sigmoid函数与伯努利分布假设是匹配的。SVM这边最常问的是拉格朗日对偶为什么要把原问题转化为对偶问题KKT条件用来干什么支持向量为什么重要。如果只是把推导过程背下来一旦被问为什么引入核函数能解决非线性问题就容易被卡住。我当时把整个推导过程当成一个线性代数的应用案例来理解而不是当成机器学习公式来背才发现它本质上是在高维空间做线性划分的一种技巧。4.3 深度学习相关不只是背结构深度学习相关的考察在2020年已经非常多。高频题目包括CNN的卷积、池化、感受野计算BatchNorm在训练和推理阶段的行为差异经典的CNN网络结构演进RNN为什么有梯度消失问题以及现在讨论度很高的注意力机制和Transformer结构。一个我后来复盘觉得很有价值的准备方法每了解一个模型结构都尝试画出它的数据流图明确输入维度、经过每层的输出维度、参数数量怎么变化。面试时如果被问到模型细节能讲清楚数据怎么从一个维度变成另一个维度就已经超过很多只会背网络层名字的人。此外面试官很喜欢在一个项目里顺带考察深度学习知识比如你提到用过BERT他就会追问BERT和GPT在预训练任务上有什么区别、为什么BERT适合做句子对分类。这种结合实际项目的追问单纯靠看面经很难准备周全需要对自己写进简历的每个技术名词做到能讲清原理。5. 项目深挖一场关于为什么的连环追问5.1 项目介绍的STAR准备法把一个项目讲成完整故事项目深挖是面试中最难临时发挥的环节尤其对经历不算丰富的同学。很多人遇到的问题不是在项目里没有做事情而是讲得太散面试官问一句答一句完全掌握不了全局。我当时给自己定了一个模板每个项目都能用1分钟完成STAR表达背景S、任务T、行动A、结果R。用一个项目举例背景为了改善信息流点击率需要构建一个推荐模块。任务在有限的运算资源下把推荐精度提升到业务可用的水平。行动先做数据清洗和特征工程再用一个基线模型跑通流程之后逐步引入更复杂的模型同时设计离线指标和线上对照方案。结果指标在一定周期内提升了10%左右同时接口平均响应时间控制在可接受范围内。这个结构能让面试官快速建立对项目的印象然后他会顺着你的表达去追问细节。但注意结果目标里如果带有具体数字一定要能解释它的计算方法否则面试官追问怎么算的就容易被难住。5.2 高频追问列表提前准备好答案更稳项目介绍完之后面试官基本会围绕下面这几个方向连环追问你为什么选择这个方法/模型别的方案为什么不行这个方案的性能瓶颈在哪里如果数据量扩大十倍或者百倍系统会怎么变化你怎么验证你的方案是有效的有没有排除其他干扰因素样本标签怎么来的噪声样本怎么处理线上和离线指标不一致时你会怎么排查这些问题本质上不是在刁难你而是在测试你是否真的理解项目的每个环节。坦白说很多细节如果当初没有思考到位被问到时候很容易露怯。我当时的准备方式是把简历里可能被追问的每个技术点都当成一道面试题写下自己的回答再找同学进行模拟追问效果很显著。5.3 面试官眼中的加分项量化、反思与边界感在项目深挖中有几种回答方式明显获得过面试官的正向反馈我总结出三点。第一能讲清楚指标定义。比如你说模型效果提升了10%一定要说明是用什么指标衡量的AUC还是F1提升是在哪个验证集上得出的这个指标对你说的业务目标是否真的有代表性。第二能主动讲出为什么不算成功或哪里还有不足。很多同学害怕暴露项目短板但面试官更喜欢看到你对自己工作的客观判断。大胆说这个方案在小样本场景下提升明显但遇到长尾分布时不稳定我觉得主要原因可能是特征覆盖不足然后补充你想到的改进想法这比强行吹一个完美的项目更真实也更专业。第三能区分你做的和你懂的。项目经历里如果涉及团队协作面试官偶尔会问哪些是你独立完成的哪些是和别人合作的。真实回答就行不用把所有功劳揽在自己身上边界感反而让人觉得你在团队中定位清楚。6. HR面与offer选择别在最后关口丢分6.1 HR面常见问题与回答边界很多人以为HR面只是走走过场但实际上HR面挂人的情况并不少见。尤其是进入终面之后HR不仅仅在验证你的技术能力更在评估你的沟通方式、稳定性、以及是否符合团队文化。2020年春招HR面因为转移到线上常问的问题反而更集中在一些偏个人化的话题上。最常见的包括你经历过的最大挫折是什么、你的职业规划是怎样的、为什么选择我们公司、你手头还有其他offer吗。回答这类问题有一个原则真诚但不暴露底牌。比如被问你手头还有其他offer吗不要含糊其辞也不要把所有信息全倒出来。比较稳的说法是有一些流程在推进中但贵司是我比较想去的方向我还在期待最终结果。这样既不失礼貌又保留了自己的谈判空间。6.2 谈薪与offer横向比较别只看包谈薪这块校招生的议价空间确实有限但也不是完全不能谈。我个人经验是如果手上已经有一份报价可以用一个相对客观的语气和HR说明目前收到另一家的总包是XX但补充说明一下我对贵司的技术方向更感兴趣大部分HR会认真考虑这个信息。比较offer时别只盯着总包。我当时列了一个评估清单技术成长空间、业务是否核心、团队技术氛围、加班程度、城市生活成本、以及入职后可能接触的技术栈是否匹配自己长期要深耕的方向。用这套清单去比较两个总包只差1-2万的offer思路会清晰很多也不容易因为短期薪酬浮动做后悔的决定。另外想提醒一句不要只因为这家公司名气大就草率决定。身边有朋友去了名气很大的边缘部门项目成长性一般一年后转型就变得匆忙。反过来一些不太出名的团队反而做出了很有影响力的东西。offer选择这件事本质是挑选未来两三年你将会和什么样的人、做什么样的事这比简历上的一行公司名重要得多。7. 复盘表与心态调整连续被拒之后的处理方式7.1 自己做的一张面试复盘表如何把失败变成养料我在春招中后期做了一件很重要的事给自己做了一张面试复盘表。每场面试结束后当天晚上我会花半小时把这场面试的细节填进去。表格内容大致包括以下几个字段面试轮次与形式技术面第几轮在线写码还是问答为主。题目与追问具体问了什么问题追问到了哪一层。我的表现当时怎么回答的有没有卡壳卡在哪一步。暴露的知识点漏洞是基础概念不清晰还是项目细节没准备到位。改进计划针对漏洞明确下一步去补哪块内容。这张表的作用不只是记录更重要的是让我发现了自己的高频出错模式。比如我发现自己在被连续追问的时候容易急着抢话导致回答变得杂乱于是后来的面试里我刻意训练自己在回答问题前停顿两秒理清结构再开口。这种有针对性的修正比盲目刷更多题更能提高面试表现。7.2 连续被拒之后的心态调整把面试当成练习场春招过程中免不了有连续失败的阶段。我当时有过连挂三家的情况每一家都在面试结束后的第二天收到了拒信那两天确实很低落甚至一度怀疑自己是不是选错了方向。后来我调整了一个心态把面试当成一场信息获取的练习场而不是一场要么成功要么失败的考试。每场面试不管通过与否我都把它当作一次免费的技术交流。抱着这种心态之后我反而在面试里更放得开敢于在没把握的问题上说出自己的推理过程而不是紧张地猜答案。还有一点经验是给自己设置休息日。我当时规定每周至少留一天完全不碰题和面经出门走一走或者看一部电影。人长期处于紧绷状态记忆和思维都会有明显退化。适当抽离不仅不影响复习效率反而有助于面试时保持清醒。最后再分享一个小技巧面试结束后的24小时是你对这场面试记忆最清晰的窗口。不管发挥得如何都尽量当天把复盘表填完不要拖。很多时候面试里差一点想起来的那个知识点恰恰就是你水平线上的最薄弱点把它记录下来并针对性补上下一轮的胜算就会多一分。