💌 所属专栏:【嵌入式面试】
😀 作 者:兰舟比特 🐾
🚀 个人简介:热爱开源系统与嵌入式技术,专注 Linux、网络通信、编程技巧、面试总结与软件工具分享,持续输出实用干货!
💡 欢迎大家:这里是兰舟比特的技术小站,喜欢的话请点赞、收藏、评论三连击!有问题欢迎留言交流😘😘😘
🎯 一、笔试考查重点(理论+编程)
嵌入式笔试通常包括选择题、填空题、简答题和编程题。部分大厂还会加入在线编程(如牛客、力扣风格)或手写代码环节。
—
✅ 1. C语言基础与进阶
这是嵌入式笔试的绝对核心!几乎100%必考。
考查内容:
- 数据类型、运算符、表达式(尤其位运算)
- 指针与数组(指针数组、数组指针、函数指针、指针函数)
- 结构体与联合体(内存对齐、大小计算)
- static、const、volatile、extern关键字的含义与用法
- 宏定义与预处理(#define、#ifdef、条件编译)
- 内存管理(栈、堆、全局区、文字常量区)
- malloc/free 与 new/delete 区别(C++岗)
- 函数调用约定(__cdecl, __stdcall等,较少但可能考)
- 常见陷阱题(如 ++i 与 i++、指针越界、野指针)
高频编程题:
- 字符串操作(strcpy/strlen/strcat模拟实现)
- 内存拷贝函数 memcpy 实现(考虑重叠内存)
- 大小端判断
- 位操作(置位、清位、翻转、统计1的个数)
- 链表操作(反转、合并、环检测)
- 快速排序、二分查找手写
📌 Tips:务必手写过100+道C语言经典题,理解每行代码背后的内存模型。
—
✅ 2. 计算机组成原理 & 体系结构
嵌入式离不开底层硬件,这部分常与C语言结合考查。
考查内容:
- CPU架构(冯·诺依曼 vs 哈佛)
- 寄存器、ALU、Cache、MMU作用
- 总线结构(地址总线、数据总线、控制总线)
- 中断机制(中断向量表、中断优先级、中断嵌套)
- 存储器层次结构(寄存器→Cache→内存→外存)
- 大小端模式(定义、判断、转换)
- ARM架构基础(Cortex-M/A系列区别、寄存器组、异常模式)
- 汇编基础(看懂简单ARM汇编,如LDR/STR/MOV)
高频题型:
- 给一段C代码,问生成的汇编大致流程
- Cache为什么能提高性能?Cache一致性如何保证?
- 什么是内存映射I/O?与端口I/O区别?
—
✅ 3. 操作系统原理(重点RTOS)
嵌入式系统多使用RTOS(如FreeRTOS、uC/OS、RT-Thread),笔试常考其核心机制。
考查内容:
- 进程 vs 线程 vs 任务(嵌入式中多称“任务”)
- 任务调度算法(抢占式、时间片轮转、优先级调度)
- 任务间通信(信号量、消息队列、邮箱、事件标志组)
- 任务同步与互斥(互斥量、临界区、死锁条件与避免)
- 内存管理(静态分配、动态分配、内存池)
- 中断服务程序(ISR)编写注意事项(不能阻塞、尽量短)
- Tick机制与时间管理(延时函数、定时器)
- 上下文切换过程(保存/恢复寄存器)
高频题:
- 信号量与互斥量的区别?
- 为什么ISR中不能调用printf或malloc?
- 如何避免优先级反转?(优先级继承/天花板协议)
- 手写生产者-消费者模型(使用信号量或队列)
—
✅ 4. 数据结构与算法
虽然嵌入式对算法要求低于互联网后端,但基础必须扎实。
考查内容:
- 数组、链表、栈、队列的基本操作与应用场景
- 树(二叉树遍历、BST)、图(BFS/DFS)基础
- 常用排序(冒泡、选择、插入、快排、归并)时间复杂度
- 查找算法(顺序、二分、哈希)
- 空间与时间复杂度分析
📌 注意:嵌入式更看重“在资源受限环境下的高效实现”,比如用位图优化内存、环形缓冲区设计等。
—
✅ 5. 数字电路 & 基础电子知识(部分公司考查)
尤其硬件相关岗位或SoC厂商(如海思、NXP、TI)会涉及。
考查内容:
- 逻辑门(与或非、异或)
- 时序电路 vs 组合电路
- 触发器(D触发器、JK触发器)
- 时钟、建立时间、保持时间
- UART、I2C、SPI协议时序图分析
- ADC/DAC基本原理
—
🎯 二、面试考查重点(深度+项目+思维)
面试官更关注你的理解深度、项目经验、调试能力与工程思维。
—
✅ 1. 项目深挖(重中之重!)
面试官会针对你简历中的1~2个项目深入追问,务必准备:
- 项目背景与你的角色
- 技术选型原因(为什么用这个MCU/RTOS/协议?)
- 遇到的最大挑战 & 如何解决(体现debug能力)
- 系统架构图 & 模块划分
- 性能优化点(内存、功耗、实时性)
- 是否考虑过异常处理、安全机制、可扩展性?
⚠️ 警告:切勿夸大项目!任何细节都可能被追问到寄存器级别。
—
✅ 2. 系统级问题(体现架构能力)
- 启动流程:Bootloader → U-Boot → Kernel → App(Linux嵌入式)
- 中断处理全流程(从中断发生到ISR执行完毕)
- 任务调度时机(时钟中断、任务主动放弃、更高优先级任务就绪)
- 内存泄漏如何检测?(静态分析、工具如Valgrind、自定义malloc钩子)
- 看门狗作用与实现(软狗、硬狗、喂狗策略)
- 低功耗设计思路(睡眠模式、时钟门控、外设关闭)
—
✅ 3. 驱动开发相关(Linux驱动岗重点)
- 字符设备驱动框架(file_operations结构体)
- 设备树(DTS)作用与解析流程
- platform_driver 与 platform_device 匹配机制
- 中断申请(request_irq)、底半部机制(tasklet/workqueue)
- mmap实现原理(用户空间直接访问物理内存)
- 同步机制(自旋锁、信号量、completion)
—
✅ 4. 调试与工具链
面试官喜欢问“你是怎么调试的?”
- 常用调试手段:printf、LED、逻辑分析仪、JTAG/SWD、串口日志
- GDB调试技巧(断点、watchpoint、backtrace)
- 交叉编译流程(Makefile/CMake、工具链arm-linux-gnueabi-)
- 链接脚本(.lds)作用(指定代码段、数据段位置)
- 反汇编查看(objdump)、内存查看(hexdump)
—
✅ 5. 实时性与性能优化
- 什么是硬实时、软实时?
- 如何保证任务在截止时间前完成?(优先级设计、执行时间估算)
- 减少中断延迟的方法(关中断时间尽量短、使用DMA)
- 缓存优化(数据局部性、避免Cache伪共享)
- 编译器优化选项(-O2, -Os, volatile的影响)
—
✅ 6. 开放性与系统设计题(大厂高频)
- 设计一个嵌入式日志系统(考虑内存、性能、可靠性)
- 如何在无操作系统的MCU上实现多任务?(状态机、协程、前后台系统)
- 设计一个低功耗温湿度采集系统(传感器选型、休眠唤醒策略)
- 如果系统频繁复位,如何定位?(看门狗、堆栈溢出、电源干扰、总线错误)
—
✅ 7. 行为面试 & 软技能
- 团队协作经验
- 如何应对项目延期?
- 学习新技术的方法
- 职业规划(为什么选择嵌入式?)
—
📚 三、推荐学习资源
-
书籍:
- 《C Primer Plus》《C和指针》《C专家编程》
- 《嵌入式实时操作系统原理与最佳实践》(王宜怀)
- 《ARM体系结构与编程》杜春雷
- 《Linux设备驱动程序》(LDD3)
- 《深入理解计算机系统》(CSAPP)
-
视频课程:
- 韦东山嵌入式Linux全套(B站)
- 正点原子/野火 STM32 教程
- FreeRTOS官方培训视频
-
刷题平台:
- 牛客网(嵌入式题库)
- LeetCode(简单/中等难度算法)
- GitHub开源项目实战(如RT-Thread Studio项目)
—
💡 四、备考建议
- ✍️ 建立知识脑图:将C语言、OS、体系结构、外设协议等模块化整理。
- 🖥️ 动手实践:至少完成2~3个完整项目(如基于STM32+FreeRTOS的智能小车、温控系统)。
- 📖 每日一题:坚持刷C语言和数据结构题,保持手感。
- 🎤 模拟面试:找同学互相提问,尤其是项目深挖和开放题。
- 🧠 理解 > 死记:嵌入式讲究“知其然并知其所以然”,比如volatile为什么能防优化?Cache行大小如何影响性能?
—
🔚 结语
祝各位嵌入式开发者:Offer拿到手软,代码无Bug,系统稳如老狗!
—
📌 附录:常见面试题速查表
| 类别 | 高频问题 |
|---|---|
| C语言 | strcpy与memcpy区别?指针与数组关系?volatile作用? |
| RTOS | 任务调度方式?优先级反转如何解决?信号量与互斥量区别? |
| ARM | Cortex-M3有几个寄存器?异常向量表结构? |
| 驱动 | 字符设备驱动框架?platform总线机制? |
| 调试 | 如何查内存泄漏?如何分析HardFault? |
| 项目 | 你负责模块的性能指标?如何测试稳定性? |
—
📢 欢迎在评论区分享你的嵌入式面试经历或提问,我会一一回复!
如果你觉得本文有帮助,别忘了点赞 + 收藏 + 转发给需要的同学!
—
版权声明:
本文为 兰舟比特 原创内容,如需转载,请注明出处及作者,禁止未经授权的引用或商用。
721

被折叠的 条评论
为什么被折叠?



