嵌入式校招常考面试题总结
最近整理嵌入式校招的过程中常考的面试题。不同公司面试的侧重点会有所不同,但整体来看,考察范围基本集中在几个核心方向:C语言基础、单片机原理、RTOS以及Linux嵌入式。很多问题表面看起来比较基础,但面试官往往会不断深入追问细节和底层原理。
为了方便复习和查漏补缺,我把一些比较典型的面试题整理了出来。
一、C语言基础
- 如何理解
const和volatile关键字?它们分别在什么场景下使用? static关键字在函数内部、函数外部以及修饰变量时分别有什么作用?- 指针和数组在本质上有什么区别?在函数参数传递时有什么不同?
sizeof和strlen的区别是什么?它们分别在什么时候计算?- 结构体为什么会产生内存对齐?如何计算结构体的实际大小?
- 什么是野指针?常见的野指针产生场景有哪些?
- 堆和栈的区别是什么?各自适合什么样的内存分配场景?
- 宏定义和
inline函数有什么区别?各自的优缺点是什么? - C语言函数调用时,参数是如何压栈的?函数返回时栈又是如何恢复的?
volatile为什么在嵌入式开发中经常用于中断变量或硬件寄存器?
二、单片机基础
- 如何理解单片机中的中断机制?中断响应的基本流程是什么?
- 中断服务函数中为什么不建议执行复杂逻辑?
- 什么是GPIO?输入模式和输出模式有什么区别?
- 定时器在单片机中通常有哪些用途?
- UART、SPI、I2C 这三种通信接口分别有什么特点和使用场景?
- 什么是DMA?DMA相比CPU直接搬运数据有什么优势?
- 单片机启动后程序是从哪里开始执行的?启动流程是怎样的?
- 什么是看门狗?为什么在嵌入式系统中经常使用看门狗?
- 单片机程序如果出现跑飞,一般有哪些可能原因?
- 什么是寄存器映射?单片机是如何通过寄存器控制外设的?
三、RTOS
- RTOS 与裸机系统相比最大的区别是什么?
- RTOS 中任务调度的基本原理是什么?
- 什么是任务优先级?优先级对任务调度有什么影响?
- 什么是任务切换(Context Switch)?任务切换时系统会保存哪些信息?
- RTOS 中任务通常有哪些状态?它们之间如何转换?
- 什么是信号量?信号量在什么场景下使用?
- 互斥锁和信号量有什么区别?
- 什么是优先级反转?一般有哪些解决方案?
- RTOS 中为什么需要 Tick 中断?Tick 中断通常用来做什么?
- 如果系统中存在多个周期任务(例如1ms、10ms、100ms),我应该如何设计任务调度结构?
四、Linux嵌入式
- 如何理解 Linux 的用户态和内核态?两者有什么区别?
- 进程和线程有什么区别?在 Linux 中如何创建进程和线程?
- Linux 中进程间通信有哪些方式?各自适用于什么场景?
- 什么是虚拟内存?Linux 为什么需要虚拟内存机制?
- 什么是文件描述符?为什么 Linux 中很多资源都通过文件描述符访问?
fork()调用之后会发生什么?父子进程有什么区别?- 什么是系统调用?应用程序是如何进入内核执行系统调用的?
- 什么是设备驱动?Linux 驱动程序在系统中的作用是什么?
- 什么是设备树?为什么嵌入式 Linux 中需要设备树?
- 交叉编译是什么?为什么嵌入式开发通常需要交叉编译?
全网最全面的嵌入式八股文专栏:https://www.nowcoder.com/creation/manager/columnDetail/mPZ4kk
结尾
嵌入式校招面试虽然涉及的知识范围比较广,但核心内容其实相对固定,主要集中在 C语言基础、硬件理解、RTOS原理以及Linux系统基础。很多面试题都会从简单问题开始,然后逐步深入到实现细节,因此在准备过程中不仅要记住概念,更重要的是理解其背后的原理。
通过系统整理和复习这些高频问题,可以帮助我们更清晰地梳理知识体系,在面试时也更容易从容应对面试官的深入追问。
