漫画:全面理解java.lang.IllegalArgumentException及其可用性设计

    经过一段时间的学习与实践,飞鸟已经可以独力解决一些问题。小鱼就让飞鸟讲述一些遇到的问题和解决过程。

报错日志:

这个产生的原因是我覆盖Collections.sort的Comparator方法的时候

Collections.sort在jdk1.7版本之后底层用的是TimSort,这个Sort类会有很严格的检验,检验其自反性、传递性、对称性。而上面的代码忽视了相等的情况,不满足对称性。

所以解决方法就是:

    IllegalArgumentException是非法参数异常,报这个异常说明传入的参数违反了一个方法要求的某些特性。比如咱们刚才看的问题里这个Comparator类作为sort方法的参数就违反了TimSort要求的对称性。

    再举个例子:

这段代码会报错:

从源码来看:

如果参数里出现了指定的patternChars之外的字符就会报错。

    发生IllegalArgumentException基本可以认定为程序Bug。Bug是避免的,应该在测试时发现。所以最重要的措施是完善测试用例,全分支覆盖,做好积累沉淀。

    如果真的在运行时发生此情况,那就要做好及时的监控报警,现场快照保存,尽量第一时间发现并解决。

    对内部异常咱们可以这么处理。那外部异常呢?比如使用的一个中间件,中间件有可能会版本升级出现不符合预期的情况。

    对于这种外部依赖,当发生问题的时候最好是不影响现有程序。方法比如启动时加载,如果发生问题,程序根本启动不起来。因为线上一般都不会只部署一台机器,一台机器发生问题启动不起来一般不会影响线上服务。这时候只要快速修复问题即可。

    如果必须运行时调用那就要尽量弱化依赖和控制依赖。具体可参考静儿在美团技术博客的文章《美团点评智能支付核心交易系统的可用性实践》

原文链接地址是:

漫画:全面理解java.lang.IllegalArgumentException及其可用性设计

跑题时间:恭喜你,你赢了

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏腾讯开源的专栏

手游热更新方案xLua开源:Unity3D下Lua编程解决方案

xLua是Unity3D下Lua编程解决方案,自2016年初推广以来,已经应用于十多款腾讯自研游戏,凭借其出色的性能,易用性,扩展性而广受好评。现在xLua开源...

5286
来自专栏抠抠空间

漫谈单点登录(SSO)

John Ousterhout 是斯坦福大学计算机系教授,也是 Tcl 语言的创造者。

834
来自专栏程序你好

20个对Java程序员有用的开源库

优秀且经验丰富的Java开发人员的特点之一是对API的广泛了解,包括JDK和第三方库。我花了大量的时间学习API,特别是在阅读了 Effective Java ...

822
来自专栏石奈子的Java之路

原 荐 Java9 Module解惑

1744
来自专栏腾讯Bugly的专栏

手游热更新方案xLua开源:Unity3D下Lua编程解决方案

导语 xLua是Unity3D下Lua编程解决方案,自2016年初推广以来,已经应用于十多款腾讯自研游戏,凭借其出色的性能,易用性,扩展性而广受好评。 而就在前...

3016
来自专栏杨建荣的学习笔记

前后端分离的流程设计

这里需要提两个概念,一个是本地前端,另外一个是平台前端,本地前端是在内部迭代使用,界面可以简单一些,功能为主;平台前端是一个具有全局规划性的前端技术,简...

1012
来自专栏大葡萄元元

开发一款app从PHP到API接口

答:不可以,因为PHP是脚本语言,是负责完成 B/S架构 或 C/S架构 的S部分,即:服务端的开发。(别去纠结 GTK、WinBinder)

521
来自专栏Hadoop实操

SparkStreaming读Kafka数据写HBase

2592
来自专栏阮一峰的网络日志

如何降低软件的复杂性?

John Ousterhout 是斯坦福大学计算机系教授,也是 Tcl 语言的创造者。

853
来自专栏SmartSql

SmartSql 常见问题

SmartSql 希望 开发人员更多的接触 Sql ,获得绝对的控制权与安全感。所以目前没有计划支持 Code First 编程模式。

992

扫码关注云+社区