摘要:在Effective Java中看到的,试了一下,有点意思,考查的知识点是volatile关键字。 下面这段代码,预期是打印it takes xxxx miliseconds. 。但实际上,陷入了死循环。 学习过Java内存模型就会知道,这是因为stopRequested这个域,在主线程和backg 阅读全文
posted @ 2016-11-19 23:45 kingsleylam 阅读(397) 评论(0) 推荐(0) 编辑
摘要:1.什么是延迟初始化 延迟初始化(lazy initialization,即懒加载)是延迟到需要域的值时才将它初始化的行为。如果永远不需要这个值,这个域就永远不会被初始化。这种方法既静态域,也适用于实例域。 最好建议“除非绝对必要,否则就不要这么做”。 2.延迟初始化线程安全的一个策略:同步 延迟初 阅读全文
posted @ 2016-11-19 23:01 kingsleylam 阅读(1113) 评论(0) 推荐(1) 编辑
摘要:1. 什么时候需要重写Object.equals方法 如果类具有自己特有的“逻辑相等”概念(不同于对象等同的概念),而且超类还没有覆盖equals以实现期望的行为,这时我们就需要覆盖equals方法。 这通常属于“值类(value class)”的情形。值类仅仅是一个表示值的类,例如Integer或 阅读全文
posted @ 2016-11-16 22:29 kingsleylam 阅读(1154) 评论(0) 推荐(0) 编辑
摘要:1. Java内存模型(Java Memory Model, JMM) Java的内存模型如下,所有变量都存储在主内存中,每个线程都有自己的工作内存。 共享变量:如果一个变量在多个线程中都使用到了,那么这个变量就是这几个线程的共享变量。 可见性:一个线程对共享变量的修改,能够及时地到主内存并且让其他 阅读全文
posted @ 2016-10-30 23:34 kingsleylam 阅读(2454) 评论(0) 推荐(1) 编辑
摘要:建造者模式和工厂模式有点类似。所以建议复习一下工厂模式的文章 工厂模式小结 1. 适用场景 建造者模式,跟工厂模式一样,对客户端屏蔽了产品实现的细节,对外只呈现一个最终的产品。 与工厂模式不太一样的是: 1). 该产品相对于工厂模式的产品更为复杂,通常是由好几个模块组装而成; 2). 模块的生成顺序 阅读全文
posted @ 2016-10-30 08:59 kingsleylam 阅读(255) 评论(0) 推荐(0) 编辑
摘要:最近做CodeReview,发现了一位已经离职同事写的代码,大致如下,令人费解。(其中map是Map<String, Object>) 先不说这样写好不好,引起我兴趣的是,map这个变量,已经在上文判断是否为空指针了,map.get("count")也不会抛出空指针异常。为什么这里还要判断? 经过一 阅读全文
posted @ 2016-10-29 08:17 kingsleylam 阅读(1225) 评论(0) 推荐(0) 编辑
摘要:工厂模式是23种设计模式中比较基础的一种,其目的是隐藏了创建对象的细节,客户端与具体的实现类解耦,令客户端能够面向接口编程。 从简单到复杂的场景,一共有三种模式。下面拿最常见的球衣作为例子讲解一下,如有不正确的地方请指正,图片和部分语言摘自网络,侵删。 假设现在有一个球衣的抽象类,有两个实现类,一个 阅读全文
posted @ 2016-07-01 00:33 kingsleylam 阅读(650) 评论(0) 推荐(1) 编辑
摘要:1. synchronized同步方法 1) synchronized修饰方法,表示方法是同步的,当某线程进入并拿到当前整个对象的锁时 a. 其他synchronized方法排队等锁 b. 非synchronized方法可异步执行 示例代码(折叠) 1 package com.khlin.threa 阅读全文
posted @ 2016-06-09 16:34 kingsleylam 阅读(224) 评论(0) 推荐(0) 编辑
摘要:标题起得略拗口,大概意思就是说在一个Java类中,域和构造方法的调用顺序。 1. 没有继承的情况 单独一个类的场景下,初始化顺序为依次为 静态数据,继承的基类的构造函数,成员变量,被调用的构造函数。 其中静态数据只会初始化一次。 输出: 2. 继承的情况 稍微修改一下代码,添加两个基类,让Son继承 阅读全文
posted @ 2016-05-27 22:27 kingsleylam 阅读(12740) 评论(0) 推荐(0) 编辑
摘要:1. 动态绑定 将一个方法调用同一个方法主体关联起来被称作绑定。 在运行时根据对象的类型进行绑定,叫做后期绑定或运行时绑定。Java中除了static方法和final 例如,下面定义了一个Shape类型的变量,这是个Shape引用,由于后期绑定,赋予其子类Circle的一个对象引用,最终调用的是Ci 阅读全文
posted @ 2016-05-27 20:08 kingsleylam 阅读(230) 评论(0) 推荐(0) 编辑
摘要:使用Jackson的ObjectMapper对象的readValue和writeValueAsString方法可以进行转换。 对于简单基本类型或String类型的对象,使用上述方法可以满足。 但是如果要转换复杂类型Collection如 List<YourBean>,那么就需要先反序列化复杂类型为泛 阅读全文
posted @ 2016-04-30 12:58 kingsleylam 阅读(309) 评论(0) 推荐(0) 编辑
摘要:1. Workbook维护一个调色板,可以自定义设置56种颜色,下标从8到63. 用到颜色的地方,可以输入下标获取颜色,如CellStyle的setFillForegroundColor(); 2.CreateCellStyle 创建之后,会把CellStyle放入到workbook维护的队列中,最 阅读全文
posted @ 2016-04-06 22:06 kingsleylam 阅读(2276) 评论(0) 推荐(0) 编辑
摘要:最近在工作中遇到这么一个场景:需要根据配置文件,动态地生成一个Excel模板。模板有首页,内容页,链接页等几个页签。 工头,哦不,老大指导可以使用装饰器模式,于是我就学习了一下,就有这篇文章。 初涉设计模式,请大牛们鞭挞。 1. 什么是装饰器模式 装饰模式能够实现动态的为对象添加功能,是从一个对象外 阅读全文
posted @ 2016-03-26 23:46 kingsleylam 阅读(2711) 评论(0) 推荐(1) 编辑
摘要:1. 何为Mock项目中各个模块,各个类之间会有互相依赖的关系,在单元测试中,我们只关心被测试的单元,对于其依赖的单元并不关心(会有另外针对该单元的测试)。比如,逻辑层A类依赖了数据访问层B类的取数方法,然后进行逻辑处理。在对A的单元测试中,我们关注的是在B返回不同的查询结果的时候,A是怎么处理的,... 阅读全文
posted @ 2016-01-09 18:35 kingsleylam 阅读(9284) 评论(3) 推荐(1) 编辑
摘要:1. JUnit4基础JUnit4 与 JUnit3不同的是,不需要继承测试类,而是通过JDK5提供的注解去标识测试方法。常用的注解如下:@Before:初始化方法 对于每一个测试方法都要执行一次(注意与BeforeClass区别,后者是对于所有方法执行一次)@After:释放资源 对于每一个测试方... 阅读全文
posted @ 2016-01-07 21:00 kingsleylam 阅读(217) 评论(0) 推荐(0) 编辑
摘要:本日志主要是介绍下面的配置1. 将内部构件部署到私服在工程的pom文件中添加下面配置 myrelease my release repo http://localhost:8081/nexus/content/repositories/releases/... 阅读全文
posted @ 2016-01-02 14:23 kingsleylam 阅读(551) 评论(0) 推荐(0) 编辑
摘要:1.仓库布局任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一存储路径,这就是Maven的仓库布局方式路径与坐标的对应关系为:groupId/artifactId/version/artifactId-version-classifier.packaging。其中groupId是以句... 阅读全文
posted @ 2016-01-02 13:53 kingsleylam 阅读(196) 评论(0) 推荐(0) 编辑
摘要:1. 坐标Maven坐标为各种构件引入了秩序,任何一个构件都有必须明确定义自己的坐标,而一组Maven坐标是通过一些元素定义的,它们是groupId, artifactId, version, packaging, classifier。下面简单介绍一下这几个标签1) groupId定义当前Mave... 阅读全文
posted @ 2015-12-20 00:56 kingsleylam 阅读(422) 评论(0) 推荐(0) 编辑
摘要:这个问题在半年前,花了我两天的时间才解决,现在刚好想起来,顺便记录一下以防忘了。通过jdbc,预编译的sql,无法查询到固定长度的字段。用例子说话:创建一个表,只有一个字段,长度为固定的char类型。并插入一条数据。create table tblchar( name char(20) );在Ja... 阅读全文
posted @ 2015-12-15 00:26 kingsleylam 阅读(891) 评论(0) 推荐(0) 编辑
摘要:今天发现了一个问题,一个长度设置为2000字节的字段,插入一条长度为1000的汉字数据,竟然报错了。一个汉字占两个字节,按理说刚好是2000个字节。但通过查看日志,发现插入数据的长度为3000字节。百度了一下,原来是不同的字符集造成的。一般情况下,数据库的NLS_CHARACTERSET 为AL32... 阅读全文
posted @ 2015-12-14 23:37 kingsleylam 阅读(4555) 评论(0) 推荐(1) 编辑