- 博客(61)
- 资源 (1)
- 收藏
- 关注
原创 Tomcat调优
2.3 Tomcat I/O模型选择。1.2 配置JMV垃圾回收器。2 tomcat参数配置。1.1 配置JVM内存。3 操作系统参数配置。
2025-06-12 17:14:43
211
原创 Tomcat线程模型
1 Linux I/O模型I/O:在计算机内存和外部设备之间拷贝数据的过程程序通过cpu向外部设备发出读指令,数据从外部设置拷贝至内存需要一段时间,这段时间cpu是空闲的,此时程序会有两种选择:让出cpu资源,让其干其他事继续让cpu不停地查询数据是否拷贝完成采用哪种策略就是I/O模型需要解决的事一个进程的地址空间分为用户空间和内核空间用户程序只能访问用户空间,内核进程可以访问整个进程空间只有内核才可以直接访问各种硬件资源,比如磁盘和网卡当cpu从网络读取数据时,分为两个阶段。
2025-06-12 16:47:00
669
原创 tomcat核心组件
包含多个用于接收客户端连接的Connector组件,和处理请求的Engine组件,以及线程池Executor组件。CoyoteAdapter通过Mapper组件匹配到对应的Host,Context,Wrapper组件。通过Mapper组件匹配客户端请求对应的Host组件,Context组件,Wrapper组件。客户端发送请求时连接指定端口,可以定位到具体的Service,即可匹配到Engine容器。根据请求内容,匹配到对应的Servlet对象,处理请求并返回响应。
2025-06-09 19:39:38
821
原创 tomcat入门
web应用项目所在的路径,配置相对路径时为所在Host配置appBase的相对路径。项目放置在webapps目录下,可以打war包,tomcat启动时自动解war包。在上述目录下创建xxx.xml配置文件,xxx相当于Context的path属性。当配置文件命名为ROOT.xml时,访问该web应用时使用根路径。tomcat是一款高效,稳定,易于使用的web服务器。:指定访问该应用的路径,context-path。xxx.xml配置文件中配置Context标签。项目存放路径,配置相对路径时是相对于。
2025-06-09 19:38:33
310
原创 MySQL高可用集群
1 什么是MySQL高可用集群MySQL高可用集群MySQLInnoDBClusterInnoDBCluster是MySQL官方实现高可用读写分离的架构方案包含以下组件MySQLGroupReplication简称MGR是MySQL的主从同步高可用方案包括数据同步和角色选举MySQLShell是InnoDBCluster的管理工具用来创建和管理集群MySQLRouter是业务。
2025-05-30 17:38:50
1140
原创 MySQL8.4组复制
2.2.2 复制MySQL实例10001。2.2.3 复制MySQL实例10002。2.2.1 准备MySQL实例。2.2.4 组复制数据同步测试。2.2.5 组复制主库宕机测试。10001,10002开启。2.2 单主模式部署示例。3.2 多主模式部署示例。2.1 什么是单主模式。2.2.3 配置组复制。3.1 什么是多主模式。
2025-05-29 20:34:34
502
原创 MySQL8.4主从复制
1 什么是复制MySQL Replication是官方提供的主从同步方案,是使用最广的同步方案;Replication使来自于一个MySQL数据库服务器(源Source)的数据能够复制到一个或者多个MySQL服务器(副本);默认情况下,复制是异步的;副本不需要永久连接即可从源接收更新可以指定库,指定表进行复制根据主从复制的特点,可以实现MySQL读写分离2 复制的优势&缺点2.1 复制的优势高可用:通过复制机制,MySQL实现跨主机的数据复制,从而获得一定的高可用能力。
2025-05-28 17:55:24
1043
原创 MySQL8新特性
函数索引基于虚拟列功能实现,相当于增加了一个新列,这个列会根据函数计算结果存储,使用函数索引时就会使用该虚拟列作为索引。innodb_buffer_pool_size,innodb_log_file_size等参数,增加配置innodb_deadlock_detect,用于控制系统是否执行InnoDB死锁检测。mysql8之前,如果在查询列上加入函数操作,将导致索引失效。增加参数binlog_expire_logs_seconds。隐藏索引只是不可以见,在查询时不能使用该索引。
2025-05-16 15:26:04
962
原创 MySQL全局优化
设置为2时,表示每次提交事务时都只是将redo日志写到操作系统缓存(page cache)中,这种情况数据库宕机不会丢失数据,操作系统宕机的话,如果page cache中的数据没来的及写入磁盘文件的话就会丢失数据。设置为1时(默认值),表示每次事务时都会将redo日志持久化到磁盘,数据最安全,不会因为数据库或者系统宕机导致数据丢失,但是性能差一点。当>1时,表示每次提交事务都写入到os缓存page cache中,当积累N个事务后调用fsync写入磁盘,服务其宕机时最多丢失N个事务。禁用 atime 更新。
2025-05-13 19:46:54
962
原创 MySQL日志详解
1 redo日志1.1 redo日志相关参数innodb_log_buffer_size:redo日志缓冲区大小。默认16MBinnodb_log_group_home_dir:redo日志文件目录,默认在data目录下innodb_log_files_in_group:redo日志文件个数innodb_log_file_size:单个redo日志文件大小,默认48MBredo日志预写块大小用于优化redo日志写入效率默认为文件系统块大小建议值最小为文件系统块大小或者其整数倍。
2025-04-29 19:45:37
887
原创 MVCC详解
在可重复读隔离级别下,开启事务后,执行任何查询sql是会生成当前事务的一致性视图。说明在生成一致性视图时,该事务。read view一致性视图。的min_id<=trx。的min_id<=trx。在读已提交隔离级别下。(max_id)组成。
2025-04-24 20:29:21
800
原创 MySQL事务详解
一个事务内两次读取数据,由于两次读取期间数据其他事务新插入了数据,导致第二次读读取结果比第一次多的现象,产生了幻读。一个事务内两次读取数据,由于两次读取期间数据被其他事务修改,导致两次数据读取结果不一致的现象,导致了不可重复读。多个事务对同一行数据某个字段更新时,覆盖了其他事务更新的数据。事务A正在对数据进行修改,在事务提交前,数据处于不一致性状态。事务B读取数据,如果读到了事务A未提交的数据,则为脏读。一致性由原子性,隔离性,持久性共同保证。事务完成后,对于数据的修改是持久性的。
2025-04-18 19:27:13
846
原创 MySQL表关联优化
2 基于块的嵌套循环连接Block Nested-Loop Join(BNL)算法。如果一次性不能将驱动数据加载进join_buffer中,则进行多次。1 嵌套循环连接Nested-Loop Join(NLJ)算法。那么此时如果采用NLJ算法进行关联查询呢?1采取全表扫描,将扫描a行数据。3 关联表SQL的优化。
2025-04-01 08:49:14
767
原创 MySQL排序详解
MySQL支持两种方式排序filesort和indexindex是指扫描索引本身完成排序index效率高filesort是指通过内存或者排序文件完成排序filesort效率低orderby满足两种情况时会使用index排序orderby语句使用索引最左列where条件字段和orderby字段组合满足索引最左列配置给每个回话分配排序操作的缓冲区大小当需要排序的数据。
2025-03-29 17:31:31
446
原创 MySQL索引优化最佳实践
,<>,not in ,not exists,is null ,is not null查询,否则会走全表扫描。尽量避免使用in或者or查询,MySQl会进行成本计算决定是否使用索引。使用<,>,<=,>=时MySQL会进行成本计算评估是否使用索引。中做任何操作(计算,函数,类型转换)like查询时遵循最左前缀查询。范围查询优化,大范围拆分小范围。减少select * 语句,
2025-03-25 19:29:23
268
原创 MySQL Explain执行结果详解
1 idselect的序号列通常有几个select就有几个id(除非产生衍生表合并优化)id的顺序是按select出现的顺序增长的id列数字越大执行优先级越高id相同则从上往下执行id为NULL最后执行MySQL中的子查询select子查询select与from之前的子查询语句在主from之后执行from子查询from和where之间的子查询在where子查询之后执行from子查询执行后通常会产生临时表,也称派生表。
2025-03-25 08:29:08
761
原创 MySQL索引数据结构
平衡树虽然解决了数据单调递增或者递减时导致退化为链表的问题,但是在插入时,需要频繁的旋转来保持二叉树的平衡,对于插入修改的性能影响极大。产生的原因是3节点的右子节点多了一个左子节点,此时将5节点右旋后再将3节点左旋解决。右旋的流程为(当前节点为3节点,右旋就是让自己变成右子节点)每个节点的值比左子树所有节点的值大,比右子树所有节点的值小。每个节点比左子树所有节点的值大,比右子树所有节点的值小。每个节点到叶子节点的每个路径黑色节点的个数都相等。每个节点的左子树的高度与右子树的高度差不超过1。
2025-03-08 19:04:41
1145
原创 MySQL执行更新SQL流程
当有一条记录需要更新时,InnoDB引擎就会先把记录写在redo log日志中,然后在后面系统比较空闲的时候,将这个操作记录更新到磁盘里面。max_binlog_size:设置单个binlog日志文件的最大大小,当达到该值时,会生成一个新的日志文件。2:每次提交立即将redo日志缓冲区内容写入到文件系统缓存,不立即同步到磁盘,由操作系统决定何时同步到磁盘。expire_logs_day:设置binlog日志文件的保留天数,默认0,表示不删除旧的日志文件。
2025-03-04 19:28:31
1016
原创 MySQL整体架构
InnoDB有自己的日志系统,redo log(重做日志)和undo log(撤销日志)binlog记录了所有的DML(INSERT,UPDATE,DELETE)语句。MySQL支持多种存储引擎,比如InnoDB,MyISAM,Memory等等。客户端为连接MySQL服务端的工具或者驱动,比如JDCB,ODBC等等。InnoDB是MySQL默认的存储引擎,支持事务,行级锁以及外键约束。Server层有自己的日志系统,binlog日志。生成执行计划:基于以上分析,生成SQL执行计划,2.1 Server层。
2025-03-02 11:25:09
1019
原创 基于JDK17的GC调优策略
参考资料:JDK工具官网文档JDK17 java指令官网文档JDK8java指令官网文档1 JVM有哪些参数可以调1.1 标准参数以开头所有HotSpot都支持使用javahelp或者java查看常用的标准参数listmodules查看当前Java进程中的模块showmoduleresolution查看当前Java进程中各个模块的依赖关系verboseclass显示类加载信息。
2025-02-23 19:57:32
381
原创 jdk17新特性
2.4.4 exports和open声明对外的API。2.3 密封类 Sealed Class。2.4 模块化Module System。2.2 隐藏类Hidden Class。module-info.java⽂件。module-info.java⽂件。module-info.java⽂件。不需要依赖jdk也可以执行的可执行。2.4.5 uses服务开放机制。1.2 switch表达式增强。2.4.6 构建模块化jar包。1.4 var局部变量推导。2.1 记录类record。2.4.1 什么是模块化。
2025-02-22 15:44:32
1081
原创 jdk8新特性
1 lambda表达式lambda本质上是一段匿名内部类也可以是一段可传递的代码完整的lambda由三部分组成:参数列表,箭头,声明语句完整语法大部分场景下,参数类型可以根据上下文环境推断出来,因此参数类型可以省略当只有一个参数时小括号可以省略当执行语句只有一行代码时,可以省略花括号,return和语句结尾的分号1.1 类型推断根据上下文信息推断出参数类型,而不需要显式声明1.2 局部变量限制lambda表达式执行代码块中可以直接使用外部变量。
2025-02-09 19:28:45
915
原创 java常量池
方法时,在字符串常量池分配内存,内存值指向str对象。方法返回字符串常量池引用,与str引用不同。3.1 为什么要设计字符串常量池。方法返回引用和str是同一个引用。方法返回的引用与str引用一致。因为test通过形参传入,会。3.2 创建字符串对象的。3.4 字符串的不可变性。3.3 字符串的+操作。1 Class常量池。
2025-01-23 18:21:54
569
原创 JVM对象内存分配
大小占比幸存区超过50%之后。young gc之后,当。内某一批(gc年龄1~n。,将gc年龄>=n的对象。4 老年代空间担保机制。或者标量替换任何一个。
2025-01-01 18:18:58
1083
原创 JVM对象内存结构
jvm中数组长度存储为4字节,则数组最大长度为Integer的最大值。对于不同状态(无锁态,轻量级锁,重量级锁,GC标记,偏向锁)的对象。哈希码(HashCode)、GC分代年龄、锁状态标志。64位操作系统中占8字节,开启指针压缩时占4字节。分析自定义类App对象大小。32位操作系统中占4字节。分析Object对象大小。通过jol计算对象大小。分析int[]对象大小。jvm对象中属性为基础。表明对象属于哪个类型。
2025-01-01 12:24:46
436
原创 JVM对象创建过程
划分内存通常有两种方式,指针碰撞和空闲列表。以及每个属性什么类型的数据已经。如何解决内存分配时的并发问题?空间(也是从伊甸区分配),首先通过指令参数从常量池。5 执行init()方法。,有一个指针指向分界线。
2024-12-31 21:20:50
597
原创 关于sql优化思路方案
6、对于大数据量表考虑采用分区表,定期归档(归档表采用truncate清理原表),采用不同纬度表。7、对于mysql的innodb引擎,考虑调整page size大小。3)是否使用了合适的字段类型,是否占用无效存储问题。8、考虑更换适合大数据量查询的数据库产品(列式储存)。2、了解查询目的,看sql是否可以去除多余关联查询。3、explain查看执行计划,添加必要的索引。4)分析是否使用合适的存储引擎。1、分析sql,查看语句编写是否存在问题。以下是整体的优化思路方案,不做具体的细节描述。
2023-09-11 21:56:11
111
原创 优化Mysql导入sql文件慢问题
1、调整参数innodb_flush_log_at_trx_commit,默认值1此参数用于控制redo日志写入log file以及落盘时机。0:log buffer每秒一次写入log file中,并且让数据落盘。1:每次提交事务都会把log buffer的数据写入log file中,并且让数据落盘。2:每次提交事务都会把log buffer的数据写入log file中,每秒让数据落盘。2、关闭binlog,避免生成二进制日志文件3、在开启binlog的情况下,优化方案。
2023-08-14 15:18:16
1855
原创 类加载机制
类加载机制1 双亲委派机制机制核心是向上委派加载一个类时,首先会通过类的全限定名判断类是否已经被加载,被加载时,直接返回,未被加载时,委托给父类加载器去加载,重复相同的流程直至启动类加载器,如果父类加载器所负责的加载路径中加载不到该类,则当前类加载器在自己的加载路径找该类。局限性无法做到不委派,或者向下委派打破双亲委派不委派向下委派(SPI机制中的一部分)实现打破双亲委派的方式1)自定义类加载器重写sun.applet.AppletClassLoad
2020-12-25 21:14:25
201
原创 类加载器
类加载器1 启动类加载器(BootStrapClassLoader)没有实体,将c++写的一段逻辑定义为启动类加载器加载路径启动类加载器加载路径为:JAVA_HOME\jre\lib*.jar;JAVA_HOME\jre\class*;查看启动类加载器加载路径:#系统属性System.getProperty("sun.boot.class.path");#apiLauncher.getBootstrapClassPath().getURLs();
2020-12-25 21:12:37
158
原创 类的生命周期
类的生命周期1 加载加载阶段做的三件事1)通过类的全限定名获取类class文件的二进制流2)解析成运行时数据,即InstanceKlass实例,存放在方法区3)在堆区生成该类的Class对象,即InstanceMirrorKlass实例类的二进制流从哪获取1)classpath参数指定的路径中2)压缩包3)网络jvm加载类时懒加载模式,使用的时候才会加载常用的类会采用预加载模式。预加载的类:包装类、String、Thread2 验证1)文件格式验证验证字节流是否符合Class文件格
2020-12-18 21:10:19
301
1
原创 spring aop应用
spring官网关于aop的介绍在以下两个章节:https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#aophttps://docs.spring.io/spring-framework/docs/current/spring-framework-reference/c...
2020-04-01 20:54:01
240
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人