- 博客(99)
- 资源 (12)
- 收藏
- 关注
原创 curator分布式锁
curator是Netflix公司开源的一个ZooKeeper客户端封装。ZooKeeper可以被用来实现分布式锁,具体是使用“临时顺序节点”实现。获取锁一个分布式锁对应ZooKeeper的一个文件夹,每个需要获取这个分布式锁的客户端线程在这个文件夹下创建一个临时顺序节点,此时有两种情况:1)创建的临时顺序节点是文件夹下的第一个节点,则认为是获取分布式锁成功。2)创建的临时顺序节点不是文件夹下的第...
2018-06-06 00:21:22
8365
1
原创 Thread.join()笔记
首先看下javadoc的介绍https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html#join--https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html#join-long-https://docs.oracle.com/javase/8/docs/api/...
2018-06-01 19:51:33
908
原创 3个线程顺序打印数字
问题:启动3个线程A、B、C,使A打印0,然后B打印1,然后C打印2,A打印3,B打印4,C打印5,依次类推。思路:每个线程给定一个编号,每个线程判断当前是否已经轮到自己打印:如果没轮到,就wait等待;如果轮到,则打印当前数字,并唤醒其他线程。判断是否已经轮到自己打印:每个线程给定一个编号N,N从0开始;使用一个全局变量记录当前需要打印的数字C,C从0开始,每次打印之后加1;线程数量M;判断逻辑...
2018-05-31 23:48:58
4911
1
原创 ReentrantReadWriteLock获取锁及释放锁流程
ReentrantReadWriteLock:可重入读写锁ReentrantReadWriteLock lock = new ReentrantReadWriteLock();ReentrantReadWriteLock.ReadLock readLock = lock.readLock();ReentrantReadWriteLock.WriteLock writeLock = lock.w...
2018-05-25 00:14:02
1676
2
原创 ReentrantLock获取锁及释放锁流程
ReentrantLock特性:可重入、排它锁内部使用AQS(AbstractQueuedSynchronizer)实现,主要技术:CAS、park/unpark主要使用AQS的两个成员变量来实现可重入排它锁。可重入:AQS.state用于记录进入锁的次数。排它锁:AQS.exclusiveOwnerThread用户当前占有锁的线程。一个线程获取锁时,调用ReentrantLock.lock(),...
2018-05-24 23:17:21
2695
原创 Redis rehash
Redis整体上是以KV形式存储的,V可以有几种类型:string、hash、list、set、zset。KV存储对应的数据结构类似HashMap:数组+链表。这种数据结构的理想状态就是所有的key均衡的分布在数组的每个槽位上,链表长度尽可能的短。定义一个负载因子loadFactory:KV的数量/数组长度。当loadFactor>1时,必定有至少1个槽位上的链表长度超过1,对于链表的查询时...
2018-05-22 23:49:47
1204
原创 Distributed Transactions: a RESTful Design笔记
原文地址:http://www.ws-rest.org/2014/sites/default/files/wsrest2014_submission_7.pdf约定T:Transaction 事务S:Service 服务R:Request 请求A:Assumption 假定C:Corollary 推论A1:事务T会发送多个请求R到多个RESTful服务S。例:事务T需要预定两个航线的航班,R1预定...
2018-05-21 23:48:12
582
原创 关于Double.MIN_VALUE和Integer.MIN_VALUE
Integer.MIN_VALUE自不必说,就是32位整型能存储的最小数字:0x80000000,是一个负数。 但是Double.MIN_VALUE却是一个正数: 可以看到,Double.MIN_VALUE表示的时64位双精度值能表示的最小正数。如果需要用到Double的负无穷,可以用Double.NEGATIVE_INFINITY
2015-03-14 17:12:35
8365
原创 Eclipse创建maven项目时报错:maven-resources-plugin:2.5 or one of its dependencies could not be resolved
Eclipse创建maven简单项目时,报错:Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin:2.5 or one of its dependencies could not be resolved: Failed to read artifact descriptor f
2014-12-26 00:00:02
58901
8
原创 Tomcat源码解析1:Eclipse导入Tomcat源代码
本系列文章以Apache Tomcat 6.0.41为例。(1)下载Tomcat源代码:http://tomcat.apache.org/download-60.cgi,apache-tomcat-6.0.41-src.zip,解压缩。(2)在Eclipse里创建Java项目,命名为:apache-tomcat-6.0.41-src(3)把src从Build Path移除,然后
2014-11-19 22:48:09
4122
原创 Java的集合类
在Java的java.util包中,有一批类被称为集合类集合类,顾名思义,就是存放对象的集合的类,可以是数组形式【ArrayList】,也可以是链表形式【LinkedList】,也可以是两种形式结合【HashMap】。Java的集合类的父类是Collection接口,主要分为三大类:List、Map、Set。其中,List是一组元素的集合,最常用到的为ArrayList、LinkedL
2014-11-08 23:40:20
1713
原创 Vector,ArrayList,LinkedList,SynchronizedList
Vector,ArrayList,LinkedList,SynchronizedList
2014-11-06 23:49:29
3503
原创 HashMap与ConcurrentHashMap的区别
从JDK1.2起,就有了HashMap,正如前一篇文章所说,HashMap不是线程安全的,因此多线程操作时需要格外小心。在JDK1.5中,伟大的Doug Lea给我们带来了concurrent包,从此Map也有安全的了。ConcurrentHashMap具体是怎么实现线程安全的呢,肯定不可能是每个方法加synchronized,那样就变成了HashTable。从Conc
2014-11-05 22:49:15
296165
67
原创 HashMap多线程死循环问题
正如上篇文中所说,HashMap不是线程安全的,在被多线程共享操作时,会有问题,具体什么问题呢,一直没有个清晰的理解,今天写了个测试程序调了一下,才明白其中道理。主要是多线程同时put时,如果同时触发了rehash操作,会导致HashMap中的链表中出现循环节点,进而使得后面get的时候,会死循环。【关于什么是rehash,读者可以自行去google了】本文主要参考了:http://coo
2014-11-05 21:40:02
34321
14
原创 HashMap与HashTable的区别
首先,从JDK源码来看,HashMap和HashTable都实现了Map接口:可以看出,HashTable是从JDK1.0就有的,HashMap而是从JDK1.2才有的。二者实现的接口一致。因此,对外方法API也基本一致:内部存储方式也基本一致,都是邻接表形式:基本操作也基本一致,以put方法为例,都是先算Key的hashCode,然后以【has
2014-11-03 23:03:26
1834
原创 StringBuffer与StringBuilder区别
从JDK源码可以看出,StringBuffer和StringBuilder都是继承自AbstractStringBuilder,其实这两个类的功能实现都是在AbstractStringBuilder实现的,两个子类只是简单地调用了一下super的方法。差别在于StringBuffer的每个方法都加了synchronized修饰符,而StringBuilder没有,因此StringBuffer是
2014-11-02 22:57:37
1648
1
原创 ZooKeeper启动过程2:FastLeaderElection
前一篇文章中说到,启动ZooKeeper集群时,需要分别启动集群中的各个节点,各节点以QuorumPeer的形式启动,最后到达startLeaderElection和lookForLeader。先说startLeaderElection首先,初始化节点自身的currentVote【当前投票】为【myid、zxid、currentEpoch】然后,初始化选举算法createElectio
2014-11-01 23:02:54
1830
原创 编译hadoop2.2.0源代码时报错
编译hadoop2.2.0源代码时,mvn install -DskipTests报错:[ERROR] COMPILATION ERROR : [INFO] -------------------------------------------------------------[ERROR] /home/test/work/env/hadoop/hadoop-2.2.0-sr
2014-07-02 01:02:05
2285
原创 StringBuffer与StringBuilder的区别
二者区别,简而言之,在于StringBuffer内部实现了线程同步,而StringBuilder没有。二者均继承自AbstractStringBuilder。JDK源码中可以看得更清楚些。=============================从源码中可以看出,子类AbstractStringBuilder已经实现了所有的操作,String
2014-05-27 20:35:24
1199
原创 关于JSP/Servlet字符编码
首先,来说一下HTML和JSP的区别:HTML属于前台,纯展示页面,请求HTML时,容器(如Tomcat)会读取HTML文件的内容,通过socket遵循HTTP协议发送到浏览器;JSP属于后台,请求JSP时,容器会首先读取JSP文件的内容,然后根据JSP文件内容生成对应的java类文件(这个类是继承自HttpJspBase的,而HttpJspBase是继承自HttpServlet的,所以J
2014-04-06 00:56:21
5593
原创 修改SVN中文件位置或文件名
在SVN中,有时会需要更改某个文件的文件名或目录位置,或者二者皆改,此时,如果只是单纯的在文件系统中修改,然后提交,是可以达成目的的,但是,这样做之后,前面所有的log都不复存在了,此时如果需要查看前面的log,则需要先回复到作修改之前的版本,然后找到文件后再查看。解决方法:使用SVN的Rename功能。然后,把文件名改为:1
2014-03-05 19:18:04
47960
原创 MD5和SHA-1算法输入的最大长度
从MD5算法和SHA-1算法的原理可以看出,二者都把二进制输入串的最后64bit用来存储输入串的长度这样,二进制输入串的长度范围应该均为: 0 ~ (2^64 - 1)。区别在于:MD5算法中,如果二进制输入串的位长度超出了 (2^64 - 1),则把 (bitLength % 2^64) 存储在最后64bit中,所以,MD5算法的输入串是没有长度限制的(虽然不太可
2014-03-03 22:05:50
12782
原创 SHA算法简介
SHA:Secure Hash Algorithm安全散列算法与MD5算法极为相似。长度不超过2^64位的字符串或二进制流,经过SHA-1编码后,生成一个160位的二进制串。SHA-1算法也与MD5类似,都是把输入二进制串分成512位的块,把二进制串的位数存储在最后64位,二者之间填充为0,依次对每个块进行一些列高深的数学运算,最后得到一个160位的二进制串。
2014-02-27 23:37:22
16006
原创 MD5算法简介
MD5:Message Digest Algorithm 5信息摘要算法 第五版任意长度的字符串或字节流,经过MD5的编码后,生成一个128bit的二进制串。通常表示为32个十六进制数字连成的字符串。
2014-02-26 22:34:35
4556
1
原创 BASE64编码简介
BASE64是一种编码方式,通常用于把二进制数据编码为可写的字符形式的数据。这是一种可逆的编码方式。编码后的数据是一个字符串,其中包含的字符为:A-Z、a-z、0-9、+、/共64个字符:26 + 26 + 10 + 1 + 1 = 64。
2014-02-25 00:55:48
46128
原创 修改12306的自动查询间隔
现在12306的自动查询是每隔五秒查询一次。这个时间是写在前端JS里的,所以,只要用的浏览器不是IE6、或者其他浏览器的兼容模式(且系统的IE浏览器是IE6),都是可以修改这个时间的。以360安全浏览器的极速模式(WebKit内核)为例:在此界面上按F12,会弹出开发者工具:点击上图标记出来的按钮,显示出来控制台:
2014-01-21 13:44:00
8401
原创 CSS选择器之二
前一篇介绍了五种简单的CSS选择器:元素选择器、通配选择器、类选择器、ID选择器、属性选择器。这一篇介绍与HTML文档结构相关的CSS选择器。6.后代选择器也可称为包含选择器、上下文选择器。例:h1 em {color: red;} /*把位于h1元素内(第一层或第N层)的em元素文字颜色设为红色,其他位置的em元素不变*/7.子元素选择器例:h1 > em {co
2014-01-15 21:34:56
1087
原创 CSS选择器之一
1.元素选择器指定的HTML元素。2.通配选择器* :任意HTML元素。3.类选择器.className :属性class值包含className的HTML元素。3.1.多类选择器.className1.className2 :属性class值同时包含className1和className2的HTML元素。注意:两者之间没有空格。《CSS权威指南》上说IE7之
2014-01-15 21:34:40
1148
原创 Java socket异常
使用Java socket编写程序时,通常会遇到几种种异常:BindException、UnknownHostException、ConnectException、SocketTimeoutException。BindException会发生在Socket或ServerSocket的bind()操作中,如果无法与本机指定的IP地址或端口绑定,就会抛出此异常。有两种情况:指定
2013-07-15 22:38:06
15787
原创 Java虚拟机 类加载的过程
转载请标明出处:http://blog.youkuaiyun.com/xuefeng0707/article/details/9132339类加载的全过程分为五个阶段:加载、验证、准备、解析、初始化。1. 加载这个阶段可分为三段:(1)加载二进制字节流根据类的全限定名(包名+类名),获取此类的二进制字节流。虚拟机规范没有指定二进制字节流从哪里读取,可以是class文件,
2013-06-30 12:22:36
8948
原创 Eclipse3.6 添加JUnit源代码
Eclipse中无法查看JUnit源代码,也无法设置源代码的jar。解决方法:1. 下载org.junit.source_4.8.1.v4_8_1_v20100427-1100.jar,放到eclipse\plugins下。2. 修改 eclipse\configuration\org.eclipse.equinox.source\source.info,添加一行:
2013-06-25 13:14:07
3000
原创 Java虚拟机 类初始化 阶段
Java虚拟机使用某个类的过程,可分为七个阶段:加载 - 验证 - 准备 - 解析 - 初始化 - 使用 - 卸载本文只介绍在什么情况下对类进行初始化。Java虚拟机规范对何时进行类的初始化做了严格规范,有且只有四种情况:1. 虚拟机启动时,指定的主类。 包含main方法的类。2. 遇到new、getstatic、putstatic、invokestatic四条
2013-06-10 18:37:39
2013
原创 IE下textarea默认不显示滚动条
IE下textarea默认情况下会显示出竖直方向的滚动条:如果需要隐藏滚动条,行数超过height时才显示出滚动条,需要把overflow设置为auto:
2013-05-14 12:39:26
5526
原创 SSH环境搭建
转载请注明来源:http://blog.youkuaiyun.com/xuefeng0707/article/details/88884841. 资源准备Struts-2.3.4.1Spring-3.0.5Hibernate-3.6.102. 新建空白Web项目新建一个空白的Web项目,取名为ssh,目录结构如图:部署到Tomcat中:3. 配置Struts2
2013-05-06 15:33:06
17816
3
Tomcat6.0.41源代码,可直接导入Eclipse
2014-11-19
org.junit.source_4.8.1.v4_8_1_v20100427-1100.jar
2013-06-25
重新编译过的Eclipse插件EasyExplore
2013-04-23
Eclipse tomcat插件
2012-04-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人