嵌入式跳槽面试栽跟头!C语言宏定义与内联函数基础题曝光
记得第一次跳槽找嵌入式工作的时候,我信心满满。简历上写了两年工作经验,做过智能家居网关、工业数据采集器、甚至还用QT写过一个上位机软件。心想:项目摆在这,面试不就是走个过场吗?结果投了几家稍微有点名气的公司,一面都没过。最离谱的一次,电话面试20分钟就被挂了,对方客气地说“基础还需要再补补”。
我当时很不服气,觉得自己项目经验够丰富了。后来复盘才发现,面试官问的那些基础题,我压根就没认真准备过。以前工作都是用现成框架和SDK,遇到问题上网搜,从来没深究过底层原理。面试官一问细节,我就露馅了。下面是我那次跳槽遇到的真实面试题,分享给大家
️C语言:
1. 一个空结构体是多少?结构体字节对齐的原则是什么?如果指定# pack(1)会怎样?
2. const int *p、int const *p、int * const p分别代表什么?
3. 关键字用在哪些场景?举例说明。
4. 写一个宏定义,求两个数中的较大值,需要考虑副作用问题。
5. 指针和数组的区别是什么?char a = "hello"; char *p = "hello";两者在内存中的存储方式有何不同?
6. 什么是函数指针?如何定义一个指向返回值为int、参数为两个int的函数指针?
️操作系统/嵌入式底层:
7. 中断服务函数(ISR)里能不能调用?为什么?如果不能,有什么替代方案?

8. 中任务切换时,CPU的寄存器是如何保存和恢复的? 中断的作用是什么?
9. 什么是临界区?如何保护临界区?关中断和信号量有什么区别?
10. 堆栈溢出的原因有哪些?如何检测和避免?
11. 动态内存分配(/free)在嵌入式系统中有什么风险?什么时候应该避免使用?
️数据结构与算法:
12. 链表和数组各自的优缺点?在嵌入式场景下,你会优先选择哪种?
13. 写一个反转单向链表的函数。(手撕代码)
三、血的教训:基础不牢,地动山摇
从那以后,我开始老老实实把每个知识点吃透。第二次跳槽时,同样的公司,同样的岗位,我拿到了offer。所以真心建议:别以为会几个工具、调通几个模块就能过关,嵌入式面试的核心永远是基础。 把上面这些题弄懂,比堆砌十个项目都管用。
#嵌入式开发 #嵌入式 #单片机 #STM32单片机 #编程 #电子信息 #程序员 #应届生 #计算机 #嵌入式面试
























