字节 嵌入式软件开发二面 我人麻了
二面强度非常大,面试官很nice,但问题一个比一个狠。项目聊了将近20分钟,然后直接进入硬核八股,最后手撕。整体节奏很快,八股没答好直接挂,手撕写出来了但没解释清楚,属于死在细节上。
题目如下,附个人分析,希望对备战字节的同学有帮助。
题目列表
- 自我介绍
- 项目深挖20分钟(重点问了架构设计和技术决策)
- FreeRTOS调度器的实现原理,抢占和时间片轮转的本质区别
- FreeRTOS有哪些同步原语,互斥量和二值信号量的区别
- 同优先级任务是怎么调度的
- 优先级反转的完整场景,FreeRTOS怎么解决,能完全解决吗
- 死锁的四个必要条件,嵌入式系统里怎么预防
- ARM Cortex-M中断处理,硬件自动压栈了哪些寄存器
- 原子操作的本质,LDREX/STREX是怎么工作的
- 内存屏障DMB/DSB/ISB分别是什么,什么时候用
- Linux虚拟内存机制,缺页中断处理流程,写时复制怎么实现
- 静态链接和动态链接的区别,PLT/GOT延迟绑定是怎么工作的
- TCP流量控制和拥塞控制的区别
- 项目里遇到过最难定位的bug,完整说排查过程
- 手撕:线程安全的懒加载单例,说说潜在问题
核心嵌入式面试八股文总结:https://www.nowcoder.com/creation/manager/columnDetail/mPZ4kk
(涵盖大厂面试题+重点八股文)
题目分析
项目部分是重头,聊了将近三分之一的时间。字节二面不是考你做了什么,是考你为什么这么做、有没有考虑过其他方案、方案的瓶颈在哪。每个技术决策背后都要有对比思考,不能说"当时就这么做了"。
FreeRTOS部分问得很细,不是背概念,是要说清楚底层机制。调度器怎么选任务、上下文切换怎么发生、PendSV的作用,这些都要能说清楚。互斥量和二值信号量的区别是高频考点,核心是优先级继承和所有权概念,很多人只知道"互斥量用于保护资源",但说不清楚为什么不用二值信号量。
ARM底层问得比较硬,LDREX/STREX是多核原子操作的硬件基础,内存屏障是ARM弱内存序模型的核心,这两个点在嵌入式面试里不常见但字节会问。
Linux部分的写时复制和PLT/GOT是操作系统原理的深水区,很多嵌入式同学平时不关注这块,容易翻车。
手撕单例本身不难,C++11的局部静态变量方案三行搞定,但面试官追问了DCLP在C++11之前为什么是错的,这个点需要理解C++内存模型,只会写代码不够。
整体来说字节二面的节奏很快,八股要答得有深度,项目要能说清楚技术决策背后的逻辑。手撕不难但要解释清楚,写出来说不清楚和没写出来差不多。
备战的同学重点准备:FreeRTOS底层机制、ARM架构细节、Linux内存管理、C++内存模型,这几块是字节嵌入式的高频深挖方向。
