春招踩点回来趁着记忆还热乎把联想后端开发岗笔试的情况完整复盘一遍。这场笔试在2024年春招里属于比较有代表性的题量中等偏上难度分布广既考基础功底也考临场代码手感对后续面试的影响权重也大。我前前后后经历了技术笔试、综合素质测评和一轮技术复面这一篇重点说笔试环节把题型结构、高频考点、算法解题思路和备考策略拆开讲给准备后端方向的同学一个可直接对照的参考。1. 笔试整体情况与题型分布1.1 考试形式与平台体验联想春招后端岗的笔试通常安排在简历初筛通过之后系统会邮件通知考试时间段一般给一个固定窗口比如晚上19:00-21:00进去后倒计时开考。我这次用的是牛客网的系统部分批次会切换到赛码网两家平台在代码编辑器体验上有些差异但核心逻辑一致选择题每题单独计时或整卷计时编程题在线编译提交。整套卷子在90分钟左右题量分布大约是单选15道、多选5道、编程题2道部分批次会夹杂1道问答题。从题型配比能看出来联想后端笔试并不是纯刷题模式选择题部分的考查内容特别贴近实际开发场景不像某些互联网大厂专挑冷门八股这点值得注意。1.2 题目难度分布与整体节奏结合我考场上的实际感受选择题难度呈金字塔型约六成属于基础题认真复习过计网、操作系统、数据库的同学都能答三成属于中档题需要结合场景分析比如给你一段SQL问执行顺序或者给一段并发代码问输出结果剩下约一成是偏怪题涉及底层原理或边界情况只能靠积累和推理。编程题部分两道题的难度差得比较明显第一道大约是LeetCode中等偏下模拟类或简单DP属于送分题第二道明显上强度我当时遇到的是带约束的图论题目需要优化到一定复杂度才能全过。这部分我会在第3章详细展开。注意联想笔试的多选题是少选得部分分还是选错得零分要提前看清题目说明。我那次是“选多、选少都不得分”非常严格所以没把握的选项宁可少选不多选。2. 后端笔试核心科目考点拆解2.1 计算机基础操作系统与网络在整套选择题里计算机基础大约占到35%-40%是所有科目里权重最高的。操作系统重点集中在进程与线程、死锁条件、内存管理、文件系统这几个方向。有一道印象很深的题目给出一段多线程代码问某个共享变量的最终值考察的就是volatile和synchronized对内存可见性和原子性的影响。这种题不能只背定义得明白每个关键字到底锁的是什么。计算机网络考得也比较细TCP三次握手和四次挥手是必考但不止于追过程还会追问状态迁移主动关闭方收到FIN后进入什么状态、TIMEWAIT存在的意义是什么、如果服务端出现大量CLOSE_WAIT连接该怎么排查这些问题在选择题和问答题里都有可能变体出现。HTTP和HTTPS的握手流程差异、请求头字段含义、状态码语义也是高频区。2.2 数据库与MySQL高频题数据库是后端笔试的重头戏联想这场大概占25%。索引部分考得最深入聚簇索引和非聚簇索引的区别、联合索引最左前缀原则、什么时候索引会失效这些基本是必考题。有一道题目是给了表结构和几条查询语句问哪些能用到索引里面故意设置了一些隐式类型转换、对索引列做函数计算、用LIKE %xxx 模式匹配的陷阱选项。SQL语法方面重点考察多表关联、子查询、GROUP BY的聚合逻辑以及HAVING和WHERE的执行顺序区别。事务这块ACID四个特性要能结合具体场景解读比如脏读、不可重复读、幻读分别对应哪个隔离级别。锁机制也会考行锁和表锁的使用场景乐观锁和悲观锁怎么实现这些内容在面试中还会继续追问笔试阶段能掌握到原理层面就够了。2.3 Java基础与JVM必刷点如果明确后端用的是Java那Java语言本身的知识点就是另一块大头。集合框架必考HashMap在JDK 7和JDK 8之间的底层实现差异、红黑树引入的阈值条件、扩容机制和为什么多线程环境下会出现CPU飙升这些都是经典围绕它们可以出十几种变体。JVM内存区域划分、垃圾回收算法、常用的垃圾收集器及适用场景出题概率也很高。有一题我印象比较深问的是可达性分析中哪些对象可以作为GC Roots选项里有活跃的线程、局部变量表引用的对象、方法区中的静态变量、被synchronized锁定的对象等这题如果只看博客不深入源码很容易混淆。2.4 与其他后端岗位笔试的横向对比和互联网大厂后端笔试对比联想笔试的一个明显特点是不怎么出“脑筋急转弯型”的智力题题目整体更加工程化很多题目都带有场景包装。比如不会直接问“Java的类加载机制是什么”而是给一段代码问你某个类第一次被实例化时父类和子类的静态块、实例块的打印顺序。和大厂动辄三到四道hard级别算法题不同联想笔试的算法强度相对温和但选择题的覆盖面更广。如果你同时准备阿里、腾讯等公司的笔试建议花更多时间在算法刷题上如果主攻制造业、硬件大厂的技术岗这些公司的笔试风格和联想会更接近计算机基础的分寸要拿捏好。总体来看笔试题量和难度都在可接受范围关键看基础扎不扎实。3. 编程题实战与解题思路复盘3.1 第一道编程题模拟与简单状态处理我这次遇到的第一道题大意是给定一个日志记录列表每条记录包含时间戳、操作类型和用户ID要求统计出每个用户在某个时间段的活跃天数。乍一看像MySQL分组聚合但题目要求用编程实现核心考点是哈希表和区间合并。我的解法思路是先用HashMap存储用户ID到时间戳集合的映射然后对每个用户的时间戳排序去重最后遍历统计连续的时间范围。这道题数据结构的选择很重要如果直接用两层循环暴力求解数据量一大必超时需要做时间戳去重后再判断连续性。题目整体不复杂但要在有限时间内写对边界条件。心得笔试编程题第一题通常不会太难但特别容易在边界条件翻车。我当时就漏掉了同一个用户同一天多次操作算一次活跃的情况好在写完后用示例数据检查发现了。建议写完代码后一定构造几个边界用例空输入、单个元素、全部相同值这些用例成本低但能救回不少分。3.2 第二道编程题带约束的图论或DP第二道题明显要吃力不少。我做的是带约束的最短路径变种大意是在一个二维网格中从左上角走到右下角每个格子有消耗值某些格子被标记为不可通行且要求路径中经过特定类型格子的次数不能超过限制求最小消耗。这类题是典型的状态压缩最短路状态维度不只是坐标还包括“当前已经经过了多少次限制格子”这一维。如果用朴素的BFS或DFS状态空间会爆炸需要用visited[x][y][used]三维数组做记忆化或者转换成分层图跑Dijkstra。我采用的方案是将“已使用次数”作为第三维在Dijkstra的堆节点里维护(x, y, used, cost)邻居扩展时判断是否进入受限格子若进入则used1超过限制就剪枝。这样时间复杂度是O(NMKlog(NM*K))K是限制次数的上限题目给的范围不大能过全部测试点。import java.util.*; public class Solution { // 方向数组依次为上右下左 private static final int[] DX {-1, 0, 1, 0}; private static final int[] DY {0, 1, 0, -1}; public int minCost(int[][] grid, int maxSpecial) { int n grid.length, m grid[0].length; // dist[i][j][k] 表示到达(i, j)且已走过k个限制格子的最小消耗 int[][][] dist new int[n][m][maxSpecial 1]; for (int i 0; i n; i) { for (int j 0; j m; j) { Arrays.fill(dist[i][j], Integer.MAX_VALUE); } } // 优先级队列按当前消耗从小到大 PriorityQueueNode pq new PriorityQueue(Comparator.comparingInt(a - a.cost)); int startUsed grid[0][0] -1 ? 1 : 0; // -1标记为限制格子 dist[0][0][startUsed] grid[0][0] 0 ? grid[0][0] : 0; pq.offer(new Node(0, 0, startUsed, dist[0][0][startUsed])); while (!pq.isEmpty()) { Node cur pq.poll(); if (cur.cost ! dist[cur.x][cur.y][cur.used]) continue; // 跳过过期节点 if (cur.x n - 1 cur.y m - 1) return cur.cost; for (int d 0; d 4; d) { int nx cur.x DX[d]; int ny cur.y DY[d]; if (nx 0 || nx n || ny 0 || ny m) continue; int nUsed cur.used; int addCost grid[nx][ny]; if (grid[nx][ny] -1) { nUsed; addCost 0; // 限制格子的消耗单独计数不叠加数值消耗 } if (nUsed maxSpecial) continue; int nCost cur.cost Math.max(addCost, 0); if (nCost dist[nx][ny][nUsed]) { dist[nx][ny][nUsed] nCost; pq.offer(new Node(nx, ny, nUsed, nCost)); } } } return -1; } static class Node { int x, y, used, cost; Node(int x, int y, int used, int cost) { this.x x; this.y y; this.used used; this.cost cost; } } }3.3 现场做题的时间分配与提交策略编程题整个考卷限时90分钟我的建议是选择题控制在40分钟左右剩下的50分钟给两道编程题。编程题的顺序也不能太死板万一第一道卡住了别死磕赶紧看第二道先拿稳能拿的分。提交策略上用“逐步逼近”的思路先把暴力解写上至少保证有部分测试点通过再针对复杂度的瓶颈做优化。很多时候平台是按测试点给分的过了一个测试点就有对应的比例分空着不写是零写个暴力解怎么也能捞回一些。笔试时间有限追求完美不如追求得分最大化。注意有些平台的编程题需要自己处理输入输出我见过不少同学在主函数里忘记写while (scanner.hasNext())导致只能读一组数据。考试前一定要熟悉牛客和赛码上的IO模板别在这种地方丢分。4. 选择题里藏着的高频知识盲区4.1 Linux操作与网络排查命令联想笔试题里Linux命令占比不算特别高但考到的都很实用。我记得有一道题给出了一个Java应用CPU占用率过高的问题场景问第一步应该用什么命令排查正确答案是top查看进程PID再用top -Hp pid查看具体线程接着用jstack导出线程快照。这种题目考的其实不是单纯背命令而是解决问题的完整链路。网络排查相关的命令也值得专门过一遍ping看连通性、traceroute看路由路径、netstat或ss看端口监听、curl带上-i或-v查看响应头和连接细节。这些命令在笔试选择题里出现时经常会混淆选项把tcpdump和netstat的职责范围设置得很接近需要真正理解它们的核心用途才能选对。4.2 设计模式与代码质量场景设计模式的题目以“给场景选模式”为主很少直接问定义。比如某个业务需要在不修改现有类代码的前提下动态扩展对象功能选项里有装饰器、适配器、代理、观察者。如果你只是背过“装饰器模式动态给对象添加职责”这句话看这个场景可能还是会犹豫因为代理模式也能做功能扩展关键区别在于代理控制访问、装饰器增强功能两者意图不同。代码质量类的题目也出现过比如给出几段代码片段问哪一段更符合开闭原则或单一职责原则。这类题没有标准答案式的是非判断更多是考察工程素养在备考阶段可以看一遍常见设计模式尤其是策略、工厂、模板方法、观察者这几种后端开发中频繁使用的模式掌握它们解决什么问题就够了。4.3 Spring框架与微服务基础既然投的是后端开发Spring框架的知识自然跑不掉但笔试考得不算深。出现较多的是“Spring Bean的默认作用域是什么”、“Autowired和Resource的区别”、“Spring事务在什么情况下会失效”。事务失效那道题出的方式是给出一段Transactional注解标注的方法问为什么事务没有生效候选原因包含方法被this调用、异常被catch后没有抛出、方法是private修饰等这些都是实际开发中非常常见的坑。微服务部分主要考服务注册发现、负载均衡策略和配置中心的作用也会问RPC和HTTP调用的区别以及熔断、降级、限流的基本概念。我在选择题里碰到一道关于Feign和Dubbo的对比题问两者的通信协议和适用场景差异这类题复习的时候不用死记细节把握大体设计思路即可。4.4 常见易错选择题类型整理做选择题最容易错的是概念辨析题比如“TCP和UDP的区别”这种看似简单但选项里会刻意换掉关键词“TCP是面向连接的UDP是无连接的所以TCP保证数据一定不丢失”这句话前半句对后半句错很多秒选区就踩坑了。还有一类是阅读理解题给出一长段业务描述要求选正确的技术选型。这类题要忍住不看选项先自己切分业务需求把关键特征实时性要求、数据量级、一致性要求抽出来再选。比如“用户查看排行榜且允许一定程度延迟”应选缓存方案而不是实时计算方案这类题考察的就是工程师把需求翻译成技术方案的能力。5. 公司特色考点英语、行测与性格测评5.1 技术笔试之外的英语测试联想作为业务遍布全球的公司春招流程里对英语的考察不像外企那么重但个别批次仍会有单独的英语测试环节一般是阅读理解或商务邮件改错题难度介于四六级之间。这部分建议不要太担心平时偶尔看英文技术文档就是最好的准备。如果离考试还有时间可以找几篇英文科技新闻或技术博客训练快速抓取核心信息的能力。技术笔试部分偶尔也会夹带英文题干尤其是计算机网络相关的名词像是“which of the following protocols is connection-oriented?”选项里是TCP、UDP、HTTP、FTP这类。平时积累英文术语考试时能减少读题时间把精力留给计算和推理。5.2 行测题和性格测试的应对心态联想的春招整体流程里通常包含在线综合素质测评也就是我们常说的行测题和性格测试。行测题主要是数字推理、图形推理、逻辑判断这部分原则上没有标准复习范围但可以通过刷几套公务员行测题找找感觉。图形推理题的关键是观察图形的数量、位置、旋转、对称等规律数字推理题则要熟悉等差、等比、递推、隔项等常见数列模式。性格测试虽然没有对错但答题时可以保持一个基本策略选项尽量与实际工作场景贴合表现出稳定、协作、有条理的特质。前后题目可能会相互验证比如前面问“你更喜欢独立完成工作还是团队协作”后面又问“你会优先听取他人意见吗”尽量不要出现自相矛盾的答案。真实作答是最稳妥的特意伪装反而可能因为前后不一致被标记。5.3 聊聊我对流程整体节奏的感受从投递简历到收到笔试通知我这边大约等了不到两周笔试完成后又过了约一周收到复面邀请。整体节奏不紧不慢每轮之间间隔合理不会让人感到流程拖沓。相较于部分互联网公司投完简历第二天就发笔试、笔试完隔天就要面试的安排联想这个节奏对准备不足的同学来说反而友好一些给了缓冲和复盘的时间。笔试成绩在后续流程中权重不低尤其是编程题部分面试官在复面环节会直接调出笔试卷面做追问。这意味着笔试不只是“过线”那么简单编程题写得好不好、思路清晰不清晰都会在面试时被翻出来。所以备考笔试时不要只追求通过要在解题过程中形成清晰的思路和规范的代码风格这是为后面面试做的隐形准备。6. 备考时间线与学习路线规划6.1 倒计时四到六周的复习框架如果你的笔试时间已经确定建议按四到六周来做规划。第一周先做摸底挑一套往年的真题或者自己模拟一套卷子找出自己的薄弱科目这样做比盲目刷题高效得多。第二到三周集中补基础围绕操作系统、计算机网络、数据库和Java基础四个模块逐项过知识点。第四到五周进入刷题阶段主刷选择题和中等难度编程题每天保持一到两道编程题的节奏重点训练在规定时间内读懂题目、设计算法、写出无bug代码的能力。最后一周做模拟考试严格按考试时间走一到两套完整模拟题让自己的生物钟适应考试节奏同时检验薄弱环节是否补上了。6.2 每天推荐的时间投入比例如果是在校生每天能抽出三到四个小时来备考建议按照“1小时基础1.5小时刷题0.5小时复盘”来分配。基础部分包括阅读技术博客、看源码分析、整理知识笔记刷题部分直接上LeetCode或牛客网选择“字节跳动/腾讯/百度/阿里”等公司的真题题单来练复盘部分要整理错题总结每个错题背后的知识点。编程题刷题不要只追求数量每道题做完后要复盘为什么能想到这个解法有没有更优的方案边界条件有没有可能漏掉如果是这种思路把题目的考察点、解题方向、代码模板一并记录输出一篇自己的错题笔记比刷三遍同样的题有用得多。6.3 针对性应对联想后端岗的技巧联想虽然是硬件起家的公司但后端技术栈和互联网公司差异不大没有听说侧重某些极特殊的内部框架。备考时重点还是围绕通用后端技能进行准备同时建议了解联想云、企业服务这类业务的基本架构模式这对后续面试环节会很有帮助。有一类“工程应用题”是联想笔试比较爱出的给你一个实际业务问题比如“双十一期间订单量暴增导致数据库压力过大怎么优化”然后在选项里给出缓存、读写分离、分库分表、消息队列等方案。这类题本质上考的是架构设计的基础认知不需要你做过高并发系统但要知道每种方案的原理、适用场景和代价复习时多看一些系统设计入门的文章会有帮助。6.4 编程语言选型与复习优先级联想的后端笔试选择题大多基于Java编程题不限定语言我周围有同学用C和Python也通过了。但如果你时间有限我强烈建议专注一门语言复习不要想着同时准备Java和C。Java阵营重点复习集合框架、并发包JUC的常用工具、JVM内存模型和垃圾回收如果选择Python则重点掌握内置数据结构的底层实现和常用标准库。算法和数据结构的复习优先级我认为是哈希表、链表、二叉树、堆、排序、动态规划、图论基础。这个顺序和笔试题目出现频率基本一致。前几项是必拿分项动态规划和图论是拉开差距的分项如果时间不够优先保证前几项的正确率。7. 笔试过程中的实战经验与避坑指南7.1 环境准备与网络检查笔试当天提前半小时登录系统调好环境。以下事项是我踩过坑后总结出的清单建议考前一天就确认好电脑建议用有线网络连接或者至少确保Wi-Fi信号稳定避免考试中途断网浏览器用Chrome或Edge提前关闭所有无关插件和弹窗牛客网等平台的代码编辑器支持自动补全和语法高亮但部分快捷键和本地IDE不一致提前熟悉如果允许使用本地IDE编程建议在本地写好后复制到平台提交体验更舒适手机调成静音或直接放在另一个房间考试期间可能会被系统切走监控页面注意有些在线考试系统会有防切屏功能考试期间切出浏览器会留下记录甚至直接交卷。我在模拟测试时就因为切到IDE查看代码触发过一次警告幸好只是测试。如果平台不允许切出页面务必在页面内的编辑器中写代码或者提前准备好纸笔用于演算。7.2 选择题的答题策略与时间控制选择题部分每道题的分值不同考场上的时间分配也不能平均用力。我的策略是读完题后10秒内能确定答案的直接选超过30秒没思路的先标记下来等所有基础题做完后再回来细想。这样能保证先拿稳容易的分不因为一道偏题卡住而影响后面编程题的答题时间。多选题比较麻烦少选不得分的情况下保守策略是只选自己有绝对把握的选项。如果题目说“至少有一个正确选项”你只确定A对那就不如只选A哪怕正确答案是A和B你也只丢了一半的分但选错一个选项就是零分。7.3 编程题的常见提交失败原因编程题提交失败并不完全等于算法不会做很多情况下是环境层面的小问题。输入输出格式不一致是最常见的原因比如题目要求输出结果用空格分隔你输出成了逗号或者题目要求保留两位小数你没有格式化。其次是没有考虑大数据量的极端情况数组越界、整型溢出、无限递归导致栈溢出这些问题在本地测试小数据时很难暴露。还有一些是逻辑细节问题比如对负数的处理、对空字符串的判断、对重复元素的去重等。强烈建议在编写代码时把边界条件先写出来再写主逻辑。我比较习惯先在代码里列出几个测试用例作为注释然后在写完后逐一验证比如输入为空时是否正常输入达到最大值时是否溢出结果本身是最大值或最小值时是否正常所有元素相同时是否正常7.4 如何快速调整考试心态考试中遇到不会的题太正常了。我那次考到多选第3题时就有点卡壳心里一慌后面做题的节奏都被影响了。后来我意识到一个简单的心理技巧把目标定成“我只需要答对大约70%的题目就能通过”而不是“每道题都要会”。这种心态上的调整帮助我在后面遇到难题时果断跳过有效减少了焦虑感。如果时间还剩15分钟还有一道编程题的完全体没做出来建议先停下来检查前面选择题有没有漏填的、编程题有没有编译通过、输出格式是否符合要求这些“捡分”操作比在难题上死磕更划算。笔试的核心是总分最大化不是解出所有题目的满足感。8. 笔试后的复盘与面试衔接准备8.1 如何利用笔试记忆做复盘笔试结束后趁记忆还在尽快把题目回忆出来并按知识点分类整理。不用专门系统性地做就在手机备忘录里列出这个框架把考到的知识点记下然后标记哪部分掌握得好、哪部分模糊、哪部分完全不会。这份“考后回忆清单”是后续面试准备的宝贵输入面试官在复面时很可能围绕笔试题目继续追问。比如我笔试中有一道关于HTTP缓存头Cache-Control和Expires的辨析题我选对了但说实话当时有点靠排除法。面试前我专门把这个知识点翻出来重新整理了一遍包括强缓存和协商缓存的区别、ETag和Last-Modified的优先级顺序、各自适用的场景。结果在复面时面试官居然真的顺着笔试题目往这个方向追问了当时要不是提前补过很容易现场卡壳。8.2 笔试与面试的联动点联想后端岗的面试官手里大概率有你的笔试卷子面试时顺藤摸瓜的情况非常常见。面试官通常会这样开场“笔试里你有一道关于线程池的题答得不错/不太好能再详细说说吗”或者“编程题你用了Dijkstra为什么不用动态规划”所以笔试中每一道题都是你面试时的展示材料写得不完整、答得模糊的题目反而可能成为面试官重点追问的突破口。针对这种情况复盘时除了关注错题也要关注那些“你会但表达得不完美”的题目。比如一道算法题你用了暴力递归通过了部分用例但面试官问“能不能优化到O(N)”你要能说出优化的方向和理由。笔试和面试本质上是同一个知识体系的两次考察只是形式不同备考时可以有意把两者绑定在一起准备。8.3 从笔试到Offer的时间线预期从个人经历和身边同学的反馈来看联想笔试到面试的通知周期一般在5到10个工作日部分岗位如果流程集中可能两三天就有消息也有个别情况需要等两周以上这和招聘岗位的招聘节奏、HR排期有关。如果超过两周没有消息可以在招聘官网上查看状态或者根据邮件通知里的联系方式礼貌询问。等待期不要干等这段时间是面试准备的黄金窗口。建议把简历里写到的项目重新梳理一遍尤其是涉及数据库设计、缓存使用、接口性能优化方面的内容准备好项目介绍和深度追问的回答思路。再花一些时间复习算法题里高频的分类双指针、滑动窗口、二叉树遍历、动态规划这些在面试中出现的概率同样很高。8.4 一个真实的备考时间线参考最后分享一个我实践下来觉得可行的备考时间线供参考第1周摸底一套真题整理薄弱科目第2周操作系统、计算机网络基础复习整理思维导图第3周数据库索引、事务、锁机制专项复习刷相关选择题第4周Java集合、JVM、并发专项复习每天1道编程题第5周Spring框架和微服务概念快速过一遍每天2道编程题第6周模拟笔试2-3次整理错题背诵常考概念我个人在实际操作中还有一个体会每天固定一个时间段复习比周末突击一整天效果要好得多。笔试备考拼的是长期记忆和手感零散刷题很容易今天学明天忘坚持每天两三小时的持续投入比月底突击十小时可靠得多。希望这份复盘能帮你把这场笔试摸得更透祝你也能拿下心仪的Offer。