功能奇数次执行和偶数次执行时的结果不同的故障复盘

场景:
将数据库查询到的数据,写入一个xls文件。
完成后,多点几次,发现一个问题,偶数次生成的文件比较小,打开一看,里面只有一行,只有标题,没有内容。
分析日志,发现偶数次执行时预期的执行进程中没有相关的日志打印

分析:
奇数次执行与预期一致,就不再分析了;
偶数次执行时虽没有找到日志,但生成的文件名与文件格式均与预期一致,唯独缺少文件内容。
重启进程打开调试,果然在偶数次执行时,Eclipse中相关代码并没有触发,这与预期进程中没有找到相关日志打印是一致的。
(事后分析:有与代码逻辑相现的结果文件名及标题,说明代码执行了,但在预期的进程日志没有找到打印,只能说明没有在预期进程中执行,但的确是执行了)
问题:
既然除缺少文件内容外,其它均与预期一致,说明相关代码肯定执行了。日志去哪了呢。
解决办法(在这个环节出了乌龙):
没有找到日志,说不定在其它地方有。然后使用NotePad++对整个目录搜索,最后得到的结论是没找到。
这个乌龙结论的原因忘了,不知正在搜索时,远程主机被其它人占用,然后再登陆时状态丢失,还是当时Notepad++卡死,重启了。

反思:
对可能的疑点或一个猜想一定要严谨的验证,大胆架设,小心求证,一定要小心求证。
这个乌龙,导致后面浪费自己和其它同事不少时间。

使用Notepad++搜索很大的目录时,一定要限定扩展名,不然搜到大文件或二进制文件,会导致Notepad++卡死后重启。

求助:
求助相关模块的同事,对方验证了下均表示他们的模块无异常,让我这边排查代码逻辑。
这就无解了,如果逻辑有问题肯定会抛异常,怎么可能找不到相关日志,报错或正常打印。

在求助的过程中,有一个同事在帮助分析偶数次执行时,给一个提示,让确定下偶数次执行时,执行功能的path,应该是进程吧(猜的,这块对我是黑盒)

由于当时一直纠结于为什么没有日志的事,把这个重要线索给忽略了。

转机:
正好遇到双休日,忽然想到这个故障,path中的root节点与另一个进程名很像,看看这个进程下有没有相关日志,
一查,果然有!!!!!!!!!!!!!!!!!!!!!!!!!!
日志的事有着落了,说明偶数次执行时,功能在另一个进程中执行了。

问题:为什么没有内容呢,标题都有
远程调试开一下,跟了代码,ResultSet中的确没有数据。
为什么呢????????
无解。。。。
在干其它事时,忽然想到,是不是数据库连接有问题,把断点打在获取Connection之后,一看dbUser不是预期的那个,打开PL/SQL,使用Connection中使用的帐户登陆Oracle,把日志中的sql在这个用户下执行一下,果然查询结果为空。
世界澄清了。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
功能使用其它模块提供的获取数据库API,在不同进程下,这个API使用的dbUser是不一样的,这次比较巧的是,这个非预期dbUser中居然有表结构了。

解决:
与其它模块的同事协调处理办法。


反思:
故障出现了,肯定有其符合逻辑的原因,目标是根据已知的信息,大胆架设,小心求证,一定要求证。

一定不能陷在,看似矛盾的已知信息上,而让自己陷入死循环。要根据已知,架设可能导致这种结果的可能性,再来一一验证,最终找到真正的原因。

tips:
Notepad++文件件查找功能的help:

 

转载于:https://www.cnblogs.com/softidea/p/4700524.html

判断一张牌被翻转的数是奇数还是偶数,可以根据以下两种方法实现: 方法一:暴力模拟 我们可以使用一个计数器来记录每张牌被翻转的数,初始值为 0。每进行翻转操作,将计数器加 1。最后判断计数器的值是奇数还是偶数,即可判断这张牌被翻转的数是奇数还是偶数。 方法二:利用异或运算 异或运算的一个重要性质是:对于任意两个整数 a 和 b,有 a ^ b ^ b = a。也就是说,如果一个数被另一个数异或了两,那么它的值不会发生变化。 我们可以将每翻转操作看作是将这张牌的状态取反,也就是将这张牌的状态与 1 进行异或运算。如果这张牌被翻转的数是偶数,那么最终的状态与初始状态相同,即初始状态 ^ 偶数异或运算的结果为初始状态;如果这张牌被翻转的数是奇数,那么最终的状态与初始状态相反,即初始状态 ^ 奇数异或运算的结果为初始状态取反。因此,我们只需要用初始状态与每翻转操作的结果进行异或运算,最后统计每张牌的结果即可。 下面是使用异或运算判断一张牌被翻转的数的代码实现: ```python def get_flip_count(card_list): flip_count = 0 for card in card_list: flip_count ^= card return flip_count ``` 其中,`card_list` 是一个包含所有牌的状态的列表,0 表示背面朝上,1 表示正面朝上;`flip_count` 初始值为 0,表示所有牌都没有被翻转。在循环中,我们对每张牌的状态进行异或运算,最后得到的就是所有牌被翻转的数的奇偶性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值