十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

小米2018秋招算法岗问答题复盘:从KMP到XGBoost的面试指南

小米2018秋招算法岗问答题复盘:从KMP到XGBoost的面试指南 马上又到秋招季,最近好几个准备投算法岗的师弟师妹来找我,说网上的资料多到爆炸,但真正能对上面试题型的整理却很少。我翻出自己当年整理的小米2018秋招算法工程师问答题合集,一边看一边感慨:那一年考的东西,放到今天依然是算法岗面试的主流框架。这份合集不是简单的一两道题的堆砌,而是把数据结构、机器学习、深度学习、图像算法、工程场景算法全部串在了一起,基本代表了当时互联网大厂算法岗笔试面试的考察范式。无论你是正在准备校招的学生,还是工作几年想跳槽的工程师,这份合集都能帮你快速定位算法岗到底在问什么、为什么这么问、该怎么答。这篇文章我会把这份合集按模块拆开,结合我自己的答题思路和后续复盘,尽量还原当年那些问答题背后的考察意图。有些题没有标准答案,但回答的姿势决定了面试官对你的判断,所以我会特别强调怎么答才不翻车。内容比较长,建议先收藏再慢慢看。1. 小米2018秋招算法岗问答题整体画像与出题逻辑1.1 题目覆盖范围从基础数据结构到业务场景先给这批问答题画个像。整体上,小米2018秋招算法工程师的题目可以分成五个大方向:基础数据结构与算法、经典机器学习、深度学习、图像与信号处理、以及偏工程业务的场景题。基础算法部分,字符串匹配是绝对高频,比如 KMP 算法的 next 数组怎么求、和暴力匹配相比到底优化了什么。排序算法也是必考,快排、堆排、归并这三兄弟几乎轮流登场,有的题还会让你现场写冒泡排序的 C 实现。再就是贪心算法、动态规划、快速幂、二分图匹配这类经典题,题目本身不难,但要求你把思路复杂度代码一次性讲清楚。机器学习部分,KNN、K-Means 聚类、粒子群算法、模拟退火、卡尔曼滤波、强化学习、XGBoost 这些名字都出现在合集里。深度学习则集中在图像分类、损失函数、优化器选择、过拟合处理这些方向。工程与业务方向更杂一点,音频重采样算法、PID 算法在电源系统中的作用、图像锐化的拉普拉斯算法、BM25、规则引擎 Drools 的 Rete 算法、井字棋 Minimax 算法,甚至二分图 HK 算法都被翻出来考过。你可能会问,算法工程师为什么要考这么多非典型算法的东西?原因很简单,小米的业务线覆盖手机、IoT、互联网服务、智能硬件,算法岗位不是只做推荐排序,图像、音频、控制、搜索都有人在做。面试官希望找到的不只是会刷题的人,而是能理解算法本质、能迁移到具体业务场景的人。1.2 面试官想通过题目筛选什么样的人我当年整理这些问答的时候,有个很强烈的感受:面试官出题并不是为了难倒你,而是在用题目做能力切片。第一刀切的是数学和逻辑基本功。比如 KMP 的 next 数组,背代码的人能写出来,但一问为什么失配时要跳到 next 位置,就直接暴露了有没有真正理解前缀后缀的概念。再比如粒子群算法,很多人知道速度更新公式里有个体认知和社会认知两项,但被问到惯性权重 w 取大取小分别有什么影响就卡住了。第二刀切的是工程落地能力。算法岗不是研究岗,很多时候需要你把模型跑起来、把系统调稳。所以面试官会问重采样算法的抗混叠滤波怎么处理,会问 PID 三个参数在真实电源系统里怎么调,会问 Rete 算法在规则数量膨胀时的内存优化。这些问题不是课本上的,纯背八股文根本答不全面。第三刀切的是沟通表达和知识迁移。一道题你用十分钟能想出来,和用三分钟能讲清楚,是完全不同的评价。面试官经常会在你答完之后追加一句那把这个问题改个条件,你怎么调整思路,这就是在看你能不能把已知方案迁移到新场景。所以下面每一道题,我都会按照题面参考思路踩坑点的结构来拆,帮你也练出这种迁移能力。2. 数据结构与基础算法问答拆解2.1 KMP算法与next数组一道题把字符串匹配讲透字符串匹配是算法岗面试的常青树,而 KMP 几乎可以说是字符串题里最经典的考点。小米2018秋招的合集里有一道很典型的题:给定模式串 pabacaba,求它的 next 数组。先说清楚 next 数组的定义,这里有个坑。不同教材对 next 数组的下标定义不完全一样,有的规定 next[i] 表示前 i 个字符组成的子串的最长相等真前缀后缀长度,有的规定 next[i] 表示以 i 结尾的子串的最长相等真前后缀长度。答题前先跟面试官确认定义,或者自己先声明我按哪种定义来,这一步很加分,因为它体现了工程沟通中的严谨性。按最常见的定义,next[i] 表示 p[0..i-1] 这个长度为 i 的前缀里,最长相等真前后缀的长度,人为规定 next[0]-1,next[1]0。我们手算一下 pabacaba:i2,前缀子串 ab,真前缀 a,真后缀 b,不相等,next[2]0;i3,前缀子串 aba,长度1时前缀 a 等于后缀 a,长度2时 ab 不等于 ba,所以 next[3]1;i4,前缀子串 abac,长度1 a 对 c 不等,直接为0,next[4]0;i5,前缀子串 abaca,长度1 a 等于 a,长度2 ab 不等于 ca,所以 next[5]1;i6,前缀子串 abacab,长度2 时 ab 等于 ab,长度3 时 aba 不等于 cab,所以 next[6]2;i7,前缀子串 abacaba,长度3 时 aba 等于 aba,长度4 时 abac 不等于 caba,所以 next[7]3。最终的 next 数组就是 [-1,0,0,1,0,1,2,3]。答题的时候,我建议你顺手把失配时的跳转过程也说了。KMP 的核心在于,当主串和模式串在位置 j 失配时,不需要回退主串指针,直接把模式串指针跳到 next[j] 继续比较。因为 next[j] 已经告诉了我们当前失配位置之前,最长的相同前后缀有多长,这部分已经匹配过了,不用重新比。用 abacaba 举例:如果匹配到第 7 个字符时失配,前面 abacab 的最长相等前后缀长度是 2,也就是 ab,那么模式串直接回到第 3 个字符 a 开始跟当前主串位置继续比,主串完全不回溯。这里有个我当年踩过的坑:学了基础版 KMP 之后,又遇到了优化版 nextval。基础版 next 数组在某些重复字符很多的模式下,比如 aaaaab,会出现无意义的跳转,nextval 做了进一步压缩。面试如果时间充裕,你可以主动补一句如果需要,我还能写出优化版 nextval 的构建过程,这会让面试官觉得你学得深,而不只是会背基础版。2.2 排序算法全家桶快排、堆排、归并怎么选排序算法在问答题里一般不会只让你背复杂度,而是会拿一个具体场景让你选型,再让你手写核心代码。合集里有一道很典型的题:冒泡排序的 C 实现是什么?和快速排序比,它为什么慢?冒泡排序的实现很直白,双层循环,外层控制轮数,内层做相邻比较和交换。每轮结束后,最大的元素就像气泡一样浮到末尾。时间复杂度稳定在 O(n^2),空间 O(1),稳定排序。它慢的根本原因是做了大量没有信息量的比较——很多比较结果并不会改变元素位置,却白白消耗了时间。回答这种题,不能只停在实现层面,要拿出选型对比的思维。我建议你心里装一张表,现场画给面试官看:算法平均时间复杂度最坏时间复杂度空间复杂度稳定性冒泡排序O(n^2)O(n^2)O(1)稳定快速排序O(n log n)O(n^2)O(log n)不稳定堆排序O(n log n)O(n log n)O(1)不稳定归并排序O(n log n)O(n log n)O(n)稳定这道题真正想考察的是:快速排序虽然平均复杂度是 O(n log n),但它的最坏情况是 O(n^2),原因是分区极度不平衡。所以工程里常用三数取中或随机选取基准来规避最坏情况。堆排序的空间复杂度是 O(1),但它的实际运行速度往往比快排慢,因为堆化过程对缓存的局部性很不友好。归并排序稳定、复杂度稳定,但需要 O(n) 的额外空间。所以答题的逻辑应该这样走:如果数据量小且对稳定性有要求,可以用插入排序或归并排序;如果数据量大且内存充足,归并排序是最稳的选择;如果内存受限且不要求稳定,堆排序更合适;如果数据分布比较随机,快排配随机基准是实测最快的通用方案。你把这些话讲出来,面试官就知道你不是在背课本,而是真的在工程里做过选型。2.3 贪心、动态规划、快速幂经典题型的答题框架这一节不是讲某一道具体的题,而是讲合集里反复出现的一类问法:什么是贪心算法?它和动态规划的区别是什么?以及快速幂算法的 C 实现思路是什么?贪心和动态规划的区别是校招高频题。我会这么答:贪心算法在每一步都做当前看起来最优的选择,期望最终结果也最优,它不回头看,也不保存子问题的多个状态;动态规划则会把问题拆成重叠子问题,用状态转移方程保存中间结果,最终通过递推得到全局最优解。一个经典的判断方法是看问题是否具有贪心选择性质和最优子结构:如果局部最优能推导出全局最优,才适合贪心;否则就得用动态规划。快速幂也是一个很好的以小见大的题。它的核心思想是把指数拆成二进制,比如计算 3^13,13 的二进制是 1101,也就是 3^13 3^8 * 3^4 * 3^1,这样原本需要 13 次乘法,现在只需要把底数不断平方,对应二进制位决定要不要乘进结果,时间复杂度从 O(n) 降到 O(log n)。C 实现时要注意用 long long 存结果并随时取模,防止溢出。回答这类题,我建议养成一个习惯:先给定义,再给适用条件,最后给一段伪代码或真实代码。这个三层结构在面试里特别好用,既能展示逻辑,又能展示代码能力。3. 机器学习算法核心问答原理、公式与场景3.1 KNN与K-Means聚类算法的原理、K值选择与距离度量机器学习的问答题里,KNN 和 K-Means 几乎是绑定的,因为它们名字像,但一个是监督学习,一个是无监督学习,非常适合放在一起考察你到底分没分清楚。先看 KNN。它的核心思想很简单:一个样本的类别由它最近的 K 个邻居投票决定。但问答题不会这么简单放过你,而是会追问三个细节。第一个是距离度量怎么选,欧氏距离适合连续数值特征,曼哈顿距离对噪声更鲁棒,余弦相似度适合文本向量这类高维稀疏数据。第二个是 K 值怎么选, K 太小容易过拟合,一个噪声点就能改变预测结果;K 太大又会让远距离样本参与决策,导致欠拟合,实践中一般用交叉验证选 K。第三个是要不要做特征归一化,如果不做,KNN 的结果会被量纲大的特征主导,因为距离计算对数值范围非常敏感。再看 K-Means。它的流程是:随机选 K 个中心点,把每个样本分到最近的中心,然后重新计算每个簇的中心,不断迭代直到中心不再变化。面试官爱问的几个点,我也列一下:K 值怎么选,常用肘部法则,就是画 K 和代价函数的曲线,找拐点;初始化怎么选,随机初始化容易陷入局部最优,所以 K-Means 被提出来,让初始中心尽量分散;怎么处理空簇,一般是重新随机初始化一个中心点。这两个算法还有一个共同的坑:特征尺度不一致时,距离计算会被大数值特征主导。所以回答完原理之后,一定要主动补一句实际用的时候,先做标准化,再跑聚类或 KNN。这句话会显得你有工程经验,而不是只会调包。3.2 元启发式算法粒子群、模拟退火的原理与使用边界看到粒子群算法原理和模拟退火算法出现在同一批热词里,我就知道这部分必须写。元启发式算法在校招里不是主流考点,但只要公司有优化需求,就一定会拿出来问,而小米的智能硬件和IoT业务里,这类题出现频率不低。粒子群算法的思想来自鸟群觅食。每个解被看作一个粒子,粒子有速度和位置,每一轮迭代时,粒子根据自己的历史最优位置 pbest 和全局最优位置 gbest 来更新速度,再更新位置。标准的更新公式是:v w * v c1 * r1 * (pbest - x) c2 * r2 * (gbest - x) x x v其中 w 是惯性权重,控制粒子维持原有速度的能力;c1 和 c2 是学习因子,分别控制向个体最优和全局最优学习的强度;r1 和 r2 是 [0,1] 之间的随机数。答题时不能只背公式,要能说出参数调优的感觉。w 取大,全局搜索能力强,粒子不容易陷入局部最优,但收敛慢;w 取小,局部开发能力强,收敛快,但容易早熟。c1 偏大会让每个粒子只顾自己探索,群体协作变弱;c2 偏大会让粒子太快涌向当前全局最优,可能错过更好的解。工程里常用线性递减的 w,先大后小,让前期多探索、后期多收敛。模拟退火算法则来自金属退火过程。它的核心是 Metropolis 准则:当新解比当前解好时,直接接受;当新解更差时,以概率 exp(-ΔE/T) 接受它,其中 ΔE 是能量差,T 是当前温度。这个以一定概率接受差解的设计,是为了跳出局部最优。温度越高,接受差解的概率越大;温度慢慢降下来,算法就逐渐收敛到稳定解。面试官如果要你比较两者,你可以这样答:粒子群是种群式搜索,并行性天然好,适合连续优化问题,但容易早熟;模拟退火是单点搜索,实现简单、有理论上的收敛性保证,但收敛速度偏慢,对参数(初始温度、降温速率)比较敏感。如果问题规模不大,我倾向先用模拟退火试;如果维度高、计算资源允许,粒子群往往更快找到好解。3.3 卡尔曼滤波与强化学习从状态估计到序列决策卡尔曼滤波也是合集里的熟面孔。乍一看它像是控制理论的内容,但推荐系统、金融时序、机器人定位里都在用,所以算法岗考它并不超纲。回答卡尔曼滤波,我建议抓住预测更新两个阶段。预测阶段用上一时刻的状态和运动模型,预测当前时刻的状态和协方差;更新阶段用当前观测值去修正预测结果,修正的程度由卡尔曼增益 K 决定。K 的计算本质是在预测的不确定性和观测的噪声之间做权衡:如果观测噪声小,K 就大,更相信观测;如果预测已经很准,或者观测噪声大,K 就小,更相信预测。用生活化类比来解释就是:你闭着眼睛猜自己现在走到哪了,这是预测;睁眼看到一个路标,这是观测;卡尔曼滤波就是帮你决定该信自己走了多少步,还是该信看到的这个路标,并根据两者各自的误差动态调整信任比例。这样讲,面试官会立刻觉得你是真懂。强化学习在2018年的秋招里已经很火了,问答题一般会考基本概念和 Q-Learning 流程。你需要说清楚五个要素:状态 S、动作 A、奖励 R、策略 π、值函数 V 或 Q。然后是 Q-Learning 的更新公式:Q(s,a) Q(s,a) α * [r γ * max_a Q(s,a) - Q(s,a)]α 是学习率,γ 是折扣因子。回答的时候要顺带解释 γ 的含义:γ 越接近 1,越重视长期收益;γ 越接近 0,越短视,只看眼前奖励。这个点经常被追问,值得提前准备。3.4 从LR到XGBoost模型演进线怎么答才出彩机器学习算法的问答题里,有一个非常经典的问题:讲一下 XGBoost 的原理,它和 GBDT 有什么区别?这类题其实是模型演进线的变体,面试官想听的不是你背下来的单个模型,而是你能不能把从逻辑回归到树模型的演进逻辑讲通。我建议这样组织回答:逻辑回归是线性模型,简单、可解释、训练快,但表达能力有限,需要手动做大量特征工程。GBDT 用加法模型加前向分步算法,每一棵树拟合前面的负梯度(残差的近似),把多个弱学习器组合成强学习器,但它对损失函数的要求比较高,正则化手段也比较有限。XGBoost 做了几件关键的事:对目标函数做二阶泰勒展开,比 GBDT 只用一阶信息更精确;在目标函数里显式加入了对叶子节点数和叶子权重的正则项,控制过拟合;支持列采样和行采样,类似随机森林的思路;在特征分裂时用近似直方图算法加速。所以 XGBoost 不是简单地把 GBDT 换了个实现,而是在目标函数、正则化、工程优化上都做了升级。这种回答方式,面试官得到的不只是 XGBoost 的知识点,而是你理解整个模型演进脉络的能力。我后来复盘发现,只要能把一条线讲清楚,哪怕细节少一点,面试评价都比我知道 XGBoost 用了二阶导这种零散说法高很多。4. 深度学习、图像与工程场景算法拆解4.1 图像处理算法Sobel、拉普拉斯与图像分类图像算法是小米算法岗的重点方向,因为手机摄影、智能硬件都离不开。合集里有一道跟图像锐化相关的题,正好对应热词里的图像锐化的拉普拉斯算法和Sobel 算法。Sobel 算子本质是一个离散的微分算子,用来近似图像的梯度。它用两个 3x3 卷积核分别计算水平方向和垂直方向的梯度,然后合成梯度幅值。梯度幅值大的位置就是边缘。回答时要强调,图像可以看成离散的二维函数,Sobel 算子就是在这个离散函数上做一阶求导,水平核核垂直核分别是:Gx [[-1,0,1],[-2,0,2],[-1,0,1]] Gy [[-1,-2,-1],[0,0,0],[1,2,1]]拉普拉斯算子则是二阶微分算子,核通常是:[[0,1,0],[1,-4,1],[0,1,0]]它有一个特点:对噪声比 Sobel 更敏感,因为它做了两次微分,噪声也被放大了。图像锐化的经典做法是:原图减去(或加上)拉普拉斯算子作用后的结果。平滑区域的二阶导接近0,边缘处二阶导有正负响应,锐化后边缘对比度被加强,图像看起来更清晰。图像分类算法这块,面试官一般会问 ResNet 为什么能训练得这么深,答案是残差结构。残差结构让网络在恒等映射附近做增量学习,梯度可以通过捷径连接直接回传,有效缓解了深层网络的梯度消失问题。回答时可以对比 VGG 的堆叠结构,说明残差连接对梯度流动的意义。4.2 信号控制与音频算法重采样、PID和FOC小米的业务里有大量智能硬件、电源管理、电机控制场景,所以 PID 算法、FOC 算法、MPPT 算法这些非典型算法岗题目,其实比很多人想象中更贴近真实业务。PID 算法的原理大家相对熟悉,比例项 P 根据当前误差给出即时响应,积分项 I 累积历史误差消除稳态误差,微分项 D 根据误差变化趋势进行预测,抑制超调。但问答题会往业务深处走,热词里PID算法在CRPS PSU Power的作用就是一个典型。CRPS 是常见冗余电源的标准,PSU 是电源单元。在电源系统里,PID 的作用是维持输出电压稳定:负载突然变化时,电压会跌落或过冲,PID 控制器根据电压误差实时调整开关管的占空比,让输出快速回到目标值。回答时如果能把P 决定响应速度,I 消除稳态误差,D 抑制振荡和电源负载瞬态响应联系起来,面试官会非常认可。FOC(磁场定向控制)是电机控制里的主流算法,核心是把三相交流电机的电流分解成励磁分量和转矩分量,分别控制,从而获得类似直流电机的控制体验。MPPT(最大功率点跟踪)常见于光伏系统,算法会根据电压和电流的变化,动态调整工作点,让系统始终输出最大功率。这类题不需要你背很深,但你要能说出为什么要用这个算法以及它在系统里承担什么角色,这体现的是系统思维。音频重采样算法在合集里也有出现。重采样就是改变采样率,比如从 44.1kHz 转到 48kHz。直接插值和抽取会因为频谱混叠产生噪声,所以正确做法是先做带限滤波,再用线性插值或更高阶的插值方法。回答时提到抗混叠滤波四个字,就抓住了关键点。4.3 业务场景算法BM25、Rete规则引擎与博弈树搜索和推荐相关的问答题里,BM25 是必须认识的名字。它是信息检索领域最经典的排序函数之一,对查询词和文档的相关性打分。BM25 的核心是在 TF-IDF 的基础上做了改进:词频不是线性增长,而是通过参数 k1 控制饱和速度;同时引入文档长度归一化,避免长文档天然占便宜。公式大致是:score(D,Q) Σ IDF(qi) * [ f(qi,D) * (k11) ] / [ f(qi,D) k1 * (1 - b b * |D|/avgdl) ]其中 f(qi,D) 是词 qi 在文档 D 中的词频,|D| 是文档长度,avgdl 是平均文档长度,k1 和 b 是调节参数。回答的时候要讲清楚两个直觉:k1 控制词频的饱和程度,b 控制文档长度惩罚的力度。规则引擎 Drools 的 Rete 算法,属于偏工程方向的算法题。Rete 算法要解决的核心问题是:大量规则和大量事实匹配时,如何避免每条规则都把所有事实重新匹配一遍。它的做法是把规则编译成一个有向无环图,包括 Alpha 网络和 Beta 网络:Alpha 网络用来做单条件匹配,Beta 网络用来做跨条件的连接和共享。事实进入网络后,在节点之间流动,已经匹配过的中间结果会被缓存,这样新增事实时只需要增量更新,不需要全量重算。回答时只要抓住共享 缓存 增量这三个关键词,框架就不会跑偏。博弈树相关的题里,井字棋的 Minimax 算法很适合作为入门。Minimax 的思路是:双方都假设对手会做出对自己最不利的选择,所以当前行动方会选择最坏情况下最好的结果。井字棋的搜索空间很小,完全可以用 Minimax 穷举所有局面。如果题目延伸到位,你还能补充 Alpha-Beta 剪枝:在搜索过程中如果发现某个分支已经不可能比当前最优解更好,就剪掉它,大幅减少搜索节点数。5. 面试心态、答题技巧与复盘建议5.1 常见翻车点与应对策略整理这份合集的过程中,我总结了几个高频翻车点,拿出来给大家提个醒。翻车点一:知道公式,但说不清公式每一步的含义。粒子群算法的公式背得滚瓜烂熟,但被问到这里乘的随机数有什么用就卡壳。实际上 r1 和 r2 的作用是引入随机性,让粒子搜索不要过于确定,有探索的余地。对策很简单,复习时一定要把公式里的每个变量都用一句话解释清楚。翻车点二:被追问就慌,不会向上抽象。比如面试官先问 K-Means,然后追加如果数据不是凸簇怎么办。其实他想听的是K-Means 基于欧氏距离,本质上假设簇是凸的;如果是非凸簇,可以考虑 DBSCAN 或谱聚类。这就是一次典型的从单点知识向上抽象到多个算法对比的能力测试。我建议你按主题整理对比表,比如聚类算法对比、优化算法对比、树模型对比,面试前过一遍。翻车点三:只讲原理,不讲落地。问 PID 怎么调参,你不能只说比例、积分、微分,要说清楚实战流程:先设 I 和 D 为 0,只加 P,增大到系统开始振荡,然后取当前值的 0.6 倍左右作为最终 P;再加 I 消除稳态误差,最后加 D 抑制超调。这种实操型细节,面试官一听就知道你动手调过。翻车点四:自我介绍背简历,浪费了第一印象。面试官让你自我介绍,不是真想听你念一遍项目,而是在给你机会设置提问钩子。你讲项目时,可以故意提一句这个项目里我用了粒子群算法调优参数,效果比网格搜索好不少,面试官大概率会顺着往下问,你就有机会把准备好的内容讲出来。5.2 我的复盘这份合集留给后来者的几条经验最后分享几个我回头看这份合集时最强烈的感受。第一,算法岗面试的广度比想象中大得多。很多人只刷 LeetCode,却忽略了业务场景算法这类题。小米2018秋招的问答题里,有一大批和电源、电机、音频、搜索、规则引擎相关的题,这些都需要平时积累。我建议大家不要只盯着互联网大厂的推荐算法岗,多看一些硬件和 IoT 公司的算法面经,知识面会更完整。第二,手推公式是基本功,但不是全部。机器学习面试很多公司会让你推逻辑回归的梯度公式、推 SVM 的对偶问题,但推完之后,面试官更关心你能不能讲清楚这个公式在工程里遇到问题怎么办。比如你推完 XGBoost 的目标函数,他会问你如果特征里有缺失值,树模型在分裂的时候怎么处理?这已经不是公式问题了,而是对算法工程实现的理解。第三,现场写代码一定要先讲思路,再动手写。算法岗面试写代码,最忌讳拿到题就闷头写。先跟面试官说清楚你的思路、复杂度、可能的问题,然后再写,边写边解释。哪怕最后代码没写完,只要思路清晰,面试官通常也会给不错的评价。我见过很多候选人代码能力很强,但因为不说话、不互动,反而给面试官留下沟通吃力的印象。第四,错题本比新题本更重要。现在网上各种面经题库多到刷不完,但真正提升面试水平的,是你把每道答不好的题都记录下来,写明当时哪里卡住了、正确答案是什么、下次遇到同类的题怎么迁移。这份小米2018秋招算法工程师问答题合集我之所以一直留着,就是因为它不仅是一份题单,更是一份记录了我当时踩坑和补救过程的资料。我的建议很简单:你可以把这篇文章当作索引,把其中提到的每个算法都自己写一遍、推一遍、讲一遍,然后整理出属于你自己的问答版本。面试没有标准答案,但准备充分的回答,一定会让你比大多数人更从容。
返回列表