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

资讯详情

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

2024秋招OPPO AI/算法岗笔试全攻略:考点拆解与编程题实战

2024秋招OPPO AI/算法岗笔试全攻略:考点拆解与编程题实战 秋招季最刺激的事情就是你永远猜不到目标公司的笔试题会从哪个角度“问候”你。2024年秋招我投了OPPO的AI/算法岗笔试是在线上规定时间完成的整体感受可以用八个字概括范围大、题量大、区分度高。如果只看面经很多人会说OPPO笔试“偏机器学习理论”但实际做下来会发现数据结构和算法基本功的占比一点都不低编程题才是真正拉开差距的地方。这篇内容我围绕2024秋招OPPO AI/算法岗笔试的完整经历来梳理从考试形式、考点分类、编程题实战思路到常见坑点一次性讲清。无论你是2025届正在备战的应届生还是打算后续投递算法岗的低年级同学这篇都能作为一份相对完整的备战参考。重点会讲清楚每个考点“为什么考”和“怎么准备”而不是单纯罗列题目。1. 笔试整体情况与题型分布1.1 考试形式与平台实操OPPO的秋招笔试用的是第三方在线考试平台整体流程是收到邮件通知–约定时间段内登录–开启摄像头监控–在网页编辑器里完成答题。我记得当时是10道左右的选择题加上3道编程题总时长大概90分钟到120分钟具体时间会依据岗位方向略有差别。AI/算法岗和纯软件开发岗的卷子不太一样算法岗的选择题里机器学习、深度学习占比明显更高。这里有一个容易忽略的细节笔试平台支持本地IDE写代码但最终提交必须要粘贴到平台自带编辑器中。很多人习惯本地跑通后直接复制却忽略了平台对代码格式、输入输出的要求。OPPO的编程题采用ACM风格需要自己处理标准输入输出和LeetCode那种只填核心函数的方式完全不同。建议提前去牛客网熟悉一下这种OJ模式的写题节奏尤其是while(cin n)或者input().strip()的读取方式不要因为输入解析卡住导致AC不了。1.2 题目构成与考察范围从题型分布来看选择题部分覆盖了线性代数、概率统计、机器学习基础、深度学习基础、数据结构算法等几大块。其中机器学习基础题占比最高像偏差方差分解、正则化作用、过拟合处理手段这类题基本是必考。深度学习方向则会问到CNN感受野计算、BatchNorm作用、常见激活函数的优缺点等。编程题部分则是经典的三道题配置第一题偏简单通常是字符串处理或模拟第二题中等常见的是贪心、动态规划或图论第三题难度明显上一个台阶往往需要结合多个知识点甚至可能是需要优化的搜索或DP问题。整张试卷做下来的直观感受是选择题拼的是知识面和工作经验积累而编程题拼的是刷题量和代码熟练度。前者可以短期突击后者需要足够的时间储备。2. 核心考点拆解数据结构与算法基础2.1 KMP与字符串匹配next数组手工演算字符串匹配是笔试选择题里的常客而KMP算法中next数组的求解几乎每次都会出现。比如网上经常看到这样一道题“对于模式串p‘abacaba’其next数组是多少”这种题考察的是你对前缀函数定义的真正理解而不是死记硬背模板。以p abacaba为例我用常见的next数组定义即失配时模式串回退的位置从0开始计数来演算一遍。首先要明确next[i]表示“前i个字符组成的子串中最长相等前后缀的长度”但工程实现上有时会把next[0]置为-1或0不同教材定义略有差异考试时先看清题目给的是哪种。i 0子串“a”没有真前后缀next[0] 0若题目采用-1初始化的版本则通常整个数组会整体偏移一种风格。i 1子串“ab”前缀“a”后缀“b”不相等next[1] 0。i 2子串“aba”前缀集合{“a”, “ab”}后缀集合{“a”, “ba”}最长公共前后缀是“a”长度为1next[2] 1。i 3子串“abac”前缀集合{“a”, “ab”, “aba”}后缀集合{“c”, “ac”, “bac”}无公共前后缀next[3] 0。i 4子串“abaca”公共前后缀为“a”长度1next[4] 1。i 5子串“abacab”最长公共前后缀是“ab”长度2next[5] 2。i 6子串“abacaba”最长公共前后缀是“aba”长度3next[6] 3。所以p abacaba的next数组为[0, 0, 1, 0, 1, 2, 3]。这里有一个常见误区很多人会把next[i]当成“当前位置之前的最长前缀长度”忽略了它本质上比较的是前i个字符内部的对称性。考场上如果想快速验证可以直接手写一个前缀函数模拟跑一遍原串就能确认。KMP这块的备考建议是不仅会求next数组还要能够解释为什么失配时可以直接跳转以及next数组和自动机的关系。面试环节经常会追问这些。2.2 排序算法高频对比排序算法在选择题中属于送分题但OPPO的出题方式往往不是直接问“快排的时间复杂度”而是给出一个具体序列问你“经过一趟快排后数组的状态是什么”或者“下列哪个排序算法在最坏情况下时间复杂度为O(n²)且不稳定”。这类题要求你对排序过程本身足够熟悉而不只是记住结论。我整理了一张常考对比表基本覆盖笔试高频排序排序算法平均时间复杂度最坏时间复杂度空间复杂度稳定性冒泡排序O(n²)O(n²)O(1)稳定选择排序O(n²)O(n²)O(1)不稳定插入排序O(n²)O(n²)O(1)稳定希尔排序O(n log n)/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)不稳定备考时要特别注意稳定性和空间复杂度这两个维度这是最容易出多选题的点。比如归并排序虽然时间和快排同为O(n log n)但它额外占用O(n)的辅助空间所以在大规模外部排序场景中应用广泛。还有一类高频变形题在一个基本有序的数组中哪种排序算法效率最高答案是插入排序因为它的最好时间复杂度可以达到O(n)。这种题目在真实业务中也常见比如日志数据按时间增量排序、需要“打补丁式”地插入新数据时插入排序的方案往往比直接快排更高效。2.3 贪心、动态规划、位运算的考法算法类选择题除了基础数据结构外还喜欢考察“算法设计策略”的判断题。比如给出一段问题描述让你判断该用贪心还是动态规划或者给出递推方程让你计算时间复杂度。这里的高频考点包括贪心算法区间调度问题按结束时间排序、霍夫曼编码、最小生成树中的Prim和Kruskal算法。常考判断题是“贪心是否能得到全局最优解”关键要识别贪心选择性质和最优子结构。动态规划0/1背包、最长公共子序列LCS、最长递增子序列LIS。笔试选择题一般不会让你完整手写DP方程而是会给出dp数组的中间状态让你推导下一步的值。位运算异或交换、判断2的幂、统计二进制中1的个数Brian Kernighan算法。这类题在笔试中很简单但很容易因为不熟悉位运算优先级而算错。举个我在OPPO笔试中印象深刻的判断题给定一组区间求最大不相交区间数量。如果直接按区间长度排序然后贪心选最短的其实是错的正确做法是按结束时间排序每次选结束最早的区间。这类“反直觉”考点就是笔试用来区分“背题党”和“真懂原理”的常用手段。3. 机器学习与深度学习理论考点3.1 传统机器学习核心概念传统机器学习的选择题考察非常细致基本覆盖监督学习、无监督学习、模型评估与选择几大块。OPPO作为手机厂商招聘算法岗时对业务落地能力很看重所以“模型评估”相关的题几乎必考。过拟合与欠拟合偏差-方差分解。当模型在训练集上表现很好但验证集表现差时高方差是原因两者都差则是高偏差。正则化L1/L2、交叉验证、早停法、Dropout都是控制过拟合的常见手段。精确率、召回率、F1、AUC正负样本不平衡时准确率Accuracy会失效此时要看AUC和PR曲线。这里考过一个经典判断题在样本极度不平衡时AUC仍然能有效评估模型性能而准确率可能虚高。特征工程与降维PCA和LDA的区别。PCA是无监督的找的是方差最大的投影方向LDA是有监督的目标是类间距离最大、类内距离最小。我建议备考时把《统计学习方法》前几章的课后习题刷一遍尤其是感知机、KNN、朴素贝叶斯、决策树、SVM这些基础模型。笔试很少直接让你推公式但经常会问“哪些模型对特征尺度敏感”像SVM、KNN、K-means这类基于距离的模型对尺度敏感而决策树和基于树模型的方法则不需要特征归一化。这种题看起来简单但做错的人非常多。3.2 深度学习与Transformer重点深度学习部分的选择题会更贴近当前技术热点。2024年秋招时AI大模型已经是标配话题所以Transformer结构、注意力机制、位置编码等知识点出现在笔试题里并不意外。几个高频考点注意力机制Self-Attention的计算过程Q、K、V三个矩阵的维度关系Softmax(QK^T / sqrt(d_k))V中为什么要除以sqrt(d_k)。原因是当维度较大时点积结果的方差会变大导致Softmax梯度消失除以sqrt(d_k)可以稳定梯度。Transformer与RNN/LSTM的区别并行计算、长距离依赖建模能力、全局感受野。选择题通常会让选“Transformer的优势在于能够并行计算且更好捕捉长距离依赖”。CNN基础感受野计算、卷积后特征图尺寸变化、1x1卷积的作用降维和信息融合。手机上做影像算法的同学面试中也经常被问到这里。深度学习选择题的备考资料我比较推荐李宏毅老师的课程讲义和《动手学深度学习》中关于注意力机制的部分。不需要把底层推导全部手动跑通但至少要对每个模块的输入输出形状、数学表达式有清晰印象。3.3 优化算法与损失函数考点优化器和损失函数在笔试中经常以“概念辨析”的形式出现不会让你手推但会考察你是否理解它们的作用和区别。高频内容有梯度下降变体SGD、Momentum、AdaGrad、RMSProp、Adam的对比。Adam结合了动量和自适应学习率的优点收敛速度快且对超参数不那么敏感但在某些情况下泛化能力可能不如SGD。常见损失函数交叉熵、均方误差MSE、Hinge Loss、Focal Loss。特别注意分类问题中CrossEntropy和MSE的差异MSE配合Sigmoid容易导致梯度消失原因是Sigmoid导数在饱和区接近于0而交叉熵配合Softmax的梯度形式更简洁稳定。KL散度和ELBO的关系。热度词里的“kl elbo算法原理详解”就指向VAE方向。KL散度定义为KL(p||q) Σ p(x) log(p(x)/q(x))它是不对称的且恒大于等于0。VAE中通过最大化ELBO来近似最大化对数似然ELBO 对数似然 - KL散度。笔试常考判断题是“KL散度是否可以作为距离度量”答案是否定的因为不满足对称性和三角不等式。备考思路是把自己熟悉的模型逻辑回归、神经网络的损失函数优化器组合完整过一遍做到“看到问题就能说出选择原因”的程度。3.4 经典启发式算法与常见的“扩展题”除了主流深度学习和机器学习OPPO笔试偶尔也会出现一些经典启发式算法的选择题比如粒子群算法PSO、模拟退火算法、遗传算法。这些内容通常不在学校课程的必修范围内但会出现在“算法岗综合能力”的考察中。粒子群算法的核心是“个体更新自己的位置和速度结合个体最优与群体最优”。选择题可能会问PSO中参数w惯性权重增大对搜索行为有什么影响答案是增大全局搜索能力减小则有助于局部搜索。模拟退火算法的关键点是“以一定概率接受更差的解”这个概率与温度T有关温度高时接受概率大随着温度降低逐渐趋于0。这类题如果你是第一次见容易懵但只要记住“启发式算法就是为了避免陷入局部最优而引入随机性”这个核心思想大部分判断题都能选对。顺带提一句有些笔试还会出现“音频重采样算法”“Rete算法”这样的工程算法名称这反映出厂商对岗位的细分诉求。AI/算法岗并不是只做模型训练工程侧的算法能力同样被看重。遇到这种非主线考点先快速判断是否在自己的知识范围内不要在不会的题上耗太久。4. 编程题实战从读懂题意到稳定AC4.1 OPPO编程题的风格与难度编程题是我认为整场笔试区分度最高的部分也是决定能否进面试的关键。OPPO的编程题风格不会太偏门大多是LeetCode中高频题型的变体。第一题通常是字符串或模拟类题第二题基本是贪心或DP第三题则可能比较综合甚至需要你结合二分贪心、BFS状态压缩这类进阶思路。与LeetCode不同的是笔试题的输入输出需要使用标准IO且题意描述往往更长需要快速提取关键条件。有些题看起来很长实际解法很简单有些题短小精悍但暗藏不少边界条件。因此读题能力比写题能力更先受到考验。我的习惯是先读输入输出样例理解数据范围再回头读题面约束条件。数据范围往往直接决定了算法的复杂度上限——如果n≤10^5那O(n²)大概率过不了如果n≤20那就该往状态压缩或搜索方向想。4.2 典型题目解题示例含代码讲一道我在模拟练习中觉得和OPPO笔试风格非常接近的题目“合并区间”。给定若干区间合并所有重叠区间。这题在LeetCode上是中等难度但笔试题会增加一个限定输入区间不一定按左端点有序且区间数量可达10^5。解法是排序贪心def merge(intervals): if not intervals: return [] intervals.sort(keylambda x: x[0]) res [intervals[0]] for l, r in intervals[1:]: if l res[-1][1]: res[-1][1] max(res[-1][1], r) else: res.append([l, r]) return res核心思路按左端点排序后如果当前区间的左端点小于等于结果中最后一个区间的右端点说明发生了重叠更新右端点为两者较大值否则直接加入新区间。复杂度为O(n log n)主要耗时在排序。这道题在笔试中的变体很多例如“合并会议时间并输出空闲时间段”“给定若干课程时间判断能否全部参加”等。备考时建议把LeetCode上的区间类题目全部刷一遍比如Non-overlapping Intervals、Insert Interval覆盖所有变体思路。再举一道易错题“最长连续序列”。给定一个未排序的整数数组找出最长连续序列的长度。要求O(n)时间复杂度。解法是利用哈希表去重然后只从连续序列的起点开始向后遍历def longestConsecutive(nums): num_set set(nums) longest 0 for num in num_set: if num - 1 not in num_set: cur num length 1 while cur 1 in num_set: cur 1 length 1 longest max(longest, length) return longest这道题考察的是对哈希表灵活运用的能力。如果笔试时看到“连续”“线性时间复杂度”这种字眼基本可以锁定哈希表方向。我当时的做题顺序是先做有把握的简单题把分数拿到手再攻中等题最后留时间读难题。千万不要在第三题上死磕到底导致前面该拿的分没拿到。4.3 复杂度控制与边界处理编程题最容易翻车的地方其实不是算法本身而是边界条件。以“数组区间合并”为例常见边界处理包括输入为空、只有一个区间、区间完全覆盖、区间完全不相邻右端点1和左端点相等是否视为重叠要看题目定义。这些场景在测试用例里几乎必然出现没有处理好的话即使核心逻辑正确也无法AC。另一个高频踩坑点是整数溢出。笔试中如果涉及数组索引计算、面积计算、累加和等建议直接用Python或者Java的long/int64避免出现C中int溢出导致的错误。还有多组输入的处理如果题目说明“输入包含多组测试用例”那么代码最外层需要套一层循环否则只能过第一个用例。这些细节看似不起眼但几乎每年都有大量考生因此丢分。5. 综合题与业务场景设计题5.1 概率统计与数学基础题型选择题里大概率会出现概率统计和线性代数的题目。OPPO作为硬件互联网复合型厂商算法岗不仅做搜索推荐还涉及影像、语音、IoT多个方向所以数学基本功会被重点考察。常见概率题包括条件概率与贝叶斯公式如“某种疾病的检出率为99%误检率为1%人群发病率0.1%求检测阳性时真正患病的概率”。期望与方差计算给出一组随机变量的分布列求期望。常见分布的性质正态分布、伯努利分布、泊松分布。选择题常问“泊松分布的期望和方差是多少”答案是两者相等都等于参数λ。线性代数部分多以矩阵运算、特征值特征向量、矩阵秩与可逆性为主。备考时掌握特征值分解和SVD的基本性质即可重点放在“矩阵可逆的充要条件”“实对称矩阵可正交对角化”这类概念性判断上。5.2 业务场景设计题的答题思路有一些选择题会以一种“场景可选方案”的形式出现题干往往很长。比如在手机相册场景中要做“相似图片去重”应该采用哪种特征提取方式这种题没有唯一答案但能看出你对方案的权衡能力。我的答题原则是优先考虑工程上的可行性和计算效率再考虑精度。对于手机端场景计算资源和内存有限通常会优先选择轻量级模型或传统特征方法而不是直接上一个大模型。因此遇到“移动端部署”相关的选项时带“轻量化”“量化”“蒸馏”等字眼的方案往往是更优解。这类题目更考验你对业务约束的理解而不只是看模型效果。5.3 模型评估与调优常规问题模型评估在业务场景中的考察也很常见尤其是数据不平衡、线上A/B测试、模型监控与更新等方向。笔试选择题常考正负样本比例严重失衡时以下哪种评估指标最合适AUC或PR曲线线上模型效果变差可能是由什么原因导致的数据分布漂移、特征缺失率变化、业务策略调整等新增特征后模型在离线测试集上AUC提升可以直接上线吗不能需要经过A/B测试验证还有一类题会考察“学习率设置不当”会导致什么现象学习率过大loss震荡甚至不收敛学习率过小收敛速度慢训练时间拉长。这些知识点在面试时被追问的概率也很高笔试阶段打牢基础后面能省不少时间。6. 准备策略与避坑经验6.1 一套靠谱的备考路线回顾整个秋招笔试准备过程我认为最有效的是“三轮复习法”。第一轮是基础补全时间大概2到3周。把数据结构数组、链表、栈、队列、树、图、堆和基础算法排序、二分、双指针、递归完整过一遍配合LeetCode HOT 100中的简单题和中等题练习。目标是做到看见题目能迅速判断考点。第二轮是机器学习与深度学习理论的系统梳理时间大概1到2周。以《百面机器学习》和《统计学习方法》为主要参考把特征工程、模型评估、经典模型、优化方法、深度学习基础全部过一遍。这里一定要结合自己做过的项目去理解不要死记硬背公式。第三轮是真题模拟与查漏补缺时间大概1周。在牛客网上刷各大厂的历年笔试题尤其是OPPO、vivo这些手机厂商的题目感受出题风格。每次模拟都要严格按照考试时长来训练做题节奏。这个过程不能省因为很多坑只有亲身体验过才会长记性比如读题慢导致时间不够、IO解析出错、忘了处理多组输入等。6.2 笔试过程中的时间管理与心态笔试时间有限合理分配是关键。我的策略是拿到试卷先快速扫描所有题目大致判断难易分布然后按照“易–中–难”的顺序来做。选择题如果30秒内没有思路先标记跳过做完其他题再回来蒙一个不要在一道题上耗太多时间。编程题遵循“先暴力拿分再优化”的原则如果难题的正解一时想不出来可以先写一个能过部分测试用例的暴力版本至少保证有分。心态方面秋招笔试遇到不会的题太正常了关键是不要慌。OPPO的笔试比较看重综合能力一两个选择题答错并不致命。坚持把所有会做的题做完编程题尽量提交就有机会进入下一轮。6.3 考后复盘与面试衔接笔试结束并不意味着可以放松。我强烈建议当天晚上就对答案、复盘错题把不会的知识点整理成文档。一方面可以帮助准备后续其他公司的笔试另一方面很多笔试考点会无缝衔接到面试中。例如你笔试中遇到的场景设计题面试官很可能换个角度再问一遍“如果让你设计一个端侧图像分类方案你会怎么做”笔试时你没有认真思考过这道题面试自然会慌。复盘时可以按照“题目类型–考点–错误原因–正确解法”的格式整理成一个表格考前集中看一遍比盲目刷题高效得多。这个过程还有一个额外的好处它能把零散的知识点串成一张知识网络让你在写简历项目描述、梳理个人技术栈时更加有逻辑。我自己在复盘时就发现笔试中关于“数据不平衡的处理方式”这个考点反复出现于是我专门整理了一页笔记包括重采样、代价敏感学习、Focal Loss、异常检测思路结果后面的面试真的被问到了。这种“考后归纳”带来的复利效应远比多刷几套题更值得投入时间。7. 写在最后的一点感受秋招笔试本质上是一场“高密度基础能力测试”它不会像面试那样深挖你的项目细节但会用最短的时间检验你的知识储备是否扎实。OPPO这轮AI/算法岗笔试给我的最大启发是算法岗并不只是“会调模型”数据结构和编程功底是下限机器学习和深度学习理论决定上限而场景设计题则考察你是否具备工程化思维。如果你正在准备接下来的校招我建议把刷题贯穿整个准备周期每天保持至少2道LeetCode或牛客网题目的输入同时利用碎片时间过机器学习基础概念。笔试是进入面试的第一道关卡它不要求你完美但要求你在规定时间内尽量多拿分。提前把知识网络织好到考场上才能从容应对。
返回列表