自定义博客皮肤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)
  • 收藏
  • 关注

原创 SpringBoot项目使用sa-token框架实现接口签名

请求发起端和接收端需要配置一个相同的秘钥,在。官方样例给的只是系统之间的接口签名验证方案。以上技术都是来自与sa-token(另一种实现的通过注解去实现。

2025-06-03 15:20:40 400

原创 SpringBoot项目实现接口签名

我们还有一个国产团队制作的sa-token是Java轻量级验证框架,博主也经常使用该框架进行开发,这个框架现在比较完善,还有很多权限验证功能,auth2.0等等。这两种方法,区别在于AOP技术可以针对于某一个接口,对于项目只需要做一部分接口签名是适合的。但过滤器技术那么就是针对于大部分的请求进行接口签名,对于接口安全的项目是适合的。可以使用Sa-token框架去实现接口签名的功能这个是对应的链接。最后这是我们个人项目开发所需要做的接口签名,增加安全性。其中最重要的是生成sign的过程。

2025-06-02 15:27:31 697

原创 策略模式的总结

我们业务代码使用一个接口根据业务进行扩展,不需要改动我们的Service层代码只需要生成一个继承支付策略的接口的实现类,这样体现出我们的代码的扩展性。我们需要的是比较对应的支付方式是什么,然后执行该支付逻辑代码。从以上三个实现类的i代码中我们会有发现他们都有个。注解这个跟我们下一步去收集实现支付策略的接口有关。具体的支付策略接口代码。

2025-04-28 21:37:01 409

原创 Java开发小技巧实现数据脱敏

实现方案:Controller的方法的返回值,会被SpringBoot统一处理,其内部会使用jackson将对象序列化成json字符,然后通过SpringBoot输出到客户端。因此我们只需要在Jackson序列化者一步, 将需要脱敏的数据统一去处理。

2025-04-03 22:49:30 606

原创 redis黑马点评实战

互斥锁是通过获取锁来实现一致性防止在修改数据后,其他线程修改数据导致redis与数据库产生不一致性,实现的方法是通过setnx的方式实现,但是这个锁不可重试没有redission实现好。先判断是否过期如果过期就返回过期数据,如果未过期那么就去获取锁,没有获取到锁那么就返回旧数据,主打的一个乐观。在高并发场景下,当缓存失效时,使用分布式锁确保只有一个请求能够穿透到数据库,其他请求等待锁释放后再从缓存中获取数据。指的是数据库有数据但是redis中无缓存,一般是热点数据过期导致数据访问压力过大,

2025-03-24 22:15:47 736 1

原创 26届二本Java开发在校生学习day7(redis缓存篇)

互斥锁方案原理:在缓存过期时,加互斥锁防止多个请求同时访问数据库,由第一个请求更新缓存,其他请求等待。优点:有效防止数据库过载,简单直接。缺点:可能导致请求响应时间增加,锁管理复杂,尤其在分布式系统中。永不过期方案原理:设置缓存永不过期,手动更新数据,避免缓存失效。优点:简单,避免缓存击穿。缺点:缓存空间可能耗尽,增加维护复杂性,可能导致数据不一致。互斥锁结合永不过期原理:结合互斥锁防止并发访问,同时设置较长时间的缓存过期。优点:平衡缓存压力和数据库负载。缺点。

2025-02-22 13:23:17 760

原创 26届二本Java开发在校生学习day6(mysql架构篇)

每个区的大小为 1MB,对于 16KB 的页来说,连续的 64 个页会被划为一个区,这样就使得链表中相邻的页的物理位置也相邻,就能使用顺序 I/O 了。B+ 树中每一层都是通过双向链表连接起来的,如果是以页为单位来分配存储空间,那么链表中相邻的两个页之间的物理位置并不是连续的,可能离得非常远,那么磁盘查询时就会有大量的随机I/O,随机 I/O 是非常慢的。因此,InnoDB 的数据是按「页」为单位来读写的,也就是说,当需要读一条记录的时候,并不是将这个行记录从磁盘读出来,而是以页为单位,将其整体读入内存。

2025-02-18 14:14:28 702

原创 26届二本Java开发在校生学习day5(mysql日志篇)

redo log 是物理日志,记录数据页做什么修改。比如对 XXX 表空间中的 YYY 数据页 ZZZ 偏移量的地方做了AAA 更新,每当执行一个事务就会产生这样的一条或者多条物理日志。在事务提交时,只要先将 redo log 持久化到磁盘即可,可以不需要等到将缓存在 Buffer Pool 里的脏页数据持久化到磁盘。当系统崩溃时,虽然脏页数据没有持久化,但是 redo log 已经持久化,接着 MySQL 重启后,可以根据 redo log 的内容,将所有数据恢复到最新的状态。

2025-02-17 15:38:55 796

原创 26届二本Java开发在校生学习day4(mysql死锁篇)

当一个事务的等待时间超过该值后,就对这个事务进行回滚,于是锁就释放了,另一个事务就可以继续执行了。像乐观锁适用于写比较少的情况下,即冲突真的很少发生的时候,这样可以省去锁的开销,加大了系统的整个吞吐量。乐观控制相信事务之间的数据竞争(data race)的概率是比较小的,因此尽可能直接做下去,直到提交的时候才去锁定,所以不会产生任何锁和死锁。换句话说,事务必须等待持有锁的事务主动释放锁,而不能通过强制手段获取锁。占有且等待是指一个事务已经持有一个或多个资源的锁,同时还在等待其他事务持有的资源。

2025-02-15 20:27:37 830

原创 26届二本Java开发在校生学习day4(mysql锁类型篇)

当事务 A 还没提交的时候,事务 B 向该表插入一条 id = 4 的新记录,这时会判断到插入的位置已经被事务 A 加了间隙锁,于是事物 B 会生成一个插入意向锁,然后将锁的状态设置为等待状态(PS:MySQL 加锁时,是先生成锁结构,然后设置锁的状态,如果锁状态是等待状态,并不是意味着事务成功获取到了锁,只有当锁状态为正常状态时,才代表事务成功获取到了锁),此时事务 B 就会发生阻塞,直到事务 A 提交了事务。这种方法只适用于支持「可重复读隔离级别的事务」的存储引擎。

2025-02-14 14:52:54 704

原创 26届二本Java开发在校生学习day3(mysql索引加强篇)

(1)主键索引:如果没有设置主键索引,那么先去检查唯一索引有没有适合作为主键索引,就是列值没有为空的唯一索引,如果还没有,那就引入一个6byte的自增索引DB_ROW_ID作为这个表中的主键索引。因为索引保存的是索引字段的原始值,而不是 id + 1 表达式计算后的值,所以无法走索引,只能通过把索引字段的取值都取出来,然后依次进行表达式的计算来进行条件判断,因此采用的就是全表扫描的方式。,那么每次插入的新数据就会按顺序添加到当前索引节点的位置,不需要移动已有的数据,当页面写满,就会自动开辟一个新页面。

2025-02-13 20:20:12 955

原创 26届二本Java开发在校生学习day2(mysql索引篇)

2.更新代价大:如果对索引列的数据被修改时,那么对应的索引也将会被修改,而且聚簇索引的叶子节点还存放着数据,修改代价肯定是较大的,所以对于主键索引来说,主键一般都是不可被修改的。InnoDB 引擎的表的 .ibd文件就包含了该表的索引和数据,对于 InnoDB 引擎表来说,该表的索引(B+树)的每个非叶子节点存储索引,叶子节点存储索引和索引对应的数据。(1)非聚簇索引:索引结构与数据分开存放的索引,二级索引就是非聚簇索引,MySQL 的 MyISAM 引擎,不管主键还是非主键,使用的都是非聚簇索引。

2025-02-10 21:19:51 712

原创 26届二本Java开发在校生学习day1(mysql事务篇)

当多个事务并发执行的时候,会引发脏读、不可重复读、幻读这些问题,那为了避免这些问题,SQL 提出了四种隔离级别,分别是读未提交、读已提交、可重复读、串行化,从左往右隔离级别顺序递增,隔离级别越高,意味着性能越差,InnoDB 引擎的默认隔离级别是可重复读。(1)当trx_id事务id<min_trx_id:说明这个版本的记录是在创建 Read View 前已经提交的事务生成的,所以该版本的记录对当前事务可见。1.脏读:在事务执行的过程中读到了未提交的数据,这个数据可能会回滚,说明这数据可能是不存在的数据。

2025-02-07 18:01:27 380

空空如也

空空如也

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

TA关注的人

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