零售退款导出列表页下载出错
线上报零售退款导出报表下载出错。
第一次,线上报紧急问题,我心中竟然波澜不惊。也许是事先我已经足够审慎地审查过每一行代码的风险(改动也比较大,但绝大部分都是新增的),尽可能避免有风险的做法,并回归了所有必要的导出场景(只差一点,我不记得为什么正好就那个场景没有回归到或者没有发现问题)。甚至测试同学回滚后恢复正常,我依然固执认为不是我代码引起的问题。
但最终还是栽在一个极不起眼的小细节上。事出必有因。看下面的代码,你能猜到什么原因吗 ?
因为退款导出还未接入云存储,newUrlMap 为空,List
启示:
-
不要惧怕故障。要避免故障,唯一的方法是足够审慎地审查每一行代码可能的风险,做好足够的测试回归。没有人能避免出错,但有章法的做事可以将影响面降低到最小;恐慌是完全没有必要也没什么用处的;
-
细节上最易出错。往往改动很大,主要部分因为非常小心不会出错,一些不起眼的地方却会遭致失败。不可不鉴之。
-
使用 stream.map 时,要防御 null 值写进最终的值集合。写成这样:
List<String> newSubUrls = subUrls.stream().map(url -> newUrlMap.get(url)).filter(Objects::nonNull).collect(Collectors.toList());
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2017-07-15 有趣或是美好