VIVO C++暑期实习(嵌入式方向)
vivo 的 C/C++ 开发(嵌入式方向) 暑期实习,一面整体更偏 「基础操作系统 + C/C++ 功底 + 项目真实性」,算法题压力通常小于纯后台岗,但若操作系统和并发答得虚,很容易被追问穿。
这篇面经根据 2025 届暑期实习一面回忆 整理,岗位说明里强调工作落在 Android 与 Linux 之间的中间层(性能优化、模块开发、接口适配等),因此面试题会围绕:
- 你能不能讲清楚自己做过的 嵌入式 / 底层相关项目;
- 对 Linux 用户态、进程线程、同步、I/O 是否有体系化理解;
- C/C++ 混用、内存、调试 是否像写过真实代码的人;
- 是否具备进入 中间层模块 的学习意愿与基础。
岗位在做什么?
根据一面 反问 环节,面试官介绍的大致方向是:
做 安卓层和 Linux 层之间的中间模块 的优化或开发。
可以粗浅理解为:
Android 框架 / 应用 | Java/Kotlin、系统服务 |
中间层(本岗位相关) | Native C/C++、HAL 适配、缓冲与性能、与内核驱动对接 |
Linux 内核 / 驱动 | 字符设备、platform 驱动、中断 DMA 等 |
因此备考不必把重点全放在「纯 MCU 点灯」,而要 往 Linux 用户态 + Native 开发 + 基础 OS 理论 靠;有 STM32/RTOS 项目依然加分,但要能翻译成「和 Linux 世界怎么衔接」。
面试问题:
- 问项目:介绍一个和嵌入式相关的项目,你在里面写了哪些 C/C++ 模块?面试官通常会追问:模块边界、你怎么验证是对的、如果流量/负载变大瓶颈在哪。
- 用户态与内核态:为什么需要分两层?嵌入式/Linux 里哪些操作必须进内核?(例如直接操作部分硬件、缺页处理、系统调用入口)
- 进程与线程:在 Linux 上,创建线程比 fork 子进程更「轻」,主要体现在哪些资源或开销上?
- 虚拟内存:简述页表的作用;两个进程的虚拟地址相同,如何映射到不同物理页、互不干扰?
- 阻塞 I/O:线程在 read 上阻塞时,内核大致做了什么?select / poll / epoll 分别想解决什么问题?
- 死锁:死锁的四个必要条件是什么?工程里更倾向 按固定顺序加锁 还是 trylock + 退避?各适合什么场景?
- 条件变量:为什么 pthread_cond_wait 必须放在 while 循环里,而不是只 if 判断一次?(虚假唤醒、竞态)
- 内存对齐与结构体:#pragma pack / __attribute__((packed)) 的利弊?和 DMA、外设寄存器映射、跨平台协议结构体 一起用时要注意什么?
- C 与 C++ 混编:驱动或 HAL 用 C、上层用 C++ 时,链接阶段常见坑有哪些?(extern "C"、name mangling、ABI、谁分配谁释放)
- 性能排查:系统卡顿或 CPU 占用异常,你会用哪些手段?(如 top/htop、perf、strace、/proc、日志分级)各能看到什么、如何缩小范围?
核心大厂开发面试题以及基础八股文资料汇总:
https://www.nowcoder.com/creation/manager/columnDetail/Mq7XWW
准备策略
一、时间规划:建议 3~4 周
第 1 周 | 项目故事 + OS 概念导图 | 2h |
第 2 周 | 进程线程、同步、死锁、条件变量 | 2h |
第 3 周 | I/O 多路复用、虚拟内存、对齐与混编 | 2h |
第 4 周 | 模拟面试 + 反问 + 薄弱点回炉 | 1.5~2h |
若只有 1~2 周,优先:项目主线 + 第 2~7 题对应知识点 + 手写一个小 demo。
二、项目:占准备精力 40%~50%
vivo 一面几乎必问项目,建议准备 「1 主 1 备」:
主项目(5~8 分钟)结构:
- 背景:解决什么问题(监测、通信、人机、采集等)
- 架构图:任务/进程、模块、数据从哪来到哪去
- 你的 C/C++ 贡献:具体文件/模块,避免只说「我们组」
- 一个难点:现象 → 假设 → 验证 → 根因 → 防复发
- 可量化结果:延迟、吞吐、稳定运行时长、内存占用等(有一个即可)
和岗位衔接的一句话(建议背熟):
我在 MCU/RTOS 里做过采集与协议栈;理解中断、DMA、任务同步;若做 vivo 中间层,希望把「数据通路、缓冲、同步」经验迁移到 Linux Native 模块。
有 STM32 / RTOS / 驱动 经历是加分项,但要主动往 Linux 用户态、阻塞 I/O、多线程 上靠,否则容易被认为「只会裸机」。
三、操作系统:按「题号」对标突破
2 | 用户态/内核态、系统调用 | 画一张 syscall 路径简图 |
3 | 进程 vs 线程、资源开销 | 对比 |
4 | 虚拟地址、页表、隔离 | 口述:为何野指针常只杀自己进程 |
5 | 阻塞 I/O、多路复用 | 写个 echo server: |
6 | 死锁四条件、预防策略 | 举一个「锁顺序不一致」导致死锁的小例子 |
7 | 条件变量、虚假唤醒 | 手写生产者-消费者伪代码(while + cond) |
不要求背完整内核源码,但要能 连续说 2~3 分钟不乱,且能接一句「实际工程里我会怎么做」。
查看25道真题和解析