- 博客(59)
- 资源 (18)
- 问答 (2)
- 收藏
- 关注
原创 JDK并发工具类源码学习系列——介绍
JDK并发工具类是JDK1.5引入的一大重要的功能,集中在java.util.concurrent包下,java.util.concurrent包下还包括了java.util.concurrent.atomic以及java.util.concurrent.locks两个子包。java.util.concurrent包主要包含了并发集合类以及线程池和信号量三组重要工具类;
2015-12-01 17:00:14
3073
原创 JDK并发工具类源码学习系列——SynchronousQueue
SynchronousQueue是一种特殊的阻塞队列,不同于LinkedBlockingQueue、ArrayBlockingQueue和PriorityBlockingQueue,其内部没有任何容量,任何的入队操作都需要等待其他线程的出队操作,反之亦然。如果将SynchronousQueue用于生产者/消费者模式,那么相当于生产者和消费者手递手交易,即生产者生产出一个货物,则必须等到消费者过来取
2015-11-30 19:01:19
3785
原创 数据结构系列——Java后缀树实现代码
上一篇文章介绍了什么是后缀树以及后缀树的应用场景,同时结合Ukkonen算法论文细述了如何在O(n)时间内构建一颗后缀树,这一篇详细介绍如何使用Java实现的Ukkonen后缀树构建算法。
2015-11-27 13:37:59
3400
1
原创 数据结构系列——后缀树(附Java实现代码)
后缀树,说的通俗点就是将一个字符串所有的后缀按照前缀树(Trie树,可参考此篇文章)的形式组织成一棵树。本文章介绍了后缀树的应用以及使用如何使用Java实现Ukkonen算法构建后缀树
2015-11-27 13:34:38
6029
原创 JDK并发工具类源码学习系列——LinkedBlockingQueue
LinkedBlockingQueue是一个基于已链接节点的、范围任意的 blocking queue。此队列按 FIFO(先进先出)排序元素。队列的头部 是在队列中时间最长的元素。队列的尾部 是在队列中时间最短的元素。新元素插入到队列的尾部,并且队列获取操作会获得位于队列头部的元素。链接队列的吞吐量通常要高于基于数组的队列,但是在大多数并发应用程序中,其可预知的性能要低。
2015-11-23 19:04:23
1560
原创 数据结构系列——Trie树
Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。
2015-11-23 15:19:37
4125
原创 JDK并发工具类源码学习系列——PriorityBlockingQueue
PriorityBlockingQueue是一个基于优先级堆的无界的并发安全的优先级队列(FIFO),队列的元素按照其自然顺序进行排序,或者根据构造队列时提供的 Comparator 进行排序,具体取决于所使用的构造方法。实现原理PriorityBlockingQueue通过使用堆这种数据结构实现将队列中的元素按照某种排序规则进行排序,从而改变先进先出的队列顺序,提供开发者改变队列中元素的顺序的能力
2015-11-20 17:19:55
4684
原创 数据结构系列——堆
堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。在队列中,调度程序反复提取队列中第一个作业并运行,因为实际情况中某些时间较短的任务将等待很长时间才能结束,或者某些不短小,但具有重要性的作业,同样应当具有优先权。堆即为解决此类问题设计的一种数据结构。
2015-11-19 13:13:20
2664
原创 JDK并发工具类源码学习系列——CopyOnWriteArrayList
CopyOnWriteArrayList是ArrayList的一个线程安全的变体,其中所有可变操作(add、set 等等)都是通过对底层数组进行一次新的复制来实现的。 这一般需要很大的开销,但是当遍历操作的数量大大超过可变操作的数量时,这种方法可能比其他替代方法更 有效。在不能或不想进行同步遍历,但又需要从并发线程中排除冲突时,它也很有用。“快照”风格的迭代器方法在创建迭代器时使用了对数组状态的引用
2015-11-17 14:42:17
1441
1
原创 PythonOS库练习——模拟linux文件管理命令
最近对Python大有兴趣,由于将官网文档看了一遍,但是看完只是简单的了解了Python的语法,而且还只是最基础的语法,所以后续除了了解Python的高级功能外(例外并发机制,锁机制,IO机制等),另一个重要要学习的就是Python的基本类库,如os/sys/datetime等。本篇文章就是针对Python OS标准库的练习,OS库的功能主要是针对操作系统的文件管理,所以练习无外乎就是针对文件进行操
2015-11-17 11:48:52
1510
原创 JDK并发工具类源码学习系列——ConcurrentSkipListMap
ConcurrentSkipListMap在JDK并发工具类使用范围不是很广,它是针对某一特殊需求而设计的——支持排序,同时支持搜索目标返回最接近匹配项的导航方法。一般情况下开发者很少会使用到该类,但是如果你有如上的特殊需求,那么ConcurrentSkipListMap将是一个很好地解决方案。 本文通过对JDK的ConcurrentSkipListMap的代码详细分析,深入分析其实现原理。
2015-11-13 12:19:22
4845
原创 JDK并发工具类源码学习系列——ConcurrentSkipListMap(续)
ConcurrentSkipListMap在JDK并发工具类使用范围不是很广,它是针对某一特殊需求而设计的——支持排序,同时支持搜索目标返回最接近匹配项的导航方法。一般情况下开发者很少会使用到该类,但是如果你有如上的特殊需求,那么ConcurrentSkipListMap将是一个很好地解决方案。 本篇通过对JDK ConcurrentSkipListMap的代码实现进行详细分析,解读其实现原理。
2015-11-13 12:17:11
1314
原创 为Hexo博客文章添加关键字
本文章是为Hexo博客的next主题的文章增加关键字的设定,默认next主题的文章关键字取文章的标签,所以如果想要设置很全的关键字,肯定会造成自己的标签页的标签过多,看着过于杂乱,所以就想将文章的关键字与标签分开,下面做简单的修改即可达到此目的。
2015-11-10 17:10:42
7799
原创 坑爹的Spring数据源——自动提交事务
记一次数据源的自动提交事务带来的烦恼,并通过分析找到JBoss JNDI数据源默认自动提交事务的解决方案
2015-11-10 15:48:53
11741
原创 JDK并发工具类源码学习系列——ConcurrentLinkedQueue
ConcurrentLinkedQueue是一个基于链接节点的无界线程安全队列,它采用先进先出的规则对节点进行排序,当我们添加一个元素的时候,它会添加到队列的尾部,当我们获取一个元素时,它会返回队列头部的元素。它采用了“wait-free”算法来实现,该算法在Michael & Scott算法上进行了一些修改, Michael & Scott算法的详细信息可以参见[参考资料一]
2015-10-30 09:51:28
1919
原创 JDK并发工具类源码学习系列——ConcurrentHashMap
欢迎阅读原文:JDK并发工具类源码学习系列——ConcurrentHashMap 作为JDK并发工具类源码学习系列的第一个被分析的类,ConcurrentHashMap类在我的开发过程中经常被使用。个人觉得如果在共享一个Map时,如果无法判断是否需要加锁,那么就干脆直接使用ConcurrentHashMap,即能保证并发安全,同时性能也不会有太多下降,因为ConcurrentHashMap可实现无
2015-10-26 17:46:58
2248
原创 详解原码、反码、补码——深入理解补码
学过计算机原理的人都知道原码、反码、补码,但是有多少人知道为什么会有这三种码呢,这三种码又是用来干嘛的呢。 众所周知,在计算机的世界只有01,那么显然所有的数都得转成二进制,这样计算机才能够理解。如何将一个十进制的数转成二进制就不说了,说下原码,正数的原码就是十进制转成二进制得到的二进制值,而负数是对应的正数转成二进制得到的二进制值,然后将最高位(符号位)置为1表示这是一个负数,如-10:10
2015-09-29 12:22:19
17129
原创 使用Apache Commons CLI开发命令行工具
本文简单介绍了如何使用Apache Commons CLI构建一个简单实用的命令行工具。
2015-09-17 20:03:44
6577
原创 几种常用JSON库性能比较
JSON不管是在Web开发还是服务器开发中是相当常见的数据传输格式,一般情况我们对于JSON解析构造的性能并不需要过于关心,除非是在性能要求比较高的系统。 目前对于Java开源的JSON类库有很多种,下面我们取三个常用的JSON库进行性能测试对比,同时根据测试结果分析如果根据实际应用场景选择最合适的JSON库。 四个JSON类库分别为:Gson,FastJson,Jackson,Json-lib。
2015-09-01 17:15:28
26825
原创 排序算法系列——八大排序算法对比分析
本系列最后一篇,综合分析下前面介绍的八种排序算法的效率,以及各自的适用情况。 通知实际测试比较各排序算法的效率,并分析各个排序算法的适用场景。
2015-08-21 19:14:48
3679
1
原创 排序算法系列——基数排序
基数排序不同于其他的七种排序算法,它是基于一种分配法,而非比较。基数排序属于“分配式排序”(distribution sort),基数排序法又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用。它的灵感来自于队列(Queue),它最独特的地方在于利用了数字的有穷性(阿拉伯数字只有0到9的10个)。
2015-08-21 12:05:09
1780
原创 排序算法系列——归并排序
归并排序的核心思想同上一篇介绍的快速排序,都是采用了分治法的思想。其基本思想是将一个待排序序列,划分成两个子序列,然后将这两个子序列排好序之后合并,并递归的将子序列划分为更小的子序列,一直到只有一个元素的子序列,然后自底向上两两合并。
2015-08-20 13:42:48
1056
原创 排序算法系列——快速排序
快速排序同冒泡排序,是交换排序的一种。快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。快速排序的时间复杂度是O(nlogn),比其他O(n^2)的排序算法快很多,不过实现起来还是有一定难度的。 分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问
2015-08-19 17:35:39
1405
原创 排序算法系列——冒泡排序
冒泡排序是交换排序的一种,其思想是从序列头部开始逐步往后遍历,每次遍历比较相邻两个元素,如果顺序不对则交换,n-1次遍历之后序列就完成了排序。
2015-08-18 11:31:26
854
原创 排序算法系列——堆排序
堆排序同直接选择排序一样是选择排序的一种。堆排序是借助一种数据结构——堆来完成排序,堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。 什么是堆: 关于二叉树这里就不叙述了。堆(二叉堆)可以视为一棵完全的二叉树,完全二叉树的一个“优秀”的性质是,除了最底层之外,每一层都是满的,这使得堆可以利用数组来表示(普通的一般的二叉树通常用链表作为基本容
2015-08-14 18:39:22
1097
原创 排序算法系列——直接选择排序
前面两篇介绍了两种插入排序算法:直接插入排序和希尔排序。这篇介绍选择排序的一种:直接选择排序。从名字就可以看出直接选择排序与直接插入排序很相似,两者相同点在与都是将待排序序列分成有序区和无序区两部分,不同之处在于直接插入排序是从无序区选出一个插入到有序区合适的位置,而直接选择排序是从无序区选出最小的一个插入到有序区尾部,使得有序区保持有序。 基本思想: 一组待排序的数据,首先将其划分成两部分,一
2015-08-13 20:08:51
987
原创 排序算法系列——希尔排序
希尔排序同之前介绍的直接插入排序一起属于插入排序的一种。希尔排序算法是按其设计者希尔(Donald Shell)的名字命名,该算法由1959年公布,是插入排序的一种更高效的改进版本。它的作法不是每次一个元素挨一个元素的比较。而是初期选用大跨步(增量较大)间隔比较,使记录跳跃式接近它的排序位置;然后增量缩小;最后增量为 1 ,这样记录移动次数大大减少,提高了排序效率。希尔排序对增量序列的选择没有严格规
2015-08-13 10:55:23
1130
原创 排序算法系列——直接插入排序
直接插入排序与希尔排序一起属于插入排序的一种。插入适合于针对小数据量进行排序,当数据量很大时插入排序的效率相对其他排序会较低,因为他的时间复杂度是0(n2)(下面会进行分析)。基本思想:一组待排序的数据,首先将其划分成两部分,一部分是已排好序的,另一部分是待排序的,然后依次从待排序部分取出一个数插入到已排序部分的适当位置,保证第一部分始终是已排好序的,等待排序部分全部取出放入已排序部分之后整个排序
2015-08-12 16:41:56
1511
原创 一个简单的二叉查找树实现
/** * <p> * 二叉树 * </p> * * @author Vicky * @date 2015-8-10 */class BSTree { private Node root; private int num;// 节点数量 private int index;// 用于遍历 public BSTree() { super(
2015-08-10 16:17:49
1039
原创 Web容器自动对HTTP请求中参数进行URLDecode处理
在Java中也许很多人都没有注意到当我们发送一个http请求给时,如果附带的参数被URLEncode之后,到达web容器之后,开发者获取到的参数值会自动变成了encode之前的值。这是一个很好的特点,开发者完全可以忽略http的参数是否需要decode这种事,但是decode到底是在什么发生的呢?
2015-06-05 14:19:54
20533
2
原创 实现一个支持正则匹配的Filter以及Spring管理Filter遇到的问题
实现一个可支持白名单和黑名单url正则匹配的Filter,同时解决Spring管理Filter遇到的生命周期的问题。
2015-05-14 00:02:42
6081
转载 Java 6 JVM参数选项大全(中文版)
作者:Ken WuEmail: ken.wug@gmail.com转载本文档请注明原文链接 http://kenwublog.com/docs/java6-jvm-options-chinese-edition.htm! 本文是基于最新的SUN官方文档Java SE 6 Hotspot VM Options 编写的译文。主要介绍JVM中的非稳态选项及其使用说明。为了让读者明
2014-12-16 12:52:59
694
原创 算法系列:PageRank算法的MapReduce实现
首先简单介绍PageRank的算法公式:(图片来源:http://en.wikipedia.org/wiki/Page_rank)PR(A)即A的PageRank值;d为阻尼因子,一般设为0.85;L(B)即B网站所有的出链数量(即B网站内的所有链接的数量)。所以公式的意义是:A的PageRank值=(1-d)+d*(链接到A的所有网站的PR值/该网站的所有出链数量之和)。这里首次计算
2014-03-01 17:28:09
3547
3
原创 FairScheduler的任务调度机制——assignTasks(续)
上一篇文章浅析了FairScheduler的assignTasks()方法,介绍了FairScheduler任务调度的原理。略过了最后一步通过JobScheduler获取Task时调用JobInProgress的五个方法:obtainNewNodeLocalMapTask(),obtainNewNodeOrRackLocalMapTask(),obtainNewMapTask(),obtainNe
2013-12-15 20:49:47
2088
原创 FairScheduler的任务调度机制——assignTasks
本文简单介绍FairScheduler在进行任务调度时的方式,如果选择合适的Job,以及如何选择合适的Task。Hadoop有三种不同的任务调度策略(自带的FIFO,以及第三方的FairScheduler和CapacityScheduler),本文介绍的是FairScheduler的调度方式。
2013-12-11 00:33:02
4365
原创 Hadoop1.2.1源码解析系列:JT与TT之间的心跳通信机制——命令篇
简单介绍Hadoop心跳机制中JT对TT下达的五种命令:ReinitTrackerAction,KillTaskAction,KillJobAction,CommitTaskAction,LaunchTaskAction。TT在接收到每个命令时的处理方式都是不一样的,这里简单介绍了每个命令的含义,以及JT如何下达每个命令的,以及TT在接收到命令时的处理方式是什么。
2013-12-07 22:17:07
2168
原创 Hadoop1.2.1源码解析系列:JT与TT之间的心跳通信机制——JT篇
上一篇浅析了Hadoop心跳机制的TT(TaskTracker)方面,这一篇浅析下JT(JobTracker)方面。我们知道心跳是TT通过RPC请求调用JT的heartbeat()方法的,TT在调用JT的heartbeat回收集自身的状态信息封装到TaskTrackerStatus对象中,传递给JT。下面看看JT如何处理来自TT的心跳。
2013-12-05 00:36:12
3898
1
原创 Hadoop1.2.1源码解析系列:JT与TT之间的心跳通信机制——TT篇
JobTracker与TaskTracker之间的通信机制——心跳机制,是MapReduce中一个重要的知识点,了解该方法可以更好地了解JobTracker如何判断一个TaskTracker是否或者,以及如何获取每个TaskTracker的资源使用情况,以及如何为一个TaskTracker分配任务。
2013-12-03 23:37:04
3449
Spring如何实现针对非单例的Controller进行AOP代理
2017-01-07
学习struts convention报错,搞不定,求支援
2015-03-23
TA创建的收藏夹 TA关注的收藏夹
TA关注的人