数据来源:真实面经整理 | 版本:final
一、公司画像 & 校招节奏
OPPO 成立于 ,总部位于广东东莞,是步步高电子(BBK Electronics)旗下的消费电子品牌,与 vivo、一加(OnePlus)同属一个体系。主营业务涵盖智能手机、可穿戴设备(OPPO Watch)、AIoT 硬件等,旗下还管理 Realme 子品牌,面向新兴市场。
核心数据:
| 指标 | 数据 |
|---|---|
| 成立时间 | |
| 总部 | 广东东莞 |
| 员工规模 | 4 万人以上 |
| 年营收 | 约 1500 亿元级别 |
| 核心技术品牌 | ColorOS、OPPO Research Institute(研究院)、Marisilicon X(自研芯片) |
| 主要产品线 | Find X / Reno / A 系列手机、OnePlus、Realme、OPPO Watch |
| 官方招聘入口 | oppo.com/zh-cn/campus |
OPPO 的核心技术标签:
- ColorOS:基于 Android 深度定制的系统层,是 OPPO Android 开发岗位的核心战场
- 影像技术领先:首创潜望式长焦镜头、计算摄影深度投入、与哈苏合作(一加品牌线)
- 自研芯片:Marisilicon X 是 OPPO 自研的影像 NPU,面试中提到这个是加分项
- 一加(OnePlus)业务线:专注原生 Android 体验,与 OPPO 主线差异化定位
主要招聘岗位:
| 岗位方向 | 主要技术栈 | 竞争难度 |
|---|---|---|
| Android 系统开发(ColorOS) | C++ / Java / Kotlin | ⭐⭐⭐⭐⭐ |
| Android App 开发 | Java / Kotlin | ⭐⭐⭐⭐ |
| 嵌入式 / BSP 开发 | C / C++ + Linux 内核 | ⭐⭐⭐⭐ |
| 影像算法工程师 | C++ / Python + 图像处理 | ⭐⭐⭐⭐⭐ |
| AI / 推荐算法 | Python + ML/DL | ⭐⭐⭐⭐ |
| 云平台后端开发 | Java / Go | ⭐⭐⭐⭐ |
| 测试开发 | Python / Java + 自动化 | ⭐⭐⭐ |
校招节奏(参考):
初 正式网申开放 → oppo.com/zh-cn/campus
在线笔试(选择题 + 编程题)
技术面试(2-3 轮)
HR 面 + Offer 发放
竞争现实:OPPO 技术岗整体不如字节跳动卷算法,但对 Android 系统底层的深度理解要求很高——单纯会写业务代码不够,Binder、Handler 这些机制必须吃透。影像算法岗竞争最激烈,基本都要求相关项目经历。
二、岗位 JD 解析:技术要求拆解
通用核心要求
OPPO 所有技术岗位 JD 有一套通用底线要求,备考时先把这块打牢:
| 能力维度 | 具体要求 | 备考权重 |
|---|---|---|
| 编程语言 | C++ 或 Java 至少一门扎实 | ⭐⭐⭐⭐⭐ |
| 算法与数据结构 | 熟练手写,能讲清楚复杂度 | ⭐⭐⭐⭐⭐ |
| 操作系统 | 进程/线程、内存管理、调度算法 | ⭐⭐⭐⭐ |
| 计算机网络 | TCP 三次握手/四次挥手、HTTPS 原理 | ⭐⭐⭐⭐ |
| 项目经历 | 有实质性贡献的项目,能讲清楚技术选型 | ⭐⭐⭐⭐ |
| 学习能力 | 快速上手新技术的具体案例 | ⭐⭐⭐ |
Android 系统开发(核心岗,最重要)
这是 OPPO 最有特色、也最看重的方向。写 ColorOS 的人,对 Android Framework 的理解必须到源码级别:
- 四大组件:Activity 生命周期、启动模式、Fragment 管理、Service 保活机制
- Binder IPC:⚠️ OPPO 独特高频考点!Binder 为什么比 Socket 快、Binder 驱动工作原理、ServiceManager 原理
- Handler 消息机制:MessageQueue、Looper、Handler 三者关系,主线程 Looper 为何不会 ANR
- 内存管理:AMS 内存回收策略、Low Memory Killer、应用内存优化手段
- 性能优化:启动优化、渲染优化(Choreographer 原理)、ANR 分析
关键洞察:OPPO 面试官不满足于"我知道 Binder",会追问:"Binder 的内存拷贝次数是几次?为什么是一次?mmap 怎么实现的?" 做好深问的准备。
影像算法工程师
这个岗位门槛最高,对跨学科能力要求强:
- 基础图像处理:卷积、傅里叶变换、图像增强、去噪算法
- Camera 硬件链路:ISP 流水线、RAW/NV21/YUV 格式转换、Camera2 API 框架
- 计算摄影:HDR 算法、夜景多帧合成、去模糊技术原理
- 自研芯片加分项:了解 Marisilicon X NPU 的基本架构(有自研芯片背景,面试时主动提)
- OPPO 影像历史:潜望式长焦是 OPPO 首发(Find X 系列),面试官喜欢问"为什么选择 OPPO"时的技术加分
嵌入式 / BSP 开发
- Linux 内核:设备树(Device Tree)、驱动模型(platform_driver)、中断处理
- 内存管理:虚拟内存、物理内存分配(伙伴系统、slab 分配器)
- 文件系统:ext4 / F2FS(手机常用),VFS 虚拟文件系统层
- 调试工具:ftrace、perf、systrace
三、LeetCode 高频题 Top 20(真实面经数据)
以下题目按真实面经出现频次排序,覆盖 Android 开发、嵌入式、算法三个主要方向。
🔴 第一梯队:必刷(出现频次最高)
1. 反转链表(No.206)⭐⭐⭐⭐⭐
- 考察频次:Android 开发岗第一高频,几乎人人遇到
- 难度:Easy
- 核心思路:迭代法用三指针(prev / curr / next),递归法注意理解栈帧
- 常见追问:能不能用递归?递归的空间复杂度是多少?链表很长会怎样(栈溢出)?
- 备考提示:Easy 题不能错,迭代版本要写到闭眼不差。手写时注意边界:null 链表、单节点链表
2. 二叉树层序遍历(No.102)⭐⭐⭐⭐⭐
- 考察频次:各方向通用高频,考察 BFS 熟练度
- 难度:Medium
- 核心思路:队列 + 每层记录 size,用 size 控制每层的节点数
- 常见追问:锯齿形层序遍历(No.103)怎么改?用 DFS 能实现层序遍历吗?
- 备考提示:写完 102 顺手刷 103(锯齿)、107(从底往上),这几题思路联动
3. 手撕快速排序(无题号,考察手写能力)⭐⭐⭐⭐⭐
- 考察频次:C++ 岗位面试必考,嵌入式开发同样高频
- 难度:中等偏难(手写容易写错 partition)
- 核心思路:Lomuto 分区(简洁)或 Hoare 分区(效率更高),随机选 pivot 避免最坏情况
- 常见追问:快排最坏情况是什么?如何避免?归并排序和快排如何选择?原地排序是什么意思?
- 备考提示:必须能从零手写,不能有 bug。建议背下 Lomuto 版本,逻辑最清晰
4. 最长无重复子串(No.3)⭐⭐⭐⭐⭐
- 考察频次:滑动窗口经典题,多方向通用
- 难度:Medium
- 核心思路:双指针滑动窗口 + HashMap 记录字符最新位置,right 指针向右扫,发现重复则移动 left
- 常见追问:如果字符集只有小写字母,能不能优化空间?Unicode 字符怎么处理?
- 备考提示:写完 No.3,顺手刷 No.76(最小覆盖子串),滑动窗口变难版
🟠 第二梯队:高频必刷
5. 合并两个有序链表(No.21)⭐⭐⭐⭐
- 难度:Easy
- 核心思路:哨兵节点(dummy head)+ 双指针遍历
- 追问:合并 K 个有序链表(No.23,优先队列解法)
6. 环形链表 I + II(No.141 / No.142)⭐⭐⭐⭐
- 难度:Easy / Medium
- 核心思路:Floyd 判圈算法(快慢指针);142 求入环点:相遇后一个指针回到 head,同速前进,再次相遇即入环点
- 追问:能不能不用额外空间?为什么这个算法正确(数学证明考不考)?
7. 数组中第 K 大的数(No.215)⭐⭐⭐⭐
- 难度:Medium
- 核心思路:快速选择(Quick Select),平均 O(n),最坏 O(n²);或大小为 K 的最小堆,O(n log k)
- 追问:两种方法各自适合什么场景?数据量超大内存放不下怎么办(外排序)?
8. 三数之和(No.15)⭐⭐⭐⭐
- 难度:Medium
- 核心思路:排序 + 双指针,注意去重逻辑(跳过相同元素)
- 追问:如果要四数之和(No.18)怎么扩展?O(n²) 能不能再优化?
9. LRU 缓存(No.146)⭐⭐⭐⭐
- 难度:Medium
- 核心思路:哈希表(O(1) 查找)+ 双向链表(O(1) 移动),两者组合实现所有操作 O(1)
- 追问:如何改成线程安全的 LRU?LFU 怎么实现(No.460)?
- 备考提示:不只是 AC,要能画出内存结构,解释为什么用双向链表不用单向链表(单向链表删除节点需要 O(n))
🟡 第三梯队:有余力必刷
10. 岛屿数量(No.200)⭐⭐⭐
- 难度:Medium
- 核心思路:DFS / BFS 染色,遇到 '1' 就 DFS 标记整个岛屿
11. 最大子数组和(No.53)⭐⭐⭐
- 难度:Easy
- 核心思路:Kadane 算法,动态规划一次遍历,dp[i] = max(dp[i-1]+nums[i], nums[i])
12. 二叉树的最近公共祖先(No.236)⭐⭐⭐
- 难度:Medium
- 核心思路:后序遍历,左右子树返回值决定当前节点是否是 LCA
13. 最长递增子序列(No.300)⭐⭐⭐
- 难度:Medium
- 核心思路:DP(O(n²))或 贪心 + 二分(O(n log n)),后者需要掌握
14. 合并区间(No.56)⭐⭐⭐
- 难度:Medium
- 核心思路:按区间左端点排序,再线性扫描合并
15. 二叉树的最大深度(No.104)⭐⭐⭐
- 难度:Easy
- 核心思路:DFS 递归,max(left_depth, right_depth) + 1
16. 全排列(No.46)⭐⭐⭐
- 难度:Medium
- 核心思路:回溯,used 数组标记已使用元素
17. 二分查找(No.704 / 手写 lower_bound)⭐⭐⭐
- 难度:Easy
- 备考提示:重点是边界处理,left <= right vs left < right,mid 的溢出处理
18. 链表排序(No.148)⭐⭐
- 难度:Medium
- 核心思路:归并排序,找链表中点(快慢指针)→ 分割 → 合并
19. 前序 + 中序构造二叉树(No.105)⭐⭐
- 难度:Medium
- 核心思路:前序第一个是根,中序根左边是左子树,递归建树
20. 单词搜索(No.79)⭐⭐
- 难度:Medium
- 核心思路:DFS + 回溯,注意 visited 标记和恢复
刷题顺序建议:
第一优先级(必刷):No.206、No.102、快排手写、No.3、No.21、No.141/142、No.215、No.15、No.146
第二优先级(余力刷):No.200、No.53、No.236、No.300、No.56
第三优先级(影像/嵌入式方向加分):No.48(图像旋转)、No.75(颜色分类,荷兰国旗)
四、技术面试考点
C++ 深度(Android 系统 / 嵌入式方向重点)
OPPO 的 C++ 考察比一般互联网公司更深。面试官不满足于"会用",会追问原理:
内存管理:
new/delete与malloc/free的区别(构造/析构函数的调用)- 智能指针:
unique_ptr、shared_ptr、weak_ptr各自适用场景 shared_ptr的引用计数是线程安全的,但被管理的对象不一定——这个很多人答错- RAII 原则:Resource Acquisition Is Initialization,智能指针就是最典型的 RAII
面向对象与虚函数:
- 虚函数表(vtable)的内存布局
- 多继承时虚函数表如何排列
- 纯虚函数与抽象类
override/final关键字的作用
现代 C++ 特性:
- 移动语义(move semantics):右值引用
&&、std::move、移动构造函数 - 完美转发(perfect forwarding):
std::forward解决什么问题 lambda表达式:捕获列表(值捕获 vs 引用捕获),闭包生命周期
模板:
- 函数模板 vs 类模板
- 模板特化与偏特化
- SFINAE 基础(可选,加分项)
Android 系统(OPPO 最核心考点)
Binder 机制(OPPO 独特高频考点):
为什么 Android 选择 Binder 而非 Linux 原有 IPC?
→ 性能:只需 1 次内存拷贝(mmap + copy_from_user)
→ 安全:每次调用携带 PID/UID,内核级别身份验证
→ 面向对象:Binder 对象可以跨进程传递,像引用传递
Binder 工作原理(必须答清楚):
Client → Proxy → Binder 驱动(/dev/binder)→ Stub → Server
驱动通过 mmap 实现内核空间与 Server 共享物理内存,避免第二次拷贝
Handler 消息机制:
MessageQueue的数据结构(链表,按时间排序)Looper.loop()为什么不会阻塞主线程(epoll 实现的阻塞,等待消息到来才唤醒)Handler内存泄漏:匿名内部类持有外部 Activity 引用,解决方案(静态内部类 + WeakReference)
四大组件:
Activity启动模式:standard / singleTop / singleTask / singleInstance,各自适用场景Service两种启动方式(startService vs bindService)的生命周期区别BroadcastReceiver静态注册 vs 动态注册,有序广播 vs 普通广播ContentProvider的 URI 设计,CRUD 操作
性能优化(常被问到项目经历时):
- 启动优化:Application.onCreate 延迟初始化、multidex 分包、ContentProvider 陷阱
- 卡顿优化:主线程耗时操作检测(Choreographer + FrameMetrics)
- 内存优化:Bitmap 内存计算(width × height × 4 bytes for ARGB_8888)、OOM 分析
影像算法基础(影像方向必备)
图像格式:
- RGB vs YUV:YUV 是人眼对亮度(Y)更敏感的色彩空间,压缩率更高
- NV21 / NV12:Android Camera 默认输出格式,Y 平面 + UV 交错平面(4:2:0 采样)
- RAW 格式:传感器原始数据,12-bit 或 14-bit,需要 ISP 处理
Camera2 API 核心流程:
CameraManager.openCamera() → CameraDevice.createCaptureSession()
→ CaptureRequest.Builder(配置参数)→ CameraCaptureSession.capture()
→ ImageReader 接收数据
ISP 流水线基础:
去马赛克(Demosaic)→ 白平衡(AWB)→ 降噪(NR)→ 锐化 → Tone Mapping → 输出
计算摄影:
- 夜景拍照原理:多帧对齐(EIS/OIS 补偿)→ 多帧合成(减少噪点)→ 后处理增强
- HDR:多曝光融合,保留高光和阴影细节
操作系统 & 计算机网络(通用基础)
操作系统:
- 进程 vs 线程:进程是资源分配单位,线程是调度单位;同进程线程共享地址空间
- 死锁四条件:互斥、占有并等待、非抢占、循环等待;Banker 算法预防
- 内存管理:虚拟内存 → 页表 → TLB → 物理内存;缺页中断处理流程
- 调度算法:FIFO / SJF / 优先级调度 / 时间片轮转,各自优劣
计算机网络:
- TCP 三次握手、四次挥手(为什么挥手要四次:半关闭状态)
- TIME_WAIT 存在的意义(保证对方收到最后一个 ACK;防止旧连接报文干扰新连接)
- HTTPS 握手流程(TLS 1.3 核心步骤)
- HTTP/1.1 vs HTTP/2:多路复用解决队头阻塞,HTTP/2 还有头部压缩(HPACK)
五、面经规律总结
OPPO 面试风格特点
通过整理近两年面经,OPPO 技术面有几个鲜明特点:
1. 技术面 2-3 轮 + 1 轮 HR 面
典型流程:一面(基础题 + 算法)→ 二面(项目深挖 + 系统设计)→ 三面(技术 leader,看综合能力)→ HR 面
2. 算法不是最高优先级,但不能短板
和字节跳动相比,OPPO 更看重 Android 系统理解深度。算法能过掉就行,Binder 讲不清楚才是真正的硬伤。
3. 必然追问项目经历
每一轮面试都会追问简历上写的项目:"为什么这么设计?""遇到了什么问题?""有没有考虑过其他方案?"
不要写自己说不清楚的项目。
4. Binder 是 OPPO 特有高频考点
字节问 Binder,OPPO 追问 Binder。这不是巧合,而是因为 ColorOS 大量依赖 Binder 通信,做系统开发的人每天都在和它打交道。
5. 影像方向会单独考图像基础
不只是会用 Camera2 API,NV21 格式你得知道是什么意思,YUV 和 RGB 的转换你得会算。
常见面试问题
一面常见问题(基础层):
- 讲一下 Binder 原理,为什么只需要一次内存拷贝?
- Handler 如何实现延迟消息?postDelayed 的原理是什么?
- C++ 智能指针,shared_ptr 和 unique_ptr 分别什么时候用?
- 手写一道算法题(链表 / 二叉树 / 滑动窗口)
- TCP 和 UDP 的区别,什么场景选 UDP?
二面常见问题(深度层):
- 你项目里用到了哪些性能优化?具体怎么做的,效果怎样?
- Android 四大组件的生命周期,有没有遇到过因为生命周期处理不当导致的 bug?
- 多线程的同步机制,synchronized 和 volatile 的区别(如果有 Java 经验)
- 描述一个你印象最深的技术难题,怎么解决的?
HR 面常见问题:
- 为什么选择 OPPO 而不是其他大厂?(一定要结合技术点回答,比如"对影像技术感兴趣,OPPO 在潜望式长焦领域的积累...")
- 对加班怎么看?(务实回答,不要说"完全不介意"也不要说"坚决不加班")
- 职业规划三到五年?
拿到 Offer 的关键差距
| 因素 | 能过的候选人 | 挂掉的候选人 |
|---|---|---|
| 算法 | LC 中等题流畅手写,O(n) 复杂度分析到位 | 思路有但代码写不完整,边界处理有 bug |
| Android 系统 | Binder 能讲原理,Handler 能讲 epoll | 只知道用法,问原理答不出来 |
| 项目深度 | 能清晰讲技术选型,遇到的问题和解法 | 只描述做了什么,问"为什么这么做"支支吾吾 |
| OPPO 特色 | 了解 ColorOS、Marisilicon X,有技术热情 | 对 OPPO 产品/技术没什么了解 |
校招节奏
适用对象:有 Android / C++ 基础,需要系统化冲刺 OPPO 校招的同学
第一周():夯实基础
| 日期 | 任务 |
|---|---|
| C++ 重点复习:智能指针、虚函数表、移动语义,手写 3 个经典例子 | |
| Android 核心机制:Binder 原理从头梳理,Handler 消息机制,画出完整时序图 | |
| 算法:第一梯队 4 题全部手写(No.206、No.102、快排、No.3),每题写 3 遍 | |
| 整理笔记,把 Binder 的内存拷贝过程、Handler 的 epoll 机制用自己的语言描述出来 |
目标:Binder 和 Handler 能不看资料讲清楚,第一梯队 4 题秒写
第二周():强化提升
| 日期 | 任务 |
|---|---|
| Android 四大组件深入:启动模式场景题,Service 两种方式生命周期对比 | |
| 算法:第二梯队 5 题(No.21、No.141/142、No.215、No.15、No.146)逐一吃透 | |
| 操作系统:进程线程、死锁、内存管理(重点:页表结构和缺页中断) | |
| 计算机网络:TCP 三次握手/四次挥手手画,HTTPS TLS 握手流程梳理 |
目标:第二梯队题目能手写,OS 和网络的经典考题无盲点
第三周():专项深化
| 日期 | 任务 |
|---|---|
| 选择方向专项(三选一):影像方向研究 Camera2 API + YUV 格式;嵌入式方向研究 Linux 驱动模型;算法岗研究 DL 基础 | |
| 算法:第三梯队 6 题(No.200、No.53、No.236、No.300、No.56、No.104) | |
| 项目经历打磨:梳理简历上每个项目的技术选型理由、遇到的问题和解法,用 STAR 结构组织 | |
| 系统设计入门:LRU 缓存、消息队列基础设计,练习"提问 → 确认边界 → 设计 → 分析"流程 |
目标:有明确专项方向,项目经历讲得有深度
第四周():模拟冲刺
| 日期 | 任务 |
|---|---|
| 完整模拟面试:自己计时,内讲完技术基础 + 手写 1 道算法题 | |
| 重刷第一梯队 + 第二梯队所有题,重点检查边界 case 处理 | |
| 研究 OPPO 近期技术文章(ColorOS 博客、OPPO 研究院官网),准备"为什么选 OPPO"的技术版本答案 | |
| 查漏补缺:把之前标记不熟的知识点集中攻克 | |
| 放松,检查简历,确保描述清晰无歧义 |
目标:笔试过线,一面技术问题覆盖率 80%+
备考资源清单
刷题: - LC 题目直接在 leetcode.cn 刷,按题号搜索 - 刷完一题立刻写注释:核心思路是什么、追问会问什么
Android 系统深度学习: - 《深入理解 Android:卷一/卷二》(邓凡平)—— Binder 章节必看 - Android 官方 AOSP 文档(source.android.com) - 参考 gityuan.com 博客(系统源码分析)
C++ 深度: - 《Effective Modern C++》—— 移动语义、智能指针章节 - cppreference.com —— 标准库查阅
影像算法: - 了解 OPPO INNO DAY 历年发布会技术介绍(公开信息) - 《数字图像处理》第三版(冈萨雷斯)—— 基础图像处理理论
祝你备考顺利,成功拿到 OPPO Offer!如果目标是影像方向,对潜望式镜头技术有热情,OPPO 绝对是值得的选择。
📚 你可能还需要这些
其他硬件生态大厂备考
同样重视 Android 系统深度、C++ 底层能力: - 📌 腾讯校招备考攻略(含 PC 客户端 C++ 方向) - 📌 字节跳动校招备考攻略(算法强度最高,备考侧重不同)
大厂通用技术准备
- 📌 大厂 C++ 技术面试常考题(30 道高频题详解)
- 📌 大厂笔试面试八股文 - 算法 - 数组常考题(刷题基础)
招聘信息参考
- 📌 届春招 27 届实习内推开始(最新招聘节点汇总)
💡 关注我,校招少踩坑
我会持续分享: - ✅ 大厂校招备考攻略(按公司、岗位精准分类,持续更新) - ✅ 真实面经整理(一手数据,非道听途说) - ✅ 技术深度解析(Android 系统、C++ 底层,讲到源码层面) - ✅ 内推信息(不定期发布,欢迎留言需求)
这份攻略花了大量时间整理真实面经和技术细节,如果对你有帮助: - 👍 点个"赞"和"在看",让更多备考的同学看到 - 💬 评论区聊聊你的备考进度,或者遇到的技术难点 - 🔄 转发给同样在准备 OPPO 校招的同学
有问题随时留言,我会尽量回复!