讲述背景,刚入职新公司2个月的时候,接手一个红包系统。资历尚浅,对业务也不是很熟悉。公司开发新的平台,需要使用红包功能来进行推广,按照产品的需求,进行开发。。。然而,问题就出在这里,红包接口比较陈旧,许多代码并有过多注释(甚至多出注释不全,注释出错),接口参数参差不齐,看的很累。

  起先,将系统中所有调用红包的地方,都改成调用我的红包系统。和某端联调时,出现各种bug,参数无规约,返回参数不明确,(不知道要返回些啥,无明确需求文档),最后还是某端哥们,将原来的sql提供给我才得以解决此问题。

  接着为某端提供接口,内部对接时,新增许多需求,旧接口不支持。于是新增了新的接口,啪啪啪撸完代码,接口提供出去。先是被次端开发吐槽代码参数大小写时大时小(泪奔,我不能因为你们一个端去乱动历史代码啊,这接口我们也不清楚多少人在使用,历史参数问题请吐槽以前的前辈吧),其次接口提供完,大概半个月之后,开始联调,出现几个不知名的bug,经过定位,发现代码中处理逻辑太多,好多都过不去,于是为此端另辟新接口方法。刷刷刷,测试通过了,没有问题了。准备上线了,Duang!!!重点来了,产品零时提出需求,要求用户第一次登陆时,提示用户领取红包,每台设备每用户只能领取一次。需求很合理,我看了下代码,代码中原来就用这种逻辑判断,内心狂喜,直接拿来使用,BOOM!!!BOOM!!!BOOM!!!问题来了,原来的代码逻辑上有问题,有漏洞,当用户使用玩次红包之后,是可以再次领取的。天哪,当时自己也没注意到这个细节,自测的时候完全没问题。而测试去测试的时候,并没有考虑这种场景,结果测试通过,程序没问题~~~上线。。。

  平稳度过一个星期,接着瞬间爆炸,700多个10元红包,被同一个人刷走了,炸了,真炸了,我整个人都蒙逼了,wtf!!!,赶紧查代码,一查果然,这个旧的逻辑里面状态漏了一种,玩完。按理说,红包还有各种使用限制,好家伙,这家伙利用我们另外一个平台,未校验红包的bug,刷了个精光。我的天,欲哭无泪啊。。

  然后呢,通过这件事情呢,我想说的是,对旧代码,一定要仔细看!!!要仔细看!!!仔细看!!!关于钱的项目一定要仔细,认真。任何代码不论它已经上线多久了,也不论多稳定,都不要相信它,你一定要好好扒开它的,仔细看每一个细节,思考每一个逻辑。不是不出问题,只是时候未到。拿我这件事来说,此代码发布于2015年3月,以稳定运行1年多,然后他依旧出了问题,而代价就是7000多元的损失,这简直就是致命的。

  最后,愿每个程序员都能处理好代码,协调好工作,大家多抽出点时间,来讨论方案,而不是让一个人,两眼摸瞎,改个代码,怕这受影响,哪里受影响,简直了~

记一次惨痛的线上bug的更多相关文章

  1. 记一次线上bug排查-quartz线程调度相关

    记一次线上bug排查,与各位共同探讨. 概述:使用quartz做的定时任务,正式生产环境有个任务延迟了1小时之久才触发.在这一小时里各种排查找不出问题,直到延迟时间结束了,该任务才珊珊触发.原因主要就 ...

  2. 「日常开发」记一次因使用Date引起的线上BUG处理

    生活中,我们需要掌控自己的时间,减少加班,提高效率:日常开发中,我们需要操作时间API,保证效率.安全.稳定.现在都2020年了,了解如何在JDK8及以后的版本中更好地操控时间就很有必要,尤其是一次线 ...

  3. 线上bug的解决方案--带来的全新架构设计

    缘由 本人从事游戏开发很多年一直都是游戏服务器端开发. 因为个人原因吧,一直在小型公司,或者叫创业型团队工作吧.这样的环境下不得不逼迫我需要什么都会,什么做. 但是自我感觉好像什么都不精通..... ...

  4. 程序员如何描述清楚线上bug

    案例 一个管理后台的bug,把操作记录中的操作员姓名,写成了该操作员的id.原因是修改了一个返回操作人姓名的函数,返回了操作人的id.但是还有其他地方也用这个函数,导致其他地方把姓名字段填写成了操作员 ...

  5. 线上bug分析

    昨天下午大神把组内几十号人召集在一起开Online bug分析大会,主要是针对近期线上事故从事故原因和解决方案两个维度来分析. 对金融软件来说,每一次的线上事故都有可能给公司带来重大的损失,少扣了用户 ...

  6. 听说”双11”是这么解决线上bug的

    听说"双11"是这么解决线上bug的 --Android线上热修复的使用与原理 预备知识和开发环境 Android NDK编程 AndFix浅析 Android线上热修复的原理大同 ...

  7. 线上bug或故障界定及填写规范

    [线上故障与线上Bug界定] 一.线上故障: 1.  故障参照公司规范稍做调整: a)         1级故障:资讯首页或主App首页无法打开:多条业务线同时不可用:超过15分钟: b)       ...

  8. 关于线上bug

    之所以想写下线上bug,因为发觉有些公司对线上bug的处理是比较严格甚至是很苛刻,涉及到的相关人可能会因此而背黑锅. 之所以会存在这样情况,因为公司各部门都有关联,特别是用户.老板的投诉,也给公司会造 ...

  9. 记录一次线上bug

    记录一次线上bug,总的来说就是弱网和重复点击.特殊值校验的问题. 测试场景一:        在3g网络或者使页面加载速度需要两秒左右的时候,输入学号,提交学生的缴费项目,提交完一个 学生的缴费后, ...

随机推荐

  1. 你会喜欢的25个创意的扁平化 LOGO 设计

    扁平设计的风暴席卷了整个设计领域,它不仅影响网页设计,也影响了用户界面和标志设计.最近,我们看到了很多大公司,如谷歌和必应开始使用扁平设计的标识. 一个 LOGO 应该简单,显眼和精美,以适应产品的整 ...

  2. 推荐几个jQuery插件

    jQuery仿京东无限级菜单HoverTree http://www.cnblogs.com/jihua/p/hvtree.html 多级弹出菜单jQuery插件ZoneMenu http://www ...

  3. 【position也可以很复杂】当弹出层遇上了鼠标定位(上)

    前言 周五时同事有一个关于弹出层的问题没有解决,但是面临下班问题,我有点不舒服,便叫回去周六过来解决,但是上周六病了,所以请了个假,于是故事发生啦.... 今天上班时候,组员们卡到了那个地方,然后结果 ...

  4. (转)JavaScript-性能优化之函数节流(throttle)与函数去抖(debounce)

     JavaScript-性能优化之函数节流(throttle)与函数去抖(debounce)         函数节流,简单地讲,就是让一个函数无法在很短的时间间隔内连续调用,只有当上一次函数执行后过 ...

  5. Web前端面试笔试题总结

    最近一段时间要毕业了,忙着找工作,见过不少笔试面试题,自己总结了一些加上网上找的一些整合了一下.答案暂时都东拼西凑出来了,但是还是先不发出来,一方面是答案并不是唯一的并且自己的答案不能保证对,另一方面 ...

  6. 希尔排序(Shell)

    希尔排序的实质就是分组插入排序,该方法又称缩小增量排序. 该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序, ...

  7. 一个UILabel不同部分显示不同颜色

    我们直接来看效果图吧: 需求:就是表格cell里面的状态Label,前面的"状态:"是黑色,后面的状态值是红色,他们在同一个Label上,怎么做呢? 解答:真的是会者不难,难者不会 ...

  8. run() 和 start() 的区别

    1) start: 用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面(指主线程下面)的代码.通过调用Thread类的start()方法来启动一个 ...

  9. 【代码笔记】iOS-判断有无网络

    一,工程图. 二,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController : UIVi ...

  10. 【Gson】2.2.4 StackOverflowError 异常

    正文 错误: 08-09 09:56:51.904: E/AndroidRuntime(16384): java.lang.StackOverflowError 08-09 09:56:51.904: ...