嵌入式面试都需要准备啥 —— 一份硬核系统清单

嵌入式岗位的面试,本质是对底层能力 + 工程能力 + 系统思维 + 实战经验的综合考察。不同公司侧重点不同:做消费电子、工业控制、汽车电子、物联网、芯片原厂,考察深度差异很大。但核心能力框架是稳定的。

下面给出一份尽可能全面、硬核的准备清单。

一、C语言与底层编程能力(重中之重)

嵌入式的根基是 C。面试时默认你是“熟练掌握”,不是“会用”。

1. 指针与内存模型

必须做到:

  • 指针本质(地址、类型决定步长)
  • 多级指针
  • 函数指针
  • 指针数组 vs 数组指针
  • const 的四种组合
  • volatile 的真实语义(不是防止优化这么简单)
  • 内存对齐
  • 结构体字节布局
  • 位域的风险
  • 内存别名问题(strict aliasing)
  • 野指针、悬空指针
  • 栈 vs 堆 vs 全局区 vs BSS 区

常见面试题:

  • 写一个安全的 memcpy
  • 手写链表
  • 写一个环形缓冲区
  • 解释 volatile 在寄存器访问中的意义
  • 结构体大小计算

嵌入式八股文靠这套专栏可以完全拿下:https://www.nowcoder.com/creation/manager/columnDetail/mPZ4kk(涵盖各类大厂面试题,以及基础八股文资料)

来源:牛客网2. 编译与链接机制

很多人死在这里。

必须理解:

  • 预处理阶段
  • 编译阶段
  • 汇编阶段
  • 链接阶段
  • 静态库 vs 动态库
  • 符号表
  • extern / static
  • 链接脚本(.ld 文件)
  • 段:.text / .data / .bss / .rodata

延伸:

  • weak 符号
  • 内联函数与宏区别
  • GCC 属性(attribute
  • 内存映射

3. 数据结构与算法(基础但不能太弱)

虽然不是算法岗,但不能太差。

至少熟练:

  • 链表
  • 队列
  • 哈希
  • 二叉树
  • 排序算法
  • 查找算法
  • 时间复杂度

有些公司会问:

  • 实现 LRU
  • 实现环形队列
  • 实现任务调度简单模型

二、操作系统与RTOS

嵌入式几乎都涉及 RTOS。

必须掌握:

  • 任务调度原理
  • 抢占式 vs 协作式
  • 优先级反转
  • 互斥锁 vs 信号量
  • 事件标志组
  • 消息队列
  • 任务栈大小设计
  • 上下文切换

常见 RTOS:

  • FreeRTOS
  • RT-Thread
  • Zephyr
  • uC/OS-II

面试常问:

  • 优先级反转如何解决(优先级继承)
  • 如何分析死锁
  • 中断里能不能调用阻塞 API
  • 任务和中断如何通信

三、ARM 架构与 MCU 知识

嵌入式几乎绕不开 ARM。

1. ARM 基础

  • RISC 架构
  • 寄存器模型
  • 异常向量表
  • 中断响应流程
  • Thumb 指令集
  • 堆栈模型
  • 裸机启动流程

常见 MCU:

  • STM32F103
  • STM32F407
  • ESP32
  • NXP i.MX6

必须会讲:

  • 上电启动过程
  • Bootloader 做什么
  • 中断向量表如何重定位
  • NVIC 工作原理

2. 外设原理(面试必问)

串口 UART

  • 波特率计算
  • FIFO
  • 中断方式 vs DMA
  • 半双工

SPI

  • CPOL / CPHA
  • 主从模式
  • 全双工

I2C

  • 起始位
  • ACK/NACK
  • 仲裁机制

CAN

  • 报文格式
  • 仲裁优先级
  • 错误帧

USB

  • 枚举流程
  • 描述符

Ethernet

  • MAC vs PHY
  • TCP/IP 基本流程

四、Linux 嵌入式(进阶岗位必考)

如果是 Linux 方向,必须准备:

1. Linux 基础

  • 进程与线程
  • fork / exec
  • mmap
  • 文件系统
  • select / poll / epoll
  • Socket 编程

2. 驱动开发

  • 字符设备驱动
  • platform driver
  • device tree
  • 中断处理
  • 内核态 vs 用户态

涉及内核版本常见:

  • Linux kernel

五、硬件基础(不会硬件基本凉)

嵌入式不是纯软件。

必须掌握:

  • 电压、电流、功率
  • 上拉电阻
  • 下拉电阻
  • MOS 管
  • 三极管
  • 运放
  • ADC / DAC 原理
  • 时钟电路
  • 看懂原理图

面试常问:

  • I2C 为什么要上拉
  • 复位电路怎么设计
  • 看门狗原理

六、调试能力(非常关键)

企业看重“解决问题能力”。

必须熟悉:

  • JTAG
  • SWD
  • GDB
  • 逻辑分析仪
  • 示波器
  • 串口日志
  • Core dump

常见工具:

  • Keil uVision
  • IAR Embedded Workbench
  • STM32CubeMX

面试常问:

  • 程序跑飞怎么查
  • 栈溢出如何定位
  • 死机如何分析

七、工程能力与项目表达

技术之外,表达能力决定上限。

你必须准备:

  1. 至少 2 个完整项目
  2. 能讲清:架构设计技术选型遇到的问题如何定位如何优化如何验证

不要只说“我做了什么”,要说:

  • 为什么这么设计?
  • 有没有更优解?
  • 你承担多少责任?
  • 性能指标多少?
  • 稳定性如何验证?

八、常见高频问题

  1. volatile 和 const 区别
  2. 中断和线程区别
  3. 任务调度原理
  4. 优先级反转
  5. malloc 在嵌入式是否推荐
  6. 如何降低功耗
  7. 如何优化启动时间
  8. 如何设计一个高可靠系统
  9. Bootloader 如何设计
  10. 代码如何做单元测试

九、不同阶段准备重点

初级(0-2 年)

  • C 基础扎实
  • 熟悉一个 MCU
  • 会用 RTOS
  • 有实际项目

中级(2-5 年)

  • 能独立架构
  • 熟悉多种通信协议
  • 能定位复杂问题
  • 熟悉驱动

高级(5+ 年)

  • 系统架构能力
  • 性能优化能力
  • 稳定性设计
  • 安全设计
  • 代码规范体系
  • 跨部门协作能力

十、真正拉开差距的能力

  1. 内存模型理解深度
  2. 中断与调度的本质理解
  3. 工程调试能力
  4. 对异常情况的敏感度
  5. 硬件与软件结合能力

嵌入式面试不是背八股,而是:

你是否真的理解系统如何运行?

最后总结

嵌入式面试准备可以浓缩为五句话:

  1. C 语言必须扎实到位
  2. 必须理解内存与编译链接
  3. 必须掌握 RTOS 原理
  4. 必须懂硬件基础
  5. 必须有真实项目与问题解决能力

如果这些都具备,无论是做 MCU 裸机、RTOS、Linux 嵌入式还是驱动开发,都会非常有竞争力。

真正的硬核,不是会写代码,而是理解系统的运行本质。

全部评论

相关推荐

评论
点赞
2
分享

创作者周榜

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