预勘系统面试准备文档

image.png

一、业务场景与技术挑战(约 45 秒)

  - 场景背景:预堪系统负责工地验收前的质量检查,需管理 1000+ 条项,按三级目录组织:

      - 一级目录如 “主体结构”

      - 二级目录如 “钢筋检查”

      - 三级检查项如 “钢筋间距是否符合要求”

  - 核心需求:支持全局搜索并秒级定位任意检查项

  - 三大挑战:

      1. 全量渲染爆内存:1000+ 条目一次性渲染导致卡死

      2. 分页加载缺全局搜索:无法快速定位任意项

      3. 虚拟滚动下精确定位矛盾:既要按需渲染,又要跳到目标项

  ### 二、架构设计思路与核心创新(约 90 秒)

  - 分层虚拟化

      - 虚拟滚动单位提升至“二级目录”粒度

      - 每个 itemBuilder 渲染整个二级目录下所有检查项

  - 多级映射表(O(1) 查找)

      1. _catalogIndexMap:目录 ID → 虚拟列表 index

      2. _twoTitleToCatalogMap:检查项 ID → 所属二级目录

      3. _twoTitlePositionMap:检查项在所属目录内的相对位置

  - Lazy GlobalKey 策略

      - 目录渲染时 putIfAbsent 动态创建 GlobalKey

      - 只在必要时生成锚点,节约内存

  - 双阶定位机制

      1. 用 ItemScrollController.scrollTo 跳到目标“二级目录”,触发该目录渲染

      2. 延迟 50 ms(性能测试最优值),再用 Scrollable.ensureVisible + GlobalKey 做像素级微调

  ### 三、技术细节与架构优势(约 60 秒)

  - 空间换时间:三张映射表占用极小内存,却让查找速度提升数十倍

  - 精细状态管理:

      - 搜索、虚拟滚动、GlobalKey 生命周期、用户交互状态均封装于 ViewModel(Provider)

      - 保证状态变更可预测、可测试

  - 性能边界验证:

      - 延迟 50 ms 来自 iPhone 8/华为 Mate 20 等中端机型的帧率与渲染完成率测试

      - 确保 99.5% 渲染成功率且低于用户感知阈值

  - 量化收益:

      - 内存使用 ↓ 75%(相对全量渲染)

      - 定位响应 < 200 ms

      - 用户满意度 ↑ 40%

  - 组件化复用:已抽象为基础组件,供其他大数据列表场景复用

  ———

  四、架构思考与技术前瞻(约 25 秒)

  - 原则驱动:以业务痛点为导向,避免技术炫技

  - 渐进优化:从简单方案迭代至复杂方案,防止过度设计

  - 可测试可维护:职责清晰、层次分明、接口预留

  - 未来演进:计划接入 AI 智能搜索/语义匹配,现有映射表与定位方案均可无缝扩展

  ———

  五、高频深度追问 & 应答策略

  - Q1:50 ms 延迟如何确定?

    - 在 0–200 ms 范围内 AB 测试;低于 30 ms 未完成渲染,超 100 ms 用户感知卡顿;50 ms 在主流机型上性能/体验最佳平衡。

  - Q2:为何不分片加载或无限滚动?

      - 分片破坏业务完整性;无限滚动无法满足全局搜索定位,体验与性能权衡下映射+虚拟粒度更优。

  - Q3:若数据量增至 10000+,还能支撑?

      - 查找复杂度不变;单目录条目过多可拆分成四级目录;映射与虚拟滚动层级可灵活扩展。

  - Q4:如何防止 GlobalKey 泄漏?

      - 页面 dispose 时清理映射与 GlobalKey;定期清理未使用的 key;超阈值报警并自动清理。

  ———

  记忆要点

  - 核心架构:分层虚拟化 + 多级映射 + 双阶定位

  - 技术亮点:O(1) 查找 + Lazy GlobalKey + 精准延迟

  - 量化成果:75% 内存节省;< 200 ms 响应;40% 满意度提升

  - 扩展价值:基础组件化 + AI 接口预留 + 跨业务复用