自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SpringBoot源码学习 二

前面已经准备好了源码的环境 不知道的可以看一下上一篇博客1.首先从主启动类的注解 @SpringBootApplication 开始2 点进去该注解 可以看到 该注解是由很多个注解组成的 我们把重点放在这几个注解上 @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan3.先是@SpringBootConfiguration注解 这个相对来说比较简单其实就是@Configuration注解 这个

2021-11-16 10:25:11 564

原创 SpringBoot源码的学习 一

首先先下载源码到本地下载地址这里选择的版本是2.2.9 因为SpringBoot3之后的版本的构建工具就不是maven了 个人个习惯maven所以下载的就是这个 下载完成之后就可以在本地进行解压 解压完成的目录如下在当前的目录下打开命令行窗口 需要注意的是 我这里环境的配置 Java1.8之后 Maven我用的是3.6.3 然后执行命令 mvn clean install -DskipTests -Pfast 这个时间会比较久 需要耐心的等 我第一次用了大概20分钟 后面就快

2021-11-14 09:47:17 692

原创 2021-09-09

MySQL的事务隔离级别简单的解释一下四个隔离级别1)级别1:read uncommitted :读取尚未提交的数据,哪个问题都不能解决2)级别2:read committed:读取已经提交的数据(可以读取到其他事务提交的update更新和insert新增),可以解决脏读,oracle默认的3)级别3:repeatable read:重读读取(只能读取其他**事务已经提交的insert新增数据),可以解决脏读和不可重复读,mysql默认的4)级别4:serializable:串行化:可以解

2021-09-09 21:35:24 101

原创 2021-06-25

对象转map依赖<dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.9.4</version></dependency>// 对象转mapMap<String, String> map = BeanUtils.d

2021-06-25 09:19:52 76

原创 手写Spring容器

这篇博客主要是记录一下如何简单的实现一个Spring容器1.首先一个maven项目结构如下 主要有两个包spring这个包就是实现spring容器的代码2.这里展示的是Test类的代码,我们通过自己定义的BaoboApplicationContext 类根据配置类AppConfig得到我们UserService 对象public class Test { public static void main(String[] args) throws Exception {

2021-05-24 00:06:13 158 1

原创 SpringMvc源码解析注解版

首先看一SpringMvc的执行流程创建一个SpringBoot的项目,只需加入下面的依赖,里面集成了springmvc的依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependenc

2021-05-20 15:42:44 191 2

原创 现在比较常见的注册中心

服务注册中心什么服务注册中心所谓服务注册中心就是在整个的微服务架构中单独提出一个服务,这个服务不完成系统的任何的业务功能,仅仅用来完成对整个微服务系统的服务注册和服务发现,以及对服务健康状态的监控和管理功能。# 1.服务注册中心- 可以对所有的微服务的信息进行存储,如微服务的名称、IP、端口等- 可以在进行服务调用时通过服务发现查询可用的微服务列表及网络地址进行服务调用- 可以对所有的微服务进行心跳检测,如发现某实例长时间无法访问,就会从服务注册表移除该实例。常用的注册中心springcl

2021-05-19 10:15:41 1492

原创 Java的异常体系

2021-04-07 23:20:42 41

原创 如何实现一个IOC容器

2021-04-07 18:32:38 255

原创 ConcurrentHashMap原理,jdk7和jdk8的区别

2021-04-07 18:30:40 203

原创 ==和equals比较

==比较的是栈中的值,基本数据类型是变量值,引用类型是堆中内存对象的地址equals:object中默认也是采用==比较,通常会重写string中进行了重写,比较的是两个字符串的内容例题

2021-04-07 12:05:02 52

原创 Java单例模式的实现

单例模式的实现:主要是将构造器私有化,也就是外部不能通过该类的构造器来创建对象单例模式有两种:懒汉式和饿汉式懒汉式:就是用时加载//Single1.java//懒汉式的单例模式public class Single1{ //先私有化构造方法,让外边不能直接new对象 private Single1(){ } private static Single1 s1 = null; //判断是否已经有对象,没有再new public static Single1 getInstanc

2021-04-06 23:42:59 43

原创 MySQL的隔离级别

首先介绍一下事务的四大特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)四个特性,简称 ACID。而MySQL的隔离级别就属于其中的隔离性SQL 标准定义了四种隔离级别,MySQL 全都支持。这四种隔离级别分别是:读未提交(READ UNCOMMITTED)读提交 (READ COMMITTED)可重复读 (REPEATABLE READ)串行化 (SERIALIZABLE)MySQL默认的隔离级别是可重复读常见

2021-03-31 20:51:08 43

原创 Redis的五种数据结构

2021-03-31 20:23:31 52

原创 redis的过期健的删除策略

2021-03-31 16:52:49 53

原创 缓存雪崩,缓存穿透,缓存击穿

缓存雪崩:是指缓存同一时间大面积失效,所以后面的请求都会落到数据库中,造成数据库短时间承受大量的请求而崩掉。解决方案:缓存数据的过期时间设置随机给每个缓存增加相应的缓存标记,记录缓存是否失效缓存预热互斥锁缓存穿透是指缓存和数据库中都没有数据,导致所有的请求都到了数据库上,造成数据库短时间承受大量的请求而崩掉。解决方案接口层增加校验,如用户鉴权校验,id做基础校验,id<=0的直接拦截从缓存拿不到的数据,在数据库中也拿不到可以设置一个null值给它,缓存有效时间设置短点,这样

2021-03-31 14:36:59 43

原创 idea2020.2.3启动多个微服务

在一个微服务的项目中,每次启动里面的服务都要一个个启动,非常麻烦可以在:.idea 下的workspace.xml文件里面找到一个componentRunManager如下图所示:在里面添加这个配置```xml <option name="arquillianRunConfiguration"> <value> <option name="containerStateName" value="" /> &l

2021-03-25 10:44:19 284

原创 docker安装

docker安装外国镜像地址:https://hub.docker.com/docker安装地址:https://docs.docker.com/install/linux/docker-ce/centos/在这里说明一下:sudo是在非root用户时,需要添加的命令,root用户下可以把sudo去掉1.卸载sudo yum remove docker \ docker-client \ docker-client-lates

2021-03-24 10:11:13 50

原创 选择排序

代码实现: //选择排序 //时间复杂度O(N^) public static void selectSort(int[] arr) { for (int i = 0; i < arr.length - 1; i++) {//排序的次数,每次找出最小的那一个 //假定最小的值的下标为o int minIndex = i; int min = arr[i]; //第一轮..

2021-03-23 14:11:30 41

原创 MP的逻辑删除和物理删除

简述:物理删除:就是我们平时正常的删除,直接删除数据库的数据;逻辑删除:就是增加一个标志字段,通过修改这个字段的值,来删除这个值具体的实现:首先,在User.java 中添加一个字段deleted,设置它的初始值为0//逻辑删除@TableLogic@TableField(fill = FieldFill.INSERT)private Integer deleted;package com.ebaobo.mybatisplus.handler;import com.baomidou.

2021-03-21 10:37:19 846 1

原创 ES6和ES5的区别

1.首先要知道的是es5的兼容性比较好所以在大部分的浏览器都可以正确的运行,而es6因为是比较新的语法所以兼容还不够好,因此大部分的开发流程就是,先用es6语法开发然后借用babel工具将es6转化为es5运行2.es6模块化代码无法在node环境中直接运行,需要转化为es53.将es6转化为es5的方法建立一个文件夹,新建一个.babelrc的文件{ "presets":["es2015"], "plugins": []}执行babel 文件名 -d 新建文件名生成es5

2021-03-21 10:35:57 172

原创 MyBatis的xml文件扫描不到的解决方法

解决掉三种方式第三种所有的配置pom.xml<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> &

2021-03-21 10:35:04 703

原创 tcp的三次握手和四次挥手

第一次握手:客户端向服务端发送一个SYN数据包,该数据包SYN=1,随机序列seq =j,客户端进入SYN_SENT状态等待服务端确认第二次握手:服务端接收客户端的数据包后,知道客户端要建立连接,服务端使SYN=1,ACK=1,ack =j+1产生随机序列seq=k,服务端将这个数据包发送给客户端确认连接请求,然后服务端进入SYN_RCVD状态第三次握手:客户端收到确认请求之后,检查ack是否等于j+1,标志位ACK是否为1,如果正确,使ACK=1,ack=k+1,将数据包发给服务端,服务端检查ACK.

2021-03-19 09:45:08 34

原创 springMvc的工作原理

1.用户发起request请求,这个请求会被前端控制器DispatcherServlet处理2前端控制请求处理器映射器去查找handler,可以根据注解或者xml配置查找3处理器映射器根据配置找到相应的handler,返回给前端控制器4前端控制器请求处理器适配器去执行相应的处理器也就是我们的Controller5,处理器适配器执行处理器6.处理器执行完会返回一个ModelAndView对象7.处理器适配器接收到处理器返回的对象,将其返回给前端控制器8前端控制器将其讲给视图解析器进行视图解析.

2021-03-18 23:00:07 35

原创 Java线程池

阿里巴巴规范:三大方法: public static void main(String[] args) { ExecutorService pool = null; try { //得到单一线程池// pool = Executors.newSingleThreadExecutor(); //固定大小的线程池// pool= Executors.newFixedTh.

2021-03-18 22:46:16 29

原创 Condition实现线程之间的精确唤醒

public static void main(String[] args) { //资源类 Data3 data3 = new Data3(); new Thread(()->{ for (int i = 0;i<10;i++){ data3.a(); } },"A").start(); new Thread(()->{ .

2021-03-18 21:38:58 130

原创 Lock实现生产者和消费者

public static void main(String[] args) { ReentrantLock reentrantLock = new ReentrantLock(); //资源类 Data data = new Data(); new Thread(()->{ for (int i=0;i<10;i++){ try { ..

2021-03-18 21:18:55 142

原创 synchronized的消费者和生产者

public class 生成者 { public static void main(String[] args) { //资源类 Data data = new Data(); new Thread(()->{ for (int i=0;i<10;i++){ try { data.increment(); } c

2021-03-18 20:41:52 56

原创 Synchronized和 Lock的区别

2021-03-18 19:06:43 39

原创 线程和进程

线程有几个状态:6个在这里插入代码片public enum State { NEW,//新生 RUNNABLE,//运行 BLOCKED,//阻塞 WAITING,///等待 TIMED_WAITING,//超时等待 TERMINATED;//终止 }wait/sleep的区别...

2021-03-18 12:16:34 33

原创 jvm锁

锁可以实现共享数据的安全访问,保障线程的原子性,可见性和有序性锁是通过互斥的保障原子性,一个锁只能被一个线程持有可重入性: 如果一个线程持有一个锁的时候还能继续申请该锁,称该锁为可重入锁锁的争用和调度:java平台的内部锁是非公平锁,显示Lock锁既支持公平锁也支持非公平锁锁的粒度:内部锁:synchronized 关键字...

2021-03-18 11:51:20 33

原创 string是线程安全的吗?

string是final修饰的类,是不可变的,就是线程安全的string底层实际上就是final修饰的char 数组

2021-03-16 11:51:14 753

原创 快速排序

同冒泡排序一样,快速排序也属于交换排序,通过元素之间的比较和交换位置来来达到排序的目的。**不用的是:**快速排序在每一轮挑选一个基准元素,并让其他比他大的元素移动到数列的另一边,比它小的移到数列的另一边,也就是以基准数作为分隔,将数列拆解成两个部分,这种思路叫做分治法。...

2021-03-16 11:46:27 29

原创 冒泡排序

基本的原理:比较相邻连个元素的值,将大的元素交换至右端排序的思路:第一个数和第二个数比较大小,小的数放前面,大的数放后面,接下来第二个数也就是大的数跟第三个数比较,重复之前的步骤,知道最后。然后从第二趟开始,前面的步骤都是一样的,但是因为最后一个数已经比较过了,所以不用再比较后面依此类推具体的代码实现: public static int[] a(int[] a){ int[] arr= a; for (int i = 0 ;i<arr.length-1;i

2021-03-14 11:15:37 32

原创 数据结构包含:线性结构和非线性结构

线性结构:其特点是数据元素之间存在一对一的线性关系有两种不停的存储结构,即顺序存储和链式存储常见有:数组,队列,链表和栈非线性结构:二维数组,多维数组,广义表,树结构,图结构...

2021-03-12 10:58:14 137

原创 spring的IOC和AOP

IOC和AOP的基本概念spring AOP的底层实现jdk动态代理:需要实现某个接口(AOP)默认使用jdk的动态代理cglib动态代理:目标类的子类(不需要实现任何接口,cglib在spring core包下IOC的底层原理:...

2021-03-12 09:20:19 34

原创 Java元注解

元注解Java修饰注解的注解

2021-03-11 10:09:01 34 1

原创 springboot的自动装配原理

springboot的自动装配原理1.首先从springApplication的run方法进去,一直点进去一个个run方法,到达ConfigurableApplicationContext这个类,里面有一个方法refreshContext(context);刷新容器同时就会加载我们的注解@SpringBootApplication2,点进去这个注解里面就有@SpringBootConfiguration说明我们这个类就是配置类@EnableAutoConfiguration 自动装配的关键

2021-03-11 09:42:24 29

原创 Java内存模型JMM

Java的内存模型和CPU的缓存模型类似线程会把主内存的共享变量,复制一份放到线程的工作内存加volatile实现,内存可见性,也叫一致性线程之间不能直接通信,只能通过主内存,更新工作内存的变量...

2021-03-10 23:17:09 30

原创 Mysql底层数据结构

首先知道什么事索引?索引就是一种排好序的数据结构,能够帮mysql高效的获取数据如果,没有索引它,就会一步一步扫描整个表,如果有加索引,那么它就会根据索引的那一列,找到我们要找的那一行数据mysql底层的数据结构是B+树因为B+树的行高只有3,可以减少磁盘io的次数,有效提高查找的效率叶子节点之间是双向连表,支持范围查询innodb引擎的数据直接存在了叶子节点,这样可以添加上面两行的宽度,存储更多的数据使用整型的主键比较大小很快,查询的速度提升myisam引擎的叶子节点存储得是数据的地

2021-03-10 22:09:31 2876 1

空空如也

空空如也

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

TA关注的人

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