|
耽误了几天,开始就不聊和技术相关的,我也没有什么拿的出手技术供大家参考。先说说这周公司发生的一件事情吧。 一大早到公司,项目经理一脸的严肃,告知昨天晚上生产环境有一张基础表的数据被清空了。 问题的影响点:基础数据被删除了,那么昨天晚上和基础表关联的定时任务,并发程序,还有海外用户的操作可能都会受到,具体的影响范围还有待确认。看起来虽然是一件小时,但是影响面确实很大。 问题已经解决,但是这件事我还是想扯一下,如果我是项目经理遇到这种情况怎么解决。 首先,基础表的数据要从备份中恢复,及时的阻止影响范围的扩大。 然后,定位问题的产生,这里就有一个说法,基础表的数据一般在数据库的设计中是做伪删除的,伪删除的好处在于一个updateBy和updateDate,这样我们可以很快速的找到删除人和删除时间。同时数据还原的时候可以不用去找备份数据。很遗憾的是本次操作是一个物理删除,就是所谓的一刀切。那么这个时候就只能从日志中寻找这个作案凶手了,我对日志的理解不太深,一般知道的就是log4j的运行日志。但是这个日志应该是很难排查这个问题。原因就是公司不怎么样,用户规模还是可有的,全球范围的,日志的产出量很大。还有一种日志,是针对于表的,举个例子,有些公司为了统计用户对系统的使用情况,会统计一个报表,这个报表可以记录用户的登陆时间,登出时间,某个菜单甚至到按钮的使用情况。实现的方法就是单独使用一个日志表来记录。很遗憾也没有。 既然找不到这个人,但是事情的进展还是推进的。这里说一下为什么要找到这个发现系统bug的人。原因很简单,不是为了找他的麻烦,而是还原场景,开发人员当遇到测试提单bug的时候,第一个反应往往不想知道这个bug是什么,而是想测试人员帮你还原一个场景。这样比自己分析问题的效率会快很多。 下面就是场景的还原了,虽然本次场景还原是我们公司另外一个大神干的。可能我这小渣渣项目经理看不上。但是如果是我来还原的话,找到页面,去页面对应的xml(ibtis框架)中找到delet table语句,满足的清空条件。然后条件倒推到页面的操作。那么最后定位到的问题就很坑爹了。新增按钮(页面的删除按钮disable)----然后重置(删除按钮释放)---选择新增行删除(删除的ids为空)。js,action中没有做非空判断。xml中<if>条件不满足,直接清空一张表。卧槽一顿操作,目瞪口呆,哪个实习生写的代码,测试是猪么。 从开发者的角度来看,1.新增按钮的操作为什么会影响删除按钮 。 2.删除操作,js,java层为什么没有控制。 让我们来推断一下这个哥们当时惊为天人的操作,删除有2种删除,一种是js删除,就是垃圾数据还没保存到数据库,在页面中就想扼杀掉。一种是数据库数据删除。那么这位大哥应该是js删除不会写,就是table表个的remove一行不会,那么把删除按钮置灰,一劳永逸。这个时候删除function下写一个,必须选择一行才能删除的校验。这样看来垃圾数据刷新页面就可以直接清除,数据库数据删除一定会有一个ids。毕竟必须要选择一行才能有这个操操作。MMP的是有一个重置按钮。 本人初入java时,遇到过一个很牛B的项目经理。不教代码怎么写,只和你讲程序员的思维逻辑。在这里和大家分享一下 1. 当你发现一件事情不合理,思维逻辑很乱,而且很难进行下去的时候。回到第一步。重新分析是最快的方法。 很明显那位大哥,新增操作和删除操作有个屁的关系,第一步就错了。 2. 学习无从下手的东西,删掉你看不懂的代码,留下你能看懂的。如果你能把删除的代码还原上去,你就学到了 3. 遇到你觉得不能理解的问题时,解释一下这个问题指的是:大家在开发的时候经常会遇到,自己主观感觉这个问题不会出现,但是确实出现了,debug也找不到原因的那种。那么不要轻易的去找他人帮你解决。这个问题很明确的说你自己是肯定能解决的,而且这个问题往往体现了你的知识薄弱点。 4. 写代码一定要写注释,你的代码你自己也看不懂 5.你的想法你的感受要向他人用语言的形式体现出来,没人有会主动在意你的感受,除了你爸妈。 |