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

报错日志:

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

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

所以解决方法就是:

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

再举个例子:

这段代码会报错:

从源码来看:

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

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

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

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

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

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

静儿的画画水平有点差 /(ㄒoㄒ)/~~

关注静儿公众号,不定期漫画技术推送~

本期文章:

原文链接地址是:

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

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

漫画:全面理解java.lang.IllegalArgumentException及其可用性设计的更多相关文章

  1. java.lang.IllegalArgumentException: Wrong state classs

    java.lang.IllegalArgumentException: Wrong state class, expecting View State but received class cn.et ...

  2. 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 ...

  3. 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 ...

  4. 严重: Error starting static Resources java.lang.IllegalArgumentException:

    严重: Error starting static Resources java.lang.IllegalArgumentException: Document base E:\myworkspace ...

  5. 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. ...

  6. 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\ ...

  7. java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required

    java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required 严重: Exceptio ...

  8. java.lang.IllegalArgumentException: Illegal character in query at index 261

    在BaseFragment中使用了LoadingPage,而LoadingPage的联网加载使用的是AsyncHttpClient.一直报java.lang.IllegalArgumentExcept ...

  9. 在访问jsp时抛java.lang.IllegalArgumentException: Page directive: invalid value for import的原因

    问题:java.lang.IllegalArgumentException: Page directive: invalid value for import 环境:tomcat 7.0.65 出错原 ...

随机推荐

  1. H5如何解监听页面退出需求???

    事发背景(时间较久): 在一个阳光明媚的一天,这天lz正在工位上悠闲的敲着代码:说时迟那时快,运营小姐姐箭步过来,让lz做一个挽留弹窗:我当时一听这TM不是流氓么.于是便有了以下的故事... 如何实现 ...

  2. python 基础知识整理

    列表推导式 类似 data=[x+1 for x in range(10)]执行结果就是 [1,2,3,4,5,6,7,8,9,10] 还有 even_numbers=[x for x in rang ...

  3. Exp3 免杀原理与实践 20164302 王一帆

    1 实践内容 1.1 正确使用msf编码器(0.5分),msfvenom生成如jar之类的其他文件(0.5分),veil-evasion(0.5分),加壳工具(0.5分),使用shellcode编程( ...

  4. [微信跳转链接]之WAP浏览器跳转微信指定页面,微信跳转链接

    今天在一个小说的链接上看到最后,点击一个[继续阅读按钮]居然唤起微信APP,在微信内打开一个二维码,长按识别后可关注微信公众号, 后来分析出:weixin://dl/business/?ticket= ...

  5. esxi 精简置备只增不减问题解决方法(转)

    esxi 精简置备只增不减问题解决方法 众所周知Thin Provisioning模式下的虚拟机磁盘的空间会随需增长,可以很大程度上帮助我们节约空间,可是,凡增长过后的空间,即使清除了导致增长的文件后 ...

  6. docker pull 镜像报错

    [root@localhost ~]# docker pull ningx Using default tag: latest Trying to pull repository docker.io/ ...

  7. sql server创建登录出发器后导致登录失败--解决方案

    1.选择sql server配置管理器---sql server服务--右键属性--启动参数--添加-f.-m两个参数并重启sql server服务 2.重新启动sql server以windos身份 ...

  8. [LeetCode] Mirror Reflection 镜面反射

    There is a special square room with mirrors on each of the four walls.  Except for the southwest cor ...

  9. oracle 创建的表为什么在table里没有,但是可以查出来

    有两种的可能: 1这个表在其他用户下创建的,当前用户没有权限访问,此表不在属于当前用户 2查询时写的表名,并不是真正意义的表名,可能指向其他用户,或者就不是这个表

  10. python | Elasticsearch-dsl常用方法总结(join为案例)

    Elasticsearch DSL是一个高级库,其目的是帮助编写和运行针对Elasticsearch的查询.它建立在官方低级客户端(elasticsearch-py)之上. 它提供了一种更方便和习惯的 ...