Mythsman


乐极生悲,苦尽甘来。


标签: Java


  1. 一个非典型Spring循环依赖的问题分析

    前言这两天工作遇到了一个挺有意思的Spring循环依赖的问题,但是这个和以往遇到的循环依赖问题都不太一样,隐藏的相当隐蔽,网络上也很少看到有其他人遇到类似的问题。这里权且称他非典型Spring循环依赖问题。但是我相信我肯定不是第一个踩这个坑的,也一定不是最后一个,可能只是因为踩过的人比较少、鲜有记录罢了。因此这里权且记录一下这个坑,方便后人查看。 正如鲁迅(我)说过,“这个世上本没有坑,踩的人多了,也便成了坑”。 循环依赖典型场景经常听很多人在Review别人代码的时候有如下的评论:“你在设计的…

    Java, SpringBoot阅读全文

  2. IntelliJ常用配置备忘

    前言最近IntelliJ又由于自己的骚操作给弄崩溃了,导致之前弄的一大波配置又找不到了,十分蛋疼的又要开始重头开始弄环境。很多之前精心搞过的配置又都记不住了,为了防止以后出现这种情况,这里就把我日常用的配置和注意点记一下,免得以后又要重新摸索。尽量持续更新。 安装安装这块没啥好说的,不过要注意的是,虽然 IntelliJ 有 Community 版,但是毕竟还是少了一些东西的,比如对JavaScript的支持、一些静态检查的支持、Spring框架的整体支持等等。因此还是不要太委屈自己了,安装个正…

    Java, Tools阅读全文

  3. sofa-ark类隔离技术分析调研

    问题痛点最近维护了一段时间的组件包,在向同事进行推广的时候,经常会听到身边会有类似的抱怨: 我靠,为啥你们的包带了一大堆乱七八糟的依赖,把我的classpath都给污染的不像个样子了。我靠,你们这个包依赖的xx包的版本跟我们自己依赖的xx包的版本不一样啊,会不会出锅?我靠,我这个代码编译的时候没问题啊,为啥一用你们的组件就报一堆的NoSuchMethodError啊。有时候自己写代码的时候也会遇到一些容易被忽略的问题: 哎,我看人家引这个包的时候都会exclude一些依赖,我要不要也学着excl…

    Java阅读全文

  4. Java运行期的版本控制方案

    前言前两天我们组负责的一个组件发生了一个与jar包版本号有关的线上bug,最近没啥事情,就顺便分析了一下。 其实是个非常无脑的小bug:commons-lang3包中有一堆@since 3.5的新增方法,我们的组件依赖了3.5版本以上的一个包;业务方依赖了我们的这个组件,同时也直接依赖了一个3.5版本以下的包。在gradle打包的时候,由于老版本的是直接依赖,新版本的是间接依赖,直接依赖优先级高于间接依赖,因此最终采用的是老版本的包。这就导致在运行期调用新方法的时候会报NoSuchMethod的…

    Java阅读全文

  5. 工作中遇到的一些坑(2)

    前言这个礼拜似乎是写了一礼拜的业务代码,没遇到什么太恶心的坑,就是理解业务逻辑费了点功夫。下个礼拜似乎又要开始撸组件撸网页了,现在想想感觉还是写写业务比较舒服,没事可以怼怼产品,给前端找找bug,写完还可以慢慢测;撸组件就比较无聊了,容易出大锅,而且还得求着人家用,用出问题还会被怼。。。不过好处大概就是以后跳槽面试的时候不容易被问死吧。。。 知识&技巧常用@see和@link注释写代码的时候经常会遇到一些需要枚举的类型,比如“活动类型”、“数据来源”这类的。但是一般来讲我们不会直接用en…

    Java阅读全文

  6. 工作中遇到的一些坑(1)

    前言好快啊,又是一周的轮回,本来打算把本周遇到的问题展开一个一个总结的,但是奈何踩的坑是在有点多,展开来根本没时间搞,索性就搞了这个类似周报的东西。希望从这一周开始,每一周都能坚持下来喽。 由于跟给老大看的周报不同,这个是给俺自己看的,所以成果啥的就不表了,主要表一表自己写的bug跟领悟。就记一些大实话吧,"写者有罪,闻者足戒"。 知识&技巧while循环的控制逻辑写在循环体内这句话是同事跟我讲的,领会了下他的意思,大概是,下面的写法二要比写法一好: //Method1…

    Java阅读全文

  7. 从一个诡异的问题看JVM动态反优化

    前言前一段时间在做代码性能比较的时候用到了jmh这个工具,原本以为拥有了这个方便的工具就能hold住java微基准测试这个命题。但是事实上,用着用着就发现自己的理解还非常不深入,有很多在测试的时候难以解释的现象。于是查阅了相关资料,才发现这里面的水比我想象要深,趁着记忆还热乎,赶紧记录一下。 动态编译VS静态编译java作为一种动态编译语言与c/c++这种静态编译语言有本质的不同。静态编译语言是在编译时就已经对代码做好了编译优化(比如C/C++在编译时指定-O1 -O2 -O3参数),得到的程序…

    Java, Benchmark, JMH阅读全文

  8. 字节数组转字符串技巧以及其JMH性能分析

    前言前几天在面向 stackoverflow 编程时,遇到了一串有点诡异的代码: private String method1(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (byte aByte : bytes) { sb.append(Integer.toString((aByte & 0xff) + 0x100, 16).substring(1)…

    Java, Benchmark, JMH阅读全文

  9. Java中日期处理的一些坑

    前言记录下最近在用java处理日期格式的时候遇到的一些坑,虽然是挺简单的一些点,但是如果不了解清楚在使用的时候还是会走很多弯路的。 相关类Java8 之后,涉及日期处理的类基本都分到了 java.time 包下,非常清楚,功能也做了强化。而在这之前,如果我们要处理日期,就只能组合的使用 java.util 以及 java.text 这两个包,感觉十分凌乱。当然,以后我们就不用再纠结这些了,直接用 java.time 包就行了。这个包下有众多类,不过一般在做日期转换的时候主要关注下面这几个: Lo…

    Java阅读全文

  10. SLF4J框架理解与分析

    前言这两天在看设计模式相关的书,正好看到了门面模式,感觉不太能领悟它的精髓,就想找一些例子来看,突然发现这个slf4j框架不就是一个门面(facade /fəˈsɑ:d/)么,干脆就直接拿来看一看了,正好也把java的日志系统也了解了解。 日志系统不谈那些比较复杂的分布式日志系统,这里主要讨论的是单机常用的那些日志框架。现在在Java生态中存在的日志框架也是挺多的了,初来乍到看起来有点懵,其实所谓的日志框架主要分两种: 一种是日志框架门面(facade),用来统一一个共同的接口,方便我们用相同的…

    Java, SLF4J阅读全文