补发一篇 秋招小米的面经,附自己的复盘解答
1. 进程和线程的区别?
进程是程序的一次执行实例,拥有独立的地址空间和系统资源;
线程是进程内的执行单元,多个线程共享所属进程的资源,但各自拥有独立的栈和寄存器状态。
区别:进程间隔离性强、开销大;线程轻量、通信高效,但需同步机制保障安全。
2. 什么是死锁?如何预防?
死锁是多个进程/线程互相等待对方释放资源。
预防:按固定顺序加锁、避免持有并等待、使用超时机制。
3. STM32的GPIO有哪几种工作模式?
输入(浮空/上拉/下拉)、输出(推挽/开漏)、复用功能、模拟模式。
4. volatile关键字作用?
告诉编译器该变量可能被外部(如硬件、中断)修改,禁止优化,每次必须从内存读取。
5. 堆和栈的区别?
栈由系统自动管理,速度快但容量小;
堆需手动分配(malloc/new),灵活但易泄漏、速度慢。
6. TCP和UDP区别?
TCP面向连接、可靠、有序;
UDP无连接、不可靠、低延迟,适用于音视频等实时场景。
7. 什么是三次握手?
Client发SYN → Server回SYN+ACK → Client发ACK,建立可靠连接,防止历史请求干扰。
8. I2C和SPI的区别?
I2C:两线(SDA/SCL)、半双工、多主多从、速度慢;SPI:四线(MOSI/MISO/SCLK/CS)、全双工、主从结构、速度快。
9. 为什么析构函数要声明为虚函数?
确保通过基类指针删除派生类对象时,能正确调用派生类析构函数,避免资源泄漏。
10. new 和 malloc 的区别?
new 是C++操作符,调用构造函数、类型安全;malloc 是C函数,只分配内存,返回void*。
11. 什么是看门狗?作用?
看门狗是硬件定时器,程序需定期“喂狗”,否则超时复位,用于防止系统死锁。
12. RTOS的任务调度方式?
优先级调度(高优先执行)、时间片轮转(同优先级轮流执行),支持抢占。
13. Linux设备节点在哪?
在 /dev 目录下,如 /dev/ttyS0、/dev/mmcblk0。
14. 常量存储在哪个内存区?
字符串字面量等常量存放在只读数据段(常量区),程序结束由系统回收。
15. 硬链接和软链接区别?
硬链接共享inode,不能跨文件系统;
软链接是独立文件,指向路径,可跨文件系统。
16. 中断和异常的区别?
中断来自外部硬件(异步),异常由CPU内部错误或指令触发(同步)。
17. C程序编译四阶段?
预处理 → 编译 → 汇编 → 链接。
18. static的作用?
限制作用域(文件内)或延长生命周期(局部静态变量),类中表示共享成员。
19. 大小端是什么?网络用哪种?
大端:高位存低地址;
小端:低位存低地址。网络字节序为大端。
20.如何查看Linux系统性能?
用 top、htop、free -h、iostat、vmstat 等命令监控CPU、内存、IO等。
21.C/C++程序内存分布情况,常量所在的区
C/C++程序内存分为五区:栈(局部变量)、堆(动态分配)、全局/静态区(全局和static变量)、常量区(字符串字面量、const全局/静态变量,只读)、代码区(函数机器指令)。
其中常量(如 "hello"、const char* p = "..." 中的字符串)存储在常量区,程序结束时由系统释放。
嵌入式软件工程师面试完全指南
面经一共32篇文章,12w+字数,包含全部最新的面试必问考点,4.7w+同学学习,2800+订阅,非常适合在找工作面经薄弱的同学,3200+订阅还会涨价,提前订阅提前享受,持续更新中。
原帖链接:https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM

查看10道真题和解析