嵌入式暑期实习面试,八股到底要背到什么程度才算够?
简历上写了 STM32、FreeRTOS、SPI、I2C、UART、Bootloader、看门狗,结果一到面试,面试官追问一句:“你这个串口接收为什么最后用了 DMA + 空闲中断?” 很多人一下就停住了。
这时候你会发现,真正卡人的不是“没背过八股”,而是你把“见过这些词”误以为“已经能面试了”。
先说结论:嵌入式暑期实习岗不要求你像社招那样做过完整量产项目,也不要求你把 Linux 内核、RTOS 调度器源码都啃透。它真正看三件事:基础是不是成体系,项目是不是说得透,遇到问题时有没有真实的排查能力。八股要背,但不是背定义,而是要背到能和项目现象、设计取舍、调试过程连起来。
暑期实习岗到底在筛什么
第一层是基础。C 语言、指针、内存、static、const、volatile、结构体对齐、中断、通信协议,这些不是加分项,是门槛。你可以没有很深的工程经验,但不能一问基础就散。
第二层是 MCU 和 RTOS 的“能用能力”。面试官不会因为你会点 CubeMX 就觉得你会 STM32,他更想知道你配完外设之后,为什么这么配,异常时会怎么错。比如 UART 为什么丢包,DMA 为什么更合适,中断为什么不能塞太多逻辑,任务优先级为什么可能把系统搞得假死。
第三层是项目真实性。暑期实习面试里,最怕的不是你项目小,而是你项目假。项目小没关系,哪怕只是做一个传感器采集和串口上报系统,只要你能讲清楚任务划分、通信方式、异常处理、调试过程,照样比“做过智能小车、熟悉多种协议、了解嵌入式开发流程”这种简历更有说服力。
第四层是学习和定位问题的能力。实习生不一定要求你一次答对,但会看你能不能顺着现象往下拆。比如串口乱码,你能不能想到时钟、波特率、接地、协议帧、缓存覆盖;比如任务卡死,你能不能想到死锁、优先级、阻塞等待、栈溢出、喂狗逻辑。
嵌入式大厂面试题,基础八股文资料合集整理:
https://www.nowcoder.com/creation/manager/columnDetail/mPZ4kk
八股背到什么程度才算“够用”
很多人背八股,卡在“会背定义但不会落地”。真正在面试里,至少要过四层。
第一层,听过。比如你知道 SPI 是全双工,I2C 是双线总线,UART 是异步串口;你知道 volatile 常用于中断和寄存器;你知道互斥锁和信号量不是一回事。只有这一层,几乎不够面试。
第二层,能用。你真的写过 UART 收发,配过定时器中断,知道 FreeRTOS 里任务、队列、信号量大概怎么配合,知道看门狗该放在哪类系统里。这一层可以撑住简短追问,但一旦问到“为什么这样设计”,还是容易掉。
第三层,熟悉。你不仅用过,还知道常见坑。比如 UART 收包为什么经常配 DMA + 空闲中断,I2C 为什么容易卡死在忙状态,SPI 片选拉高拉低时序为什么会影响从设备,任务栈为什么会爆,优先级翻转为什么会出现。这一层,才比较像一个能上手的暑期实习候选人。
第四层,真的理解。你能把原理、现象、设计取舍、调试过程连起来说。比如“为什么这里没用轮询而是用了中断”“为什么没直接上互斥锁而是用消息队列解耦”“为什么串口打印过多会影响实时性”。暑期实习不一定要求你所有点都到第四层,但你至少要在自己的主项目上,把几条核心链路说到这一层。
什么算真会,什么不算真会
简历上写“熟悉 STM32”,不算会。你得能说清楚:你用的是哪一类外设,解决了什么问题,调过什么 bug,为什么最后方案定成这样。
写“做过 FreeRTOS”,也不算会。你得能说清楚任务怎么拆,为什么这么拆,任务间怎么同步,栈大小怎么估,为什么不用一个大 while 死循环把逻辑全塞进去。
写“了解 SPI/I2C/UART”,更不算会。你至少要能说出三者的场景差异、速度特点、硬件连线复杂度、常见问题、调试方法。最好还能结合一个真实外设,比如屏幕、IMU、EEPROM、ADC 来讲。
真正能打动面试官的,不是“我学过很多”,而是“我真的把一个东西做通了”。哪怕只是把一个传感器采集链路做扎实,也比堆十几个名词有效。
面试官最喜欢怎么顺着你的项目追问
你写“做过驱动”,他大概率会问:初始化流程是什么,时序要求是什么,读写失败怎么处理,数据异常时怎么判断是硬件问题还是软件问题。
你写“做过 RTOS”,他大概率会问:为什么要上 RTOS,不上会怎样,任务之间怎么通信,为什么不用中断直接处理,优先级怎么定,死锁和饥饿怎么避免。
你写“做过通信协议”,他大概率会问:怎么分包,怎么校验,怎么处理丢包和超时,粘包拆包怎么办,为什么这个协议适合你的系统。
你写“做过优化”,他大概率会问:优化前什么表现,优化后什么指标,怎么验证有效,不优化会出什么问题。
所以项目准备不是“把流程背一遍”,而是要把每个亮点往后再追三层。你要提前替面试官追问自己,不然一到现场就会发现,简历上的每一个动词都可能变成一串问题。
暑期实习最该怎么准备
第一,先收口,不要贪多。与其到处背,不如先把一个 MCU 项目讲透,把一条 RTOS 链路讲透,把一条通信链路讲透。面试里真正出效果的,是深度,不是词汇量。
第二,八股和项目一起背。比如复习 volatile,不要只背定义,要马上联想到寄存器、中断共享变量、多线程可见性;复习 DMA,不要只说“减轻 CPU 负担”,要能说到什么时候不值得上 DMA、什么时候反而增加复杂度。
第三,准备三个“我真的调过”的问题。比如串口丢包、I2C 卡死、任务卡住、看门狗误复位、栈溢出、定时异常。这些经历比空泛的“熟悉嵌入式开发流程”更像实习生该有的东西。
第四,简历别写满“精通”“熟悉”“掌握”。越是这种词,越容易把面试官的追问强度拉高。对实习岗来说,真实比夸大重要得多。你会什么,就把链路写清楚;你没做过量产,就别把自己包装成做过完整平台架构。
最后一句实话
嵌入式暑期实习面试,从来不是在招“背得最多的人”,而是在招“基础够扎实、项目说得明白、出了问题知道怎么往下拆的人”。八股当然要背,但你真正要练的,是把每个知识点和项目现场接起来。
你能把“这个知识点是什么、我在哪里用过、当时为什么这么选、出过什么问题、最后怎么解决”这五句话连起来,基本就已经超过一大批只会背答案的人了。
高频问题清单
volatile到底该用在什么地方?const和宏定义有什么区别?- 指针和数组的本质区别是什么?
- 堆和栈有什么区别,为什么单片机更关心栈?
- 结构体为什么会有对齐和填充?
static在局部变量和全局变量里分别是什么意思?- 中断服务函数里为什么不建议写耗时逻辑?
- 中断和轮询分别适合什么场景?
- STM32 从上电到
main之前发生了什么? - NVIC 优先级和抢占是怎么回事?
- UART 为什么会出现丢包或乱码?
- 为什么很多串口接收方案会用 DMA + 空闲中断?
- SPI、I2C、UART 各自适合什么外设场景?
- I2C 为什么需要上拉?为什么容易卡死?
- DMA 的本质作用是什么?什么时候不建议上 DMA?
- 看门狗的作用是什么?独立看门狗和窗口看门狗有什么区别?
- FreeRTOS 里任务、队列、信号量、互斥锁分别解决什么问题?
- 二值信号量和互斥锁的差异到底在哪?
- 什么叫优先级翻转?怎么解决?
- 任务栈大小一般怎么估?
- 为什么高优先级任务可能把系统“卡住”?
vTaskDelay和事件驱动有什么本质区别?- 为什么串口打印过多会影响实时性?
- Bootloader 和 APP 跳转时要注意什么?
- 简历里写“做过驱动”,面试官一般会追问哪几类问题?
- 如何判断一个 bug 更像硬件问题还是软件问题?
- 你做项目时最常用的调试手段有哪些?
- 内存泄漏在嵌入式项目里怎么排查?
- 你项目里最难定位的问题是什么,最后怎么解决的?
- 如果不用 RTOS,你会怎么组织一个稍复杂的单片机项目?


