自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 什么是 Safepoint

什么是 Safepoint请看以下代码。请问 num 会输出什么按照惯性思维,应该在休眠一秒之后。 线程里边的循环是没有做完的。num的数据会小于 2000000000但是在实际执行当中 num 输出的是 2000000000说明这个异步线程其实阻塞了主线程。那么这就要引入 Safepoint 来讲一讲了public static class SafepointTest { ...

2023-07-24 11:23:00 84

原创 RocketMq5.0 任意延迟时间 TimerMessageStore 源码解析

延迟队列指定时间的延迟消息。会先投递到队列中然后由消费队列数据,将数据消费到timerWheel使用时间轮算法,实现秒级任务。

2023-07-06 14:47:36 403 1

原创 RocketMQ 的消息交互源码解析

RocketMQ 的消息交互源码解析

2022-12-07 10:25:33 166 1

原创 RocketMQ 是如何发送消息

创建Topic的时候为何要指定MessageQueue数量?简单来说,就是你要指定你的这个Topic对应了多少个队列,也就是多少个MessageQueue。MessageQueue就是RocketMQ中非常关键的一个数据分片机制,他通过MessageQueue将一个Topic的数据拆分为了很多个数据分片,然后在每个Broker机器上都存储一些MessageQueue。Topic是一个逻辑...

2022-11-24 11:09:00 430

原创 MySQL十八:写语句的执行过程

转载~当我们需要修改一个记录时,数据库会先根据条件找到要修改的数据,然后执行修改写入操作,因此我们再分析写操作的执行过程时,其实是包含读语句的执行过程的。一、读语句的执行过程在之前《MySQL运行机制》文中,详细说明了一个查询语句的执行的过程,查询sql的执行过程基本上分为六步:「建立连接(Connectors&Connection Pool)」「查询缓存(Cache&am...

2022-08-27 11:45:00 86

原创 MySQL十九:分库分表实践

转载~在很多小型应用中都没真正使用分库分表,但是说起来并不陌生,因为我们在面试中经常会被问到,今天我们从从以下几个方面来聊聊分库分表:「是什么?解决什么?怎么做?为什么要这么做?即:」分库分表是什么?分库分表解决什么问题?分库分表怎么做?分库分表什么时候做?分库分表引发的问题是什么?分库分表中间件有哪些?一、什么是分库分表分库分表其实很好理解,「顾名思义,即把存于一个库的...

2022-08-27 11:45:00 448

原创 MySQL十七:Change Buffer

转载~在之前的文章《InnoDB的存储结构》介绍的InnoDB的存储结构的组成中,我们知道Change Buffer也是用InnoDB内存结构的组成部分。Change Buffer主要是为了在写入是减少磁盘IO而存在的,一、什么是什么是Change Buffer「在《Buffer Pool》中介绍了buffer pool会缓存热的数据页和索引页,减少磁盘读操作,而对于磁盘的写操作,i...

2022-08-27 11:44:00 176

原创 MySQL十六:36张图理解Buffer Pool

转载~在应用系统中,我们为加速数据访问,会把高频的数据放在「缓存」(Redis、MongoDB)里,减轻数据库的压力。在操作系统中,为了减少磁盘IO,引入了「缓冲池」(buffer pool)机制。MySQL作为一个存储系统,为提高性能,减少磁盘IO,同样具有「缓冲池」(buffer pool)机制。在之前的文章《InnoDB的存储结构》中介绍了InnoDB的存储结构的组成,结构图如下...

2022-08-27 11:43:00 156

原创 MySQL十四:单表最大2000W行数据

转载~在互联网技术圈中有一个说法:「MySQL 单表数据量大于 2000 W行,性能会明显下降」。网传这个说法最早由百度传出,真假不得而知。但是却成为了行业内一个默认的标准。单表超过2000W行数据一定会导致性能下降吗?我认为是不一定的,虽然说建议单表不超过2000W,但是我不接受它的建议可不可以?那必然也是可以的。一、单表最大到底能存多少数据先来看看下面这张图,了解一下mysql各...

2022-08-27 11:42:00 140

原创 MySQL十三:小一万字+14张图读懂锁机制

转载MySQL中的锁有很多种,各种锁应用在不同的地方。「MySQL依靠锁机制可以让多个事务更新一行数据的时候串行化」。MySQL中锁总的来说有两种概念:Lock和LatchLatch称为闩锁(轻量级的锁),因为Latch要求锁定的时间非常短。其目的是用来保证并发线程操作临界资源的正确性,并且通常没有死锁检测的机制。在InnoDB引擎中,Latch又分为mutex(互斥量)和rwloc...

2022-08-27 11:42:00 110

原创 MySQL十一:索引基本原理

转载~在上一篇《索引基础知识回顾》中提到索引按照存储结构划分有B-Tree索引、Hash索引、B+Tree索引类型,接下来就学习一下这几种索引结构以及在实际存储引擎中的使用情况一、Hash索引「Hash底层是由Hash表来实现的,存储引擎都会【对所有的索引列计算一个哈希码】(hash code),哈希索引将所有的哈希码存储在索引中,同时在哈希表中保存指向每个数据行的指针,根据键值 &lt...

2022-08-27 11:40:00 57

原创 MySQL十二:索引分析

转载~数据库优化是一个很常见的面试题,下面就针对这一问题详细聊聊如何进行索引与sql的分析与优化。一、执行计划(EXPLAIN)MySQL 提供了一个 EXPLAIN 命令,它「可以对 sql语句进行分析,并输出sql执行的详细信息」,可以让我们有针对性的优化。例如:explain select * from student where id > 2;这里需要注意一下版本差异...

2022-08-27 11:40:00 61

原创 MySQL十:索引基础知识回顾

转载~1、索引简介1.1 什么是索引索引是对数据库表中一列或多列的值进行排序的一种结构,可以大大提高MySQL的检索速度。索引在MySQL中也叫做key,当表中的数据量越来越大时,索引对于查询性能的影响非常大。那索引具体是什么呢,找几个生活中实例比较一下就清晰了:新华字典:索引就相当于字典的音序表,我们可以通过音序表,快速在几百页中定位到我们要查找的字。书店书架:索引就相当于书店...

2022-08-27 11:39:00 61

原创 MySQL九:MVCC能否解决幻读问题

转载~幻读【前后多次读取,数据总量不一致】同一个事务里面连续执行两次同样的sql语句,可能导致不同结果的问题,第二次sql语句可能会返回之前不存在的行。事务A执行多次读取操作过程中,由于在事务提交之前,事务B(insert/delete/update)写入了一些符合事务A的查询条件的记录,导致事务A在之后的查询结果与之前的结果不一致,这种情况称之为幻读。MVCC能否解决幻读问题...

2022-08-27 11:35:00 674

原创 MySQL八:读懂MVCC多版本并发控制

转载~mysql在并发的情况下,会引起脏读,幻读,不可重复读等一系列的问题,为解决这些问题,引入了mvcc的机制。本文就详细看看mvcc是怎么解决脏读,幻读等问题的。1、 数据库事务1.1 事务事务是操作数据库的最小单元,将【多个任务作为单个逻辑工作单元】执行的一系列数据库操作,他们作为一个整体一起向数据库提交,要么都执行、要么都不执行。大白话解释:事务就是当要完成一件事件,这件...

2022-08-27 11:34:00 182

原创 MySQL七:一文详解六大日志

转载~日志一般分为逻辑日志与物理日志两类「逻辑日志」:即执行过的事务中的sql语句,执行的sql语句(增删改)「反向」的信息「物理日志」:mysql 数据最终是保存在数据页中的,物理日志记录的就是数据页变更 。「mysql数据库中日志是重要组成部分,记录着数据库运行期间各种状态信息」。主要有6类:二进制日志重做日志撤销日志错误日志查询日志中继日志「而我们一般比较关注的...

2022-08-27 11:33:00 241

原创 MySQL六:InnoDB数据文件

转载~一、数据文件的组成innodb数据逻辑存储形式为表空间,而每一个独立表空间都会有一个.ibd数据文件,ibd文件从大到小组成:一个ibd数据文件-->Segment(段)-->Extent(区)-->Page(页)-->Row(行)表空间(Tablesapce)表空间,用于存储多个ibd数据文件,用于存储表的记录和索引,一个文件包含多个段。段(S...

2022-08-27 11:32:00 149

原创 MySQL五:InnoDB线程模型

转载~一、InnoDB线程模型的组成在Innodb存储引擎中,后台线程的主要作用是「负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据」。此外它会将已经修改的数据文件刷新到磁盘文件中,保证在发生异常的情况下,Innodb能够恢复到正常的运行状态。「InnoDB存储引擎是多线程的模型,所以有多个不同的后台线程,负责处理不同的任务」。主要有:Master Thread、IO T...

2022-08-27 11:31:00 102

原创 MySQL四:InnoDB的存储结构

转载~「MySQL存储引擎最大的特点就是【插件化】,可以根据自己的需求使用不同的存储引擎,innodb存储引擎支持行级锁以及事务特性,也是多种场合使用较多的存储引擎。」当官方的存储引擎不足以满足时,我们通过抽象的API接口实现自己的存储引擎。抽象存储引擎API接口是通过抽象类handler来实现,handler类提供诸如打开/关闭table、扫表、查询Key数据、写记录、删除记录等基础操...

2022-08-27 11:30:00 282

原创 MySQL三:存储引擎

转载~一、MySQL存储引擎概述「数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据」。不同的存储引擎提供不同的存储机制、索引、锁等功能。许多数据库管理系统都支持多种不同的数据引擎。在关系数据库中数据的存储是以表的形式存储的,所以「存储引擎也可以称为表类型(Table Type,即存储和操作此表的类型)」。「MySQL的存储引擎...

2022-08-27 11:29:00 82

原创 MySQL二:SQL运行机制

转载~MySQL用了很久,但是一直也是工作的使用,对于MySQL的知识点都比较零散碎片,一直也没有整体梳理过,趁着最近不忙,梳理一下相关的知识点。一、 MySQL的起源MySQL是一个开源的关系数据库管理系统。原开发者为瑞典的 MySQL AB公司,2008 年AB公司被Sun公司收购,并发布收购之后的首个版本 MySQL5.1。2010 年 Oracle 收购 Sun 公司,至此MySQ...

2022-08-27 11:28:00 85

原创 MySQL一:架构体系

转载~我们一般都不会去操作数据库本身,「而是通过SQL语句调用MySQL,由MySQL处理并返回执行结果」。那么SQL语句是如何执行sql语句的呢?Sql语句执行过程图解:从图中可以看出sql的执行基本上分为五步:「建立连接(Connectors&Connection Pool)」「查询缓存(Cache&Buffer)」「解析器(Parser)」「预处理器(p...

2022-08-27 11:26:00 65

原创 浅聊Mybatis是怎么扫描并且注入到spring容器中的(源码向)

源码很枯燥,但是能学到很多东西,废话不多说直接进入正题:@MapperScan 扫描注入 spring beanDefinition 的流程在使用注解确认扫包范围的时候注解里的@Import(MapperScannerRegistrar.class)引入了 MapperScannerRegistrar 这个类,然后引入了MapperScannerConfigurer 这个类。进行的...

2022-06-22 11:30:00 606

原创 02.Netty与NIO之前世今生

¶ JavaNIO三件套在 NIO 中有几个核心对象需要掌握:缓冲区(Buffer)、选择器(Selector)、通道(Channel)¶ 缓冲区Buffer¶ Buffer操作基本API缓冲区实际上是一个容器对象,更直接的说,其实就是一个数组,在 NIO 库中,所有数据都是用缓冲区处理的。在读 取数据时,它是直接读到缓冲区中的; 在写入数据时,它也是写入到缓冲区中的;任何时候访问 NI...

2022-04-12 22:42:00 127

原创 1.Java-IO演进之路

¶ 概念¶ 必须明白的概念¶ 阻塞block和非阻塞non-block阻塞和非阻塞是进程在访问数据的时候,数据是否准备就绪的一种处理方式,当数据没有准备的时候。阻塞:往往需要等待缓冲区中的数据准备好过后才处理其他的事情,否则一直等待在那里。非阻塞:当我们的进程访问我们的数据缓冲区的时候,如果数据没有准备好则直接返回,不会等待。如果数据已经 准备好,也直接返回。¶ 同步synchron...

2022-04-12 21:57:00 128

原创 从源码角度,带你研究什么是三级缓存

Java开发,总会遇到问三级缓存的。看了很多文章,感觉不是很透彻。打算自己写一个自以为很详细的对三级缓存的理解。 有图文。也有文字概括。受不了动图的可以看文字概括哦进入正题:在开发过程中会遇到循环依赖的问题。 就跟下图一样Spring在为此设计了三级缓存来解决以上依赖的问题首先我们得知道 三级缓存里面分别存的什么一级缓存里存的是成品对象,实例化和初始化都完成了,我们的应...

2021-12-03 15:46:00 480

原创 Mybatis是怎么将@Mapper的给扫描到Spring容器中的

废话不多说直接进入正题:@MapperScan在使用注解确认扫包范围的时候注解里的@Import(MapperScannerRegistrar.class)引入了 MapperScannerRegistrar 这个类,然后引入了MapperScannerConfigurer 这个类。进行的扫描因为该类实现了 ImportBeanDefinitionRegistrar在Sprin...

2021-12-02 17:44:00 490

原创 根据时间排序分页查询导致部分数据不准确

我们来观察下以下sql 是否存在问题SELECT id, orderNo, addTimeFROM deal_tabORDER BY addTime DESCLIMIT 1,20SELECT *FROM deal_tab where pay_time >="2021-01-01" and pay_time < "2021-03-01"LIMIT 1,20以上的sql 在查询过程中。总数可能与实际出现的数据内容可能会对不上并且第二个sql语句没有使用排序。实际是.

2021-10-20 16:11:27 1154

原创 从源码层面带你实现一个自动注入注解

首先,需要了解到的是。Spring Bean 的生命周期在生命周期中。注入bean属性的位置是在以下代码:populateBean 位置中那么我们在项目中使用注解 产生一个bean的时候必定会经过以下代码进行一个bean的创建流程/**省略代码**/// 开始初始化 bean 实例对象Object exposedObject = bean;try { // <5> 对 bean 进行填充,将各个属性值注入,其中,可能存在依赖于其他 bean 的属性 popula..

2021-09-14 09:44:58 243

原创 在项目中,如何保证幂等性

在项目中,如何保证幂等性1.什么是幂等在我们编程中常见幂等1)select查询天然幂等 2)delete删除也是幂等,删除同一个多次效果一样 3)update直接更新某个值的,幂等 4)update更新累加操作的,非幂等 5)insert非幂等操作,每次新增一条2.产生原因由于重复点击或者网络重发 eg: 1)点击提交按钮两次;2)点击刷新按钮;3)使用浏览器后退按...

2021-04-02 10:27:00 1007

原创 论Redis分布式锁的正确使用姿势

前言日常开发中,秒杀下单、抢红包等等业务场景,都需要用到分布式锁。而Redis非常适合作为分布式锁使用。本文将分七个方案展开,跟大家探讨Redis分布式锁的正确使用方式。如果有不正确的地方,欢迎大家指出哈,一起学习一起进步。什么是分布式锁方案一:SETNX + EXPIRE方案二:SETNX + value值是(系统时间+过期时间)方案三:使用Lua脚本(包含SETNX + EXPI...

2021-04-02 10:26:00 104

原创 将博客搬至CSDN

因为感觉csdn比博客园更好用一些,所以决定将博客园上的博客搬家到CSDN上(虽然也没有几篇文章,但是这表明了我打算一直写下去的决心啊)。关于好用的原因,或者说博客园不好用的地方,我觉得程序媛想事儿(Alexia)在他的谈谈我眼中的CSDN吧这篇文章中说得很清楚了,我在这里把我觉得深感赞同的地方转过来:CSDN支持HTML富文本粘贴,所见即所得很多人写博文通常会先在自己喜欢的编辑器里写好、排...

2021-03-01 09:30:00 142

原创 Spring Boot2.0 静态资源被拦截问题

在Spring Boot2.0+的版本中,只要用户自定义了拦截器,则静态资源会被拦截。但是在spring1.0+的版本中,是不会拦截静态资源的。因此,在使用Spring Boot2.0+时,配置拦截器之后,我们要把静态资源的路径加入到不拦截的路径之中。```@Configurationpublic class InterceptorConfig implements WebMvcConfigurer { @Override public void addIntercepto...

2021-03-01 09:27:13 369 1

原创 Spring Boot 在启动时进行配置文件加解密

Spring Boot Application 事件和监听器寻找到application.yml的读取的操作。从spring.factories 中查看到# Application Listenersorg.springframework.context.ApplicationListener=\org.springframework.boot.context.config.Con...

2020-06-16 09:38:00 93

原创 启动时查看配置文件application.yml

Spring Boot Application 事件和监听器在多环境的情况下。 可能需要切换配置文件的一个对应的属性来切换环境面临的问题就是 如何在springboot加载完配置文件的时候就可以立即校验对应的属性值SmartApplicationListener实现监听解耦我们只需在加载完成之后去加入一个监听器。 就可以得到application.yml的内容。 不然再这个事件之前...

2020-03-02 10:26:00 172

原创 SpringBoot中整合Redis、Ehcache使用配置切换 并且整合到Shiro中

在SpringBoot中Shiro缓存使用Redis、Ehcache实现的两种方式实例SpringBoot 中配置redis作为session 缓存器。 让shiro引用本文是建立在你是使用这shiro基础之上的补充内容第一种:Redis缓存,将数据存储到redis 并且开启session存入redis中。引入pom<dependency> &...

2019-08-15 17:22:00 601 1

原创 给你的SpringBoot做埋点监控--JVM应用度量框架Micrometer

这世上有三样东西是别人抢不走的:一是吃进胃里的食物,二是藏在心中的梦想,三是读进大脑的书JVM应用度量框架Micrometer实战前提spring-actuator做度量统计收集,使用Prometheus(普罗米修斯)进行数据收集,Grafana(增强ui)进行数据展示,用于监控生成环境机器的性能指标和业务数据指标。一般,我们叫这样的操作为”埋点”。SpringBoot中的依赖spri...

2019-08-13 09:19:00 218

原创 SpringBoot Jar包瘦身 - 跟大文件说再见!

前言SpringBoot部署起来配置非常少,如果服务器部署在公司内网,上传速度还行,但是如果部署在公网(阿里云等云服务器上),部署起来实在头疼、就是 编译出来的 Jar 包很大,如果工程引入了许多开源组件(SpringCloud等),那就更大了。这个时候如果想要对线上运行工程有一些微调,则非常痛苦可以用以下方法减少jar内容瘦身准备1、首先我们要对Jar包有一个初步认识,它的内部结构如下...

2019-08-03 17:21:00 126

原创 Spring中重要的注解

现在大部分的Spring项目都会用到注解。使用注解来替换xml,一行简单的注解就可以解决很多事情。但是你真的懂其中的原理吗。本文翻译于 https://docs.spring.io/spring-framework/docs and https://docs.spring.io/spring-framework/docs在面试的时候 多少会问道 你了解过Spring注解吗。先来谈谈@C...

2019-06-13 10:56:00 59

原创 Java 高级 --- 多线程快速入门

这世上有三样东西是别人抢不走的:一是吃进胃里的食物,二是藏在心中的梦想,三是读进大脑的书多线程快速入门1、线程与进程区别每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。 所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。使用线程可以把占据时间长的...

2019-06-03 13:55:00 55

空空如也

空空如也

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

TA关注的人

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