自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 spring ioc

二、属性注入 byname bytype constructor default(@autowired bytype byname ) ,得到beanclass的属性,for循环属性,如果属性上有Autowired的注解,拿到这些bean,放到属性中。一、实例化,从beanDefinition中获取banclass,然后创建实例(Object beanInstance = beanClass.getConstructor().newInstance();1、读取配置类(配置类中有扫描那些包等信息)

2025-09-21 23:14:09 231

原创 innodb底层原理及MySQL日志机制

注意:如果要恢复大量数据,比如程序员经常说的删库跑路的话题,假设我们把数据库所有数据都删除了要怎么恢复了,如果数据库之前没有备份,所有的binlog日志都在的话,就从binlog第一个文件开始逐个恢复每个binlog文件里的数据,这种一般不太可能,因为binlog日志比较大,早期的binlog文件会定期删除的,所以一般不可能用binlog文件恢复整个数据库的。比如,一个系统配置表、字典表,那这张表上的查询才适合使用查询缓存。查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。

2025-08-10 19:39:58 989

原创 mysql锁机制及mvcc原理

当有事务给表的数据行加了共享锁或排他锁,同时会给表设置一个标识,代表已经有行锁了,其他事务要想对表加表锁时,就不必逐行判断有没有行锁可能跟表锁冲突了,直接读这个标识就可以确定自己该不该加表锁。从性能上分为乐观锁(用版本对比或CAS机制)和悲观锁,乐观锁适合读操作较多的场景,悲观锁适合写操作较多的场景,如果在写操作较多的场景使用乐观锁会导致比对次数过多,影响性能。一般用在整表数据迁移的场景。悲观锁,就是更新这个条数据的时候,把这条数据行锁,不让其他事务操作,等操作完把事务提交,其他事务才可以操作这条数据。

2025-08-03 22:22:52 1015

原创 mysql事务

数据库的事务隔离越严格,并发副作用越小,但付出的代价也就越大,因为事务隔离实质上就是使事务在一定程度上“串行化”进行,这显然与“并发”是矛盾的。InnoDB引擎中,定义了四种隔离级别供我们使用,级别越高事务隔离性越好,但性能就越低,而隔离性是由MySQL的各种锁以及MVCC机制来实现的。同时,不同的应用对读一致性和事务隔离程度的要求也是不同的,比如许多应用对“不可重复读"和“幻读”并不敏感,可能更关心数据并发访问的能力。事务是一组操作要么全部成功,要么全部失败,目的是为了保证数据最终的一致性。

2025-08-01 23:32:15 631

原创 Join关联查询优化

整个过程会读取 t2 表的所有数据(扫描100行),然后遍历这每行数据中字段 a 的值,根据 t2 表中 a 的值索引扫描 t1 表中的对应行(扫描100次 t1 表的索引,1次扫描可以认为最终只扫描 t1 表一行完整数据,也就是总共 t1 表也扫描了100行)。驱动表是 t2,被驱动表是 t1。当使用left join时,左表是驱动表,右表是被驱动表,当使用right join时,右表时驱动表,左表是被驱动表,当使用join时,mysql会选择数据量比较小的表作为驱动表,大表作为被驱动表。

2025-07-28 21:28:43 841

原创 索引优化一

MySQL 5.6引入了索引下推优化,可以在索引遍历过程中,对索引中包含的字段先做判断,过滤掉不符合条件的数据再回表,这样可以减少回表得得次数,上面的语句,就是先过滤出符合 like 'LiLei%'的数据,再在索引中找到符合条件的age = 22 AND position =‘manager’,拿到id再去回表查询整行的数据。虽然排序的字段列与索引顺序一样,且order by默认升序,这里position desc变成了降序,导致与索引的排序方式不同,从而产生Using filesort。

2025-07-26 21:11:00 1159

原创 mysql Explain用法

覆盖索引定义:mysql执行计划explain结果里的key有使用索引,如果select后面查询的字段都可以从这个索引的树中获取,这种情况一般可以说是用到了覆盖索引,extra里一般都有using index;index:扫描全索引就能拿到结果,一般是扫描某个二级索引,这种扫描不会从索引树根节点开始快速查找,而是直接对二级索引的叶子节点遍历和扫描,速度还是比较慢的,这种查询一般为使用覆盖索引,二级索引一般比较小,所以这种通常比ALL快一些。如果该列是NULL,则没有相关的索引。

2025-07-23 22:11:50 1043

原创 mysql索引

InnoDB存储引擎索引实现:索引和数据是在一个文件中,这样就减少了堆文件的读取,效率高于mylsam。若是非主键索引,叶子节点上放的是数据的地址,会根据地址去主键索引中查数据,这样可以节省空间和结局一致性问题。MyISAM存储引擎索引的索引文件和数据文件是分开的,在索引文件拿到数据的地址后,在去数据文件中查找对应的数据。mysql的索引数据结构主要是B+tree,这个结构主要是从二叉树和B-tree演变而来。联合索引也是一样 ,也是排好序的数据结构,遵从最左原则,如下图,

2025-07-19 22:50:20 193

原创 JIT编译

这是因为在局部方法中创建的对象只能被当前线程访问,无法被其它线程访问,这个变量的读写肯定不会有竞争,这个时候 JIT 编译会对这个对象的方法锁进行锁消除。逃逸分析证明对象 不会被外界访问,如果这个对象可以拆分的话,当程序真正执行时,不是去创建这个对象,而是创建成员变量替换这个对象,这些成员变量时存在栈中或寄存器上,而不是存在堆上,这样方法结束,他们就消失了,gc也就与他们无关了。C1 编译器是一个简单快速的编译器,主要的关注点在于局部性的优化,适用于执行时间较短或。以上的这些代码称为热点代码。

2025-07-13 12:54:33 582

原创 G1收集器

间再怎么低也得有个限度。-XX:G1HeapWastePercent(默认5%): gc过程中空出来的region是否充足阈值,在混合回收的时候,对Region回收都是基于复制算法进行的,都是把要回收的Region里的存活对象放入其他Region,然后这个Region中的垃圾对象全部清理掉,这样的话在回收过程就会不断空出来新的Region,一旦空闲出来的Region数量达到了堆内存的5%,此时就会立即停止混合回收,意味着本次混合回收就结束了。

2025-07-05 23:16:23 755

原创 CMS垃圾收集器

执行过程中的不确定性,会存在上一次垃圾回收还没执行完,然后垃圾回收又被触发的情况,特别是在并发标记和并发清理阶段会出现,一边回收,系统一边运行,也许没回收完就再次触发full gc,也就是"concurrent mode failure",此时会进入stop the world,用serial old垃圾收集器来回收。是当黑色对象插入了新的白色对象的引用,把这个新的引用记录下来,把黑色对象改为灰色,等并发标记扫描结束,到重新标记的时候会重新扫描一次。开启用户线程,gc线程对没有标记的对象进行清理。

2025-07-04 23:10:21 716

原创 tomcat双亲委派机制

比如我们新建一个Match类,,没有自定义加载器的情况子下,在执行main方法时,先从应用程序加载器中找,没有的话,去父加载器拓展类加载器中找,拓展类加载器中没找到,这再去引用类加载器中找,引用类加载器中没找到,再返回去拓展类加载器中找,拓展类加载器中没找到,再返回到应用程序类加载器中找,它会自己的类加载路径中找到这个类,然后match类加载进来。2、避免类的重复加载:当父亲已经加载了该类时,就没有必要子ClassLoader再加载一次,保证被加载类的唯一性。if (parent!

2025-06-28 22:27:54 972

原创 Java方法中分段提交事务

在 Java 中对某一段代码显式提交事务,核心是通过 事务管理器手动控制事务的生命周期(开启、提交、回滚),而非依赖默认的自动提交或声明式事务(如 @Transactional)。// 1. 定义事务属性。

2025-06-25 10:57:21 346

空空如也

空空如也

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

TA关注的人

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