• 由OGNL的隐式类型转换引发的一个bug

    前言 弱类型语言的隐式类型转换是其立足之本,也是让程序员最头疼的特性,如果对其内部的类型转换规则不熟悉的情况下,往往导致线上出现始料不及的bug,比如众所周知的JavaScript中的“==”和“===”,最近在写Mybatis的dynamic SQL也遇到了这样的问题。
  • java.lang.AbstractMethodError【一】——浅析JVM7和JVM8关于invokeinterface的区别

    前言 这篇文章很早就打算写了,但是因为之前没有保存导致写了一半的文章丢失,后来在内部做技术分享的时候才想起来这件事,于是时隔几个月之后又重新整理了一下,分成了两篇文章,这篇文章主要想聊一下invokeinterface在JVM7和JVM8中的小区别,下一篇重点关注invokeinterface和invokevirtual的区别,由于个人技术水平有限,有些地方也不甚了解,只能将问题抛出,希望以后能有机会找到答案。
  • [WIP] 随手记

    1. MySQL5.6的两种复制方式对比,这里只记录一些常见的,详细的请查阅原文
  • 记一次搭建基于H2内存数据库的集成测试踩到的transaction的坑

    前言 最近在项目里搭建了一套DAO层的测试框架(也可以说是集成测试框架),数据库使用的H2,数据连接池与线上一样使用的Druid,为了保证test case之间彼此状态独立,需要保证transaction在test method后被rollback而不是commit,听起来很简单,但是过程还是遇到了一些H2的DataSource和Druid的DataSource的实现上的坑。
  • java.lang.AbstractMethodError【二】——浅析JVM中invokevirtual与invokeinterface的区别

    前言 上一篇文章提到了问题的起因,以及简单的介绍了invokeinterface,这篇文章着重于invokevirtual与invokeinterface的区别,同样,由于个人技术水平有限,有些问题暂时没有找到答案,仅在此将其列出。
  • 线上问题实战:NoSuchPropertyException——null到底有多坑

    问题起因: 收到线上告警,日志提示某条mapper中配置的SQL遇到org.apache.ibatis.ognl.NoSuchPropertyException
  • 浅析Spring injection支持的几种annotation的实现

    前言 Spring中支持三种注入方式,分别是构造器注入,属性注入,方法注入,这三者之间的优缺点本文不做阐述,有兴趣的可以参考这两篇文章,我觉得写的不错,Setter injection vs constructor injection ,浅谈spring为什么推荐使用构造器注入。 其中,构造器注入发生在createBeanInstance期间,而属性注入和方法注入则发生在populateBean期间,整个getBean的时序图大致如下:
  • JVM中对象的内存分布

    JVM中对象的由object header+object instance+padding组成,而object header又由mark word以及klass pointer组成,其中klass pointer和padding是非必需的,后面将会由详细的解释。
  • 几种分页方式在不同使用场景下的优劣势

    分页的主要使用场景大致分为两种,一种是topN查询,这种在实时响应系统中比较常见,另一种是全量查询,在批处理系统中比较常见。
  • 写在2016年初

    2015年很快就过去了。