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 应用开发、板卡联调。但只要进入项目深挖,真实水平很快就能区分出来。

项目深挖最常见的几类问题包括:

  1. 你的项目里最难的问题是什么,难在哪。
  2. 当时的指标约束是什么,是实时性、功耗、稳定性还是成本。
  3. 你自己负责的是哪一层,接口边界是什么。
  4. 遇到异常时,最早看到的现象是什么。
  5. 你是如何一步一步缩小范围的。
  6. 方案为什么这样选,放弃了哪些替代方案。
  7. 最终如何验证问题真正解决了。

这部分决定上限,是因为它几乎无法靠短时间突击伪装。面试官通常只要连续追问三到五轮,就能看出你是实际做过,还是只参与过表层联调。

真正有效的准备方式,不是把项目介绍背得更长,而是把每个项目拆成几条可反复复述的主线:系统架构、数据流、控制流、关键瓶颈、调试闭环、性能优化、异常案例、个人贡献。只要这几条线足够稳,项目深挖环节会轻松很多。

大厂和高质量团队更偏爱的,不只是“会做功能”,而是“能把问题收住”

从岗位要求和面试交流习惯看,很多团队已经不满足于候选人只会照着需求把功能堆出来。他们更看重下面这些能力:

  • 能不能快速建立系统视图,而不是局部修补。
  • 能不能把底层原理和工程实现对应起来。
  • 能不能解释一次真实 Bug 的定位与修复过程。
  • 能不能区分现象、根因和临时绕过方案。
  • 能不能在资源受限条件下做出合理权衡。
  • 能不能把项目说成“我真的理解并掌控过它”。

这也是为什么很多面试题看似分散,最后都指向同一种能力模型:基础、并发、时序、接口、资源、调试、验证、表达。

结构化准备模块

模块一:基础硬功

把 C/C++、数据结构、内存模型、编译链接、常见位操作和调试基础重新打牢。目标不是刷题数量,而是任何一个基础点都能讲到工程场景。

模块二:Linux 主链路

覆盖进程线程、同步互斥、内存管理、文件系统、网络 IO、多路复用、驱动框架、设备树、启动流程、常见调试命令。重点是能把用户态到内核态的链路串起来。

模块三:RTOS 与 MCU 稳定性

聚焦任务调度、中断协作、资源竞争、任务间通信、栈与堆管理、低功耗、时钟、中断优先级、DMA、定时器、看门狗和故障恢复。

模块四:驱动、BSP 与协议联动

把 UART/SPI/I2C/CAN/USB/Ethernet 和平台初始化、设备树、GPIO、中断、时钟、DMA、缓存一致性一起复习。这里的目标是具备板级和接口级联合定位能力。

模块五:项目深挖与表达

每个项目至少准备一条完整的问题定位案例、一条性能优化案例、一条架构权衡案例。把“做了什么”升级成“为什么这么做、怎么证明有效”。

模块六:求职转化能力

简历上少写空泛标签,多写可追问的事实。比如吞吐、时延、资源占用、故障率、启动时间、功耗、稳定运行时长、协议兼容范围、联调对象数量。指标越具体,面试越容易主动。

题目清单

  1. volatile 在嵌入式开发里最典型的使用场景有哪些
  2. 指针和数组在参数传递时有哪些本质差异
  3. 结构体对齐和 #pragma pack 会带来哪些隐患
  4. 堆和栈的差异在嵌入式系统里为什么更敏感
  5. 函数指针在驱动或回调设计中通常怎么使用
  6. C++ 虚函数表在嵌入式场景下的代价主要体现在哪
  7. 进程和线程的资源边界分别是什么
  8. select、poll、epoll 的核心差异是什么
  9. 用户态访问设备节点后,字符设备驱动的调用链路是什么
  10. ioctl 为什么常被用于驱动控制接口
  11. 阻塞 IO 和非阻塞 IO 在设备访问里各适合什么场景
  12. 中断上半部和下半部的职责如何划分
  13. 自旋锁和互斥锁分别适合什么上下文
  14. 设备树的作用是什么,为什么越来越常见
  15. 驱动 probe 失败时应该从哪些方向排查
  16. Bootloader、Kernel、Rootfs 之间的关系是什么
  17. RTOS 里的任务通知、队列、信号量分别适合什么问题
  18. 什么是优先级反转,常见解决方式有哪些
  19. 中断服务函数里为什么不适合做复杂逻辑
  20. FreeRTOS 任务栈大小通常怎么评估
  21. RTOS 系统里出现偶发卡死时优先看什么
  22. DMA 为什么能改善某些外设传输效率
  23. UART 粘包和丢包通常从哪些角度定位
  24. SPI 主从通信里最容易踩的时序坑有哪些
  25. I2C 仲裁失败或总线忙死时如何分析
  26. CAN 总线仲裁机制为什么适合实时控制场景
  27. USB 枚举失败通常先看哪几类信息
  28. 以太网收发异常时如何区分驱动问题和网络协议问题
  29. GPIO、中断、时钟配置错误会在系统启动中表现出哪些症状
  30. 链接脚本在 MCU 项目里主要解决什么问题
  31. 启动文件和向量表在单片机启动过程中扮演什么角色
  32. Cache 一致性问题在 DMA 场景下为什么危险
  33. 看门狗机制应该如何设计才不会变成摆设
  34. 低功耗唤醒失败通常和哪些模块配置相关
  35. 项目里最难定位的一类问题通常是什么,为什么
  36. 面试里如何把一个调试案例讲出层次感

临近面试时,复习顺序比资料数量更重要

如果时间只剩一到两周,最稳的方式不是继续横向扩资料,而是开始做收敛:先把基础和主链路过一遍,再按岗位方向补 Linux、RTOS、驱动或 MCU 的专项,然后把项目深挖材料反复打磨到能经得住连续追问。

真正容易出结果的准备,不是把每个知识点都学成百科,而是形成自己的技术骨架。面试官问到哪里,你都能沿着原理、场景、问题、定位、验证这条线继续往下走。

全部评论

相关推荐

评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务