自定义博客皮肤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 bean的生命周期

1.在实例化前后可以通过实现InstantiationAwareBeanPostProcessor接口,进行实例化前后处理,如重写postProcessBeforeInstantiation进行实例化前置处理,afterProcessBeforeInstantiation进行实例化后置处理。3.执行一系列aware接口,如BeanNameAware、BeanClassLoaderAware、BeanFactoryAware等。主要分为四个阶段:实例化、属性赋值、初始化、销毁。

2025-03-11 17:01:17 338

原创 MySQL 事务

事务特性:原子性(要么全部成功,要么全部失败)、一致性(事务前后数据一致)、隔离性(当前事务不受其他事务的影响)、持久性(事务提交或回滚之后,对数据库的改变是永久的)2.不可重复读:在一个事务中多次读同一条数据,在多次读取之间另一个事务修改了该数据并提交,造成多次读取,数据不一致。并发事务问题:1.脏读:在一个事务中读取到了另一个事务修改但还未提交的数据,若另一个事务回滚,则产生问题。2.读已提交(read committed):可以读到别的事务已经提交的数据,可能出现幻读和不可重复读问题。

2025-03-11 11:41:28 223

原创 MySQL 索引和优化

索引底层数据结构:B+树,叶子节点保存行数据,非叶子节点保存指向行数据的指针或主键,特点,矮胖,避免了深度检索;覆盖索引:要查询的字段在索引中就能全部拿到,不用进行回表查询。回表查询:第一次检索找到二级索引的叶子节点,通过叶子节点再去聚簇索引找到对应的行数据,整个过程就是回表查询。非聚簇索引(二级索引或辅助索引):索引和数据分开存储,叶子节点存放主键或指向数据的指针,可以有多个。超大分页优化:通过主键快速查询出分页主键信息再进行子连接查询,避免回表查询。2.该建索引建索引,避免索引失效。

2025-03-10 11:47:39 497

原创 redis分布式锁、集群

2.增量同步:从节点向主节点发起同步数据请求,携带repoid和offset等,主节点判断是不是第一次同步数据,不是,将offset之后的命令日志发送给从节点,从节点执行命令进行数据同步。主从数据同步:1.全量同步:从节点向主节点发起同步数据请求,携带replication id和offset等,主节点判断是不是第一次同步数据,是,将RDB文件发送给从节点,从节点进行数据同步。分片集群:由多个主从集群组合在一起的集群,其中主节点也担任哨兵的作用,可以解决高并发读写和海量数据存储。

2025-02-28 14:46:12 170

原创 redis数据过期策略、数据淘汰策略

删除策略有两种,一,惰性删除:当下一次访问该数据的时候删除,缺点,如果数据该数据永远不被访问了,就永远不会删除,造成内存浪费,优点,cpu友好。redis数据过期策略:当redis中的数据在过期时间到了之后,并不会马上删除,而是根据一定的策略进行删除。redis数据淘汰策略:当redis内存满的时候,需要根据一定的策略对内存中的数据进行淘汰。二,定期删除:定期筛选数据进行删除,不会存在数据永远存在的情况,但是对cpu不友好。3.针对设置的过期的时间的数据进行淘汰,针对全数据进行淘汰。

2025-02-27 16:14:10 221

原创 redis双写一致性、持久化

方案二:如果追求高性能和最终一致性,可以采用消息异步通知来做,如rabbitmq,在写入数据库的时候发一条异步消息,当监听到这个消息时,去更新缓存,这个方案依赖消息的可靠性,只要能确保发出去的消息一定被消费至少一次就可以。优点速度快,备份文件体积小,缺点,如果每60秒生成一次备份数据,那么如果在这个时间段宕机了,就会丢失这段时间的数据。方案一:如果追求强一致性,可以采用读写锁的机制来进行处理,在写入数据时加排他锁,不允许其他读和写操作;在读数据时,加共享锁,允许读不允许写。

2025-02-27 15:48:25 228

原创 内存分配与回收策略

虚拟机给每个对象定义了一个对象年龄计数器,如果对象在Eden区经过一次Minor GC后仍然存活,并且能被Survivor容纳,该对象将被移动到Survivor区,对象年龄+1,对象在Survivor区每熬过一次Minor GC,年龄就增加1岁,当年龄增加到一定程度(默认15岁),就会被放入老年代中。大对象是指需要大量连续内存空间的Java对象,典型的有很长的字符串、数组。在大多数情况下,新建的对象都是放入新生代的Eden区的,当Eden空间不够时,会进行一次Minor GZ。

2023-05-10 16:10:57 102

原创 垃圾收集算法和垃圾收集器

将Java堆分为多个大小相等的Region,优先回收价值最大的Region(这里的价值指:回收所获得的空间大小与回收所需时间的经验值)。:从“GC Roots”的对象开始向下搜索,搜索走过的路径称为引用链,当一个对象到“GC Roots”没有引用链时,认为该对象无用,可以回收。:标记过程与标记清理算法一样,但后续步骤不是直接清理可回收对象,而是让存活的对象都像一端移动,然后清理掉端边界以外的内存。:当该类对象被回收时,会调用该方法,可以在该方法中进行自救,该方法只会被系统自动调用一次。

2023-05-08 16:07:51 96

原创 Java虚拟机笔记-内存溢出

由于在HotSpot虚拟机中不区分虚拟机栈和本地方法栈,所以,对于HotSpot虚拟机来说,设置本地方法栈的大小(-Xoss)是无效的,只有设置栈(-Xss)大小才有用。在jdk1.6及之前的版本中,常量池是放在永久带的,可以通过-XX:permSize和-XX:maxPermSize限制方法区大小,从而间接限制常量池的大小。创建过多字符串常量容易导致该异常(jdk1.6及之前的版本)。jdk1.6之前会直接将字符串对象实例放入常量池中,而之后的版本只会将字符串对象的引用放入常量池中。

2023-04-27 16:10:54 192

原创 Java虚拟机笔记-对象

当虚拟机遇到一条new指令时,会去检查这个类是否已经被加载、解析、初始化过,如果没有,会执行类加载过程,当类加载检查通过之后会给对象分配内存,内存分配完成之后,虚拟机会对对象进行必要的设置,例如该对象是哪个类的实例、如何才能找到类的元数据信息等,这些信息存放在对象头中。:对象头包括两部分信息,第一部分用于存储对象自身的运行时数据,如哈希码、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等;另外一部分是类型指针,即对象指向它的类元数据的指针,虚拟机通过这个指针确定这个对象是哪个类的实例。

2023-04-21 15:25:13 112 1

原创 【Java虚拟机笔记-内存】

如果正在执行的是一个java方法,那么计数器记录的是正在执行的虚拟机字节码指令的地址;虚拟机栈:它描述的是Java方法执行的内存模型:每个方法在执行时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。堆内存是用来存放对象实例的,是垃圾收集器管理的主要区域。本地方法栈:本地方法栈和虚拟机栈类似,不过虚拟机栈是用来执行Java方法的,而本地方法栈是用来执行native方法的。运行时常量池:运行时常量池是方法区的一部分,用于存放编译期生成的各种字面量和符号引用,还有被翻译出来的直接引用。

2023-04-20 15:25:25 100 1

原创 缓存穿透、缓存击穿、缓存雪崩

缓存穿透、缓存击穿、缓存雪崩异同和解决办法

2022-07-04 17:52:40 175

原创 排序算法笔记

选择排序、冒泡排序、插入排序、归并排序、堆排序、快排

2022-02-09 16:22:12 731

空空如也

空空如也

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

TA关注的人

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