自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一篇文章带你玩转二叉查找树(AVL + 红黑树)

文章目录1 树和二叉树的定义1.1 树1.2 二叉树1)二叉树的定义2)二叉树的性质3)满二叉树和完全二叉树2 二叉树的遍历2.1 先序遍历2.2 中序遍历2.3 后序遍历2.4 层序遍历3 二叉搜索树(BST)3.1 二分查找法1)二分查找法定义2)二分查找法劣势3.2 BST定义3.3 验证二叉搜索树1)先序遍历2)中序遍历3.4 局限性4 平衡二叉树(AVL)4.1 定义4.2 验证二叉平衡树1)自顶向下2)自底向上4.3 旋转1)LL2)RR3)LR4)RL4.4 失衡调整4.5 完整代码示例4.6

2022-03-29 22:46:10 1470

原创 深入分析InnoDB索引选型为B+Tree的原因

深入探究InnoDB存储引擎的索引选型为B+Tree原因,及类比各种数据结构分析其适用场景!

2023-09-06 16:14:36 201

原创 一篇文章带你了解AQS共享锁实现

前面介绍过AQS独占锁的实现,其实在AQS(AbstractQueuedSynchronizer)中,除了提供了独占锁的的实现,还提供了共享锁的实现。同样地AQS实现共享锁也是使用了一个共享状态,通过这个状态来记录了当前共享锁持有的数量...

2023-08-28 02:00:50 714

原创 CGLIB动态代理底层源码分析

上一篇文章已经介绍过JDK动态代理,相比于JDK动态代理,CGLIB动态代理的实现就复杂很多,本文就一起来探索CGLIB动态代理的实现吧!上一篇文章链接地址 =》JDK动态代理底层源码分析CGLIB(Code Generation Library)是一个基于字节码生成的动态代理库,它可以在运行时生成代理类来实现动态代理。相对于基于接口的动态代理(如JDK动态代理),CGLIB可以代理没有实现接口的类。CGLIB的底层原理主要涉及两个核心概念:字节码生成和子类代理。

2023-08-10 17:46:08 549

原创 JDK动态代理底层源码分析

之前分享过一篇博客是代理模式的 =》一篇文章带你搞懂代理模式,一直没有更新JDK动态代理的底层实现,现补上…JDK动态代理(JDK Dynamic Proxy)是Java语言提供的一种代理模式实现。它允许在运行时动态地创建代理类和代理对象,来代替原始对象进行方法的调用。在使用JDK动态代理时,主要依靠Java提供的两个关键类:JDK提供的代理对象生成工具类:代理对象的回调处理器,是一个函数式接口:接收三个参数,返回一个结果。

2023-08-08 12:33:23 246

原创 一篇文章带你了解AQS独占锁实现

Java中的大部分同步类(ReentrantLock、ReentrantReadWriteLock、CountDownLatch、Semaphore、CyclicBarrier等)都是基于AQS(AbstractQueuedSynchronizer)实现的。AQS是一种提供了原子式管理同步状态、阻塞和唤醒线程功能以及队列模型的简单框架。AQS内部的同步队列为CLH变体的虚拟双向队列FIFO,依靠单个原子int值来表示状态,通过占用和释放方法改变状态值...

2023-03-30 12:41:01 594

原创 一篇文章带你了解ThreadLocal

ThreadLocal源码、Java引用类型、内存泄漏

2023-02-23 09:53:56 334 1

原创 一篇文章带你搞懂装饰者模式

1、装饰者模式  装饰者模式是指在无需改变原有类及类的继承关系的情况下,动态扩建一个类的功能。通过装饰者来包裹真实的对象,并动态地向对象添加或者撤销功能。动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性,装饰者模式也体现了开闭原则(ocp)。Component:抽象组件,定义业务需要实现的抽象方法ConcreteComponent:具体组件,继承(或实现)Component,定义主体对象Decorator:装饰者(可以为具体实现类或抽象类),实现Component接口并聚合其对象

2021-02-23 11:31:12 119

原创 一篇文章带你搞懂观察者模式

文章目录观察者模式1、目的2、观察者和被观察者关系3、UML4、代码实现4.1、demo:天气4.2、demo:数值转换观察者模式1、目的  观察者模式使得一个对象的状态改变时,已经注册的其它依赖对象能够观察到这一改变。2、观察者和被观察者关系  对象之间一对多的一种设计方案,被依赖的对象为被观察者,依赖的对象为Observer(观察者)。当被观察者的状态发生变化,所有的依赖对象Observer都将被通知,属于行为型模式。3、UMLSubject:通常是由类实现的可观察的接口regis

2021-02-20 16:19:34 1578

原创 一篇文章带你搞懂单例模式

文章目录1、单例模式2、懒汉式2.1、初始版本2.2、同步方法synchronized保证线程安全2.3、同步代码块2.4、DCL懒汉式(双重检测锁模式)⭐⭐⭐2.5、静态内部类⭐⭐3、深入分析DCL3.1、DCL真的安全吗3.2、DCL优化3.3、DCL指令重排问题4、安全的单例模式4.1、枚举类实现单例4.2、枚举类如何实现单例5、总结1、单例模式  单例模式:采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且只能通过该类提供的一个静态方法取得其对象实例。饿汉式:在类加载的

2020-08-20 20:17:50 154

原创 一篇文章带你搞懂迭代器模式

迭代器模式1、概要  在面向对象编程中,迭代器模式是一种很常见的设计模式:它可以让用户透过特定的接口巡访容器中的每一个元素而不用了解底层的实现。就好像我们在使用集合的时候并不需要关注其底层实现是数组,链表或是其它数据结构,我们可以使用相同的方式去遍历集合中的元素而不暴露其内部结构,是不是感觉迭代器模式就是为了容器而生的!  目的:迭代器模式提供了一种顺序遍历聚合对象元素而不用暴露其内部结构的方式2、实现  从类图可以看到迭代器的各个角色:主要是基于两个接口,然后通过其成对的实现类来实现,因此每一

2020-07-01 19:45:49 433

原创 一篇文章带你搞懂代理模式

一、前言  代理模式是一种很常见的设计模式,在多线程、aop、远程代理等场景中均有体现,代理在我们的生活中也是很随处可见的。代理模式即为一个真实对象提供了一个代理对象,这个代理除了拥有真实对象的功能外,还能在不改变真实对象的情况下进行功能的增强且也能达到安全控制的效果。1、代理分类静态代理动态代理基于接口:JDK代理基于类:Cglib代理2、代理角色AbstractSubject(抽象角色):真实角色和代理角色都实现的接口或抽象类RealSubject(真实角色):真正提供功

2020-06-09 18:46:45 1136 1

原创 一分钟完全了解HTTP状态码

一、状态码的类别类别原因短语1XXInformational(信息状态码)接收的请求正在处理2XXSuccess(成功状态码)请求正常处理完毕3XXRedirection(重定向状态码)需要进行附加操作以完成请求4XXClient Error(客户端错误状态码)服务器无法处理请求5XXServer Error(服务器状态码)服务器处理请求出错二、常见状态码2XX200 OK:表示从客户端发来的请求在服务器端被正常处理了,在响应

2020-06-04 18:30:31 179

原创 Linux安装MySQL5.7,完美避坑

Linux安装MySQL5.7

2020-05-25 22:01:11 681

原创 Linux配置jdk

Step1:上传1、创建jdk安装目录[root@localhost /]# mkdir /usr/java2、上传jdk压缩包Step2:解压[root@iZuf6c4gosw6jirlpgbp8eZ java]# tar -xzvf jdk-8u192-linux-x64.tar.gz [root@iZuf6c4gosw6jirlpgbp8eZ java]# rm -f jdk-8u192-linux-x64.tar.gz Step3:添加环境变量(建议先备份)[root@

2020-05-25 11:57:19 310 1

原创 VM安装CentOS7详细教程

一、安装准备CentOS7镜像:推荐下载地址:https://distrowatch.com/dwres.php?resource=majorVMwear 15 proXshell6二、安装步骤1、建议新建一个磁盘分区安装虚拟机2、创建新的虚拟机3、选择自定义安装(可针对性加强某些资源和移除不必要的资源)4、选择兼容性安装(高版本的VM虚拟机复制到低版本的VM虚拟机可能会出现不兼容的情况)5、选择稍后安装操作系统(进行VM的一些硬件上的配置后安装)6

2020-05-25 11:47:06 434 1

原创 一篇文章带你搞懂Java数据类型

Java基本数据类型基本类型大小(字节)默认值封装类boolean-falseBooleanbyte1(byte)0Byteshort2(short)0Shortchar2‘\u0000(null)’Characterint40Integerfloat40.0fFloatdouble80.0dDoublelong80LLong1)除以上8种基本数据类型外的数据类型均为引用数据类型2)虽

2020-05-13 16:11:42 263

空空如也

空空如也

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

TA关注的人

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