![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java 基础
文章平均质量分 69
mm_bit
这个作者很懒,什么都没留下…
展开
-
HBase 写优化之 BulkLoad 实现数据快速入库
1、为何要 BulkLoad 导入?传统的 HTableOutputFormat 写 HBase 有什么问题?我们先看下 HBase 的写流程:通常 MapReduce 在写HBase时使用的是 TableOutputFormat 方式,在reduce中直接生成put对象写入HBase,该方式在大数据量写入时效率低下(HBase会block写入,频繁进行flush,split,comp转载 2016-08-01 17:45:33 · 2644 阅读 · 0 评论 -
BufferedWriter写中文乱码
在写文件时,如下定义bw,写入的中文总是乱码,BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(filePath),false), "UTF-8"));在使用如下方法写入时,仍是乱码:bw.write(new String(s.getBytes("gbk原创 2015-12-15 15:29:10 · 20817 阅读 · 1 评论 -
java中的信号量Semaphore
信号量可以用来限制访问公共资源。在访问公共资源之前,线程必须从信号量获取许可。在访问资源之后,这个线程必须将许可返回给信号量, 为了创建信号量,必须使用可选的公平策略来确定许可的数量。任务通过调用信号量acquire() 方法来获得许可,可通过调用信号量的release()方法来释放许可。一旦获得许可,信号量中可用许可的数量减一。一旦许可呗释放掉,信号量的可用许可原创 2015-11-18 18:34:30 · 857 阅读 · 0 评论 -
java中的枚举类学习
enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性,存放在 java.lang 包中。 创建枚举类型要使用 enum 关键字,隐含了所创建的类型都是 java.lang.Enum 类的子类(java.lang.Enum 是一个抽象类)。枚举类型符合通用模式 Class Enum>,而 E 表示枚举类型的名称。枚举类型的每一个值都将映射到 prote原创 2015-11-11 18:02:25 · 467 阅读 · 0 评论 -
java中用枚举类实现单例模式
枚举单例(Enum Singleton)是实现单例模式的一种新方式,尽管单例模式在java中已经存在很长时间了,但是枚举单例相对来说是一种比较新的概念,枚举这个特性是在Java5才出现的,这篇文章主要讲解关于为什么我们应该使用枚举来实现单例模式,它与传统方式实现的单例模式相比较又有哪些优势?1. 枚举写法简单写法简单这是它最大的优点,如果你先前写过单例模式,你应该知道即使有DCL(转载 2015-11-18 17:23:04 · 2131 阅读 · 0 评论 -
java中的信号量semaphore实现生产者消费者模式
Semaphore 信号量,就是一个允许实现设置好的令牌。也许有1个,也许有10个或更多。 谁拿到令牌(acquire)就可以去执行了,如果没有令牌则需要等待。 执行完毕,一定要归还(release)令牌,否则令牌会被很快用光,别的线程就无法获得令牌而执行下去了。 请仔细体会里面关于仓库的处理,1 是如何保证入库时,如果仓库满就等待,2 出库时,如果仓库无货转载 2015-11-24 11:59:56 · 6722 阅读 · 0 评论 -
log4j使用
1.新建一个JAva工程,导入包log4j-1.2.17.jar,整个工程最终目录如下2、src同级创建并设置log4j.properties[java] view plaincopy ### 设置### log4j.rootLogger = debug,stdout,D,E ### 输出信息到控制原创 2015-12-09 19:31:22 · 469 阅读 · 0 评论 -
字节流和字符流详解
先来看一下流的概念:在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成。程序中的输入输出都是以流的形式保存的,流中保存的实际上全都是字节文件。字节流与字符流在java.io包中操作文件内容的主要有两大类:字节流、字符流,两类都分为输入和输出操作。在字节流中输出数据主要是使转载 2015-10-13 22:32:22 · 1183 阅读 · 0 评论 -
java中的split函数用法
java.lang.string.split,即split 方法,它实现的功能是将一个字符串分割为子字符串,然后将结果作为字符串数组返回。 格式为: stringObj.split([separator,[limit]]) 其中stringObj是必选项,表示要被分解的 String 对象或文字。该对象不会被 split 方法修改。 separator原创 2015-09-24 17:45:48 · 1023 阅读 · 0 评论 -
HashMap、Hashtable、HashSet的比较
HashMap和Hashtable比较:两者最主要的区别在于Hashtable是线程安全,而HashMap则非线程安全Hashtable的实现方法里面都添加了synchronized关键字来确保线程同步,因此相对而言HashMap性能会高一些,我们平时使用时若无特殊需求建议使用HashMap,在多线程环境下若使用HashMap需要使用Collections.synchronized原创 2015-09-24 15:58:12 · 579 阅读 · 0 评论 -
java中jar包内的类访问jar包内部的资源文件的路径问题
在本地项目中,若我们要访问项目中的资源文件,则一般使用相对路径或者用System.getProperities("user.dir")得到项目根目录,然后再访问资源文件,但是在将该工程和资源文件打包为jar包,运行该jar文件时,会显示找不到资源文件的错误。在如下项目结构树中,项目根目录为nlpir,如果我们要在src下的某个package的某个java文件中访问blackWhite文件夹中的原创 2015-12-21 16:37:53 · 78015 阅读 · 3 评论 -
Eclipse将引用了第三方jar包的Java项目打包成jar文件的两种方法
方案一:用Eclipse自带的Export功能步骤1:准备主清单文件 “MANIFEST.MF”,由于是打包引用了第三方jar包的Java项目,故需要自定义配置文件MANIFEST.MF,在该项目下建立文件MANIFEST.MF,内容如下:Manifest-Version: 1.0Class-Path: lib/commons-codec.jar lib/commons-转载 2015-12-25 17:29:33 · 498 阅读 · 0 评论 -
hbase-1.2.1之put操作源码学习
Put操作:1. 实例化Configuration类Configuration conf = HbaseConfiguration.create();同Get操作。2、 实例化HTable类HTable hTable = new HTable(conf,tableName);同Get操作。3、 实例化Put类Put p = new Put(Byte原创 2016-07-28 14:58:52 · 1496 阅读 · 0 评论 -
Intellij连接远程hadoop
环境:服务器:CentOS6.6 Hadoop-2.7.2client端:windows10:开发工具:intellij IDEA前期准备:需要在windows平台下载hadoop-2.7.2的bin包,并且解压到本地目录,我的是在E:\hadoop-2.7.2\hadoop-2.7.2,具体如下:1、在intellij中创建一个maven project flie-原创 2016-08-04 15:36:55 · 10171 阅读 · 0 评论 -
用Java访问带有Kerberos认证的HBase
开始之前 因为HBase的存储系统是基于Hadoop的存储,现在Hadoop已经增加了Kerberos认证机制,这样HBase的客户端访问HBase数据库的时候也需要进行身份的认证。 Kerberos是一个认证中心,客户端在访问HBase前必须通过认证才能访问,下图是Kerberos的认证图: 我们不需要详细介绍Kerbero转载 2016-07-19 18:26:41 · 14118 阅读 · 0 评论 -
HBase-1.2.1之查找Region位置的源码学习
首先需要清楚的是:zookeeper上存放的是meta表在region的地址真正的meta表数据是存放在region上的,和其他普通的数据表是一样的。以get操作为例:在HTable中的get方法中的return rpcCallerFactory.newCaller().callWithRetries(callable,this.operationTimeout);--->原创 2016-07-28 17:00:40 · 822 阅读 · 0 评论 -
hbase-1.2.1之协处理器的源码学习
HBase中的协处理器:两种:observer和endpointObserver:RegionServerObserver:钩子函数主要是针对对region的管理的,比如merge,writeWAL,createRElplicationEndPoint,replicateLogEntries.RegionObserver:钩子函数主要是针对client端对region上的数据操作,比如原创 2016-07-28 15:56:22 · 1610 阅读 · 0 评论 -
hbase-1.2.1之scan、batch操作的源码学习
Scan操作:1、 实例化Configuration类Configuration conf = HbaseConfiguration.create();同Get操作。2、 实例化HTable类HTable hTable = new HTable(conf,tableName);同Get操作。3、 实例化Scan类Scan scan = new Scan();原创 2016-07-28 15:13:15 · 1953 阅读 · 0 评论 -
java中的System.arraycopy方法
今天在看hbase源码,看到了System.arraycopy方法,学习了一下:java中的ArrayList是动态数组,其优点就是查询速度快,插入和删除速度慢,就是因为它是数组形式,有位置索引,所以在查询的时候可以根据下标索引直接找到对应元素,但是在插入和删除元素的时候,需要挪动数组,所以速度较慢。深查其java源码,可以发现ArrayList中其实就用到了System.arraycopy方原创 2016-05-12 16:55:31 · 2547 阅读 · 0 评论 -
Guava代码学习笔记
Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, 等等. 这些高质量的 API 可以使你的JAVa代码更加优雅,更加简洁,让你工作更加轻松愉悦。原创 2016-04-14 20:26:01 · 1679 阅读 · 0 评论 -
InvocationTargetException
InvocationTargetException 是一种包装由调用方法或构造方法所抛出异常的受查异常。这个异常并不是Eclipse插件开发特有的,而是标准JDK中的,它定义在 java.lang.reflect包下。在进行Java开发的时候很少会接触到这个异常,不过在进行Eclipse插件开发中则不同,很多API都声明抛出此类异常,因此必须对此异常进行处理。但是InvocationTarge原创 2016-04-14 15:20:25 · 958 阅读 · 0 评论 -
JVM类加载机制
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析、初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制从类被加载到虚拟机内存中开始,到卸载出内存为止,类的生命周期包括加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using转载 2015-12-09 11:09:59 · 396 阅读 · 0 评论 -
字符流和字节流(二)
字符流和字节流的转换InputStreamReader 和 OutputStreamReader :把一个以字节为导向的 stream 转换成一个以字符为导向的 stream 。InputStreamReader 类是从字节流到字符流的桥梁:它读入字节,并根据指定的编码方式,将之转换为字符流。使用的编码方式可能由名称指定,或平台可接受的缺省编码方式。原创 2015-10-13 22:33:04 · 532 阅读 · 0 评论 -
Java中HashMap的实现机制
数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。数组:存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;Java中主要是ArrayList和Vector,动态数组链表:存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易转载 2015-09-24 11:55:46 · 484 阅读 · 0 评论 -
java中的堆和栈
Java把内存分成两种,一种叫做栈内存,一种叫做堆内存在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。堆内存用于存放由new创建的对象和数组。在堆中分配的内存,由java虚拟机自动垃圾回收器转载 2015-10-12 18:36:16 · 435 阅读 · 0 评论 -
用dom4j解析xml文件
dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它. 对主流的Java XML API进行的性能、功能和易用性的评测,dom4j无论在那个方面都是非常出色的。如今你可以看到越来越多的转载 2015-08-21 11:53:09 · 714 阅读 · 0 评论 -
JAVA正则表达式
JDK1.4及之后:java.util.regex 是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。它包括两个类:Pattern 和 MatcherPattern :一个 Pattern 是一个正则表达式经编译后的表现模式指定为字符串的正则表达式必须首先被编译为pattern类的实例。然后,可将得到的模式用于创建 Matcher 对象,依照正则表达式,原创 2015-08-20 10:34:42 · 563 阅读 · 0 评论 -
java.util.regex.PatternSyntaxException
Set stopWordsSet = SegmentWordsResult.getStopWordsSet(); for(String stop : stopWordsSet){ if(str.contains(stop))// System.out.println("true: "+stop); str = str.replaceAll(原创 2015-08-07 11:13:02 · 613 阅读 · 0 评论 -
libsvm中java.lang.NoSuchFieldException: rand
libsvm中java.lang.NoSuchFieldException: rand原创 2015-07-18 21:19:53 · 738 阅读 · 0 评论 -
java排列组合算法
一.利用二进制状态法求排列组合,此种方法比较容易懂,但是运行效率不高,小数据排列组合可以使用二.用递归的思想来求排列跟组合,代码量比较大三.利用动态规划的思想求排列和组合下面是求排列转载 2015-07-13 16:40:45 · 6425 阅读 · 0 评论 -
java垃圾回收机制(二)
4. finalize()方法 在JVM垃圾回收器收集一个对象之前,一般要求程序调用适当的方法释放资源,但在没有明确释放资源的情况下,Java提供了缺省机制来终止该对象心释放资源,这个方法就是finalize()。它的原型为: protected void finalize() throws Throwable 在finalize()方法返回之后,对象消失,垃圾收集开转载 2015-07-03 17:27:25 · 536 阅读 · 0 评论 -
java 垃圾回收机制(一)
在C++里,释放内存是手动处理的,要用delete运算符来释放分配的内存。这是流行的说法。确切地说,是应用认为不需要某实体时,就需用delete告诉系统,可以回收这块空间了。这个要求,对编码者来说,是件很麻烦、很难做到的事。而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾。JVM的一个系统级线程会自动释放该内存块。垃圾回收意味着程序不再需要的对象是"无用信息",这些信转载 2015-07-03 17:11:38 · 491 阅读 · 0 评论 -
java错误Comparison method violates its general contract!
今天用到Collections.sort();方法时,提示错误如下:网上查到一个解释:Description: The sorting algorithm used by java.util.Arrays.sort and (indirectly) by java.util.Collections.sort has been replaced. The new sort imp转载 2015-07-08 16:57:55 · 866 阅读 · 0 评论 -
java 日志记录使用slf4j优于log4j的原因
每个Java开发人员都知道日志记录对Java应用的重要性,尤其是对服务端应用,而且其中许多人都已经熟悉了各种记录日志的库,比如java.util.logging,Apache的log4j,logback,然而如果你不知道SLF4J,java的简单记录日志的设计的话 ,那么到了学习并在你的项目中使用它的时候了。在这篇Java文档里,我们将学习为什么使用SLF4J比使用log4j或者java.ut转载 2015-06-26 17:56:29 · 1387 阅读 · 0 评论 -
java的日志记录工具 slf4j的使用
SLF4J是Simple Logging System for Java的缩写SLF4J是为各种loging APIs提供一个简单统一的接口,从而使得最终用户能够在部署的时候配置自己希望的loging APIs实现,抽象了各种日志框架例如Logback、Log4j、Commons-logging和JDK自带的logging实现接口。它使得用户可以在部署时使用自己想要的日志框架。SLF4J是轻量转载 2015-06-26 17:32:31 · 1240 阅读 · 0 评论 -
Java命名规范
1 Package命名通常情况下,包命名通常只有小写字母和数字,且不包含下划线。示例:The unique package prefix scheme suggested in should be used for packages that will be publically distributed. In this scheme, a unique prefix is constru原创 2015-06-25 20:30:22 · 558 阅读 · 0 评论 -
java对byte,short,char,int,long运算时自动类型转化情况说明
大家都知道,在进行运算时,java会隐式的自动进行类型转化,那么有哪些情况会进行转化呢?总结如下:一、算术运算符单目运算符:+(取正)-(取负) ++(自增1) --(自减1)1.1 +(取正)-(取负)当操作数是byte,short,char时,会自动转化为int类型;返回结果为int。当操作数是int,long时,不转化,原来是啥类型,还是啥类型。1.2 +转载 2015-10-17 12:48:33 · 1345 阅读 · 0 评论 -
Java中的ConcurrentHashMap
ConcurrentHashMap是JDK1.5并发包中提供的线程安全的HashMap的实现,ConcurrentHashMap 的实现是依赖于 Java 内存模型。实现原理:锁分离 (Lock Stripping) ConcurrentHashMap允许多个修改操作并发进行,其关键在于使用了锁分离技术。它使用了多个锁来控制对hash表的不同部分进行的修改。Co原创 2015-10-17 21:08:47 · 514 阅读 · 0 评论 -
java线程池的作用
现在服务器端的应用程序几乎都采用了“线程池”技术,这主要是为了提高系统效率。因为如果服务器对应每一个请求就创建一个线程的话,在很短的一段时间内就会产生很多创建和销毁线程动作,导致服务器在创建和销毁线程上花费的时间和消耗的系统资源要比花在处理实际的用户请求的时间和资源更多。线程池就是为了尽量减少这种情况的发生。 下面我们来看看怎么用Java实现一个线程池。一个比较简单的线程池至少应包含线转载 2015-10-22 21:42:30 · 3459 阅读 · 0 评论 -
java线程同步方法
为何要使用同步? java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查), 将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用, 从而保证了该变量的唯一性和准确性。 1.同步方法 即有synchronized关键字修饰的方法。转载 2015-10-26 08:31:56 · 511 阅读 · 0 评论