自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

XF的专栏

技术改变世界

  • 博客(99)
  • 资源 (12)
  • 收藏
  • 关注

原创 curator分布式锁

curator是Netflix公司开源的一个ZooKeeper客户端封装。ZooKeeper可以被用来实现分布式锁,具体是使用“临时顺序节点”实现。获取锁一个分布式锁对应ZooKeeper的一个文件夹,每个需要获取这个分布式锁的客户端线程在这个文件夹下创建一个临时顺序节点,此时有两种情况:1)创建的临时顺序节点是文件夹下的第一个节点,则认为是获取分布式锁成功。2)创建的临时顺序节点不是文件夹下的第...

2018-06-06 00:21:22 8249 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 839

原创 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 4817 1

原创 ReentrantReadWriteLock获取锁及释放锁流程

ReentrantReadWriteLock:可重入读写锁ReentrantReadWriteLock lock = new ReentrantReadWriteLock();ReentrantReadWriteLock.ReadLock readLock = lock.readLock();ReentrantReadWriteLock.WriteLock writeLock = lock.w...

2018-05-25 00:14:02 1597 2

原创 ReentrantLock获取锁及释放锁流程

ReentrantLock特性:可重入、排它锁内部使用AQS(AbstractQueuedSynchronizer)实现,主要技术:CAS、park/unpark主要使用AQS的两个成员变量来实现可重入排它锁。可重入:AQS.state用于记录进入锁的次数。排它锁:AQS.exclusiveOwnerThread用户当前占有锁的线程。一个线程获取锁时,调用ReentrantLock.lock(),...

2018-05-24 23:17:21 2609

原创 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 1114

原创 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 517

原创 关于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 8141

原创 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 58731 23

原创 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 4060 2

原创 Java的集合类

在Java的java.util包中,有一批类被称为集合类集合类,顾名思义,就是存放对象的集合的类,可以是数组形式【ArrayList】,也可以是链表形式【LinkedList】,也可以是两种形式结合【HashMap】。Java的集合类的父类是Collection接口,主要分为三大类:List、Map、Set。其中,List是一组元素的集合,最常用到的为ArrayList、LinkedL

2014-11-08 23:40:20 1663

原创 Vector,ArrayList,LinkedList,SynchronizedList

Vector,ArrayList,LinkedList,SynchronizedList

2014-11-06 23:49:29 3451

原创 HashMap与ConcurrentHashMap的区别

从JDK1.2起,就有了HashMap,正如前一篇文章所说,HashMap不是线程安全的,因此多线程操作时需要格外小心。在JDK1.5中,伟大的Doug Lea给我们带来了concurrent包,从此Map也有安全的了。ConcurrentHashMap具体是怎么实现线程安全的呢,肯定不可能是每个方法加synchronized,那样就变成了HashTable。从Conc

2014-11-05 22:49:15 295428 67

原创 HashMap多线程死循环问题

正如上篇文中所说,HashMap不是线程安全的,在被多线程共享操作时,会有问题,具体什么问题呢,一直没有个清晰的理解,今天写了个测试程序调了一下,才明白其中道理。主要是多线程同时put时,如果同时触发了rehash操作,会导致HashMap中的链表中出现循环节点,进而使得后面get的时候,会死循环。【关于什么是rehash,读者可以自行去google了】本文主要参考了:http://coo

2014-11-05 21:40:02 33958 14

原创 HashMap与HashTable的区别

首先,从JDK源码来看,HashMap和HashTable都实现了Map接口:可以看出,HashTable是从JDK1.0就有的,HashMap而是从JDK1.2才有的。二者实现的接口一致。因此,对外方法API也基本一致:内部存储方式也基本一致,都是邻接表形式:基本操作也基本一致,以put方法为例,都是先算Key的hashCode,然后以【has

2014-11-03 23:03:26 1793

原创 StringBuffer与StringBuilder区别

从JDK源码可以看出,StringBuffer和StringBuilder都是继承自AbstractStringBuilder,其实这两个类的功能实现都是在AbstractStringBuilder实现的,两个子类只是简单地调用了一下super的方法。差别在于StringBuffer的每个方法都加了synchronized修饰符,而StringBuilder没有,因此StringBuffer是

2014-11-02 22:57:37 1605 1

原创 ZooKeeper启动过程2:FastLeaderElection

前一篇文章中说到,启动ZooKeeper集群时,需要分别启动集群中的各个节点,各节点以QuorumPeer的形式启动,最后到达startLeaderElection和lookForLeader。先说startLeaderElection首先,初始化节点自身的currentVote【当前投票】为【myid、zxid、currentEpoch】然后,初始化选举算法createElectio

2014-11-01 23:02:54 1782

原创 ZooKeeper启动过程

Zookeeper 启动 FastLeaderElection

2014-10-31 22:55:48 9052

原创 编译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 2226

原创 StringBuffer与StringBuilder的区别

二者区别,简而言之,在于StringBuffer内部实现了线程同步,而StringBuilder没有。二者均继承自AbstractStringBuilder。JDK源码中可以看得更清楚些。=============================从源码中可以看出,子类AbstractStringBuilder已经实现了所有的操作,String

2014-05-27 20:35:24 1150

原创 深入解析为何select最多只能监听1024个

深入解析为何select最多只能监听1024个

2014-04-10 22:54:03 8263

原创 关于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 5537

原创 修改SVN中文件位置或文件名

在SVN中,有时会需要更改某个文件的文件名或目录位置,或者二者皆改,此时,如果只是单纯的在文件系统中修改,然后提交,是可以达成目的的,但是,这样做之后,前面所有的log都不复存在了,此时如果需要查看前面的log,则需要先回复到作修改之前的版本,然后找到文件后再查看。解决方法:使用SVN的Rename功能。然后,把文件名改为:1

2014-03-05 19:18:04 47340 3

原创 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 12357

原创 SHA算法简介

SHA:Secure Hash Algorithm安全散列算法与MD5算法极为相似。长度不超过2^64位的字符串或二进制流,经过SHA-1编码后,生成一个160位的二进制串。SHA-1算法也与MD5类似,都是把输入二进制串分成512位的块,把二进制串的位数存储在最后64位,二者之间填充为0,依次对每个块进行一些列高深的数学运算,最后得到一个160位的二进制串。

2014-02-27 23:37:22 15860 1

原创 MD5算法简介

MD5:Message Digest Algorithm 5信息摘要算法 第五版任意长度的字符串或字节流,经过MD5的编码后,生成一个128bit的二进制串。通常表示为32个十六进制数字连成的字符串。

2014-02-26 22:34:35 4493 1

原创 BASE64编码简介

BASE64是一种编码方式,通常用于把二进制数据编码为可写的字符形式的数据。这是一种可逆的编码方式。编码后的数据是一个字符串,其中包含的字符为:A-Z、a-z、0-9、+、/共64个字符:26 + 26 + 10 + 1 + 1 = 64。

2014-02-25 00:55:48 45817 2

原创 修改12306的自动查询间隔

现在12306的自动查询是每隔五秒查询一次。这个时间是写在前端JS里的,所以,只要用的浏览器不是IE6、或者其他浏览器的兼容模式(且系统的IE浏览器是IE6),都是可以修改这个时间的。以360安全浏览器的极速模式(WebKit内核)为例:在此界面上按F12,会弹出开发者工具:点击上图标记出来的按钮,显示出来控制台:

2014-01-21 13:44:00 8265

原创 CSS样式优先级

CSS样式优先级 选择器形式 来源

2014-01-18 02:31:12 5560 1

原创 CSS选择器之二

前一篇介绍了五种简单的CSS选择器:元素选择器、通配选择器、类选择器、ID选择器、属性选择器。这一篇介绍与HTML文档结构相关的CSS选择器。6.后代选择器也可称为包含选择器、上下文选择器。例:h1 em {color: red;} /*把位于h1元素内(第一层或第N层)的em元素文字颜色设为红色,其他位置的em元素不变*/7.子元素选择器例:h1 > em {co

2014-01-15 21:34:56 1056

原创 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 1093

原创 使用link标签实现shortcut icon

在HTML中可以使用link标签来实现shortcut icon。

2014-01-14 23:58:38 12064

原创 Notepad++关闭拼写检查

把“Spell Check Document Automatically”前面的打钩去掉即可。

2014-01-14 20:45:37 25211 8

原创 HTML中link的rel属性

rel:relation意即:与当前HTML文档的关系。

2014-01-14 20:12:01 2538

原创 Java socket异常

使用Java socket编写程序时,通常会遇到几种种异常:BindException、UnknownHostException、ConnectException、SocketTimeoutException。BindException会发生在Socket或ServerSocket的bind()操作中,如果无法与本机指定的IP地址或端口绑定,就会抛出此异常。有两种情况:指定

2013-07-15 22:38:06 15707

原创 Java虚拟机 类加载的过程

转载请标明出处:http://blog.csdn.net/xuefeng0707/article/details/9132339类加载的全过程分为五个阶段:加载、验证、准备、解析、初始化。1. 加载这个阶段可分为三段:(1)加载二进制字节流根据类的全限定名(包名+类名),获取此类的二进制字节流。虚拟机规范没有指定二进制字节流从哪里读取,可以是class文件,

2013-06-30 12:22:36 8810

原创 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 2928

原创 Java虚拟机 类初始化 阶段

Java虚拟机使用某个类的过程,可分为七个阶段:加载 - 验证 - 准备 - 解析 - 初始化 - 使用 - 卸载本文只介绍在什么情况下对类进行初始化。Java虚拟机规范对何时进行类的初始化做了严格规范,有且只有四种情况:1. 虚拟机启动时,指定的主类。   包含main方法的类。2. 遇到new、getstatic、putstatic、invokestatic四条

2013-06-10 18:37:39 1962

原创 IE下textarea默认不显示滚动条

IE下textarea默认情况下会显示出竖直方向的滚动条:如果需要隐藏滚动条,行数超过height时才显示出滚动条,需要把overflow设置为auto:

2013-05-14 12:39:26 5450

原创 SSH环境搭建

转载请注明来源:http://blog.csdn.net/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 17718 12

Xmarks-Bookmark-Sync_v1.0.28.crx

Xmarks-Bookmark-Sync_v1.0.28.crx,支持Chrome内核浏览器书签同步。

2017-12-02

Tomcat6.0.41源代码,可直接导入Eclipse

可成功编译的Apache Tomcat 6.0.41源代码,可直接导入Eclipse编译运行,入口类为org.apache.catalina.startup.Bootstrap。

2014-11-19

领域驱动设计:软件核心复杂性应对之道 英文版

领域驱动设计:软件核心复杂性应对之道 英文版

2014-05-14

org.junit.source_4.8.1.v4_8_1_v20100427-1100.jar

在Eclipse中设置查看JUnit源代码所用到的jar。查看:http://blog.csdn.net/xuefeng0707/article/details/9168997

2013-06-25

SSH环境搭建

SSH环境搭建 Struts-2.3.4.1 Spring-3.0.5 Hibernate-3.6.10

2013-05-06

SSHj环境搭建

SSH环境搭建 Struts-2.3.4.1 Spring-3.0.5 Hibernate-3.6.10

2013-05-06

重新编译过的Eclipse插件EasyExplore

官方的EasyExplore插件在配置了/select选项后,选中的是当前文件父文件夹。此文件为修改过源代码、重新编译过的jar,当操作文件时,选中当前文件;当操作文件夹时,选中当前文件夹。使用方法:放到plugins下。

2013-04-23

Android WebView 之Helloworld

Android WebView 之Helloworld

2012-06-13

Lucene 3.0 原理与代码分析完整版.pdf

Lucene 3.0 原理与代码分析完整版.pdf 550页

2012-06-02

MySQL QueryBrwoser

MySQL QueryBrwoser MySQL可视化 界面 管理工具, 简约 易用

2012-05-27

Eclipse tomcat插件

Eclipse tomcat 插件 解压缩后放到eclipse\plugins里,并在Eclipse的Preference里配置Tomcat路径

2012-04-26

SQLite Administrator

强大的SQLite 图形化管理工具,其他的不说了,谁用谁知道

2011-04-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除