自定义博客皮肤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成长之路

好好学习,天天向上

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

原创 我给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 45

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

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

2021-01-12 11:44:23 69

原创 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 30 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 66

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

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

2020-11-26 10:09:35 310 1

原创 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 573 3

原创 LinkedHashMap是如何实现有序的

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

2020-11-16 18:26:14 533

原创 从源码分析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 52

原创 CountDownLatch源码分析

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

2020-09-11 16:00:04 57

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

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

2020-09-11 15:51:39 95

原创 只用过synchronized却不知ReentrantLock

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

2020-09-11 15:43:39 34

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

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

2020-09-11 15:28:09 74

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

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

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

原创 堆和堆排序

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

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

原创 聊聊树与二叉树

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2020-03-29 00:00:00 237

原创 《大话数据结构》队列的顺序存储和链式存储

1. 简介成都的火车南站早上真的恐怖,地铁站人山人海,从地铁里面一直排队到门口,虽然人很多但是不得不说我国人民素质还是蛮高的,都是来了之后排在队伍的最后面,没有一个人去插队。这样不仅避免了人员拥挤的混乱,也让需要乘坐地铁的人可以尽快乘上地铁。 其实我们的队列就像排队等地铁一样,遵从先来后到,先来的人先上车后来的人后上车,队列则是先插入的数据,先取出去,后来的数据后取出去,先进先...

2019-12-12 09:42:19 819

原创 《大话数据结构》栈的顺序存储及链式存储

1. 简介很多男孩子小时候肯定玩过玩具枪,如果你小时候没有玩过那你一定在游乐园里玩过玩具枪打气球的游戏。我小时候玩玩具枪时最喜欢的就是收集子弹,捡邻居家孩子打完后的子弹,这样可以重复利用,我自己也不用花钱买子弹。 想想一下玩具枪上子弹的过程,先取下弹夹,然后将一颗颗的子弹放到弹夹里,然后先被放进去的子弹最后被射出来,最后放进去的子弹最先被射出来。而这种先进后出,后进先出的就是栈...

2019-11-27 16:42:28 774

原创 线性表的链式存储结构

1. 什么是线性表的链式存储前面我们看过线性表的顺序存储结构,他是通过数组开辟一段连续的地址空间来实现的,在做插入操作和删除操作时,因为要维护数组的结构所以时间复杂度为O(N);有什么办法可以解决删除和插入操作效率低的办法吗?没错就是链表,我们只需要在保存当前数据的同时,也保存其下一个元素的地址就行了,这样在删除和修改时实际上并不需要维护结构,只需要改变被删除或被插入数据上一个的地址...

2019-11-12 23:35:47 1285 1

原创 如何使用Idea的远程Debug

1. 初识远程Debug 前段时间在bilibili上看到一个Java大神给Maven修Bug,他从GitHub上把有问题版本的Maven拉取下来然后找到对应的点进行Debug调试,但是Maven并不是一个web项目实际上都没办法进行启动调试,所以他使用了远程Debug(大多数开源项目都可以使用远程Debug进行调试,方便程序员能够调试他们的项目,当然你也可以解决开源项目的bug并pr...

2019-10-29 21:45:46 1445 1

原创 《大话数据结构》线性表的顺序存储结构

1. 什么是线性表 以前上幼儿园每当放学的时候,每个班都需要按照高矮顺序排成一列进行一起走出校门,除第一位同学以外每一个同学前面都仅有一个同学,而除了最后一个同学外每一个同学后面都仅有一个同学,当时老师让每一个同学记住自己前面和后面是谁,如果谁没来就告诉老师,这样老师就可以知道全班同学是否到都在。 同样线性表也是如此,每一个元素前后都仅有一个元素(第一个元素无前驱,最后一个元素...

2019-10-23 23:34:03 827 1

原创 Gradle的简洁之美,Gradle搭建SpringBoot+DataJpa项目

1.什么是GradleGradle是一个开源的构建自动化工具,专注于灵活性和性能。Gradle构建脚本使用Groovy或KotlinDSL编写。他和Maven一样都能帮我们管理jar包。2.Maven对比Gradle1.Gradle使用的是Groovy脚本语言进行jar包依赖,Maven使用的是XML的。...

2019-08-27 00:00:00 190 1

原创 《大话数据结构》数据结构的逻辑结构和物理结构

1. 什么是数据结构数据结构是互相之间存在一种或多种特定关系的数据元素的集合,此解释来自于《大话数据结构》。小白表示这都什么玩意啊。简单的来说数据结构就是数...

2019-08-21 22:33:22 468 1

转载 聊聊那些Git的基本概念

Git的简介Git是目前世界上最先进的分布式版本控制系统(没有之一)。那什么是版本控制系统?如果你用Microsoft Word写过长篇大论,那你一定有这样的经历:想删除一个段落,又怕将来想恢复找不回来怎么办?有办法,先把当前文件“另存为……”一个新的Word文件,再接着改,改到一定程度,再“另存为……”一个新文件,这样一直改下去,最后你的Wor...

2019-08-16 00:00:00 73 1

原创 你不得不知道的Git常用命令

初始化Git(把文件变为Git可以管理的版本库) $ git init把文件添加到仓库 $ git add 文件名添加所有新建或修改文件到仓库 $git add .查看文件是否添加到仓库 $ git stat...

2019-08-15 00:07:16 66 1

原创 手写一个JDK1.7的简版HashMap

要实现的功能1.能够添加key和value的键值对2.能够根据get方法传入key获取其对应的value1.HashMap基本原理JDK1.7的HashMap主要采用的是数组+链表进行存储的,数组存放的是一个类,而这个类中有四个字段,分别是hashcode(用于存放在数组的指定下标下面)、key、value、next(发生hash冲突时指向下一个类从而形成链表)put方法基本...

2019-08-05 23:08:43 92 1

原创 MySQL中插入语句(Insert)的几种使用方式

1.INSERT 简写方式插入数据(不推荐)先看一下表中有那些数据使用Inset into 表名 values(值1,值2)进行插入,并对查看插入数据是...

2019-07-11 00:00:00 1318

原创 MySQL存储过程创建与使用

MySQL存储过程创建与使用学习点:   1.什么是存储过程?   2.为什么要使用存储过程?   3.存储过程应该怎么使用呢?1.什么是存储过程?...

2019-07-05 15:39:22 427 1

原创 MySQL视图的创建与使用

Mysql视图的创建与使用学习点:   1.什么是视图?   2.为什么要使用视图?   3.视图应该怎么使用呢?1.什么是视图? 视图是MySQL的一种虚拟表,实际的表我们可以看到每一行的数据,而视图是另一种形式的表,他可以将任何的查询结果变成一种虚拟的表方便下一次进行查询,例如如下两张表。...

2019-07-04 21:51:24 233 1

原创 MySQL中添加或插入语句(Insert)的几种使用方式

1.Intsert简写方式插入数据 1.先看一下表中有那些数据 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190703111342249.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxX...

2019-07-03 11:13:56 133239 2

原创 MySQL出现The server time zone value '�й���׼ʱ��' is unrecognized

1.错误日志如下所示** java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTi...

2019-07-03 10:26:07 19570 4

原创 Springboot集成Spring Data Jpa

Springboot集成SpringDataJpa1.首先在IDEA中创建Maven项目,然后引入如下jar包2.构建springboot的启动类1.首先在IDEA中创建Maven项目,然后引入如下jar包2.构建springboot的启动类package springbootdemo;import org.springframework.boot.SpringApplication;...

2019-07-03 09:41:56 72 1

原创 Java中静态代码块、代码块以及构造函数执行顺序详解

在JavaSE的基础笔试题中经常会出现这三个的一个执行顺序,那么他们的执行顺序究竟是怎么样的呢?通过代码我们可以直接看一下最终结果(代码如下)public class testOne extends TestTwo{ public testOne(){ System.out.println("子类构造方法"); } { System.out...

2019-05-31 18:12:14 12473 5

原创 spring cloud config client不能读取到服务器配置文件

问题:spring cloud config client不能读取到服务器配置文件,并没有报错,但是却读取不到配置文件的信息错误原因一:在client中yml配置文件中名字必须和configserver中yml配置的名字保持一致,因为client是注册在服务中心的,而client是根据名字是否相同来找到configserver的1.client中的配置名字如下2.configserve...

2019-01-11 20:26:16 6697 6

原创 shiro实现免密登录,解决三方登录问题

问题:之前在一个项目中,需要实现短信快捷登录,当输入手机号获取验证码且验证码正确时,通过数据库查询出用户,而由于使用了shiro对密码进行了加密,导致查询出来的用户密码时加密的,不能够进行登录。解决办法:1.定义一个枚举代码如下public enum LoginType { PASSWORD("password"), // 密码登录 NOPASSWD("nopassword...

2019-01-01 14:50:52 9362 10

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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