自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(123)
  • 收藏
  • 关注

原创 Spring AOP---深入剖析AOP注解实现原理

文章目录前言1.概述2.Spring如何集成AspectJ AOP3.AOP通知链如何生成4.何时进行AOP动态代理以及动态代理的方式5.通知链的调用过程6.后续前言阅读本文之前建议先掌握的前置知识:@Import注解的使用和实现原理Bean的生命周期1.概述Spring AOP有常用的两种方式,一种是使用XML的方式,另一种是使用注解的方式。本文将详细的分析注解方式的实现原理。将会从如下几个点展开。Spring如何集成AspectJ AOPAOP通知链如何形成何时进行AOP动态代理

2021-05-26 16:27:28 1395 6

原创 Dubbo 服务引用原理解析

文章目录1.概述2.服务引用源码分析1.概述上一篇博客中介绍了dubbo服务暴露的原理,还不清楚的读者可以先看上一篇博客。博客地址如下:《Dubbo服务暴露原理解析,带你手撕源码》本文将探究服务消费者如何引用服务,分析dubbo中服务引用的相关源码。同样的,为了聚焦在服务引用的过程,编写如下的测试代码,把关注点放在服务引用的过程上。代码如下:// 客户端@Testpublic void invokeRemote() { ReferenceConfig<UserService&g

2021-04-06 21:42:44 570

原创 Dubbo服务暴露原理解析,带你手撕源码

文章目录1.概述2.服务暴露源码分析ServiceConfig.export()ServiceConfig.doExport()ServiceConfig.doExportUrls()ServiceConfig.doExportUrlsFor1Protocol(ProtocolConfig protocolConfig, List< URL > registryURLs)RegistryProtocol.export(final Invoker< T > originInvoker)

2021-03-25 21:32:50 588

原创 5种Dubbo负载均衡算法(看这一篇就够了)

文章目录1.概述2.随机+权重(random)3.轮询+权重(roundrobin)4.最少连接(leastactive)5.最短响应(shortestresponse)6.一致性哈希(consistenthash)1.概述​ 2.7.9版本的Dubbo官方提供的负载均衡算法有5种,在2.6.*里面只有4种负载均衡算法。本文将详细的介绍这5种算法的底层实现。2.随机+权重(random)算法步骤计算服务提供者的总权重,并维护一个前缀和数组。基于第一步的结果,在0~总权重之间生成一个随机数。

2021-03-16 22:53:26 3875

原创 SpringBoot自动装配原理分析和实现自定义启动器

文章目录1.概述2.自动装配原理分析[email protected]@EnableAutoConfiguration3.自定义启动器1.概述SpringBoot的自动装配,减少了原先需要编写xml配置文件或java配置类。本文将分析SpringBoot自动装配的原理(版本是2.3.5)。从注解的作用到源码分析,再到自定义SpringBoot启动器。2.自动装配原理分析自动装配的实现和这个注解有密切的关联。该注解是个复合注解,里面包含了三个关键的注解@SpringBoo

2021-02-25 13:32:30 2270 14

原创 Spring中@Import注解的使用和实现原理(超详细!!!)

文章目录1. 概述2. 初识@Imprt注解3. @Import注解的使用3.1 普通类注入Spring容器的方式3.2 实现了ImportSelector接口的类注入Spring容器的方式3.3 实现了ImportBeanDefinitionRegistrar接口的类注入Spring容器的方式4. 源码分析4.1 解析@Import注解的时机4.2 3种不同类型的类如何通过@Import注解注入到Spring容器当中源码解析5. 后续1. 概述@Import 是 Spring 基于 Java 注解配置

2021-01-27 23:21:37 28119 27

原创 【图解】一篇搞定ReentrantLock的加锁和解锁过程

文章目录1. 概述2. AbstractQueuedSynchronizer(AQS)3. 加锁4. 解锁5. 公平锁和非公平锁的区别1. 概述本文主要结合图片分析ReentrantLock加锁和解锁过程的源码,加锁和解锁的原理不清楚的读者可以好好看看。2. AbstractQueuedSynchronizer(AQS)在分析ReentrantLock加锁和解锁的过程之前,先来了解一下AQS,ReentrantLock就是基于AQS实现的。AQS其实就是维护了一个双向链表,主要的属性如下所示: T

2021-01-20 12:26:53 2108 6

原创 【图解】HashMap1.7 头插法造成死循环的原因

1.概述HashMap1.7当中,扩容的时候,采用的是头插法转移结点,在多线程并发的情况下会造成链表死循环的问题。2.图解假设有两个线程,线程1和线程2,两个线程进行hashMap的put操作,触发了扩容。下面是扩容的时候结点转移的关键代码void transfer(Entry[] newTable) { Entry[] src = table; int newCapacity = newTable.length; for (int j = 0; j <

2021-01-13 18:41:48 15347 17

原创 synchronized锁升级就是这么的简单

文章目录1. 概述2. Mark Word3. 非锁不可偏向状态与非锁可偏向状态的区别4. 偏向锁5. 轻量级锁6. 重量级锁7. synchronized锁升级总结1. 概述在jdk1.6之后,对synchronized进行了优化,对于一个锁对象有如下6种状态:非锁不可偏向状态、非锁可偏向状态、偏向锁状态、轻量级锁状态、重量级锁状态和GC状态。本篇博客将介绍6种状态的区别以及synchronized的升级膨胀的一个过程。2. Mark Word在说明6种状态的不同之前,先来了解一下什么是Mar

2021-01-05 17:03:07 960 9

原创 synchronized你用对了吗?

文章目录1. 概述2. synchronized关键字锁的是什么?3.锁对象的属性改变和锁对象改变对于锁的使用的影响4.同步方法和非同步方法是否可以同时调用?5.读方法需不需要加synchronized?6. synchronized是否支持可重入7.synchronized可重入的另一种情况,继承8.synchronized同步方法内发生异常,是否会释放锁?1. 概述本篇博客记录synchronized的使用,注意的事项。2. synchronized关键字锁的是什么?synchronized关键

2020-12-22 12:10:43 1591 12

原创 Spring IOC---AOP代理对象生成的时机

文章目录1.概述2.前置知识3.Spring AOP代理对象生成的时机3.1非提前生成代理对象3.2 提前生成代理对象4. 为什么需要两种动态代理的时机1.概述Spring AOP可以采用注解或者xml配置的方式实现,那么在spring的生命周期当中,是在什么时候生成的代理对象呢?本文就AOP代理对象生成的时机进行介绍。不清楚spring生命周期的读者可以先阅读另一篇博客《Spring IOC—Bean的生命周期》。2.前置知识BeanPostProcessor接口的作用简单的讲就是在一个对象

2020-12-15 20:52:37 9152 25

原创 Netty原理详解系列(一)---NIO中的Buffer&Chanel

文章目录1.概述2.缓冲区Buffer定义3.Buffer内部结构4.Buffer常用的操作4.1 allocate4.2 wrap4.3 put4.4 flip4.5 get4.6 mark4.7 reset4.8 clear4.9 rewind4.10 remaining5. chanel5.1 FileChannel 文件管道5.2 DatagramChannel UDP套接字管道5.3 TCP套接字管道6.后续1.概述在BIO API中是通过InputStream 与outPutStream 两

2020-10-04 11:45:14 1523 4

原创 Spring 循环依赖(图例+源码分析)

文章目录1.循环依赖概述1.1 相关集合说明2.Spring 循环依赖源码分析1.循环依赖概述什么是循环依赖呢?如下图所示,有两个或两个以上的对象之间引用,也就是A对象中有属性B 引用了B对象,B对象中有属性C 引用了C对象,而C对象中有属性A 引用了A对象。构成一个环状结构,这就是循环依赖。对于普通的java对象而言,对象之间的循环依赖可以通过set方式设置之间的引用关系。而SpringBean中的循环依赖就复杂的很多,单例Bean的创建过程是交给Spring管理的,并不是简简单单的通过set就可

2020-09-23 15:18:28 1399 3

原创 mybatis原理分析(三)---一级缓存和二级缓存

文章目录1.概述1.1 BaseExecutor1.2 CachingExecutor2.一级缓存2.1 一级缓存的命中场景2.2 触发清空一级缓存2.3 一级缓存源码分析3 二级缓存3.1 二级缓存的设计3.2 二级缓存的使用3.3 二级缓存的命中场景3.4 二级缓存源码分析3.4.1 query查询操作。3.4.2 commit提交操作。3.4.3 update操作3.5 为什么只有会话提交成功才会更新或清空二级缓存4. 后续1.概述上一篇博客《mybatis原理分析(二)—深入理解Executor

2020-09-20 17:00:09 1795 2

原创 Spring IOC---invokeBeanFactoryPostProcessors源码分析

文章目录1.概述2.准备工作。3.源码调试invokeBeanFactoryPostProcessors3.1.getBeanFactoryPostProcessors()3.2.invokeBeanFactoryPostProcessors(3.2.1 先来介绍一下这个方法中出现的集合。3.2.2 源码调试分析3.2.2.1 处理手动添加的 实现了BeanDefinitionRegistryPostProcessor接口的类3.2.2.2 处理Spring自带的后置处理器ConfigurationClas

2020-09-06 16:36:44 6252 1

原创 LeetCode刷题目录

文章目录前言笔记链接1-18题19-40题41-60题61-80题81-100题101-120题121-140题141-160题161-180题181-200题201-220题221-240题241-260题261-280题281-300题301-320题前言这篇博客作为其他刷题笔记的导航笔记链接1-18题19-40题41-60题61-80题81-100题101-120题121-140题141-160题161-180题181-200题201-220题221-240题241-2

2020-08-15 11:35:42 819

原创 JDK源码阅读计划

计划阅读顺序如下,优先级1-4,完成一个写一篇博客1、java.langObject 1String 1AbstractStringBuilder 1StringBuffer 1StringBuilder 1Boolean 2Byte 2Double 2Float 2Integer 2Long 2Short 2Thread 2ThreadLocal 2Enum 3Throwable 3Error 3Exception 3Class 4ClassLoader 4C

2020-07-17 09:20:46 467 1

原创 【脑图】操作系统笔记(面试必备)

春招进行中,分享本人整理的操作系统脑图笔记,方便大家记忆,希望大家Offer拿不停!!!完整的脑图获取到github上自取,地址如下:https://github.com/mumumumumu341/javaNotes觉得还可以的朋友,动动小手点个star,谢谢!!!目前已有的脑图笔记如下,可点击下面的连接查看部分脑图截图。获取地址相同。【脑图】MySQL笔记(面试必备)【脑图】Redis笔记(面试必备)【脑图】JVM笔记(面试必备)如果github上不去的读者,可以私信找我获取。部分脑图

2021-03-15 22:04:19 432 2

原创 【脑图】JVM笔记(面试必备)

春招进行中,分享本人整理的JVM脑图笔记,方便大家记忆,希望大家Offer拿不停!!!完整的脑图获取到github上自取,地址如下:https://github.com/mumumumumu341/javaNotes觉得还可以的朋友,动动小手点个star,谢谢!!!如果github上不去的读者,可以私信找我获取。脑图部分截图:...

2021-03-11 20:50:57 384 4

原创 【脑图】MySQL笔记(面试必备)

春招进行中,分享本人整理的MySQL脑图笔记,方便大家记忆,希望大家Offer拿不停!!!完整的脑图获取到github上自取,地址如下:https://github.com/mumumumumu341/javaNotes如果github上不去的读者,可以私信找我获取。脑图部分截图:...

2021-03-07 22:56:19 548 2

原创 【脑图】Redis笔记(面试必备)

春招在即,分享本人整理的Redis脑图笔记,方便大家记忆,希望大家Offer拿不停!!!完整的脑图获取到github上自取,地址如下:https://github.com/mumumumumu341/javaNotes如果github上不去的读者,可以私信找我获取。脑图部分截图:...

2021-03-03 20:02:49 471 1

原创 Spring @ComponentScan注解用法和原理解析

文章目录1.概述2.@ComponentScan3.源码分析1.概述Spring是如何通过注解的形式将Bean注入到Spring容器当中的呢?答案就在@ComponentScan注解上,该注解告诉Spring要去哪里去寻找Bean。通过这篇博客将学习到如何正确使用@ComponentScan,并分析其底层是如何实现。2.@ComponentScan@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)@Documented@

2021-03-02 18:28:43 1915 2

原创 JUC常用的并发工具的使用和实现原理

文章目录1.概述2.CountDownLatch代码演示源码分析3.CyclicBarrier代码演示源码分析4.Exchanger代码演示5.Semaphore代码演示源码分析1.概述java并发编程系列博客前面6篇,介绍了synchronized和ReentrantLock的使用和实现原理。博客地址如下:synchronized你用对了吗?synchronized锁升级就是这么的简单wait、notify、notifyAll你知道多少?【图解】一篇搞定ReentrantLock的加锁和解锁

2021-02-09 21:03:16 800 2

原创 webSocket 聊天系统,仿QQ界面(首篇)

文章目录1.概述2.目前进展3.未完待续1.概述基于webSocket实现聊天系统,ui设计模仿QQ。计划实现的功能分为如下几块:注册登录好友、群聊的添加,查询,删除一对一在线聊天分组在线群聊聊天记录管理个人信息管理发送离线消息思考中…涉及到的技术:vue,springboot,mybatis,mysql,redis,webSocket等全部完成了会将代码上传到github,有兴趣的可以关注一波。2.目前进展界面如下:3.未完待续目前只做了一部分前端的工作,we

2021-02-08 11:35:50 1334 2

原创 LeetCode刷题笔记(Java)---更新至729题

文章目录前言笔记导航721. 账户合并722. 删除注释724. 寻找数组的中心索引738. 单调递增的数字725. 分隔链表前言需要开通vip的题目暂时跳过笔记导航点击链接可跳转到所有刷题笔记的导航链接721. 账户合并给定一个列表 accounts,每个元素 accounts[i] 是一个字符串列表,其中第一个元素 accounts[i][0] 是 名称 (name),其余元素是 emails 表示该账户的邮箱地址。现在,我们想合并这些账户。如果两个账户都有一些共同的邮箱地址,则两个账户必

2021-02-05 21:52:26 574 1

原创 ReentrantLock Condition的使用和实现原理(不留死角!!!)

文章目录1. 概述2. 初识Condition3. 5种await方法的使用3.1 await()3.2 awaitUninterruptibly()3.3 awaitNanos(long nanosTimeout)3.4 awaitUntil(Date deadline)3.5 await(long time, TimeUnit unit)4. 5种await方法的源码分析4.1 await()4.2 awaitUninterruptibly()4.3 awaitNanos(long nanosTimeo

2021-02-02 12:38:21 1491 4

原创 LeetCode刷题笔记(Java)---第701-720题

文章目录前言笔记导航701. 二叉搜索树中的插入操作703. 数据流中的第 K 大元素705. 设计哈希集合706. 设计哈希映射707. 设计链表前言需要开通vip的题目暂时跳过笔记导航点击链接可跳转到所有刷题笔记的导航链接701. 二叉搜索树中的插入操作给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你

2021-02-01 19:56:43 309

原创 ReentrantLock中四种加锁方式的使用区别和源码实现的细节差异

文章目录1.概述2.使用区别3.源码实现的细节差异1.概述在上一篇博客当中,详细的介绍了ReentrantLock的加锁和解锁的过程,但还遗留了一些问题。本文将介绍ReentrantLock当中4个加锁方式的使用区别和分析其源码实现的细节差异。2.使用区别lock()不可被中断的获取锁的方式。tryLock()尝试一次拿锁,拿不到就返回false,不会像其他方式一样进入阻塞队列。如果拿到了就返回true。lockInterruptibly()可被中断的获取锁的方式,在拿锁的期间

2021-01-22 13:38:27 535 2

原创 LeetCode刷题笔记(Java)---第681-700题

文章目录前言笔记导航682. 棒球比赛684. 冗余连接686. 重复叠加字符串匹配687. 最长同值路径前言需要开通vip的题目暂时跳过笔记导航点击链接可跳转到所有刷题笔记的导航链接682. 棒球比赛你现在是一场采用特殊赛制棒球比赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。比赛开始时,记录是空白的。你会得到一个记录操作的字符串列表 ops,其中 ops[i] 是你需要记录的第 i 项操作,ops 遵循下述规则:整数 x - 表示本回合新获得分数 x“

2021-01-22 11:00:42 729

原创 LeetCode刷题笔记(Java)---第661-680题

文章目录前言笔记导航661. 图片平滑器662. 二叉树最大宽度前言需要开通vip的题目暂时跳过笔记导航点击链接可跳转到所有刷题笔记的导航链接661. 图片平滑器包含整数的二维矩阵 M 表示一个图片的灰度。你需要设计一个平滑器来让每一个单元的灰度成为平均灰度 (向下舍入) ,平均灰度的计算是周围的8个单元和它本身的值求平均,如果周围的单元格不足八个,则尽可能多的利用它们。解答public int[][] imageSmoother(int[][] M) { int R

2021-01-12 20:46:45 487 3

原创 wait、notify、notifyAll你知道多少?

文章目录1.概述2.monitor对象3.先阻塞的线程先拿到锁还是后拿到锁?4.先wait的线程先被唤醒还是后被唤醒?5. notifyAll的唤醒有顺序吗?1.概述​ 本篇博客将围绕synchronized同步锁的阻塞、等待、唤醒展开,探究wait、notify和notifyAll的实现原理。2.monitor对象在介绍上述的原理之前,先来了解一下什么是monitor对象。synchronized相关的阻塞、等待、唤醒操作离不开这个监视器对象。monitor在上一篇博客中也提到了,重量级的锁对象在

2021-01-08 10:01:25 495 2

原创 LeetCode刷题笔记(Java)---第641-660题

文章目录前言笔记导航641. 设计循环双端队列643. 子数组最大平均数 I645. 错误的集合前言需要开通vip的题目暂时跳过笔记导航点击链接可跳转到所有刷题笔记的导航链接641. 设计循环双端队列设计实现双端队列。你的实现需要支持以下操作:MyCircularDeque(k):构造函数,双端队列的大小为k。insertFront():将一个元素添加到双端队列头部。 如果操作成功返回 true。insertLast():将一个元素添加到双端队列尾部。如果操作成功返回 true。de

2021-01-06 10:17:00 616

原创 LeetCode刷题笔记(Java)---第621-640题

文章目录前言笔记导航622. 设计循环队列623. 在二叉树中增加一行628. 三个数的最大乘积629. K个逆序对数组630. 课程表 III632. 最小区间633. 平方数之和636. 函数的独占时间637. 二叉树的层平均值638. 大礼包前言需要开通vip的题目暂时跳过笔记导航点击链接可跳转到所有刷题笔记的导航链接622. 设计循环队列设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲

2021-01-04 10:42:08 361

原创 LeetCode刷题笔记(Java)---第601-620题

文章目录前言笔记导航605. 种花问题606. 根据二叉树创建字符串609. 在系统中查找重复文件611. 有效三角形的个数617. 合并二叉树前言需要开通vip的题目暂时跳过笔记导航点击链接可跳转到所有刷题笔记的导航链接605. 种花问题假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数 n 。能否在不打破种植规则的情况下种入 n 朵

2021-01-01 17:20:08 358

原创 SpringMVC源码解析---如何根据http请求找到对应的接口方法

文章目录1.概述2.RequestMappingHandlerMapping3.RequestMappingHandlerMapping的构建4. getHandler的具体实现5.遗留问题1.概述在平时开发的时候经常会写下面的代码,调用方根据http请求就能够定位到这个login方法。这到底是如何实现的呢?本文围绕这个问题来展开源码的分析。@RestController@RequestMapping("/user")public class UserController { @Auto

2020-12-24 16:01:15 1364 5

原创 LeetCode刷题笔记(Java)---第581-600题

文章目录前言笔记导航581. 最短无序连续子数组583. 两个字符串的删除操作前言需要开通vip的题目暂时跳过笔记导航点击链接可跳转到所有刷题笔记的导航链接581. 最短无序连续子数组给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。你找到的子数组应是最短的,请输出它的长度。解答//方法1public int findUnsortedSubarray(int[] nums) { int len = nums.l

2020-12-24 12:41:56 310

原创 LeetCode刷题笔记(Java)---第561-580题

文章目录前言笔记导航561.数组拆分 I563. 二叉树的坡度564. 寻找最近的回文数565. 数组嵌套566. 重塑矩阵567. 字符串的排列572. 另一个树的子树575. 分糖果前言需要开通vip的题目暂时跳过笔记导航点击链接可跳转到所有刷题笔记的导航链接561.数组拆分 I给定长度为 2n 的整数数组 nums ,你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), …, (an, bn) ,使得从 1 到 n 的 min(ai, bi) 总和最大。返回该

2020-12-23 10:24:06 480

原创 LeetCode刷题笔记(Java)---第541-560题

文章目录前言笔记导航541. 反转字符串 II542. 01 矩阵543. 二叉树的直径546. 移除盒子547. 朋友圈前言需要开通vip的题目暂时跳过笔记导航点击链接可跳转到所有刷题笔记的导航链接541. 反转字符串 II给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。解答public S

2020-12-18 15:25:51 490

原创 mybatis主查询给子查询传递参数之构造虚拟列

1.概述今天做项目遇到了一个情况,在主查询中的结果当中,不存在子查询需要的条件参数的情况下,无法将代码中传入的参数传递给子查询。例如下面的代码selectAll对应的代码如下: <sql id="vipViceColumns"> vip_id,name,gender,birthday,tel,is_vip,avatar </sql> <select id="selectAll" resultMap="vipVice"> se

2020-12-10 16:23:22 2780

原创 Redis底层数据结构之Hash

文章目录1.概述2.数据结构定义2.1字典dict2.2 哈希表ditcht2.3 真正的存储结构dictEntry3. 扩容和缩容4. rehash5. hash相关指令5.1hset/hsetnx5.2 hget5.3 exists5.4 hdel5.5 hlen5.6 hstrlen5.6 hincrby/hincrbyfloat5.7 hmset5.8 hmget5.9 hkeys/hvals5.10 HGETALL1.概述Redis当中的hash类似于java当中的HashMap,但也存在着很

2020-12-08 21:17:23 2415

空空如也

空空如也

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

TA关注的人

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