- 博客(36)
- 收藏
- 关注
原创 Mysql主从复制原理分析
MySQL Replication是官方提供的主从同步方案,也是用的最广的同步方案。Replication(复制)使来自一个 MySQL数据库服务器(称为源(Source))的数据能够复制到一个或多个 MySQL 服务器(称为副本(Replica))。默认情况下,复制是异步的;副本不需要永久连接即可从源接收更新。根据配置,您可以复制所有数据库、指定数据库,甚至某个数据库中的指定表。
2025-06-05 16:28:12
837
原创 Mysql锁机制与优化实践以及MVCC底层原理刨析
MyISAM在执行查询语句SELECT前,会自动给涉及的所有表加读锁,在执行update、insert、delete操作会自动给涉及的表加写锁。InnoDB在执行查询语句SELECT时(非串行隔离级别),不会加锁。但是update、insert、delete操作会加行锁。另外,读锁会阻塞写,但是不会阻塞读。而写锁则会把读和写都阻塞。
2025-05-25 17:03:15
1036
原创 Mysql隔离级别与锁机制
InnoDB在执行查询语句SELECT时(非串行隔离级别),不会加锁。但是update、insert、delete操作会加行锁。简而言之,就是读锁会阻塞写,但是不会阻塞读。而写锁则会把读和写都阻塞。
2025-05-24 12:53:23
708
原创 Mysql索引实战2
在决定哪个表做驱动表的时候,应该是两个表按照各自的条件过滤,过滤完成之后,计算参与 join 的各个字段的总数据量,数据量小的那个表,就是“小表”,应该作为驱动表。
2025-05-22 20:50:22
860
原创 Mysql索引实战1
对于上面这两种 name>‘a’ 和 name>‘zzz’ 的执行结果,mysql最终是否选择走索引或者一张表涉及多个索引,mysql最终如何选择索引,我们可以用trace工具来一查究竟,开启trace工具会影响mysql性能,所以只能临时分析sql使用,用完之后立即关闭。
2025-05-21 21:04:38
252
原创 Explain详解与索引最佳实践
使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是执行这条SQL注意:如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中。
2025-04-24 23:41:12
498
原创 全面理解Mysql架构
我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题。同样,对于 MySQL 的学习也是这样。平时我们使用数据库,看到的通常都是一个整体。比如,你有个最简单的表,表里有一个 ID 字段,在执行下面这个查询语句时:我们看到的只是输入一条语句,返回一个结果,却不知道这条语句在 MySQL 内部的执行过程。
2025-04-21 21:55:39
963
原创 JDK17的GC调优策略
我们第一个JVM性能调优专题,到这里就结束了。但是,JVM底层的这些知识,其实就像是武林高手的内功,见面三招可能用不上,但是,越往后越能体现他的价值。这些经过时间沉淀下来的经验,才是程序员最不可替代的核心竞争力。 关于JVM部分,我们这一期的课程暂告一段落,但是,大家的学习并没有结束。对于大家以后的JVM学习,我给大家三条具体的学习建议。
2025-04-20 01:56:57
1323
原创 JDK17 新特性梳理及内存模型刨析
JDK8 中,我们写的 Java 代码是在一个一个的package下面的,模块化在包之上增加了更高级别的聚合,它包括一组密切相关的包和资源以及一个新的模块描述符文件。简单点说,module是 java 中package包的上一层抽象。通过module,java 可以更精确的分配对象的生效范围。
2025-04-20 01:43:09
1160
原创 JVM调优工具详解及调优实战
事先启动一个web应用程序,用jps查看其进程id,接着用各种jdk自带命令优化应用Jmap此命令可以用来查看内存信息,实例个数以及占用内存大小打开log.txt,文件内容如下:num:序号instances:实例数量bytes:占用空间大小class name:类名称,[C is a char[],[S is a short[],[I is a int[],[B is a byte[],[[I is a int[][]
2025-04-19 17:54:29
992
原创 JVM调优实战及常量池详解
java中基本类型的包装类的大部分都实现了常量池技术(严格来说应该叫对象池,在堆上),这些类是Byte,Short,Integer,Long,Character,Boolean,另外两种浮点数类型的包装类则没有实现。2、在 JDK 1.7 (及以上版本)中,由于字符串池不在永久代了,intern() 做了一些修改,更方便地利用堆中的对象。对于CMS和G1收集器的日志会有一点不一样,也可以试着打印下对应的gc日志分析下,可以发现gc日志里面的gc步骤跟我们之前讲过的步骤是类似的。
2025-04-18 17:44:04
1102
原创 垃圾收集器
Kafka类似的支撑高并发消息系统大家肯定不陌生,对于kafka来说,每秒处理几万甚至几十万消息时很正常的,一般来说部署kafka需要用大内存机器(比如64G),也就是说可以给年轻代分配个三四十G的内存用来支撑高并发处理,这里就涉及到一个问题了,我们以前常说的对于eden区的young gc是很快的,这种情况下它的执行还会很快吗?,基于正态分布统计,计算内存99.9%可能的最大分配速率,以及此速率下内存将要耗尽的时间点,在耗尽之前触发GC(耗尽时间 - 一次GC最大持续时间 - 一次GC检测周期时间).
2025-04-18 17:27:50
592
原创 垃圾收集算法
当前虚拟机的垃圾收集都采用分代收集算法,这种算法没有什么新的思想,只是根据对象存活周期的不同将内存分为几块。一般将java堆分为新生代和老年代,这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。比如在新生代中,每次收集都会有大量对象(近99%)死去,所以可以选择复制算法,只需要付出少量对象的复制成本就可以完成每次垃圾收集。而老年代的对象存活几率是比较高的,而且没有额外的空间对它进行分配担保,所以我们必须选择“标记-清除”或“标记-整理”算法进行垃圾收集。
2025-04-18 17:12:51
807
原创 Sa-token深入
1.Sa-Token-SSO 单点登录模块什么是单点登录?解决什么问题?举个场景,假设我们的系统被切割为N个部分:商城、论坛、直播、社交…… 如果用户每访问一个模块都要登录一次,那么用户将会疯掉, 为了优化用户体验,我们急需一套机制将这N个系统的认证授权互通共享,让用户在一个系统登录之后,便可以畅通无阻的访问其它所有系统。单点登录——就是为了解决这个问题而生!简而言之,单点登录可以做到: 在多个互相信任的系统中,用户只需登录一次,就可以访问所有系统。架构选型Sa-Token-SSO 由简入难划分
2024-03-13 23:38:19
2007
原创 Sa-Token基本到深入操作
1.Sa-Token 介绍Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。Sa-Token 旨在以简单、优雅的方式完成系统的权限认证部分,以登录认证为例,你只需要:下面展示一些 内联代码片。// 会话登录,参数填登录人的账号id StpUtil.login(10001);无需实现任何接口,无需创建任何配置文件,只需要这一句静态代码的调用,便可以完成会话登录认证。如果
2024-03-13 22:28:03
2439
原创 zip解压
/ 设置压缩流:直接写入response,实现边压缩边下载。// 添加ZipEntry,并ZipEntry中写入文件流。// 这里,加上i是防止要下载的文件有重名的导致下载失败。// 解决不同浏览器压缩包名字含有中文时乱码的问题。// 注意关闭顺序,否则可能文件错误。// 使用输出流输出输入流的字节。FileItem类对象创建。// 循环将文件写入压缩流。// 设置压缩包的名字。
2023-07-11 09:40:48
155
原创 SSM总结
SpringSpring框架底层源码-Bean的生命周期:要想让一个类成为Bean,首先得让类成为Bean定义----类上带有或者包含有@Component的注解是可以成为Bean定义的或者Bean标签,这种事Xml的方式,这里我们不讲述因为过时了-----首先跟据包路径扫描,所有的类都会被编译成Class对象,这里有Resource对象存储,该对象是一个数组。--------接着遍历每个Class对象,带有或者包含有@Component注解的类会被添加到Bean定义集合去,添加之前会进行一次过滤,虽然该
2022-01-16 00:13:07
265
原创 内置后置PostProcess处理器深度讲解
个人总结AnnotationConfigApplicationContext的构造方法,进入this方法中,在实例化BeanDefinitionReader的时候会注册很多用于解析注解的Bean定义放入Bean定义集合中,然后走reader.register(annotatedClasses)方法将配置类(带有类似@Configuration注解的类)注册进Bean定义集合中,此时配置类还没有解析成Bean定义。然后会在refresh()方法中调用invokeBeanFactoryPostProces..
2021-08-05 04:34:43
387
原创 IOC容器加载过程和Bean的生命周期深度刨析
首先实例化容器,AnnotationConfigApplicationContext进入该构造方法。然后进入this()方法,这里会默认调用其父类的构造方法会实例化DefaultListableBeanFactory,该类的实现了BeanFactory(Bean工厂)和BeanDefinitionRegistryPostProcessor(注册Bean定义的类),接着初始化一个Bean读取器AnnotatedBeanDefinitionReader,该类做了两件事 注册内置BeanPostProcesso.
2021-08-05 02:51:00
206
原创 Spring源码整体脉络介绍
个人总结:首先有一个读取接口,读取某一个包下的所有类,然后跟据扫描器,扫描器扫描带有@Component或者@Configuration或者xml文件等等的类,然后在跟据注册器将这些类注册成一个个Bean定义放入一个集合中,然后我们的ApplicationContent可以调用Bean工厂的后置处理器去处理我们的Bean定义,(记住ApplicationContent实现了BeanFactory接口),然后我们的BeanFactory使用简单的工厂设计模式通过getBean方法生产Bean(getBe..
2021-08-04 04:20:28
247
原创 Tomcat长连接底层源码实现
长连接就是Http长连接,在http请求头里面有一个非常重要的参数Connection:keep-alive,如果一个http请求带上了这个参数就代表了这是一个长连接浏览器发送数据必须建立Socket连接,1.浏览器发送请求给Tomcat如果带有keep-alive参数代表tomcat接受请求后不关闭Socket连接,如果是close参数代表接受请求后关闭Socket连接个人理解上面这幅图可以看出,服务器与服务器之间通讯必循遵循TCP协议建议Socket连接,服务器与服务器之间发送数据都是通
2021-08-04 02:39:39
676
原创 Tomcat整体架构和处理流程解析
Tomcat整体架构图1.第⼀次从socket中获取数据到InputBuffer中,BIO对应的是InternalInputBuffer,⽗类是AbstractInputBuffer2.然后基于InputBuffer进⾏解析数据3.先解析请求⾏,把请求⽅法,请求uri,请求协议等封装到org.apache.coyote.Request对象中4.org.apache.coyote.Request中的属性都是MessageBytes类型,直接可以理解为字节类型,因为从socket中获取的数据都是字
2021-08-03 04:32:28
526
1
原创 JVM常量池详解
Class常量池与运行时常量池Class常量池可以理解为是Class文件中的资源仓库。Class文件中除了包含类的版本、字段、方法、接口等描述信息外,还有一项信息就是常量池(constantpooltable),用于存放编译期生成的各种字面量(Literal)和符号引用(SymbolicReferences)常量池中主要存放两大类常量:字面量和符号引用字面量符号引用字符串常量池三种字符串操作(Jdk1.7及以上版本)...
2021-08-01 20:06:12
154
原创 JVM对象创建与内存分配机制
对象的创建1.类加载检查虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个 符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。 new指令对应到语言层面上讲是,new关键词、对象克隆、对象序列化等。2.分配内存在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类 加载完成后便可完全确定,为 对象分配空间的任务等同于把 一块确定大小的内存从Java堆中划分出来。这个步骤有两个问题:
2021-05-25 23:17:52
275
1
原创 类加载
**类加载机制**Java类如何进行加载其中loadClass的类加载过程有如下几步: 加载 >> 验证 >> 准备 >> 解析 >> 初始化 >> 使用 >> 卸载加载:在硬盘上查找并通过IO读入字节码文件,使用到类时才会加载,例如调用类的 main()方法,new对象等等,在加载阶段会在内存中生成一个代表这个类的 java.lang.Class对象,作为方法区这个类的各种数据的访问入口验证:校验字节码文件的正确性 准备:
2021-05-18 15:33:05
277
1
原创 2020-12-18
GateWay自定义局部过滤器package com.xinhua.config;import org.springframework.cloud.gateway.filter.GatewayFilter;import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;import org.springframework.http.server.reactive.ServerHttpReques
2020-12-18 12:32:30
511
原创 个人的工具类
日期工具类,简单实用,未经允许,请勿转载package com.itheima.utils;import java.text.SimpleDateFormat;import java.util.*;/**日期操作工具类/public class DateUtils {/*日期转换- String -> Date@param dateString 字符串时间@return Date类型信息@throws Exception 抛出异常*/public static D
2020-12-10 09:19:18
145
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人