Integer类型超限,导致数据异常

以前面试的时候总是被问Int类型几个字节等问题,一直以来对这种八股文嗤之以鼻。

直到今天业务突然反映,公司举办的世界杯联名活动,某些猜对比赛的用户的得到奖励是负值,因为到今天为止,世界杯举行大半,没有出现过问题,今天刚出现,所以不是代码问题,猜测是数据问题。

于是查数据库,找出所有奖励是负值的数据,经过分析,发现有共同点,所有异常用户的使用积分都是1000,只有最新的英格兰对挪威才有问题。

进一步分析,发现是代码也有问题,计算逻辑如下:

竞猜中奖金额 = 竞猜助威值 * 赔率

= 竞猜助威值 *(总奖池 / 竞猜猜中奖池)

= 竞猜助威值 * 总奖池 / 竞猜猜中奖池

这场比赛的

该场比赛实际投注总额是:2277260

竞猜猜中奖池:2053360

用户A投注额是:1000

那么,按照上边公式,竞猜中奖金额= 1000*2277260/2053360,在计算到第一步的时候1000*2277260=2277260000超过了Integer的最大值2147483647发生溢出,直接变成了负数-2017707296

然后继续计算-2017707296/2053360 =-982

破案了,紧急把int类型改成Long类型,问题解决,然后紧急补发奖励负数的用户

然后找业务,给所有受影响的客户打电话道歉

相关推荐
重生之小比特2 分钟前
【算法拾光】前缀和|一维前缀和 + 二维前缀和
数据结构·算法
江苏汉软5 分钟前
制造企业为什么需要MES
java·数据库·制造·mes系统·mes软件
deviant-ART13 分钟前
java注解简写规则
java·后端
邪修king18 分钟前
Re:Linux系统篇(三十八):进程间通信ChapterSystem V 信号量深度解析|同步互斥、内核源码、C 指针多态、实战代码
java·linux·c语言
文丑颜不良啊19 分钟前
LeetCode1181~1200题目解析
java·leetcode
释厄62322 分钟前
矢量词汇向下不向上公理即词汇归位定律——肤浅即表面
java·人工智能·算法·去中心化·1024程序员节
海绵宝宝转agent28 分钟前
Leetcode100+面经
java·笔记·学习·算法·leetcode·深度优先
会编程的吕洞宾31 分钟前
Spring Boot 镜像瘦身实战:从 450MB 瘦到 180MB
java·后端·spring
Shaoshing33 分钟前
LeetCode100 283.移动零
java·数据结构·算法·leetcode
海绵宝宝转agent34 分钟前
LeetCode100个人题解+java面经总结
java·开发语言·笔记·学习·算法