Java源码
阅读源码,分析源码
xinxisimple
这个作者很懒,什么都没留下…
展开
-
19-ArrayBlockingQueue 源码解析(队列)
注:源码系列文章主要是对某付费专栏的总结记录。如有侵权,请联系删除。1 整体架构1.1 类注释有界的阻塞数组,容量一旦创建,后续大小无法修改;元素时有顺序的,按照先入先出进行排序,从队尾插入数据,从队头拿数据;队列满时,往队列中 put 数据会被阻塞,队列为空,往队列中拿数据也会被阻塞。从类注释上可以看出 ArrayBlockingQueue 和一般的数组结构的类不太一样,是不...原创 2020-04-30 16:27:25 · 162 阅读 · 0 评论 -
18-LinkedBlockingQueue 源码解析(队列)
注:源码系列文章主要是对某付费专栏的总结记录。如有侵权,请联系删除。1 整体架构LinkedBlockingQueue 中文叫做链表阻塞队列,从命名上就知道其底层数据结构是链表,并且队列是可阻塞的。1.1 类图从类图我们大概可以看到两条路径:AbstractQueue -> AbstractCollection -> Collection -> Iterable...原创 2020-04-29 18:39:16 · 243 阅读 · 0 评论 -
17-并发 List、Map 源码面试题(并发集合)
注:源码系列文章主要是对某付费专栏的总结记录。如有侵权,请联系删除。并发 List 和 Map 是技术面时经常问到的问题,问的问题也比较深入,有很多问题都是面试官自创的,市面上找不到,所以说通过背题的方式,这一关大部分是过不了的,只有我们真正理解了 API 内部的实现,阅读过源码,才能自如应对各种类型的面试题。1 CopyOnWriteArrayList 相关1.1 和 ArrayLis...原创 2020-04-26 19:41:06 · 355 阅读 · 0 评论 -
16-ConcurrentHashMap 源码解析和设计思路(并发集合)
注:源码系列文章主要是对某付费专栏的总结记录。如有侵权,请联系删除。1 结构ConcurrentHashMap 的底层数据结构和方法的实现细节和 HashMap 大体一致,但两者在类结构上却没有任何关联,如下类图:看 ConcurrentHashMap 的源码,我们会发现很多方法和代码和 HashMap 很相似,那可能会产生疑问,为什么不继承 HashMap 呢?继承的确是个好办法,但...原创 2020-04-22 17:06:49 · 212 阅读 · 0 评论 -
15-CopyOnWriteArrayList 源码解析和设计思路(并发集合)
注:源码系列文章主要是对某付费专栏的总结记录。如有侵权,请联系删除。在 ArrayList 的类注释上,JDK 提醒我们,如果要把 ArrayList 作为共享变量的话,是线程不安全的,推荐我们使用 Collections.synchronizedList 方法,其实 JDK 还提供了另外一种线程安全的 List,叫做 CopyOnWriteArrayList,这个 List 具有以下特征:...原创 2020-03-10 10:40:18 · 224 阅读 · 0 评论 -
14-简化工作:Guava 中 Lists、Maps 实际工作运用和源码(集合)
注:源码系列文章主要是对某付费专栏的总结记录。如有侵权,请联系删除。在日常工作中,我们经常会使用一些第三方的 API 来简化我们的工作,Guava 就是其中的一种,Guava 是 Google 开源的技术框架,使用率高,社区活跃度也高。源码地址:https://github.com/google/guava1 运用工厂模式进行初始化在集合类初始化方面,Guava 比 Java 原生的 ...原创 2020-03-06 16:58:42 · 326 阅读 · 0 评论 -
13-差异对比:集合在 Java 7 和 8 有何不同和改进(集合)
注:源码系列文章主要是对某付费专栏的总结记录。如有侵权,请联系删除。略。------------------------------------- END -------------------------------------原创 2020-03-06 11:35:23 · 108 阅读 · 0 评论 -
12-彰显细节:看集合源码对我们实际工作的帮助和应用(集合)
注:源码系列文章主要是对某付费专栏的总结记录。如有侵权,请联系删除。1 集合类图从集合类图中,我们可以看出以下几点:每个接口做的事情非常明确,比如 Serializable 只负责序列化,Cloneable 只负责拷贝,Map 只负责定义 Map 的接口,整个图看起来虽然接口众多,但职责都很清晰;复杂功能通过接口的继承实现,比如 ArrayList 通过实现了 Serializab...原创 2020-03-06 11:22:28 · 230 阅读 · 0 评论 -
11-HashSet、TreeSet 源码解析和面试题(集合)
注:源码系列文章主要是对某付费专栏的总结记录。如有侵权,请联系删除。HashSet、TreeSet 两个类是在 Map 的基础上组装起来的类,我们学习的侧重点,主要在于 Set 是如何利用 Map 现有的功能,来达成自己的目的的,也就是说如何基于现有功能进行创新,然后再看看一些改变的小细节。1 HashSet1.1 类注释底层实现基于 HashMap,所以迭代时不能保证按照插入顺序,...原创 2020-03-04 20:51:17 · 788 阅读 · 0 评论 -
10-Map 相关面试题(集合)
注:源码系列文章主要是对某付费专栏的总结记录。如有侵权,请联系删除。Map 在面试中,占据了很大一部分的面试题,其中以 HashMap 为主,这些面试题目有的可以说清楚,有的很难说清楚,如果是面对面面试的话,建议画一画。1 Map 整体数据结构类问题1.1 说一说 HashMap 底层数据结构答:HashMap 底层是 数组 + 链表 + 红黑树 的数据结构,数组的作用主要是方便快速查...原创 2020-03-04 15:09:54 · 794 阅读 · 0 评论 -
09-LinkedHashMap 核心源码分析(集合)
注:源码系列文章主要是对某付费专栏的总结记录。如有侵权,请联系删除。1 LinkedHashMap 整体架构HashMap 是无序的,TreeMap 可以按照 key 进行排序,那有木有 Map 是可以维护插入的顺序的呢?接下来我们看看 LinkedHashMap。LinkedHashMap 本身是继承 HashMap 的,所以它拥有 HashMap 的所有特性,在此基础上,还提供了两大...原创 2020-03-03 20:53:59 · 139 阅读 · 0 评论 -
08-TreeMap 核心源码解析(集合)
注:源码系列文章主要是对某付费专栏的总结记录。如有侵权,请联系删除。1 知识储备在了解 TreeMap 之前,我们来看看日常工作中排序的两种方式,作为我们学习的基础储备,两种方式的代码如下:@Dataclass Entry implements Comparable<Entry> { private final Integer id; Entry(Inte...原创 2020-03-02 11:56:50 · 165 阅读 · 0 评论 -
07-HashMap 源码解析(集合)
注:源码系列文章主要是对某付费专栏的总结记录。如有侵权,请联系删除。整体架构HashMap 底层的数据结构主要是:数组 + 链表 + 红黑树。其中当链表的长度大于 8 时,链表就会转化成红黑树,当红黑树的大小小于 6 时,红黑树会转化成链表,整体的数据结构如下:图中左边竖着的是 HashMap 的数组结构 table,数组的元素可能是单个 Node,也可能是个链表,也可能是个红黑树,比...原创 2020-03-01 16:51:06 · 137 阅读 · 0 评论 -
06-List 相关面试题(集合)
注:源码系列文章主要是对某付费专栏的总结记录。如有侵权,请联系删除。1 说说你对 ArrayList 的理解?很多面试官喜欢这样开头,考察面试者对 ArrayList 有没有总结经验,介于 ArrayList 内容很多,建议先回答总体架构,再从某个细节出发最为突破口,比如:ArrayList 底层数据结构是数组,其 API 都做了一层对数组底层访问的封装,比如说 add 方法的过程是 …...原创 2020-03-01 00:24:02 · 600 阅读 · 0 评论 -
05-LinkedList 源码解析(集合)
注:源码系列文章主要是对某付费专栏的总结记录。如有侵权,请联系删除。LinkedList 适用于集合元素先入先出和先入后出的场景,在队列源码中被频繁使用,面试也经常被问到。1 整体架构LinkedList 底层数据结构是一个双向链表,整体结构如下图所示:上图代表了一个双向链表结构,链表中的每个节点都可以向前或向后追溯,几个概念如下:链表每个节点叫做 Node,Node 有 pre...原创 2020-02-29 12:20:19 · 178 阅读 · 0 评论 -
04-ArrayList 源码解析和设计思想(集合)
注:源码系列文章主要是对某付费专栏的总结记录。如有侵权,请联系删除。1 整体架构ArrayList 整体架构比较简单,就是一个数组结构,如下图:图中展示的是长度为 10 的数组,从 1 开始计数,index 表示数组的下标,从 0 开始计数,elementData 表示数组本身,源码中除了这两个概念,还有三个基本概念:DEFAULT_CAPACITY 表示数组的初始大小,默认是 1...原创 2020-02-27 15:40:24 · 307 阅读 · 0 评论 -
03-Arrays、Collections、Objects 常用方法源码学习(基础)
注:源码系列文章主要是对某付费专栏的总结记录。如有侵权,请联系删除。1 工具类通用的特征工具类通用的特征写法:构造器必须是私有的。这样的话,工具类就无法被 new 出来,因为工具类在使用的时候,无需初始化,直接使用即可,所以不会开放出构造器。工具类的工具方法必须被 static、final 关键字修饰。这样的话就可以保证方法不可变,并且可以直接使用,非常方便。注意:尽量不要在工具...原创 2020-02-26 16:25:56 · 150 阅读 · 0 评论 -
02-Java常用关键字理解(基础)
注:源码系列文章主要是对某付费专栏的总结记录。如有侵权,请联系删除。1 static1.1 静态变量静态变量:又称为类变量,也就是说这个变量属于类,类所有的实例都共享静态变量,可以直接通过类名来访问它。静态变量在内存中只存在一份;实例变量:每创建一个实例就会产生一个实例变量,它与该实例共生共死。public class StaticExample { // 静态变量 ...原创 2020-02-25 18:26:39 · 166 阅读 · 0 评论 -
01-String、Long源码解析和面试题(基础)
1 String1.1 不可变性不可变指的是类值一旦被初始化,就不能再改变了,如果被修改,将会是新的类。例如:String str = "hello";str = "world";从代码上看,str 的值好像被修改了,但从 debug 的日志来看,其实 str 的内存地址已经被修改了,也就是说 str = "world" 这个看似简单的赋值,其实已经把 str 的引用指向了新的 Str...原创 2020-02-25 10:56:29 · 214 阅读 · 0 评论