长江存储固件开发面经(泡池子):内存介质、上电流程与 Bootloader
- 轮次
- 多轮合集
- 结果
- 泡池子
- 时间
- 2026-10
- 来源
- 牛客网
《面试题目》
一面(9.12,约 30 分钟)
- 自我介绍。
- 介绍一下你的实习经历。
- 内存相关的八股:数据存储区域有哪些?
- 内存介质有哪些?
- 上电流程是怎样的?
- 你了解长江存储的产品吗?
二面(9.20,隔了一周)
- 你对固件开发的理解是什么?
- 你对内存的了解有多少?
- 说一下你项目中的 Bootloader。
(帖内提到:二面面试官说一面面评不错,最后聊了很多 NAND Flash 相关知识并给了建议。)
《参考解析》
固件开发到底在做什么。 存储器的固件,是跑在控制器里那颗处理器上的软件,它的职责是在「主机以为自己在读写一个规整的块设备」和「介质其实是一堆会坏、会老化、只能整块擦除的 NAND 颗粒」之间做翻译。核心模块包括:FTL(逻辑地址到物理地址的映射,以及垃圾回收、磨损均衡)、坏块管理、ECC 纠错与 read retry、命令队列调度、掉电保护与异常恢复、固件升级与回滚。理解这一点,回答「固件开发的理解」时就能从「在上面写 C 代码」升级到「在资源受限、可靠性要求极高的环境里做软硬件交界层的设计」——具体表现为:内存只有几百 KB 到几 MB,不能随便 malloc;启动必须可靠,任何一次上电失败都可能导致盘不可用;所有写操作都要考虑掉电窗口;性能指标(IOPS、延迟、写放大)与寿命(P/E 次数)是一对需要持续权衡的矛盾。面试时说清这三个约束(资源、可靠性、性能与寿命的权衡),比罗列模块名更能体现理解。
数据存储区域与内存介质。 「数据存储区域」通常指计算机的存储层次:CPU 内部寄存器 → L1/L2/L3 缓存 → 主存 DRAM → 非易失存储(SSD/NAND/NOR Flash、HDD)→ 远端的对象存储或磁带归档;越往上越快越小越贵,越往下越慢越大越便宜。嵌入式里还多一段紧耦合的 SRAM/TCM 和片上 Flash。介质层面要能分清特性:SRAM 用触发器存储、速度最快、面积大、不需要刷新,用作缓存与小的关键缓冲;DRAM 用电容存储、需要周期性刷新、单位成本低,是主存;NOR Flash 随机读快、支持片内执行、容量小,适合放启动代码;NAND Flash 容量大、单位成本低、按页读写按块擦除、有坏块和读干扰问题、需要 ECC,是 SSD 与 eMMC/UFS 的介质;EEPROM 按字节擦写、寿命高、容量极小,用来存参数。存储器的另一个考点是寿命:NAND 的 P/E 次数随工艺与类型变化很大(SLC 远高于 TLC/QLC),因此控制器必须做磨损均衡、垃圾回收与写放大控制,否则寿命会远低于标称的 TBW/DWPD 指标。
上电流程从复位到「盘可用」。 典型的存储设备上电大致分几步:供电稳定与复位释放 → 片上 BootROM 执行,从固定介质(或 SPI NOR、或 I2C 从设备)加载第一级引导 → 初始化时钟、PLL、DDR、引脚复用等基础环境 → 加载并校验主固件(校验失败则进恢复模式或从备份区启动)→ 控制器自检(扫描坏块表、恢复映射表、检查上一次掉电是否留下未完成的写)→ 与主机完成链路训练与枚举(PCIe/NVMe、UFS、SD 等),进入 ready 状态开始服务命令。这条链路里最能体现工程含量的是「异常路径」:上一次掉电发生在映射表更新到一半时怎么办(答案是日志/双副本 + 幂等重放)、固件升级过程中掉电怎么办(A/B 双分区 + 引导标志位)、主固件校验失败怎么办(BootROM 进入 USB/串口恢复模式)。面试时把正常路径讲清楚之后主动补一句异常路径,通常会被继续追问,这正是展示深度的机会。
项目里的 Bootloader 该怎么讲。 Bootloader 的核心职责是「在应用还没跑起来之前,把系统带到能跑应用的状态」:初始化最小外设、建立内存映射、校验并跳转到应用、提供固件升级与回滚的入口、在应用损坏时提供一条自救通道。讲自己的项目时按四层展开:一是分区布局(引导区、应用区、参数区、备份区各多大,为什么这么划);二是启动判定逻辑(校验方式用 CRC 还是签名、双分区如何选、升级标志与确认标志怎么设计,确保升级中途掉电仍能启动旧版本);三是升级通道(串口/USB/网络/主机下发,协议与失败重试);四是踩过的坑(例如向量表重定位忘了做导致跳转后跑飞、看门狗在跳转前没喂导致复位、Flash 写入期间掉电导致双分区都被破坏)。在存储类岗位里,Bootloader 的可靠性要求比一般嵌入式更高,因为它决定了盘还能不能被救回来,所以「任何一步都可能掉电,而每一步都必须可恢复」是回答的主线。
怎么准备这类岗位的面试。 存储固件的面试深度集中在「原理 + 可靠性」上,八股只是入口。建议按三条线准备:第一条是介质原理(浮栅存储、编程与擦除机制、读干扰与数据保持力、SLC/MLC/TLC/QLC 的取舍、温度对误码率的影响);第二条是控制器软件(FTL 映射表的组织与缓存、垃圾回收的触发时机与写放大、ECC 分级与 read retry、队列调度、掉电保护);第三条是系统与芯片基础(启动流程、内存层次、DMA、中断、缓存一致性)。此外一定要了解应聘公司自己的产品线——帖子里就问到「是否了解长存的产品」,答不上来会显得没有做过功课。最后,面试官会愿意花很多时间聊 NAND Flash 并给出建议,这通常是积极信号;但「泡池子」意味着流程可能拉长,期间不要只等一家,把注意力放在继续准备与继续投递上。想判断进度,可以问 HR 开奖的批次与时间点,而不是反复催问道理相同的问题。