数据来源:真实面经整理 | 版本: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 校招的同学

有问题随时留言,我会尽量回复!