vivo软件类秋招笔试复盘:从操作系统到Android编程题全解析
1. 笔试前的信息摸底与岗位判断先说结论vivo的软件类笔试在2024年秋招里属于“中上难度、强应用导向”的那一类不会像互联网大厂那样疯狂堆算法难题但非常看重你对移动端、嵌入式、系统底层的真实理解。如果你投的是软件类岗位不管具体方向是Android应用、驱动BSP、还是AI推理部署笔试题里都会透露出一个信号——vivo要的不是刷题机器而是能直接上手做终端产品的人。我在投递之前其实纠结过一段时间因为vivo的软件类岗位划分比较细有vivo智能手机事业部、vivo AI研究院、还有子品牌iQOO相关的软件团队。不同方向的笔试侧重点不太一样但共用一套笔试系统的可能性很高。这里建议大家在投递前先做一件事去vivo招聘官网和牛客网翻一翻往年的笔试经验帖搞清楚你投的岗位参加的是“统考”还是“定向卷”。我这次参加的就是软件类统一笔试题目覆盖范围很广不像某些互联网公司分得那么细。再说说笔试平台。vivo用的是牛客网的系统这点要格外注意牛客的在线IDE对C和Java的编译器版本、内存限制、输入输出格式要求都和白板写代码不一样平时刷LeetCode习惯了核心代码模式的人一定要提前去牛客官网熟悉一下ACMCoder的输入输出模式。我就见过有人因为不会处理多组输入直接挂掉的非常亏。还有一点值得说的vivo的笔试时间和很多公司会撞车。因为秋招笔试集中在9月到10月vivo的场次安排经常跟其他大厂重叠所以一定要提前做好取舍。而且vivo笔试有两次机会的话最好用第一次试水别直接浪费掉最好的时机。2. 整体题型结构与时间分配复盘我这场笔试一共120分钟题量偏大题型分为三块单选题、多选题、编程题。实际做下来选择题大概有35道左右编程题3道整体节奏是“选择题不能恋战编程题必须留够时间”。身边有同学在单选里纠结太久最后编程题只AC了一道半这是最典型的失败案例。题型数量分值占比建议用时单选题20道约35%30分钟多选题15道约25%20分钟编程题3道约40%60分钟以上从这个分布就能看出来编程题是拉开差距的关键。选择题里有很多是“概念辨析类”比如操作系统进程调度、TCP挥手状态变迁、数据库索引失效场景这些都是送分题前提是你基础扎实。多选是重灾区少选多选都不得分所以不确定的选项千万别乱选。多选题是vivo笔试非常容易翻车的环节。它不会明确提示“少选给一半分”所以策略上宁少勿多能确定两个就选两个拿不准的宁可漏掉也不要冒险。因为多选一旦选了错误项就是0分风险远大于收益。编程题方面vivo的难度比互联网大厂要低但比传统硬件厂商要高介于“剑指Offer”和“LeetCode Hot100”之间。出题方向也比较固定字符串处理、数组操作、模拟题居多偶尔会有一道图论或DP。整体来说只要你在笔试前把常见数据结构和算法的手写模板过两遍AC两道是没问题的。3. 选择题高频考点深度拆解3.1 操作系统与Linux命令vivo的重头戏vivo作为手机厂商对操作系统、Linux内核、进程线程的考察远超一般互联网公司。这很好理解手机软件栈从底层的BSP、内核驱动到中间层的HAL、Framework再到上层的应用每一层都离不开操作系统知识。选择题里我印象最深的是以下几个方向进程与线程的区别、死锁的四个必要条件、进程调度算法。这些是送分题但vivo的出题角度会比较刁钻。比如它不会直接问你“死锁的四个必要条件是什么”而是给你一个具体场景比如“多个线程分别持有一把锁又互相等待对方释放”让你判断这是哪种条件导致的死锁。所以复习的时候不能只背概念得理解每个条件背后的实际场景。Linux文件系统与权限。vivo的笔试特别喜欢考inode、硬链接、软链接的区别以及chmod权限位的计算。我当时遇到一道题是给了一个-rw-r--r--的权限字符串问chmod 754之后变成什么。这类题在牛客上刷几套大厂真题就能覆盖到难度不大但容易因为粗心丢分。Linux常用命令的进阶用法。比如ps -ef和ps aux的区别、grep和awk的配合使用、top命令里各个字段的含义、netstat查看端口占用。这背后其实反映的是实际开发排查问题的能力。手机开发日常避不开日志分析、进程检查、内存排查这些问题考命令就是在看你是不是真的干过这活。3.2 计算机网络TCP与HTTP是绝对主角网络这块vivo考察的比重中规中矩重点集中在TCP/IP、HTTP、HTTPS。选择题中出现了TCP三次握手和四次挥手的状态迁移、TCP和UDP的区别、HTTP和HTTPS的端口与加密过程。其中一道关于TIME_WAIT的题有点意思问的是“主动关闭连接的一方在TIME_WAIT状态等待多长时间”答案是2MSL但很多人在“为什么主动方需要TIME_WAIT而被动方不需要”这个点上答不透。HTTP方面考了HTTP/1.1和HTTP/2的区别包括多路复用、头部压缩、二进制分帧这些特性。这里有一个备考经验值得分享近两年手机厂商都在做内容生态和云服务HTTP/3、QUIC也成了面试和笔试的新宠建议复习时也看一眼QUIC基于UDP实现可靠传输的基本原理以及它在弱网环境下为什么比TCP有优势。网络部分的另一个重点是DNS解析过程、CDN加速原理。这些虽然没直接出现在题目里但和后续手机应用商店、内容分发业务强相关。如果选择题里出现“用户在浏览器输入一个URL到看到页面的完整过程”你要能流畅描述出DNS递归查询、TCP握手、HTTP请求、服务器响应、浏览器渲染的全链路。3.3 数据库与SQL索引优化是得分点数据库题目不算多但知识点很集中基本就是SQL语法、索引、事务隔离级别、存储引擎区别。vivo的数据库题不会让你手写特别复杂的SQL而是在选择题里让你判断某个SQL语句的优化方向或者某个索引场景下是否会生效。比如考了“联合索引(a,b,c)以下哪种查询条件会走索引”这是非常经典的题目。答案只跟最左前缀有关如果查询条件是where b1 and c2那索引就不会生效因为跳过了第一个字段a。同类型的还有“覆盖索引是什么”“什么时候需要回表”。事务隔离级别也考了给了四个隔离级别问“哪个级别可以避免脏读但可能发生不可重复读”答案是Read Committed。这里建议把脏读、不可重复读、幻读的概念彻底搞清楚尤其是MVCC多版本并发控制的基本机制。不会让你默写原理但判断场景下可能出现的问题属于高频题型。3.4 程序设计语言C和Java都有涉及vivo的软件类笔试不区分语言所以C和Java的题都会出现。建议以自己最熟悉的语言为主另一门也要懂基础语法。C考了虚函数、多态、内存布局、智能指针Java考了垃圾回收、集合框架、HashMap底层原理、线程池参数。有一道C题印象很深是关于虚函数表的内存分布问“含有虚函数的类实例化后的对象内存中第一个成员是什么”答案是虚函数表指针vptr。还有一道智能指针的题问shared_ptr和weak_ptr循环引用的问题怎么解决。Java方面考了HashMap的扩容机制和ConcurrentHashMap的锁粒度。这些题在近两年的校招笔试里几乎是必须掌握的如果考前能把源码层面的实现细节梳理一遍比如HashMap为什么用红黑树、ConcurrentHashMap在JDK8里怎么用CAS加synchronized选择题基本就能对答如流。3.5 移动端与Android专项vivo的特色考点如果说前面那些是通用考察那移动端和Android的内容就是vivo区别于互联网公司的特色菜了。这套笔试里Android相关的选择题大概有五六道比重不低。内容涉及Activity的启动模式、Handler消息机制、Binder通信原理、进程优先级、ANR的产生原因与排查方法。Activity启动模式那种题对做过Android开发的人不难但vivo喜欢把它和Intent Flag结合考察。比如问“FLAG_ACTIVITY_NEW_TASK和singleTask启动模式的异同”。这个对只刷算法题、没做过移动端项目的人会有点吃亏。Handler机制考的是Looper、MessageQueue、Handler三者关系以及主线程为什么不会因为Looper.loop()死循环而卡死。这算Android面试的必考题笔试考察也不算超纲。Binder是vivo硬件基因的体现考了Binder相比传统IPC的优势、一次拷贝的原理。这块如果完全不懂建议提前看下Binder驱动的基本工作流程理解了内核态和用户态的数据拷贝差异题就好做了。另外vivo笔试还出现了一道关于ADB调试的命令题问“查看当前设备连接的Android设备列表应该用什么命令”。答案是adb devices非常简单但背后实际上反映的是手机开发和测试的基本功。结合我在实际开发中的体验ADB命令失效是日常开发中最让人头疼的问题之一题外话后面再展开说。4. 编程题实战复盘与AC思路4.1 第一题字符串压缩与解压这道题不算难题目大意是给定一个字符串按规则压缩比如aaaabbbcc变成4a3b2c然后要求实现解压函数。典型的字符串处理模拟题注意边界条件就好。我的AC思路很直接遍历字符串用计数器统计连续字符个数拼到结果里。解压时按数字加字母的形式解析。这类题核心考察的是对字符串索引的把握别越界别漏掉最后一段连续字符。很多人的AC率卡在90%通常就是没处理末尾字符。如果要给出可参考的模板核心代码大致是public static String compress(String s) { StringBuilder sb new StringBuilder(); int i 0; while (i s.length()) { int j i; while (j s.length() s.charAt(j) s.charAt(i)) j; sb.append(j - i).append(s.charAt(i)); i j; } return sb.toString(); }这道题目本身不难但有个小陷阱是压缩后长度可能不减反增比如单个字符abc压缩后就变成了1a1b1c所以题目可能要求“如果压缩后长度不短于原串则返回原串”。这在真实业务中也是常见的优化逻辑考的就是边界考虑是否周全。4.2 第二题矩阵螺旋遍历第二题是螺旋遍历矩阵就是LeetCode 54题的变体。这道题在笔试里出现频率极高vivo也延续了这个知识点。思路就四个边界top、bottom、left、right循环收缩按照右下左上的顺序遍历。注意收缩边界后要检查是否越界这是最容易漏的地方。实现时我用了一个while (top bottom left right)的大循环内部依次处理四条边。每次处理完一条边以后更新边界比如从上往下遍历完第一行后top再次检查是否仍然满足循环条件。这种题复杂度是O(mn)数据范围只要不超过1000乘1000基本没问题。vivo笔试的数据范围一般给得比较保守暴力解法基本都能过。所以编程题的核心不是追求最优解而是保证边界不出错、一次AC。4.3 第三题带权最短路径变种第三题是一道图论题但考察的不是裸Dijkstra。题目背景大概是“在一个城市网格里从起点到终点有些格子有额外消耗求最小消耗路径”。本质上就是带权重的BFS最短路径问题可以用Dijkstra或者0-1 BFS解决。这道题区分度比较高因为很多人看到图论就直接放弃。但仔细读题就会发现权重就两种值比如普通格子和障碍格子这就转换成了01BFS用双端队列就能解决复杂度可以做到O(VE)。我当时用的是Dijkstra堆优化的实现方式也不复杂关键是visited数组的更新时机要放在出队时避免重复松弛。分享一个这类题的小套路如果图上每个格子的代价非负且有限种取值优先考虑0-1 BFS比Dijkstra代码更短不容易写错。如果是浮点数代价或者复杂状态再考虑Dijkstra。平时刷题可以两道题对比着做笔试时就有肌肉记忆。5. 考后的技术延伸从笔试题看vivo技术栈5.1 ADB调试与设备管理能力vivo笔试出现了ADB相关的命令题不是偶然。结合我自己平时用vivo手机做开发和刷机的经验ADB和Fastboot是终端开发绕不开的工具链。ADB连接失效是高频问题比如驱动没装好、设备授权弹窗没点、端口被占用都可能导致adb devices看不到设备。处理办法通常是先换数据线很多线只能充电不能传数据、再检查开发者选项里的USB调试是否开启、然后看看“USB配置”是否选择了传输文件模式最后才是重装驱动或重启adb服务。Fastboot模式下指令集相对少但刷机时必须用到比如fastboot flash boot boot.img。这套工具链是手机软件开发、测试、刷机的基本功笔试考它其实是在筛掉完全没碰过真机的人。5.2 AI辅助重构从vivo的工程实践看时代变化笔试结束后我查资料发现vivo内部有个挺出圈的案例用AI在2天时间重构了2万行Vue项目代码。这说明vivo的软件工程团队不只是做硬件系统在应用层和前端工程化上也有很多实践。对于笔试的启示是vivo的软件类岗位对技术栈的要求是多元的除了Android系统开发还有大量跨端应用、工具链、内部平台的开发需求。对应到笔试的准备上不要把目光全锁在C、Java和Android上JavaScript/TypeScript、前端框架的基础知识也有可能出现。虽然我这次笔试没遇到前端题但多学一门语言、多了解一些工程化实践在面试环节反而更容易脱颖而出。特别是会用AI辅助编程的同学能说出自己在项目里怎么用AI提升重构效率这是很有说服力的亮点。5.3 手机关联功能与应用生态vivo的笔试很多题目背后都能跟手机业务对上。比如无线调试配对码的获取、应用商店上架审核流程、手机电池容量自检、屏幕共享到其他设备。这些实际功能背后是大量软件工程师的日常开发内容。笔试中出现网络相关的HTTP题目可能就对应着应用商店的下载、更新、流量统计等业务场景。如果你本身是vivo手机用户在笔试中其实有一定的隐性优势因为你对vivo系的系统交互、设备管理、应用分发会有更直观的感知。笔试不直接考这些但在面试聊项目时能结合vivo手机真实功能来讲业务场景会比只讲技术概念更打动人。6. 备考时间线与资源清单6.1 提前准备期7月初至8月中旬我建议把笔试准备分为三个阶段。这个阶段以打基础为主目标是过一遍数据结构与算法的基础内容同时把操作系统、网络、数据库三门专业课的系统性知识补起来。不用追求面面俱到但核心概念必须清楚。刷题方面按LeetCode经典高频100题来就行重点是数组、链表、栈、队列、哈希、二叉树、字符串这些基础数据结构。6.2 强化刷题期8月中至9月中旬这个阶段开始针对vivo和同类终端厂商的笔试题做专项训练。我用的是牛客网的历年真题题库还会去LeetCode上按企业标签筛选vivo的题目。同时要开始刷Android专项知识点了尤其是Handler、Binder、Activity启动模式这些内容。编程题方面要进入限时训练模式每道题控制在30分钟内模拟真实笔试的节奏。6.3 冲刺模拟期笔试前2周冲刺期的核心是“仿真”。这个阶段一定要按照真实笔试的时间、题量来完整做套题训练时间分配和心态控制。每次模拟完都要复盘把错题分类整理是知识点盲区还是审题不仔细还是编码速度太慢。尽量避免在概念背诵上花大量时间因为选择题考察的是理解和辨析不是名词解释。备考期间推荐的资源清单基础算法复习代码随想录全站内容、LeetCode Hot100C/Java语言基础Effective C或Effective Java重点章节操作系统/网络/数据库王道考研单科书重点看课后选择题Android专项Android开发艺术探索相关章节企业真题牛客网vivo真题、牛客网手机厂商真题汇总模拟平台牛客网在线编程系统熟悉ACM模式输入输出7. 常见问题与避坑技巧速查表问题我的处理方案牛客在线IDE不支持本地调试先在本地IDE调通再把代码贴过去注意主类名、包名、输入输出格式试卷整体做不完先把所有选择题快速过一遍不会的标记跳过最后一起蒙编程题优先做最有把握的选择题出现陌生技术名词结合题干关键词排除非主流选项选出最符合常识的答案别空着编程题提交后AC为0优先检查输入输出格式再看数组下标是否从0开始最后检查是否存在除零或越界多选题不确定选项宁少勿多只选有把握的多选的得分概率比错选要小摄像头监控环境笔试前检查设备、网络、电量提前关掉可能弹窗的软件笔试过程中还有几个实操细节值得提醒提前半小时进入等待状态把手机调成勿扰模式因为考试界面会检测切屏次数网络用有线网或者稳定的5G Wi-Fi避免跳ping失去连接准备好身份证和纸质草稿纸虽然线上笔试一般不会查验但草稿纸在编程题的推演中特别重要。8. 笔试之后的下一步衔接笔试结束大概一到两周会有结果。vivo的效率在手机厂商里算比较高的通过笔试后一般会安排两到三轮技术面试然后是一轮HR面试。这里有一个很实用的建议笔试结束后趁记忆还新鲜把编程题的三种解法、选择题里的迷惑选项都记录下来形成错题笔记。因为技术面试官很有可能会看到你的笔试内容甚至会在面试里追问某道题目的“有没有更好的解决方案”你如果当时记下来了这时候就非常从容。还有一点是关于投递时间窗口的。vivo秋招的简历投递和笔试通知是分批次的一般来说提前批大概7月有单独的机会正式批8月中旬到9月底是最主要的一次。建议别拖到最后一批才投因为越到后面HC招聘名额越少笔面试要求也水涨船高。笔试只是秋招的一环说重要也重要说不重要也不重要。它更重要的是一个自我检测的机会。就算这次没过通过这套题你也能清晰看到自己在基础知识和代码能力上的短板。把这些短板补齐到了春招或者下一家的笔试你的竞争力会明显不一样。我自己的感受是秋招不是拼谁的单次成绩最高而是拼谁在多次失败后还能保持稳定的输出。vivo这套题整体做下来给我最大的收获不是Offer本身而是让我知道接下来该往哪个方向使劲。