10.16 佰维存储固件开发二面:SDK 封装、volatile 与 NAND
- 轮次
- 二面
- 时间
- 2026-10
- 来源
- 牛客网
《面试题目》
- 做一下自我介绍。
- 实习内容(重点拷打,很细)。
- SDK 封装了哪些接口?
- 代码量大概多少?
- 通信协议是怎么设计的?
- volatile 的用法是什么?它有无原子性?
- 实习产出是什么?
- 项目拷打。
- 低功耗设计怎么做?
- 对存储的了解有多少?
- NAND Flash 了解吗?
- 存储相关知识介绍。
- 部门工作内容介绍。
- 反问。
《参考解析》
volatile 的语义:告诉编译器该变量可能被外部改变(中断、硬件寄存器、其他线程),每次访问都从内存读、写入都落内存,禁止缓存到寄存器或重排优化。它不保证原子性,i++ 仍是读-改-写三步,多线程/中断共享计数要用原子指令或关中断/互斥。它也不保证内存屏障语义(C++ 里要配 atomic 的 memory_order)。
SDK 封装:按「初始化—配置—读写—状态查询—回调—释放」分层,接口要稳定、错误码统一、句柄隔离、线程安全说明清楚;底层用 HAL 屏蔽芯片差异。讲代码量时给「模块数、文件数、核心接口数」,不要只报行数。
通信协议设计:帧头 + 长度 + 命令字 + 序号 + 载荷 + CRC,支持应答/超时重传、分包与粘包处理、版本协商;要说明字节序、对齐、最大帧长和流控。
低功耗:按场景分睡眠模式(idle、stop、standby),外设按需开关时钟,DMA 代替 CPU 搬运,降低主频,唤醒源要精简;用功耗仪测各模式电流,算平均功耗。
NAND Flash:按页读写、按块擦除,有擦写寿命(SLC/MLC/TLC/QLC 递减),需要坏块管理、磨损均衡、ECC、垃圾回收;写入前要擦除,掉电可能丢数据,所以固件要有掉电保护和映射表恢复。