自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ywl470812087的博客

这个很懒,什么也没留下

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

原创 mysql查询语句执行顺序

其实执行过group by后就没必要再去执行distinct,因为分组后,每组只会有一条数据,并且每条数据都不相同。第十一步:对vt9进行排序,此处返回的不是一个虚拟表,而是一个游标,记录了数据的排序顺序,此处可以使用别名;第四步:如果from子句中的表数量大于2,则重复第一步到第三步,直至所有的表都加载完毕,更新vt3;第三步:如果使用的是外连接,执行on的时候,会将主表中不符合on条件的数据也加载进来,做为外部行。第二步:筛选关联表符合on表达式的数据,保留主表,生成虚拟表vt2;

2022-12-31 18:35:19 1112

原创 MySQL内部的核心组件

到了这一步,捋顺一下整个过程:MySQL的工作线程监听连接池中的SQL请求,将SQL转发给SQL接口,SQL解析器解析SQL接口中的SQL,转交给SQL优化器,选择最优执行路径,此时要做的就是执行这条SQL了,那么实际上执行器组件就会调用MySQL内部的存储引擎例如InnoDB存储引擎去执行这条SQL,执行器会根据优化器生成一套执行计划,不停的调用存储引擎的各种接口去完成sql语句的执行计划,这里又讲到了存储引擎的各种接口,下面第8点简单描述下;5. MySQL内部的SQL解析器主要又是做什么的?

2022-12-31 17:46:14 843 1

原创 redis内存默认值调整

redis.conf配置文件修改maxmemory这个值来调整redis的内存大小。info memory命令可用查看redis内存使用情况。info可用查询redis下的各种命令。redis一般设置物理内存的3/4。

2022-12-31 17:22:57 354

原创 redis集群异步复制造成锁丢失(分布式锁)

代码写到这里,看下是不是还有问题,是不是解决了超卖现象,在高并发情况下其实这里依然会有问题,偶尔会出现异常。在redisConfig配置类注入bean。所以代码在加判断更严谨一下。注入Redisson。

2022-12-31 16:41:40 314

原创 redis的lua脚本解决原子操作

lua脚本保证redis操作原子性

2022-12-31 15:58:10 62

原创 redis分布式锁

分析:假设A线程在执行业务代码,平时这个业务只需要5秒完成,这时候又调用了另一个微服务B,此时微服务B宕机了,这时候A线程被阻塞导致超过了10秒,此时已经超过了锁的过期时间,这个时候锁被redis自己释放掉了,这时候微服务B有恢复了,A线程就会继续执行业务,此时A线程是没有锁的。然后这时候,A又过了2秒业务执行完毕,这时候在finally释放锁,此时的锁是B加的,这时候就会把B的锁释放了。问题:这时候锁释放错误,就需要解决,怎么才能自己释放自己加的锁?解决:加一个判断,只删除自己的。

2022-12-31 15:44:24 147

原创 redis事务命令复习

上面这个操作很顺利,没有其他线程干扰,也就操作成功。实际情况下,可能会收到其他线程干扰,下面的命令还没有提交。开启事务之后,讲要操作的命令都放到了QUEUED(queued)队列里,然后通过EXEC命令一起提交。这时候出现另一种情况,a线程来修改时候我希望没有其他线程来干扰我,这时候开启 监听WATCH。然后前面那个开启事务的提交,发现提交成功。开启了事务,没有提交,这时候又有一个客户端进来操作。此时A线程提交,此时提交失败,出现了 nil。这时候另一个终端连上来执行了k1的修改。multi:开启事务。

2022-12-31 15:40:09 51

原创 BootCDN——React入门学习

首先下载:react依赖:react.js、react-dom.js、babel.js这种方式容易出错,所以不使用这个使用下面方式正真的用法;https://www.babeljs.cn/setup#installation

2022-12-31 13:34:49 223

原创 mysql8.0为啥移除查询缓存

5,执行sql时候有触发器,自定义函数,缓存也是不起作用的。1,对于经常更新的表缓存容易过期不容易控制。4,mysql缓存在分库分表的情况下是不起作用的。6,在表结构发生改变的时候,缓存会失效。2,sql要完全一样才能命中缓存。

2022-12-30 20:11:05 227

原创 MySQL 调优 | OPTIMIZER_TRACE详解

OPTIMIZER_TRACE是MySQL 5.6引入的一项跟踪功能,它可以跟踪优化器做出的各种决策(比如访问表的方法、各种开销计算、各种转换等),并将跟踪结果记录到 INFORMATION_SCHEMA.OPTIMIZER_TRACE 表中。optimizer_trace总开关,默认值:enabled=off,one_line=offenabled:是否开启optimizer_trace;on表示开启,off表示关闭。one_line:是否开启单行存储。on表示开启;

2022-12-30 19:40:26 718

原创 spring中为什么要三级缓存?二级不行吗

这是我看过视频中最能解释的文字表达了先说bean的创建过程:实例化->依赖注入->初始化实例化之后会提前暴露到缓存,用于解决循环依赖问题。

2022-12-30 12:38:05 1570 5

原创 索引排序内部流程

select 查询字段是不是索引覆盖,覆盖到了就直接内存中排序,输出结果,如果索引没有覆盖查询字段,计算select的字段释放超过单行所有字段总和限制,超过限制就进行双路排序,否则就使用单路排序索引排序和文件排序介绍:当对sql进行order by排序的时候,需要尽可能的使用索引排序,如果无法使用索引排序的话,mysql就会使用文件排序。举个例子,下面有一段sql:select * from user where name = "自由的辣条" order by age。

2022-12-29 11:57:18 515 2

原创 一个b+树库存放多少索引记录

(计算机在存储数据的时候,最小存储单元是扇区,一个扇区的大小是 512 字节,而文件系统(例如 XFS/EXT4)最小单元是块,一个块的大小是 4KB。InnoDB 引擎存储数据的时候,是以页为单位的,每个数据页的大小默认是 16KB,即四个块。非叶子结点由主键值和一个指向下一层的地址的指针组成的组合组成。叶子结点中由一组键值对和一个指向该层下一页的指针组成,键值对存储的主键值和数据。假设一条数据的大小是1KB,那么一个叶子结点可以存储16条数据。由存储结构,可以大概计算出一个B+树能存储的数据数量。

2022-12-28 13:04:00 315

原创 二叉树,红黑树,B树、B+树的区别

二叉搜索树可以提高查询效率,左小右大,但是他不好掌握根节点的数字是哪个,容易一边倒,导致层数变多,降低效率。

2022-12-28 12:46:19 577

原创 mysql聚簇索引和非聚簇索引的区别

mysql聚簇索引和非聚簇索引的区别

2022-12-27 18:27:49 68

原创 spring4和spring5的aop执行顺序区别?

spring4单切面。spring4多切面。

2022-12-26 16:17:03 130

原创 AQS源码解读

因为此时线程A占有锁,所以current此时是线程B 与 getExclusiveOwnerThread()是线程A,并不相等,返回false。上面这段代码以上是假设B来了A刚好释放了锁,此时,突然A又来抢到了锁,这个时候current就是A线程和 getExclusiveOwnerThread()也是线程A,相等。我们可用看见这里的B和C会尝试获取锁,没有获取到就会把当前线程封装成node节点放到CLH双向队列里。A、B、C3个线程,假设A线程lock()时候拿到了锁,state被A设置成了1。

2022-12-25 17:34:34 613

原创 教你如何开发一个 SpringBoot starter

starter 是 SpringBoot 的一个重要的组成部分,它相当于一个集成的模块,比如你想用 Mybatis 和 lombok,但是在 pom 文件中需要写两个依赖,如果你将他们集成为一个 starter(或者将更多你需要的依赖集成进去),那么你只需要在 pom 文件中写一个 starter 依赖就可以了,这对于一个可复用模块的开发和维护都极为有利。当然我当时确实水平不足,连 Java 的 SPI 都忘了是啥,后来又捡了起来,原来我在大学的时候就用过 Java 的 SPI,悔之晚矣!

2022-12-25 12:44:39 1279 3

原创 AQS 对资源的共享方式

只有当state大于0的时候,阻塞的线程才能继续执行,此时先前执行任务的线程继续执 行release方法,release方法使得state的变量会加1,那么自旋的线程便会判断成功。它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障 拦截的线程才会继续干活。对于 CountDownLatch 来说,重点是“一个线程(多个线程)等待”,而其他的 N 个线程在完成“某件事情”之后,可以终止,也可以等待。

2022-12-24 17:50:18 489

原创 AQS学习

AQS 是一个用来构建锁和同步器的框架,使用 AQS 能简单且高效地构造出应用广泛的大量的同步器, 比如我们提到的 ReentrantLock,Semaphore,其他的诸如 ReentrantReadWriteLock,SynchronousQueue,FutureTask(jdk1.7) 等等皆是基于 AQS 的。这是通过在取消时始终取消后续节点的标记来解决的,允许他们稳定在一个新的前任节点上,除非我们能够确定一个未被取消的前任节点将承担此责任。等待条件的线程使用相同的节点,但使用额外的链接。

2022-12-24 17:45:19 885

原创 locksupport的park和unpark

park和unpark可以实现类似wait和notify的功能,但是并不和wait和notify交叉,也就是说unpark不会对wait起作用,notify也不会对park起作用。park和unpark的使用不会出现死锁的情况blocker的作用是在dump线程的时候看到阻塞对象的信息。

2022-12-23 17:49:30 1016

原创 java8新特性(简述十大新特性)

你真的开始用JDK8了吗?如果你没有用上一些新特性,请别说自己使用了Java8。Java 8可谓是自Java 5以来最具革命性的版本了,她在语言、编译器、类库、开发工具以及Java虚拟机等方面都带来了不少新特性。我们来一一回顾一下这些特性。

2022-12-23 17:19:11 3429

原创 Array和list相互转换

返回的是ArrayLst对象,它是Arrays类自己定义的一个静态内部类,这个内部类没有实现add()、remove()方法,而是直接使用它的父类AbstractList的相应方法。//这种方式转为list的话,只能遍历,不能添加或删除元素。是个坑,得到的list长度是不可变的,当添加新的元素会出现异常。

2022-12-23 16:56:30 794

原创 类的加载过程

初始化子类,会先初始化父类。

2022-12-16 16:51:31 78

原创 ArrayList源码阅读

2. 我们在开始遍历集合元素的时候,会记录此时的modCount作为expectedModCount,每次遍历一个元素的的时候都会检查,这两个参数是否相等;其实如果仔细阅读代码就会发现,并发修改异常不是在修改时候抛出的。1.首先ArrayList类中有一个共享变量modCount,我们每操作一次集合这个变量都会进行加一操作(增,删,改,不包含查询)这个常量在进行扩容的时候,会和当前容器的最小容量进行比较,取最大的作为新容器的容量。例如当你第一次调用add进行添加元素的时候,会触发扩容。被重新赋值为10 (

2022-11-28 16:59:57 197

原创 mysql回表查询和索引覆盖

具体做法就是将要查询的数据作为索引建立普哦,那个索引(可以是单列索引,也可以一个索引语句定义所有要查询的列,即联合索引),这样就可以直接返回索引中的数据,不需要再通过聚集索引去定位行记录,避免了回标的情况发生。因为索引中已经包含了要查询的字段的值,因此查询的时候直接返回索引中的字段值就可以了,不需要再到表中查询,避免了对主键索引的二次查询,也就提高了查询的效率。因为覆盖索引必须要存储索引的列值,而哈希索引、空间索引和全文索引等都不存储索引列值,索引MySQL只能使用B+Tree索引做覆盖索引。

2022-11-28 13:52:45 995 3

原创 java8流式操作

中文称为 “流”,通过将集合转换为这么一种叫做 “流” 的元素序列,通过声明性方式,能够对集合中的每个元素进行一系列并行或串行的流水线操作。.stream()stream()把一个源数据,可以是集合,数组,I/O channel, 产生器generator 等,转化成流。

2022-11-24 17:35:24 222

原创 多线程间共享变量线程安全问题——ThreadLocal

ThreadLocal 的作用,可以实现在同一个线程数据共享, 从而解决多线程数据安全问题.ThreadLocal 可以给当前线程关联一个数据(普通变量、 对象、 数组)set 方法 [源码!]ThreadLocal 可以像 Map 一样存取数据, key 为当前线程, get 方法每一个 ThreadLocal 对象,只能为当前线程关联一个数据,如果要为当前线程关联多个数 据, 就需要使用多个 ThreadLocal对象实例。

2022-11-10 14:02:01 2298

原创 循环依赖源码深度解析

循环依赖源码深度解析

2022-11-07 15:00:55 329

原创 spring如何解决循环依赖

什么是循环依赖?循环依赖其实是指两个及以上bean相互持有对方,最终形成闭环的过程(一般聊循环依赖都是默认的单例bean),简单说就是A依赖B,B依赖C,C又依赖A。下面我就借用别人的网图来解释下:注意,这里不是函数的循环调用,是对象的相互依赖关系。循环调用其实就是一个死循环,除非有终结条件。Spring中循环依赖场景主要有以下两种:(1)field属性的循环依赖(2)构造器的循环依赖(3)DependsOn循环依赖2、怎么检测循环依赖。

2022-11-04 15:33:54 399

原创 git文件操作命令

【代码】git文件操作命令。

2022-11-04 09:53:07 1196

原创 git常用的命令收集

【代码】git常用的命令收集。

2022-11-04 09:45:55 88

原创 Springboot @Validated和@Valid的区别 及使用

Springboot @Validated和@Valid的区别 及使用

2022-11-02 18:01:08 188

原创 mybatis xml返回对象类型和接口定义类型不一致

mybatis xml返回对象类型和接口定义类型不一致

2022-11-02 16:13:22 441

原创 @Size、@Max、@Min、@Length、注解的含义和区别

Size、@Max、@Min、这上注解是下面这个依赖包的。@Length、这个注解是下面这个依赖的。

2022-11-02 13:59:32 2945

原创 Springboot集成MapperFactory(ma.glasnost.orika.MapperFactory)类属性复制

【代码】Springboot集成MapperFactory(ma.glasnost.orika.MapperFactory)类属性复制。

2022-11-02 11:24:28 480

原创 为什么wait, notify,notifyAll保存在Object类中,而不是Thread类

多线程

2022-05-30 17:35:20 1262 1

原创 java基础复习-(run方法和start方法区别)

run方法和start方法区别

2022-05-30 14:54:43 2860

原创 rocketmq 启动mqbroker.cmd闪退

非常奇怪,broker启动闪退,我就摸索了好久,网上各种百度,最后得到正解将c盘下这个store下的文件全部删除,就可以启动了猜测是可能mq非正常关闭,导致,具体懂原理的大佬可以来评论区说说...

2022-05-06 14:56:45 1469

原创 MySQL常用引擎有MyISAM和InnoDB区别

MySQL常用引擎有MyISAM和InnoDB,而InnoDB是mysql默认的引擎。MyISAM不支持行锁,而InnoDB支持行锁和表锁。如何加锁?MyISAM在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,在执行更新操作(UPDATE、DELETE、INSERT等)前,会自动给涉及的表加写锁,这个过程并不需要用户干预,因此用户一般不需要直接用LOCK TABLE命令给MyISAM表显式加锁。显式加锁上共享锁(读锁)的写法:lock in share mode,例如:.

2022-04-24 13:33:58 161

空空如也

空空如也

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

TA关注的人

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