自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

知的IT成长之路

好好学习,天天向上

  • 博客(63)
  • 收藏
  • 关注

原创 14.设计模式--中介者模式(Mediator模式)

1.定义 大猫的Java笔记 一个正在努力学习的Java开发,分享自己的学习笔记 44篇原创内容

2021-11-09 14:55:32 1072

原创 13.设计模式--外观模式(Facade模式)

1.定义 大猫的Java笔记 一个正在努力学习的Java开发,分享自己的学习笔记 43篇原创内容

2021-11-08 15:51:10 1099

原创 12.设计模式--责任链模式(Chain of Responsibility模式)

1.定义 大猫的Java笔记 一个正在努力学习的Java开发,分享自己的学习笔记 42篇原创内容

2021-11-08 15:46:09 514

原创 11.设计模式--装饰者模式(Decorator模式)

1.定义 大猫的Java笔记 一个正在努力学习的Java开发,分享自己的学习笔记 43篇原创内容

2021-11-08 15:39:11 209

原创 10.设计模式--组合模式(Composite模式)

1.定义 大猫的Java笔记 一个正在努力学习的Java开发,分享自己的学习笔记 43篇原创内容

2021-11-08 15:31:01 131

原创 9.设计模式--策略模式(Strategy模式)

1.定义 大猫的Java笔记 一个正在努力学习的Java开发,分享自己的学习笔记 42篇原创内容

2021-11-06 17:24:24 252

原创 8.设计模式--桥接模式(Bridge模式)

1.定义  桥接模式是一种结构型模型,现实生活中桥就是连接在河两端方便通行的建筑。  而桥接模式则是对类的功能层次结构和类的实现层次结构中间实现的一个桥梁。类的功能层次结构  所谓类的功能层次结构就是对类进行继承后进行的功能扩展,例如Car(车类),所有车都有启动和停止方法以及转弯等方法。但是现在我有一个特殊的车需要在Car车类的基础上加一个倒车影像功能,此时只需要继承Car类再自己的类中加一个倒车影像即可,此时就是类的功能层次结构。类的实现层次结

2021-10-25 20:42:16 604 1

原创 7.设计模式--抽象工厂模式(AbstractFactory模式)

1.定义  抽象工厂模式也是一种创建型模型,是对工厂的一种抽象,可以理解为生产工厂的工厂。不但工厂是抽象的,产品是抽象的,而且有多个产品需要创建,因此,这个抽象工厂会对应到多个实际工厂,每个实际工厂负责创建多个实际产品。  例如手机和电脑都是通过工厂进行生产的,同时手机和电脑可能属于不同的工厂,但可能是同一个品牌;小米手机和小米电脑属于同一品牌,而华为手机和电脑也属于同一品牌,但是却存在两个维度。    1,产品维度,无论小米手机还是华为

2021-10-25 20:40:06 3856

原创 6.设计模式--建造者模式(Builder模式)

1.场景  建造者模式也是一种创建型模型,是将一个复杂的对象的构建与他的表示分离。  举个例子:比如我要写一本书那么写这个书需要书名、作者、标题、内容等,但是这本书要创作完成需要一个人来创作吧,当然这个人就是作者,也可能不是(比如蹭书的编写作者)。至于这个书该怎么写是先写标题还是先写作者或者是内容这个是构建者(作者)来决定的。  建造者模式大多数情况下,都是通过静态内部类来进行实现的。例如现在有一个小说书类,有4个属性name、author、tit

2021-10-21 11:41:13 168

原创 5.设计模式--原型模式(prototype模式)

1.场景  大学的时候毕业论文太难写了,所以直接抄同学的,但是这种你并不是一个字一个字的重写。而是使用cv大法(ctrl+c和ctrl+v),直接将毕业论文进行复制粘贴。然后自己就可以安心的去打游戏了。  原型模式是一种创建型模式,例如我们要创建一个Student对象都是采用的new Student();但是有些时候对象的创建十分复杂,这个时候原型模式就登场了,就像毕业论文太长了自己写太麻烦。所以我们选择复制。2.原型模式结构图  Product是

2021-10-21 11:18:38 128

原创 4.设计模式--工厂方法模式(FactoryMethod模式)

1.场景  工厂听这个名字就知道一个产生的地方。同样工厂模式也是创建型模式,我们用的电脑、手机、电视等,都是工厂进行生产的。即工厂创造出来的。现在我们需要造一台电脑,工厂生产的时候一般分为2步,第一步硬件的组装,第二步安装电脑对应的操作系统。2.工厂方法结构图3.工厂方法的实现  Factory抽象类用于实现定义电脑生产部步骤,以及生产的方法和安装系统的方法,光看Factory的时候是不是感觉很像模板方法模式。实际上工厂方法和模板方法很相似,只是工厂方法用于创建实例。

2021-10-21 11:16:49 136

原创 3.设计模式--适配器模式(adapter模式)

1.场景  适配器模式可能是开发人员用的最多的一种设计模式,做后台开发你可能每天都在使用。只是不知道他的名字;现实中的适配器你应该不会陌生,新款的IQOO 8 pro手机充电器已经达到了120w,实际上充电器就是一个适配器,他的作用就是将家用220v的交流电转换为供手机可以充电使用的直流电。适配器可以理解为就是一个中间协调的工具。  适配器模式分为2种,类适配器(使用继承)和对象适配器(使用委托)2.类适配器结构图3.实现适配器模式  Altern

2021-10-21 09:50:27 1086

原创 2.设计模式--模板方法模式(TemplateMethod模式)

1.场景  模板方法模式,听名字就知道这个肯定和模板有关系,有这样一个逻辑,厨师炒菜,炒菜都是先打火,然后放油、放盐、翻炒、起锅、关火无论是我们炒土豆还是青菜,实际上都是按照这个模板来,步骤都是那么几步,都是按照顺序来的。2.模板方式结构图3.实现模板方法模式  TemplateMethod就是炒菜的模板,定义了抽象方法。其中具体的实现是交给子类去做的。TemplateMethod负责模板,就像炒菜模板只给了步骤,具体放多少油、放多少菜、翻炒多少下应该是子类去决定。c

2021-10-21 09:45:49 139

原创 1.设计模式--迭代器模式(iterator模式)

1.场景  大多数程序员家里都有很多书籍,但是书多以后,收纳就成了个问题,想要找书的时候,可能在翻遍了整个房间才找到自己想要找的书;所以这种情况就需要一个书架。书架的作用就是放置书,同时在找书的时候也很方便。如果类比一下在书架上找书这个步骤是不是很像代码中的遍历。2.迭代器模式结构图3.实现迭代器模式  Aggregate接口的作用就是表示这是一个集合,或者说只要继承了Aggregate就是一个集合,你可以类比List,就像ArrayList实现于List接口一样。&

2021-10-21 09:33:13 184

原创 深入理解ThreadPoolExecutor源码

1.ThreadPoolExeCutor是什么?线程池的作用是为了解决频繁创建和销毁线程的性能问题,类似的有MySQL连接池。2.基础介绍 ThreadPoolExecutor得7个参数ThreadPoolExecutor最常用的构造方法有7个参数如下:1.corePoolSize(核心线程数),核心线程数可以理解为公司的人员。无论忙还是不忙你都在公司上班,不会说闲的时候就被开除。2.maximumPoolSize(最大线程数),最大线程数可以理解...

2021-10-20 14:07:52 164

原创 死磕到底-深入理解ReentrantReadWriteLock源码

1.线程安全、如果对num进行累加操作,使用10个线程,每个加1000次,最后应该是10000,但是你会发现不是10000。 当使用了synchronized再次进行累加操作。此时累加的值就是10000,这是因为synchronized能够保证每次只有一个线程进入临界区。2.ReentrantReadWriteLock、 JDK中synchronized的使用是非常广泛的,例如线程安全的HashTable,HashTa...

2021-10-20 13:58:08 83

原创 MySQL可重复读和读已提交实现原理,深入理解MVCC。

1.隔离级别MySQL中隔离级别分为4种,提未交读、读已提交、可重复读、串行化。同时MySQL默认隔离级别为可重复读。图片查看MySQL隔离级别SELECT @@tx_isolation设置当前会话隔离级别set session transaction isolation level 隔离级别2.脏读、不可重复读、幻读建表语句如下CREATE TABLE `account` (`id` INT ( 11 ) NOT NULL AUTO_INCREMENT COMMENT

2021-10-20 11:54:45 3599 2

原创 redo log和bin log以及两阶段提交(笔记)

1.redo log如果熟悉MySQL你肯定知道MySQL能过对数据进行恢复(前提是开启bin log日志),当然这要归功于binlog日志。但是你可曾听过redo log呢?首先redo log是innodb引擎特有的,需要注意的是innodb是MySQL的一个插件。什么是redo log呢?有啥用?实际上当我们执行一条修改语句,难道每次都要落盘吗?显然是不可能的,如果每次都需要落盘,首先数据量大的时候每次都要去对这么大的文件进行io操作,显然在效率上是不可行的。那么redo lo

2021-10-20 11:41:12 2107

原创 一条MySQL查询语句怎么执行的(笔记)

1.MySQL基础架构首先在了解MySQL查询语句怎么执行的时候,需要整体了解MySQL的整体架构,MySQL的整体架构如下所示。2.连接器连接器的作用就是客户端和用户端进行连接的,当执行mysql -uroot-p实际上就是客户端和连接器进行交互。如果连接成功此时连接器会进行权限校验。连接器连接成功后如果此时修改了用户权限,需要重新连接才能够刷新用户权限;同时可以使用showprocesslist命令查看用户连接状况,默认8小时不做任何操作会断开连接。长连接:长连接是指用.

2021-10-20 11:35:31 86

原创 我给MyCat修复了一个bug,cloumnNuber: 9;元素类型为“user“的内容必须匹配“(property)+“

1.起因1.各大培训机构,价格10万的视频 Java架构师视频免费送。2.各种电子书籍经典Java书籍免费送3.关注下方我的公众号进行免费获取。4.个人技术总结免费赠送 MyCat发生bug的版本为 1.6-RELEASE-20161028204710-linux.tar.gz。 事情发生在前几天的一个夜晚,当我给MyCat进行配置表级DML权限的时候,然后发现了这样的错误信息。 当看到这行错...

2021-01-12 13:16:36 508 3

原创 mycat双主双从主从,主从复制和读写分离实现

1.准备与介绍1.各大培训机构,价格10万的视频 Java架构师视频免费送。2.各种电子书籍经典Java书籍免费送3.关注下方我的公众号进行免费获取。4.个人技术总结免费赠送由于前面前面已经介绍过了mycat的安装以及配置,这里就不在细说,如果下面对mycat的操作不是很清楚,可以看上一篇文章。 前面介绍了单机单从模式,但是却存在一些问题,并不能高可用。例如我们的写主机宕机了,此时由于备机的数据都从主机获取的,肯定会出问题的,会导...

2021-01-12 11:44:23 588

原创 Mycat从入门安装到MySQL主从复制,再到读写分离实现

1.介绍1.各大培训机构,价格10万的视频 Java架构师视频免费送。2.各种电子书籍经典Java书籍免费送3.关注下方我的公众号进行免费获取。4.个人技术总结免费赠送 Mycat可不是我的猫,他是基于Java语言编写的一款开源数据库中间件,是一个实现了MySQL协议的服务器。能够实现对主从数据库的读写分离、主从复制、水平或垂直切分表等功能。2.下载 下载地址:http://dl.mycat.org.cn/1...

2021-01-12 11:36:31 120 1

原创 从强、软、弱、虚四种引用到ThreadLocal使用及源码

1.各大培训机构,价格10万的视频 Java架构师视频免费送。2.各种电子书籍经典Java书籍免费送3.关注下方我的公众号进行免费获取。4.个人技术总结免费赠送​1.强软弱虚在聊ThreadLocal存不存在内存泄漏问题之前,我们先看看Java的4种引用,分别为强引用、软引用、弱引用和虚引用。1.1 强引用 强引用是我们可能接触最多的一种引用,例如我们写一个类Student stu = new Studnet,...

2020-11-26 10:17:25 257

原创 Debug jdk源码,如何给源码加注释?

1.各大培训机构,价格10万的视频 Java架构师视频免费送2.各种电子书籍经典Java书籍免费送3.关注下方我的公众号进行免费获取4.个人技术总结免费赠送1.不按套路进入 一个学弟问我,你觉得面试中问什么面试题的频率最高?我毫不犹豫的回答:“源码”,尤其是HasMap,我所经历的面试官几乎必问。朋友听后心一慌,自己还没看过。于是朋友准备去Debug看一下HashMap的源码实现,他写了下面的代码准备进行Debug。然后发现怎么进入不了构...

2020-11-26 10:09:35 1746 3

原创 MapStruct最详细的使用教程,别在用BeanUtils.copyProperties ()

1.各大培训机构,价格10万的视频 Java架构师视频免费送。2.各种电子书籍经典Java书籍免费送3.关注下方我的公众号进行免费获取。4.个人技术总结免费赠送1.为什么使用MapStruct在开发中你可曾遇到如下这样的问题?MyBtatis从数据库中查询的数据映射到domain的实体类上,然后有时候需要将domain的实体类映射给前端的VO类,用于展示。如下所示,假如Student是domain,而给前端展示的为StudentVO。...

2020-11-26 10:03:30 19500 8

原创 LinkedHashMap是如何实现有序的

1.LinkedHashMap有序如果你用过HashMap那么肯定知道HashMap是不能保证有序性的,之所以HashMap不能保证有序性是因为存放数组位置的数据时根据hash函数决定的;但是有没有能够保证有序性的Map呢?那就是LinkedHashMap,下面我们通过代码来看一下HashMap的无序和LinkedHashMap的有序性。HashMap无序LinkedHashMap有序 Li...

2020-11-16 18:26:14 10127 1

原创 从源码分析ArrayList和Vector的区别

1.Vector和ArrayList可能你对ArrayList平时耳熟能详,但是你可能却不知道Vector,Vector其实和ArrayList的用法基本一致,不同的在于Vector是线程安全的而ArrayList非线程安全。Vector之所以线程安全是因为在实现的方法上加了synchronized修饰符。ArrayList和Vector的类继承和实现图如下 2.ArrayList和Vector的add方法对比...

2020-09-11 16:05:44 119

原创 CountDownLatch源码分析

1.CountDownLatch的用法CountDownLatch源码分析之前,首先看一看CountDownLatch的用法,我们通过一段代码来说明CountDownLatch的基本用法,代码如下。CountDownLatch可以指定一个count,例如我们代码中指定为10,然后启动了10个线程,线程就是执行CountDownLatch的countDown方法,每执行一次,count就会减1,直到为0的时候下面countDown的await方法才会释放主线...

2020-09-11 16:00:04 364

原创 ReentrantLock的lock与unLock方法源码分析

1.lock方法源码前面已经说过了ReentrantLock的基本用法,下面我们通过源码对ReentrantLock进行分析,首先写一个测试类,作用是在debug的时候好进行源码分析;测试类代码如下,使用两个线程模拟加锁过程,若第一个线程拿到锁以后实际上第二个线程时拿不到的,没有unlock进行释放锁。当我们进行debug进入到lock方法的时候,实际上我们可以看到调用的是NonfairSync的lock方法,而NonfairSync究竟是一个什么呢?...

2020-09-11 15:51:39 337

原创 只用过synchronized却不知ReentrantLock

1.ReentrantLock是什么在说ReentrantLock之前,必须先说一说锁。锁是为了线程安全而诞生的,我们常用的锁就是synchronized,通过下面程序看一下什么叫锁,锁有什么用。下面我们模拟一下数据库主键自增,假如我们现在有10个线程,每个线程对count进行自增,确保主键的唯一性,而事实却是当只有一个线程时却是没有问题,当多线程时却有着无法预估的错误。可以看出来此时已经导致生成的主键重复了,原因是当线程在做自增时,同时存在其他线程也...

2020-09-11 15:43:39 103

原创 聊聊这8种单例模式的优缺点

1.什么是单例模式?当我们new一个对象时会帮我们申请内存地址,每一次去new的时候都会构建不同的地址,而单例模式就是每次获取的实例化对象都保证是同一份。常见的单例模式有8种写法,每一种单例模式都有自己的优缺点,下面让我们来看看这8种单例模式。1.饿汉模式(推荐)优点:当类加载到内存后就实例化一个单例,由Jvm保证线程安全,写法超级简单;实际开发中也不会在意是否一定要使用了才进行加载。缺点:可通过反射和反序列化进行更改,不管是否使用,...

2020-09-11 15:28:09 1591

原创 肝了几天我算是理解了红黑树

1.二叉排序树在学习红黑树之前我们需要了解一下二叉排序树,所谓二叉排序树就是一种特殊的二叉树,首先满足二叉树的性质,然后它存储数据的方式是左边节点比父节点的数据小,而右边节点比父节点数据大。这样当我们查询一个数据时,比如我们要找数据8,先从根节点开始,8比12小所以去左子树找,然后与5比较发现比5大那么去右子节点此时就找到了我们需要的数据8。是不是类似于二分查找呢?只需要O(logn)就能找到数据。二叉搜索树(二叉排序树,二叉树查找树),他的时间复杂度取决于树的...

2020-06-04 17:52:37 228 1

原创 堆和堆排序

1.什么是堆?堆是一种特殊的二叉树,满足以下两点的我们称之为堆1.必须是一棵完全二叉树,完全二叉树指树的元素在新增时满足从上到下,从左到右的新增顺序。2.每个节点的值都大于等于或者小于等于左右子树的值。其中每个节点的值大于等于左右子树值的堆我们称之为大顶堆,而每个节点的值小于等于左右子树的值我们称之为小顶堆。从上述图中可以看出图1和图2为大顶堆,而图3为小顶堆,而图4不是堆,原因是因为虽然是一棵二叉树,但是不是一颗...

2020-06-04 17:41:33 628 1

原创 聊聊树与二叉树

1.什么是树现实生活中的树就是有一个主干,加分支加叶子组成的一种植物,大概如下图所示数据结构中的树是什么样子呢?他就像是一个倒着生长的树,对照着两幅图看,是不是很相似。其中圆圈的位置就是数据存放的地方。每个元素我们叫作“节点”,也就是图中的每个圈;用来连线相邻节点之间的关系,我们叫作“父子关系,A 节点就是 B 节点的父节点,B 节点是 A 节点的子节点。B、C、D 这三个节点的父节点是同一个节点,...

2020-06-04 17:37:58 319 1

原创 如何使用散列表实现一个O(1)时间复杂度的LRU缓存算法

1.散列表什么是散列表呢?我举这样一个例子,记得小时候家里只有一个座机,但是这个座机不能存电话号码,于是只能将要联系的人的电话号码写在一个本子上。时间久了本子上的电话号码越来越多。然后这个时候要去找某一个指定的联系人的时候发现很难找到。如果是你你想想一下应该怎么样才能快速找到呢? 其实我们每次新增一个联系人的时候可以将他的姓的首字母取出来,然后所以首字母相同的都在一个区间,也就是做一个目录。 例如张三,我们就将他放在Z字母的地方,同时如果Z字母的联系人又在520页的话...

2020-06-04 17:31:24 707 2

原创 非比较排序--基数排序实现给字符串数组排序

1.计数排序的局限性前面学习了计数排序,可以实现O(n+k)的时间复杂度,但是他有很大的局限性,最大的问题就是如果最大值和最小值之间相差太大的话,那么会浪费掉很大的空间,比如要排序{1,10000,99,64,120}我们可以根据之前的计算公式最大值减去最小值加一得到计数数组的长度,那么计数数组长度就应该是10000,但是实际上我们只存放了5个数据,中间浪费了极大的空间,所以在...

2020-04-30 17:24:13 886 1

原创 非比较排序-计数排序

1.计数排序前面学习了归并排序,快速排序时间复杂度为O(n*logn)而有没有比这更快的排序算法呢?当然是有的那就是计数排序,首先计数排序并不是比较排序算法,而是利用数组来实现的一种算法,想象一下这样一个场景,假如给数组{1,4,5,1,3}做一个排序,我们可以看出其中最大的值就是5,但是怎么利用数组实现排序呢?我们知道数组是一组连续的地址空间,且可以通过下标进行随机访问,数组...

2020-04-30 17:21:12 206 1

原创 为什么插入排序比冒泡排序更受欢迎?

1. 插入排序和冒泡排序的时间复杂度插入排序和冒泡排序的时间复杂度相同,都是 O(n2),在实际的软件开发里,为什么我们更倾向于使用插入排序算法而不是冒泡排序算法呢?2. 先看一下排序算法的几个概念1.原地排序原地排序(Sorted in place)。原地排序算法,就是特指空间复杂度是 O(1) ,的排序算法;因为只需要定义变量来交互值,所以...

2020-04-30 17:13:51 586 1

原创 选择排序、归并排序、快速排序

1.选择排序选择排序算法的实现思路有点类似插入排序,也分已排序区间和未排序区间。但是选择排序每次会从未排序区间中找到最小的元素,将其放到已排序区间的末尾。Java代码实现如下。ps:选择排序的最好情况时间复杂度、最坏情况和平均情况时间复杂度都为 O(n2),同时选择排序不是稳定的排序算法,选择排序只需要常量的内存空间消耗...

2020-04-30 17:06:13 728 1

原创 DCL单例模式你不知道的秘密

1.什么是单例模式?当new一个对象时,每一次new都是创建一个新的对象,而单例模式就是无论怎么样去获取一个对象,永远都是拿到的同一个对象。2.传...

2020-03-29 00:00:00 518

空空如也

空空如也

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

TA关注的人

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