嵌入式必备八股文总结
嵌入式开发的面试,既考察基础知识,也会结合项目实践。本文整理了常见的必备八股文内容,帮助大家快速查漏补缺。
一、C 语言与内存管理
- 指针与数组char *p 和 char a[] 的区别?二级指针、函数指针、回调函数的用法。
- 字符串操作strlen 和 sizeof 的区别。strcpy 与 memcpy 的不同点。
- 内存分配malloc/free 与 new/delete 的区别。内存对齐原则,为什么要对齐?栈区、堆区、静态区、常量区的区别。
- 常考陷阱宏定义和 inline 的区别。const、volatile、static 的用法。大端小端存储的判断。
二、数据结构与算法
- 链表单链表、双链表、循环链表的实现与反转。快慢指针寻找环。
- 队列与栈循环队列的判空与判满。用两个栈实现队列。
- 排序与查找快速排序、归并排序的时间复杂度。二分查找的实现。
- 嵌入式常见算法环形缓冲区的实现。CRC 校验的原理和实现。
三、操作系统与 RTOS
- 任务调度抢占式与协作式调度的区别。FreeRTOS 中的优先级反转与解决方法(优先级继承)。
- 同步机制信号量、互斥锁、事件标志组的区别。队列在任务间通信中的应用。
- 时间管理vTaskDelay 和 vTaskDelayUntil 的区别。滴答定时器(SysTick)的作用。
全网最全面的嵌入式八股文专栏:https://www.nowcoder.com/creation/manager/columnDetail/mPZ4kk
四、Linux 系统编程
- 进程与线程fork 与 pthread_create 的区别。进程间通信方式:管道、消息队列、共享内存、socket。
- 文件操作POSIX 接口:open、read、write、ioctl。阻塞与非阻塞 I/O。
- 驱动开发字符设备驱动框架:open、read、write、release。中断处理流程:注册、上下半部、tasklet、工作队列。内核态与用户态的区别。
五、硬件相关知识
- 总线协议I2C、SPI、UART 的区别与应用场景。DMA 传输的原理。
- 存储器Flash 擦写机制,NAND 与 NOR 的区别。EEPROM 的使用注意事项。
- 电路基础上拉电阻和下拉电阻的作用。开漏输出与推挽输出的区别。
六、项目与实战经验
- 常见项目移植 FreeRTOS 到 STM32。基于 OLED/液晶屏的 GUI 界面开发。使用 Socket 实现简易 FTP/HTTP 客户端。驱动开发:I2C 传感器、SPI Flash、WS2812 灯条。
- 项目问答你在项目中遇到过的最难的 bug 是什么?如何进行内存泄漏排查?如何优化系统功耗?
七、常见加分项
- 工具链Makefile/CMake 的基本写法。交叉编译的流程。
- 调试能力GDB 基本命令,如何调试段错误。使用 strace/dmesg 排查问题。
- 工程素养代码可移植性与模块化设计。单元测试与持续集成的应用。
八、总结
嵌入式八股文不仅是面试题库,更是开发中必备的基础能力。想要在面试中脱颖而出,需要做到:
- 基础牢固:C 语言、数据结构、RTOS。
- 系统理解:Linux 驱动与内核机制。
- 硬件结合:懂协议、会调试。
- 项目可讲:能从设计到调优完整复盘。
只有把八股文知识点与实际项目经验结合,才能真正展示一个能写代码、能调问题、能解决实际需求的嵌入式工程师形象。