摘要:
本文基于JDK-8u261源码分析 相信大部分人知道AQS是因为ReentrantLock,ReentrantLock的底层是使用AQS来实现的。还有一部分人知道共享锁(Semaphore/CountDownLatch/CyclicBarrier)也是由AQS来实现的。也就是说AQS中有独占和共享两 阅读全文
摘要:
分享是价值的传递,喜欢就点个赞 引言 今天我们继续来深入的剖析类加载器的内容。上节课我们讲了类加载器的基本内容,没看过的小伙伴请加关注。今天我们继续。 什么是定义类加载器和初始化类加载器? 定义类加载器:假设我们的某一个类是由ExtClassLoader加载的,那么ExtClassLoader称为该 阅读全文
摘要:
前文传送门: Spring源码分析之预启动流程 Spring源码分析之BeanFactory体系结构 Spring源码分析之BeanFactoryPostProcessor调用过程详解 本文内容: 在IOC中,是如何通过beanDefition创建出一个bean的? 各BeanPostProcess 阅读全文
摘要:
前文传送门: Spring源码分析之预启动流程 Spring源码分析之BeanFactory体系结构 本文内容: AbstractApplicationContext#refresh前部分的一点小内容 BeanFactoryPostProcessor调用过程详解 mybatis是如何使用本节知识整合 阅读全文
摘要:
引言 从事java的小伙伴大家好,如果你是一名从事java行业的程序员,无论你是小白还是工作多年的老司机,我相信这篇文章一定会给你带来 不同程度的收货不敢说你看完我的文章从此精通jvm打遍天下无对手,但我能保证的是看完我的文章并且实践操作加以理解,至少在jvm 的这个领域碾压百分之80以上的程序员。 阅读全文
摘要:
前言 对于项目版本管理,你是否存在这样的痛点:项目分支多而杂不好管理,git log界面commit信息错乱复杂无规范,版本回退不知道选择什么版本合适……。 项目版本管理的最佳实践系列,笔者将以两篇文章的形式展开介绍(即基础篇与进阶篇)。本文为gitflow版本管理的最佳实践-基础篇。基础篇主要介绍 阅读全文
摘要:
1 冒泡排序 每次循环都比较前后两个元素的大小,如果前者大于后者,则将两者进行交换。这样做会将每次循环中最大的元素替换到末尾,逐渐形成有序集合。将每次循环中的最大元素逐渐由队首转移到队尾的过程形似“冒泡”过程,故因此得名。 一个优化冒泡排序的方法就是如果在一次循环的过程中没有发生交换,则可以立即退出 阅读全文
摘要:
Spring IOC 容器预启动流程源码探析 在应用程序中,一般是通过创建ClassPathXmlApplicationContext或AnnotationConfigApplicationContext这两个最底层子类来启动Spring IOC容器: ClassPathXmlApplication 阅读全文
摘要:
什么是BeanFactory? 提到Spring,总是让人第一时间想起IOC容器,而IOC容器的顶层核心接口就是我们的BeanFactory,如果能够理解BeanFactory的体系结构想必能让我们对Spring整体脉络有更加清晰的认知,所以,本文的探究方向主要为以下几点: BeanFactory的 阅读全文
摘要:
本文基于JDK-8u261源码分析 1 简介 ArrayList作为最基础的集合类,其底层是使用一个动态数组来实现的,这里“动态”的意思是可以动态扩容(虽然ArrayList可以动态扩容,但却不会动态缩容)。但是与HashMap不同的是,ArrayList使用的是1.5的扩容策略,而HashMa 阅读全文