嵌入式开发面试常考哪些知识?按岗位要求梳理准备重点

嵌入式开发面试常考的知识,主要集中在五层:C 语言与编程基本功、计算机与硬件基础、MCU 与外设、操作系统与并发、调试与项目证据。不同岗位的权重差别很大。MCU/RTOS 岗位会追问中断、任务调度和外设时序,Linux 应用岗位更关注进程线程、网络编程和系统调试,驱动/BSP 岗位则会问到内核驱动模型、设备树和启动流程。

准备时先做一件事:找到 3 到 5 个目标岗位,把岗位要求里的动词和名词圈出来。出现频率高的能力先补,项目里能证明的能力优先讲。先读岗位要求再排复习顺序,复习会更聚焦。

先看岗位要求,再排复习顺序

嵌入式是一个很大的范围。岗位名称都叫嵌入式软件工程师,实际工作可能差很远。下面这张表把常见方向和要求放在一起,方便对照。

岗位方向 岗位描述里常见的词 面试更可能追问 准备时拿得出的东西
MCU / 裸机 / RTOS C 语言、STM32、FreeRTOS 或 RT-Thread、UART/SPI/I2C/CAN、示波器、逻辑分析仪 启动流程、中断、外设时序、任务调度、优先级反转、低功耗 一块板子上的完整项目;任务与外设交互图;一次稳定性问题的定位记录
Linux 应用 / 系统 C/C++、Linux、socket、多线程、进程间通信、Shell 或 Python 进程与线程、锁、IPC、TCP/UDP、内存与性能、系统调用 一个多线程或网络程序;并发问题的定位过程
Linux 驱动 / BSP 内核、设备树、字符设备、platform、U-Boot、RootFS、Yocto 或 Buildroot 驱动模型、probe 流程、设备树匹配、中断上下文、DMA、启动流程 一次驱动移植或板级 bring-up 记录;从硬件到用户态的路径说明
芯片原厂 / SDK / 方案 MCU 或 SoC、BSP、HAL、SDK、外设驱动、芯片点亮 寄存器、时钟、复位、启动、兼容性、客户问题定位 SDK 示例、芯片验证记录、可复用的调试方法

岗位名称相同,考点可能完全不同。

读岗位要求时,可以按三步处理:

  1. 分清硬性要求和加分项。写“必须”“熟练”的,通常会被追问;写“优先”的,准备到能讲清概念和一次实践即可。
  2. 把要求翻译成可证明的经历。“熟悉 FreeRTOS”对应的是任务划分、优先级设计、队列或信号量使用,不能只写“用过”。
  3. 找出重复出现的要求。三份岗位都提到 I2C、SPI、RTOS,这几项就值得优先安排时间。

例如,海康威视 2026 年 10 月 30 日发布的机器人嵌入式软件开发岗位,要求 Linux 应用开发、网络套接字、多线程和进程间通信;江阴人才网 2026 年 9 月 12 日更新的一则 MCU 岗位,则强调 RTOS、UART/SPI/I2C/CAN、ADC 采集、Flash 掉电保护和示波器调试。两类岗位都叫嵌入式,复习重点并不相同。

常考知识可以分成五层

把知识分层,目的是知道每一项该学到什么程度。面试不会按教材顺序提问,但追问会沿着这些层往下走。五层知识彼此关联,从语言到系统再到项目逐步递进。

C 语言与编程基本功

这是嵌入式开发面试的必考区,几乎每个岗位都会问。背语法不够,要能解释代码在内存和硬件上发生了什么。

需要能讲清的内容:

  • volatile、const、static 的作用和适用场景。volatile 表示每次都从内存读取,它不涉及原子性,也不负责内存顺序。
  • 指针与数组的区别,函数指针、多级指针、void * 的用法。
  • 程序的内存布局,栈、堆、全局区、常量区分别放什么。
  • 结构体对齐、位域、大小端,以及 sizeof 的计算。
  • 宏的副作用、条件编译、inline 与宏的差异。

常见追问包括:volatile 能不能替代锁?堆和栈哪个更快?结构体成员换个顺序为什么大小变了?现场写一个字符串反转、环形缓冲区或链表操作,也很常见。

计算机与硬件基础

这一层决定你能不能把软件问题和硬件行为对上。

  • CPU 如何取指、执行、响应中断,中断现场保存了什么。
  • 存储层次、Cache、MMU 或 MPU 的作用,以及它们对实时性的影响。
  • 轮询、中断、DMA 三种数据传输方式的差别和选型。
  • 时钟、复位、电源、启动流程,以及看门狗的作用。
  • 能看懂原理图和数据手册中的引脚、时序、寄存器描述。

MCU 岗位更看重寄存器、外设时序和硬件调试;Linux 岗位更看重虚拟内存、系统调用、进程地址空间。准备时按目标岗位选侧重点,不必两边都学到同样深。

MCU 与外设

外设题很容易区分“会调库”和“理解协议”。面试官常从配置问到异常处理。

  • UART、SPI、I2C、CAN 的线序、速率、双工方式、典型拓扑和适用场景。
  • GPIO 的输入输出模式,推挽与开漏的区别,上拉下拉什么时候用。
  • 定时器、PWM、ADC、DAC、看门狗、RTC、Flash 的基本用法。
  • 中断触发方式、优先级、现场保护,以及中断服务函数里为什么不能做耗时操作。
  • ADC 采样精度、参考电压、滤波和噪声处理。

典型追问:I2C 出现 NACK 或总线被拉低怎么排查?SPI 的 CPOL 和 CPHA 怎么选?CAN 的仲裁和错误帧是怎么回事?回答时先讲现象,再讲排查顺序,再讲如何验证。

操作系统与并发

RTOS 和 Linux 的考法不同,但都绕不开并发。

RTOS 方向需要掌握:

  • 任务状态、调度方式、优先级抢占和时间片。
  • 互斥量、信号量、队列、事件标志组的区别和适用场景。
  • 优先级反转为什么发生,优先级继承如何缓解。
  • 中断与任务的通信方式,哪些 API 不能在中断里调用。
  • 任务栈怎么估算,堆和静态分配怎么取舍。

Linux 方向需要掌握:

  • 进程与线程的区别,地址空间、资源开销和通信方式。
  • 管道、消息队列、共享内存、信号量、socket 的选型。
  • 互斥锁、条件变量、读写锁,死锁的形成条件和避免方法。
  • 用户态与内核态的切换,系统调用,中断上下文为什么不能睡眠。
  • 常见调度策略、内存映射和性能排查工具。

一个高频问题是互斥量和二值信号量有什么区别。回答要落到使用目的:互斥量保护共享资源,通常带有所有权和优先级继承;二值信号量更适合任务与中断之间的同步。

调试、工程化与项目证据

很多候选人能背知识点,却讲不清一次真实的问题定位。调试题看的是过程,答案只占一部分。

  • 会用 JTAG/SWD 调试器设置断点、查看寄存器、读取调用栈。
  • 会用示波器、逻辑分析仪看时序、电平和总线波形。
  • 会看日志、崩溃信息、Map 文件,能定位栈溢出、内存越界和死循环。
  • 会用 Git 管理版本,能读懂 Makefile 或 CMake 构建过程。
  • 有单元测试、代码评审、版本回退和问题复现的意识。

面试官更愿意听这样的描述:现象是什么,做了哪些假设,用什么工具验证,根因在哪里,怎么修复,如何防止再次出现。只说“已经解决了”,信息量不够。

从知识点追问到项目,才是拉开差距的地方

知识题通常只是入口。你回答一个概念,面试官会顺着项目继续问,确认你是理解还是记忆。

三类常见追问

  1. 原理追问:你说用了 DMA,为什么这里用 DMA 而不是中断?数据一致性怎么处理?
  2. 边界追问:队列满了怎么办?任务优先级设成多少?如果采样频率提高一倍,系统还撑得住吗?
  3. 取舍追问:为什么选 FreeRTOS 而不是裸机?为什么用 I2C 而不是 SPI?如果成本再降,你会改哪里?

回答这类问题,先把约束条件说清楚,再讲选择和验证。脱离约束谈方案优劣,通常经不起追问。

把项目整理成一张证据卡

每个项目准备一张卡,写清五件事:

  • 项目背景:产品做什么,芯片型号、主频、RAM/Flash、功耗和实时性约束。
  • 你的职责:负责哪些模块,和谁协作,哪些代码是你写的。
  • 关键设计:任务怎么划分,中断和任务怎么通信,内存怎么分配,异常怎么处理。
  • 一次问题:现象、假设、验证工具、根因、修复、回归结果。
  • 取舍与反思:当时为什么这样选,现在会怎么改。

这张卡不要写成流水账。每个点都准备一个可以被继续追问的细节。比如你说用了消息队列,就要能说出队列长度、消息大小、队列满了之后的策略,以及生产者和消费者的优先级。

一套可执行的准备顺序

如果距离面试还有四周,可以按下面的顺序推进。时间紧就压缩到一周,顺序不变。

四周安排

  • 第 1 周:选定 3 到 5 个目标岗位,整理能力对照表;补 C 语言、内存、指针和计算机基础;每天手写一道代码题。
  • 第 2 周:按岗位主攻。MCU 方向集中看中断、外设、RTOS;Linux 方向集中看进程线程、IPC、socket 和驱动模型。
  • 第 3 周:整理项目证据卡,准备三类追问;把简历上的每个技术名词都对应到一个真实细节。
  • 第 4 周:模拟面试,录音或录像;检查回答是否有结构、是否超出已知范围、是否能落到验证方法。

如果只有一周,优先做三件事:读岗位要求、整理项目证据、练高频原理题。不要从第一页题库开始背。

自测清单

下面 8 个问题,能不看资料讲清楚,说明基础准备已经到位:

  • 能否用一句话解释 volatile 解决了什么问题,并说出它不能解决什么?
  • 能否画出中断从触发到返回的流程,并说明现场保存了什么?
  • 能否解释 RTOS 任务切换时保存和恢复了哪些内容?
  • 能否说清进程和线程在地址空间、开销和通信上的差异?
  • 能否对比 I2C 与 SPI 的线序、双工方式和典型应用?
  • 能否说出一个项目里 RAM、任务栈和中断的预算?
  • 能否完整讲一次 bug 的定位过程,包括工具和验证?
  • 能否根据目标岗位说出自己最需要补的两个短板?

有一项讲不清,就把它排进下一周的复习计划。

常见问题

应届生没有正式项目怎么办?

没有实习项目,也可以找到可讲的材料。课程设计、竞赛、开源项目、自己搭的开发板项目都能用,关键是讲清约束、你的职责和验证过程。

不要把跟着教程做完的 demo 说成独立项目。面试官追问两次,边界就会露出来。更稳妥的做法是选一个能改动的小项目,自己加一个功能、修一个 bug 或做一次性能优化,把过程记录下来。

如果缺少硬件环境,可以先用开发板和相关课程补足。东方瑞通物联网嵌入式智能研发工程师(A117)课程覆盖 C 语言与数据结构、Linux 系统编程、MCU 外设、RTOS、驱动和项目实战,具体内容以官网课程页当期课程大纲为准(公开课程手册《[A117]-华为AIOT+AI大模型 嵌入式手册》,核对日期 2026-11-02)。选课时重点看是否有真实板卡、调试环节和项目复盘。

非科班转行,先学单片机还是 Linux?

看目标岗位,不要按哪个更简单来选。MCU 方向入门项目多,反馈直接,适合想尽快做出可见成果的人;Linux 方向对操作系统、网络和工程化要求更高,两条路都有岗位需求,差别在工作内容和准备周期。

如果完全没有基础,可以先学 C 语言和计算机基础,再用一块开发板做一个小项目。走到能独立调试外设和任务,再决定往 RTOS 还是 Linux 深入。

八股文要不要背?

要背,但不能只背答案。八股文的价值是帮你覆盖术语和常见问法,真正拉开差距的是能否把概念落到代码、波形和项目取舍上。

每个高频题准备三层:一句话结论、原理解释、一个项目中的例子。只背第一层,追问就会断。

遇到不会的问题怎么回答?

先说明自己知道的部分,再说明不确定的边界,再给出验证思路。比如,这个芯片的启动流程我没有完整做过,但我知道 Cortex-M 通常从复位向量开始,先初始化时钟和内存,再跳到主程序。如果让我排查,我会先看启动文件和链接脚本,再用调试器确认停在哪个阶段。

不要硬编一个确定答案。面试官更在意你如何面对未知。

需要刷算法题吗?

嵌入式面试的算法要求通常集中在基础数据结构和手写代码,难度因公司而异。链表、数组、字符串、队列、栈、位运算和环形缓冲区出现频率较高。

准备时优先做到代码正确、边界清楚、能解释复杂度,不必追求高难度题量。

嵌入式开发面试一般要准备多久?

取决于基础和岗位差距。基础较好、项目匹配的人,集中准备 2 到 4 周,重点补岗位高频考点和项目追问;跨专业或项目薄弱的人,通常要把 C 语言、计算机基础和一个小项目补起来,周期会更长。

不要用天数给自己设死线。更可靠的判断是自测清单能不能讲清,项目证据卡能不能经住三次追问。

需要报班准备嵌入式面试吗?

先看自己缺什么。缺基础知识、缺项目环境、缺反馈,可以考虑课程;只缺题目练习,用开源资料和模拟面试也能补。

选课时问清总课时、每周排课天数、项目是否有真实板卡和调试环节、试听能否指定讲师、退费条件写在哪一条。费用以机构最新报价和合同为准,不要只看宣传页。

课程能提供学习路径和项目环境,不能替代自己的代码量和项目复盘。就业指导通常包括简历、模拟面试、内推等环节,具体边界以协议为准,不承诺面试结果。

岗位样本与说明

本文提到的岗位样本:

  • 海康威视招聘,机器人-嵌入式软件开发工程师-西安,发布时间 2026-10-30,职位链接
  • 江阴人才网,嵌入式软件工程师岗位,更新时间 2026-09-12,职位链接

岗位要求会随公司、团队和产品变化。文中的方向划分用于帮助整理准备顺序,不代表统一招聘标准。

嵌入式开发面试的准备,说到底要落到两件事:把原理讲清,用项目证明。岗位要求会变,这两件事不会变。

posted @ 2026-11-05 09:54  老码的观察日记  阅读(19)  评论(0)    收藏  举报