- 博客(105)
- 收藏
- 关注
原创 Gof23设计模式之状态模式
状态模式就是对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。
2023-09-15 08:17:21
613
原创 Gof23设计模式之责任链模式
责任链模式又名职责链模式,为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。
2023-09-11 17:53:52
747
原创 Gof23设计模式之命令模式
命令模式将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行存储、传递、调用、增加与管理。
2023-09-11 17:36:01
508
原创 Gof23设计模式之策略模式
该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。
2023-09-05 20:18:20
791
原创 Gof23设计模式之模板方法模式
模板方法模式是定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。
2023-08-14 11:13:01
864
原创 Gof23设计模式之享元模式
运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似对象的开销,从而提高系统资源的利用率。
2023-08-07 16:30:00
156
原创 Gof23设计模式之组合模式
组合模式又名部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。
2023-08-06 10:11:36
759
原创 Gof23设计模式之外观模式
外观模式又名门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。
2023-07-27 13:32:08
686
原创 Gof23设计模式之桥接模式
桥接模式(Bridge Pattern)是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立地变化。它的核心思想就是将一个大类或一系列紧密关联的类拆分成两个独立的抽象和实现部分,以便能够更加灵活地扩展和变化。
2023-07-10 22:38:29
534
原创 Gof23设计模式之装饰者模式
装饰者模式指在不改变现有对象结构的情况下,动态地给对象增加一些职责(即增加其额外功能)的模式。装饰者模式在JDK源码中的应用。
2023-07-05 09:02:05
221
原创 Gof23设计模式之适配器模式
将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类适配器模式和对象适配器模式,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。
2023-07-03 19:41:42
572
原创 gof23设计模式之代理模型
由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。Java中的代理按照代理类生成时机不同又分为静态代理和动态代理。静态代理类在编译期就生成,而动态代理代理类则是在Java运行时态生成。动态代理有分有JDK代理和CGlib代理两种。
2023-07-02 15:43:42
309
原创 自定义注解记录操作日志
前台自定义操作日志注解,在需要记录日志的方法上使用注解,在注解处理器中通过切面编程的方式记录日志,实现了自定义注解记录操作日志的功能。
2023-06-30 22:38:27
690
原创 Gof23设计模式之建造者模式
建造者模式(Builder Pattern)又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。
2023-06-27 10:57:32
672
原创 Gof23设计模式之工厂方法模式和抽象工厂模式
工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪个产品类对象。工厂方法使一个产品类的实例化延迟到其工厂的子类。抽象工厂模式是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品。
2023-06-20 01:45:00
295
2
原创 Gof23设计模式之简单工厂/静态工厂模式
在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需要修改一遍,这显然违背了软件设计的开闭原则。如果我们使用工厂来生产对象,我们就只和工厂打交道就可以了,彻底和对象解耦,如果要更换对象,直接在工厂里更换该对象即可,达到了与对象解耦的目的;所以说,工厂模式最大的优点就是:解耦。简单工厂模式/静态工厂模式其实不是一种设计模式,而算是一种编程思想。以下讲解使用咖啡厅点咖啡来说明。
2023-06-19 21:00:05
1370
原创 Gof23设计模式之单例模式(完整)
单例模式(Singleton pattern)是Java中最简单的设计模式之一。这种设计模式属于创建型模型,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
2023-06-17 09:44:33
1342
原创 SpringBoot敏感词过滤工具类(需要在resource下放置敏感词文件)
SpringBoot敏感词过滤工具类(需要在resource下放置敏感词文件)
2023-06-15 08:34:04
338
原创 使用策略模式实现两种搜索Mysql和ElasticSearch7.17.x
运用策略模式来实现Mysql和ELasticSearch的搜索,根据数据库中查询出来的结果然后通过SearchEnum枚举类获取到项目中需要的策略模式(也就是mysqlStrategyImpl或者elasticsearchStrategyImpl)。
2023-06-08 08:47:09
234
1
原创 SpringBoot整合Ip2region获取IP地址和定位
ip2region v2.0 - 是一个离线IP地址定位库和IP定位数据管理框架,10微秒级别的查询效率,提供了众多主流编程语言的 xdb 数据生成和查询客户端实现。通过ip获取ip地址和定位,使用Java通过Ip2region解析ip所在地的具体信息
2023-06-07 23:24:26
2618
2
原创 RabbitMQ之延迟队列
延时队列在需要延时处理的场景下非常有用,使用 RabbitMQ 来实现延时队列可以很好的利用 RabbitMQ 的特性,如:消息可靠发送、消息可靠投递、死信队列来保障消息至少被消费一次以及未被正 确处理的消息不会被丢弃。另外,通过 RabbitMQ 集群的特性,可以很好的解决单点故障问题,不会因为 单个节点挂掉导致延时队列不可用或者消息丢失。
2023-05-21 20:19:20
4108
1
原创 RabbitMQ之死信队列
死信,就是无法被消费的消息。 一般来说,producer将消息投递到broker或者直接到queue里了,consumer从queue取出消息进行消费,但某些时候由于特定的原因导致queue中的某些消息无法被消费,如果没有后续的处理,就变成了死信。 应用场景:为了保证订单业务的数据不丢失,需要使用到RabbitMQ的死信队列机制,当消息消费发生异常时,将消息投入死信队列中。或者用户在商城下单成功并点击去支付后在指定时间未支付时自动失效。
2023-05-20 23:23:17
754
原创 RabbitMQ之交换机详解
RabbitMQ交换机详解,交换机的四种类型, 直接(direct),主题(topic) ,扇出(fanout),三种类型的实战和详细说明
2023-05-16 23:11:11
582
原创 RabbitMQ之发布确认
confirm 模式最大的好处在于他是异步的,一旦发布一条消息,生产者应用程序就可以在等信 道返回确认的同时继续发送下一条消息,当消息最终得到确认之后,生产者应用便可以通过回调 方法来处理该确认消息,如果 RabbitMQ 因为自身内部错误导致消息丢失,就会发送一条 nack 消 息,生产者应用程序同样可以在回调方法中处理该 nack 消息。 这种确认方式有一个最大的缺点就是:发布速度特别的慢,因为如果没有确认发布的消息就会 阻塞所有后续消息的发布,这种方式最多提供每秒不超过数百条发布消息的吞吐量。
2023-04-24 22:04:01
788
原创 RabbitMQ之Work Queues
工作队列(又称任务队列)的主要思想是避免立即执行资源密集型任务,而不得不等待它完成。相反我们安排任务在之后执行。我们把任务封装为消息并将其发送到队列。在后台运行的工作进 程将弹出任务并最终执行作业。当有多个工作线程时,这些工作线程将一起处理这些任务。
2023-04-22 21:00:00
917
原创 RabbitMQ之初识案例Hello World
P是我们的生产者, C是我们的消费者。中间的框是一个队列-RabbitMQ 代 表使用者保留的消息缓冲区。helloworld初识rabbitmq
2023-04-21 23:30:00
129
原创 JUC并发编程之读写锁原理
读写锁用的是同一个 Sycn 同步器,因此等待队列、state等也是同一个2)t2 执行 r.lock,这时进入读锁的 sync.acquireShared(1) 流程,首先会进入 tryAcquireShared 流程。如果有写锁占据,那么 tryAcquireShared 返回 -1 表示失败tryAcquireShared 返回值表示。
2023-04-18 10:37:44
255
原创 RabbitMQ之介绍以及安装
Broker:接收和分发消息的应用,RabbitMQ Server 就是 Message Broker:出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类似 于网络中的 namespace 概念。当多个不同的用户使用同一个 RabbitMQ server 提供的服务时,可以划分出 多个 vhost,每个用户在自己的 vhost 创建 exchange/queue 等。
2023-04-18 00:36:17
939
原创 JUC并发编程之ReentrantLock
ReentrantLock原理和源码分析,对于非公平锁的实现、可重入原理、可打断原理、公平锁实现原理、条件变量实现的分析
2023-04-13 18:22:59
538
原创 JUC并发编程之AQS原理
AQS全称是 AbstractQueuedSynchronizer,是阻塞式锁和相关的同步器工具的框架子类主要实现这样一些方法 (默认抛出UnsupportedOperationException)获取锁的姿势释放锁的姿势。讲解AQS的原理
2023-04-13 18:12:44
679
原创 JUC并发编程之线程池
JUC的线程池笔记,自定义线程池分为自定义拒绝策略接口和自定义任务队列,ThreadPoolExecutor和fork/join的线程池,以及异步模式之工作线程,定时任务的实现
2023-04-09 22:00:44
393
原创 Redis7之抢红包案例
用redis7实现一个简单的抢红包、记录红包金额的案例,发红包抢红包不加锁保证原子性,支持高并发每人只能抢一次记红包拆红包每次抢到的金额 = 随机取件(0,(剩余红包金额 ÷ 剩余人数N)× 2)这个公式保证了每次随机金额的平均值是相等的,不会因为抢红包的先后顺序而造成不公平。
2023-04-08 22:14:04
1163
原创 Redis7高级之Redlock算法和Redisson的使用(十)
该方案为了解决数据不一致的问题,直接舍弃了异步复制只使用 master 节点,同时由于舍弃了 slave,为了保证可用性,引入了 N 个节点,官方建议是 5。设置了maxmemory的选项,假如redis 内存使用达到上限,没有加上过期时间就会导致数据写满 maxmemory,这就需要内存淘汰策略。 加入在集群环境中,redis失败2台,可接受。2N+2 = 2 * 2+2 =6,部署6台。2N+2= 2 * 1+2 =4,部署4台。N = 2X + 1 (N是最终部署机器数,X是容错机器数)
2023-04-08 18:34:44
2602
原创 Redis7之实现分布式锁(九)
Redis7之实现分布式锁,实现的一个能用的分布式锁,能够在不是特别高的并发场景下应用,应用设计模式工厂模式来实现最终v8.0版本的分布式锁
2023-04-06 16:08:37
2445
原创 Redis7之缓存预热 + 缓存雪崩 + 缓存击穿 + 缓存穿透(八)
缓存预热、缓存雪崩、缓存击穿、缓存穿透,缓存问题产生原因解决方案缓存更新不一致数据变更、缓存时效性同步更新、失效更新、异步更新、定时更新缓存不一致同步更新失败、异步更新增加重试、补偿任务、最终一致缓存穿透恶意攻击空对象缓存、bloomFilter 过滤器缓存击穿热点key失效互斥更新、随即退避、差异失效时间缓存雪崩缓存挂掉快速失败熔断、主从模式、集群模式。
2023-04-05 18:01:15
1921
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人