后端设计中遇到的一些问题记录

记录一些坑 / 设计


如何设计一个投票系统?

  • 多节点部署,统一先写入redis
  • 定时从redis中读取数据落数据库mysql,再做统计之类的工作

数据溢出问题?

  • 比如说购买道具,前端输入了一个特别大的数量,然后乘以单价之后可能会溢出,应该如何避免这种问题?

两次 a-1 等于 a-2 的问题?

  • 比如说购买道具,客户端发了一次购买购买道具的请求,处理中又发送了另外一个购买请求,如何解决这类问题?

英雄技能冷却,如何做?

  • 用最小堆,按照时间戳排序,每次只取出堆定元素判断是否已经完成冷却,如果没有则所有的技能都没有冷却,否则再取堆顶

微信红包如何随机的分成n个?

  • 比如100元,由10个人分,那么平均一个人是10元钱。然后付款后,系统开始分份儿。
    • 第一份:系统由0~10元之间随机一个数,作为这一份的钱数,设x1。
    • 第二份:剩下的钱(100-x1),系统由0~(100-x1)/(10-1)随机一个数,作为这份的钱数,设x2
    • 第n份:剩下的钱(100-x1-x2-…-xn),系统由0~(100-x1-x2-…-xn-1)/(10-n)随机一个数,作为这个份的钱数,设为xn。

游戏中的支付一般怎么做?

  • 一般服务端先去平台创建好订单,然后通知客户端
  • 客户端根据订单号去支付
  • 支付完成之后然后再由平台通知服务器/完成之后客户端告诉服务器支付完成,然后由服务器去平台认证