- 浏览: 23956 次
- 性别:
- 来自: 北京
最新评论
文章列表
一、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 ...