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

请设计一个游戏内的任务系统(如主线任务、支线任务、日常任务),并说明如何通过技术手段(如数据库设计、服务器架构)保证系统在高并发(如活动期间万人同服)下的稳定性和数据一致性,同时如何利用用户行为数据优化任务难度和奖励机制以提升用户留存率。

多益网络策划类难度:困难

答案

1) 【一句话结论】
设计分层任务系统(主线、支线、日常),通过数据库分库分表+Redis缓存+消息队列解耦,确保高并发下的稳定与数据一致,结合用户行为数据动态调整任务难度与奖励,提升用户留存。

2) 【原理/概念讲解】
老师口吻解释:任务系统分为三类,主线任务(剧情驱动,线性推进,高价值奖励,如通关副本解锁新地图);支线任务(探索类,随机触发,中等奖励,如收集道具、完成特定区域任务);日常任务(重复性,低门槛,持续奖励,如每日登录、完成特定操作)。联动机制:主线任务进度影响支线触发条件(如主线第3关后,可触发区域支线),日常任务奖励根据主线进度调整(如主线完成50%后,日常任务奖励+20%)。技术架构:数据库分库分表(用户任务进度表按user_id % 分片数哈希分片,避免单表过大);缓存Redis存储用户任务进度(减少数据库压力);消息队列(Kafka)异步处理任务发放(活动期间高并发时,避免数据库直接压力)。数据一致性:采用最终一致性,通过补偿机制(任务进度同步失败后重试)修复。动态调整:用户行为数据(完成率、活跃度、难度反馈)用于调整,比如完成率低于50%则降低难度或增加奖励,连续7天登录则日常奖励翻倍。

3) 【对比与适用场景】

  • 任务类型联动对比
    | 任务类型 | 联动机制 | 定义 | 特性 | 使用场景 | 注意点 | | --- | --- | --- | --- | --- | --- | | 主线任务 | 触发支线、调整日常奖励 | 剧情驱动,线性推进 | 高价值奖励,强制完成 | 剧情推进,用户引导 | 需保证线性流程,避免跳过 | | 支线任务 | 主线进度触发 | 探索类,随机触发 | 中等奖励,可选 | 区域探索,丰富内容 | 随机性需合理,避免重复 | | 日常任务 | 主线进度、用户活跃度调整奖励 | 重复性,低门槛 | 持续奖励,激励日常 | 激励用户活跃,维持留存 | 需简单易操作,避免疲劳 |

  • 技术方案对比(数据库分库分表 vs 主从复制)
    | 方案 | 定义 | 特性 | 适用场景 | 注意点 | | --- | --- | --- | --- | --- | | 数据库分库分表 | 按业务或数据量拆分数据库实例/表 | 扩展性高,单表容量大 | 用户任务进度表(高并发写) | 跨库操作复杂,需分布式事务支持(最终一致性) | | 主从复制 | 数据库主从同步,读写分离 | 读写分离,提升性能 | 读多写少场景 | 写操作仍集中主库,高并发写压力仍大 |

4) 【示例】
数据库表设计:

  • task_table:task_id (主键), type (主线/支线/日常), name, description, reward (金币/道具/经验), status (未开始/进行中/已完成), next_task_id
  • user_task_progress:user_id (主键), task_id (外键), progress (0-100), status, last_update,按user_id % 分片数分片。

高并发处理流程(活动期间):

  1. 任务服务发送任务创建请求到Kafka;
  2. 消费者从Redis缓存获取用户任务进度(缓存未命中则查询数据库);
  3. 更新进度后,写入Redis并发布确认消息(避免消息丢失);
  4. 数据库分片查询:根据user_id路由到对应分片,执行更新。

5) 【面试口播版答案】
“面试官您好,我设计的任务系统分为主线、支线、日常三类。主线任务驱动剧情,支线丰富探索,日常激励活跃。技术上,数据库按任务类型分库,用户进度表分片存储;用Redis缓存进度,消息队列异步处理任务发放,避免高并发下数据库压力。数据一致性采用最终一致,通过补偿机制修复。用户行为数据(如完成率、活跃度)动态调整任务难度和奖励,比如完成率低就降低难度或加奖励,提升留存。总结来说,通过分层设计和技术解耦,确保高并发稳定,结合数据优化提升用户留存。”(约80秒)

6) 【追问清单】

  • 问:数据库分片的具体策略?答:用户任务进度表按用户ID哈希分片,每个分片对应独立数据库实例,查询时根据用户ID路由,避免单表过大。
  • 问:消息队列如何处理任务丢失?答:消息队列持久化消息,消费者处理失败后重试,结合幂等性(任务ID唯一,避免重复处理)。
  • 问:如何动态调整任务难度?答:根据用户完成率(过去7天完成率低于50%则降低难度),或用户等级(低等级用户任务难度降低)。
  • 问:高并发下缓存雪崩如何解决?答:Redis设置过期时间随机(±10%),或使用分布式锁控制并发写入,避免热点key同时过期。
  • 问:任务奖励机制如何优化?答:根据用户活跃度(连续7天登录则奖励翻倍),或任务完成次数(完成10次日常任务奖励升级)。

7) 【常见坑/雷区】

  • 忽略任务类型差异,统一设计导致主线任务过难或日常任务无意义;
  • 数据库分片后跨库操作复杂,未考虑事务一致性,导致数据不一致;
  • 消息队列未做幂等处理,导致任务重复发放;
  • 用户行为数据收集不全,动态调整无效,比如未区分新/老用户;
  • 忽略高并发下的缓存穿透问题,导致数据库压力激增;
  • 任务进度同步不一致,用户在不同设备上进度不同步。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1