职位题库

嵌入式软件工程师面试题库

面向嵌入式软件工程师相关面试,围绕C语言、I2C、RTOS、中断、操作系统等主题展开练习,结合题目考察点、回答思路、参考答案和常见误区,梳理知识要点并练习清晰表达。

383 道题目建议用时 1149 分钟专项面试练习

全部题目 383 道题

85

请设计一个嵌入式存储方案:设备每10ms产生一条数据,需要持续写入Flash,存储空间有限要循环覆盖旧数据,设备可能在任何时刻突然掉电,但重启后要尽量保住最近的数据。

考察候选人在资源受限、异常掉电场景下的存储系统设计能力,包括数据完整性、恢复策略、磨损均衡和性能权衡。
86

请解释Flash为什么写之前要先擦除,以及页、块的概念和擦除粒度限制。

考察候选人对Flash存储物理特性的理解,包括擦除原理、页块结构和操作限制。
87

文件调用write返回成功,数据就一定进存储介质了吗?请解释page cache、脏页回写和fsync的作用。

考察候选人对文件系统缓存机制和持久化语义的理解,特别是write、fsync和掉电场景下的数据安全。
88

DMA读写缓冲区时,为什么要考虑Cache一致性?如果CPU已修改缓存数据但DMA读到旧数据,怎么处理?

考察候选人对DMA与Cache交互问题的理解,包括一致性维护方法和编程实践。
89

在 C 中,怎样让某个对象只能被读取、不能经当前名字写入?当这种限定与指针结合时,如何区分“地址不可改”“目标不可改”和“两者都不可改”?

考察对 const 限定符在对象和指针不同位置语义的理解,以及能否清晰区分指针本身与所指对象的可修改性。
90

若希望一个局部对象在函数多次调用之间保留上次的值,同时又不被外部作用域访问,应使用哪种存储类说明符?它的初始化时机和生存期如何变化?

考察对 static 局部变量存储类、初始化时机和生存期的理解。
91

怎样让一个全局对象或函数只在本编译单元内参与链接,而不被其他源文件引用?这对命名冲突和模块封装有什么影响?

考察对内部链接与外部链接的理解,以及 static 在模块封装和避免命名冲突中的作用。
92

哪些情况下编译器对内存访问的合并、缓存或删除会违背程序真实意图?用什么限定符可以抑制这类优化?它能替代互斥或原子操作吗?

考察对 volatile 语义、编译器优化边界以及并发/原子操作区别的理解。
93

中断上下文与普通执行流共享标志时,声明上应注意什么?访问固定地址的外设寄存器时,又该如何避免被优化?这两类场景的共同点是什么?

考察在中断和硬件寄存器场景下 volatile 的正确使用,以及识别两类场景的共同需求。
94

请挑一个你最深入的MCU+RTOS项目,讲清业务背景、系统组成、任务/中断划分以及你负责的模块边界。

考察候选人能否结构化地描述一个真实项目,明确自身职责边界,并体现对RTOS任务/中断划分的理解。
95

这个项目里SPI/I2C/UART、ADC采样链路和MQTT/TCP上报是怎么协同的?高频采集与慢速上报抢CPU、多任务共享外设时,你如何用DMA、环形缓冲、队列或锁保证实时性和可靠性?

考察候选人对嵌入式数据链路协同、资源竞争和实时性保障机制的实际掌握程度。
96

项目里有没有出现偶发挂死、内存碎片、看门狗复位或通信异常?你当时怎么用证据定位根因,并把它收敛到可量产边界?

考察候选人面对偶发疑难问题的定位方法论、证据意识和量产收敛能力。
返回面试题库