Dong Su
  • 首页
  • 归档
  • 分类
  • 标签
  • 关于

策略模式

有多个 if...else 等条件分支,并且每个条件分支,可以封装起来替换的,可以使用策略模式来优化 一个接口 12345678910111213public interface IFileStrategy { /** * 输入哪种文件类型 * @return */ FileTypeEnum getFileType(); /** *
2024-06-24
#设计模式

消息队列幂等方案

如果一个消息队列对某个消息发送了两次,导致入库两条相同的数据,如何避免 也即如何保证幂等性,接下来讨论的前提是全局唯一 ID 唯一索引最简单的方案,先查 ID 在数据库里有没有,如果没有则入库 1234vo = select(id);if (vo == null){ save(信息)} 先查询,再判断,再保存,在多线程的情况下,还是拦不住 可以在数据表中加唯一索引方案解
2024-06-14
#消息队列

Redission tryLock

Redisson 的 tryLock1boolean tryLock(long waitTime, long leaseTime, TimeUnit unit) 在 waitTime 时间范围内尝试获取锁, 如果获取到锁, 设置过期时间 leaseTime 12345678910111213141516171819202122232425262728293031323334353637383940
2024-05-28
#源码

Spring

SpringBean 的生命周期 通过 BeanDefinition 获取 Bean 的定义信息 通过构造函数实例化 Bean Bean 的依赖注入 处理 Aware 接口 BeanPostProcessor - 前置方法 初始化方法(InitializingBean, init-method) BeanPostProcessor - 后置方法 销毁 Bean BeanDefinition 是
2024-05-28
#八股

LRU

LRULRU,Least Recently Used,最少最近使用,淘汰策略是最久没用的想象有一摞书,用的时候抽出来,放在最上面淘汰的时候把最下面的移除整一个双向链表,每次都淘汰最后一个,插入的时候插入到头(哨兵后面) 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495
2024-05-28
#算法

MySQL

MySQLredo log 和 binlog 的区别 redo log 是 InnoDB 特有的, binlog 是 Server 层的每个数据引擎都有 redo log 记录的是物理日志, 记录的是在某个数据页做的修改, 比如”对 xxx 表中 yyy 数据页 zzz 偏移量的地方坐了 aaa 更新” binlog 是逻辑日志, 记录的是这个语句的原始逻辑, 比如”给 id = 2
2024-05-27
#八股

多线程

多线程Runnable 和 Callable 有什么区别 Runnable 的 run 方法没有返回值, Callable 的 call 方法有 Callable 的 call 方法是个泛型 Runnable 的 run 方法不能抛异常, Callable 的 call 方法可以 wait 和 sleep 方法有什么区别 归属不同: wait 方法是 Object 类中的, sleep 方法是
2024-05-26
#八股

golang

golanginit 和 mian 函数 init 函数 同一个 package 可以定义多个 init 方法 同一个 package 不同文件 init 方法执行按照文件名先后顺序执行 同一个 go 文件中可以重复定义 init 方法 按定义顺序执行 按照 import 顺序调用其他包的 init 函数 导入顺序 mian -> A -> B -> C 则 init 执
2024-05-26
#golang
123

搜索

Hexo Fluid