每年秋招季,研发岗笔试都是大家最关心的一关。2023年OPPO秋招研发岗笔试我完整走了一遍,从投递简历到收到笔试通知,再到线上双机位答题,整个过程有不少值得复盘的地方。这篇文章就结合我的实际经历和当时一起准备的同学们反馈,把整套笔试拆开来看,包括题型结构、考点侧重、做题策略、备考重点,给后面要参加类似大厂研发笔试的朋友一份可以直接参考的实战经验。
1. 2023年OPPO研发岗笔试的整体情况
1.1 笔试形式与流程
OPPO秋招研发岗笔试用的是在线笔试系统,全程双机位监控,一台电脑主机位答题,一部手机侧后方监控,这个模式在2023年秋招里属于标配。正式答题前有身份验证和环境检测环节,需要提前准备好身份证件,周围环境要安静、光线充足,桌面上除了草稿纸、笔和必要的水以外不建议放其他东西,监考系统会做环境扫描。
整个笔试时长一般是两个小时左右,不过不同岗位方向会略有差异。我当时投的是后端研发方向,实际登录系统后看到的倒计时是120分钟。系统会提前10分钟开放登录,建议不要卡着点进,提前完成设备检测、摄像头调试这些操作,避免因为环境问题耽误正式答题时间。
注意:在线笔试系统对浏览器版本有要求,一般推荐Chrome或者Edge,用旧版浏览器很可能出现代码编辑器加载异常或者题目显示不全的问题。建议提前一天在自家电脑上跑一遍模拟环境,把这个问题彻底规避掉。
笔试整体节奏非常紧凑,几乎没有多余时间反复检查。这也意味着考前对知识点熟悉程度的要求很高,不能一边做题一边回忆八股文。
1.2 题型构成与分值分布
从2023年OPPO秋招研发岗笔试的题型来看,大体分成三块:
| 题型 | 题量 | 分值占比 | 主要考查内容 |
|---|---|---|---|
| 编程题 | 2~3道 | 50%~60% | 数据结构与算法,偏工程应用场景 |
| 计算机基础选择题 | 20道左右 | 30%~40% | 操作系统、计算机网络、数据库、Java/C++基础 |
| 逻辑与思维题 | 少量 | 5%~10% | 脑筋急转弯类、推理类、开放性问题 |
不同岗位方向(后端、前端、客户端、算法等)在选择题构成上会有差异,比如算法岗会更侧重机器学习和数学基础,前端岗会在浏览器渲染、JavaScript特性上多出几道题。但整体框架是类似的。编程题是拉开差距的核心,基础选择题决定能不能进入下一轮,思维题更像一个锦上添花的参考项。
把往年几次笔试的题目放在一起看,OPPO笔试风格整体偏"稳",不会刻意出偏怪难题,难度更多体现在"题量大、时间紧"上。基础题覆盖范围广但不算很深,编程题则是中等偏上难度,比较考验对常见算法模板的熟练度和能不能快速建模。
2. 核心考点与题目类型深度拆解
2.1 编程题:在有限时间内验证基本功
编程题是整场笔试最核心的部分,两道题基本能决定你是否进入下一轮。从我做过的题和周围同学的反馈看,OPPO研发岗编程题偏重这几个方向:
字符串处理类。比如给一个字符串,要求按照某种规则压缩或展开;或者在字符串中寻找满足条件的最长子串。这类题本身算法难度不高,但非常考验边界处理能力。常见的坑包括空字符串、全相同字符、超长字符串导致的超时。
动态规划类。典型的是背包问题的变形、最长递增子序列的变种、二维网格路径问题等。这类题重点在状态定义和转移方程,一旦定义清楚,代码其实很模板化。笔试时间紧张,建议把常见的DP模板事先准备好,比如01背包、完全背包、LIS、LCS这些,考场上能省很多推导时间。
图论与搜索类。印象里出现过二维网格上求连通区域数量的题,本质上就是BFS/DFS的模板题。这类题考的就是对搜索框架的掌握和坐标方向处理的熟练度,方向数组写错、visited数组忘记标记都是常见的低级错误。
还有一类是模拟题,题目描述很长,像一个小型业务场景,让你按规则逐步模拟。这类题不考复杂算法,但考阅读理解能力和代码组织能力,读题慢或者逻辑写乱了容易在代码里绕不出来。
2.2 计算机基础选择题:考查广度与细节
选择题部分覆盖了计算机专业核心课程,大概可以分为以下几块:
操作系统。高频考点包括进程与线程的区别、死锁产生的四个条件、页面置换算法(LRU、FIFO)、进程调度算法、虚拟内存机制等。这类题细节性很强,比如考到"哪种页面置换算法会产生Belady异常",答案是FIFO,这种就是纯记忆型知识,记得就得分,不记得就只能靠蒙。
计算机网络。重点集中在TCP/IP协议栈。TCP三次握手与四次挥手的过程、TCP与UDP的区别、HTTP状态码含义、DNS解析过程、IPv4地址分类和子网划分。需要注意,2023年的笔试里对HTTPS和TLS握手的考查比例有所上升,应该是行业对安全重视度提高后带来的连锁反应。
数据库。SQL语句是必考的,特别是多表连接查询、分组聚合、子查询。索引相关的选择题也比较高频,比如聚集索引与非聚集索引的区别、什么时候索引会失效。事务隔离级别、ACID特性这类知识点也需要掌握扎实。
Java/C++基础。这部分根据岗位方向有区分。Java方向常见考点是HashMap底层原理、并发编程(synchronized与Lock区别、线程池参数含义)、JVM内存区域划分。C++方向则更常考虚函数、智能指针、内存管理相关内容。我投的是后端方向,笔试内容以Java为主,基本都在这些范围内。
2.3 逻辑与开放性题目:考察思路与表达
逻辑与思维题虽然分值占比不高,也不可忽视。常见题型有数列推理、图形推理,以及一些简单的逻辑判断问题。这类题不用刻意刷,因为题型范围太广,性价比不高,考前做几套公务员行测的逻辑题熟悉下套路就够用。
开放性题目更像一个小小的问答题,让你简述对某个技术问题的理解或设计思路。比如问"如何设计一个短链接系统""在大流量的场景下怎么做限流"。这类题主要考思路的完整性和表达能力。我的经验是用"背景-方案-细节"的结构来组织答案,先点出问题核心,再给出方案框架,最后补充一两个实现细节。
3. 真实笔试复盘与解题思路分享
3.1 典型编程题的思路要点
下面是我根据自己的实战体验整理的几类题目的解题思路,题目细节记不完全准确,但思路可以分享出来。
字符串压缩类题目。当时遇到一道题,大概是要求把连续出现超过一定次数的字符串片段压缩成"字符+次数"的形式,比如"aaabbbcc"压缩成"a3b3c2"这种。思路很简单,就是一次遍历,用两个指针标记连续相同字符的起始和终止位置,然后拼接结果。这里最需要注意的就是最后一个字符的处理,容易漏掉。我当时是把压缩结果用StringBuilder来拼接,遍历完之后再单独处理最后一组字符,才避免了越界问题。
二维网格搜索问题。还有一道题类似找岛屿数量的变种,给定一个二维矩阵,每个位置有状态,要求统计满足某种连通条件的区域个数。解题思路就是遍历每一个格子,遇到符合条件的格子就做DFS/BFS展开,同时用visited数组记录访问状态。这类题的关键是要把方向数组写好,上下左右四个方向。有时候题目要求斜对角方向,那就八方向遍历。笔试时时间紧张,DFS的递归写法更容易快速写对,但要注意递归深度,如果矩阵很大,建议改写成BFS或者用栈模拟。
动态规划题。印象中有一道类似最长递增连续子序列的变种,但增加了限制条件。这类题我一般先用暴力递归想清楚状态定义,然后推导转移方程,再改成DP数组迭代。考场上时间不够时,可以直接从"某个位置做结尾"这个角度去定义状态,基本不会跑偏。另外,如果时间不够,可以先写一个暴力解法,保证通过一部分测试用例拿到部分分,比分治大法要好得多。
3.2 选择题里那些容易丢分的细节
根据我的经验,选择题丢分往往不是因为知识点完全不会,而是毁在"看着眼熟但没记准确"的状态。下面举几个具体例子:
一个是关于TCP的拥塞控制,题目给出四个阶段或算法的描述,让你选错的。如果只记得"慢启动、拥塞避免、快重传、快恢复"这几个名词,但说不清每个阶段阈值怎么变化,就很容易被干扰项带偏。这类题的复习方式应该是画状态图,把拥塞窗口变化的整个过程过一遍,而不是背文字描述。
另一个是数据库的隔离级别问题。题目给出一组并发操作场景,问在哪个隔离级别下不会出现脏读。这种题我每次都容易在"可重复读"和"读已提交"之间犹豫。实际上,要理清楚脏读、不可重复读、幻读分别对应哪个级别下的问题,建议把四种隔离级别和三种异常现象用一个表格对比记忆。
还有操作系统的死锁题目,经常给出一组资源分配情况,问当前是否处于死锁状态、是否安全。这就要会算资源分配矩阵和安全序列。如果对银行家算法比较熟悉,这类题很快就能出答案,但没有实际算过的同学,容易在这里花很长时间。
3.3 时间分配倒推法
我在实际笔试过程中总结出一套时间分配方式,基本上按这个节奏走,整体不会太慌。
拿到试卷后先用2到3分钟快速浏览全部题目,了解编程题有几道、难度大概如何。不要在选择题上纠结太久,每道选择题目标时间控制在1分半以内,遇到完全没思路的先标记跳过,最后有时间再回来。20道选择题大概用30到35分钟解决。
剩下的时间主要给编程题。第一道编程题通常最简单,建议先做,给自己设定25到30分钟,包含读题、编码、自测。第二道编程题如果一时没有头绪,先花5分钟想思路,想不出来就先把暴力解法写出来,保证有部分用例能过。最后留出10分钟检查代码的边界条件,并回头处理跳过的选择题。
这套倒推法的时间安排大致是:浏览题目3分钟,选择题35分钟,第一道编程题30分钟,第二道编程题40分钟,最后检查加补漏12分钟。实际执行下来,整体节奏是比较稳的。
4. 备考方法论与避坑指南
4.1 考前一个月的复习重点排序
我在准备2023年秋招的过程中,最深的感受是:如果时间只剩一个月,复习优先级一定要排清楚,最忌平均用力。
第一优先级是编程题。每天至少保持两道题的刷题量,重点刷LeetCode中等难度的题目,尤其是字符串处理、动态规划、DFS/BFS这几类。刷题不追求数量,追求"拿到题能快速建模"。我在考前一周做了一次高频题整理,把常见题型的模板代码单独放到一个文档里,比如二分查找模板、并查集模板、拓扑排序模板,考前一天集中过一遍。考试时碰到类似题目,直接套模板改,效率会高很多。
第二优先级是计算机网络和操作系统。这两门课内容多、考点散布,看起来很难复习,但实际秋招笔试考来考去就是那几十个高频点。重点掌握TCP状态机、TCP拥塞控制、进程线程模型、内存管理机制、文件系统基础,这些高频考点值得花时间背熟。
第三优先级才是数据库和语言基础。数据库重点练习SQL题,语言基础重点整理面试高频考点。如果你的岗位方向对语言要求很明确,比如后端主Java,那Java集合、并发、JVM这三块一定要吃透。
4.2 考场实操中的几个关键操作
除了知识储备,考场上的一些操作细节也会直接影响成绩,这些都是真实踩坑换来的教训。
本地IDE的使用要提前确认。有些笔试系统自带在线编辑器,但体验一般,自动补全和格式检查都比较弱。2023年OPPO笔试允许本地编写代码,建议用本地IDE,代码写完了再复制到答题区。本地环境提前配好,Java的话把JDK版本确认好,C++则要确认GCC版本和标准,避免本地能跑、线上编译报错的情况。
测试用例一定自己多补充几组。很多同学写完代码只跑题目给的示例,觉得没问题就交了。实际上笔试的判题用例会包含很多边界情况,比如空数组、超大数、特殊字符。我的习惯是写完代码后,至少补充三组测试:空值或极简输入、常规中等量输入、边界极值输入。这一步能捞回不少分数。
别忘了注意代码输入输出格式。在线笔试通常需要自己处理标准输入输出,Scanner或cin的使用要熟练。有些同学算法思路完全正确,但因为读取输入时空格和换行的处理不对,导致答案错误,非常可惜。
4.3 笔试后必做的两件事
交卷后我不建议第一时间就放松或干等。趁记忆还新鲜,最好把刚才的题目和思路整理出来,发在备忘录或者自己建的秋招记录文档里。别小看这一步,它对接下来的面试非常关键。一是如果后续面试官问你笔试的感受,你能清晰说出自己当时怎么想的、有没有更好的解法,这是加分项。二是秋招往往多线程投递,下一家公司的笔试可能遇到相似的题型,有记录就能快速调出思路。
第二件事是回看自己卡住的那些选择题。这些题大概率也是技术终面或HR面里容易追问的知识点。我当时就是因为笔试里一道关于Redis持久化策略的选择题没答上来,面试前专门补了这一块,结果面试里真被问到了RDB和AOF的区别。笔试暴露的盲区,正是面试准备里最值得补的漏洞。
5. 常见问题排查与经验汇总
5.1 在线笔试常见技术问题速查
在线笔试过程中偶尔会遇到技术问题,这里整理了一份排查思路:
| 现象 | 可能原因 | 处理方式 |
|---|---|---|
| 摄像头检测失败 | 浏览器权限未开启 | 在浏览器设置中允许摄像头权限,并检查是否有其他程序占用摄像头 |
| 代码编辑器卡顿 | 浏览器版本过旧或内存占用过高 | 关闭多余标签页,使用Chrome/Edge浏览器,提前重启电脑 |
| 代码提交后提示编译错误 | 本地与线上JDK/GCC版本不一致 | 考前一天在笔试系统模拟环境测试,确认编译命令和版本参数 |
| 断网 | 网络不稳定 | 准备手机热点作为备用,断网后第一时间切换并联系监考官 |
| 误关答题页面 | 鼠标操作失误 | 不要慌张,重新登录系统,大多数在线笔试系统会自动保存已提交的答案 |
这些问题的核心解决思路就是"提前准备+冷静应对",不要等出了状况再临时处理。
5.2 独家避坑经验
整个2023年秋招笔试走下来,我总结出三个特别容易踩的坑:
第一个坑是过度纠结选择题。很多同学对某道选择题"似曾相识",于是花了五分钟反复推敲。这种投入产出比非常低,五道选择题的时间足够把编程题的暴力解法写出来拿部分分。我的建议是:选择题犹豫超过1分半,立刻标记跳过,就算最后没时间回来,也只是一道选择题的损失,完全在可接受范围内。
第二个坑是编程题直接上手写代码,没有先花几分钟捋思路。笔试时间紧张,但并不是紧张到连想的时间都没有。拿到一道题,先花3到5分钟明确输入输出范围、数据规模、可能的边界条件,再动手写。如果题目数据量是10^5级别,O(n^2)的方案大概率超时,一开始就应考虑O(nlogn)的解法。想清楚再编码,写出来的代码质量会高很多。
第三个坑是没有准备代码模板。平时刷题大家经常用IDE的自动补全和快捷键,到了笔试环境,如果用的是简陋的在线编辑器,一些基础代码都要从头敲。提前把快排、二分、并查集、拓扑排序、前缀和这些代码模板背熟,笔试时能大幅节省时间,也能减少编码错误。
5.3 笔试成绩与后续流程的关联
笔试在秋招整体流程中起着筛选和定位的作用,从我的经验和了解来看,笔试成绩会影响后续面试的深度和方向。通常笔试分数高的同学,面试中技术面的部分可能更侧重项目经历和深度扩展,而笔试表现一般的同学,面试官可能会更倾向花时间验证基础知识的掌握程度,问题会更偏八股和基础原理。
不过一个重要的经验是:笔试没考好不代表秋招结束。见过很多同学因为某一次笔试发挥失常就心态崩了,其实完全没必要。秋招是长跑,OPPO的笔试只是众多机会中的一个,同一家公司不同岗位也可以多次投递。放平心态,认真准备下一场,比反复纠结已经结束的考试更有意义。
我想再分享一个小技巧:刷题时养成记录错题和思路的习惯。我用一个简单的表格记每题的类型、卡点、解法亮点,考前几天集中看这个表而不是重新翻几百道题,效率高很多。这个习惯从2023年秋招一直伴随我到后续的社招准备,实测下来非常管用。希望这些经验能给你们一些参考,祝笔试顺利。