数据来源:真实面经整理 | 版本: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/delete vs malloc/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++ 技术面试高频题整理

💡 关注我,少走弯路

我会持续分享: - ✅ 大厂高频题整理(按公司、岗位精准分类,持续更新) - ✅ 最新面经汇总(第一时间整理,关键信息不遗漏) - ✅ 备考攻略实战(不止刷题,涵盖简历/项目/系统设计) - ✅ 内推信息(不定期发布各厂内推机会)

这份攻略花了大量时间整理,如果对你有帮助: - 👍 点个"赞"和"在看",让更多备考的同学看到 - 💬 评论区聊聊你的备考进度或问题 - 🔄 转发给一起备战校招的朋友

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