
蘑菇街2019届实习生算法工程师笔试说实话在当年的校招圈子里算是一套“有点东西”的题。它不像有些大厂笔试那样通篇硬核ACM也不像某些公司那样纯考背诵八股而是把基础数据结构、经典算法、机器学习理论和电商业务场景揉在一起既筛代码能力也筛工程直觉。我当年做完这套题之后整理过一份复盘笔记后来辅导学弟学妹准备算法岗笔试时也经常拿它当模板来拆。今天把这套题的考点和解题思路完整梳理一遍结合我实际踩过的坑和后来面试中验证过的经验给准备投实习或者秋招的同学一份可以直接抄作业的参考。先说结论这套题的核心考察逻辑是“算法基本功 业务敏感度”。如果你只刷LeetCode热题不补机器学习基础和电商场景知识后半张卷子会很吃亏反过来如果你只会调包调参算法题部分又会直接暴露代码功底。所以这篇文章不只讲答案更会讲清楚每类考点背后的考察意图、常见变体和复习优先级。1. 笔试考什么先看整套题的布局1.1 题型分布与考察范围蘑菇街作为电商平台算法工程师的日常工作会涉及搜索排序、推荐系统、用户增长、风控、定价、供应链等多个方向所以笔试题目并不是单纯的“算法竞赛题集”而是按照“通用算法能力 电商算法场景”两条线来出题。我当时拿到的卷子大致分为三个部分第一部分是客观选择题覆盖数据结构、概率统计、机器学习基础题量大概在20道左右每题涉及的知识点都比较细比如HashMap的扩容机制、贝叶斯公式的计算、决策树的划分依据这类。第二部分是编程题一般是2到3道难度从LeetCode Medium到Hard不等重点考察字符串处理、动态规划、贪心策略和图论算法。第三部分是简答/设计题会给出一个电商业务场景让你设计算法方案或者分析某个技术选型比如“如何做商品推荐冷启动”“如何识别刷单行为”这类开放性问题。这套结构在当年的互联网公司笔试里算是比较典型的但它有一个特点客观题里藏了不少“非主流”考点。比如我在卷子里就遇到了KMP算法中next数组的推导、粒子群算法的原理理解这类题目如果你只看《剑指Offer》和LeetCode热题这部分很容易丢分。1.2 为什么这套题值得反复拆解很多人觉得笔试就是刷题刷够了自然能过。但蘑菇街这套题给我的启发是笔试其实在模拟“算法工程师日常解决问题的思维路径”。一道编程题考的是你能不能把业务问题抽象成数学模型一道机器学习选择题考的是你知不知道某种算法在什么场景下会失效一道开放题考的是你有没有全局视野能不能把一个模糊的业务需求拆解成可执行的技术方案。我当时做完这套题最大的感受是它不追求你背了多少篇Paper而是追求你有没有形成一套“遇到问题 → 建模 → 选算法 → 评估结果”的思维惯性。所以这篇拆解文章我也会按照这个思维路径来组织先讲代码题的核心算法再讲机器学习相关考点最后讲电商场景应用题每一类都会给出具体的解题思路和复习建议。2. 核心算法考点深度拆解2.1 字符串匹配KMP与next数组字符串相关的题目几乎年年必考蘑菇街这套题也不例外。我当时遇到的是一道关于KMP算法的选择题要求计算模式串的next数组具体来说是模式串 pabacaba 的 next 数组值。这类题考察的不是你能不能默写KMP代码而是你有没有真正理解“最长相等前后缀”这个概念。先给完整推导过程。模式串 abacaba 的长度为7约定 next[i] 表示模式串前 i 个字符组成的子串中最长相等前后缀的长度不同教材对next数组的定义略有差异有的从0开始有的从-1开始考试时一定要看清题干的定义。我们按“从1开始计数next[i] 表示前 i 个字符的最长相等前后缀长度”来算i1子串 a没有真前后缀next[1]0i2子串 ab前缀 a 和后缀 b 不相等next[2]0i3子串 aba前缀 a 和后缀 a 相等长度为1前缀 ab 和后缀 ba 不等next[3]1i4子串 abac前缀 a 和后缀 c 不等前缀 ab 和后缀 ac 不等前缀 aba 和后缀 bac 不等next[4]0i5子串 abaca前缀 a 和后缀 a 相等next[5]1i6子串 abacab前缀 ab 和后缀 ab 相等长度为2next[6]2i7子串 abacaba前缀 aba 和后缀 aba 相等长度为3next[7]3所以最终 next 数组是 [0, 0, 1, 0, 1, 2, 3]从下标1开始对应。这里有个容易出错的点计算 next[i] 时比较的是“前 i 个字符”的最长相等前后缀而不是整个模式串的。很多同学在笔试现场容易把 i7 的 next 值算成 1因为看到开头和结尾都是 a 就直接写了 1但实际上 aba 和 aba 是匹配的所以最长的是 3。这说明做题时不能只凭肉眼扫一定要把前后缀逐个列出来比较。KMP 的实用价值在于它把字符串匹配的时间复杂度从 O(m×n) 降到了 O(mn)。在大文本搜索、敏感词过滤、基因序列匹配这类场景里这个优化是质的飞跃。复习时我建议你手推至少三个模式串的 next 数组比如 aaaaab、abcabcabc、ababaca然后把 KMP 的匹配过程完整写一遍。很多笔试不直接考 KMP 代码而是考 next 数组的推导所以这个过程比背代码更重要。2.2 动态规划与贪心两种思维的边界编程题部分最常见的两类考点就是动态规划和贪心。蘑菇街的笔试题里有一道典型的动态规划题和“最大子数组和”类似但场景换成了电商场景中的“优惠券叠加最优策略”。这类题表面上是在考代码能力实际上是在考察你能否把一个看似复杂的业务规则抽象成状态转移方程。以最大子数组和LeetCode 53为例这道题看起来简单但它是理解动态规划“状态定义”的好素材。定义 dp[i] 表示以第 i 个元素结尾的连续子数组的最大和那么状态转移方程就是dp[i] max(nums[i], dp[i-1] nums[i])最终答案就是 max(dp[0], dp[1], ..., dp[n-1])。空间上还可以优化因为 dp[i] 只依赖 dp[i-1]所以只需要一个变量滚动更新即可。进阶的考法包括二维动态规划如编辑距离、最长公共子序列、背包问题0-1背包、完全背包、区间DP如石子合并、树形DP。我建议优先掌握前两类因为它们在电商算法岗中出现频率最高。比如“商品推荐列表的最优组合”“凑满减的最优方案”本质上就是背包问题的变体。贪心算法则是另一种思路它不追求全局最优的“严格证明”而是通过每一步都做出当前看起来最优的选择来逼近最终结果。经典案例包括活动选择问题、跳跃游戏、分发饼干、会议室安排等。笔试中经常出现“贪心 vs 动态规划”的选择题比如“零钱兑换问题”用贪心可能得到错误答案用动态规划才是正解“区间调度问题”用贪心就能得到最优解。这个边界感很重要如果一个问题具备“最优子结构”和“无后效性”通常用动态规划如果每一步的选择不会影响后续状态通常可以用贪心。我面试时还遇到过一道很经典的题给定一组商品的价格和折扣要求选择若干商品使得最终支付金额最小但每个折扣券只能用于满足条件的商品组合。这个题看起来像贪心实际上需要动态规划去枚举所有可能的组合状态。这类题的共同点是题目描述越接近业务越容易让考生陷入“用业务逻辑硬解”的误区。正确的做法是先抽离出数学模型忽略业务名词再看它属于哪一类经典问题。2.3 排序、查找与常用数据结构排序算法是笔试中性价比最高的考点因为它的变体很多手写快排、归并排序、堆排序分析各种排序算法的稳定性、时间复杂度和空间复杂度甚至是“链表排序”“外部排序”这类进阶问题。蘑菇街的选择题里就有一道关于“稳定排序”的题问在商品按价格排序时如果价格相同希望保持原有顺序如上架时间顺序应该选择哪种排序算法。这里我整理了一张常用排序算法的对比表笔试前最好能默写出来排序算法平均时间复杂度最坏时间复杂度空间复杂度稳定性冒泡排序O(n²)O(n²)O(1)稳定选择排序O(n²)O(n²)O(1)不稳定插入排序O(n²)O(n²)O(1)稳定希尔排序O(n^1.3)O(n²)O(1)不稳定归并排序O(n log n)O(n log n)O(n)稳定快速排序O(n log n)O(n²)O(log n)不稳定堆排序O(n log n)O(n log n)O(1)不稳定表格里最容易被忽视的是“不稳定”背后的原因。比如选择排序为什么不稳定假设数组 [5, 5, 3]第一轮找到最小值 3和第一个 5 交换导致两个 5 的相对顺序发生改变。这种细节选择题特别爱考光背结论不够得能讲出原因。数据结构方面栈、队列、哈希表、堆、二叉树是笔试的重点。我需要特别提醒的一点是二叉树的遍历前序、中序、后序、层序必须能手写递归和非递归两种版本尤其是非递归版用栈模拟递归是高频考题。堆优先队列在解决 Top-K 问题、合并 K 个有序链表、数据流中的中位数时非常有用。哈希表则需要理解负载因子、扩容机制和哈希冲突的解决方法链地址法、开放定址法这既可能考代码题也可能考概念题。我当时在准备阶段整理过一个“数据结构速查表”把每种结构的插入、删除、查找时间复杂度列成一张表考前反复看几遍对提高客观题正确率很有帮助。你也可以按这个思路来整理自己的复习材料。2.4 图论算法最短路与二分图图论算法在电商场景中应用非常广泛——商品推荐的关系图、用户社交网络、物流配送路线、订单调度等都可以建模成图。蘑菇街笔试里虽然没有特别难的图论大题但在选择题和编程题里都有涉及比较有代表性的是 Dijkstra 算法、二分图匹配HK 算法和最短路变体。Dijkstra 算法是单源最短路径的经典算法核心思想是贪心每次从未确定的节点中选出距离起点最近的一个然后松弛它的邻接边。朴素实现的时间复杂度是 O(V²)用优先队列优化后可以降到 O((VE) log V)。笔试如果考代码题大概率要求你用堆优化版本因为数据范围一大朴素版本容易超时。二分图匹配相关算法在电商场景也有应用比如“优惠券在不同商品上的最优分配”“推荐系统中用户-商品二部图的匹配”等。HK算法Hopcroft-Karp 算法是二分图最大匹配的优化版本通过 BFS 构建增广路径集合再用 DFS 进行增广时间复杂度为 O(E√V)比匈牙利算法的 O(VE) 快很多。如果你备考时间充裕建议至少理解匈牙利算法的思想和 HK 算法的核心步骤因为这类题目一旦出现对面试官来说是一个很好的区分点。另外拓扑排序Kahn算法也值得掌握它可以用来检测有向图中是否存在环、处理任务调度依赖、以及解决包管理器依赖问题。Kahn 算法的核心是不断删除入度为 0 的节点并更新相邻节点的入度。这类算法在笔试中的代码实现不算难难的是你能不能想到用图模型去解决问题。3. 智能优化与机器学习算法题3.1 粒子群、模拟退火与群体智能说实话“粒子群算法”出现在实习生笔试题里让我有点意外但仔细想想又在情理之中——电商算法团队经常需要做参数优化、路径规划、选品组合优化等问题传统的精确算法在数据量大的时候算不过来启发式算法就派上了用场。粒子群算法Particle Swarm Optimization, PSO模拟鸟群觅食行为核心是每个粒子维护两个信息自身历史最优位置pbest和群体历史最优位置gbest。每次迭代时粒子根据这两个位置来更新自己的速度和位置v w * v c1 * r1 * (pbest - x) c2 * r2 * (gbest - x) x x v其中 w 是惯性权重控制粒子对之前速度的继承程度c1 是自我认知系数c2 是社会认知系数r1 和 r2 是 [0,1] 之间的随机数。面试中可能会问w 取大一点会怎样答案是收敛变慢、全局搜索能力增强。c1 和 c2 不平衡会怎样c1 过大容易陷入局部最优c2 过大会导致过早收敛。这些参数含义是选择题的常见考点。模拟退火算法同样是经典启发式算法它借鉴了金属退火的物理过程。核心思想是以一定概率接受比当前解更差的解从而跳出局部最优。这个“概率”由温度 T 控制温度越高接受差解的概率越大随着温度逐渐降低算法越来越趋向于“贪心”最终收敛到一个稳定解。我在实际项目中用模拟退火做过一次库存调拨方案的优化虽然它不是最快的但胜在实现简单、对问题结构要求低在没有现成求解器的时候是个很好的备选方案。复习这部分时我的建议是不要纠结于算法的数学推导重点理解每个算法的“直觉思想”和“适用场景”。笔试不会让你手推粒子群的收敛性更可能问“粒子群算法和遗传算法的区别”“什么场景下用模拟退火比用贪心更合适”这类问题。3.2 聚类、KNN与经典机器学习机器学习基础题在蘑菇街笔试里占的比重不小主要考察聚类算法、KNN、贝叶斯、决策树等经典算法的原理和适用场景。这几个算法如果只看理论不做题很容易觉得自己会了到考场才发现细节全记混了。K-Means 聚类是高频考点。它的大致流程是先随机选择 K 个中心点然后迭代执行“分配”和“更新”两步直到中心点不再变化。它最大的缺点是对初始中心点敏感容易陷入局部最优所以有了 K-Means 优化算法——它通过让初始中心点尽可能分散来缓解这个问题。另外一个常考点是如何确定 K 值常见方法有“肘部法则”画代价函数随 K 的变化曲线找拐点和“轮廓系数”。选择题经常问“K-Means 适合处理什么类型的数据”答案是“数值型、连续型数据”因为它依赖欧氏距离计算如果数据中包含类别特征需要先做编码转换。KNNK近邻是最简单的监督学习算法之一它的“三要素”是K值的选择、距离度量方式、分类决策规则。K 值太小容易过拟合K 值太大容易欠拟合。距离度量可以是欧氏距离、曼哈顿距离、余弦相似度等。KNN 的另一个特性是“惰性学习”它没有显式的训练过程预测时才计算新样本与所有训练样本的距离所以预测阶段的计算开销很大。我当年复习机器学习基础时踩过一个大坑把所有算法分开背结果遇到综合题就懵了。后来我改用“对比学习法”比如把 K-Means 和 KNN 放在一起对比把逻辑回归和朴素贝叶斯放在一起对比把 Bagging 和 Boosting 放在一起对比。这个方法效果很好因为笔试选择题经常就是冲着你“概念混淆”这个弱点来的。3.3 强化学习与深度学习考点强化学习在2019年的校招笔试中已经不算冷门了尤其是 AlphaGo 之后很多算法岗的笔试题都会问一些基础概念。对电商场景来说强化学习可以用于动态定价、推荐系统的长期回报优化、广告投放策略优化等场景。强化学习的核心要素包括智能体Agent、环境Environment、状态State、动作Action、奖励Reward和策略Policy。最经典的方法是 Q-Learning它维护一张 Q 表记录每个状态下采取每个动作的期望回报通过贝尔曼方程来迭代更新。DQNDeep Q-Network则用神经网络来拟合 Q 函数解决了状态空间过大时 Q 表无法存储的问题。复习时要理解“探索与利用”的权衡epsilon-greedy 策略、折扣因子 gamma 的作用取值接近 1 时更看重长期收益接近 0 时更看重即时收益这两组概念它们是最常见的考察点。深度学习方面常考的是激活函数、损失函数、优化器、过拟合的解决方法等。比如为什么 ReLU 比 Sigmoid 更常用因为 Sigmoid 在输入较大或较小时梯度接近 0会造成梯度消失而 ReLU 在正区间梯度恒为 1能缓解梯度消失问题。再比如为什么交叉熵损失适合分类任务因为它能放大错误预测的惩罚梯度更新也更稳定。优化器方面SGD、Momentum、RMSProp、Adam 四者的区别也值得重点准备面试官很爱问“Adam 为什么比 SGD 好”“RMSProp 改进了什么”。3.4 信号与图像处理算法的隐藏考点这一部分可能很多人会忽略但蘑菇街笔试题里确实出现了和信号处理、图像处理相关的考点比如音频重采样算法、图像锐化的拉普拉斯算法、Sobel 边缘检测算子等。从电商业务角度想这些考点并不奇怪。电商平台有商品图片、短视频内容算法工程师需要处理图像增强、视频压缩、音频转码等问题。比如商品主图的清晰度优化、视频的清晰度自适应策略、图像去噪等都会用到图像处理算法。拉普拉斯算子是一个二阶微分算子常用于图像锐化。它的原理是图像中边缘区域的二阶导数为零的点对应边缘位置通过在原图上加上拉普拉斯算子的滤波结果可以增强边缘对比度让图像看起来更锐利。Sobel 算子则是一阶微分算子通过计算图像在 x 方向和 y 方向的梯度幅值来检测边缘常用于边缘检测任务。音频重采样算法则涉及音频处理的基础知识比如线性插值、三次样条插值、多相滤波器组等。在流媒体场景中不同设备可能支持不同的采样率重采样算法的好坏直接影响了音频质量。这些考点说明算法工程师的知识面不能局限于“刷题 机器学习”一些基本的信号处理、图像处理知识也需要了解。4. 电商业务场景下的算法应用题4.1 推荐系统与冷启动蘑菇街归根结底是电商平台推荐系统是算法团队的核心业务之一所以笔试简答题里大概率会出现推荐相关的题目。最常见的一道题是“如何为一个新上线的商品做推荐冷启动”冷启动问题的本质是“数据稀疏”。新商品没有用户行为数据点击、收藏、购买协同过滤算法失效这时候需要依赖内容特征。我建议的回答思路分三步第一步基于商品本身的属性标题、类目、价格、品牌构建内容画像第二步用规则策略做冷启动——比如同类目下的新品集合、价格带相似的商品集合或者按用户历史购买行为的类目偏好做粗粒度匹配第三步设置探索机制比如在推荐列表中插入一定比例的新品坑位用线上点击率数据来快速迭代。回答这类问题时逻辑完整比答案完美更重要。面试官想看到的是你能不能把一个模糊问题拆解成“数据层、策略层、评估层”。数据层有哪些特征可用策略层用什么算法召回和排序评估层用什么指标衡量点击率、转化率、多样性等。你还可以补充一个细节冷启动期和稳定期的策略差异冷启动期更注重探索稳定期更注重利用这是强化学习里 exploration-exploitation 思想在业务中的体现。4.2 风控与异常检测电商平台的风控场景是算法工程师笔试的另一大重点常见的题目有“如何识别刷单行为”“如何识别恶意退款”“如何检测异常流量”。这类题考察的是异常检测算法的理解和应用。回答这类题可以从三个层面展开第一层是规则层面比如单账号短时间内购买次数超过阈值、下单后立即退款比例过高、多个账号共享同一收货地址等这类规则简单直接适合作为第一道防线第二层是统计层面比如用滑动窗口计算指标均值当某个指标偏离均值超过3个标准差时触发告警或者用孤立森林Isolation Forest这类无监督算法做异常检测第三层是模型层面比如用梯度提升树XGBoost、LightGBM训练一个二分类模型预测用户行为是正常还是异常特征包括行为序列特征、设备特征、社交关系特征等。这里可以提一下孤立森林的原理因为它是异常检测中很常用的算法它的核心思想是“异常点更容易被孤立”在随机划分特征空间时异常点往往只需要很少的划分次数就能被分离出来所以通过构建多棵随机树计算每个样本的平均路径长度路径越短越可能是异常点。回答这类问题时建议先承认风控是一个“攻防对抗”的过程然后给出“规则先用模型跟进人工兜底”的完整思路。不要只说一种方法因为面试官想考察的是你的全局视角。4.3 定价与排序策略定价算法是电商特有的算法方向也是蘑菇街笔试可能涉及的内容。动态定价的目标是在不同用户、不同场景下给出不同的商品价格从而最大化整体收益。经典的定价算法策略包括基于成本加成的静态定价、基于竞争品价格监测的动态调价、基于用户价格敏感度的个性化定价。更进一步是“价格弹性”建模——通过历史销售数据拟合价格与销量之间的关系找到收入和利润最大化的价格点。排序策略同样重要搜索和推荐的排序结果直接决定用户的点击和转化。LTRLearning to Rank是经典的排序方法包括 Pointwise、Pairwise、Listwise 三大类。Pointwise 把排序问题当成回归或分类问题对每个商品独立打分Pairwise 比较两两商品的相对顺序典型算法是 RankNet、LambdaRankListwise 则直接优化整个列表的排序指标典型算法是 ListNet。笔试中如果出排序相关的大题建议从“召回 → 粗排 → 精排 → 重排”的完整链路来回答并说明每一层的输入输出和目标。我刚工作的时候最容易犯的错误是只盯着精排模型忽略了召回和重排后来才意识到整个链路是环环相扣的任何一层的短板都会影响最终效果。4.4 分布式系统里的算法思想虽然不是算法题的主力但分布式相关的算法在笔试客观题里偶尔会出现比如一致性哈希、Paxos、Raft、Kafka 的选举机制等。电商系统都有高并发场景分布式一致性是算法工程师需要具备的基础知识。一致性哈希算法是为了解决传统哈希取模在节点变更时大量数据迁移的问题。它把整个哈希值空间组织成一个环每个节点在环上占据一个位置数据通过哈希函数映射到环上后顺时针找到的第一个节点就是存储节点。当节点增删时只有该节点附近的数据需要迁移大大减少了影响范围。这个考点对算法工程师来说有点“偏工程”但确实能看出候选人有没有系统设计意识。我当时复习的时候是把一致性哈希、布隆过滤器、LRU Cache 这三件套放在一起准备的它们都是高频考点一致性哈希解决分布式缓存路由问题布隆过滤器解决大规模数据去重问题LRU Cache 解决缓存淘汰问题。这三者可以用于设计一个“海量商品详情页缓存系统”的方案表达效果特别加分。5. 笔试实战技巧与常见坑5.1 时间分配与做题顺序笔试时间一般比较紧张尤其是既有客观题又有编程题的卷子合理分配时间非常重要。我的建议是先快速浏览整个卷面标出客观题中的“概念题”和“计算题”客观题控制在25到30分钟内完成不会的题先标记跳过不要恋战编程题预留40到50分钟优先做自己有把握的题不要卡在一道题上超过20分钟简答/设计题放在最后30分钟重点回答问题的框架和逻辑不用追求面面俱到。有一件很重要的事情是“拿到题目先看数据范围再决定算法”。很多时候编程题的难度不在于会不会做而在于用哪种复杂度去做。如果 n 的范围是 10^5你不能写 O(n²) 的解法如果 n 的范围是 100那 O(n³) 的解法说不定也能过。这个习惯一定要在平时练习时就养成否则笔试很容易因为超时损失大量分数。5.2 边界条件与极端输入编程题最常见的“隐性杀手”是边界条件。数组为空、链表只有一个节点、字符串全为空字符、输入为负数这些都是高频边界。我在笔试时遇到过一道“字符串转整数”的题看似简单但需要处理正负号、溢出、非法字符三个边界一个不留意就扣分。解决这个问题的方法是写完代码之后花30秒在脑海里或草稿纸上跑一组“最小规模”的测试用例再跑一组“大规模”的用例检查变量是否存在越界或者空指针。比如二叉树相关的题先想 root 为空的情况动态规划的题先想 n0 和 n1 的情况滑动窗口的题先想窗口大小等于数组长度的情况。还有一个容易忽略的点是“数组下标从0开始还是从1开始”。定义 dp 数组时很多同学习惯从1开始方便处理边界但写循环时容易混淆。我的建议是统一采用“dp[i] 表示前 i 个元素”的语义下标从0开始这样循环和数组访问都天然对齐少很多 off-by-one 的bug。5.3 复杂度的自我检查写完代码后快速做一次复杂度分析看看你的解法是否满足题目要求。如果题目要求 O(n log n) 而你的解法是 O(n²)即使代码正确也可能超时。这里有一个小技巧1秒的时间复杂度通常可以承受 10^7 到 10^8 次基本运算。所以 n10^5 时算法复杂度最好是 O(n log n) 或更低n10^6 时最好控制在 O(n) 以内。如果你设计的算法复杂度超标尝试换一种思路能不能用哈希表把查找从 O(n) 降到 O(1)能不能用排序把暴力枚举变成双指针能不能用前缀和把区间查询变成 O(1)我在刷题时最爱用的三个优化套路是哈希表空间换时间、双指针减少一层循环、前缀和优化区间求和。这三个套路能解决大概60%的“复杂度超了”问题。5.4 备战路线图如果你现在距离笔试还有两到三周的时间我建议按下面的优先级来复习数据结构基础数组、链表、栈、队列、哈希表、堆、二叉树务必掌握基本操作的代码实现高频算法排序快排、归并、堆排、二分查找、双指针、滑动窗口、DFS/BFS、动态规划背包/LIS/LCS、贪心字符串专项KMP重点 next 数组、前缀树Trie、字符串哈希机器学习基础KNN、K-Means、朴素贝叶斯、逻辑回归、决策树、随机森林、XGBoost 的原理和适用场景系统设计初步推荐系统冷启动、分布式一致性哈希、缓存淘汰策略。每天固定刷3到5道题每道题做完后写一行“这题考什么、用了什么数据结构、复杂度是多少”的备注。这个习惯能帮你建立题感到考场上看到题目就能快速归类到某个算法模板中。我当时就是用这个方法在一周之内把常见题型过了一遍效果比盲目刷题好很多。6. 写在最后我的几点体会准备算法工程师笔试很多时候不是天赋的比拼而是准备方法和信息密度的比拼。蘑菇街这套题能给你带来的启发是算法工程师的考察范围远不止“LeetCode刷题”还包括机器学习基础、业务理解能力和工程素养。如果你只按“算法竞赛选手”的标准来准备可能会在业务应用题上失分如果你只按“数据科学家”的标准来准备又会在代码题上吃亏。我个人实际操作中的体会是笔试不是看你“会不会”而是看你“在有限时间内能不能把会的部分稳定输出”。所以除了知识储备一定要做限时模拟练习最好能找一个安静的环境按真实考试的时间来做一整套卷子。我第一次限时模拟时编程题写到一半慌了神最后一题完全没写第二次模拟就好多了至少能把所有题都过一遍。这种“考试感”是刷题刷不出来的必须靠模拟来练。最后分享一个小技巧做笔试题的时候遇到不会的选择题不要空着先排除一两个明显错误的选项然后蒙一个。因为很多公司的笔试是“得分制”而不是“扣分制”空着等于自动放弃蒙一个还有概率拿分。这个技巧听起来很基础但在考场上真的能帮你多拿几分。希望这篇拆解对你有用。如果你正在准备算法岗的笔试不妨照着上面提到的考点清单做一份自己的复习计划然后找一套往年的真题做限时模拟。坚持两个星期你会明显感觉到做题速度和准确率的提升。