Effective Java
文章平均质量分 71
hittyt
这个作者很懒,什么都没留下…
展开
-
LinkedHashMap
今天有个需求,要求把某个公司和这个公司的有序产品放到map中存储,同时放入这个map中的公司时有顺序要求的——什么顺序放进去,什么顺序拿出来!用普通的HashMap解决这个需求就不合适了。jdk提供的集合框架中的LinkedHashMap比较适合这个需求。那么他又是怎么实现这个功能的呢?一起来看看源码吧。LinkedHashMap的接口定义如下: public class ...原创 2011-06-03 17:23:14 · 82 阅读 · 0 评论 -
Hessian和Java反序列化问题小结
Hessian反序列化问题众所周知,Hessian框架提供的序列化方式,在性能上要优于Java自己的序列化方式。他将对象序列化,生成的字节数组的数量要相对于Java自带的序列化方式要更简洁。目前公司的一个项目中,有RPC调用的需要,这里我们使用了公司自己的开源RPC框架Dubbo作为远程调用框架,进行业务方法的调用和对象的序列化。这里,我们没有对Dubbo做出特殊配置,Dubbo在Remo...原创 2012-10-05 22:56:36 · 1373 阅读 · 0 评论 -
Java多线程常用工具小结
Java多线程问题常用的几种场景(不是全部)通常需要包括如下几个方面: 共享资源的互斥访问(比如:资源初始化过程)。有限资源的访问控制(比如:数据库连接池会限制只有有限个线程可以同时保持链接)。多线程之间访问的通讯配合(比如:典型的生产-消费模式场景)构建线程池Callable & Future读过写少的并发控制(比如:资源初始化过程)。针对这些比较典型...原创 2012-08-15 18:47:45 · 241 阅读 · 0 评论 -
Java GC log的解读
Java的GC log中,往往有很多名称啊、数字啊,第一次看到时候,总会有点晕头转向的感觉。今天又Google了一圈,找到两篇比较靠谱的网页记录一下:HotSpot在PrintHeapAtGC输出的内容的格式Java Garbage Collection Log messages引用一下stackoverflow上的那个例子8109.128: [GC [PS...原创 2012-11-12 14:12:47 · 354 阅读 · 0 评论 -
Java范型真的被擦除了吗?
学习范型的第一课就被警告说,范型信息再编译之后是拿不到的,因为已经被擦除掉了。如果不深入研究,这个观点很容易给人以这样的错觉:只要代码里面用了范型的地方,编译之后,是没法拿到这部分信息的! 关于这点的错误之处,可以参考撒伽的这篇文章。 按他的解释是说:位于声明一侧的,源码里写了什么到运行时就能看到什么; 位于使用一侧的,源码里写什么到运行时都没了。这里,最根本的原因,还是因为jdk...原创 2012-11-07 11:24:44 · 183 阅读 · 0 评论 -
Java内部类的可见性问题
关于Java的内部类的可见性问题,平时并未太注意。不过使用时,其实还是应该明确一点:就是关于内部类和他的外部类的可见性问题:private这种修饰符并不能阻止外部类直接访问到内部类中的private属性;反之亦然。这里直接看代码会更清楚一些: public class VisibilityTest { private String outerName; pu...原创 2012-10-30 11:44:36 · 1606 阅读 · 0 评论 -
Java语言为什么不支持多重继承
Common Sense学习Java语言的一开始,就被任何一本教科书告知,Java语言是不支持多重继承的。但是可以利用接口完成多重实现。于是这个“事实”就作为一条常识,神一样的存在了。Why can not?当被问及这条神律为啥在Java语言中存在时,很多人就说不清楚了。老外的这篇文章说了大家比较公认的一个问题:“钻石问题”。这里,具体的细节请参考上面原文,下面把原文中的一个关键性说明...原创 2012-10-30 11:30:27 · 780 阅读 · 1 评论 -
Spring中关于classpath:和classpath*:前缀的一个小问题
在写Java代码时,有很多场景需要用到从classpath中加载资源。使用Spring时,定义了比较方便的前缀风格告诉程序从哪里加载。比较常用的有classpath:和classpath*:两种前缀,用于指定从classpath中加载资源。但两者有些细微差别。 以加载Spring的配置文件为例,以下的写法大家应该比较熟悉: ClassPathXmlApplicatio...原创 2012-06-29 13:44:11 · 717 阅读 · 0 评论 -
AtomicInteger的并发处理
JDK1.5之后的java.util.concurrent.atomic包里,多了一批原子处理类。主要用于在高并发环境下的高效程序处理。网上关于这个原理介绍的比较靠谱的一片文章是出自IBM工程师的一篇:流行的原子 值得一看。这里,我们来看看AtomicInteger是如何使用非阻塞算法来实现并发控制的。AtomicInteger的关键域只有一下3个: ...2011-07-22 20:15:45 · 587 阅读 · 0 评论 -
如何优雅的去做DAL层的UT
引子UT的重要性不言而喻,这里不用多说。但是,码农都知道,一段逻辑往往涉及到很多外部系统调用(不同的数据源、不同的服务等等),配合完成一段code真正想要完成的逻辑。 而UT(Unit Test)本身的重要思想之一,就是测试本单元的核心逻辑。我测试A,你却因为A依赖B,而导致测试的code跑不了,这个不科学。 于是,有了各种各样的mock技术,来模拟B的行为,按照你的需要,返回你期望的数据...2014-09-26 19:55:37 · 444 阅读 · 0 评论