自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(652)
  • 资源 (1)
  • 收藏
  • 关注

转载 @ConditionalOnBean在方法上失效

先判断是不是通过@bean在方法上注入的bean,是的话推断它的类型type并返回赋值,此时会导致后面因为这里不为空且找不到指定的type而match不成功。当在类上添加注解@ConditionalOnBean上时候,由于不满足条件,返回空集。而不会导致type找不到问题。

2024-04-24 13:30:28 16

转载 解析springboot自动配置springmvc的秘密之DispatcherServlet

从debug调试的结果来看这个for循环中getServletContextInitializerBeans返回的集合当中果然包含了DispatcherServletRegistrationBean,那么根据之前的分析,最终必然会从其顶级父接口。的onStartup方法层层调用,一直到==》ServletRegistration中的addRegistration方法,将DispatcherServlet添加到tomcat的上下文。

2024-04-23 19:07:23 13

转载 细说Spring Boot初始化DispatcherServlet

在Spring Boot框架未出现之前,要开发一个基于Spring MVC框架的项目,通常需要在Java web项目的描述符文件web.xml-- 初始化Spring IoC容器 -->-- 手动配置DispatcherServlet -->-- 配置DispatcherServlet拦截路径,让所有Web请求都经过DispatcherServlet -->

2024-04-23 15:48:57 20

转载 SpringFactoriesLoader机制实例详解

SpringFactoriesLoader 工厂加载机制是 Spring 内部提供的一个约定俗成的加载方式,与 java spi 类似,只需要在模块的 META-INF/spring.factories 文件中,以 Properties 类型(即 key-value 形式)配置,就可以将相应的实现类注入 Spirng 容器中。Properties 类型格式:key:是全限定名(抽象类|接口)value:是实现,多个实现通过 **逗号** 进行分隔。

2024-04-23 13:55:35 7

转载 Spring Boot 自动装配流程(源码在哪里实现自动装配)

Spring Boot源码在哪里读取自动配置的类的?Spring Boot源码又在哪里把自动配置的类注入到IOC容器的?

2024-04-23 13:30:19 11

转载 SpringCloud + Nacos配置文件加载顺序和优先级详解

在微服务架构中,合理地管理和理解配置文件的加载顺序与优先级对于确保应用的稳定性和灵活性至关重要。特别是在使用 Spring Cloud Alibaba Nacos 作为配置中心的场景下,这一点显得尤为重要。本文将基于一个具体的 bootstrap.yml 配置示例,深入探讨这些概念,并介绍如何通过 Nacos 配置实现本地配置的优先级设置。

2024-04-22 15:58:48 28

转载 SpringCloud 中的父子容器

中,提到了 SpringBoot 在启动时,会触发相关一系列监听器,监听器各司其职,做一些初始化预处理操作。SpringBoot创建的 Spring容器是最核心的容器,也是使用最多的Spring容器。创建的对象会有3种类型,Servlet,Reactive,和默认。如果引入了 FeignClient,则会实例化一个容器工厂,以服务名称为key,value为Feign 和 Ribbon配置类容器,配置隔离,父容器则都为。对象,再次执行run方法,所以启动流程会执行两遍,只是读取的配置文件和配置类不同。

2024-04-22 15:31:11 7

转载 【Spring Boot 源码学习】BootstrapContext的实际使用场景

本篇Huazie通过介绍的实际使用场景,并演示了引导上下文在这些场景的实际使用,加深了大家对于的启动引导过程的了解,为后续的源码分析打下基础。后续的博文,Huazie就将从的run方法入手,开始介绍的运行流程,敬请期待!

2024-04-22 14:13:54 8

转载 SpringBoot中初始化Tomcat以及Tomcat运行原理

SpringBoot的创造简化了我们创建项目和运行项目的工作。我们不必再像SpringMVC时代那样,将项目先打包成jar包,然后放入Tomcat中再启动。我们可以忽略打包的操作和tomat的配置问题,编写完代码后直接启动项目即可。这一切都得益于SpringBoot的内置容器的实现。那么,SpringBoot具体是如何为我们完成了初始化Tomcat 的这一系列的操作的呢?下面我将以第一人称的学习源码视角带领大家来一起快乐分析SpringBoot的源码来学习下…

2024-04-22 12:16:11 16

转载 tomcat是如何处理http请求的?

Host容器是Engine容器的子容器,上面也说到Host是受Engine容器管理的,就是指一个虚拟主机,比如我们在访问具体jsp页面URL中localhost就是一个虚拟主机,其作用是运行多个应用,并对这些应用进行管理,其子容器是Context,而且一个主机还保存了主机的相关信息。Container是容器的父接口,用于封装和管理Servlet,以及具体处理Request请求,该容器的设计用的是典型的责任链的设计模式,它由四个自容器组件构成,分别是Engine、Host、Context、Wrapper。

2024-04-22 11:43:00 2

转载 配置DispatcherServlet类时load-on-startup标签作用

HttpServletBean 主要做一些初始化的事情,将web.xml中的配置参数设置到servlet中。比如servlet标签的子标签init-param标签中的参数;FrameworkServlet 将Servlet与Spring容器上下文关联;也就是初始化FarmeworkServlet属性webApplicationContext,这个属性代表springmvc上下文,它有个父类上下文;DispatcherServlet 初始化各个功能的实现,比如异常处理,视图处理,请求映射等功能;

2024-04-22 11:05:19 4

转载 volatile怎么通过内存屏障保证可见性和有序性?

小陈:老王,上一篇你引出了volatile底层是通过内存屏障来解决可见性和有序性问题的。首先我想问一下什么是内存屏障?内存屏障啊,本质上也是一种指令,只不过它具有屏障的作用而已。小陈:额,这怎么说...老王:首先内存屏障是一种指令,无论是在JAVA内存模型还是CPU层次,都是有具体的指令对应的,是一种特殊的指令。小陈:嗯嗯,它是一种特殊的指令。还是不明白......小陈:然后呢?老王:然后这种指令具有屏障的作用所谓屏障,也就是类似关卡,类似栅栏,具有隔离的作用。

2024-04-16 22:28:38 18

转载 CAS单点登录原理

至此,CAS登录的整个过程就完毕了,以后有时间总结下如何使用CAS,并运用到项目中。

2024-04-16 18:37:41 15

转载 一文聊透对象在JVM中的内存布局,以及内存对齐和压缩指针的原理及应用

本文笔者详细介绍了Java普通对象以及数组类型对象的内存布局,以及相关对象占用内存大小的计算方法。以及在对象内存布局中的实例数据区字段重排列的三个重要规则。以及后边由字节的对齐填充引出来的false sharding问题,还有Java8为了解决false sharding而引入的@Contented注解的原理及使用方式。为了讲清楚内存对齐的底层原理,笔者还花了大量的篇幅讲解了内存的物理结构以及CPU读写内存的完整过程。最后又由内存对齐引出了压缩指针的工作原理。CPU访问性能。

2024-04-16 17:14:22 18

转载 聊聊Netty那些事儿之从内核角度看IO模型原创

当我们熟悉了select的原理后,就很容易理解内核给我们提供的select API了。从select API中我们可以看到,select系统调用是在规定的超时时间内,监听(轮询)用户感兴趣的文件描述符集合上的可读可写异常三类事件。select传递给内核监听的文件描述符集合中数值最大的文件描述符+1,目的是用于限定内核遍历范围。select监听的文件描述符集合为,那么maxfdp1的值为5。对可读事件感兴趣的文件描述符集合。对可写事件感兴趣的文件描述符集合。对可写事件感兴趣的文件描述符集合。这里的。

2024-04-16 16:25:53 9

转载 MySQL 8.0 新特性解读(下)

作者:马文斌MySQL爱好者,任职于蓝月亮(中国)有限公司。本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。上一篇主要讲了第一部分:功能增强,感兴趣的亲请点击【

2024-03-20 12:51:14 28

转载 MySQL中having和where的区别及应用详解

WHERE子句用于在执行查询之前筛选行,而HAVING子句用于在执行聚合查询后筛选结果集。WHERE出现在FROM子句之后,GROUP BY子句之前;而HAVING出现在GROUP BY子句之后、ORDER BY子句之前。WHERE可以使用比较操作符和逻辑操作符来指定过滤条件,而HAVING不仅可以使用比较操作符和逻辑操作符,还可以使用聚合函数。

2024-03-20 10:21:50 57

转载 mysql实现分组取每组前几名

将数据按照用户进行分组,并根据城市和amount进行排序,取出每个城市排名前3的用户数据。需求:按category分组,查出achievement最高的每组的前三名。

2024-03-20 10:09:10 187

转载 MySQL 8.0 新特性解读(上)

目录1.1-所有系统表更换为InnoDB引擎1.2-DDL原子化1.3-DDL秒加列1.4-公用表表达式(CTE:Common Table Expression)1.5-默认字符集由latin1变为utf8mb41.6-Clone插件1.7-资源组1.8-角色管理1.9-多值索引1.10-函数索引1.11-不可见索引1.12-新增降序索引1.13-SET_VAR 语法1.14-参数修改持久化1.15-innodb select for update跳过锁等待1.16-group by 不再隐式排序1.17-

2024-03-19 22:30:33 58

转载 MySQL在线DDL原理

MDL锁,读读不互斥,读写、写写互斥。3. 我们常说的 Online DDL,其实是从 DML 操作的角度描述的,如果 DDL 操作不阻塞 DML 操作,那么这个 DDL 就是 Online 的。,在 5.6 的基础上又增加了一些新的特性,比如:增加了重命名索引支持,支持了数值类型长度的增大和减小,支持了 VARCHAR 类型的在线增大等。默认情况下,MySQL就是支持online的DDL操作的,在online的DDL语句执行的过程中,MySQL会尽量少使用锁的限制,我们不需要特殊的操作来启用它。

2024-03-19 19:48:23 21

转载 MySQL|什么情况下拓展字段长度会锁表?

如果修改字段的长度,导致字段的字节长度无法使用 1 byte表示,得使用2个byte才能表示,比如从 240 修改为 256 ,如果在默认字符集为utf8mb4的情况下,varchar(60) 修改为 varchar(64),则DDL需要以copy模式,也即会锁表,阻塞写操作。字符串的字段是以字节为单位存储的,utf8 一个字符需要三个字节,utf8mb4 一个字符需要4个字节。t1 表的字符集为utf8mb4,初始字段长度为20 ,80个字节,可以使用1byte表示。看看MySQL 官方文档。

2024-03-19 13:58:07 61

转载 为什么要有哨兵?

Redis 在 2.8 版本以后提供的哨兵(Sentinel)机制,它的作用是实现主从节点故障转移。它会监测主节点是否存活,如果发现主节点挂了,它就会选举一个从节点切换为主节点,并且把新主节点的相关信息通知给从节点和客户端。监控、选主、通知。哨兵节点通过 Redis 的发布者/订阅者机制,哨兵之间可以相互感知,相互连接,然后组成哨兵集群,同时哨兵又通过 INFO 命令,在主节点里获得了所有从节点连接信息,于是就能和从节点建立连接,并进行监控了。1、第一轮投票:判断主节点下线。

2024-03-19 11:27:03 20

原创 Mysql8和Mysql5加锁规则的细微不同

范围查询,两者唯一索引和普通所以的规则还是一样的,区别在主键索引,对于

2024-03-17 21:30:26 827

转载 Mysql 死锁案例8-更新辅助索引与删除主键导致的死锁

死锁,其实是一个很有意思也很有挑战的技术问题,大概每个DBA和部分开发同学都会在工作过程中遇见。关于死锁我会持续写一个系列的案例分析,希望能够对想了解死锁的朋友有所帮助。

2024-03-15 20:14:53 23

转载 Mysql 死锁案例7-并发更新索引列导致的死锁

事务1更新一个不存在的记录,锁住间隙事务2更新一个存在的记录的索引列,插入意向锁与事务1的间隙锁冲突阻塞事务1再更新一个存在的记录的索引列,意向插入锁与事务2的临键锁冲突

2024-03-14 11:30:59 29

原创 Mysql 死锁案例6-并发 insert on duplicate key 导致的死锁

mysql 5.7.12 ,事务隔离级别RRBEGIN;SHOW ENGINE INNODB STATUS 死锁日志。

2024-03-14 01:18:04 352

转载 Mysql 死锁案例5- 并发insert 唯一键冲突导致的死锁

死锁其实是一个很有意思也很有挑战的技术问题,大概每个DBA和部分开发朋友都会在工作过程中遇见。关于死锁我会持续写一个系列的案例分析,希望能够对想了解死锁的朋友有所帮助。(以前案例都基于Mysql 5.7.12 事务级别RR)二 背景知识2.1 insert 锁机制在分析死锁案例之前,我们先学习一下背景知识 insert 语句的加锁策略。我们先来看看官方定义:相信大部分的DBA同行都知道在事务执行insert的时候会申请一把插入意向锁(Insert Intention Lock)。

2024-03-13 23:18:25 98

原创 Mysql 死锁案例4-delete 相邻记录导致死锁

这里其实也是间隙锁和意向插入锁冲突死锁,delete与update加锁逻辑差不多。加了3把锁,索引c间隙锁(5,10),主键索引记录锁id=5,索引c临键锁(0,5]查看锁信息 SHOW ENGINE INNODB STATUS。注意where条件的c是普通索引。

2024-03-13 17:10:36 474

转载 MySQL数据页与B+树的关系

MySQL 一行记录是怎么存储的?MySQL数据页和B+树的关系;行格式,索引

2024-03-13 11:17:04 31

原创 关于Mysql锁知识的整理,全面了解Mysql加锁规则

Mysql加锁机制,Mysql加锁规则

2024-03-11 15:59:10 264

原创 Mysql 死锁案例3-间隙锁与意向插入锁冲突

(16, 16,16)换成(3,3,3)即插入数据行的下一条记录有锁,但c=5这个记录锁是事务1加的,与事务1的意向插入锁不冲突,也是隐式锁。同一个事务持有 gap lock (临键锁也一样)的前提下插入数据,会发生锁分裂:执行T1,加锁情况是普通索引c临键锁(0,5]和间隙锁(5,10)写锁成功,加id=5主键记录锁写锁成功,共3把锁。执行T2,锁分裂,加锁情况成了(0,3)(3,5]和(5,10)以及主键id=5的记录锁。事务1持有(0,5)间隙锁写锁,事务申请(0,5)意向插入锁阻塞。

2024-03-11 15:56:27 788

转载 什么是Mysql隐式锁?

在数据库中,通常使用锁机制来协调多个线程并发访问某一资源。MySQL的锁类型分为表锁和行锁,表示对整张表加锁,主要用在DDL场景中,也可以由用户指定,主要由server层负责管理;而行锁指的是锁定某一行或几行,或者是行与行之间的间隙,行锁由存储引擎管理,例如最常使用的InnoDB。表锁占用系统资源小,实现简单,但锁定粒度大,发生锁冲突概率高,并发度比较低。行锁占用系统资源大,锁定粒度小,发生锁冲突概率低,并发度比较高。InnoDB将锁分为锁类型和锁模式两类。

2024-03-10 20:24:47 78

原创 Mysql 死锁案例2-间隙锁与意向插入锁冲突

上面的案例貌似不怎么贴合实际,因为程序里主动显示的加读锁是不常见的,下面复现一个间隙锁加写锁不冲突,而间隙锁与意向插入锁冲突死锁的例子。SHOW ENGINE INNODB STATUS 查看加锁信息。这里注意点,意向插入锁是没有读锁的,它是写锁性质的。

2024-03-10 16:32:29 471

原创 Mysql 死锁案例1-记录锁读写冲突

SHOW ENGINE INNODB STATUS 查看加锁信息。

2024-03-10 16:04:35 222

转载 MySQL 有哪些锁?

锁机制用于管理对共享资源的并发访问,实现事务的隔离级别。Mysql 事务采用的是粒度锁:针对表(B+ 树)、页(B+ 树叶子节点)、行(B+ 树叶子节点当中某一记录行)三种粒度加锁。允许事务在行级锁和表级锁的锁同时存在。根据锁的粒度,分为全局锁、表级锁和行级锁。全局锁是针对数据库加锁,表级锁是针对表或页进行加锁;行级锁是针对表的索引加锁。

2024-03-10 15:34:39 40

原创 《MySQL实战45讲》课程大纲

1 MySQL实战45讲-01基础架构:一条SQL查询语句是如何执行的? 2 MySQL实战45讲-02日志系统:一条SQL更新语句是如何执行的? 3 MySQL实战45讲-03事务隔离:为什么你改了我还看不见? 4 MySQL实战45讲-04深入浅出索引(上) 5 MySQL实战45讲-05深入浅出索引(下) 6 MySQL实战45讲-06全局锁和表锁:给表加个字段怎么有这么多阻碍? 7 MySQL实战45讲-07行锁功过:怎么减少行锁

2024-03-08 00:28:41 576

转载 MySQL实战45讲——15答疑文章(一):日志和索引相关问题

在今天这篇答疑文章更新前,MySQL 实战这个专栏已经更新了 14 篇。在这些文章中,大家在评论区留下了很多高质量的留言。现在,每篇文章的评论区都有热心的同学帮忙总结文章知识点,也有不少同学提出了很多高质量的问题,更有一些同学帮忙解答其他同学提出的问题。在浏览这些留言并回复的过程中,我倍受鼓舞,也尽我所知地帮助你解决问题、和你讨论。评论区的大多数留言我都直接回复了,对于需要展开说明的问题,我都拿出小本子记了下来。这些被记下来的问题,就是我们今天这篇答疑文章的素材了。

2024-03-08 00:26:31 23

转载 MySQL实战45讲——18为什么这些SQL语句逻辑相同,性能却差异巨大?

在 MySQL 中,有很多看上去逻辑相同,但性能却差异巨大的 SQL 语句。对这些语句使用不当的话,就会不经意间导致整个数据库的压力变大。我今天挑选了三个这样的案例和你分享。希望再遇到相似的问题时,你可以做到举一反三、快速解决问题。

2024-03-08 00:03:22 38

转载 MySQL实战45讲——17如何正确地显示随机消息?

我在上一篇文章,为你讲解完 order by 语句的几种执行模式后,就想到了之前一个做英语学习 App 的朋友碰到过的一个性能问题。今天这篇文章,我就从这个性能问题说起,和你说说 MySQL 中的另外一种排序需求,希望能够加深你对 MySQL 排序逻辑的理解。这个英语学习 App 首页有一个随机显示单词的功能,也就是根据每个用户的级别有一个单词表,然后这个用户每次访问首页的时候,都会随机滚动显示三个单词。他们发现随着单词表变大,选单词这个逻辑变得越来越慢,甚至影响到了首页的打开速度。

2024-03-07 23:46:21 20

转载 MySQL实战45讲——11怎么给字符串字段加索引?

于是,你就有个问题:当要给字符串创建前缀索引时,有什么方法能够确定我应该使用多长的前缀呢?实际上,我们在建立索引时关注的是区分度,区分度越高越好。因为区分度越高,意味着重复的键值越少。因此,我们可以通过统计索引上有多少个不同的值来判断要使用多长的前缀。

2024-03-07 23:30:49 42

3DSMax2010注册机

注册机好用

2012-11-22

空空如也

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

TA关注的人

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