记一次惨痛的线上bug
讲述背景,刚入职新公司2个月的时候,接手一个红包系统。资历尚浅,对业务也不是很熟悉。公司开发新的平台,需要使用红包功能来进行推广,按照产品的需求,进行开发。。。然而,问题就出在这里,红包接口比较陈旧,许多代码并有过多注释(甚至多出注释不全,注释出错),接口参数参差不齐,看的很累。
起先,将系统中所有调用红包的地方,都改成调用我的红包系统。和某端联调时,出现各种bug,参数无规约,返回参数不明确,(不知道要返回些啥,无明确需求文档),最后还是某端哥们,将原来的sql提供给我才得以解决此问题。
接着为某端提供接口,内部对接时,新增许多需求,旧接口不支持。于是新增了新的接口,啪啪啪撸完代码,接口提供出去。先是被次端开发吐槽代码参数大小写时大时小(泪奔,我不能因为你们一个端去乱动历史代码啊,这接口我们也不清楚多少人在使用,历史参数问题请吐槽以前的前辈吧),其次接口提供完,大概半个月之后,开始联调,出现几个不知名的bug,经过定位,发现代码中处理逻辑太多,好多都过不去,于是为此端另辟新接口方法。刷刷刷,测试通过了,没有问题了。准备上线了,Duang!!!重点来了,产品零时提出需求,要求用户第一次登陆时,提示用户领取红包,每台设备每用户只能领取一次。需求很合理,我看了下代码,代码中原来就用这种逻辑判断,内心狂喜,直接拿来使用,BOOM!!!BOOM!!!BOOM!!!问题来了,原来的代码逻辑上有问题,有漏洞,当用户使用玩次红包之后,是可以再次领取的。天哪,当时自己也没注意到这个细节,自测的时候完全没问题。而测试去测试的时候,并没有考虑这种场景,结果测试通过,程序没问题~~~上线。。。
平稳度过一个星期,接着瞬间爆炸,700多个10元红包,被同一个人刷走了,炸了,真炸了,我整个人都蒙逼了,wtf!!!,赶紧查代码,一查果然,这个旧的逻辑里面状态漏了一种,玩完。按理说,红包还有各种使用限制,好家伙,这家伙利用我们另外一个平台,未校验红包的bug,刷了个精光。我的天,欲哭无泪啊。。
然后呢,通过这件事情呢,我想说的是,对旧代码,一定要仔细看!!!要仔细看!!!仔细看!!!关于钱的项目一定要仔细,认真。任何代码不论它已经上线多久了,也不论多稳定,都不要相信它,你一定要好好扒开它的,仔细看每一个细节,思考每一个逻辑。不是不出问题,只是时候未到。拿我这件事来说,此代码发布于2015年3月,以稳定运行1年多,然后他依旧出了问题,而代价就是7000多元的损失,这简直就是致命的。
最后,愿每个程序员都能处理好代码,协调好工作,大家多抽出点时间,来讨论方案,而不是让一个人,两眼摸瞎,改个代码,怕这受影响,哪里受影响,简直了~
记一次惨痛的线上bug的更多相关文章
- 记一次线上bug排查-quartz线程调度相关
记一次线上bug排查,与各位共同探讨. 概述:使用quartz做的定时任务,正式生产环境有个任务延迟了1小时之久才触发.在这一小时里各种排查找不出问题,直到延迟时间结束了,该任务才珊珊触发.原因主要就 ...
- 「日常开发」记一次因使用Date引起的线上BUG处理
生活中,我们需要掌控自己的时间,减少加班,提高效率:日常开发中,我们需要操作时间API,保证效率.安全.稳定.现在都2020年了,了解如何在JDK8及以后的版本中更好地操控时间就很有必要,尤其是一次线 ...
- 线上bug的解决方案--带来的全新架构设计
缘由 本人从事游戏开发很多年一直都是游戏服务器端开发. 因为个人原因吧,一直在小型公司,或者叫创业型团队工作吧.这样的环境下不得不逼迫我需要什么都会,什么做. 但是自我感觉好像什么都不精通..... ...
- 程序员如何描述清楚线上bug
案例 一个管理后台的bug,把操作记录中的操作员姓名,写成了该操作员的id.原因是修改了一个返回操作人姓名的函数,返回了操作人的id.但是还有其他地方也用这个函数,导致其他地方把姓名字段填写成了操作员 ...
- 线上bug分析
昨天下午大神把组内几十号人召集在一起开Online bug分析大会,主要是针对近期线上事故从事故原因和解决方案两个维度来分析. 对金融软件来说,每一次的线上事故都有可能给公司带来重大的损失,少扣了用户 ...
- 听说”双11”是这么解决线上bug的
听说"双11"是这么解决线上bug的 --Android线上热修复的使用与原理 预备知识和开发环境 Android NDK编程 AndFix浅析 Android线上热修复的原理大同 ...
- 线上bug或故障界定及填写规范
[线上故障与线上Bug界定] 一.线上故障: 1. 故障参照公司规范稍做调整: a) 1级故障:资讯首页或主App首页无法打开:多条业务线同时不可用:超过15分钟: b) ...
- 关于线上bug
之所以想写下线上bug,因为发觉有些公司对线上bug的处理是比较严格甚至是很苛刻,涉及到的相关人可能会因此而背黑锅. 之所以会存在这样情况,因为公司各部门都有关联,特别是用户.老板的投诉,也给公司会造 ...
- 记录一次线上bug
记录一次线上bug,总的来说就是弱网和重复点击.特殊值校验的问题. 测试场景一: 在3g网络或者使页面加载速度需要两秒左右的时候,输入学号,提交学生的缴费项目,提交完一个 学生的缴费后, ...
随机推荐
- JavaScriptOO.com – 快速找到你需要的 JS 框架
JavaScriptOO.com 集合了目前 Web 开发中最常用的422(截至目前)款 JavaScript 框架,你可以根据功能类别(Ajax,动画,图表,游戏等)进行过滤和排序,快速找到你需要的 ...
- jQuery.extend()方法和jQuery.fn.extend()方法源码分析
这两个方法用的是相同的代码,一个用于给jQuery对象或者普通对象合并属性和方法一个是针对jQuery对象的实例,对于基本用法举几个例子: html代码如下: <!doctype html> ...
- CORS(跨域资源共享)
前言:上一篇文章在写如何使用JSONP实现跨域请求的时候,偶然间提到CORS,即Cross-Origin Resource Sharing(跨域资源共享).虽然前些天也看了一下CORS相关的文章,但是 ...
- sharepoint2010问卷调查(3)-实现问卷的开始和结束时间(采用自定义字段类型)
接着上面的图片调查,sharepoint自带的问卷调查是没有开始和结束时间的.这个在项目过程不太实用.问卷一般有开始和结束时间的.因此需要自己 动手开发一个自定义字段类型字段.如下图: 开发添加栏目会 ...
- [javascript svg fill stroke stroke-width x y rect rx ry 属性讲解] svg fill stroke stroke-width rect 绘制具有圆角矩形属性讲解
<!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title ...
- Android闹钟 AlarmManager的使用
Android闹钟 AlarmManager的使用 AlarmManager介绍 AlarmManager这个类提供对系统闹钟服务的访问接口. 你可以为你的应用设定一个在未来某个时间唤醒的功能. 当闹 ...
- Java虚拟机JVM学习02 类的加载概述
Java虚拟机JVM学习02 类的加载概述 类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对 ...
- Android 手机卫士--解析json与消息机制发送不同类型消息
本文地址:http://www.cnblogs.com/wuyudong/p/5900800.html,转载请注明源地址. 1.解析json数据 解析json的代码很简单 JSONObject jso ...
- Java你可能不知道的事系列1
概述 本类文章会不段更新分析学习到的经典面试题目,在此记录下来便于自己理解.如果有不对的地方还请各位观众拍砖. 今天主要分享一下常用的字符串的几个题目,相信学习java的小伙伴们对String类是再熟 ...
- WPF学习之路(十)实例:用户注册
通过一个注册用户的实例了解页面间数据的传递 首先构建一个User类 User.cs public class User { private string name; public string Na ...