漫画:全面理解java.lang.IllegalArgumentException及其可用性设计
经过一段时间的学习与实践,飞鸟已经可以独力解决一些问题。小鱼就让飞鸟讲述一些遇到的问题和解决过程。
报错日志:
这个产生的原因是我覆盖Collections.sort的Comparator方法的时候
Collections.sort在jdk1.7版本之后底层用的是TimSort,这个Sort类会有很严格的检验,检验其自反性、传递性、对称性。而上面的代码忽视了相等的情况,不满足对称性。
所以解决方法就是:
IllegalArgumentException是非法参数异常,报这个异常说明传入的参数违反了一个方法要求的某些特性。比如咱们刚才看的问题里这个Comparator类作为sort方法的参数就违反了TimSort要求的对称性。
再举个例子:
这段代码会报错:
从源码来看:
如果参数里出现了指定的patternChars之外的字符就会报错。
发生IllegalArgumentException基本可以认定为程序Bug。Bug是避免的,应该在测试时发现。所以最重要的措施是完善测试用例,全分支覆盖,做好积累沉淀。
如果真的在运行时发生此情况,那就要做好及时的监控报警,现场快照保存,尽量第一时间发现并解决。
对内部异常咱们可以这么处理。那外部异常呢?比如使用的一个中间件,中间件有可能会版本升级出现不符合预期的情况。
对于这种外部依赖,当发生问题的时候最好是不影响现有程序。方法比如启动时加载,如果发生问题,程序根本启动不起来。因为线上一般都不会只部署一台机器,一台机器发生问题启动不起来一般不会影响线上服务。这时候只要快速修复问题即可。
如果必须运行时调用那就要尽量弱化依赖和控制依赖。具体可参考静儿在美团技术博客的文章《美团点评智能支付核心交易系统的可用性实践》。
静儿的画画水平有点差 /(ㄒoㄒ)/~~
关注静儿公众号,不定期漫画技术推送~
本期文章:
原文链接地址是:
漫画:全面理解java.lang.IllegalArgumentException及其可用性设计
漫画:全面理解java.lang.IllegalArgumentException及其可用性设计的更多相关文章
- java.lang.IllegalArgumentException: Wrong state classs
java.lang.IllegalArgumentException: Wrong state class, expecting View State but received class cn.et ...
- MyBatis与Spring MVC结合时,使用DAO注入出现:Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
错误源自使用了这个例子:http://www.yihaomen.com/article/java/336.htm,如果运行时会出现如下错误: Invocation of init method fai ...
- hadoop程序问题:java.lang.IllegalArgumentException: Wrong FS: hdfs:/ expected file:///
Java代码如下: FileSystem fs = FileSystem.get(conf); in = fs.open(new Path("hdfs://192.168.130.54:19 ...
- 严重: Error starting static Resources java.lang.IllegalArgumentException:
严重: Error starting static Resources java.lang.IllegalArgumentException: Document base E:\myworkspace ...
- Eclipse启动Tomcat时发生java.lang.IllegalArgumentException: <session-config> element is limited to 1 occurrence
在学习struts 2时,为了方便,直接从下载的struts的apps目录下的struts2-blank.war压缩包下的WEB-INF\复制的web.xml,当我启动Tomcat时,发生 java. ...
- tomcat报错java.lang.IllegalArgumentException: Document base XXXXX does not exist or is not a readable directory
启动tomcat的时候报如下错误: java.lang.IllegalArgumentException: Document base F:\java\tools\tomcat\me-webapps\ ...
- java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required
java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required 严重: Exceptio ...
- java.lang.IllegalArgumentException: Illegal character in query at index 261
在BaseFragment中使用了LoadingPage,而LoadingPage的联网加载使用的是AsyncHttpClient.一直报java.lang.IllegalArgumentExcept ...
- 在访问jsp时抛java.lang.IllegalArgumentException: Page directive: invalid value for import的原因
问题:java.lang.IllegalArgumentException: Page directive: invalid value for import 环境:tomcat 7.0.65 出错原 ...
随机推荐
- Laravel修改验证提示信息为中文
1.覆盖提示信息: 打开resource/lang/en/validation.php注释掉英文提示信息 $ sudo vim resource/lang/en/validation.php 将下面的 ...
- kvm虚拟机网络管理
一.Linux Bridge网桥 管理 # brctl show 显示当前网桥连接状态 # brctl addbr br1vlan-10 添加网桥 # brctl delbr br1vlan-10 删 ...
- JAVA基础复习与总结<八> 缓冲流_数据流_对象流_IO总结
缓冲流.数据流以及对象流 一.缓冲流 缓冲流的概念:在读写的时候,对于单字节的读取会造成硬盘的频繁读写,增加访问次数,降低了读取文件的效率.而引入缓冲流之后,就可以将多个字节写入缓冲区,在缓冲区积累之 ...
- windows10 docker镜像存储位置修改
=====================================下面做法无效,无法成功启动docker=================================== 安装Docker ...
- Day3----《Pattern Recognition and Machine Learning》Christopher M. Bishop
其实今天只花了一点点时间来学习这本书, 如果模型的参数过多,而训练数据又不足够多的话,就会出现overfitting. overfitting可以通过regularization来解决,贝叶斯方法也可 ...
- springboot项目打包
使用IDEA或Eclipse的插件创建springboot项目的时候可以选择打包方式,一般情况下都是选择的jar包. 当想将原来的jar包格式的项目打成war包在本地tomcat下运行时可以通过以下几 ...
- windows下输入git用户名和密码错误,重新输入用户名和密码
git clone https://YOUR_USERNAME@gitee.com.xxx.git将YOUR_USERNAME替换为该代码线的用户名,会弹出提示重新输入密码 每次windows提示输入 ...
- java对文件的基本操作
package cn.edu.fhj.day009.FileDemo; import java.io.File; import java.io.IOException; public class Fi ...
- Windows下Flume的安装
flume(日志收集系统) Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据:同时,Flum ...
- SVN搭建外网远程访问
准备条件 SVN服务器安装及配置 SVN服务端,客户端安装配置可以参考:http://www.cnblogs.com/mq0036/p/5250198.html 花生壳客户端下载,安装,注册(内网穿透 ...