# 嵌入式面试准备 _嵌入式 C、Linux、RTOS、STM32 面试题库和学习资源。_ --- ## 面试题库 | 项目 | 星数 | 说明 | 链接 | | --- | ---: | --- | --- | | Embedded-Systems-and-Linux-Interview-Questions | 64 | 嵌入式系统、Linux BSP、内核、ARM 架构、C 语言面试题合集 | https://github.com/vishnumotghare/Embedded-Systems-and-Linux-Interview-Questions | | everything-about-c-for-embedded-systems | 8 | C 语言嵌入式系统完整学习路径:基础→固件→Linux 系统编程→驱动→RTOS | https://github.com/ashwini1890/everything-about-c-for-embedded-systems | | awesome-embedded-linux | 416 | ✨嵌入式 Linux 精选资源合集,含构建系统、调试、驱动、测试、安全等 | https://github.com/fkromer/awesome-embedded-linux | | Awesome-Embedded | 25 | 🔥嵌入式学习工作室全系列教程和子仓库索引(中文) | https://github.com/Awesome-Embedded-Learning-Studio/Awesome-Embedded | | interview(C/C++) | 经典 | C/C++ 面试知识总结:指针、内存、编译、链接、面向对象、STL | https://github.com/huihut/interview | | CS-Notes | 经典 | 计算机基础面试全家桶:OS、网络、数据库、算法、系统设计 | https://github.com/CyC2018/CS-Notes | ## 按方向复习路线 ### C / C++ 基础(你当前 2 级,目标 3 级) | 等级 | 能做什么 | 推荐资源 | | --- | --- | --- | | 1-2 级 | 能写基本函数,指针理解有限 | 《C Primer Plus》前10章 + 面试基础50题 | | 2-3 级 | 能写链表、结构体,理解指针和内存分配 | 《C和指针》 + huihut/interview C部分 | | 3-4 级 | 能处理回调函数、函数指针、编译链接过程 | 《C专家编程》 + 阅读 Linux 内核代码片段 | | 4-5 级 | 能分析段错误、栈溢出、字节对齐、缓存一致性 | CSAPP + Linux 内核源码 | ### 操作系统基础(你当前 1 级,目标 2-3 级) - 进程 vs 线程、上下文切换、调度算法 - 内存管理:虚拟内存、分页、分段、MMU - 同步与互斥:信号量、互斥锁、条件变量、死锁 - 文件系统:VFS、inode、文件描述符 - 中断与异常、用户态 vs 内核态 - 推荐:CS-Notes 操作系统篇 + 《Linux 内核设计与实现》 ### 计算机网络(你当前 1 级,目标 2 级) - TCP 三次握手 / 四次挥手、状态机 - TCP 流量控制、拥塞控制(慢启动、拥塞避免、快速重传) - UDP vs TCP 适用场景 - HTTP / HTTPS / DNS 基本流程 - Socket 编程模型(阻塞、非阻塞、多路复用 select/epoll) - 推荐:CS-Notes 网络篇 + 《TCP/IP 详解 卷1》 ### 嵌入式 Linux 面试高频 | 主题 | 关键考点 | | --- | --- | | Bootloader | U-Boot 启动流程、设备树传递 | | Linux 内核启动 | 内核解压、init 进程、initrd | | 驱动模型 | 字符设备注册、file_operations、设备树匹配 | | 内存管理 | slab、kmalloc/vmalloc、DMA、cache 一致性 | | 中断 | 上半部/下半部、tasklet、workqueue、线程化中断 | | 调试 | printk、kdump、kgdb、strace、perf | | 交叉编译 | 工具链、Makefile 交叉编译、根文件系统构建 | | RTOS vs Linux | 实时性、调度策略、优先级反转 | ### 通信协议面试 | 协议 | 应掌握内容 | | --- | --- | | UART | 波特率、起始/停止位、奇偶校验、硬件流控 RTS/CTS | | I2C | SCL/SDA、7位/10位地址、ACK/NACK、多主机仲裁、时钟拉伸 | | SPI | 全双工、4线模式、片选、时钟极性(CPOL)/相位(CPHA) | | CAN | CAN 2.0 帧格式、仲裁机制、错误处理 | | TCP/IP | 三次握手、四次挥手、滑动窗口、拥塞控制 | ## 推荐刷题平台 | 平台 | 用途 | | --- | --- | | LeetCode 热题 100 / 剑指 Offer | 算法面试基础(你计划刷最热200题) | | 牛客网嵌入式面试面经 | 嵌入式真实面试题目汇总 | | huihut/interview | C/C++ 八股文速查 | --- ## MCU/FreeRTOS 面试专项(2026 实习方向) 如果你已做完 ZET6 FreeRTOS 项目,以下是你面试 MCU 岗位最可能被问到的。 ### C 语言(嵌入式面试 80% 在这里刷人) | 主题 | 考点 | 自检问题 | |------|------|---------| | const | const int*/int* const/const int* const 区别 | 写个函数参数用 const 保护传入数据 | | volatile | 用于寄存器变量、中断共享变量 | 为什么中断里用的变量要加 volatile | | static | 局部/全局/函数 static 的区别 | static 局部变量存在哪个段 | | 结构体对齐 | #pragma pack, 内存对齐规则 | sizeof(struct) 是多少,怎么算的 | | 字节序 | 大端小端 | 写个 union 判断系统是大端还是小端 | | 函数指针 | 回调函数、函数指针数组 | 用函数指针实现 switch-case 的替代 | | 位操作 | 宏定义置位/清位/翻转 | #define SET_BIT(reg, bit) 怎么写 | | malloc | 嵌入式能不能用 | 为什么 FreeRTOS 有自己的 pvPortMalloc | | 指针 vs 数组 | sizeof 区别、传参区别 | char a[] vs char *p, sizeof 各是多少 | ### FreeRTOS(MCU 嵌入式岗必考) | 主题 | 考点 | |------|------| | 任务状态机 | Ready/Running/Blocked/Suspended 各自什么条件下切换 | | 调度算法 | 抢占式什么时候触发、时间片怎么分配 | | 优先级反转 | 什么是优先级反转?怎么解决(优先级继承协议) | | 临界区 | taskENTER_CRITICAL 做了什么(关中断)、对实时性有什么影响 | | IPC 选型 | 队列 vs 信号量 vs 互斥锁 vs 事件组 vs 任务通知——各适合什么场景 | | 任务通知 | 为什么任务通知比信号量更快(直接传递事件,不经过队列) | | 堆栈估算 | 任务栈大小怎么确定、uxTaskGetStackHighWaterMark 怎么用 | |中断与任务通信| 中断里怎么给任务发数据(xQueueSendFromISR、xSemaphoreGiveFromISR)| ### STM32 | 主题 | 考点 | |------|------| | 中断优先级 | NVIC 分组、抢占优先级 vs 子优先级、HAL 中断回调流程 | | DMA | 传输模式(普通/循环/存储器到存储器)、DMA 中断 | | 时钟树 | HSI/HSE/PLL 的关系、SYSCLK/AHB/APB1/APB2 频率配置 | | HAL vs LL | HAL 重(抽象好移植)、LL 轻(直接寄存器、性能高),何时选哪个 | | I2C/SPI/UART | 三者的区别、何时选哪个、有没有遇到过通信失败的问题 | ### 刷题资源 | 资源 | 说明 | |------|------| | huihut/interview | C/C++ 八股速查 | | 牛客网嵌入式面经 | 真实面试题目汇总 | | LeetCode 热题 100 | 算法基础(嵌入式岗考得少,但大厂会考) | --- _2026-07-30 更新:新增 MCU/FreeRTOS 实习面试专项。_