51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

设计一个支持多设备同步学习进度的系统,要求保证数据一致性(如学生在不同设备上学习后,进度能实时同步),请说明系统架构、数据同步策略(如WebSocket、数据库同步)及容错机制。

好未来前端 - Android难度:困难

答案

1) 【一句话结论】
采用客户端-服务端-数据库分层架构,结合WebSocket实时同步与数据库最终一致性,通过设备优先级(主设备手机优先同步)、本地缓存回写(网络恢复后5秒内强制同步,冲突合并笔记)、分布式乐观锁(高并发用Redis锁或批量更新)等机制,确保多设备学习进度实时同步且数据一致。

2) 【原理/概念讲解】
老师口吻解释系统核心组件与机制:
系统分为三部分:**客户端(Android App)**负责收集用户学习进度(如当前章节、已读页数),区分主设备(手机,优先同步)和次设备(平板,延迟同步);**服务端(后端服务,如Java/Go)**搭建WebSocket服务器处理实时同步,同步服务处理数据库更新,冲突解决服务处理冲突;**数据库(如MySQL+Redis)**存储进度数据,MySQL主从复制保证数据持久化,Redis缓存加速读取。

  • 数据同步策略:
    • 实时同步:客户端与服务端建立WebSocket长连接,服务端收到主设备更新后,通过WebSocket广播至所有设备,实现进度即时同步(类比:多人协作编辑文档,实时看到对方修改)。
    • 最终一致性:数据库通过乐观锁(字段version)保证数据一致性,客户端更新进度时,检查数据库版本是否匹配,匹配则更新,否则触发冲突解决。
  • 容错机制:
    • 网络断开时,客户端本地缓存进度(如使用Room数据库),重连后检查本地缓存与服务器数据版本,本地较新则强制同步,冲突时合并笔记内容;
    • 设备切换时,主设备(手机)更新后,次设备(平板)在5秒内自动同步(若网络断开,延迟同步);
    • 冲突解决:笔记类数据采用版本历史合并算法(保留用户意图,合并不同设备上的笔记内容)。

3) 【对比与适用场景】

策略定义特性使用场景注意点
WebSocket(实时同步)客户端与服务端长连接,服务端推送更新低延迟,实时双向通信需要持续连接,适合对实时性要求高的场景(如即时同步学习进度)需维护长连接,网络不稳定时可能断开,需心跳检测
数据库同步(最终一致性)通过乐观锁、事务保证数据一致性,异步同步事务保证,版本控制网络不稳定或断开时,异步同步,适合对实时性要求不高的场景可能存在延迟,需冲突解决机制

4) 【示例】

  1. 客户端更新进度请求(主设备手机):
    POST /api/progress/update
    {
      "userId": "user123",
      "chapterId": "ch1",
      "lastPage": 15,
      "version": 2,
      "deviceType": "primary"
    }
    
  2. 服务端处理逻辑:
    • 检查MySQL中user_progress表的version是否等于请求中的version(乐观锁);
    • 若匹配,更新lastPage=15,version加1,通过WebSocket广播至所有设备;
    • 若不匹配(冲突),返回冲突信息,客户端调用冲突解决服务合并笔记。
  3. 本地缓存回写流程(次设备平板网络断开):
    • 网络恢复后,客户端检查本地缓存版本(version=1)与服务器版本(version=3),本地较新则强制同步(发送更新请求);
    • 若服务器版本较新,检查笔记内容,若本地有新增笔记,调用合并算法(保留用户意图,合并内容);
    • 合并后更新本地缓存并同步至服务器。

数据库表结构:

CREATE TABLE user_progress (
  userId VARCHAR(50) PRIMARY KEY,
  chapterId VARCHAR(50),
  lastPage INT,
  version INT DEFAULT 1,
  lastSyncTime TIMESTAMP
);

5) 【面试口播版答案】
“面试官您好,针对多设备同步学习进度的系统,我的设计思路是采用分层架构,结合WebSocket实时同步与数据库最终一致性,并设计设备优先级、本地缓存回写、分布式乐观锁等机制。首先,系统分为客户端(区分主设备手机/次设备平板)、服务端(WebSocket服务器、同步服务)、数据库(MySQL+Redis)。数据同步上,主设备(手机)更新后通过WebSocket广播,次设备(平板)5秒内自动同步;数据库用乐观锁(version字段)保证最终一致性。容错方面,网络断开时客户端用本地数据库缓存,重连后检查版本并同步,冲突时合并笔记内容。设备切换时,主设备优先同步,次设备延迟同步。这样既能保证进度实时同步,又能处理网络异常和并发冲突,确保数据一致。”

6) 【追问清单】

  • 问:网络延迟或抖动如何影响实时性?
    答:通过WebSocket的3秒心跳检测(定期发送心跳包)和重连机制,减少延迟影响;延迟场景采用最终一致性,允许一定延迟但保证数据最终一致。
  • 问:并发用户多时,数据库乐观锁是否会导致性能问题?
    答:使用乐观锁,并发低时性能良好;高并发时,可考虑Redis分布式锁加锁更新,或批量更新减少锁竞争,需权衡一致性。
  • 问:冲突解决策略除了最后写入者胜,还有其他方案吗?
    答:可合并不同设备上的学习笔记(如保留用户意图),适用于笔记类数据,通过版本历史记录合并。
  • 问:本地缓存如何实现?
    答:客户端用Room数据库缓存进度,网络断开时更新本地数据,重连后同步,缓存策略用LRU避免内存占用。
  • 问:设备优先级如何定义?主设备更新后次设备如何同步?
    答:主设备(手机)为优先级1,次设备(平板)为优先级2;主设备更新后,次设备在5秒内检查网络并同步,若网络断开则延迟同步。

7) 【常见坑/雷区】

  • 忽略设备优先级(如平板与手机的同步策略差异),导致方案通用性不足。
  • 本地缓存回写机制不明确(如网络恢复后同步时机、冲突处理规则),影响落地可行性。
  • 乐观锁在高并发下未讨论分布式锁或批量更新,导致性能下降。
  • 冲突解决仅用“最后写入者胜”,未考虑业务场景(如笔记合并),可能导致数据不一致。
  • 网络延迟处理不具体,未给出心跳间隔或延迟阈值,影响用户体验。
  • MySQL+Redis的缓存一致性机制未说明(如双写或消息队列),可能导致数据不一致。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1