入门
文章平均质量分 86
入门知识汇总
源码猎人
注重细节,深究源码,归纳总结,复习回顾,学习成长。这里有源码剖析、框架详解、中间件封装更有感悟心得。专注于分析主流技术JDK、spring、springMVC、springBoot、Springcloud、dubbo、zookeeper、orm插件、MQ、分库分表中间件、数据库等。
展开
-
框架 - Mybatis 源码一步步深入(三)
上一章我们大概了解了SqlSessionFactoryBuilder和Configuration两个类。这一章我们主要了解XMLConfigBuilder类,它是Mybatis配置文件解析入口。原创 2021-06-05 10:09:24 · 196 阅读 · 1 评论 -
最快搞懂JAVA动态代理的方法
在JAVA中,代理模式应用非常广泛,在很多框架中或平时业务中都经常使用,动态代理其实没什么神秘的,只要搞懂静态代理,在深入思考下,动态代理马上就能搞明白。原创 2021-06-04 11:03:08 · 212 阅读 · 1 评论 -
了解多线程前还是先了解一下Unsafe内存操作不安全类
Java是面向对象语言,在使用Java编程时,大多数情况下都不会直接操作内存,而且Java也不提倡直接操作内存,但是Java中到底有没有可以直接操作内存的工具类呢?有!Java中提供Unsafe类可以用来来直接操作内存。原创 2021-06-04 10:58:38 · 246 阅读 · 0 评论 -
AtomicInteger 深入讲解
JDK的atomic包中提供了一些简单原子操作类,基本上都是基于volatile+CAS封装,既保证了性能又保证了线程安全。例如平时经常用到的i++多线程场景就可以用AtomicInteger去解决,有ABA强需求的需要谨慎使用,后面会单独写一篇。原创 2021-06-04 10:57:19 · 396 阅读 · 1 评论 -
忽悠面试官还有哪种Map比WeakHashMap更好
WeakHashMap的键是弱键。在 WeakHashMap 中,当某个键不再正常使用时,会被从WeakHashMap中被自动移除。更精确地说,对于一个给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为可终止的,被终止,然后被回收。某个键被终止时,它对应的键值对也就从映射中有效地移除了。原创 2021-06-04 10:55:42 · 259 阅读 · 0 评论 -
经常使用的PriorityQueue优先级队列你真的了解它吗?
PriorityQueue 一个基于优先级的无界优先级队列。优先级队列的元素按照其自然顺序进行排序,或者根据构造队列时提供的 Comparator 进行排序,具体取决于所使用的构造方法,每次出队的元素都是优先级最高的元素。该队列不允许使用 null 元素也不允许插入不可比较的对象(没有实现Comparable接口的对象)。原创 2021-06-04 10:53:30 · 104 阅读 · 0 评论 -
再也不怕面试官问DelayQueue延时队列了
DelayQueue 是JDK中提供的延时队列,内部封装优先级队列,并且提供空阻塞功能。DelayQueue中所有元素必须实现Delayed接口getDelay方法,此方法返回剩余有效时间。原创 2021-06-04 10:52:13 · 159 阅读 · 0 评论 -
TreeMap源码深究
TreeMap集合是基于红黑树(Red-Black tree)的 NavigableMap实现。该集合最重要的特点就是可排序,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序。Tree两张实现排序方法,一种方式是实现java.lang.Comparable接口,并实现其compareTo()方法。第二种方式是单独写一个类去实现java.util.Comparator接口,并实现compare()方法,然后创建实例并作为TreeMap的构造方法参数进行传参原创 2021-06-04 10:51:25 · 150 阅读 · 0 评论 -
ConcurrentLinkedQueue 线程安全链表队列
ConcurrentLinkedQueue 是线程安全的非阻塞队列,内部是单向链表。ConcurrentLinkedQueue 使用CAS机制保证线程安全,而LinkedBlockingQueue使用两个lock保证线程安全,ConcurrentLinkedQueue 性能比LinkedBlockingQueue高很多。需要注意的是ConcurrentLinkedQueue 的头节点和尾节点都具有滞后性,直接读取不应当准确,不能直接使用,一般需要遍历。原创 2021-06-04 10:50:54 · 1467 阅读 · 0 评论 -
HashTable 看这一篇就够了
Hashtable和HashMap一样也是散列表,存储元素也是键值对,Hashtable继承于Dictionary类(Dictionary类声明了操作键值对的接口方法),实现Map接口(定义键值对接口),Hashtable大部分类用synchronized修饰,证明Hashtable是线程安全的原创 2021-06-04 10:48:23 · 340 阅读 · 0 评论 -
ArrayDeque 双向数组队列
优先级队列只支持从一段取数据,内部结构是数组,但是必须符合二叉堆,每次取数据都会伴随上移下移,如果我们元素不不需要排序,有没有更好的队列呢?ArrayDeque 就能满足这个需要,并且它可以在两端方数据和取数据,内部也是用数组实现。原创 2021-06-03 09:37:10 · 263 阅读 · 0 评论 -
ConcurrentLinkedDeque非阻塞双向队列
ConcurrentLinkedDeque是线程安全的非阻塞队列,内部结构跟LinkedBlockingQueue一样使用双向链表,最大的区别就是LinkedBlockingDeque使用CSA原则操作,没有用lock。使用它的时候一样需要注意,头节点和尾节点不保证一定是头和尾。原创 2021-06-03 09:34:56 · 760 阅读 · 0 评论 -
你用过PriorityBlockingQueue 优先级阻塞队列吗?
PriorityBlockingQueue 是优先级阻塞队列,虽然我们称它为无界,实际上它也是有界的。它跟PriorityQueue 最大的区别在于他是线程安全的,在入队出队时使用同一把锁,在扩容时先解锁,再使用cas原子操作,再重新获取锁。原创 2021-06-03 09:34:06 · 546 阅读 · 0 评论 -
聊聊LinkedBlockingQueue链表阻塞队列
LinkedBlockingQueue 是一个基于链表的有限队列(理论上它是无限的)。只支持一段入队,另一端出队。无阻塞对应LindedList,它们除了一个线程安全一个线程不安全以外,最大的区别是LinkedList可以放null值。原创 2021-06-03 09:29:02 · 694 阅读 · 0 评论 -
为什么你说的AQS,面试官总不满意,看完这篇就明白了
AQS听起来很高大上的样子,实际上它就是AbstractQueuedSynchronizer类的缩写,它是构建锁或者其他同步组件的基础框架。在基于AQS构建的同步器中,只能在一个时刻发生阻塞,从而降低上下文切换的开销,提高了吞吐量。同时在设计AQS时充分考虑了可伸缩行,因此J.U.C中所有基于AQS构建的同步器均可以获得这个优势。原创 2021-06-03 09:26:47 · 162 阅读 · 1 评论 -
又被问到ArrayBlockingQueue?
ArrayBlockingQueue是一个由数组结构组成的有界队列。此队列按照先进先出的顺序进行排序。支持公平锁和非公平锁,默认非公平锁。原创 2021-06-03 09:25:15 · 239 阅读 · 0 评论 -
深究SynchronousQueue 线程通信阻塞队列
SynchronousQueue 没有长度,每一个入队操作必须对应一个出队操作,或者每一个出队操作必须对应一个入栈操作,否则阻塞。SynchronousQueue内部提供两种模式TransferStack非公平模式(LIFO)和TransferQueue公平模式(FIFO)。原创 2021-06-03 09:23:16 · 322 阅读 · 0 评论 -
ConcurrentHashMap你到底了解多少?
ConcurrentHashMap是一个经常被使用的数据结构,它在线程安全的基础上提供了更好的写并发能力。ConcurrentHashMap跟Map有很大的不同,内部大量使用volatile和CAS等减少锁竞争,当然代码也比HashMap难理解的多,本章基于JDK1.8对ConcurrentHashMap做基本介绍,后续章节一步步深入。原创 2021-06-03 09:20:06 · 226 阅读 · 0 评论 -
LinkedTransferQueue 高效阻塞无界链表队列
LinkedTransferQueue 是一个高效阻塞无界链表队列。和SynchronousQueue.TransferQueue(公平模式)相比,它是可以统计长度,可以进行查询的;和LinkedBlockingQueue相比,它拥有更高的性能(使用CAS自旋);和ConcurrentLinkedQueue相比,它拥有阻塞功能。原创 2021-06-03 09:16:59 · 562 阅读 · 0 评论 -
Redisson 分布式锁超简封装
Redisson是一个在Redis的基础上实现的Java驻内存数据网格。它几乎提供了Redis所有工具,不仅封装Redis底层数据结构,而且还提供了很多Java类型映射。Redisson支持redis单实例、redis哨兵、redis cluster、redis master-slave等各种部署架构。Redisson 虽然功能强大但是它依然不能解决分布式锁有可能锁不住的情况,这不是Redisson或者Redis的问题(目前遇到这种问题只能人工干预)。原创 2021-06-02 14:44:04 · 779 阅读 · 1 评论 -
我是怎么跟面试官聊Collection线性集合的
数据结构是带有结构特性的数据元素的集合。在应用程序中,提炼出常用集合,并对其定义相应的算法或抽象并封装。简单地说数据结构是以某种特定的布局方式存储数据的容器。JDK已经提供了很多常用集合,在开发过程中我们可以根据业务很方便的创建集合对象。那么了解这些集合就非常有必要了。原创 2020-06-07 20:29:32 · 970 阅读 · 0 评论 -
面试官问:你熟悉哪些HashMap的封装扩展类?
LinkedHashMap、HashSet、LinkedHashSet都扩展了HashMap。它们是HashMap的二次封装,LinkedHashMap加入了一个单独链表存所有数据,并且完整保留HashMap结构。 HashSet 实际上只用到了HashMap的键,值为常量;LinkedHashSet 继承HashSet,并且和LinkedHashMap一样内部维护一个链表。原创 2020-06-16 22:05:47 · 2894 阅读 · 0 评论 -
面试官问:除了ArrayList你还看过哪些List源码
LinkedList是特殊List,为什么说它特殊?从类图上就可以看出来,它是List、Queue(Deque继承Queue)的实现,相比ArrayList多实现了Deque接口而少实现了RandomAccess接口,从名字就可以看除内部使用链表结构;Vector 向量是线程安全的动态数组,跟ArrayList很相似,JDK1.0中添加Vector类,Vector一样可以维护插入顺序,但Vector包含了许多传统的方法,这些方法不属于集合框架;Stack栈是一种只能在一端进行插入或删除操作的线性表,先进后出原创 2020-06-16 22:58:26 · 591 阅读 · 0 评论 -
为什么面试官说你看了一个假的HashMap
HashMap的主干是一个Entry数组,Entry是HashMap的基本组成单元,每一个Entry包含一个key-value键值对,这谁都知道,甚至我们都知道HashMap的put过程和扩容过程,但是我们在面试时,都说对了为啥面试官还是不满意呢?因为这些都是一个程序员最起码应该知道的,面试官在意的是你是否真的明白HashMap核心思想以及内部算法。原创 2020-06-14 22:26:05 · 681 阅读 · 0 评论 -
我是怎么跟面试官聊Map集合的
Map是我们常用集合之一,它用于保存具有映射关系的数据。Map集合中的每一个元素都是由键值对构成。Map中所有的键不能重复,但是值可以重复。本章主要针对Map 框架和源码做讲解,并且整理了部分Map常见面试题一起分享。原创 2020-06-14 13:05:49 · 2428 阅读 · 0 评论 -
看完这一篇再也不怕面试官问ArrayList了
ArrayList是一个动态数组,它不是线程安全的。ArrayList几乎拥有数组所有优点,例如元素有序,索引访问等;并且一般情况下它还不会越界,添加元素时它能动态扩容。平时工作中ArrayList被我们广泛应用,本章详细介绍ArrayList原代码。原创 2020-06-14 16:23:57 · 1000 阅读 · 0 评论 -
聊聊你不知道的Java变量转型
Java变量分为类变量、实例变量、局部变量。在Java语言中,所有的变量在使用前必须声明。定义变量就是要告诉编译器这个变量的数据类型,这样编译器才知道需要分配多少空间给它,以及它能存放什么样的数据。在程序运行过程中空间的值是变化的,这个内存空间就成为变量。为了便于操作,给这个变量取个名字,称为变量名。原创 2020-06-05 17:28:45 · 7651 阅读 · 1 评论 -
老司机带你入门Java基础概念
Java是一门面向对象编程语言,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。Java语言不使用指针,而是引用,Java语言具有功能强大并且简单易用,Java自带内存回收器GC,使得程序员不必为内存管理而担忧。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。原创 2020-06-04 14:57:24 · 11524 阅读 · 4 评论