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

假设游戏需要支持跨平台(PC/移动端)数据同步,如何设计系统架构以保障数据一致性?请说明数据同步的流程、冲突解决策略以及如何处理不同平台的特性差异(如移动端网络不稳定)。

游卡系统策划难度:困难

答案

1) 【一句话结论】

采用“客户端-服务器”架构结合“最终一致性”策略,区分PC(实时同步,强一致性)与移动端(异步同步,最终一致性),通过版本号检测冲突、本地缓存适配移动端网络,保障数据一致性与可用性。

2) 【原理/概念讲解】

核心是“客户端-服务器”数据同步模式,结合“强一致性”(PC端,实时同步)与“最终一致性”(移动端,异步同步)。

  • PC端策略:因网络稳定,采用实时同步(客户端修改后立即发送请求,服务器立即响应并更新),确保数据实时一致。
  • 移动端策略:因网络波动(如信号差、断网),采用异步同步(客户端修改后本地缓存,联网后批量提交),避免频繁请求导致卡顿。
    冲突解决采用“乐观锁”(版本号机制),通过数据版本号检测冲突(若版本不匹配则触发冲突)。移动端网络不稳定时,使用本地数据库(如SQLite)缓存数据,断网时本地修改并标记“待同步”,联网后批量同步。

类比:就像“记账”,PC端实时记账(立即同步账本),移动端断网时先记本地账本(待同步),联网后汇总记账,确保最终账本一致。

3) 【对比与适用场景】

策略/模式定义特性使用场景注意点
PC端实时同步(强一致性)客户端修改后立即发送请求,服务器立即响应网络延迟低,数据实时同步需要实时性高的场景(如角色状态、战斗数据)依赖稳定网络,移动端不适用
移动端异步同步(最终一致性)客户端修改后本地缓存,联网后批量提交网络友好,允许延迟游戏存档、角色属性、道具等非实时数据需要冲突解决机制,离线体验保障
乐观锁(版本号)用数据版本号检测冲突,无锁竞争适用于高并发读场景,冲突概率低数据修改频率低或冲突概率低冲突时需重试逻辑,用户交互
本地缓存(断网处理)移动端断网时本地存储修改保障离线体验网络不稳定环境需要同步机制,避免数据丢失,同步时可能冲突

4) 【示例】

数据同步流程(PC端,实时同步):

// 1. 获取服务器数据版本
version = 服务器获取用户数据版本()
// 2. 客户端修改数据(如等级+1,金币+100)
user_data = {level: user.level+1, gold: user.gold+100}
// 3. 发送带版本号的更新请求
response = 服务器更新数据(user_data, version)
if response.status == 200:  // 更新成功
    user.version = response.new_version
else if response.status == 409:  // 冲突(版本不匹配)
    // 重新获取数据并合并(最后写入者胜)
    user_data = 服务器获取用户数据()
    user = 合并数据(user_data, 本地修改数据)
    重新发送请求

数据同步流程(移动端,异步同步+断网处理):

// 1. 获取服务器数据版本
version = 服务器获取用户数据版本()
// 2. 客户端修改数据(如等级+1,金币+100)
user_data = {level: user.level+1, gold: user.gold+100}
// 3. 发送带版本号的更新请求
if 网络连接正常:
    response = 服务器更新数据(user_data, version)
    if response.status == 200:
        user.version = response.new_version
    else if response.status == 409:
        // 冲突,本地缓存并标记
        本地数据库保存修改(user_data, "待同步")
else:
    // 网络断开,本地保存
    本地数据库保存修改(user_data, "待同步")
// 联网后,批量同步待同步数据
批量发送所有待同步数据到服务器

5) 【面试口播版答案】

“面试官您好,针对跨平台数据同步,我会采用‘客户端-服务器’架构结合‘最终一致性’策略,区分PC与移动端特性。PC端因网络稳定,采用实时同步(强一致性),移动端因网络波动,采用异步同步(最终一致性)。数据同步流程是:客户端修改数据时,先从服务器获取版本号,修改后发送带版本号的请求,服务器验证版本后更新。冲突解决用乐观锁(版本号),若冲突则返回错误,客户端重新获取数据合并(如最后写入者胜)。对于移动端网络不稳定,采用本地缓存(如SQLite),断网时本地修改并标记,联网后批量同步。核心是平衡一致性与可用性,PC端保证实时性,移动端优先保证离线体验,服务器负责最终一致性。”

6) 【追问清单】

  1. 若两个客户端同时修改同一数据,如何处理?
    回答:用版本号检测冲突,返回409 Conflict,客户端重新获取数据合并(如选择最后修改的版本,或用户手动选择)。
  2. 数据量很大时,如何优化同步效率?
    回答:分片同步(按数据类型或用户分组),批量请求(如100条/次),压缩数据(如Gzip压缩JSON)。
  3. 如何保证数据安全?
    回答:加密传输(HTTPS),服务器端验证(签名),防止篡改。
  4. 如果服务器宕机,客户端如何处理?
    回答:本地缓存,待服务器恢复后同步。
  5. 移动端与PC端数据同步的延迟如何控制?
    回答:优先同步关键数据(如角色状态),非关键数据延迟同步,设置超时重试(如5次后放弃)。

7) 【常见坑/雷区】

  1. 忽略PC与移动端网络差异,统一采用异步同步,导致PC端体验差。
  2. 冲突解决策略单一,仅用最后写入者胜,未考虑用户选择或数据合并(如角色装备配置的复杂合并)。
  3. 未考虑本地缓存机制,导致断网时数据丢失,影响用户体验。
  4. 数据量优化不足,未分片或批量大小过大,导致同步延迟。
  5. 未明确假设条件(如服务器延迟、网络延迟、离线时长),导致风险分析不充分。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1