目录
有人说嵌入式面试就是背题,但我说:用对方法,你也能从"背诵者"变成"面试主导者"。
大家好,我是Penguin老师。
过去这段时间,我整理了一份 《嵌入式软件工程师面试宝典》 ,涵盖 7大技术篇章 + 人事面技巧 ,总共 100+ 高频题 ,每个题目都配有 "死答案(原理)" 和 "例子答案(项目场景)",让你不仅知道"是什么",更能讲清楚"怎么用"。
今天,我从每个章节中挑出 部分最经典、最常考 的题目,免费分享给大家(团队持续更新中)。如果你觉得有用,文末有完整PDF的获取方式。
一、C语言篇(2道)
1. volatile 关键字的作用是什么?
👉 死答案 :防止编译器优化,每次从内存读取。常用于硬件寄存器、中断共享变量、多线程标志。
👉 例子答案 :我做串口驱动时,状态寄存器没加 volatile,结果读到的永远是旧值,加了之后每次真正去硬件拿,问题解决。
2. static 在函数内和文件内有什么区别?
👉 死答案 :函数内是静态局部变量(生命周期全局,作用域不变);文件内是内部链接(仅本文件可见)。
👉 例子答案 :我写状态机时,用函数内 static 变量保存状态,不用全局变量污染命名空间。文件级 static 函数就像公司内部秘密,外部看不到。
完整C语言篇共x题,涵盖指针、内存对齐、堆栈、位运算等。
二、C++篇(2道)
1. 虚函数是如何实现多态的?
👉 死答案 :虚函数表(vtable) + 虚函数指针(vptr),运行时动态绑定。
👉 例子答案 :我写驱动框架,基类 Device 有虚函数 read(),温度、压力传感器各自实现,上层用基类指针调用,自动执行正确代码。
2. 智能指针 unique_ptr 和 shared_ptr 的区别?
👉 死答案 :独占所有权 vs 引用计数。循环引用用 weak_ptr。
👉 例子答案 :在Linux设备驱动里,我用 unique_ptr 管理缓冲区,离开作用域自动释放,省心。shared_ptr 用于多个对象共享配置资源。
完整C++篇包含多态、智能指针、STL选择、移动语义等高频考点。
三、网络编程篇(2道)
1. select、poll、epoll 的区别?
👉 死答案 :select 有1024限制+轮询;poll 无数量限制但仍轮询;epoll 事件驱动,高并发首选。
👉 例子答案:我做的聊天服务器,几千人在线,用 epoll 轻松应付;如果只监控几十个连接且要跨平台,用 select 更省事。
2. 阻塞与非阻塞 socket 的区别?如何配合使用?
👉 死答案 :阻塞会等待;非阻塞返回 EAGAIN。常用 fcntl 设置 O_NONBLOCK,再配合 epoll。
👉 例子答案:我把 socket 设成非阻塞,加入 epoll,主循环能边处理业务边等数据,不会被一个慢连接卡死。
完整网络编程篇涵盖TCP/UDP、三次握手、四次挥手、粘包、心跳。
四、进程篇(2道)
1. 僵尸进程和孤儿进程是什么?如何避免僵尸?
👉 死答案 :僵尸是子进程先结束,父进程未 wait;孤儿是父进程先结束,被 init 收养。避免僵尸:父进程 wait 或处理 SIGCHLD。
👉 例子答案 :我写的服务器忘了回收子进程,用 ps 看到一堆 <defunct>,后来加了 SIGCHLD 信号处理就好了。
2. 共享内存为什么是最高效的IPC?
👉 死答案 :无内核拷贝,直接读写物理内存。需配合信号量同步。
👉 例子答案:两个进程需要交换海量视频数据,用共享内存零拷贝,延迟极低。简单小数据用管道就够了。
完整进程篇包含fork/exec、守护进程、死锁等。
五、底层篇(2道)
1. 中断服务函数(ISR)有哪些注意事项?
👉 死答案 :短小快速,不可阻塞(不能调用 printf、malloc、信号量等),只做标记和简单数据搬运。
👉 例子答案:我以前在 ISR 里打印日志,导致中断延迟过长,系统卡死。现在只清标志位、放数据到队列,唤醒任务去处理。
2. 什么是看门狗?独立看门狗和窗口看门狗的区别?
👉 死答案 :独立看门狗(IWDG)有独立时钟,时间窗口宽;窗口看门狗(WWDG)有上下限,检测程序执行顺序。
👉 例子答案:主循环里喂独立看门狗,防止死机;窗口看门狗用来保护关键时序代码段,喂早了或晚了都会复位。
完整底层篇覆盖GPIO、DMA、时钟树、PWM、低功耗模式、缓存一致性等。
六、系统移植篇(2道)
1. 设备树(Device Tree)的作用?
👉 死答案 :硬件资源描述文件,使内核与板卡解耦。描述寄存器地址、中断、时钟、引脚等。
👉 例子答案:我移植新板子时,串口不工作,检查设备树发现引脚写错了,改对就正常。加传感器只需添加节点,不用重编内核。
2. Linux 内核模块的 Makefile 如何编写?
👉 死答案 :使用 obj-m,调用内核构建系统 -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules。
👉 例子答案 :写驱动程序时,Makefile 就这几行,调试时 insmod 加载,不用反复烧写镜像,效率高。
完整系统移植篇包括启动流程、U-Boot、根文件系统、交叉编译等。
七、通信协议篇(2道)
1. I2C 和 SPI 的主要区别及选型依据?
👉 死答案 :I2C 两根线、多从机、速度慢;SPI 四根线、全双工、速度快。选型:省引脚用I2C,要高速用SPI。
👉 例子答案:温湿度传感器用 I2C,省引脚;LCD 屏幕用 SPI,刷新快。调试时 I2C 要检查上拉电阻,SPI 要注意时钟极性。(极性相位分别对应空闲时电平状态以及奇偶边验采样)
2. CAN 总线为什么适合汽车/工业?
👉 死答案 :差分信号抗干扰、多主竞争、非破坏性仲裁、错误检测和自动重传。
👉 例子答案:车载项目中,多个 ECU 通过 CAN 通信,即便电机干扰大,数据依然可靠。ID 低的报文优先,保证了关键帧的实时性。
完整通信协议篇涵盖UART、Modbus、单总线、USB等。
为什么这份资料值得你拥有?
✅ 不是死记硬背的答案 :每个题目都给出 原理(死答案) + 真实项目举例(例子答案) 。
✅ 覆盖大厂考点 :200+ 经典题,从 C 语言到系统移植,从网络到人事面,全方位无死角。
✅ 实战导向 :每个例子都来自真实开发场景,面试时可以直接"讲故事"。
✅ 掌握主动权技巧 :教你把不熟的问题引导到自己擅长的领域(资料内含专门章节)。
✅ 人事面全套话术:离职原因、薪资谈判、职业规划等高频问题应答策略。
💡 哪怕是基础差或记性不好的同学,也能轻松上手:我们把每个知识点都浓缩成“一句话死答案 + 一个生活比喻场景”,就像背公式一样简单。比如“堆和栈的区别”用“食堂托盘 vs 租仓库”;“死锁”用“两个人过独木桥”。再菜鸟也能快速形成肌肉记忆,面试时脱口而出。
如何获取完整PDF?
点赞+关注+评论(嵌入式面试宝典):
- 简历模板(嵌入式专用)
- 高频追问扩展库(持续更新)
- 一对一答疑(模拟面试)
资料样例
资料片段1
资料片段2
资料片段3
资料片段4
资料片段5
最后送你一句话:
面试不是考试,而是一场对话。你能"铺网络"到什么程度,决定了你能拿到什么级别的Offer。
祝秋招/春招/求职顺利,我们Offer见!
------ Penguin老师