线上报零售退款导出报表下载出错。
第一次,线上报紧急问题,我心中竟然波澜不惊。也许是事先我已经足够审慎地审查过每一行代码的风险(改动也比较大,但绝大部分都是新增的),尽可能避免有风险的做法,并回归了所有必要的导出场景(只差一点,我不记得为什么正好就那个场景没有回归到或者没有发现问题)。甚至测试同学回滚后恢复正常,我依然固执认为不是我代码引起的问题。
但最终还是栽在一个极不起眼的小细节上。事出必有因。看下面的代码,你能猜到什么原因吗 ?
因为退款导出还未接入云存储,newUrlMap 为空,List
启示:
-
不要惧怕故障。要避免故障,唯一的方法是足够审慎地审查每一行代码可能的风险,做好足够的测试回归。没有人能避免出错,但有章法的做事可以将影响面降低到最小;恐慌是完全没有必要也没什么用处的;
-
细节上最易出错。往往改动很大,主要部分因为非常小心不会出错,一些不起眼的地方却会遭致失败。不可不鉴之。
-
使用 stream.map 时,要防御 null 值写进最终的值集合。写成这样:
List<String> newSubUrls = subUrls.stream().map(url -> newUrlMap.get(url)).filter(Objects::nonNull).collect(Collectors.toList());