自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ThreadLocal为什么存在内存泄漏,源码分析

详细介绍ThreadLocal的各种坑,内存泄漏的原因等

2023-12-27 11:46:39 881

原创 Sentinel计算QPS限流算法

Sentinel其实就是一个AOP,通过AspectJ切入要进行限流的接口,为其添加@Around环绕通知,并使用try-catch包裹起来,源码在SentinelAutoConfiguration中每一个对该限流接口的请求,都要经过AOP的增强,先执行过一系列限流、熔断规则组成的责任链,然后才执行真正的接口逻辑。@Aspect //使用的AOPpublic class SentinelResourceAspect extends AbstractSentinelAspectSupport {..

2021-08-25 22:48:02 2565 4

原创 Ribbon负载均衡原理,Feign是如何整合Ribbon的?

文章目录1. 什么是负载均衡?2. Ribbon的使用2. Ribbon的负载均衡原理①:收集带有@LoadBalanced注解的RestTemplate,并为其添加一个拦截器②:选择负载均衡器,执行负载均衡算法(默认轮询)1. 什么是负载均衡?       负载均衡是从多个服务中根据某个策略选择一个进行访问,常见的负载均衡分为两种客户端负载均衡:即在客户端就进行负载均衡算法分配。例如spring cloud中的ribbon,客户

2021-07-20 22:18:14 2990 12

原创 mysql慢查询优化方案

文章目录1. 分页查询优化       1. 分页查询优化在平时开发中,免不了使用分页,很多时候我们业务系统实现分页功能可能会用如下sql实现:mysql> select * from employees limit 10000,10;       这种查询方式表示从表 employees 中取出从 10001 行开始的 10 行记录。看似只查询了 1

2021-06-21 23:31:53 648

原创 网关Spring Cloud Gateway的配置和使用

文章目录1. 什么是Spring Cloud Gateway?1. 什么是Spring Cloud Gateway?       Spring Cloud Gateway 是 Spring Cloud官方推出的第二代网关框架,定位于取代 Netflix Zuul。相比 Zuul 来说,Spring Cloud Gateway 提供更优秀的性能,更强大的有功能。      &

2021-05-20 12:36:23 1175 2

原创 分布式事务Seata的AT模式下两阶段提交原理

文章目录1. 扫描@GlobalTransactional注解,开启全局事务         Seata的AT模式的核心是对业务无侵入,是一种改进后的两阶段提交,其设计思路如下:第一阶段:RM端提交本地事务,生成undo日志表,释放本地锁和连接资源。并向TC注册分支事务,通过全局事务的 XID 进行关联。第二阶段:完全异步分布式事务操作成功,则TC通知RM异步删除undo日志表分布式事务操作失败,则TM

2021-05-14 18:02:42 3244 1

原创 分布式事务解决方案,Seata的基本配置和使用

文章目录1. 分布式事务介绍①:本地事务②:分布式事务2. Seata介绍①:Seata的三种角色②:Seata的设计思路③:设计亮点以及存在的问题3. Seata的DB模式配置①:事务协调者TC环境配置        1. 分布式事务介绍事务分为两种本地事务分布式事务①:本地事务        大多数场景下,我们的应用都只需要操作

2021-05-12 18:06:13 2632 3

原创 Nacos集群的CP架构,CAP原则与BASE原则的应用

文章目录1. Nacos单机模式下的心跳检查机制2. Nacos集群模式下的心跳检查机制1. Nacos单机模式下的心跳检查机制        Nacos单机模式的心跳机制在上一篇已经分析完毕,点击查看Nacos单机模式下的心跳检查机制 主要逻辑是:开启一个延迟定时线程池,延时5秒,每隔5秒发起一次心跳检测,如果15秒没有响应,则把服务的健康状态置为false,如果30秒没有响应,才踢出该服务! public vo

2021-04-13 22:03:02 4209 4

原创 Nacod服务注册与发现(AP架构)、心跳检查机制

文章目录1. Nacos核心功能点2. 服务注册1. Nacos核心功能点        Nacos架构图如下:结合以上架构图,Nacos的核心功能点有如下几点:服务注册:Nacos Client会通过发送REST风格请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如ip地址、端口等信息。Nacos Server接收到注册请求后,就会把这些元数据信息存储在一个双层的内存Map中。服务心跳

2021-04-11 13:18:17 1977 5

原创 mysql的事务与锁机制

文章目录1.事务及其ACID属性2. 事务并发带来的问题                我们的数据库一般都会并发执行多个事务,多个事务可能会并发的对相同的一批数据进行增删改查操作,可能就会导致我们说的脏写、脏读、不可重复读、幻读这些问题。mysql中可以通过begin、commit等命令开始或者提交一个事务,在使用Spring的@Transiti

2021-03-24 14:35:55 1341

原创 mysql索引为什么使用B+tree,InnoDB与MyISAM 的区别

文章目录1. 索引的作用?2. 索引有哪些数据结构①:二叉树②:红黑树③:B-Tree④:B+Tree        1. 索引的作用?索引就像数据的目录,是帮助MySQL高效获取数据的排好序的数据结构,那么他有什么作用呢?以上图为例,如果我们要查询col2 = 89 的数据,sql如下:select * from table where Col2 = '89';    &

2021-03-23 15:14:51 516

原创 一文彻底搞懂字符串、字符串常量池原理

文章目录1. 常量池概述1.1 常量池、运行时常量池与字符串常量池的区别2. 字符串常量池的设计初衷3. 字符串的几种创建方式及原理①:直接赋值②:new String()③:intern()方法3. 面试题:字符串比较        1. 常量池概述        java代码经过编译后会生成.class字节码文件,随便打开一个target目

2021-03-22 18:04:38 3227 6

原创 Dubbo的SPI机制对比传统的SPI做了哪些改进?Dubbo的IOC和AOP

文章目录1. JAVA的SPI机制1. JAVA的SPI机制        SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来框架扩展和组件替换。在面向的对象的设计里,一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。但如果需要替换另一种实现,就需要修改代码,生成新的jar包,违反了可拔插的原则。为了实现在模块装配的时候能不在程序里指明

2021-02-23 12:57:40 677 3

原创 RocketMQ如何保证消息不丢失? 如何快速处理积压消息?

文章目录1. 哪些环节会有丢消息的可能?1. 哪些环节会有丢消息的可能?        关于MQ,有一个问题是无法避免的,就是怎么保证消息不丢失,这个问题是所有MQ都需要面对的一个共性问题。大致的解决思路都是一致的,首先要找到哪些环节会有丢消息的可能,来看一个MQ的通用架构        其中,1,2,4三个场景分别是:发消息、消息主从同步

2021-02-17 00:47:15 7368 5

原创 RocketMQ的组织架构和基本概念,Dledger高可用集群架构原理

文章目录1. MQ产品介绍2. rocketMQ组织架构①:NameServer②:Broker③:Producer**④:Consumer1. MQ产品介绍        1.1 什么是MQ?为什么要用MQ?        MQ:MessageQueue,消息队列。 队列,是一种FIFO 先进先出的数据结构。消息由生产者发送到MQ进行排

2021-02-09 20:50:28 1415 1

原创 redis专题:redis缓存穿透、缓存击穿、缓存雪崩等问题如何解决?

文章目录1. 缓存穿透1.1 缓存空对象1.2 布隆过滤器2. 缓存击穿(失效)3. 缓存雪崩        在高并发项目中,redis作为热门中间件,在为项目带来便利性的同时,也存在一些隐患,比如缓存穿透、缓存击穿、缓存雪崩等问题。这些问题的出现可能会使数据库遭受非常大的压力,以至于数据库崩溃!下面来介绍如何应对和解决这些问题!1. 缓存穿透      &n

2020-11-16 17:59:11 385

原创 redis专题:redis的主从、哨兵、集群架构的配置和部署详情、以及问题分析

文章目录1. 在linux下安装redis1. 在linux下安装redis下载地址:http://redis.io/download安装步骤:# 安装gccyum install gcc# 把下载好的redis-5.0.3.tar.gz放在/usr/local文件夹下(可以使用Xftp传输)wget http://download.redis.io/releases/redis-5.0.3.tar.gz# 解压tar xzf redis-5.0.3.tar.gzcd redis-5

2020-11-06 15:23:35 2055 2

原创 redis专题:redis的持久化方式有哪些?redis数据的备份和恢复策略

文章目录1. 为什么要做redis持久化?2. 持久化方式之----RDB快照(snapshot)3. 持久化方式之----AOF(append-only file)4. 持久化方式之----混合持久化1. 为什么要做redis持久化?        在web项目中,从前台打过来的请求一般会经过redis,如果redis中有,就直接返回,redis中没有再去访问数据库,有效的减轻了数据库的压力。在很多大型互联网公司中,对于

2020-11-06 11:37:13 420

原创 框架源码专题:Spring是如何集成Mybatis的?Spring怎么管理Mapper接口的动态代理

文章目录1. Spring集成Mybatis代码示例2. Spring 如何解析Mybatis配置文件3. Spring是怎么管理Mapper接口的动态代理的1. Spring集成Mybatis代码示例        Spring在集成Mybatis时,使用SqlSessionFactoryBean来完成Configuration的解析,代码如下:@EnableTransactionManagement@Configu

2020-10-28 18:04:26 987

原创 框架源码专题:Spring是如何解决循环依赖的?

文章目录1.什么是循环依赖2.解决循环依赖思路3.二级缓存能否解决循环依赖,三级缓存存在的意义4.多例和构造器为什么无法解决循环依赖5.如何进行扩展1.什么是循环依赖        所所谓的循环依赖是指,A 依赖 B,B 又依赖 A,它们之间形成了循环依赖。或者是 A 依赖 B,B 依赖 C,C 又依 赖 A。它们之间的依赖关系如下:循环依赖代码如下:public class InstanceA { @Au

2020-09-22 12:34:41 705 1

原创 框架源码专题:springIOC的加载过程,bean的生命周期,结合spring源码分析

文章目录1.BeanFactory和ApplicationContext的区别?1.BeanFactory和ApplicationContext的区别?        BeanFactory是ApplicationContext的顶级接口,ApplicationContext在前者的基础上又增加了很多扩展点,例如:注解处理,bean扫描和AOP代理等等。和BeanFactory相比更值得推荐。  &n

2020-09-17 15:06:24 655

原创 线程和线程池七大参数、线程池分类、运行原理详解,线程池的使用场景

文章目录1. 线程2. 线程池1. 线程1.1线程        线程是调度CPU资源的最小单位,线程模型分为KLT模型与ULT模型,JVM使用的KLT模型,一个java线程对应一个OS线程,线程有多个生命状态①:NEW :新建②:RUNNABLE :运行③:BLOCKED :阻塞④:WAITING :等待⑤:TIMED_WAITING :超时等待⑥:TERMINATED :终结其中运行又分为 就绪、运行中

2020-08-31 12:32:10 5133 2

原创 抽象同步器AQS、CAS应用之--ReentrantLock,lock和unlock的流程、源码分析

文章目录1. AQS和CAS2. ReentrantLock1. AQS和CAS多线程中经常听到AQS和CAS,他们究竟是什么呢?AQS: AbstractQueuedSynchronizer(AQS)抽象队列同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch等。CAS: compare and swap(CAS),比较与交换。在java语言之前,高并发已经在服务器领域有大量的应

2020-08-19 12:23:20 720

原创 synchronized的使用和底层原理、锁状态的膨胀升级过程

1. synchronized介绍        synchronized内置锁是一种对象锁(锁的是对象而非引用),作用的粒度是对象,可以解决并发的原子性、一致性、有序性等问题,是可重入的。1.1 加锁的方式有三种:①:加在静态方法上,锁的对象是Class对象,只有一个!②:加在普通方法上,锁的是当前调用者这个对象,有多个!③:加载代码块上,锁的是括号里的对象!1.2 synchronized的发展史&nbsp

2020-08-10 17:46:23 715

原创 JVM内存模型、逃逸分析以及发生GC的时机

1.整体内存模型图jvm内存关系如图所示。上边的图会结合Math类进行分析,Math如下所示//Math类public class Math { public static final int initData = 666; public static User user = new User(); public int compute() { int a = 1; int b = 2; int c = (a + b) *

2020-08-10 12:20:53 1020

原创 类加载机制、双亲委派机制深度解析以及如何自定义类加载器

当我们运行一个类的时候,首先要通过类加载机制把类加载到JVM中1.类加载运行的全过程jvm创建 -> 类加载步骤:①:c++程序先创建java虚拟机②:c++程序创建引导类加载器③:c++创建JVM启动器 Launcher 实例④:在Launcher实例中获取其他类加载器(扩展、应用类加载器)⑤:通过双亲委派机制,决定哪个类加载器加载⑥:找到合适的类加载器后,通过loadClass的类加载过程: 加载 >> 验证 >> 准备 >> 解析 >

2020-08-10 12:20:43 997 1

原创 mysql的MVCC机制详解

1. 什么是MVCC机制?首先来认识一下可重复读:可重复读:mysql的默认隔离级别是可重复读,也就是在一个事务中,多次查询结果都相同。就算有其他事务修改了数据,也不会影响当前事务的查询结果。mysql是怎么来实现可重复读的呢?其实是靠MVCC(Multi-Version Concurrency Control-多版本并发控制)机制来实现的。首先mvcc机制不会对读操作加锁,不会通过加锁控制来保证读写隔离(串行化隔离级别是这样干的!),避免了频繁加锁,保证了读操作的效率。注意:mysql在读已提交

2020-08-10 12:20:12 2285 1

原创 JVM垃圾回收算法与垃圾收集器

JVM是通过分代收集理论进行垃圾回收的,即新生代和老年代选择的垃圾回收算法是不同的:新生代:标记-复制算法老年代:标记-清除、标记-整理算法等。下面来看每个算法的理论和应用:1. JVM垃圾回收算法1.1 标记-复制算法①:此算法将内存分为大小相同的两块,每次使用其中一块,当这一块内存使用完毕后,通过标记活着的对象,把活着的对象复制到另一块中,然后把第一块内存空间清理掉。②:标记-复制 算法一般用在新生代,因为标记-复制算法只使用一半的内存空间,因为新生代对象朝生夕死的缘故,只需要付出少量的复

2020-08-10 12:19:39 851 2

原创 redis专题:使用redis实现分布式锁

在使用redis应对高并发的情况下,可能会出现缓存穿透、缓存雪崩、缓存击穿等问题。1.缓存穿透描述:查询一个不存在的数据,比如只有100个商品,使用压测工具一直查询101号商品,redis中没有,数万请求一起请求数据库,数据库瞬时压力激增,导致数据库崩溃。解决:查询不存在的数据,即使数据库返回null,也放入缓存,并设置短期过期时间,这样只有一次查询查数据库,同时使用过期时间也过滤了redis中的无用数据。2.缓存雪崩描述:所有缓存的数据在某一时刻同时失效。例如设置缓存的数据时,设置了相同的过期时

2020-07-03 16:23:13 603

原创 spring的IOC原理,容器管理的bean类型、bean的生命周期

1.什么是IOC(1)控制反转,把对象创建和对象之间的调用过程,交给 Spring 进行管理(2)使用 IOC 目的:为了耦合度降低为什么IOC可以极大的降低耦合度?(1)原始版:一般我们想使用userDao中的方法时,会在调用地创建userDao的对象,当userDao对象包名更改或者方法名更改时,也同时要修改userService中的代码,耦合度很高!(2)进阶版,使用工厂模式生成userDao对象,解决了service和dao的耦合,但是dao和factory又耦合(3)最终版 IOC

2020-06-02 17:16:58 608

原创 开发中常用的小脚本、工具

两个字段的中间字符做脱敏。

2023-08-24 10:48:23 253

原创 Easyexcel为什么不解析二进制的excel文件,而要通过解析xml内容来完成解析?

通过将 Excel 文件解析为 XML 内容,EasyExcel 能够有效地处理大型的 Excel 文件,并且在解析过程中可以选择读取特定的数据或者只处理部分数据,以节省内存和提高读取性能。总之,EasyExcel 选择解析 Excel 文件的 XML 内容而不是直接解析二进制格式的 Excel 文件,是为了实现兼容性、解析性能、内存管理和灵活性的平衡。因此,可以说 EasyExcel 在读取 Excel 文件时实际上是处理 Excel 文件的 XML 内容,而不是直接处理二进制格式的 Excel 文件。

2023-07-13 20:24:01 408

原创 java实现一个计算器:输入计算公式即可输出结果

以上使用双栈实现的计算器,测试代码运行结果如下。

2023-06-19 22:48:56 757 1

原创 springboot如何通过AOP获取并修改返回参数

通过AOP获取返回参数,做业务处理

2022-07-06 22:25:24 4832 1

原创 mysql死锁问题分析,锁行与锁表的原因

文章目录1. 死锁是怎样产生的?2. 死锁解决方案3. 锁行与锁表的现象和原因准备工作,建一张表CREATE TABLE `testtable` ( `id` bigint NOT NULL AUTO_INCREMENT, `name` varchar(500) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '名字', `age` int DEFAULT NULL COMMENT '年龄', `id_card` int NOT NULL

2022-05-23 00:21:00 2218 2

原创 mysql把一个表的字段赋值到另一张表,多表之间常用的操作

文章目录mysql多表之间的常用操作1. 根据主键,把一个表的字段赋值到另一张表2. replace into:把一张表的数据新增或更新到另一张表mysql多表之间的常用操作 1. 根据主键,把一个表的字段赋值到另一张表user表userIdusernamepasswordsexaddrphone1张珊123男北京市15623565862李思456女北京市1562354256score表scoreIduserId

2022-03-16 21:12:24 22043

原创 left join后边跟on...and 和where...and的区别

文章目录1. 建表2. on...and3. where...and1. 建表testACREATE TABLE testA ( Id int ( 10 ) PRIMARY KEY, NAME VARCHAR ( 10 )) INSERT INTO testAVALUES ( 1, '小黄' );INSERT INTO testAVALUES ( 2, '小绿' );INSERT INTO testAVALUES ( 3, '小白' );INSERT INTO testA

2022-01-13 17:55:48 961

原创 Mysql索引成本计算规则 Optimizer Trace

文章目录1. 开启Optimizer Trace2. sql成本核算规则         MySQL5.6之前的版本只能通过EXPLAIN语句查看到最后优化器决定使用的执行计划,却无法知道它为什么做这个决策,在MySQL 5.6以及之后的版本中,MySQL提出了一个optimizer trace(优化跟踪)的功能,它可以让我们看到优化器生成执行计划的整个过程,让我们知道有的查询sql明明能走到索引,但是却走了全表扫描

2021-12-19 22:45:57 1062

原创 java找出两个List集合的重复项

上代码package Basic.list;import java.util.Arrays;import java.util.List;import java.util.Objects;import java.util.stream.Collectors;public class Java8Test { public static void main(String[] args) { // 老师集合 List<Teacher> teache

2021-11-29 00:44:32 10848

原创 mysql生成十万数据脚本

参考create table tb_dept_bigdata(id int unsigned primary key auto_increment,deptno mediumint unsigned not null default 0,dname varchar(20) not null default '',loc varchar(13) not null default '')engine=innodb default charset=utf8;create table tb_emp

2021-11-03 00:14:10 950

空空如也

空空如也

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

TA关注的人

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