Java
DancingCalf
18年开发经验。
精通Java领域。深入了解JVM。
精通 Spring Cloud 生态。
展开
-
最合理的异常代码格式
这段时间读 《Core Java 2》,读到“异常处理”的章节。书中有以下这样的“强烈建议”的异常写法,我深为认同。try {Object mustCloseObj = new MustCloseObj();try{//do things}finally{mustCloseObj.close(); }} catch (Exception e) {// handle exception here}原创 2008-10-22 11:19:00 · 924 阅读 · 0 评论 -
String.format在多线程下不可用
经过我认真验证,证实在多线程模式下 String.format有严重问题,原因未完全明确,我猜想有2可能:1、使用StringBuilder来实现,该类非线程安全2、可能使用了全局数据区,但没加锁定该数据区就读写 private static class MyReader extends Thread { @Override public synchronized void run() {原创 2008-10-22 11:16:00 · 2786 阅读 · 0 评论 -
Integer 包装类句柄的隐形变化
Integer i = new Integer(8);Integer i2 = i;System.out.println(i==i2); //truei2++;System.out.println(i==i2); //false可见执行完 ++操作()后i2的句柄已经改变。如果你的代码依赖于i2的句柄,那就麻烦了。我就很不幸做过这个事,private static Integer g_i = n原创 2008-10-22 11:20:00 · 720 阅读 · 0 评论 -
深入探讨Java枚举的实现
/* * 测试学习后我认识到以下几点: * 1、枚举基类Enum定义为 Enum> 只是为了对getDeclaringClass的返回值Class做支持,否则定义为Enum更简单明了。 * 呵呵,要不是认识学习了泛型定义,还真被这个定义吓到。 * 2、编译器对枚举类处理也很简单,就是把枚举体内每个枚举值定义为static的枚举具体类的实例 */public class StudyEnum {原创 2008-10-23 22:08:00 · 943 阅读 · 0 评论 -
readObject writeObject为什么这么暧昧
大家都知道,定制自己的类的Serialization行为的方式是自己的类实现2个过程readObject和writeObject。我想不明白的是,为什么这个地方框架设计者没有设计成一个接口,接口里包含这两个重要的过程。相反,设计者用了最令人疑惑的方式,在类里加入这2个Private的过程,然后框架用Reflection来调用这2个过程。原创 2008-10-23 08:18:00 · 933 阅读 · 0 评论 -
lucene评分-相似度算法的优化
lucene评分里使用的默认相似度算法是BM25,官方文档对BM25的参数(k1,b)调节有专门的介绍。但是在短文本的场景下,就算是调节k1(一般调到0.3),也不能避免经常出现错误的评分排序。研读lucene源码,在 BM25Similarity 这个类里,计算tfNorm的时候,公式是 (freq * (k1 + 1)) / (freq + k1 * (1 - b + b * field...原创 2019-04-25 08:59:25 · 1145 阅读 · 0 评论