一道题
面试的第一道程序是一个测试题,需要您先认真回答一下
京东优惠券的设计方式1. 优惠券有满减,满赠,运费(以后还可能有别的)2. 优惠券有地域、性别...使用条件3. 优惠券可能会通过某个活动码领取, 也有可能通过app之类的直接点击领取, 还有可能系统自动发放要求:1. 大概设计表结构2. 大概叙述程序逻辑3. 注意可扩展性 4 .考虑好目前的需求并且可以实现,答题要考虑周全谨慎作答.
简单体验下京东

架构图

涉及系统交互
后台
运营人员创建券。调用优惠券服务进行存储。
c端界面:
店铺服务调用券服务展示。
PLUS会员系统调用券展示。
活动页调用券信息展示。
个人中心展示优惠券的使用状态。
下单后优惠信息也要保存。订单详情会展示。
各种领券的操作。
等等。。。。需要优惠券出现的地方,调用优惠券的基础服务。(接口也好,其他rpc的方式也好)
其他系统交互
消息流系统:
退单,优惠券补发。(根据业务而定)
推送系统:
通常浏览商品,会突然“从天而降”优惠券。
推送短信。
app内推送。
表设计
优惠券基础表:存储优惠券的 title 、利益点、类型、限额还是满多少可用、金额、
优惠券类型表:运费|平台|礼金 |会员|分类|商品等等
如果选择商品,可以关联一些商品id。
选择分类,可以选择分类id。
优惠券规则表:优惠券id, 各种优惠券的限制条件(限制地域、限制性别、使用时间、如果)
品类跟优惠券关联表:
店铺跟优惠券关联表:
商品跟优惠券关联表:商品id 、优惠券id
订单关联优惠信息表:下单后订单id 跟优惠券id 放在这张表里(退单后根据这张表补发)。放计算好的优惠信息。
其他方面的考虑
- 防止多领?(并发条件下)
加锁、判断是否领过(可用缓存做标记)
- 限流
2.1 削锋限流(外部网关、内部网关)
2.2 个人领取频率限流。如果有需要。可以用redis搞(redis-cell )。
3.分库分表
有需要可以根据优惠券id 分 ,优惠券的表。
商品id跟优惠券关联的,按照商品id分。
以什么维度主要查就以什么id去分。
- 连接数问题
连接池
5.优惠券系统缓存一致性怎么保证?
也分场景。优惠券后台的配置尽量走消息队列。更改库然后更改redis。然后消息标记为消息成功。如果消息不成功告警。重新执行。
参考资料:
网友评论