摘要: 程序中解释:异步调用是通过使用单独的线程执行的。原始线程启动异步调用,异步调用使用另一个线程执行请求,而与此同时原始的线程继续处理。同步调用则在继续之前必须等待响应或返回值。如果不允许调用继续即无响应或返回值,就说调用被阻塞了,不能继续执行形象解释:打电话时就是同步,发短信时就是异步。同步.一条马路,只能开一辆车,等这个车开走了,才能开另一辆.异步.一条马路,随便开多少车.同步,主机A发送数据的时候,主机B必须等待接收,处于阻塞状态,这就好比别人给你打电话,你必须当场听话,否则则【错失良机】异步主机A发送数据的时候,主机B无须等待接收,主机B要获得数据就从缓存里取,就好比别人给你发邮件一样同步 阅读全文
posted @ 2013-08-08 16:12 成风魄郎 阅读(432) 评论(0) 推荐(0) 编辑
摘要: 引言毋庸置疑,程序员要对自己编写的代码负责,您不仅要保证它能通过编译,正常地运行,而且要满足需求和设计预期的效果。单元测试正是验证代码行为是否满足预期的有效手段之一。但不可否认,做测试是件很枯燥无趣的事情,而一遍又一遍的测试则更是让人生畏的工作。幸运的是,单元测试工具 JUnit 使这一切变得简单艺术起来。JUnit 是 Java 社区中知名度最高的单元测试工具。它诞生于 1997 年,由 Erich Gamma 和 Kent Beck 共同开发完成。其中 Erich Gamma 是经典著作《设计模式:可复用面向对象软件的基础》一书的作者之一,并在 Eclipse 中有很大的贡献;Kent B 阅读全文
posted @ 2013-08-06 21:02 成风魄郎 阅读(324) 评论(0) 推荐(0) 编辑
摘要: 1.Java 序列化允许随着时间的推移而改变类型。http://www.ibm.com/developerworks/cn/java/j-5things1/大约一年前,一个负责管理应用程序所有用户设置的开发人员,决定将用户设置存储在一个Hashtable中,然后将这个Hashtable序列化到磁盘,以便持久化。当用户更改设置时,便重新将Hashtable写到磁盘。这是一个优雅的、开放式的设置系统,但是,当团队决定从Hashtable迁移到 Java Collections 库中的HashMap时,这个系统便面临崩溃。Hashtable和HashMap在磁盘上的格式是不相同、不兼容的。除非对每个 阅读全文
posted @ 2013-08-06 19:01 成风魄郎 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 1.ThreadLocal并不是一个Thread,而是Thread的局部变量.2.当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。3.ThreadLocal是如何做到为每一个线程维护变量的副本的呢?其实实现的思路很简单:在ThreadLocal类中有一个Map,用于存储每一个线程的变量副本,Map中元素的键为线程对象,而值对应线程的变量副本。代码清单1SimpleThreadLocalpublicclassSimpleThreadLocal{privateMapva 阅读全文
posted @ 2013-08-05 16:26 成风魄郎 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 1.private是访问权限限定,static表示不要实例化就可以使用。 (1)被static修饰的变量,叫静态变量或类变量,没有被static修饰的变量,叫实例变量。对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。 对于实例变量,每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。(2)静态方法可以直接通过类名调用,任何的实例也都可以调用。静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实 阅读全文
posted @ 2013-08-05 10:01 成风魄郎 阅读(251) 评论(0) 推荐(0) 编辑
摘要: 1.http://www.ibm.com/developerworks/cn/opensource/os-cn-heritrix/index.html?ca=drs-#major22.http://sourceforge.net/projects/htmlparser/files/latest/download?source=files3.Erich Gamma 是经典著作《设计模式:可复用面向对象软件的基础》一书的作者之一4.智能社(javascript教学)5.妙味课堂6.懒人图库7.源代码下载|站长下载 阅读全文
posted @ 2013-08-03 17:25 成风魄郎 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 本教程,结合本人亲身实践,不仅适合于最新版本Heritrix 1.14.4,更适合其他任何版本。Heritrix具体下载地址如下:http://sourceforge.net/projects/archive-crawler/files/archive-crawler%20%28heritrix%201.x%29/ 本实例所用的为Heritrix1.14.4的源代码版本,即你只需下载一个文件即可:heritrix-1.14.4-src.zip。 之所以采用源代码版本,是因为本实例中,需要对Heritrix 进行一些扩展,以适应本实例的需求。网上教程多是下载两个文件heritrix-1.14.. 阅读全文
posted @ 2013-08-03 17:19 成风魄郎 阅读(412) 评论(0) 推荐(0) 编辑
摘要: 1. 【ALT+/】 此快捷键为用户编辑的好帮手,能为用户提供内容的辅助,不要为记不全方法和属性名称犯愁,当记不全类、方法和属性的名字时,多体验一下【ALT+/】快捷键带来的好处吧。 2. 【Ctrl+O】 显示类中方法和属性的大纲,能快速定位类的方法和属性,在查找Bug时非常有用。 3. 【Ctrl+/】 快速添加注释,能为光标所在行或所选定行快速添加注释或取消注释,在调试的时候可能总会需要注释一些东西或取消注释,现在好了,不需要每行进行重复的注释。 4. 【Ctrl+D】 删除当前行,这也是笔者的最爱之一,不用为删除一行而按那么多次的删除键。 5. ... 阅读全文
posted @ 2013-08-03 14:48 成风魄郎 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 位运算符 与(&)、非(~)、或(|)、异或(^)&:当两边操作数的位同时为1时,结果为1,否则为0。如1100&1010=1000| :当两边操作数的位有一边为1时,结果为1,否则为0。如1100|1010=1110~:0变1,1变0^:两边的位不同时,结果为1,否则为0.如1100^1010=0110逻辑运算符与(&&)、非(!)、或(||) 阅读全文
posted @ 2013-08-02 16:08 成风魄郎 阅读(256) 评论(0) 推荐(0) 编辑
摘要: Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于某个集合时,有可能会把不属于这个集合的元素误认为属于这个集合(false positive)。因此,Bloom Filter不适合那些“零错误”的应用场合。而在能容忍低错误率的应用场合下,Bloom Filter通过极少的错误换取了存储空间的极大节省。集合表示和元素查询下面我们具体来看Bloom Filter是如何用位数组表示集合的。初始状态时,Bloom Filter是一个包含m位的位数组,每一位 阅读全文
posted @ 2013-08-02 14:57 成风魄郎 阅读(189) 评论(0) 推荐(0) 编辑