数据来源:真实面经整理 | 版本:final
一、公司画像 & 校招节奏
vivo 成立于 ,总部位于广东东莞,深圳设有核心研发中心,是步步高集团旗下品牌,与 OPPO、一加(OnePlus)同属 BBK 生态。
产品线覆盖:vivo S/X/Y 系列手机、iQOO 游戏手机、vivo 手表与平板。X 系列定位影像旗舰(蔡司联名镜头),iQOO 主打性能游戏方向,两条产品线技术侧重各有不同。年营收规模约 1500-亿量级,全球员工超万人,在东南亚、南亚市场份额稳居前列。
主要校招岗位:
| 岗位方向 | 主要技术栈 | 竞争难度 |
|---|---|---|
| Android 应用开发 | Java/Kotlin + Android Framework | ⭐⭐⭐ |
| Android 系统开发(OriginOS) | Java/C++ + AOSP | ⭐⭐⭐⭐ |
| BSP/驱动开发 | C + Linux Kernel + 设备树 | ⭐⭐⭐⭐ |
| 影像算法工程师 | C++/Python + ISP/计算摄影 | ⭐⭐⭐⭐⭐ |
| 测试开发 | Python/Java + 自动化测试 | ⭐⭐⭐ |
| 推荐/数据算法 | Python + ML/DL | ⭐⭐⭐⭐ |
校招节奏(参考):
初 暑期实习生优先转正,内部推荐预热
初 正式网申开放 → talent.vivo.com.cn
在线笔试(编程题 + 专业知识题)
技术面试(2-3轮)+ HR面
Offer 发放
竞争现实:vivo 整体面试难度低于字节跳动和腾讯,偏重 Android 生态深度和嵌入式方向的专业能力。对应届生相对友好,面试官会给提示而非单纯为难。BSP 和影像算法岗位竞争者少但专业壁垒高,Android 应用岗位竞争者多但相对好准备。
二、岗位 JD 解析:技术要求拆解
通用核心要求
所有技术岗位的共同基础,优先级从高到低:
| 能力维度 | 具体要求 | 备考权重 |
|---|---|---|
| 编程语言 | C/C++ 或 Java/Kotlin 至少一门扎实 | ⭐⭐⭐⭐⭐ |
| 数据结构与算法 | 链表、树、排序、动态规划能手写 | ⭐⭐⭐⭐⭐ |
| 操作系统 | 进程/线程/内存/调度/同步原语 | ⭐⭐⭐⭐ |
| 计算机网络 | TCP/IP 三次握手、HTTP/HTTPS | ⭐⭐⭐ |
| 学习能力 | 钻研精神,能深入原理而非浅尝 | ⭐⭐⭐⭐ |
Android 应用/系统开发方向
核心考察:Java/Kotlin 基础 + Android 四大组件深度 + 性能优化实战
| 考点 | 具体内容 | 重要度 |
|---|---|---|
| 四大组件 | Activity 生命周期、Service 类型、BroadcastReceiver、ContentProvider | ⭐⭐⭐⭐⭐ |
| 线程/异步 | Handler/Looper/MessageQueue、协程、AsyncTask(已废弃但要理解) | ⭐⭐⭐⭐ |
| 内存管理 | 内存泄漏排查、LeakCanary 使用、Java GC 机制 | ⭐⭐⭐⭐ |
| 性能优化 | ANR 排查、卡顿分析、Systrace/Perfetto 工具 | ⭐⭐⭐⭐ |
| 网络层 | OkHttp/Retrofit 原理、HTTP2、WebSocket | ⭐⭐⭐ |
| UI 渲染 | View 绘制流程(measure/layout/draw)、RecyclerView 优化 | ⭐⭐⭐⭐ |
关键洞察:vivo 有自研 Android 系统 OriginOS,直接竞争 MIUI/ColorOS。系统开发岗会追问 AOSP 源码级别的理解,不仅仅是会用 API。
BSP/驱动开发方向
这是 vivo 的特色岗位,竞争者少但专业要求极高:
| 考点 | 具体内容 | 重要度 |
|---|---|---|
| Linux 驱动模型 | platform_driver/platform_device、probe 函数 | ⭐⭐⭐⭐⭐ |
| 设备树(DTS) | dts/dtsi 语法、compatible 属性、pinctrl 配置 | ⭐⭐⭐⭐⭐ |
| 中断处理 | 上半部/下半部(tasklet/workqueue)、中断共享 | ⭐⭐⭐⭐ |
| 内存子系统 | 虚拟内存、页表、DMA、内存映射(mmap) | ⭐⭐⭐⭐ |
| 芯片适配 | MTK/高通平台差异,Clock/Regulator 框架 | ⭐⭐⭐ |
| C 语言深度 | 指针、位操作、内联汇编基础 | ⭐⭐⭐⭐⭐ |
关键洞察:iQOO 游戏手机对 GPU 驱动优化要求很高,如果目标是 iQOO 团队,需要额外了解 GPU 渲染管线和性能 profile 工具(如 AGI、Snapdragon Profiler)。
影像算法方向
vivo 与蔡司的合作是标志性优势,影像算法岗含金量很高:
| 考点 | 具体内容 | 重要度 |
|---|---|---|
| ISP 流水线 | RAW → Demosaic → AWB → AE/AF → HDR 流程 | ⭐⭐⭐⭐⭐ |
| Camera HAL | Camera2 API、HAL3 接口、CameraService 架构 | ⭐⭐⭐⭐ |
| 图像处理基础 | 卷积、滤波、形态学操作、OpenCV 使用 | ⭐⭐⭐⭐ |
| 计算摄影 | HDR 合成、夜景多帧降噪、超分辨率 | ⭐⭐⭐⭐ |
| 深度学习推理 | ONNX、TFLite、SNPE 等端侧推理框架 | ⭐⭐⭐ |
| C++ 工程能力 | 性能调优、SIMD/NEON 指令集基础 | ⭐⭐⭐⭐ |
三、LeetCode 高频题 Top 20(真实面经数据)
以下题目按真实面经出现频次整理,覆盖 Android 开发、BSP、算法三个主要方向。
🔴 第一梯队:必刷(出现频次最高)
1. 反转链表(No.206)⭐⭐⭐⭐⭐
- 考察频次:各岗位通用,出现频率最高
- 难度:Easy
- 核心思路:迭代法(pre/cur/next 三指针),时间 O(n),空间 O(1);递归法理解递归栈
- 常见追问:如何反转链表的前 K 个节点?如何两两交换链表节点?
- 备考提示:内手写无 bug 是基本要求。BSP 方向的 C 语言手写版本也要熟悉
2. 最长无重复子串(No.3)⭐⭐⭐⭐⭐
- 考察频次:Android 和算法岗高频,常作为热身题
- 难度:Medium
- 核心思路:滑动窗口 + HashMap 记录字符最后出现位置,left 指针跳跃更新
- 常见追问:如果字符集很大(Unicode)怎么处理?如果只有小写字母怎么优化?
- 备考提示:边界条件(left 不能左移到 map 中位置之前)是易错点,面试前必须记牢
3. 二叉树层序遍历(No.102)⭐⭐⭐⭐⭐
- 考察频次:高频考题,几乎必考
- 难度:Medium
- 核心思路:BFS + 队列,每层开始时记录队列大小,用内层循环处理当层节点
- 常见追问:锯齿形遍历(No.103)、最大深度(No.104)、路径总和(No.112)
- 备考提示:层序遍历是 BFS 模板,掌握后可以秒杀一类题目
4. 手撕快速排序(无题号)⭐⭐⭐⭐⭐
- 考察频次:C++ 和 BSP 方向必考
- 难度:Medium
- 核心思路:partition 函数(选 pivot,双指针分区),递归处理左右子数组
- 常见追问:最坏情况时间复杂度?如何优化(三路快排)?与归并排序对比?
- 备考提示:一定要能手写 partition 函数,很多人背了思路但写不出来,现场临时写容易出 bug
5. LRU 缓存(No.146)⭐⭐⭐⭐⭐
- 考察频次:Android 和系统方向高频,缓存场景
- 难度:Medium
- 核心思路:HashMap + 双向链表,HashMap 存 key→节点映射,双向链表维护访问顺序
- 常见追问:如何改成线程安全版本?Android 的 LruCache 实现原理?
- 备考提示:这题在 Android 开发面试里意义特殊——Android SDK 里就有 LruCache,面试官会把算法和实际工程结合来问
🟠 第二梯队:强烈推荐(高频出现)
6. 环形链表 II(No.142)⭐⭐⭐⭐
- 难度:Medium
- 核心思路:快慢指针找到相遇点,再从 head 和相遇点同速走,再次相遇即入环节点
- 数学推导:设从头到入环点距离 a,环长 b,推导出结论。面试时能讲清楚比死记公式更好
- 追问:如果只需要判断有没有环呢(No.141)?
7. 合并两个有序链表(No.21)⭐⭐⭐⭐
- 难度:Easy
- 核心思路:哑节点(dummy node)+ 双指针,最后接上剩余部分
- 追问:合并 K 个有序链表(No.23)?→ 优先队列(小根堆)解法
8. 数组中第 K 大元素(No.215)⭐⭐⭐⭐
- 难度:Medium
- 两种解法:快速选择(平均 O(n))、小根堆(O(n log k))
- 追问:如果数据流实时更新怎么处理?数据量超大怎么分治?
9. 最大子序和(No.53)⭐⭐⭐⭐
- 难度:Medium
- 核心思路:贪心(Kadane 算法),前缀和为负则重置为 0
- 追问:如果要返回子数组的起止下标?如果允许环形数组(No.918)?
10. 岛屿数量(No.200)⭐⭐⭐⭐
- 难度:Medium
- 两种解法:DFS 递归(把访问过的格子标为 '0')、BFS 队列扩展
- 追问:岛屿最大面积(No.695)?封闭岛屿的数量(No.1254)?
🟡 第三梯队:建议掌握
11. 两数之和(No.1)⭐⭐⭐
- 难度:Easy | HashMap 一遍扫描,O(n) 时间
- 价值:虽然简单,但考察代码简洁性和边界处理
12. 合并区间(No.56)⭐⭐⭐
- 难度:Medium | 按左边界排序,逐步合并
- 追问:插入区间(No.57)?
13. 爬楼梯(No.70)⭐⭐⭐
- 难度:Easy | DP 入门题,f(n) = f(n-1) + f(n-2)
- 价值:考察 DP 基础思维,BSP 面试也偶尔出现
14. 最小路径和(No.64)⭐⭐⭐
- 难度:Medium | 二维 DP,dp[i][j] = grid[i][j] + min(dp[i-1][j], dp[i][j-1])
15. 有效的括号(No.20)⭐⭐⭐
- 难度:Easy | 栈的基础应用,注意右括号匹配逻辑
16. 二叉树的最近公共祖先(No.236)⭐⭐⭐
- 难度:Medium | 递归,左右子树分别找 p/q,根据返回值判断
17. 翻转二叉树(No.226)⭐⭐⭐
- 难度:Easy | 递归三行搞定,考察树的基本操作
18. 字符串相加(No.415)⭐⭐⭐
- 难度:Easy | 模拟大数加法,考察字符串处理和进位处理
19. 旋转数组(No.189)⭐⭐
- 难度:Medium | 三次反转法,O(1) 空间
20. 零钱兑换(No.322)⭐⭐⭐
- 难度:Medium | 完全背包型 DP,dp[i] = min(dp[i-coin] + 1)
四、技术面试考点
C++ 方向(BSP / 系统 / 影像算法)
内存模型与管理:
- 栈 vs 堆 vs 全局区的区别,何时用何种分配方式
new/deletevsmalloc/free,区别和使用场景- 内存泄漏的常见原因:原始指针跨函数传递、容器存储原始指针等
- 智能指针:
unique_ptr(独占所有权)、shared_ptr(引用计数)、weak_ptr(解决循环引用)。面试几乎必问
面向对象与多态:
- 虚函数 / 纯虚函数 / 虚函数表(vtable)原理
- 虚析构函数为什么重要:如果基类指针指向派生类对象,析构时不用虚析构会内存泄漏
- RTTI(运行时类型信息):
dynamic_cast和typeid的使用场景 - 虚继承:解决菱形继承问题,虚基类指针(vbptr)
现代 C++ 特性:
- 移动语义(
std::move)和右值引用(&&):减少不必要的拷贝 std::forward完美转发lambda表达式,捕获列表(值捕获 vs 引用捕获)constexpr、auto、范围 for 循环
STL 原理:
vector:动态数组,扩容机制(通常 1.5x 或 2x),push_back均摊 O(1)unordered_map:哈希表,哈希冲突处理(链地址法),最坏 O(n) 查找map:红黑树,有序,O(log n) 操作
Android 开发方向
四大组件:
| 组件 | 必考点 |
|---|---|
| Activity | 完整生命周期(onCreate→onStart→onResume→onPause→onStop→onDestroy),横竖屏切换时的生命周期变化,启动模式(standard/singleTop/singleTask/singleInstance) |
| Service | startService vs bindService 区别,IntentService,Service 保活方案 |
| BroadcastReceiver | 静态注册 vs 动态注册,有序广播,LocalBroadcastManager |
| ContentProvider | URI 格式,CRUD 操作,跨进程数据共享原理 |
进程间通信(IPC):
- Binder 机制:Android 特有的 IPC 方式,一次拷贝实现数据传递,AIDL 自动生成 Binder 代码
- 其他方式对比:Intent/Bundle(跨进程小数据)、Messenger(串行消息队列)、ContentProvider(数据共享)
性能优化(高频追问):
- ANR 排查:主线程 5 秒无响应(Activity)/ 10 秒广播超时,分析 traces.txt 文件,找耗时操作
- 内存泄漏:Activity/Context 泄漏(内部类持有外部类引用),使用 MAT/LeakCanary 排查
- 卡顿分析:16ms 一帧,掉帧定位。Systrace/Perfetto 工具,观察 UI Thread 和 RenderThread 耗时
- 启动优化:冷启动 vs 热启动,延迟初始化,异步启动任务
Handler 机制:
- MessageQueue(单链表维护的消息队列)、Looper(无限循环处理消息)、Handler(发送和处理消息)的关系
- 主线程的 Looper 在 ActivityThread.main() 中启动
- 子线程使用 Handler 必须先 Looper.prepare() 和 Looper.loop()
BSP / Linux 驱动方向
驱动模型:
- platform_driver / platform_device 配对机制,compatible 字符串匹配
- probe 函数的触发时机和工作内容
- 字符设备驱动:file_operations 结构体,open/read/write/ioctl 实现
中断处理:
- 硬中断(上半部):快速响应,不能睡眠,不能做耗时操作
- 软中断、tasklet、工作队列(workqueue):下半部机制,可以睡眠
- 中断共享:IRQF_SHARED 标志,多设备共用一根中断线
设备树(DTS):
- dts/dtsi 文件结构,节点和属性语法
- compatible 属性:驱动匹配的关键
- pinctrl 子系统:GPIO 引脚复用配置
- regulator / clock 子系统:电源和时钟管理
内存管理:
- 物理内存 vs 虚拟内存,页表,MMU
- kmalloc(物理连续)vs vmalloc(虚拟连续)
- DMA 内存映射,cache 一致性问题
计算机网络 & 操作系统(通用)
网络高频考点:
- TCP 三次握手 / 四次挥手,为什么是三次而不是两次
- TIME_WAIT 状态存在的意义(2MSL 等待)
- TCP vs UDP 对比:可靠性、有序性、流量控制(滑动窗口)、拥塞控制(慢启动、AIMD)
- HTTP/1.1 vs HTTP/2 vs HTTP/3 区别
- HTTPS 握手流程,TLS 1.3 新特性
操作系统高频考点:
- 进程 vs 线程:资源分配单位 vs 调度单位,创建开销
- 死锁四个必要条件(互斥、持有并等待、不可抢占、循环等待),银行家算法
- 内存管理:分页 vs 分段,页面置换算法(LRU、FIFO、Clock)
- 同步原语:互斥锁(mutex)、信号量(semaphore)、条件变量(condition_variable),生产者消费者模型手写
五、面经规律总结
基于真实面经数据,vivo 面试有以下几条规律:
规律 1:面试官比较温和,会给提示
与字节/腾讯的"对抗式"面试不同,vivo 面试官整体更友善。如果一道题你卡住了,面试官通常会给一些提示或换一种问法。但这不意味着可以放松准备——提示过多会影响最终评价。
规律 2:Android 生态深度是核心差异化
vivo 非常注重候选人对 Android 系统的深度理解。光会用 API 不够,要能讲清楚为什么这样设计。最常见的追问模式是"你知道 Binder 的实现原理吗?""Activity 启动流程从 Launcher 点击到 onCreate 完整说一遍"。
规律 3:BSP 方向必考设备树和驱动模型
如果投 BSP 岗位,设备树(DTS)相关问题几乎 100% 出现。很多同学简历上写了嵌入式经验,但问到 pinctrl 配置就说不清楚,这是减分项。
规律 4:算法题难度中等,但要求讲清楚
vivo 算法题以 Medium 为主,Hard 较少。但面试官不只看你能否 AC,更看你能不能讲清楚思路,以及能不能在 AC 之后分析时间空间复杂度并提出优化方向。
规律 5:性能优化是 Android 岗必问
ANR、内存泄漏、卡顿分析这三个主题,在 Android 相关岗位的面试里几乎 100% 出现至少一个。最好准备真实项目中的排查案例,能结合工具(Systrace、LeakCanary)来讲。
规律 6:影像算法岗会考 ISP 基础
即使是校招应届生,影像算法岗也会问一些 ISP 基础知识,如 RAW 格式、Demosaic、AWB 算法等。这些内容大学课程很少涉及,需要额外自学。
常见面试结构(参考):
第 1 轮技术面(45-)
├── 自我介绍()
├── 项目经历深问():你做了什么?遇到了什么难题?怎么解决的?
├── 专业知识问答():按岗位考察上述考点
└── 算法题(1-2 道,15-)
第 2 轮技术面()
├── 跨团队技术负责人面试
├── 更偏向系统设计和架构思考
└── 追问第 1 轮的技术细节
HR 面()
├── 职业规划
├── 薪资预期
└── 对 vivo 和岗位的了解
校招节奏
适合有一定编程基础、计划投 vivo 技术岗的应届生。根据目标岗位选择重点模块。
第一周:算法基础()
:链表专项
- 刷题:No.206、No.21、No.141、No.142、No.92、No.25
- 重点:手写反转、快慢指针、哑节点技巧
- 目标:6 道题 内全部手写无 bug
:树与 BFS/DFS
- 刷题:No.102、No.104、No.226、No.236、No.112、No.200
- 重点:层序遍历模板、DFS 递归结构
- 目标:掌握 BFS 队列模板,理解 DFS 递归的退出条件
:动态规划基础
- 刷题:No.70、No.64、No.53、No.322、No.300
- 重点:状态定义、状态转移方程、边界条件
- 目标:能独立推导 dp 方程,不依赖背题
:滑动窗口 & 双指针
- 刷题:No.3、No.76、No.209、No.11
- 重点:窗口收缩条件、指针移动策略
第二周:专业知识强化()
:操作系统
- 重点梳理:进程/线程/协程区别、内存管理(分页/分段)、死锁(四个条件 + 处理方法)
- 生产者消费者模型:用 mutex + condition_variable 手写
- 推荐资源:《深入理解计算机系统》相关章节
:计算机网络
- 重点梳理:TCP 三次握手/四次挥手(画图讲)、滑动窗口、HTTP 各版本对比、HTTPS 握手
- 刷经典面试题:为什么 TIME_WAIT 需要等待 2MSL?UDP 如何实现可靠传输?
:方向专项强化(三选一)
选 Android 开发方向: - 完整梳理 Activity 生命周期(各场景下的回调序列) - 手写 Binder IPC 流程图 - 写一个 LeakCanary 使用 demo,理解弱引用机制
选 BSP/驱动方向: - 阅读 Linux 驱动开发入门资料,理解 platform_driver 注册流程 - 手写一个最简单的字符设备驱动框架(open/read/write/ioctl) - 整理设备树相关知识点,重点看 pinctrl 和 regulator 节点
选影像算法方向: - 学习 ISP 处理流水线(YouTube 搜 ISP pipeline tutorial) - 了解 Camera HAL3 接口:CaptureRequest/CaptureResult 流程 - 跑一个 OpenCV 图像处理 demo(Canny 边缘检测、高斯模糊)
第三周:模拟强化()
:算法题强化
- 重刷第一周的题目,确保速度和准确率
- 新增:No.215(快速选择)、No.146(LRU 完整实现)、No.56(合并区间)
- 计时训练:每道 Medium 题控制在 内 AC
:项目经历 STAR 法则准备
- 整理 1-2 个最有代表性的项目(实习、课设、开源贡献均可)
- 用 STAR 法则(Situation/Task/Action/Result)写好每个故事
- 重点准备:你遇到的最难的技术问题是什么?你是怎么解决的?
:模拟面试
- 找同学或使用 AI 进行模拟面试
- 重点练习:边写代码边讲思路(不能只顾写不开口)
- 录音回听:找出表达不清楚的地方
:查漏补缺
- 整理错题本,重温高频知识点
- 复习 vivo 公司信息:产品线、技术方向、近期新闻
第四周:冲刺收尾()
:高频题最终过关
- 快速过一遍 Top 20 高频题
- 重点:反转链表(C++ 版手写)、LRU 实现、快速排序
- 确保每道题能在 内完整写出并口头讲解
:系统设计基础(Android 方向)
- 设计一个图片加载库(缓存策略、线程模型、内存管理)
- 设计一个 IM 消息系统(消息队列、已读状态、断线重连)
- 主要是理解基本的设计思路,校招一般不会太难
:针对 vivo 的额外准备
- 了解 OriginOS 的特色功能(对比 MIUI/ColorOS 讲出差异)
- 研究 vivo 近期技术博客或开源项目(如有)
- 准备几个问面试官的问题(体现你对 vivo 和岗位的思考)
:放松调整
- 不要做新题,复习关键知识点
- 准备好白板笔、纸张(如果是现场面试)
- 调整作息,保证睡眠
(面试当天)
- 提前 到达(线上面试提前测试音视频)
- 自我介绍控制在 内,重点突出和岗位相关的经历
- 遇到不会的题,先说思路,再写代码,写完主动分析复杂度
备考资源速查表:
| 类别 | 推荐 | 说明 |
|---|---|---|
| 算法刷题 | LeetCode | 按上文题单刷,标注掌握情况 |
| C++ 深度 | 《Effective Modern C++》 | 移动语义、智能指针必读章节 |
| Android 系统 | AOSP 官方文档 | Activity Manager、Binder 相关 |
| Linux 驱动 | 《Linux Device Drivers》(LDD3) | 驱动开发经典教材,英文版免费在线阅读 |
| 操作系统 | 《深入理解计算机系统》(CSAPP) | 第 9/10/12 章重点 |
| 计算机网络 | 《计算机网络:自顶向下方法》 | TCP/IP 部分精读 |
祝你 vivo 面试顺利,成功拿到心仪 Offer!
📚 你可能还需要这些
其他手机厂商备考
如果你还在准备其他厂商,这些攻略也帮你整理好了: - 📌 OPPO 校招备考攻略(同属 BBK 生态,考点有重叠) - 📌 小米校招备考攻略(MIUI 方向,Android 系统岗竞争参考)
互联网大厂备考
同时投互联网大厂的同学: - 📌 腾讯校招备考攻略(游戏引擎 / 客户端方向) - 📌 字节跳动校招备考攻略(算法要求更高) - 📌 美团校招备考攻略(后端 + 算法方向)
算法题专项
- 📌 大厂笔试面试必刷数组题 Top 10(含详解)
- 📌 大厂 C++ 技术面试高频题整理
💡 关注我,少走弯路
我会持续分享: - ✅ 大厂高频题整理(按公司、岗位精准分类,持续更新) - ✅ 最新面经汇总(第一时间整理,关键信息不遗漏) - ✅ 备考攻略实战(不止刷题,涵盖简历/项目/系统设计) - ✅ 内推信息(不定期发布各厂内推机会)
这份攻略花了大量时间整理,如果对你有帮助: - 👍 点个"赞"和"在看",让更多备考的同学看到 - 💬 评论区聊聊你的备考进度或问题 - 🔄 转发给一起备战校招的朋友
有问题随时留言,我会尽量回复!