2026 嵌入式面试热点:Linux、RTOS、驱动、MCU 到项目深挖,准备主线其实已经很清楚了
很多人复习嵌入式面试时,容易在资料堆里来回切换:今天刷 C 语言,明天看 Linux 驱动,后天补 FreeRTOS,最后又发现面试官真正想看的并不是你背过多少知识点,而是你能不能把底层基础、调试能力、工程经验和项目表达连成一条线。
从近阶段岗位要求和面试交流内容里能明显看出来,嵌入式岗位的筛选标准正在收紧。只会停留在单片机外设调用、只会背八股、只会说“做过串口通信”的候选人,区分度越来越低。真正更容易拿到面试通过感的,是那些既能讲清楚 C/C++ 基础,又能落到 Linux/RTOS/BSP/驱动/协议/调试/项目闭环 的人。
如果把现在常见的面试方向压缩成一句话,就是:基础要硬,系统观要有,项目要能深挖,问题定位过程要讲得出来。
为什么今年的面试越来越看“系统化能力”
很多嵌入式岗位表面上写的是 MCU 开发、Linux 开发、驱动开发、BSP 开发、应用开发,但面试过程里的考察边界并不完全按岗位名字划分。
做 MCU 的,依然会被追问中断优先级、启动流程、内存分区、DMA、定时器、通信异常定位,甚至会被问到任务调度和临界区处理。做 Linux 的,不只是考 select/poll/epoll、进程线程和内存管理,也会追到字符设备、平台总线、设备树、同步机制、用户态与内核态交互。做 RTOS 的,除了任务、队列、信号量、互斥锁,往往还要说清楚抢占、优先级反转、ISR 与任务协作,以及系统卡死时怎么排查。
这背后反映的其实是同一个判断:面试官不太在意你是否背过一整本书,更在意你能不能面对一个真实系统,把问题拆开、定位、解释并收敛。
第一条主线:C/C++ 不是开胃菜,而是整个技术栈的地基
不少人一提嵌入式准备,就急着往 Linux 驱动、协议栈、RTOS 调度上冲,结果在最基础的环节先失分。C 语言和 C++ 在嵌入式面试里从来都不是“送分题”,它们反而决定了后续追问能追多深。
常见高频点依然很稳定:指针与数组、函数指针、结构体对齐、大小端、volatile、const、宏与内联、堆栈区别、内存泄漏、野指针、回调机制、链表、环形队列、位运算。到了 C++,又会延伸到对象模型、虚函数、虚表、多态、继承、RAII、智能指针、引用与右值语义,甚至模板在嵌入式工程里的边界。
面试真正拉开差距的地方不在定义,而在落地场景。比如为什么寄存器映射地址常配合 volatile?为什么中断上下文里不建议做复杂内存分配?为什么环形缓冲区比链表更适合某些串口接收场景?为什么一个回调注册接口设计不当,后面就会带来生命周期和线程安全问题?
基础回答一旦能自然过渡到工程语境,面试官就会默认你不是死记硬背型选手。
更加全面的嵌入式面试八股文和大厂面试题都整理在专栏了:
https://www.nowcoder.com/creation/manager/columnDetail/mPZ4kk
第二条主线:Linux 方向的考察已经从“会用”转向“懂链路”
Linux 仍然是当前不少中高含金量嵌入式岗位的核心筛选器。这里的难点不只是点多,而是问题之间彼此相连。进程线程、调度、虚拟内存、文件系统、网络、驱动模型、设备树、同步并发,看起来是不同模块,但面试里经常会被串成一条链。
典型追问方式通常长这样:用户态程序访问某个设备节点,底层驱动如何注册?open/read/write/ioctl/mmap/poll 经过了哪些路径?阻塞和非阻塞差异是什么?设备中断来了之后,上半部和下半部怎么配合?如果数据吞吐上不去,是应该先看拷贝次数、等待机制、中断频率,还是锁竞争?
很多候选人在 Linux 面试里最大的问题,是每个知识点都能说一句,但连不起来。真正更有说服力的表达,是能够从应用层请求一路讲到内核接口、驱动回调、硬件中断、缓冲区设计、唤醒机制,再回到用户态如何读取和超时控制。哪怕你做的不是完整驱动,只要你能把链路说清楚,认可度也会明显提升。
另外一个越来越高频的方向是设备树、BSP 和启动流程。很多团队不要求新人从零移植一套 Linux,但会很在意你是否理解 bootloader -> kernel -> rootfs -> driver probe -> app startup 这条启动主线。会不会改设备树,会不会看启动 log,会不会定位 probe 失败,会不会处理 pinctrl、时钟、GPIO、中断号配置,这些问题都很容易成为加分项。
第三条主线:RTOS 面试看的是“实时性 + 并发控制 + 稳定性”
RTOS 的知识点看起来比 Linux 少,但面试反而常常问得更细。原因很简单:RTOS 通常更贴近实时业务,一旦并发模型没处理好,问题会直接变成丢包、超时、死锁、喂狗失败、系统重启或者偶发卡死。
任务调度只是起点。更关键的是你要能说清楚什么时候该用任务通知,什么时候该用队列,什么时候信号量只是同步而不是数据传递,互斥锁为什么能处理优先级继承,临界区和关闭中断分别适合什么场景,ISR 里哪些 API 能调,哪些不能调。
如果项目里用过 FreeRTOS、RT-Thread、ThreadX、uc/OS 或厂商 RTOS,面试官基本都会继续问栈大小怎么定、任务优先级怎么分、CPU 占用率怎么观察、堆内存怎么管理、定时器漂移怎么处理、任务卡死时怎么抓现场。这里真正重要的不是 API 名字,而是你有没有稳定性意识。
说得再直接一点,RTOS 面试里最有价值的经验通常来自故障现场,而不是函数手册。
第四条主线:驱动、BSP 和协议题,已经不满足于“知道接口”
驱动/BSP/协议类问题现在非常容易被连环追问,因为它们最能区分“看过资料”和“干过工程”。
以通信协议为例,UART/SPI/I2C/CAN/USB/Ethernet 经常一起出现,但问法通常不会只停留在时序定义。面试官更想知道的是:主从关系如何影响驱动设计?DMA 何时能显著减轻 CPU 压力?总线异常时你怎么恢复?I2C 仲裁失败、SPI 丢时钟、UART 粘包、CAN 仲裁冲突、网口收发异常,分别怎么定位?如果板子上协议能跑但偶发出错,你第一步看波形、log、寄存器还是线程时序?
BSP 方向则常常围绕板级初始化展开。时钟树、引脚复用、启动文件、链接脚本、内存映射、cache、MPU/MMU、外设初始化顺序、看门狗、低功耗唤醒,这些内容在项目里平时容易被封装起来,但一到面试就要重新拆开说。尤其是做 STM32、NXP、TI、瑞萨、全志、瑞芯微、海思这类平台相关开发的人,往往会被追着问启动阶段到底发生了什么,系统为什么卡在某一步,如何证明不是硬件问题。
协议题和 BSP 题的高分答案,一般都带有明显的“问题定位路径”。
第五条主线:项目深挖已经成为决定上限的关键环节
很多简历看上去模块都很全:做过传感器采集、通信协议、控制逻辑、人机交互、日志系统、OTA、驱动适配、Linux 应用开发、板卡联调。但只要进入项目深挖,真实水平很快就能区分出来。
项目深挖最常见的几类问题包括:
- 你的项目里最难的问题是什么,难在哪。
- 当时的指标约束是什么,是实时性、功耗、稳定性还是成本。
- 你自己负责的是哪一层,接口边界是什么。
- 遇到异常时,最早看到的现象是什么。
- 你是如何一步一步缩小范围的。
- 方案为什么这样选,放弃了哪些替代方案。
- 最终如何验证问题真正解决了。
这部分决定上限,是因为它几乎无法靠短时间突击伪装。面试官通常只要连续追问三到五轮,就能看出你是实际做过,还是只参与过表层联调。
真正有效的准备方式,不是把项目介绍背得更长,而是把每个项目拆成几条可反复复述的主线:系统架构、数据流、控制流、关键瓶颈、调试闭环、性能优化、异常案例、个人贡献。只要这几条线足够稳,项目深挖环节会轻松很多。
大厂和高质量团队更偏爱的,不只是“会做功能”,而是“能把问题收住”
从岗位要求和面试交流习惯看,很多团队已经不满足于候选人只会照着需求把功能堆出来。他们更看重下面这些能力:
- 能不能快速建立系统视图,而不是局部修补。
- 能不能把底层原理和工程实现对应起来。
- 能不能解释一次真实 Bug 的定位与修复过程。
- 能不能区分现象、根因和临时绕过方案。
- 能不能在资源受限条件下做出合理权衡。
- 能不能把项目说成“我真的理解并掌控过它”。
这也是为什么很多面试题看似分散,最后都指向同一种能力模型:基础、并发、时序、接口、资源、调试、验证、表达。
结构化准备模块
模块一:基础硬功
把 C/C++、数据结构、内存模型、编译链接、常见位操作和调试基础重新打牢。目标不是刷题数量,而是任何一个基础点都能讲到工程场景。
模块二:Linux 主链路
覆盖进程线程、同步互斥、内存管理、文件系统、网络 IO、多路复用、驱动框架、设备树、启动流程、常见调试命令。重点是能把用户态到内核态的链路串起来。
模块三:RTOS 与 MCU 稳定性
聚焦任务调度、中断协作、资源竞争、任务间通信、栈与堆管理、低功耗、时钟、中断优先级、DMA、定时器、看门狗和故障恢复。
模块四:驱动、BSP 与协议联动
把 UART/SPI/I2C/CAN/USB/Ethernet 和平台初始化、设备树、GPIO、中断、时钟、DMA、缓存一致性一起复习。这里的目标是具备板级和接口级联合定位能力。
模块五:项目深挖与表达
每个项目至少准备一条完整的问题定位案例、一条性能优化案例、一条架构权衡案例。把“做了什么”升级成“为什么这么做、怎么证明有效”。
模块六:求职转化能力
简历上少写空泛标签,多写可追问的事实。比如吞吐、时延、资源占用、故障率、启动时间、功耗、稳定运行时长、协议兼容范围、联调对象数量。指标越具体,面试越容易主动。
题目清单
- volatile 在嵌入式开发里最典型的使用场景有哪些
- 指针和数组在参数传递时有哪些本质差异
- 结构体对齐和 #pragma pack 会带来哪些隐患
- 堆和栈的差异在嵌入式系统里为什么更敏感
- 函数指针在驱动或回调设计中通常怎么使用
- C++ 虚函数表在嵌入式场景下的代价主要体现在哪
- 进程和线程的资源边界分别是什么
- select、poll、epoll 的核心差异是什么
- 用户态访问设备节点后,字符设备驱动的调用链路是什么
- ioctl 为什么常被用于驱动控制接口
- 阻塞 IO 和非阻塞 IO 在设备访问里各适合什么场景
- 中断上半部和下半部的职责如何划分
- 自旋锁和互斥锁分别适合什么上下文
- 设备树的作用是什么,为什么越来越常见
- 驱动 probe 失败时应该从哪些方向排查
- Bootloader、Kernel、Rootfs 之间的关系是什么
- RTOS 里的任务通知、队列、信号量分别适合什么问题
- 什么是优先级反转,常见解决方式有哪些
- 中断服务函数里为什么不适合做复杂逻辑
- FreeRTOS 任务栈大小通常怎么评估
- RTOS 系统里出现偶发卡死时优先看什么
- DMA 为什么能改善某些外设传输效率
- UART 粘包和丢包通常从哪些角度定位
- SPI 主从通信里最容易踩的时序坑有哪些
- I2C 仲裁失败或总线忙死时如何分析
- CAN 总线仲裁机制为什么适合实时控制场景
- USB 枚举失败通常先看哪几类信息
- 以太网收发异常时如何区分驱动问题和网络协议问题
- GPIO、中断、时钟配置错误会在系统启动中表现出哪些症状
- 链接脚本在 MCU 项目里主要解决什么问题
- 启动文件和向量表在单片机启动过程中扮演什么角色
- Cache 一致性问题在 DMA 场景下为什么危险
- 看门狗机制应该如何设计才不会变成摆设
- 低功耗唤醒失败通常和哪些模块配置相关
- 项目里最难定位的一类问题通常是什么,为什么
- 面试里如何把一个调试案例讲出层次感
临近面试时,复习顺序比资料数量更重要
如果时间只剩一到两周,最稳的方式不是继续横向扩资料,而是开始做收敛:先把基础和主链路过一遍,再按岗位方向补 Linux、RTOS、驱动或 MCU 的专项,然后把项目深挖材料反复打磨到能经得住连续追问。
真正容易出结果的准备,不是把每个知识点都学成百科,而是形成自己的技术骨架。面试官问到哪里,你都能沿着原理、场景、问题、定位、验证这条线继续往下走。

查看29道真题和解析