项目能跑、面试被问穿:嵌入式从“用过”到“讲得清”,差的是这 4 条追问链

“做过 UART 吗?”
“做过。”
“那从发一个字节到线上电平变化,中间经过了哪些环节?”
很多人第一句还能接,第二句就开始沉默。嵌入式面试的问法从来不是“你用过什么”,而是“你能不能讲清它怎么运转的”。这一层,恰恰是项目能跑和面试能过之间的分界。
我后来把自己从“能跑通”到“能讲清”的复盘,整理成了一套极度系统化的嵌入式面试资料库。它不是简单堆八股,而是按面试官真实追问顺序,把从 C 语言底层到各大厂真题全部串了起来。
【我观察到的信号】
很多人准备嵌入式面试,时间花在背冷门芯片、收集协议清单、刷面经上。但第一轮真正容易暴露的,是这些情况:
——工程能配起来,但说不清复位后到 main 之间发生了什么
——用过队列和信号量,但讲不清阻塞、唤醒和超时怎么选
——写过 UART/SPI/I2C,但一问时序、错误处理和 DMA 就含糊
——项目里写了“实时”,但说不清最坏路径和优先级设计
——Demo 能跑,需求一改就不知道从内存、时序还是并发入手查
这些问题表面看是知识点零散,本质是“功能层”和“体系结构层”之间断了。
嵌入式校速通专栏,https://www.nowcoder.com/creation/manager/columnDetail/0rvBo8
【面试官其实在判断什么】
我复盘下来,基础问题通常不是在考定义,而是在确认三件事:
第一,你写的代码,底层机制是不是真的理解。
第二,出问题时,你能不能按内存、时序、并发、启动链路去定位。
第三,简历上的 MCU、RTOS、驱动,是不是只停留在“调过例程”。
能说出名词,只能算听过;能在项目里用,算用过;能解释取舍、错误现象和排错路径,才算真正能接住追问。嵌入式面试最容易被卡住的,就是从“用过”到“讲得清”这一跳。
【我最容易露怯的四类问题】
C 语言和内存链路
指针生命周期、数组传参、结构体对齐、位操作、volatile/const、变量所在段,这些不是附加题,而是协议解析、寄存器操作和缓冲区管理的日常语言。项目一深挖,很容易落到“这个指针为什么不能返回”“这个结构体为什么解析错位”。
中断、DMA 和任务之间的并发
谁写谁读、临界区包住哪几行、中断上下文为什么不能阻塞、DMA 缓冲什么时候能复用、任务优先级怎么设计,这些问题不搞清楚,实时系统就容易变成“偶发玄学”。
总线和外设的“为什么通”
能收发只是起点。面试官更想听:主从关系、时钟来源、错误恢复、阻塞轮询和 DMA 各自适合什么场景,以及项目里为什么这么选。
启动、链接和故障定位
向量表、链接脚本、段初始化、栈布局、HardFault 现场,这些内容平时不显眼,但一被问到 BootLoader、启动流程和内存布局,基础断档会非常明显。
【我的补法:按追问链准备,而不是从头背教材】
我没有把教材重新刷一遍,而是把每个知识点做成“追问链”:
这个机制解决什么问题 -> 不用它会怎样 -> 用错了会出现什么现象 -> 出了 bug 从哪里查 -> 项目里哪段代码能对应上。
项目不是单独背出来的,而是要能反养基础。每讲一个模块,都要能回到“数据流、控制流、异常流”。为了彻底解决这个问题,我花了大量时间,建了一个覆盖 20+ 核心模块的系统性知识库。
【这套资料里到底有什么(重点)】
重点不是给标准答案,而是给回答框架和实战题库:
第一部分:底层与核心体系
涵盖 C 语言核心、C++ 特性、汇编与处理器架构、操作系统原理与 RTOS、内存管理与性能优化。这是接住面试官底层追问的基石。
第二部分:进阶与应用实战
涵盖 Linux 应用/内核与驱动开发、通信协议(有线/无线/物联网)、嵌入式系统架构、音视频、汽车电子与功能安全、工业控制与机器人等垂直领域。
第三部分:大厂真题与手撕代码
除了“必会手撕代码”专区,我还整理了 16 家一线大厂的嵌入式面试真题集锦(持续更新):
大疆、诺瓦、小米、CVTE、华为、海康威视、联发科、字节跳动、蔚来、小鹏、理想、汇顶科技、全志科技、瑞芯微、博世、大华股份……
每个问题先讲面试官想确认什么,再给能站住的回答结构,然后落到项目里怎么讲,最后补常见追问怎么接。
【这套内容适合】
——项目能写,但一被追问底层就心虚的同学
——面经背了不少,但回答没有结构、接不住追问的同学
——想系统补 C 语言、启动链路、中断并发、RTOS 和总线的同学
——目标大厂,需要针对特定公司(如大疆、华为、蔚小理)进行真题演练的同学
想把项目从“能跑通”讲到“能讲清”,可以看我的专栏/资料:
嵌入式校速通专栏:https://www.nowcoder.com/creation/manager/columnDetail/0rvBo8
基础这东西,平时看着慢,面试时最省时间

参与讨论