Skip to main content

问题修复记录 — 索引与面试导读

面试口述主文档(STAR / 架构 / 废弃方案对照):docs/interview/ota-reentry-case-study.md
半页纸速查docs/interview/ota-reentry-cheat-sheet.md
术语词典GLOSSARY.md(Brownfield / registry / re-entry / unknown module 等)

本目录记录了 Brownfield + Multi-RN-Bundle + OTA 项目中的真实问题与修复过程。同一问题往往经历多次迭代(排查笔记 → 中间方案 → 最终方案),面试请优先读 stories/ 下的主题叙事,细粒度 commit 级记录见各 dated 文件。


面试怎么讲(推荐顺序)

顺序主题故事文档一句话
1OTA 二次进入 / Metro 切换stories/01-ota-reentry-registry-lifecycle.md磁盘有 bundle ≠ 能渲染;registry / module 缓存 / native segment 生命周期不同步
2Split 模块图 / unknown modulestories/02-split-module-graph-and-shared-bundle.md构建期 module 归属错误 → 运行时 Requiring unknown module
3OTA 缓存与版本语义stories/03-ota-cache-version-semantics.mdpending/active 隔离、回滚 Banner、同版本 hash 漂移
4Native Split Loader(Bridgeless)stories/04-native-split-loader-bridgeless.mdRN 0.86 新架构下 segment 加载从零打通
5构建 / UI / 工程杂项stories/05-build-ui-misc.mdBrownfieldLib 同步、布局 bug、DB 路径

工程落地总览(2026-07-09 会话):2026-07-09-ota-dev-session-fixes-summary.md


问题簇与文档状态

A. OTA Re-entry & Registry(最多迭代 · 面试重点)

状态文档说明
✅ 面试主叙事stories/01-…含废弃方案对照
✅ 最终 fix2026-07-09-ota-second-entry-load-register-fix.mdcommit 级摘要
✅ Metro 切换2026-07-09-ota-metro-switch-registry-restore.mdafterMetro + 保留 component cache
✅ Instant 体验2026-07-09-ota-instant-reentry-white-screen.md首帧渲染 + warmReentry 顺序
✅ CPU 优化2026-07-09-ota-instant-reentry-cpu-spike.mdsession 校验缓存 + poller defer
✅ 基础机制2026-07-08-ota-register-feature-not-called.mdexecuteSplitBundleEntry 由来
✅ 基础机制2026-07-08-ota-mode-switch-registration-lost.md__OTA_COMPONENT_CACHE__ 设计
📦 归档archive/2026-07-09-ota-second-entry-load-failure-analysis.md排查笔记,部分假设已被 Bridgeless 验证修正
📦 归档archive/2026-07-09-ota-fast-path-unknown-module.md❌ 直接渲染 cache → unknown module
📦 归档archive/2026-07-09-ota-metro-second-entry-unknown-module.md❌ DevSettings.reload / full eval
📦 归档archive/2026-07-09-ota-remote-bundle-reuse.mdfast path 已废弃;verifyOtaBundleBody 仍有效

B. Split Module Graph & Shared Bundle

状态文档说明
✅ 面试叙事stories/02-…
✅ 根因 fix2026-07-09-ota-split-shared-deps-unknown-module.md745032085 / 排除策略
✅ 架构演进2026-07-09-ota-shared-deps-bundle-split.mdota_shared segment 0
✅ 立即更新2026-07-09-ota-apply-update-unknown-module.mdshared 未 warm navigation 模块
✅ 早期2026-07-09-ota-order-split-missing-navigation.mdorder 导航未纳入 split

C. OTA Cache & Version Semantics

状态文档说明
✅ 面试叙事stories/03-…
2026-07-08-ota-dismiss-deletes-active-bundle.mdpending 独立路径
2026-07-08-ota-same-version-load-failure.mdstaging best-effort
2026-07-08-ota-server-rollback-reentry-failure.mdbootstrap vs polling 语义分离
2026-07-08-ota-apply-stale-component-cache.md版本升级 cache 失效
2026-07-08-ota-remote-bundle-deleted-graceful-error.md无效 bundle 校验 + 友好错误
2026-07-08-ota-mode-load-failure.mduseEffect 竞态、损坏缓存

D. Native Split Loader

状态文档说明
✅ 面试叙事stories/04-…
2026-07-08-split-bundle-segment-contract.mdsegmentId 契约 + TurboModule
2026-07-08-split-bundle-loader-rn086-build.mdBridgeless 编译适配
2026-07-08-ota-runtime-not-ready.mdNO_RUNTIME / promise 时序

E. Build / UI / Infra

状态文档说明
stories/05-…
2026-07-09-brownfield-gesture-handler-module-missing.mdSPM xcframework 未刷新
2026-07-09-order-page-stack-zero-height.mdabsoluteFill 布局塌缩
2026-07-08-bundle-server-db-path-duplication.mdPrisma 双路径

新增修复记录规范

按工程仓 .cursor/skills/fix/SKILL.md

  1. 每次独立 fix 仍写 YYYY-MM-DD-<slug>.md
  2. 若属于已有问题簇,在 README 对应表格追加一行,并在 stories/ 文档末尾「演进记录」补一句
  3. 中间方案(最终废弃)直接进 archive/,文首标注 ⚠️ 已废弃

目录结构

docs/fixes/
├── README.md ← 本文件(索引 + 面试导读)
├── GLOSSARY.md ← 关键术语词典
├── stories/ ← 按主题整理的面试叙事(优先阅读)
├── archive/ ← 已废弃的中间方案 / 排查笔记
├── 2026-07-08-*.md ← 按日期的细粒度 fix 记录
└── 2026-07-09-*.md