自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

语雀同名:犬豪 yuque.com/qhao

语雀同名:犬豪 yuque.com/qhao

  • 博客(206)
  • 资源 (18)
  • 收藏
  • 关注

原创 Spring源码分析(十六)循环依赖3:其他场景下循环依赖分析,以及神器@Lazy懒加载解决循环依赖

spring循环依赖,其他场景下循环依赖分析,以及如何解决循环依赖情况

2022-11-06 15:06:34 1208 2

原创 Spring源码分析(十五)循环依赖2:源码分析

spring循环依赖源码分析

2022-11-06 14:22:15 465

原创 Spring源码分析(十四)循环依赖1:思路分析

spring循环依赖思路分析

2022-11-05 18:21:36 498 4

原创 Spring源码分析(十三)依赖注入源码解析5:@Resource

@Resource依赖注入源码解析

2022-10-30 16:33:29 543

原创 Spring源码分析(十二)autowire和@Autowired 依赖注入源码解析总结

依赖注入总结

2022-10-30 15:15:07 577

原创 Spring源码分析(十一)依赖注入源码解析4:DefaultListableBeanFactory#findAutowireCandidates 根据类型查找所有候选Bean

DefaultListableBeanFactory#findAutowireCandidates 根据类型查找所有候选Bean

2022-10-29 19:41:03 935

原创 Spring源码分析(十)依赖注入源码解析3:DefaultListableBeanFactory#doResolveDependency 真正开始解析依赖项

DefaultListableBeanFactory#doResolveDependency 真正开始解析依赖项

2022-10-29 15:15:01 760

原创 Spring源码分析(九)依赖注入源码解析2:AutowireCapableBeanFactory#resolveDependency 从工厂解析依赖项

AutowireCapableBeanFactory#resolveDependency 从工厂解析依赖项

2022-10-29 14:10:11 914

原创 Spring源码分析(八)依赖注入源码解析1:autowire自动注入 和 @Autowired注入

autowire自动注入、@Autowired自动注入、手动注入源码分析

2022-10-16 16:49:02 1210

原创 Spring源码分析(七)Bean生命周期源码解析5:Bean的销毁

Bean的销毁流程,包括注册销毁Bean、销毁方法触发的时机

2022-10-06 12:13:20 631

原创 Spring源码分析(六)Bean生命周期源码解析4:创建Bean实例(实例化前、实例化、实例化后、自动注入、Aware、初始化前、初始化、初始化后...)

SpringBean的生命周期流程源码分析,包含:加载类、实例化前、实例化、BeanDefinition的后置处理、实例化后、自动注入、依赖注入、属性填充、Aware、初始化前、初始化、初始化后..

2022-10-04 12:48:21 831

原创 Spring源码分析(五)Bean生命周期源码解析3:获取Bean实例(DependsOn、单例/原型/其他Scope Bean)

主要讲解Spring获取Bean实例的流程,涉及核心内容有:获取Bean规范名称、单例池获取Bean、DependsOn、单例/原型/其他Scop Bean的获取

2022-10-04 11:50:58 574

原创 Spring源码分析(四)Bean生命周期源码分析2:合并BeanDefinition、FactoryBean

Spring源码分析,Bean生命周期源码分析,合并BeanDefinition,FactoryBean

2022-10-02 22:44:43 691

原创 Spring源码分析(三)Bean生命周期源码解析1:扫描生成BeanDefinition

Spring源码分析,扫描生成BeanDefinition的流程

2022-10-02 21:53:24 1033 2

原创 Spring源码分析(二):底层架构核心概念解析

Spring源码分析

2022-09-28 22:24:17 707

原创 idea UML类图不能使用鼠标右键弹出菜单

idea工具使用问题

2022-09-25 11:14:46 553 1

原创 Spring源码分析(一):Spring底层核心原理解析

spring源码分析

2022-09-18 18:51:35 772

原创 Mysql安装【YUM方式】

操作系统:CentOS 7MySQL:5.7阿里云CentOS 镜像地址:https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.3e221b11REy9PF三、安装MySQL3.1 添加 MySQL Yum 存储库官方安装文档:https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/下载地址:https://dev.mysql.com/downloads/repo/

2022-06-10 00:15:51 5877

原创 java.lang.IllegalStateException: Expected raw type form of 业务类

一开始项目是报这样的错:...Caused by: java.lang.IllegalStateException: Expected raw type form of xxxxx业务类at org.aspectj.weaver.reflect.JavaLangTypeToResolvedTypeConverter.fromType(JavaLangTypeToResolvedTypeConverter.java:71)...发现报错的代码是在aspectjweaver 1.8.10这个包里于

2022-04-11 11:07:23 506

原创 线性表基础:栈(五)智⼒发散题

一、智⼒发散题1.1 LeetCode #636 函数的独占时间本质就是⼀道模拟题,画⼀个线段图能显著地辅助理解。任务开始时进栈,上⼀个任务暂停执⾏;任务完成时出栈,恢复上⼀个任务的执⾏。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m1P4zeil-1617202866979)(./1616825475198.png)]窍门:当碰到一个新任务启动的时候,需要把之前的时间加给上一个任务当碰到一个任务结束的时候,需要把当前的时间段加给当前任务[外链图片转存失

2021-06-21 23:44:46 232

原创 线性表基础:栈(四)经典面试题(栈结构扩展应⽤ part2)

经典面试题 - 栈结构扩展应⽤推荐刷题顺序:LeetCode #331 验证⼆叉树的前序序列化LeetCode #227 基本计算器II5. LeetCode #331 验证⼆叉树的前序序列化题目描述:序列化二叉树的一种方法是使用前序遍历。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,我们可以使用一个标记值记录,例如 #。例如,上面的二叉树可以被序列化为字符串 “9,3,4,#,#,1,#,#,2,#,6,#,#”,其中 # 代表一个空节点。给定一串以逗

2021-05-19 22:40:03 207

原创 线性表基础:栈(三)经典面试题(栈结构扩展应⽤ part1)

一、经典面试题 - 栈结构扩展应⽤1.1 LeetCode #20 有效的括号结论1:在任意⼀个位置上,左括号数量 >= 右括号数量结论2:在最后⼀个位置上,左括号数量 == 右括号数量根据上述两个结论,程序中只需要记录左括号和右括号的数量即可。⼀对括号可以等价为⼀个完整的事件。左括号可以看作事件的开始、右括号可以看作事件的结束。⽽括号序列可以看作事件与事件之间的完全包含关系。栈可以处理具有完全包含关系的问题。class Solution {public: bool isValid(

2021-05-19 20:58:36 161

原创 线性表基础:栈(二)经典面试题(栈的基本操作)

一、经典⾯试题 - 栈的基本操作1.1 LeetCode #⾯试题03.04 化栈为队利⽤两个栈来实现,⼀个输⼊栈、⼀个输出栈。输⼊栈⽤于读⼊数据。当需要输出元素时,若输出栈为空,则将输⼊栈的所有元素推送到输出栈,然后取栈顶元素;若输出栈⾮空,则输出栈顶即可。输出栈的作⽤是对已经被反转的序列进⾏⼆次反转。对此感到困惑的同学可以画图模拟⼀下。入队列就是向stack1入栈当碰到出队列动作当时候,判断stack2是否为空:stack1全部移到stack2后,出队列就出stack2的栈顶元素如果s

2021-05-05 21:45:54 266

原创 线性表基础:栈(一)基础结构、栈思维、经典实现、典型应用场景

一、基础知识1.1 基础结构栈是⼀种“先进后出”(FILO, First In Last Out)的数据结构。1.2 栈适合解决什么问题?栈思维,很重要判断括号是否合法:一种括号情况:第一个条件解释:一个变量就可以了,记录左右括号的差值即可引出思维方式:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p64RNJ8T-1617202866953)(./1616298789564.png)]+1代表多了一个“东西”,-1代表少了一个“东西”( 代表出

2021-04-18 17:00:34 279

原创 线性表基础:队列(三)智力发散题

智力发散题LeetCode #面试题 17.09 第K个数先考虑一个问题。对于初始状态{1},我们应该怎么获得后续元素呢?我们可以将{1}直接从数组中弹出,然后将他的3倍、5倍、7倍分别加入数组。然后我们选择{3, 5, 7}中的最小值3,将3从数组中弹出,将3的3倍、5倍、7倍分别加入数组。重复上述过程,直到我们得到第K个数。由于我们每次都需要获得数组的最小值,因此能动态维护当前最值的优先队列(即最大/小堆)结构可以对此过程进行优化,此时的时间复杂度是O(nlogn)。这样结束了吗?我们不妨继

2021-04-17 16:37:24 180

原创 线性表基础:队列(二)经典面试题

一、经典面试题4.1 链表复习题4.1.1 LeetCode #86 分隔链表使用两个链表,一个用于插入小于x的元素,一个用于插入大于等于x的元素,最后合并两个链表即可。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JZSdA4un-1616922450057)(./1615892104618.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HBK6Wl0Q-1616922450057)(./1615892231520.pn

2021-04-06 00:34:07 259

原创 线性表基础:队列(一)基础知识、经典实现、典型应用场景

一、队列的基础知识当前图中,这片连续的存储区可以是数组,也可以是链表(为什么连续的存储区也可以是链表,后面 LeetCode题可以看到)队列是连续的存储区,可以存储一系列的元素。是FIFO(先入先出,First-In-First-Out)结构。队列通常具有头尾指针(左闭右开区间),头指针指向第一个元素,尾指针指向最后一个元素的下一位。正常情况队列的尾指针应该是指向最后一个元素的下一位,而图中tail指针是指向尾部元素的指针队列支持(从队尾)入队(enqueue)、(从队首)出队(deque

2021-03-30 23:48:13 540

原创 线性表基础:链表及经典问题(二)经典算法题刷题(链表的反转、链表的节点删除)

紧接上一章三、经典算法题以下算法题均摘自力扣,读者可自行去力扣答题,并有详细题解,我只是简单介绍了下我的解题思路,并记录一下自己的答案,毕竟算法光看、思考是远远不够的,还需要多加练习,以下是链表相关经典算法题答题的推荐顺序:141、142、202、206、92、25、61、24、19、83、82。3.2 链表的反转3.2.1 LeetCode #206 反转链表题目描述反转一个单链表。进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?解题思路:思路1:迭代反转思.

2021-03-15 00:54:21 273

原创 线性表基础:链表及经典问题(一)链表的基础知识、典型应用场景、经典算法题刷题(链表的访问)

一、链表的基础知识1.1 链表的结构节点数据域指针域实现方式包括:地址(C语言)、下标(相对地址,数组下标)、引用(Java、JS、Python)链状结构通过指针域的值形成了一个线性结构这个图是C语言中的链表,head中只存储指针head就是C语言中的指针,在Java中相当于一个引用它本身不是一个对象,也不是一个链表节点总结:只要在相关的结构中增加了一项指针域,则该结构就可以串成一个链表结构答疑:C语言的地址一般情况下都是虚拟地址,不是物理地址

2021-03-14 23:35:06 534 3

原创 JVM原理(二)执行引擎篇(JVM程序执行流程、JIT编译器、JIT编译器优化)

一、程序执行流程1.1 执行流程图Java编译成字节码、动态编译和解释为机器码的过程分析:编译器和解释器的协调工作流程:判断是否是热点数据,不是逐条解释成机器码执行,否则一次性编译成机器码存到方法区,以后每次直接运行机器码在部分商用虚拟机中(如HotSpot),Java程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码”。为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码

2021-02-28 17:54:17 1419

原创 JVM原理(一)JVM通识、JVM架构

一、初识JVM1.1 学习JVM的目的面试重灾区,我们必须搞懂它。生产过程中,肯定会面临JVM调优相关问题,需要也必须搞懂它。打基础,想搞懂我们java赖以生存的环境长什么样子,提升对Java知识点的理解。1.2 JVM基本常识1.2.1 为什么使用JVM看下面这个图:可以看到JVM帮我们屏蔽了操作系统。与C语言的区别:C语言可以直接编译成机器码,但是编译机器码时需要知道目标操作系统,windows操作系统机器码编译之后是无法在linux系统上执行即C语言多次运行不同的操作系

2021-02-21 16:12:25 17996 3

原创 Java并发编程(二十)JUC线程池(ScheduledThreadPoolExecutor)

ScheduledThreadPoolExecutor1.1 API介绍构造线程池Executors使用 newScheduledThreadPool 工厂方法创建ScheduledThreadPoolExecutor:public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) { return new ScheduledThreadPoolExecutor(corePoolSize);}pu

2021-01-10 15:08:13 214

原创 Java并发编程(十九)JUC线程池(自定义线程池ThreadPoolExecutor)

一、自定义线程池ThreadPoolExecutor上一节我们演示了利用Executors创建了三种类型的线程池,但是实际生产环境中,我们是不会用这种方式创建线程池的,主要原因就是这些线程池用的阻塞队列没有限制容量,容易引发内存溢出的问题。首先在来回顾一下ThreadPoolExecutor构造的七个参数:1.1 ThreadPoolExecutor构造的七个参数/*** 使用给定的参数创建ThreadPoolExecutor.** @param corePoolSize 核心线程池中的核心线

2021-01-10 14:59:19 311

原创 Java并发编程(十八)JUC线程池(Executor、Callable、FutureTask、ThreadPoolExecutor)

一、Executor框架Executor框架包括3大部分:任务。也就是工作单元,包括被执行任务需要实现的接口:Runnable接口或者Callable接口;任务的执行。也就是把任务分派给多个线程的执行机制,包括Executor接口及继承自Executor接口的ExecutorService接口。异步计算的结果。包括Future接口及实现了Future接口的FutureTask类。Executor框架的成员及其关系可以用一下的关系图表示:Executor框架的使用示意图:使用步骤:创

2021-01-10 14:52:45 345

原创 Java并发编程(十七)JUC同步器工具(CyclicBarrier、Exchanger、Phaser)

一、CyclicBarrier 篱栅1.1 API介绍官方案例略isBroken:判断是否有线程等待的过程中是否被中断了,如果有就等不到每个线程都到达Barrier点CountDownLatch是一个倒数计数器,在计数器不为0时,所有调用await的线程都会等待,当计数器降为0,线程才会继续执行,且计数器一旦变为0,就不能再重置了。CyclicBarrier可以认为是一个栅栏,栅栏的作用是什么?就是阻挡前行。CyclicBarrier是一个可以循环使用的栅栏,它做的事情就是:让线程

2021-01-10 11:52:43 389

原创 Java并发编程(十六)JUC同步器工具(Semaphore、CountDownLatch)

一、Semaphore 信号量1.1 API介绍Semaphore(信号量)是用来控制同时访问特定资源的线程数量,通过协调各个线程,保证合理的使用公共资源。Semaphore维护了一个许可集,其实就是一定数量的“许可证”。当有线程想要访问共享资源时,需要先获取(acquire)的许可;如果许可不够了,线程需要一直等待,直到许可可用。当线程使用完共享资源后,可以归还(release)许可,以供其它需要的线程使用。和ReentrantLock类似,Semaphore支持公平/非公平策略。源码:

2021-01-09 18:01:51 178

原创 Java并发编程(十五)JUC阻塞队列(SynchronousQueue、LinkedTransferQueue)

一、SynchronousQueue1.1 API介绍SynchronousQueue是一个没有数据缓冲的BlockingQueue,生产者线程对其的插入操作put必须等待消费者的移除操作take,反过来也一样。SynchronousQueue内部并没有数据缓存空间,你不能调用peek()方法来看队列中是否有数据元素,因为数据元素只有当你试着取走的时候才可能存在,不取走而只想偷窥一下是不行的,当然遍历这个队列的操作也是不允许的。数据是在配对的生产者和消费者线程之间直接传递的,并不会将数据缓冲到队列中

2021-01-09 16:33:44 216

原创 Java并发编程(十四)JUC阻塞队列(LinkedBlockingQueue、LinkedBlockingDeque)

一、LinkedBlockingQueue1.1 API介绍链式阻塞队列分单向(LinkedBlockingQueue)、双向(LinkedBlockingDeque)链表里面元素的存储是离散的,分散在内存区不同地方,不需要连续的存储区间FIFO:first in first outLinkedBlockingQueue是一个基于单向链表的、范围任意的(其实是有界的)、FIFO 阻塞队列。访问与移除操作是在队头进行,添加操作是在队尾进行,并分别使用不同的锁进行保护,只有在可能涉及多个节点的操作

2021-01-09 13:30:27 256

原创 Java并发编程(十三)JUC阻塞队列(BlockingQueue、ArrayBlockingQueue、PriorityBlockingQueue、DelayQueue)

一、BlockingQueue1.1 什么是阻塞队列?阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。阻塞队列提供了四种处理方法:方法\处理方式抛出异常返回特殊值一直阻塞超时退出

2021-01-09 12:59:52 369

原创 Java并发编程(十二)JUC阻塞队列(概念、生产者消费者模型)

一、阻塞队列1.1 概念比如12306服务器并发支持10W,突然来30W请求肯定会冲垮服务器,所以用阻塞队列,把后20W请求放入队列,等服务器处理完一部分,在从队列里取一部分,限流削峰思想。放入队列可以放入内存中,也可以持久化,持久化的方式就是消息中间件。概念:在多线程领域:所谓阻塞,在某些情况下会挂起线程(即阻塞),⼀旦条件满⾜,被挂起的线程⼜会⾃动被唤醒。阻塞队列 是⼀个队列,在数据结构中起的作⽤如下图:当队列是空的,从队列中获取(Take)元素的操作将会被阻塞当队列是满的,从队

2021-01-08 18:49:00 266

Mysql超详细知识梳理-分库分表篇-思维导图.xmind

对应企业开发的Mysql知识梳理

2021-02-21

Mysql超详细知识梳理-集群篇-思维导图.xmind

对应企业开发的Mysql知识梳理

2021-02-21

Mysql超详细知识梳理-性能优化篇-思维导图.xmind

对应企业开发的Mysql知识梳理

2021-02-21

Mysql超详细知识梳理-锁篇-思维导图.xmind

对应企业开发的Mysql知识梳理

2021-02-21

Mysql超详细知识梳理-索引篇-思维导图.xmind

对应企业开发的Mysql知识梳理

2021-02-21

Mysql超详细知识梳理-事务篇-思维导图.xmind

对应企业开发的Mysql知识梳理

2021-02-21

Mysql超详细知识梳理-架构篇-思维导图.xmind

对应企业开发的Mysql知识梳理

2021-02-21

Sharding JDBC.xmind

官方网站:http://shardingsphere.apache.org/index_zh.html 该思维导图主要是对Sharding JDBC的实现原理进行了整理,包括ShardingJDBC的架构、核心概念、内核剖析等,也是从官方学习的,直接看官方其实就可以了。

2020-06-09

SpringBean的生命周期.mdj

SpringBean的生命周期.mdj

2020-06-09

动态代理.xmind

该思维导图主要讲解了代理模式的具体实现,包括jdk代理,cglib代理。其中jdk代理主要讲解了其具体的实现方式、原理、缺点、缓存机制等。Cglib代理主要讲解了其原理、与JDK代理的对比、Enhancer源码解析、methodProxy和Fastclass源码等。

2020-06-09

Spring原理篇.xmind

该思维导图是对Spring框架原理的一个知识讲解,很详细,源码都扣出来了,该文件也挺大的,每个知识点都一步一步截图了。 包括内容:Spring体系结构、Spring重要接口讲解(BeanFactory继承体系、BeanDefinition继承体系、ApplicationContext继承体系)、IOC/DI(容器初始化流源码分析)、AOP原理(解析流程,代理流程,执行流程)、事务(解析流程、执行流程)。

2020-06-09

设计模式.xmind

该思维导图主要是对设计模式的知识进行了一个整体的复习和归纳,包括如下几个大模块:类之间关系,7大设计原则,创建型设计模式,结构性设计模式,行为型设计模式(待完善),每个模块又具体了分析了各个设计模式的思想,实现方式,底层原理等。

2020-06-09

mybatis原理.xmind

该思维导图主要是对MyBatis原理知识进行了整理,通过对底层的分析,能够实现手写一个实现核心功能的简单MyBats,内容包括MyBatis整体架构和流程的分析、SQL的解析过程、手写解析流程、手写执行流程、看源码、MyBatis中使用了哪些设计模式等。

2020-06-09

MyBatis应用.xmind

本思维导图主要是关于MyBatis应用相关的知识梳理,包括MyBatis实现CRUD操作、MyBatis开发DAO的两种方式、全局配置文件SqlMapConfig.xml、输入类型结果类型、连接池和事务控制、动态SQL、复杂查询、延迟加载策略、缓存、注解开发等多个方面。

2020-06-09

java类加载机制.xmind

该文件是JVM中关于类加载机制的知识整理的思维导图,包括类加载机制概述、类加载的生命周期、加载时机、加载过程、类加载、类的初始化和实例化等几个大方面进行了讲解,其中类加载中还对JVM三种预定义类加载器进行了讲解,包括双亲委派机制,违背双亲委派模型,开发自己的类加载器等等

2020-06-09

Schema 语法.xmind

很多JAVA框架,都会用XML文件作为配置文件,而XML文件往往对元素都有严格的定义,这个时候就需要对xml进行约束,用的最多的就是XML Schema。本文件是对XML Schema语法学习整理的思维导图,包括如果定义和使用schema文件,shcema语法中的简单类型、复杂类型的定义和使用等。

2020-06-09

Spring应用篇.xmind

主要梳理了Spring的基础和高级应用的知识,包括整个Spring的体系结构介绍、IOC,DI配置使用,包括纯XML,注解和XML混合,纯注解三种配置方式,还有Spring的AOP,整个Junnit,事务等知识点的梳理。

2020-06-09

MySQL.xmind

学习Mysql整理复习的思维导图,涵盖Web开发程序员需要掌握的大部分关于Mysql的知识,从基础篇,架构篇,索引篇,锁和事务篇,性能分析优化篇,集群分库分表篇等深入理解Mysql数据库的底层原理。

2020-05-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除