WordCounter

题目:给出一个含有英文小说的文本文件,统计英文单词出现的频率并按照逆序打印。

完整实现如下:

Performance difference for splitting strings

《Java程序性能优化》的3.1.3小节阐述了字符串分割的三种方法,并且用程序示例和图形说明了三种方法的性能差异。这三种方法分别是:split方法;使用StringTokenizer类;使用最原始的indexOf和substring方法。这三种方法的性能是依次增强的。但首先一个问题是:使用最后一种方法(本来应该是效率最高的)的例子试验时发现,这种方法却是最慢的,这是为什么呢?

subString() no memory leak any more

《Java程序性能优化》第三章Java程序优化首先讲的是字符串的特性及其相应的优化方法。3.1.2小节subString()方法的内存泄漏深入JDK的subString方法实现,并指出了大字符串对象可能存在的内存泄漏。我尝试把书中的程序段输入并运行,但结果并没有产生内存泄漏,原来情况有变。

IoC/DI summary

下面的笔记根据Java私塾Spring公开视频教程整理并简化(你没看错,已经简化过了,^_^)。

IoC/DI的基本思想

  • 把程序之间的依赖关系去掉
  • 把程序对象设置到IoC/DI容器的配置中,作为Bean
  • 由IoC/DI容器(下面简称容器)来管理Bean的创建、实例化
  • 由容器把Bean之间的关系注入到需要这些关系的对象里面

SOAP vs. REST

译文,译自《软件构架实践(第3版 影印版)》。UPDATED: 2014-11-17

如果想让基于Web的应用进行互操作,目前有两种现成的技术可以选择:(1)WS*和SOAP(曾经代表“简单对象访问协议”,但这个缩写现在已经不再适用了)以及(2)REST(代表“表述性状态转移”,有时也写做ReST)。我们怎么看待这两种技术?每种技术都擅长什么?在使用的过程中有什么需要注意的地方?比较这两种技术似乎有点风马牛不相及,但我还是尝试着勾勒一下概貌。

synchronized and ReentrantLock

ReentrantLock在加锁和内存上提供的语义与内置锁相同,此外它还提供了一些其他功能,包括定时的锁等待、可中断的锁等待、公平性,以及实现非块结构的加锁。ReentrantLock在性能上似乎优于内置锁,其中在Java 6中略有胜出,而在Java 5.0中则是远远胜出。那么为什么不放弃synchronized,并在所有新的并发代码中都使用ReentrantLock?事实上有些作者已经建议这么做,将synchronized作为一种“遗留”的结构,但这会将好事情变坏。

lock() and lockInterruptibly()

在Lock接口中有两个方法,一个是lock方法,一个是lockInterruptibly方法,它们之间具体有什么区别呢?

lock()是拿不到lock就不罢休,不然线程就一直block。lockInterruptibly会优先响应线程中断,处理响应的方式是抛出InterruptedException。

可以参考一下 http://huangyunbin.iteye.com/blog/2013543 ,我也大概看了一下lock和lockInterruptibly的相关源码,但是感觉原博说的有点不太对,不过因为现在没有太多时间深究,可以现从应用的角度来理解即可。原博中举的例子不错,这里就不重复引用了。