- 博客(206)
- 资源 (18)
- 收藏
- 关注
原创 Spring源码分析(十六)循环依赖3:其他场景下循环依赖分析,以及神器@Lazy懒加载解决循环依赖
spring循环依赖,其他场景下循环依赖分析,以及如何解决循环依赖情况
2022-11-06 15:06:34
1456
2
原创 Spring源码分析(十一)依赖注入源码解析4:DefaultListableBeanFactory#findAutowireCandidates 根据类型查找所有候选Bean
DefaultListableBeanFactory#findAutowireCandidates 根据类型查找所有候选Bean
2022-10-29 19:41:03
1068
原创 Spring源码分析(十)依赖注入源码解析3:DefaultListableBeanFactory#doResolveDependency 真正开始解析依赖项
DefaultListableBeanFactory#doResolveDependency 真正开始解析依赖项
2022-10-29 15:15:01
874
原创 Spring源码分析(九)依赖注入源码解析2:AutowireCapableBeanFactory#resolveDependency 从工厂解析依赖项
AutowireCapableBeanFactory#resolveDependency 从工厂解析依赖项
2022-10-29 14:10:11
1021
原创 Spring源码分析(八)依赖注入源码解析1:autowire自动注入 和 @Autowired注入
autowire自动注入、@Autowired自动注入、手动注入源码分析
2022-10-16 16:49:02
1397
原创 Spring源码分析(六)Bean生命周期源码解析4:创建Bean实例(实例化前、实例化、实例化后、自动注入、Aware、初始化前、初始化、初始化后...)
SpringBean的生命周期流程源码分析,包含:加载类、实例化前、实例化、BeanDefinition的后置处理、实例化后、自动注入、依赖注入、属性填充、Aware、初始化前、初始化、初始化后..
2022-10-04 12:48:21
952
原创 Spring源码分析(五)Bean生命周期源码解析3:获取Bean实例(DependsOn、单例/原型/其他Scope Bean)
主要讲解Spring获取Bean实例的流程,涉及核心内容有:获取Bean规范名称、单例池获取Bean、DependsOn、单例/原型/其他Scop Bean的获取
2022-10-04 11:50:58
667
原创 Spring源码分析(四)Bean生命周期源码分析2:合并BeanDefinition、FactoryBean
Spring源码分析,Bean生命周期源码分析,合并BeanDefinition,FactoryBean
2022-10-02 22:44:43
860
原创 Spring源码分析(三)Bean生命周期源码解析1:扫描生成BeanDefinition
Spring源码分析,扫描生成BeanDefinition的流程
2022-10-02 21:53:24
1170
2
原创 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
6141
原创 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
580
原创 线性表基础:栈(五)智⼒发散题
一、智⼒发散题1.1 LeetCode #636 函数的独占时间本质就是⼀道模拟题,画⼀个线段图能显著地辅助理解。任务开始时进栈,上⼀个任务暂停执⾏;任务完成时出栈,恢复上⼀个任务的执⾏。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m1P4zeil-1617202866979)(./1616825475198.png)]窍门:当碰到一个新任务启动的时候,需要把之前的时间加给上一个任务当碰到一个任务结束的时候,需要把当前的时间段加给当前任务[外链图片转存失
2021-06-21 23:44:46
267
原创 线性表基础:栈(四)经典面试题(栈结构扩展应⽤ part2)
经典面试题 - 栈结构扩展应⽤推荐刷题顺序:LeetCode #331 验证⼆叉树的前序序列化LeetCode #227 基本计算器II5. LeetCode #331 验证⼆叉树的前序序列化题目描述:序列化二叉树的一种方法是使用前序遍历。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,我们可以使用一个标记值记录,例如 #。例如,上面的二叉树可以被序列化为字符串 “9,3,4,#,#,1,#,#,2,#,6,#,#”,其中 # 代表一个空节点。给定一串以逗
2021-05-19 22:40:03
282
原创 线性表基础:栈(三)经典面试题(栈结构扩展应⽤ part1)
一、经典面试题 - 栈结构扩展应⽤1.1 LeetCode #20 有效的括号结论1:在任意⼀个位置上,左括号数量 >= 右括号数量结论2:在最后⼀个位置上,左括号数量 == 右括号数量根据上述两个结论,程序中只需要记录左括号和右括号的数量即可。⼀对括号可以等价为⼀个完整的事件。左括号可以看作事件的开始、右括号可以看作事件的结束。⽽括号序列可以看作事件与事件之间的完全包含关系。栈可以处理具有完全包含关系的问题。class Solution {public: bool isValid(
2021-05-19 20:58:36
204
原创 线性表基础:栈(二)经典面试题(栈的基本操作)
一、经典⾯试题 - 栈的基本操作1.1 LeetCode #⾯试题03.04 化栈为队利⽤两个栈来实现,⼀个输⼊栈、⼀个输出栈。输⼊栈⽤于读⼊数据。当需要输出元素时,若输出栈为空,则将输⼊栈的所有元素推送到输出栈,然后取栈顶元素;若输出栈⾮空,则输出栈顶即可。输出栈的作⽤是对已经被反转的序列进⾏⼆次反转。对此感到困惑的同学可以画图模拟⼀下。入队列就是向stack1入栈当碰到出队列动作当时候,判断stack2是否为空:stack1全部移到stack2后,出队列就出stack2的栈顶元素如果s
2021-05-05 21:45:54
304
原创 线性表基础:栈(一)基础结构、栈思维、经典实现、典型应用场景
一、基础知识1.1 基础结构栈是⼀种“先进后出”(FILO, First In Last Out)的数据结构。1.2 栈适合解决什么问题?栈思维,很重要判断括号是否合法:一种括号情况:第一个条件解释:一个变量就可以了,记录左右括号的差值即可引出思维方式:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p64RNJ8T-1617202866953)(./1616298789564.png)]+1代表多了一个“东西”,-1代表少了一个“东西”( 代表出
2021-04-18 17:00:34
368
原创 线性表基础:队列(三)智力发散题
智力发散题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
224
原创 线性表基础:队列(二)经典面试题
一、经典面试题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
299
原创 线性表基础:队列(一)基础知识、经典实现、典型应用场景
一、队列的基础知识当前图中,这片连续的存储区可以是数组,也可以是链表(为什么连续的存储区也可以是链表,后面 LeetCode题可以看到)队列是连续的存储区,可以存储一系列的元素。是FIFO(先入先出,First-In-First-Out)结构。队列通常具有头尾指针(左闭右开区间),头指针指向第一个元素,尾指针指向最后一个元素的下一位。正常情况队列的尾指针应该是指向最后一个元素的下一位,而图中tail指针是指向尾部元素的指针队列支持(从队尾)入队(enqueue)、(从队首)出队(deque
2021-03-30 23:48:13
642
原创 线性表基础:链表及经典问题(二)经典算法题刷题(链表的反转、链表的节点删除)
紧接上一章三、经典算法题以下算法题均摘自力扣,读者可自行去力扣答题,并有详细题解,我只是简单介绍了下我的解题思路,并记录一下自己的答案,毕竟算法光看、思考是远远不够的,还需要多加练习,以下是链表相关经典算法题答题的推荐顺序: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
317
原创 线性表基础:链表及经典问题(一)链表的基础知识、典型应用场景、经典算法题刷题(链表的访问)
一、链表的基础知识1.1 链表的结构节点数据域指针域实现方式包括:地址(C语言)、下标(相对地址,数组下标)、引用(Java、JS、Python)链状结构通过指针域的值形成了一个线性结构这个图是C语言中的链表,head中只存储指针head就是C语言中的指针,在Java中相当于一个引用它本身不是一个对象,也不是一个链表节点总结:只要在相关的结构中增加了一项指针域,则该结构就可以串成一个链表结构答疑:C语言的地址一般情况下都是虚拟地址,不是物理地址
2021-03-14 23:35:06
599
3
原创 JVM原理(二)执行引擎篇(JVM程序执行流程、JIT编译器、JIT编译器优化)
一、程序执行流程1.1 执行流程图Java编译成字节码、动态编译和解释为机器码的过程分析:编译器和解释器的协调工作流程:判断是否是热点数据,不是逐条解释成机器码执行,否则一次性编译成机器码存到方法区,以后每次直接运行机器码在部分商用虚拟机中(如HotSpot),Java程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码”。为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码
2021-02-28 17:54:17
1562
原创 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
18186
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
240
原创 Java并发编程(十九)JUC线程池(自定义线程池ThreadPoolExecutor)
一、自定义线程池ThreadPoolExecutor上一节我们演示了利用Executors创建了三种类型的线程池,但是实际生产环境中,我们是不会用这种方式创建线程池的,主要原因就是这些线程池用的阻塞队列没有限制容量,容易引发内存溢出的问题。首先在来回顾一下ThreadPoolExecutor构造的七个参数:1.1 ThreadPoolExecutor构造的七个参数/*** 使用给定的参数创建ThreadPoolExecutor.** @param corePoolSize 核心线程池中的核心线
2021-01-10 14:59:19
363
原创 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
392
原创 Java并发编程(十七)JUC同步器工具(CyclicBarrier、Exchanger、Phaser)
一、CyclicBarrier 篱栅1.1 API介绍官方案例略isBroken:判断是否有线程等待的过程中是否被中断了,如果有就等不到每个线程都到达Barrier点CountDownLatch是一个倒数计数器,在计数器不为0时,所有调用await的线程都会等待,当计数器降为0,线程才会继续执行,且计数器一旦变为0,就不能再重置了。CyclicBarrier可以认为是一个栅栏,栅栏的作用是什么?就是阻挡前行。CyclicBarrier是一个可以循环使用的栅栏,它做的事情就是:让线程
2021-01-10 11:52:43
448
原创 Java并发编程(十六)JUC同步器工具(Semaphore、CountDownLatch)
一、Semaphore 信号量1.1 API介绍Semaphore(信号量)是用来控制同时访问特定资源的线程数量,通过协调各个线程,保证合理的使用公共资源。Semaphore维护了一个许可集,其实就是一定数量的“许可证”。当有线程想要访问共享资源时,需要先获取(acquire)的许可;如果许可不够了,线程需要一直等待,直到许可可用。当线程使用完共享资源后,可以归还(release)许可,以供其它需要的线程使用。和ReentrantLock类似,Semaphore支持公平/非公平策略。源码:
2021-01-09 18:01:51
216
原创 Java并发编程(十五)JUC阻塞队列(SynchronousQueue、LinkedTransferQueue)
一、SynchronousQueue1.1 API介绍SynchronousQueue是一个没有数据缓冲的BlockingQueue,生产者线程对其的插入操作put必须等待消费者的移除操作take,反过来也一样。SynchronousQueue内部并没有数据缓存空间,你不能调用peek()方法来看队列中是否有数据元素,因为数据元素只有当你试着取走的时候才可能存在,不取走而只想偷窥一下是不行的,当然遍历这个队列的操作也是不允许的。数据是在配对的生产者和消费者线程之间直接传递的,并不会将数据缓冲到队列中
2021-01-09 16:33:44
286
原创 Java并发编程(十四)JUC阻塞队列(LinkedBlockingQueue、LinkedBlockingDeque)
一、LinkedBlockingQueue1.1 API介绍链式阻塞队列分单向(LinkedBlockingQueue)、双向(LinkedBlockingDeque)链表里面元素的存储是离散的,分散在内存区不同地方,不需要连续的存储区间FIFO:first in first outLinkedBlockingQueue是一个基于单向链表的、范围任意的(其实是有界的)、FIFO 阻塞队列。访问与移除操作是在队头进行,添加操作是在队尾进行,并分别使用不同的锁进行保护,只有在可能涉及多个节点的操作
2021-01-09 13:30:27
365
原创 Java并发编程(十三)JUC阻塞队列(BlockingQueue、ArrayBlockingQueue、PriorityBlockingQueue、DelayQueue)
一、BlockingQueue1.1 什么是阻塞队列?阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。阻塞队列提供了四种处理方法:方法\处理方式抛出异常返回特殊值一直阻塞超时退出
2021-01-09 12:59:52
432
原创 Java并发编程(十二)JUC阻塞队列(概念、生产者消费者模型)
一、阻塞队列1.1 概念比如12306服务器并发支持10W,突然来30W请求肯定会冲垮服务器,所以用阻塞队列,把后20W请求放入队列,等服务器处理完一部分,在从队列里取一部分,限流削峰思想。放入队列可以放入内存中,也可以持久化,持久化的方式就是消息中间件。概念:在多线程领域:所谓阻塞,在某些情况下会挂起线程(即阻塞),⼀旦条件满⾜,被挂起的线程⼜会⾃动被唤醒。阻塞队列 是⼀个队列,在数据结构中起的作⽤如下图:当队列是空的,从队列中获取(Take)元素的操作将会被阻塞当队列是满的,从队
2021-01-08 18:49:00
319
Sharding JDBC.xmind
2020-06-09
动态代理.xmind
2020-06-09
Spring原理篇.xmind
2020-06-09
设计模式.xmind
2020-06-09
mybatis原理.xmind
2020-06-09
MyBatis应用.xmind
2020-06-09
java类加载机制.xmind
2020-06-09
Schema 语法.xmind
2020-06-09
Spring应用篇.xmind
2020-06-09
MySQL.xmind
2020-05-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人