联想AI岗笔试复盘:从机器学习基础到场景设计的全攻略

联想AI岗笔试复盘:从机器学习基础到场景设计的全攻略 投联想人工智能岗之前我一直以为这类岗位笔试会特别偏“炼丹”全程问模型结构、损失函数、发过哪些论文。真正坐到牛客网笔试页面那一刻才发现联想这份卷子考的不是“你会哪些前沿trick”而是“你能不能在一个真实业务场景里把AI问题拆明白”。作为2024年春招参加过联想人工智能岗笔试的人我打算把这场笔试的完整复盘写下来含考点还原、答题思路、踩坑过程和备考建议给后面冲联想AI岗的同学当个参考。先说结论这场笔试的难度是“中等偏上”但它的“上”不在数学推导有多难而在考察维度很杂——机器学习基础、深度学习原理、编程能力、场景设计题全都有有点像把一套技术面试题塞进了一张试卷里。我在牛客网作答总时长120分钟题量大概在35道左右题型分三类单选题、多选题、编程题外加两道问答题。整体做完的感觉是如果只刷LeetCode而不看机器学习基础肯定挂如果只啃西瓜书不练手写代码也悬。它要的是一专多能而不是单点极致。1. 岗位方向与笔试整体印象联想AI岗到底在招什么人1.1 联想AI相关岗位的定位差异联想的人工智能相关岗位在春招系统里其实不是一个岗位而是一组岗位。我投的是“人工智能工程师”偏算法应用方向。大概是负责把AI能力落到具体的产品线里比如PC端的智能交互、制造业场景的质检、服务场景的知识问答这类。和AI Lab里做基础模型研究的岗位不一样业务线的AI岗更看重“能不能把模型跑通且上线”而不是“能不能设计一个新结构”。这点在笔试里体现得很明显。整份卷子没有一道题是让你从零推导Transformer的也没有问“你用什么框架训练千亿参数模型”这种偏研究的问题。相反它反复在考给你一个业务场景和数据特征你选什么模型、怎么做特征工程、用什么指标评估、模型上线后怎么监控。简单说联想春招AI笔试本质上是“业务算法工程师”的胜任力测试。1.2 笔试平台与作答节奏笔试是在牛客网完成的需要开摄像头全称“2024春季校园招聘-人工智能岗位-在线笔试”。试卷结构我复盘后整理如下。题型题量分值占比建议用时单选题12道约30%30分钟多选题8道约20%25分钟编程题2道约30%40分钟问答题2道约20%25分钟从分值分布能看出来编程题和客观题是拉分主力。但问答题虽然只占20%却是我最想提醒大家重视的部分因为它是选择题和编程题之外唯一能展示“工程思维”的地方。后面我会单独拆。考试过程中我个人的节奏是先做单选题因为热热身能进状态再做问答题趁脑子还清楚把场景方案写好然后编程题最后磨多选题。这样安排的好处是多选题经常有不完全确定的选项放最后即便纠结也不影响前面拿分。编程题放在问答题后面做是因为我怕一写代码就陷进去导致问答题没时间写。这个策略后面证明是有效的我编程题有一道没有完全AC但因为问答题答得比较完整还是拿到了面试通知。1.3 整体难度画像如果用一个词形容这场笔试的难度我会说“宽而不深”。知识点覆盖面很广机器学习、深度学习、概率论、数据结构、数据库、操作系统、甚至还有一两道Python语言特性题。但每个点都不会往死里抠考的基本是“你知不知道”和“理解不理解”极少有“要你现场推公式”的题。这也反映出一个信号联想这种体量的公司招AI工程师时默认你不是应届生里的大神更看重的是基础扎不扎实、能不能培养。所以如果你正在准备类似大厂AI岗笔试没必要焦虑那些特别难的数学推导优先把基础概念吃透、把常见模型的适用场景搞清楚效果会好很多。2. 选择题复盘机器学习与深度学习的出题偏好2.1 高频考点之“模型的适用场景”单选题里印象很深的一道题给了一个场景有一批带标签的图片数据数量约5000张类别有30类要求训练一个图像分类模型问选什么方案最合理。选项里有A. 从零训练一个ResNet50B. 用ImageNet预训练的ResNet50做迁移学习冻结前面层只微调后面几层C. 直接训练一个逻辑回归D. 用K-Means聚类后人工标注。正确答案肯定是B。这道题本身不难但它后面隐含的考点很有代表性联想非常关注“在数据量有限时你会不会想到用预训练模型”。这其实是工业界的常识因为真实业务里的标注数据永远不够用。我当时还顺手在想如果数据能有个五万张是不是可以考虑Finetune所有层要是类别不平衡特别严重是不是得加Focal Loss这些都没有在题目里出现但正是这种“由一道题展开的思考链”才是备考要训练的东西。还有一道多选题考了“哪些问题适合用决策树/随机森林解决”。选项里除了常规的分类、回归之外还有一个干扰项“需要模型输出不确定性估计”。随机森林确实能通过袋外数据给出一定的不确定性度量但“输出不确定性估计”更标准的答案是贝叶斯方法或深度集成所以这个选项不能选。这种题就是典型的“看着都对想想全错”需要对每个模型的边界有清晰认知。2.2 高频考点之“过拟合与正则化”有一道单选题问的是增加L2正则化对模型的影响选项涉及训练误差、测试误差、模型复杂度、特征稀疏性。我选了“训练误差可能上升测试误差可能下降模型复杂度降低”。这里比较坑的是正则化并不是一定让测试误差下降如果本身欠拟合加正则化只会更糟。但题目默认的是“模型过拟合”的前提所以这个答案没问题。另外一道多选题考了“下列哪些操作可以缓解过拟合”数据增强、Dropout、Early Stopping、减小模型容量、在损失函数中加正则项、使用更多训练数据。这个基本是送分题但如果平时只跑框架不动手调可能就会漏选“减小模型容量”。实际在工程里模型容量控制往往比加正则化更直接很多人一过拟合就想着加Dropout其实先看看模型是不是太大了、数据是不是太少了往往更有效。2.3 深度学习的几个经典“记忆点”深度学习部分的选择题几乎每道都在考经典知识点而且特别爱考细节。比如BatchNorm在训练阶段和推理阶段的区别训练时用当前batch的均值和方差推理时用训练阶段滑动平均得到的全局统计量。题目给的是“推理时使用的是训练阶段的全局统计量”判断对错答案是对的。还有一道题考了Softmax的数值稳定性问题。题目问当logits里的数值非常大时直接计算Softmax可能会出现什么情况答案是数值溢出导致NaN。解决办法是每个logit减去最大值再计算。这种题如果你没有手写过Softmax可能一眼就懵了但只要你面试前手推过一遍基本就是送分题。还有一个比较容易被忽略的考点是感受野的计算。题目给了一个网络卷积核3x3、步长1、padding为1连续两层问最后一层的感受野是多少。这个其实考的是感受野递增的逻辑每经过一层3x3卷积感受野在上一层基础上加2。所以在笔试之前最好把感受野、参数量计算、FLOPs估算这些“手算基本功”过一遍。大厂笔试不一定直接考但一旦考了就是区分度最高的题。2.4 统计学与概率论有两道概率题难度不高。一道是贝叶斯公式的简单应用给了一个疾病检测的场景患病率1%检测灵敏度90%假阳性率5%问检测阳性的人真正患病的概率。这题当年红过因为很多医生都答错。答案约等于15.4%。计算公式就是P(患病|阳性) 0.01x0.9 / (0.01x0.9 0.99x0.05)。只要公式会套基本没问题。另一道是期望题给了一只球队每场进球数的分布要求计算两场比赛总进球数的期望。因为期望是线性的直接两场期望相加就行不需要考虑独立性。这题反而在提醒大家笔试里概率题考得更多的是“你知不知道期望的线性性”这种基础性质而不是复杂的联合分布。2.5 数据结构与算法基础客观题里也夹了几道数据结构题大概是为了考察计算机基础。有一道问“二叉搜索树中序遍历的特点”——得到有序序列这个是常识。还有一道问“哈希表解决冲突的方法”正确选项是开放定址法和链地址法这两个术语一定要眼熟。还出现了一道Python语言相关的题问列表和元组的区别。答案是列表可变、元组不可变。这种题出现在AI岗笔试里说明他们默认你日常用Python写模型所以基本的Python特性你得清楚。复盘时我还想到一个问题——如果时间充裕操作系统和数据库的基础最好也复习一下。因为AI岗的笔试里偶尔会出现“进程与线程的区别”“事务的ACID特性”这类题。它们不难但完全没准备的话很容易丢分。3. 编程题还原两道题考的都不是纯算法竞赛3.1 第一道编程题滑动窗口求最大值题目大概是这样给定一个整数数组nums和一个窗口大小k窗口从数组头部开始移动每次移动一位返回每个窗口内的最大值。也就是LeetCode 239的原题。我看到这道题的第一反应是联想居然考了标准的滑动窗口题。但再仔细想想就明白了这道题在算法层面不难但很考验代码基本功。最优解是单调队列考点是你会不会用双端队列维护一个单调递减的结构让队头始终是当前窗口的最大值以及当队头元素的下标超出窗口范围时能不能正确弹出。我当时用的就是双端队列核心代码如下from collections import deque def maxSlidingWindow(nums, k): dq deque() res [] for i, v in enumerate(nums): # 维护单调递减队列从队尾弹出所有比当前值小的元素 while dq and nums[dq[-1]] v: dq.pop() dq.append(i) # 队头元素超出窗口范围时弹出 if dq[0] i - k: dq.popleft() # 当窗口形成后记录窗口最大值 if i k - 1: res.append(nums[dq[0]]) return res这道题还有一个细节就是输出顺序。我第一次写完没有把前k个元素单独处理直接统一判断i k-1其实这样是没问题的。但如果你用的是“先初始化前k个元素再遍历剩余元素”的写法一定要小心边界条件。笔试环境里没有测试用例的详细反馈只有一个“通过率”所以这类细节很容易成为失分点。3.2 第二道编程题任务调度的最短时间第二道题比较有意思是一道带AI味道的调度题有n个任务每个任务有一个执行时间m台机器每个任务可以分配给任意一台机器机器并行执行问完成所有任务的最短时间。这其实就是多机调度问题。我当时脑子里第一反应是这题可以用二分答案法来做猜一个总时间T然后贪心地判断m台机器能否在T时间内完成所有任务。判断的方式是每个任务依次分配给当前累计执行时间最小的那台机器最小堆维护只要任意一台机器超过T就说明这个T不行。不过这题还有一个坑如果任务是可拆分的那答案直接就是总执行时间除以m再向上取整。但题目并没有明确任务是否可以拆分我后来是按“任务不可拆分每个任务只能分配给一台机器”来做的。这种“题目条件模糊”的情况在笔试中很常见我的建议是尽量在答题注释里写清楚你的假设面试官看代码的时候会注意到你的工程思维。我的二分写法大致如下import heapq def canFinish(tasks, m, limit): # 模拟m台机器在总时间limit内能否完成所有任务 machines [0] * m for t in tasks: # 找当前最空闲的机器 heapq.heapify(machines) # 每次重新建堆只是为了可读性实际笔试别这么做 min_machine heapq.heappop(machines) if min_machine t limit: return False heapq.heappush(machines, min_machine t) return True def minTime(tasks, m): if m len(tasks): return max(tasks) left, right max(tasks), sum(tasks) while left right: mid (left right) // 2 if canFinish(tasks, m, mid): right mid else: left mid 1 return left提示一点上面代码里每次循环都重新heapify笔试能过但效率不高。正确做法是维护一个小顶堆初始化为m个0每次从堆里弹出最小值加上任务时间再压回去。我当时时间有点赶用了重新建堆的写法幸运的是数据量不大还是AC了。但复盘之后必须承认如果数据量到10^5级别这个写法大概率超时。所以备考时一定要把堆的用法写熟练不要只会用 sorted 排序硬凑。3.3 编程题暴露出来的能力模型做完这两道编程题我最大的感受是联想AI岗的编程题不追求“竞赛级难度”而是更接近LeetCode中等题但特别看重代码质量。什么叫代码质量就是你的变量名是不是清晰的、边界条件有没有处理、注释有没有写清楚关键逻辑。因为工业界写代码不是一次性交卷而是要给别人维护的。我还注意到第二道调度题和AI的关联很微妙。多机调度本质上就是资源分配问题和分布式训练里把数据分到多张GPU上的逻辑是相通的。如果你能在答题结尾写一句“这个问题的解法也可用于估算多卡训练时数据并行的耗时”面试官会觉得你是真的在思考工程问题而不是只会刷题。4. 问答题复盘开放题才是真正的拉分项4.1 场景题给一个IT服务工单智能分类的需求你会怎么做方案问答题第一道大概是联想有大量的IT服务工单需要按问题类型自动分类再转给对应的技术团队处理请你设计一个完整的AI解决方案。这道题没有标准答案考的是“你能不能把一个问题从数据到模型到上线讲清楚”。我当时的回答分成了五步第一步定义问题明确分类体系和类别的数量第二步数据准备说明需要工单标题、正文、历史处理记录以及标签来源第三步模型选型考虑到中文文本和计算资源先用预训练语言模型做文本分类比如BERT或它的轻量版本第四步评估指标因为工单类别可能不平衡所以重点看宏平均F1而不是整体准确率第五步上线与迭代用一个规则兜底模型、定期用新标注数据做增量训练。我还额外写了一点如果推理延迟要求很高可以用蒸馏把大模型压缩成一个小模型如果工单类别特别多、有的类别样本很少可以考虑用层次分类——先粗分类再细分。这些内容课本上不一定有但在真实项目里很常见面试官看到这些会认为你有工程经验。4.2 分析题模型上线后准确率下降怎么排查第二道问答题考了模型监控一个已经上线的AI模型前几个月效果很好最近准确率突然下降请问你怎么排查。这个场景在工业界太常见了。模型准确率下降的原因有很多我的排查思路是往下拆先确认统计口径准确率是线上监控报的还是抽样人工评估得到的口径变化会直接导致数字变化。再查数据和特征线上数据的分布是否和训练时候一样新用户的行为模式有没有变特征取值有没有出现缺失或异常然后看模型自身是不是长时间没更新导致模型“过期”了最后看环境上游数据管道有没有出问题发版是不是触发了某个逻辑bug。这题我复盘后觉得答得好的关键是“分层次”而不是一句话讲完。面试官想看到的是你有没有一套系统的排查思路这比你说出某个具体的原因重要得多。其实这道题也呼应了热搜词里的人工智能偏见、人工智能模型组这些概念——一个AI模型上线之后日常维护比训练阶段更考验功力。4.3 问答题的写作技巧根据这次实战我总结几个问答题的作答技巧先给框架再填细节不要上来就写具体算法。比如“数据-特征-模型-评估-上线”这个框架非常通用也比较符合工业界的工程流程关键是让面试官一眼看到你有结构化思维。每个环节给一个具体可落地的方案。比如一提数据就是“收集100万条标注样本”这就太虚了更好的是“先抽样看类别分布再决定每个类别需要标注的样本量”。一定要提评估指标怎么选。很多人写方案喜欢直接说“用准确率评估”但如果数据类别不平衡准确率会骗人。能主动提F1、AUC、PrecisionK这些指标会显得你比大多数候选人成熟。最后提一下上线后的闭环。很多候选人写到“模型训练完成、评估达标”就结束了但工业界真正关键的是从训练到上线之间的步骤比如模型压缩、推理优化、回滚策略、监控报警。能把“上线后闭环”写出来是区分“会做项目”和“懂工程”的关键。5. 高频考点背后的原理拆解为什么联想想考这些5.1 模型训练为什么“贵”GPU与资源的逻辑笔试之后我又仔细搜了一圈人工智能相关的热搜词发现很多在校同学都在问一个问题——“人工智能训练为什么需要钱多和GPU多”。这个问题恰好也会在面试中被顺带问到我建议备考时把它想透彻。模型训练烧钱本质是三个原因叠加算力需求大、数据吞吐大、调试次数多。训练一个大规模深度学习模型需要海量矩阵乘法GPU因为并行计算能力强所以成为必须品而模型的调参过程不是一次跑通要跑几十上百次实验每次都是完整的训练周期。这就解释了为什么“钱多”和“GPU多”是强相关的——钱多的团队能买更多卡更多卡能跑更多实验更快试错。理解这层逻辑在笔试和面试里遇到“为什么要用分布式训练”这类问题时你就不只是背概念而是真的知道答案。5.2 从“人工智能模型组”看联想的落地思路我在复盘时注意到一个热搜词“人工智能模型组”。这个词在联想的语境里其实反映了AI岗位的协作方式算法工程师、数据工程师、后端工程师、产品经理组合在一起共同把模型落地成产品。笔试里的场景题和编程题本质上都是在模拟这种协作模式——你既要懂模型又要懂数据还要能写工程代码。所以备考时不要只盯着模型结构要多想一想“模型是怎么被用起来的”。举个例子你训练好一个文本分类模型怎么部署成接口响应延迟怎么优化QPS上来了怎么办这些看起来是工程问题但在联想的笔试和面试里大概率会以某种形式出现。5.3 OAG等新范式要不要追热点2024年前后AI圈里出现了不少新概念比如搜索里有热搜词提到了OAGOntology-Augmented Generation本体增强生成。这个方向在笔试里考到的概率很低但面试时如果被问到“你最近关注什么新技术”能说清楚这类概念会是加分项。我的建议是笔试阶段不用太追热点把基础打牢面试阶段可以适当准备一两个热点方向但一定要能讲清楚“它解决了什么问题”以及“它有什么局限”。比如OAG的核心思想是用本体论来约束和增强大模型的生成过程减少幻觉、增强领域知识的一致性。这样的理解比背一个名词解释要有效得多。6. 备考路线与资料清单从春招倒推的复习计划6.1 时间线规划我是大概提前一个半月开始系统准备的。如果重新来一次我会把时间拉长到三个月分三个阶段阶段时间目标基础夯实第1-4周把机器学习、深度学习核心概念过一遍会手推常见公式刷题强化第5-8周LeetCode高频题往年的AI岗笔试题培养手写代码感觉模拟冲刺第9-12周做整套模拟题掐时间训练节奏和心态对于时间紧张的同学我的建议是“保客观题、抓问答题、练编程题”。客观题背了就能拿分性价比最高问答题套路性强花一个晚上总结框架就能超过大多数人编程题需要长期积累但如果时间不够至少把高频的数组、字符串、双指针、二叉树、动态规划刷熟LeetCode中等题做两遍基本能应付大多数公司的AI岗笔试。6.2 值得啃的资料李航《统计学习方法》前几章感知机、KNN、朴素贝叶斯、决策树、SVM是笔试选择题的重要来源。周志华《机器学习》西瓜书重点看评估方法、线性模型、决策树、集成学习、聚类、降维。LeetCode 热题100Hot 100编程题基本从这个范围出至少刷两遍。《百面机器学习》和《深度学习500问》面试高频题汇总笔试选择题也很有参考价值。牛客网上各家AI岗的笔试题资源别嫌题目旧很多公司出题风格几年都不变的。6.3 联想笔试与通用大厂AI岗的异同横向对比一下联想的笔试和字节、阿里、腾讯的AI岗笔试有什么差异字节的技术笔试更硬核编程题难度明显更高选择题也更刁钻阿里AI岗笔试有时会出现比较长的场景分析题和联想的风格有一点像腾讯AI岗笔试则比较均衡客观题和编程题都不简单。相比之下联想的笔试算是对跨专业同学比较友好岗位JD里常要求“计算机、自动化、数学等相关专业”整体基调是“基础扎实有工程sense”。如果你的算法基础一般但有过实际项目经验联想笔试是你的机会反过来如果只会刷题没做过完整项目问答题那一关会比较吃亏。7. 实战踩坑与细节建议这几个坑我替你踩过了7.1 时间的坑不要在一道多选题上死磕我在复盘中最后悔的一个操作是在某道多选题上花了将近6分钟那道题是关于集成学习的问哪些说法正确选项涉及Bagging降低方差、Boosting降低偏差、随机森林对特征列采样、Stacking需要交叉验证。其实前三个我都确定只有最后一个犹豫结果我反复读题干、反复演算耗了很久。这是一个典型的低级失误——多选题分值有限为一道题卡6分钟白白压缩了编程题时间。后来我调整了策略不确定的题先按第一直觉选标记一下等所有题做完再回头。7.2 编程环境的坑处理输入输出的细节牛客笔试的编程题输入输出格式一定要小心。比如第一道滑动窗口题输入是一行数组和一行k值数组是用逗号分隔的不是空格。如果你平时刷LeetCode只需要填函数体到了笔试环境突然要自己解析输入很容易翻车。建议提前熟悉牛客、赛码这些平台的IO写法。还有一个更阴间的点有的编程题允许你从标准输入循环读取多组测试用例不要只在第一组样例上通过就提交要检查循环有没有正确包住处理逻辑。7.3 问答题的时间分配至少留25分钟我前面提到先做问答题事实证明这个决定很正确。因为问答题要写的内容多而且考查的是结构化的思维如果放在最后20分钟才写人会非常慌写出来的东西东一句西一句。我的建议是开考后先把单选快速过一遍然后立刻写问答题趁头脑清醒把方案写完整。等编程题写完再回头检查选择题。千万不要把问答题拖到最后那是在拿最值钱的分冒险。7.4 检查清单交卷前5分钟看什么还剩5分钟的时候建议优先做这几件事检查客观题有没有漏选。多选题漏选的情况下有的平台给一半分选了错误选项直接零分所以不确定的宁可不选。检查编程题有没有语法错误。比如Python的缩进、import语句有没有写全这些低级问题一旦出现整题零分。检查问答题有没有明显的逻辑断档。比如你前面写“选用预训练模型”后面就直接跳到“上线监控”中间的微调、评估没写赶紧补两句。7.5 笔试之后怎么从笔试过渡到面试笔试交卷后的两三天内一定要趁记忆清晰把题目复盘一遍。我当时把试卷里所有考点整理成了一个表格并在每个考点后面写了一条“为什么考”和“我哪里答得不够好”这份复盘文档后来成了我面试准备的素材库。联想的面试一般会有技术面前15分钟大概率会围绕笔试内容展开。面试官可能会问“你笔试里滑动窗口那题为什么用双端队列”“场景题里如果你的类别不平衡除了F1你还会看什么”所以笔试复盘不是走过场是真的会把运气变成实力。我自己在面试时被问到过“模型上线后准确率下降怎么排查”我几乎是把笔试的答案又优化了一遍讲出来的当场看到面试官点头那一刻就知道笔试时认真答那道题的价值不只是那几分。最后说点实在的大厂AI岗笔试刷题是底线项目是上限。像联想这样的公司笔试更像一轮“健康检查”它真正想筛选的是“基础功底扎实、遇到问题有清晰解法、写代码不拖泥带水”的人。这些能力没有捷径但一条一条练下来是完全可以被看见的。祝看到这篇复盘的你笔试顺利。