① java 中文API谁有,百度云分享一下
Android中文版
api手册地址:http://www.matools.com/api/android
Ant最新版
api手册地址:http://www.matools.com/api/ant
ASM字节码操作
api手册地址:http://www.matools.com/api/asm
Axis2最新版
api手册地址:http://www.matools.com/api/axis2
Bash脚本
api手册地址:http://www.matools.com/api/bash
Bootstrap 3
api手册地址:http://www.matools.com/api/bootstrap3
Bootstrap 4
api手册地址:http://www.matools.com/api/bootstrap4
C/C++
api手册地址:http://www.matools.com/api/c
C3P0连接池
api手册地址:http://www.matools.com/api/c3p0
CentOS使用文档
api手册地址:http://www.matools.com/api/centos
Commons-Beanutils
api手册地址:http://www.matools.com/api/commons-beanutils
Commons-Fileupload
api手册地址:http://www.matools.com/api/commons-fileupload
Commons-IO最新版
api手册地址:http://www.matools.com/api/commons-io
Commons-Lang最新版
api手册地址:http://www.matools.com/api/commons-long
Commons-Net最新版
api手册地址:http://www.matools.com/api/commons-net
CSS 3
api手册地址:http://www.matools.com/api/css
DBCP连接池
api手册地址:http://www.matools.com/api/dbcp
Dom4j
api手册地址:http://www.matools.com/api/dom4j
bbo中文文档
api手册地址:http://www.matools.com/api/bbo
EhCache
api手册地址:http://www.matools.com/api/ehcache
Freemarker
api手册地址:http://www.matools.com/api/freemarker
Go语言
api手册地址:http://www.matools.com/api/go
Hadoop
api手册地址:http://www.matools.com/api/hadoop
Hibernate中文版
api手册地址:http://www.matools.com/api/hibernate
IKAnalyzer中文版
api手册地址:http://www.matools.com/api/ikanalyzer
Java 10
api手册地址:http://www.matools.com/api/java10
Java 6
api手册地址:http://www.matools.com/api/java6
Java 7
api手册地址:http://www.matools.com/api/java7
Java 8中文版
api手册地址:http://www.matools.com/api/java8
jqGrid中文版
api手册地址:http://www.matools.com/api/jqgrid
Jquery中文版
api手册地址:http://www.matools.com/api/jquery
json-lib
api手册地址:http://www.matools.com/api/json-lib
Junit4最新版
api手册地址:http://www.matools.com/api/junit
Kryo
api手册地址:http://www.matools.com/api/kryo
Log4j最新版
api手册地址:http://www.matools.com/api/log4j
Lucene
api手册地址:http://www.matools.com/api/lucene
Maven
api手册地址:http://www.matools.com/api/maven
Windows MFC中文版
api手册地址:http://www.matools.com/api/msdn
Mybatis
api手册地址:http://www.matools.com/api/mybatis
MySql中文版
api手册地址:http://www.matools.com/api/mysql
Netty 3.6
api手册地址:http://www.matools.com/api/netty
Nginx中文版
api手册地址:http://www.matools.com/api/nginx
OpenJPA最新版
api手册地址:http://www.matools.com/api/openjpa
PHP中文版
api手册地址:http://www.matools.com/api/php
POI-apache
api手册地址:http://www.matools.com/api/poi
QuickServer
api手册地址:http://www.matools.com/api/quickserver
redis中文参考文档
api手册地址:http://www.matools.com/api/redis
Ruby
api手册地址:http://www.matools.com/api/ruby
Ruby-library
api手册地址:http://www.matools.com/api/ruby-library
Ruby on Rails
api手册地址:http://www.matools.com/api/rubyonrails
Shiro
api手册地址:http://www.matools.com/api/shiro
Spring最新版
api手册地址:http://www.matools.com/api/spring
Spring for Android
api手册地址:http://www.matools.com/api/spring-android
Spring Boot
api手册地址:http://www.matools.com/api/spring-boot
Spring Cloud中文文档
api手册地址:http://www.matools.com/api/spring-cloud
Spring Security
api手册地址:http://www.matools.com/api/spring-security
Spring中文版
api手册地址:http://www.matools.com/api/spring-zh
Struts 2最新版
api手册地址:http://www.matools.com/api/struts2
Taperstry
api手册地址:http://www.matools.com/api/taperstry
TensorFlow中文
api手册地址:http://www.matools.com/api/tensorflow
Tomcat
api手册地址:http://www.matools.com/api/tomcat
Ubuntu
api手册地址:http://www.matools.com/api/ubuntu
Velocity 1.7
api手册地址:http://www.matools.com/api/velocity
VelocityTools2.0
api手册地址:http://www.matools.com/api/velocity-tools
Vue Router中文参考
api手册地址:http://www.matools.com/api/vue-router
vue.js中文文档
api手册地址:http://www.matools.com/api/vuejs
XMLBeans
api手册地址:http://www.matools.com/api/xmlbeans
Yahoo UI中文版
api手册地址:http://www.matools.com/api/yui
Zend Framework中文版
api手册地址:http://www.matools.com/api/zend-framework
Zookeeper
api手册地址:http://www.matools.com/api/zookeeper
② zookeeper会话及超时处理
zookeeper session也就是会话,用于维持客户端与服务器之间的连接状态。
在ZooKeeper中,客户端和服务端建立连接后会创建一个session(会话),每一个session对应一个全局唯一的会话ID(Session ID)。就像浏览器和Web服务器一样,首次连接Web服务器的时候为了跟踪客户端,Web服务器会创建一个Session。
zookeeper服务器和客户端之间维持的是一个长连接,客户端会定时向服务器发送心跳来维持Session的有效性(每次发送心跳就会刷新session超时时间)。正常情况下Session一直有效,并且ZK集群所有机器上都保存这个Session信息。当出现网络中断或zookeeper服务挂掉时,客户端会主动在地址列表(实例化ZK对象的时候传入构造方法的那个参数connectString)中选择新的地址进行连接(如果没有备选地址,会不断重试之前的那个地址),如果有新的地址可以连接,在中断时长小于sessionTimeout值时,zookeeper客户端自动重连。如果中断时长大于sessionTimeout值时,将出现session expired的异常,这个时候就需要开发者手动做一些处理,比如使用zookeeper的create重建连接。
在创建zookeeper对象时,指定的Watcher是zookeeper客户端默认的Watcher,可以在它的process方法中监听到Session超时事件,具体做法:
重新new 一个zookeeper即可,使用zookeeper提供的API,如下:
但是需要注意session超时之后,之前使用Java API注册的Watcher将丢失,比如:
所以在重建连接之后,你需要重新添加监听。
③ zookeeper怎么实现分布式锁
1. 利用节点名称的唯一性来实现共享锁
ZooKeeper抽象出来的节点结构是一个和unix文件系统类似的小型的树状的目录结构。ZooKeeper机制规定:同一个目录下只能有一个唯一的文件名。例如:我们在Zookeeper目录/test目录下创建,两个客户端创建一个名为Lock节点,只有一个能够成功。
算法思路: 利用名称唯一性,加锁操作时,只需要所有客户端一起创建/test/Lock节点,只有一个创建成功,成功者获得锁。解锁时,只需删除/test/Lock节点,其余客户端再次进入竞争创建节点,直到所有客户端都获得锁。
基于以上机制,利用节点名称唯一性机制的共享锁算法流程如图所示:
该共享锁实现很符合我们通常多个线程去竞争锁的概念,利用节点名称唯一性的做法简明、可靠。
由上述算法容易看出,由于客户端会同时收到/test/Lock被删除的通知,重新进入竞争创建节点,故存在"惊群现象"。
使用该方法进行测试锁的性能列表如下:
总结 这种方案的正确性和可靠性是ZooKeeper机制保证的,实现简单。缺点是会产生“惊群”效应,假如许多客户端在等待一把锁,当锁释放时候所有客户端都被唤醒,仅仅有一个客户端得到锁。
2. 利用临时顺序节点实现共享锁的一般做法
首先介绍一下,Zookeeper中有一种节点叫做顺序节点,故名思议,假如我们在/lock/目录下创建节3个点,ZooKeeper集群会按照提起创建的顺序来创建节点,节点分别为/lock/0000000001、/lock/0000000002、/lock/0000000003。
ZooKeeper中还有一种名为临时节点的节点,临时节点由某个客户端创建,当客户端与ZooKeeper集群断开连接,则开节点自动被删除。
利用上面这两个特性,我们来看下获取实现分布式锁的基本逻辑:
客户端调用create()方法创建名为“locknode/guid-lock-”的节点,需要注意的是,这里节点的创建类型需要设置为EPHEMERAL_SEQUENTIAL。
客户端调用getChildren(“locknode”)方法来获取所有已经创建的子节点,同时在这个节点上注册上子节点变更通知的Watcher。
客户端获取到所有子节点path之后,如果发现自己在步骤1中创建的节点是所有节点中序号最小的,那么就认为这个客户端获得了锁。
如果在步骤3中发现自己并非是所有子节点中最小的,说明自己还没有获取到锁,就开始等待,直到下次子节点变更通知的时候,再进行子节点的获取,判断是否获取锁。
释放锁的过程相对比较简单,就是删除自己创建的那个子节点即可。
上面这个分布式锁的实现中,大体能够满足了一般的分布式集群竞争锁的需求。这里说的一般性场景是指集群规模不大,一般在10台机器以内。
不过,细想上面的实现逻辑,我们很容易会发现一个问题,步骤4,“即获取所有的子点,判断自己创建的节点是否已经是序号最小的节点”,这个过程,在整个分布式锁的竞争过程中,大量重复运行,并且绝大多数的运行结果都是判断出自己并非是序号最小的节点,从而继续等待下一次通知——这个显然看起来不怎么科学。客户端无端的接受到过多的和自己不相关的事件通知,这如果在集群规模大的时候,会对Server造成很大的性能影响,并且如果一旦同一时间有多个节点的客户端断开连接,这个时候,服务器就会像其余客户端发送大量的事件通知——这就是所谓的惊群效应。而这个问题的根源在于,没有找准客户端真正的关注点。
我们再来回顾一下上面的分布式锁竞争过程,它的核心逻辑在于:判断自己是否是所有节点中序号最小的。于是,很容易可以联想的到的是,每个节点的创建者只需要关注比自己序号小的那个节点。
3、利用临时顺序节点实现共享锁的改进实现
下面是改进后的分布式锁实现,和之前的实现方式唯一不同之处在于,这里设计成每个锁竞争者,只需要关注”locknode”节点下序号比自己小的那个节点是否存在即可。
算法思路:对于加锁操作,可以让所有客户端都去/lock目录下创建临时顺序节点,如果创建的客户端发现自身创建节点序列号是/lock/目录下最小的节点,则获得锁。否则,监视比自己创建节点的序列号小的节点(比自己创建的节点小的最大节点),进入等待。
对于解锁操作,只需要将自身创建的节点删除即可。
具体算法流程如下图所示:
使用上述算法进行测试的的结果如下表所示:
该算法只监控比自身创建节点序列号小(比自己小的最大的节点)的节点,在当前获得锁的节点释放锁的时候没有“惊群”。
总结 利用临时顺序节点来实现分布式锁机制其实就是一种按照创建顺序排队的实现。这种方案效率高,避免了“惊群”效应,多个客户端共同等待锁,当锁释放时只有一个客户端会被唤醒。
4、使用menagerie
其实就是对方案3的一个封装,不用自己写代码了。直接拿来用就可以了。
menagerie基于Zookeeper实现了java.util.concurrent包的一个分布式版本。这个封装是更大粒度上对各种分布式一致性使用场景的抽象。其中最基础和常用的是一个分布式锁的实现: org.menagerie.locks.ReentrantZkLock,通过ZooKeeper的全局有序的特性和EPHEMERAL_SEQUENTIAL类型znode的支持,实现了分布式锁。具体做法是:不同的client上每个试图获得锁的线程,都在相同的basepath下面创建一个EPHEMERAL_SEQUENTIAL的node。EPHEMERAL表示要创建的是临时znode,创建连接断开时会自动删除; SEQUENTIAL表示要自动在传入的path后面缀上一个自增的全局唯一后缀,作为最终的path。因此对不同的请求ZK会生成不同的后缀,并分别返回带了各自后缀的path给各个请求。因为ZK全局有序的特性,不管client请求怎样先后到达,在ZKServer端都会最终排好一个顺序,因此自增后缀最小的那个子节点,就对应第一个到达ZK的有效请求。然后client读取basepath下的所有子节点和ZK返回给自己的path进行比较,当发现自己创建的sequential node的后缀序号排在第一个时,就认为自己获得了锁;否则的话,就认为自己没有获得锁。这时肯定是有其他并发的并且是没有断开的client/线程先创建了node。
④ java调用hbase api连接出错:
别的暂时先不说,最起码zookeeper这个单词得输入对啊。
具体的配置去hbase的安装目录下找,把xml里的所有东西都set进来。