- 博客(30)
- 问答 (1)
- 收藏
- 关注
原创 MYSQL三个日志
是 Innodb 存储引擎层生成的日志,实现了事务中的,主要。:是 Innodb 存储引擎层生成的日志,实现了事务中的,主要。:是 Server 层生成的日志,主要;
2024-05-03 18:15:47 623
原创 MYSQL之锁
全局锁怎么用?执行后,这时其他线程执行以下操作,都会被阻塞:对数据的增删改操作,比如 insert、delete、update等语句;对表结构的更改操作,比如 alter table、drop table 等语句。释放全局锁或者 会话断了自动释放锁全局锁应用场景是什么?主要用于,这样在备份数据库期间,不会因为数据或表结构的更新,而出现备份文件的数据与预期的不一样。加全局锁又会带来什么缺点呢?数据量过大,导致数据库一直只读,导致。
2024-05-03 01:54:18 1132
原创 RandomAccessFile灵活读写文件(可以存视频的时候用到)
方法可以将指针设置到指定位置. 在进行文件读写操作时,文件指针会随着读写操作自动向后移动。因此,当我们第一次读取文件时,文件指针指向文件开头,在读取完前 1024 字节后,文件指针已经移动到了第 1025 个字节的位置,下一次再读取文件时将从该位置开始读取。接着,我们将文件指针移到文件结尾并向文件中写入了一个字符串。最后,我们将文件指针移到文件开头,读取文件内容并输出到控制台。是 Java 标准库中用于对文件进行随机读写的类,它可以在打开文件后跳转到任意文件位置,并在该位置上进行操作。
2024-04-16 23:09:58 414
原创 MYSQL之事务
接着,事务 A 对 id = 5 这条记录进行了更新操作,在这个时刻,这条新记录的 trx_id 隐藏列的值就变成了事务 A 的事务 id,之后事务 A 再使用普通 select 语句去查询这条记录时就可以看到这条记录了,于是就发生了幻读。因为可重复读隔离级别下,事务执行过程中看到的数据,一直跟这个事务启动时看到的数据是一致的,即使中途有其他事务插入了一条数据,是查询不出来这条数据的,所以就很好了避免幻读问题。一个事务执行过程中看到的数据,和开始事务时看到的数据是一致的。
2024-04-16 23:07:34 1268
原创 MYSQL索引失效精讲
当我们使用左或者左右模糊匹配的时候,也就是like %xx或者like %xx%这两种方式都会造成索引失效;当我们在查询条件中对索引列使用函数,就会导致索引失效。当我们在查询条件中对索引列进行表达式计算,也是无法走索引的。MySQL 遇到 字符串和数字比较的时候,会自动把字符串转为数字,然后再进行比较。如果字符串是索引列,而条件语句中的输入参数是数字的话,那么索引列会发生隐式类型转换,由于隐式类型转换是通过 CAST 函数实现的,等同于对索引列使用了函数,所以就会导致索引失效。
2024-04-14 17:24:23 757
原创 MYSQL索引创建时机和不适用的时机
👏作者简介:大家好,我是小周同志,25届双非校招生Java选手,很高兴认识大家📕学习出处:本文是学自小林coding (xiaolincoding.com) 网站的MYSQL图解篇🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦。
2024-04-13 21:06:43 375 1
原创 MYSQL中varchar(n)最大取值
storage overhead 是什么?其实就是和,也就是说。所以, 我们在算 varchar(n) 中 n 最大值时,需要减去 storage overhead 占用的字节数。因为我们存储字段类型为 varchar(n) 的数据时,其实分成了三个部分来存储:真实数据真实数据占用的字节数NULL 标识,如果不允许为NULL,这部分不需要所占用的字节数是多少?前面我创建表的时候,字段是允许为 NULL 的,所以。所占用的字节数是多少?
2024-04-13 18:20:39 372
原创 Redis之SpringBoot整合Redis
相比于 Jackson 库,FastJson 序列化后的JSON 字符串长度更短,存储空间更小,同时序列化性能也更高,但是由于 FastJson 序列化时默认添加配置信息,因此需要手动进行去除(否则存入 Redis 后取出的为非预期类),因此在使用时需要注意。Jackson2JsonRedisSerializer:同样使用了Jackson库,但与GenericJackson2JsonRedisSerializer不同的是,它只支持特定类型的Java对象转换为JSON字符串,比如POJO类。
2024-03-27 17:27:51 328
原创 Redis之整合Redission并实现分布锁和布隆过滤器
由于事务不可见的特性,在当前事务完成过程中其他线程读取到数据库的值其实还是未操作的数据(就是你释放了锁但事务还未提交,其他线程拿到锁之后获取的数据是未提交的数据),从而导致数据重复。Ctrl+左键点击redisson-spring-boot-starter进去。会增加布隆过滤器的内存消耗和查询时间。都可以实现布隆过滤器。主要解决缓存穿透问题。
2024-03-27 17:24:45 519
原创 AQS 巨好理解的版本
当调用 reset() 方法时,无论当前线程是否已经到达栅栏,所有已经到达栅栏但还在等待的线程都会被中断(抛出 BrokenBarrierException 异常),并且栅栏会重置为初始状态。CONDITION(-2):表示结点等待在Condition上,当其他线程调用了Condition的signal()方法后,CONDITION状态的结点将从等待队列转移到同步队列中,等待获取同步锁。调用singal/singalAll的线程:条件队列转同步队列,可以在释放锁的时候唤醒head的后续节点所在的线程。
2024-03-25 20:05:13 1102
原创 Spring事务
当我们在某个方法上加了@Transactional注解后,就表示该方法在调用时会开启Spring事 务,而这个方法所在的类所对应的Bean对象会是该类的代理对象。Spring事务的代理对象执行某个方法时的步骤:判断当前执行的方法是否存在@Transactional注解如果存在,则利用事务管理器(TransactionMananger)新建一个数据库连接修改数据库连接的autocommit为false执行target.test(),执行程序员所写的业务逻辑代码,也就是执行sql。
2024-03-24 21:22:33 914 1
原创 canal整合rabbitmq实现redis和mysql数据一致
因为网上rabbitmq整合canal的教程较少,几乎没有,所以我自己摸索了一下,并成功整合,并分享一下详细步骤,期间遇到的bug蛮多的。
2024-03-24 16:32:21 676 3
原创 Spring IOC
Spring IOC(Inversion of Control,控制反转)是Spring框架的核心概念之一,它改变了中国传统Java EE应用开发中依赖查找和管理的模式。在传统的Java EE应用中,开发者通常需要手动创建对象,并手动管理这些对象的生命周期和依赖关系。而Spring IOC通过容器来控制对象的创建和管理,使得开发者能够将更多的精力集中在业务逻辑上,而无需关心对象的创建和依赖关系的管理。
2024-03-24 16:02:56 336 1
原创 Spring循环依赖
ABean创建-->依赖了B属性-->触发BBean创建--->B依赖了A属性--->需要ABean(但ABean还在 创建过程中)
2024-03-24 15:47:21 276 1
原创 Resilience4j教学巨细
Actuator是Spring Boot提供的监控和管理功能的扩展库,通过暴露一组端点(endpoints)可以获取应用程序的健康状态、运行指标等信息。通过该依赖,您可以在Spring Boot应用程序中轻松地配置和管理Resilience4j的组件,如限流器、重试器、熔断器等。这些依赖的引入使得在Spring Boot项目中使用Resilience4j变得更加便捷和高效,同时可以借助Spring Boot的其他特性来优化和管理应用程序的运行。用于存储触发的限流事件,如果缓冲区已满,新的事件可能会被丢弃。
2024-03-23 17:11:16 1070
转载 JWT 登录认证 + Token 自动续期方案,写得太好了!
作者:何甜甜在吗过去这段时间主要负责了项目中的用户管理模块,用户管理模块会涉及到加密及认证流程,加密已经在前面的文章中介绍了,可以阅读用户管理模块:如何保证用户数据安全。今天就来讲讲认证功能的技术选型及实现。技术上没啥难度当然也没啥挑战,但是对一个原先没写过认证功能的菜鸡甜来说也是一种锻炼吧。
2024-03-23 15:19:06 1910
原创 Spring AOP
通知是这个方法在执行前和执行后要做的动作。就是程序执行时要通过Spring AOP框架触发的代码段。before:前置通知,在一个方法执行前被调用。after:在方法执行之后调用的通知,无论方法执行是否成功。:仅当方法成功完成后执行的通知。:在方法抛出异常退出时执行的通知。around:在方法执行之前和之后调用的通知。
2024-03-20 00:03:45 892 2
原创 Spring生命周期
UserService.class ---> 无参数构造方法 (推断构造方法) ---> 普通对象 ---> 依赖注入(属性赋值) ---> 判断是否有Aware回调--->初始化前 (@PostConstruct) ---> 初始化 (InitializingBean) ---> 初始化后 (AOP) ---> 代理对象 ---> Bean。当我们在某个方法上加了@Transactional注解后,就表示该方法在调用时会开启Spring事 务,而这个方法所在的类所对应的Bean对象会是该类的代理对象。
2024-03-18 18:27:42 1607 2
原创 Voliate
第二步和第三步可以进行指令重排,如果instance没有被volatile修饰,那么线程A可能先将对象复制给变量,然后在调用构造函数初始化,在初始化的过程中,线程B也来调用getInstance(),会发生instance不为空,会直接返回instance对象,但Singleton类未初始化,会报错。当其他线程感应到这个变量的写操作时,它们会将自己的缓存行状态设置为Invalid,这样可以确保它们在后续的读取操作中能够从主存中获取最新的值。变量的读写操作在多线程环境中是可见的,保证了内存的可见性和有序性。
2024-03-18 18:19:39 987
原创 ConcurrentHashMap
在JDK7下,采用的分段锁的方式来保证数据安全,为每段数据分配一个锁,同时其他段的数据可以被其他线程访问。ConcurrentHashMap 由segmentHashEntry组成,segment 内部实现了 ReetrantLock,一个 segment 守护一个 HashEntry,所以当几个线程竞争 HashEntry时,会用对应的ReentrantLock进行加锁。在JDK8下, ConcurrentHashMap 数据结构同 jdk8 中的 HashMap 数据结构一样,都是数组+链表+红黑树。
2024-03-11 23:54:55 1265
原创 Synchoronized
Synchronzied 是一个java内置锁,属于悲观锁,悲观锁每次读写都会加锁。JDK6之前,是基于Monitor机制实现的,依赖于底层互斥原话Mutex,属于重量级锁,性能较低JDK6之后,迫于JUC包的压力,对synchronzied进行了优化,增加锁升级、锁消除、锁粗化等机制,sync为了避免阻塞直接从用户态切换到内核态park线程,所以默认情况下是开启偏向锁,当然也可以禁用偏向锁,这样锁升级就会从无锁开始。
2024-03-11 16:52:10 849 1
空空如也
色弱可以学前端吗,qaq
2022-05-17
TA创建的收藏夹 TA关注的收藏夹
TA关注的人