记一次惨痛的线上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网络或者使页面加载速度需要两秒左右的时候,输入学号,提交学生的缴费项目,提交完一个 学生的缴费后, ...
随机推荐
- css知多少(9)——float下篇
float内容比较多,咱们分上.下两篇来介绍,上篇已经写完,这是下篇.建议大家先把上篇看了,再来看下文,精彩内容不要掠过啊. 1. 清除float <上篇>中我们提到,float具有“破坏 ...
- jQuery Danmmu Player 弹幕视频
Danmmu Player是基于jQuery的弹幕视频插件.当在看视频的时候,同时发表自己的观点,这样很好的提高用户互动效果.其实也就是在视频界面上做一个滚动展示动画效果,这样的聊天互动视频效果我们叫 ...
- C#实现jQuery的方法连缀
jQuery的方法连缀使用起来非常方便,可以简化语句,让代码变得清晰简洁.那C#的类方法能不能也实现类似的功能呢?基于这样的疑惑,研究了一下jQuery的源代码,发现就是需要方法连缀的函数方法最后返回 ...
- 精通 CSS 选择器
CSS 选择器除了样式表匹配元素时需要用到,在使用 jQuery 等库的时候也可以利用 CSS 选择器来选择元素,因此作为前端开发需要熟练掌握.下面是一些常用的 CSS 选择器示例. 元素选择器 E, ...
- CodeSmith连接不上MySql数据库的解决办法
下载地址是http://dev.mysql.com/downloads/mirror.php?id=403020 请先注册登录后才能下载mysql-connector-net-6.3.7.msi这个文 ...
- 连接QuickBooks Online实现于IOS App数据同步功能的个人记录
公司项目需要用WebService与QBO实现后台数据同步,由于国内没有做过类似第三方产品接口的资料,前前后后找了N久,终于实现功能,现把实现功能步骤贴上来分享: QBO开发者地址(主要用于创建QBO ...
- Android 利用内容提供者添加联系人的操作
上文中<Android 获取系统的联系人>主要介绍了怎样获取系统联系人并实战了一下,本文将介绍如何添加一条联系人信息 添加联系人 1. 添加raw_contacts表,添加一条联系人的id ...
- iOS手势的传递问题
昨天在做一个页面的时候,我先在一个uiview上面画了一个字母的索引表,之后我通过touchbegan来表示 点击到字母的效果,主要效果是跳出一个界面来显示你按到的字母是什么. 之后我用touchmo ...
- sqlplus: error while loading shared libraries: /u01/app/lib/libclntsh.so.11.1
成功安装了Oracle 11g后,使用sqlplus登录数据库时遇到下面错误: [oracle@DB-Server ~]$ sqlplus / as sysdba sqlplus: error w ...
- SQL Server 2012实施与管理实战指南(笔记)——Ch6连接的建立和问题排查
6.连接的建立和问题排查 会话的建立分成2个部分: 1.连接,即找到这个实例 2.认证,告诉sql server谁要连接 目录 6.连接的建立和问题排查 6.1协议选择和别名 6.1.1 服务器网络配 ...