大雁小鱼的博客

Talk is cheap,show me your code please.

Concurrenthashmap源码解析(jdk1.7)

ConcurrentHashMap源码解析(JDK1.7) ConcurrentHashMap和HashMap差不多,但它是线程安全的,支持并发操作,所以实现上稍微复杂一些。 整个ConcurrentHashMap由一个一个Segment组成,在很多地方这个词被翻译成“段”、“槽”。简单理解,ConcurrentHashMap是一个Segment数组,Segment通过 继承Reentr...

Hashmap源码解析(jdk1.8)

HashMap源码解析(JDK1.8) Java8对HashMap进行了一些修改,最大的不同在于使用了红黑树部分情况下替代了链表,所以它是由数组、链表、红黑树构成的。 我们知道,在Java7中,HashMap查找数据的时候根据hash值快速定位到数组的具体下标,接着顺着链表一个一个比对下去直到找到要找的数据为止,时间复杂度取决于链表长度,如果链表长度很长的话 非常影响查找性能。 为了降...

线程池

线程池知识点概要 概要 线程池的主要作用是避免程序创建过多的线程来减少系统资源的消耗和竞争,有时也可以通过使用线程池避免不必要的线程创建开销,在这一点上和连接池很相似。 线程池由2部分构成,任务队列和工作线程,工作线程负责具体的线程处理任务,当任务数量大于实际的工作线程数量时,线程池会将多余的任务放入任务队列中。 创建线程的方法 创建线程共有2种方法 1、继承Thread...

Hashmap源码解析(jdk1.7)

HashMap源码解析(JDK1.7) HashMap是基于Map接口的非同步实现,允许使用null键和null值。HashMap其实是一个“散列的链表”,即数组和链表的结合体。 HashMap底层是一个数组结构,数组中的每一项又是一个链表。 这里附上一张JDK1.7的HashMap的结构图 添加一个元素 下面是向HashMap中put一个元素时的代码 public V put...

Arraylist源码剖析

ArrayList源码剖析 ArrayList是List接口的可变数组实现,底层是以数组形式实现的,如果数组大小不够了,它会自动扩容。本博客对核心的函数进行分析,对一些边角的、大家容易理解的函数不做分析。 首先它的内部是一个数组,存储的是Object对象 transient Object[] elementData; 其次,它也会有容量不够的时候,在加入一个元素之前,它会判断...

秒杀系统设计概要

秒杀系统设计思路 在秒杀系统设计中,最主要难点在于解决高并发下的并发请求抢锁问题。我这里主要有几种方案。 方案1 乐观锁 在DB“库存”记录中维护一个版本号,在更新“库存”操作进行前先去DB中获取当前版本号,在更新库存的事务提交时,检查该版本号是否被其他操作修改。如果版本没被修改,则提交事务,且版本号加1;如果版本号已经被其他事务修改,则回滚事务,并报告给上层。 这个方案解决了“并发请求...

摆动排序

摆动排序 给定一个无序的数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]… 的顺序。要求时间复杂度是O(N)。 示例: 输入: nums = [1, 5, 1, 1, 6, 4] 输出: 一个可能的答案是 [1, 4, 1, 5, 1, 6] 思路分析 为了方便说明,我们假定题目中所求的序列为C。 题目中要求摆...

字符串算法总结

字符串算法总结 题目1: 判定一个字符串是不是回文串。回文是一个正读和反读都相同的字符串,例如“ABA”是回文,而“ABC”不是。 思路:双指针算法,一个指针指向头,另一个指针指向尾,两指针不断靠拢,过程中只要判定有一个不相等,就不是回文,否则就是回文。 题目2: 寻找一个字符串中最长回文串。回文是一个正读和反读都相同的字符串,例如“ABA”是回文,而“ABC”不是。 解决方案 方法#...

二分法总结

二分法总结 二分法是一种常见的算法思路,其根本的思想是:任意一个值可以将全部数据分成2拨,A或者B。算法首先随机选定一个值,判定它与目标值的关系,如果符合目标,则直接输出结束,如果不符合,则根据环境信息,可以得出目标值存在于其中的某一拨中,要么A要么B,于是缩小范围继续查找即可最终找到目标值。 例子1: 在一个有序的整数数组中查找某个给定的整数。 关键点分析:对于任意一个数字C,总可以将一...

常见排序算法总结

快速排序 快速排序是一种相比冒泡排序更加高效的排序算法。 参考网址:http://www.cnblogs.com/foreverking/articles/2234225.html 参考网址:http://developer.51cto.com/art/201403/430986.htm 最坏时间复杂度: 平均时间复杂度: 常见场景 海量数据 一年的全国高考考生人数为50...