面试防线:离线命令队列在重连重发时的请求幂等性与乱序治理

面试官提问
“在无网环境下前端会将用户的操作囤积在本地。但网络恢复的瞬间,十几条请求并行发向后端,一旦乱序,或者因为重试导致订单被重复提交,这种数据污染怎么治理?”

核心回答思路 (STAR法则)

  1. 业务痛点 (Situation)
    乐观更新在断网时很爽,但在重连时是灾难:如果请求乱序到达,业务最终态将与用户意图错位;甚至产生极其恶劣的重复扣款。

  2. 技术考量 (Task)
    前端必须担负起分布式系统中的顺序保证和请求幂等性的硬核职责。

  3. 架构决策 (Action)

  • 底层的串行锁调度:离线恢复队列是一个串行总线,来网瞬间所有命令排队;前一个请求没收到 response 之前,绝不拉起下一个。物理层面掐死了执行乱序。
  • 唯一自证指纹保证幂等 (X-Request-ID):前端立即用 uuidv4() 为它生成唯一 X-Request-ID。如果遭遇超时重发,ID 绝不变. 后端网关校验 UUID,遇到相同 ID 直接拦截返回缓存结果。
  • 状态机对账与回滚:若发现严重冲突(如数据已被别人改动),队列立刻熔断,主动销毁原本的“乐观虚假态”,强制同步覆盖真实数据。
  1. 业务价值 (Result)
    在极端断网测试下,真正做到了用户操作的如丝顺滑和底层数据的零次脏写事故。