`
文章列表
 一、Java内部类的分类   Java内部类一般包括四种:成员内部类、局部内部类、匿名内部类和静态内部类 大多数业务需求,不使用内部类都可以解决,那为什么Java还要设计内部类呢。   二、内部类的使用场景   1、几个类的逻辑关系很强,同时想对外隐藏这些类; 2、线程类中; 3、类中要实现多继承;   三、内部类收益   Java不支持多继承,内部类可以完善Java的多继承机制。  
使用kafka(0.8.2.1)高级API消费消息时,有时会因各种原因,导致消息堆积。如果请求offset对应消息已过期,则会抛出下面异常: Current offset 789380 for partition [test,3] out of range; reset offset to 799380" 抛出该异常的同时,会把该topic和分区下次请求的offset重置为一个新的值,此时就发生了消息丢失。 那么,如果减少数据丢失呢? 注意异常后重置offset的值。先看处理offset超出有效范围的代码。 // handle a partition whose offse ...
使用install命令安装 pip install elasticsearch 指定安装版本 pip install elasticsearch==5.0.1
一个线程安全的缓存类简单实现: import java.util.HashMap; import java.util.Map; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; public class Cache { private Map<String, Object> cacheData = new HashMap<String, Object>(); private ReadW ...
堆是具有下列性质的完全二叉树:每个结点的值都大于或等于其左右孩子的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。 堆排序的平均时间复杂度为O(nlogn),空间复杂度为O(1) public void heapSort(int[] datas) { int length = datas.length; for(int i = length / 2; i >= 0; i--) { buildHeap(datas, i, length - 1); } for(int i = length - 1; i > 0; i-- ...
归并排序算法采用分治方法,把两个有序表合并成一个新的有序表。归并排序是一种稳定的排序算法,即相等元素的顺序不会改变。 public class MergeSort { private void merge(int[] a , int begin, int mid, int end, int[] temp) { int i = begin, j = mid + 1; int m = mid, n = end; int k = 0; while(i <= m && j <= n) { if(a[i] < a[j]) { ...
插入排序的基本思路是,每拿到一个元素,都要将这个元素与所有它之前的元素遍历比较一遍,让符合排序顺序的元素挨个移动到当前范围内它最应该出现的位置。在排序效率上,比冒泡排序大致快一倍,尤其适合部分数据有序的情况下。 Java实现如下: public void insertSort(int[] datas) { if(null == datas || 0 == datas.length) { return; } int i, j; int n = datas.length; int temp = 0; for(i = 1; i < n; ...
选择排序可以说是冒泡排序的改进,减少了数据交换的次数。 public void selectSort(int[] array) { int length = array.length - 1; int min = 0; for(int i = 0; i < length; i++) { min = i; for(int j = i + 1; j <= length; j++) { if(array[min] > array[j]) { min = j; } } swap(array, i ...
冒泡排序的两种Java实现方法。 方法一:   public void bubbleSort(int[] array) { int length = array.length - 1; for(int i = length; i > 0; i--) { for(int j = 0; j < i; j++) { if(array[j] > array[j+1]) { swap(array, j, j+1); } } } } private void swap(int[] array, int ...
HBase中单表的数据量通常可以达到TB级或PB级,但大多数情况下数据读取可以做到毫秒级。HBase是如何做到的哪?要想实现表中数据的快速访问,通用的做法是数据保持有序并尽可能的将数据保存在内存里。HBase也是这样实现的。   对于海量级的数据,首先要解决存储的问题。   数据存储上,HBase将表切分成小一点的数据单位region,托管到RegionServer上,和以前关系数据库分区表类似。但比关系数据库分区、分库易用。这一点在数据访问上,HBase对用户是透明的。   数据表切分成多个Region,用户在访问数据时,如何找到该条数据对应的region呢?查找流程如下: ...
    HBase表在进行模式设计时,首先考虑的一个问题是,这个表应该有多少个列族。一张表设计多少列族合理呢?相信这个问题困扰着不少HBase初学者。让我们来先简单分析一下HBase的实现原理。     HBase中的表和其数据库一样,也是由行和列组成的,虽说模式有些不同。HBase中的表可能达到数十亿行和数百万列,表的大小可能达到TB级,显然不可能在一台机器上存放整张表。相反,一张表在存储时会切分成小一点儿的数据单位,然后分配到多台服务器上。这个小一点儿的数据单位叫region。HBase表中数据的访问是通过其对应region来进行管理的,region内对列族的管理如下图:     ...
当我们对HBase表中的数据进行一些简单的行数统计或者聚合计算时,如果使用MapReduce或Native API将数据传到客户端进行计算,就会有较大延迟和大量网络IO开销。如果能把这些计算放在Server端,就可以减少网络IO开销,从而获得很好的性能提升。HBase的协处理器可以很好的实现上述想法。 HBase coprocessor 分为两大类,分别是: 1、Observer:类似于观察者模式,提供了Get、Put、Delete、Scan等一些钩子方法。RegionObserver具体又可以分为:RegionObserver、WALObserver和MasterObserver 2 ...
在使用MyBatis框架进行项目开发时,经常会打MyBatis的配置文件xml文件放在代码包中。但在使用Maven进行打包时,默认未将这些xml文件拷贝到classes文件夹下。为了解决这个问题,需要在pom.xml文件中添加以下配置:  <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</includ ...
Nutch1.6在使用默认网页解析插件解析网页文本时,有些网页会出现在乱码问题。出现乱码的原因分析:parse-html插件在解析网页文本时,会先使用正则表达匹配出网页的编码。源码如下: private static Pattern metaPattern =     Pattern.compile("<meta\\s+([^>]*http-equiv=(\"|')?content-type(\"|')?[^>]*)>",                     Pattern.CASE_INSENSITIVE);     pr ...
今天登录iteye上的博客,发现还没有一篇文章。以后我将陆续发表计算机编程方面的技术,敬请大家关注,谢谢!
Global site tag (gtag.js) - Google Analytics