- 博客(12)
- 收藏
- 关注
原创 设计模式——单例模式(Singleton)
正常流程应该为先为内存分配空间,再初始化对象,再将对象给指向已经分配好的内存空间。在并发线程进来的时候会先去判断是否已经实例化,若已经实例化则返回实例对象,否则由一个线程去进行实例化,后续拿到锁的线程发现已经不为空则直接返回。但是这样又有一个问题,那就是每次获取对象的时候都需要先去获取锁,那么这样的话并发性能就会非常的差。它不需要做任何额外的操作去保证对象单一性与线程安全性,并且还不会被反射序列化所破坏单例。单例模式指在内存中会且仅会创建一次对象,并且所有需要调用的地方都引用该对象的设计模式。
2025-05-11 14:51:06
408
原创 设计模式——模板方法模式
它能够大大的提高代码的复用性,并且实现了反向控制通过子类的实现扩展不同的行为。模板方法就是定义一个模板结构,将具体内容延迟到子类当中去实现。然后让奶茶1和奶茶2去继承重写该抽象方法。
2025-05-07 11:12:14
255
原创 redis有哪两种持久化方式?分别的优缺点?
优点:AOF有着更好的数据安全性,因为每来一个命令他都会追加到文件末尾,即使服务器宕机那也只会丢失最后一条命令,并且还可以重写机制优化,减少文件体积,加快恢复速度,即使文件损坏,AOF还提供了工具进行文件修复。缺点:因为AOF会对文件进行频繁的写入操作,所以可能会影响redis的写入性能,并且当有文件体积过大的时候,还会进行重写操作,若未开启重写操作或重写频率较低,恢复过程可能较慢,因为他需要重放所有命令。优点:RDB通过快照的形式保存某一时刻的数据状态,文件体积小,备份和恢复的速度非常快。
2025-04-13 17:45:10
376
原创 redis模糊查询解决token登录重复生成的问题
redis则先删再存,这样就能够保证redis中当前用户的token是唯一的 从而保证唯一性。
2025-04-10 21:42:58
252
原创 springcloudAlibaba中gateway手抛异常无法被mvc全局异常捕捉解决方案
因为两者是不同的技术所成,所以这里采用了实现spring当中的ErrorWebExceptionHandler来捕捉网关中手抛异常,其中优先级设置需要高于DefaultErrorWebExceptionHandler(-1)但是我不想这样我想要自己自定义异常返回前端方便处理。
2025-04-09 20:07:33
396
原创 还不会双token刷新?一招教会你无感刷新
双token的原理说白了就是准备一个长token和短token,拦截器在检测的时候如果发现短token过期了,那么就检测长token是否过期,未过期就生成新的长短token根据响应头的方式返回给前端。此处短token为30s,长token为300s。发现响应头也有新token。
2025-04-02 21:27:56
323
原创 基于redisson实现的切面aop
当然如果想像指尖移通的查询课表的那种对一个接口有一个时间上的限制的话,那么改变TTL取消看门狗机制,将finally那一坨注释掉即可。在如下接口中使线程睡眠一会儿保证锁不会被释放(模拟业务执行时间过长的情况)然后使用apifox进行测试,这里准备了20个线程轮番轰炸。最后发现除了第一个接口通过以外,其余接口全部被拦截。然后是具体的aop实现(不使用satoken)首先我们需要自定义一个注解。
2025-04-01 21:47:12
160
原创 MVCC原理还不会?我来助你!
快照读:即不加锁的非阻塞读,读的版本可以是当前的也可以是以前的版本,但是快照读需要保证不是串行级别,不然锁会退化为当前读。而在update和delete的时候呢,产生的undo log不仅回滚时需要,在快照读的时候也需要,并不会立即删除.readview(读视图)是快照读sql执行时MVCC提取数据的依据,记录并维护当前活跃的事务(未提交)的id。在undo log版本链中,undo log会记录一条链表,链表头部是最新的修改记录,而末尾是最旧的记录。在介绍原理的时候需要先明确一下什么是当前读和快照读。
2025-03-27 10:56:36
377
原创 基于redis zset结构实现的流量限制
如下图,假设黄色窗口只能容纳2个请求,窗口大小为2s,如图所示,如果这时候再来一个请求3,那么就会被拒绝,随着时间推移,那么窗口也是会变动的,如蓝色窗口,因为时间变换,所以窗口位置发生改变,这时候请求1就已经不会在窗口内部了,所以请求4会被窗口所接收,而限流此处就采用该方法。假如第一个请求在0s发,第二个在15s,第三个20s发,第四个35s发。首先写一个RequestLimit的注解用于实现aop。我们在需要使用的接口上面加上注解。第四个成功且存入redis。
2025-03-20 14:37:13
1175
原创 创新中心环境部署
在本机或者虚拟机中的mysql中创建数据库然后将sql文件运行运行结果:随后在dev配置文件yaml中将数据库相关属性改成自己的。
2024-10-16 22:04:08
492
原创 floyd算法——LeetCode743
times[i]=(ui,vi,wi),其中ui是源节点,vi是目标节点,wi是一个信号从源节点传递到目标节点的时间。故times[][0]表示的为源结点,times[][1]表示目标节点times[][2]为时间,我们直接存入矩阵即可。如下为最核心的代码即用三个for循环寻找所有路中是否还有权值相加更小的路,若存在,则更换矩阵中的值。接下来就只需要遍历矩阵找出最大值就行了。首先该题可以先通过邻接矩阵建立图。然后再对其进行初始化。
2023-12-25 17:23:54
944
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅