Lucene 中提供了 SmartCN 为中文提供分词功能,实际应用中还会涉及到停用词、扩展词(特殊词、专业词)等,因此本文将聚焦在 SmartCN 而暂时不考虑其他中文分词...
在前面的文章中,我们介绍了 H2 的一些特性以及 为什么H2 适合应用在测试环境中。H2 不但可以作为嵌入式数据库、内存数据库使用。在适当的场景下可以选择使用 H2 替换掉 ...
上面篇文章中介绍了 H2 的一些特性。H2 因其提供了内存数据库的模式,经常应用在测试当中,快速验证某些SQL 操作的结果。本文将 H2 应用于测试中的原因,并使用一个简单的...
H2 是一个使用 Java 编写的数据库,支持内存、文件等多种模式,经常用于项目的测试环境。除此之外,通过 H2 的官网了解到,H2 还提供了丰富的特性。 1 关于 H2 的...
前两篇文章 《识别代码中的坏味道(一)》 和 《识别代码中的坏味道(二)》 中已经介绍了 18 个代码坏味道。《重构》中还涉及到另外 4 个代码坏味道,本文将将详细介绍剩余的...
在上一篇文章中,介绍了通过名字就能理解的 8 个坏味道,感兴趣可以查看识别代码中的坏味道(一)。本篇文章将识别代码中的另外 10 个代码坏味道:10个晦涩但是通过简单的即可识...
在前面的文章中,我们介绍了 《提升编程效率:重构》 以及 《何时开始重构?》。了解了那些能够更好的辅助团队或者个人进行重构,但是要让重构真正产生作用是需要能够代码中的坏味道,...
“任何时候都可以重构”,如果这样回答太过于宽泛,因为总有那么一些时候重构的 ROI (投入产出比)并不高,设置与对重构还不那么熟悉的开发者相当于什么都没有说。 所以整理了下日...
提升编程效率的大致可以分三类:任务拆解(Tasking To Action)、使用高效的开发工具/框架、关注高效的工程实践。 其中任务拆解,我们在【实战TDD(2):Task...
01 技术债是什么? 白话的解释就是技术上的债务。 比如: (1)功能已经实现,但是需要手动做很多配置的事情,不可复用; (2)某个功能为热点功能业务上更重要,因此单位时间内...
ArrayList 是日常开发经常使用到的容器类。它能够方便的进行数据的查询、替换。但是因为其低层实现的原因在数据容量、性能、线程安全上都存在问题,主要涉及到下面的内容: (...
01 CompletionService 简介 在上一篇内容中,介绍了 Future 的使用,其中也涉及到了 Future 的不足,就是当通过 get() 方法获取线程的返回...
Pair (结对)已经不是什么新鲜的事情。工作中我们进行 Pair。但是也会经常发现一个问题:“两个人单纯的坐在一起工作或者被领导命令坐到一起工作,并没有什么工作效率提升的“...
01 线程池的应用场景 (1)应用 比如现在收集上的修图软件。一张 1920 x1080 的图片有 200多万个像素点,对整个图片的每个像素点处理一遍也是需要不少的计算量。 ...
01 Phaser Phaser 与 CountDownLatch、CyclicBarrier 做的事情类似,只是Phaser 提供了更加丰富的API,左右处理同样一个场景时...
01 CyclicBarrier CyclicBarrier 提供了如下功能: (1)向上增加计数的功能 (2)阻塞等待功能 (3)阶段性同步功能(线程数大于 parties...
01 CountDownLatch CountDownLatch 通过 count 计数实现屏障设定(阻塞),当满足设定的条件后一个或者多个线程时候一起执行。这里的屏障指的就...
01 Exchanger 作用 使两个线程之间进行数据传递。(对是两个之间而不是三个或者更多个线程之间) 02 常用方法 exchange() 阻塞当前线程并等待其他线程来...