上周五的时候,测试反应线上的某个接口报错,然后我去看线上机器的状态,此时CPU和内存都没有被打满。
接着检查日志,发现有个接口有空指针异常,查看代码空指针位置(这里其实不是空指针,是我粗心了),这里的代码是

map.get("xxx").get("list").add(item);

从map中拿到了一个集合然后添加操作,单看好像没什么问题,更加麻烦的是无法复现这个bug。
既然是空指针异常那么大概率就是这个集合是空的,然后去检索这个接口中都有哪些地方set集合,好在只有一个地方

A a=new A();
item.setOptions(Arrays.asList(a))

上面的代码一开始还没发现有什么问题,最后在同事的指点下查阅资料后之后
Arrays.asList()返回的是一个Arrays的内部类,这个内部类并没有去重写ad、remove、clear这些方法所以导致抛出异常

总结:
1.技术方面,日志中有错误类的类型,这个很重要,在这次解决问题的过程中我过于自信,看到null就以为是空指针,导致排查的方向错了
2.做事方面,既然做一件事,那就力所能及的范围内给它做好,不要因为他人的善意而降低自己的效率,心怀感激但是要自强


ChangZhu
8 声望1 粉丝

但将行好事,莫要问前程