自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 重新组织函数&重新组织数据

重新组织函数&重新组织数据

2022-09-27 22:19:43 303 1

原创 重构的原则

重构的原则

2022-09-27 22:10:22 791

原创 代码的坏味道

代码的坏味道

2022-09-27 22:00:56 369

原创 java设计模式-责任链模式

责任链模式

2022-06-19 19:44:54 564

原创 如何保证controller的并发安全?

如何保证controller并发安全

2022-06-05 14:37:26 661

原创 java设计模式-解释器模式

解释器模式

2022-06-05 13:30:21 540

原创 利用redis解决恶意刷新和暴力请求

利用ip+url防止暴力请求

2022-05-29 20:04:21 633

原创 Java设计模式-迭代器模式

迭代器模式

2022-05-29 16:16:34 266

原创 springboot-security模块搭建

springboot-security

2022-05-15 19:43:05 971

原创 java设计模式-中介者模式

中介者模式

2022-05-15 14:51:00 161

原创 redisson使用过程中异常记录-看门狗机制失效

异常信息:ttempt to unlock lock, not locked by current thread by node id:*** thread-id: **场景:有一个耗时可能很长的业务方法,做了异步处理@Async放入线程池执行。在controller来创建了锁,Rlock作为参数传到异步方法内,异步方法执行完finally内unlock.这个时候controller已经直接返回,异步方法可能执行了10秒钟后进入finally执行lock.unlock(),这时候报错上边的异常信息贴

2022-05-08 20:09:20 3642

原创 java设计模式-备忘录模式

备忘录模式详解备忘录模式又叫作快照模式或Token模式,是一种对象的行为模式。在备忘录模式里,一个备忘录是一个对象,它存储另一个对象(原发器对象)在某个瞬间的内部状态。备忘的目的就是为了以后在需要的时候,可以将原发器对象的状态恢复到备忘录所保存的状态。备忘录的本质:保存和恢复状态设计意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复(undo/rollback)到原先保存的状态了。备忘录模式的结构备忘录模式涉及的角色及其职责如下:原发器角色:

2022-05-08 19:32:00 943

原创 多线程环境下hashMap数据丢失场景模拟

都知道hashMap在多线程下不安全,多线程场景下一般用concurrentHashMap,今天我们模拟一下hashMap多线程出现数据丢失package com.example.study.hashmap;import java.util.HashMap;import java.util.Map;/** * <h3>study</h3> * <p></p> * * @author : ZhangYuJie * @date : 2022-

2022-04-24 17:24:43 1153

原创 java设计模式-观察者模式

观察者模式介绍:观察者模式(有时又被称为发布/订阅模式)是软件设计模式的一种。在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实时事件处理系统。简单案例:假设猫是老鼠和狗的观察目标,老鼠和狗是观察者,猫叫老鼠跑,狗也跟着叫,使用观察者模式描述该过程抽象目标类 MySubjectMySubject是抽象目标类,在其中定义了一个ArrayList类型的集合observers,用于存储观察者对象,并

2022-04-24 16:27:47 1876

原创 java设计模式-状态模式

状态模式介绍:当一个对象在内在状态改变时,允许改变起行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。简例工作状态-分类板package com.example.designmode.statepattern;import lombok.Data;/** * <h3>design-mode</h3> * <p>工作状态-分

2022-04-24 15:46:45 2236

原创 springBoot 异步编程指南

这篇文章可以了解到这些知识点:Future 模式介绍以及核心思想核心线程数、最大线程数的区别,队列容量代表什么;ThreadPoolTaskExecutor 饱和策略;SpringBoot 异步编程实战,搞懂代码的执行逻辑。Future 模式异步编程在处理耗时操作以及多任务处理的场景下非常实用,可以让系统最大程度利用好机器的 CPU 和 内存,提高它们的利用率。Future 模式的核心思想是 异步调用 。当我们执行一个方法时,如果方法中有多个耗时的任务需要同时去做,而且又不着急等待这个结果

2022-04-10 18:23:20 835

原创 java设计模式-策略模式

一、策略模式定义Strategy模式也叫策略模式是行为模式之一,它对一系列的算法加以封装,为所有算法定义一个抽象的算法接口,并通过继承该抽象算法接口对所有的算法加以封装和实现,具体的算法选择交由客户端决定(策略)。Strategy模式主要用来平滑地处理算法的切换 。二、策略模式的结构封装类:也叫上下文,对策略进行二次封装,目的是避免高层模块对策略的直接调用。抽象策略:通常情况下为一个接口,当各个实现类中存在着重复的逻辑时,则使用抽象类来封装这部分公共的代码,此时,策略模式看上去更像是模版方法模式。

2022-04-10 16:29:55 283

原创 接入alipay-sdk

沙箱环境申请地址:https://open.alipay.com/platform/appDaily.htm?tab=info所需参数://支付宝网关地址:https://openapi.alipay.com/gateway.do //支付宝申请的APPID //商户应用私钥(与支付宝数据交互时,保证数据安全,防止数据被篡改) //支付宝公钥(与支付宝数据交互时,保证数据安全,防止数据被篡改) //签名算法类型(RSA2或者RSA,支付宝推荐使用RSA2) //编码格式(utf-8,gb231

2022-04-05 22:13:30 5964

原创 java设计模式-模板模式

模板方法模式,一般是为了统一子类的算法实现步骤,所使用的一种手段或者说是方式。它在父类中定义一系列算法的步骤,而将具体的实现都推迟到子类。最典型的形式就是一个接口,一个抽象父类中会有一系列的抽象方法,而在子类中去一一实现这些方法。例如我们有一个接口,里面就一个方法,是用来制造一个HTML页面,如下:package com.example.designmode.templatemethod;/** * <h3>design-mode</h3> * <p>&lt

2022-04-05 16:08:11 150

原创 java设计模式-访问者模式

访问者模式表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。角色1.Visitor 抽象访问者角色,为该对象结构中具体元素角色声明一个访问操作接口。该操作接口的名字和参数标识了发送访问请求给具体访问者的具体元素角色,这样访问者就可以通过该元素角色的特定接口直接访问它。2.ConcreteVisitor.具体访问者角色,实现Visitor声明的接口。3.Element 定义一个接受访问操作(accept()),它以一个访问者(Visitor)作为

2022-03-27 18:05:45 423

原创 CompletableFuture使用

CompletableFuture解决的问题解决future模式的缺点。a.为了解决Future虽然可以实现异步获取线程的执行结果,但是future没有提供通知机制,调用方无法得知future什么时候执行完的问题。b.要么使用阻塞,在future.get()的地方等待future返回结果,这时会变成同步操作。如果使用isDone()方法进行循环判断,就会消耗cpu资源。CompletableFuture能够将回调放到与任务不同的线程中执行(其实这句话,我也不是很理解),也能将回调作为继续执行的同

2022-03-27 17:40:48 213

原创 java设计模式-代理模式

代理模式:代理模式还是比较好理解,就是委托别人做事情,比如我们要租房子,委托中介去找房子,这就是代理模式。代理模式分为静态代理模式和动态代理模式。静态代理:package com.example.designmode.proxy;/** * <h3>design-mode</h3> * <p>定义消费者接口,查找指定区域,指定价格以下的房子</p> * * @author : ZhangYuJie * @date : 2022-03-27

2022-03-27 15:06:05 386

原创 Java11新特性一览

Java 11是自Java 8以来的又一个LTS版本,是目前全球使用最多的LTS版本之一。下边我们看一下JAVA11的新特性字符串API增强在Java 11中,针对String的操作进一步得到加强。避免我们在很常见的场景中引入额外的、复杂的API。isBlank()用来判断字符串是不是空字符"“或者trim()之后(” ")为空字符: String blankStr = " "; // true boolean trueVal = blankStr.isBlank();lines(

2022-03-20 19:50:36 14658

原创 java设计模式-享元模式

一、享元模式享元模式解决的就是在有大量对象时,有可能会造成内存溢出,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建,说白了就是对象的复用,而不是每次都直接新创建一个对象。享元模式核心就是相同或者相似对象的共享复用,分享的是对象相同的部分,而不同的部分用接口暴露出去根据环境动态的设置,而这在享元模式中分别叫做内部状态与外部状态。接口暴露的就是对象可以改变的部分,称作外部状态,而那些通过外部设置但是不允许共享的部分称作内部状态。并且外部状态的改变不能影响内部状态。享元模式很重要一点是分离

2022-03-20 15:48:44 275

原创 java设计模式-外观模式

外观模式概念外观模式又称为门面模式,为子系统中的一组接口提供一个一致的界面,此模式定义了一个搞层次接口,使得这一个子系统更加容易使用。这一模式完美的体现了依赖倒转原则和迪米特法则的思想,所以是非常常用的模式之一。外观模式UML图外观模式代码学习外观模式我使用的例子是一个打架的例子,打架一般都不希望被人看见,只要知道打了人了就可以了。package com.example.designmode.facade;/** * <h3>design-mode</h3> *

2022-03-13 19:59:53 1179

原创 TLog轻量级日志追踪

详解随着微服务盛行,很多公司都把系统按照业务边界拆成了很多微服务,在排错查日志的时候。因为业务链路贯穿着很多微服务节点,导致定位某个请求的日志以及上下游业务的日志会变得有些困难。搭建分布式链路追踪系统一天下来产生几十G上百G的数据其实非常正常。如果想保存时间长点的话,也需要增加服务器磁盘的成本。那么就可以考虑这个Tlog轻量级日志追踪,接入简单,基本十分钟就可以实现微服务之间链路追踪。他不存储日志,它只是自动的对你的日志进行打标签,自动生成TraceId贯穿你微服务的一整条链路。并且提供上下游节点信息

2022-03-08 12:05:32 1319

原创 java设计模式-装饰模式

一、 概述:装饰器模式作用是针对目标方法进行增强,提供新的功能或者额外的功能。不同于适配器模式和桥接模式,装饰器模式涉及的是单方,和代理模式相同,而且目标必须是抽象的。而实际上,装饰器模式和代理模式的实现方式基本一致,只在目标的存在上有些差别,这个后面我们具体讲述。二、 初步分析上面提到了两点:涉及的是单方目标是抽象的我们来想一下,所谓单方主要指的是在整个装饰器模式中不存在双方调用,要解决的也不是双方调用的问题,而是解决单方提供对外服务的问题,这个单方在自行对外提供服务时,功能不足,或者我们

2022-03-06 14:51:29 161

原创 阿里开源TransmittableThreadLocal(TTL)

我们都知道ThreadLocal是可以在一个线程中当容器使用的局部变量,是线程隔离、线程安全的。但是如果子线程要获取父线程的变量,便不太方便。比方在业务代码中,为了提高响应速度,将多个复杂、长时间的计算或调用过程异步进行,让主线程可以先进行其他操作。异步子线程可能会用到主线程ThreadLocal中的内容,比方链路追踪。下面我们一步步来解析:一、ThreadLocal/** * ThreadLocal * @param args * @throws Interrupte

2022-02-27 17:31:05 4833

原创 Java设计模式-组合模式

JAVA 设计模式 组合模式用途组合模式 (Component)将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有唯一性。组合模式是一种结构型模式。结构在这里插入图片描述Component : 组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理 Component 的子部件。package com.example.designmode.component;/** * <h3>des

2022-02-27 16:41:14 282

原创 ImageCombiner图片合成工具

ImageCombiner能够做什么?ImageCombiner是一个专门用于Java服务端图片合成的工具,没有很复杂的功能,简单实用,从实际业务场景出发,提供简单的接口,几行代码即可实现图片拼合(当然用于合成水印也可以),素材上支持图片、文本、矩形三种,支持定位、缩放、旋转、圆角、透明度、颜色、字体、字号、删除线、居中绘制、文本自动换行等特性,足够覆盖图片合成的日常需求。UMLImageCombiner怎么使用ImageCombiner使用起来相当简单,主要的类只用一个,new一个ImageCo

2022-02-20 20:06:20 2492

原创 java设计模式-桥梁模式

桥接模式桥梁模式是对象的结构模式。又称为柄体(Handle and Body)模式或接口(Interface)模式。桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”桥梁模式的用意桥梁模式虽然不是一个使用频率很高的模式,但是熟悉这个模式对于理解面向对象的设计原则,包括“开-闭”原则以及组合/聚合复用原则都很有帮助。理解好这两个原则,有助于形成正确的设计思想和培养良好的设计风格。桥梁模式的用意是“将抽象化(Abstraction)

2022-02-20 15:59:47 347

原创 java设计模式-适配器模式

1 初步认识适配器模式的定义将一个类的接口转成客户期望的另外一个接口。适配器模式使得原本由于接口不匹配而不能一起工作的那些类可以一起工作。大白话适配器模式就像旅行插座转换器(图1)2 适配器模式结构图如图所示,Client不能直接访问Adaptee。Adapter是适配器,它将Adaptee转换成Client能访问的接口。所以通过适配器Adapter,用户端就可以访问Adaptee。3 使用场景例子手机想要投影到投影仪上,由于手机是Type-c接口,投影仪是VGA接口。不能直接投影,需要一

2022-02-13 18:02:10 304

原创 tinylog-轻量级开源日志框架使用记录

前段时间,日志框架各种爆雷,包括:Log4j 1.x, Log4j 2.x, Logback 等都有爆雷,几乎是团灭。Log4j, Logback 都是主流的日志框架,功能也非常强大,不仅仅是日志记录,所以,功能多,自然也会带来更多的漏洞。。今天发现一款轻量日志框架,tinylog基本介绍官方网站:https://tinylog.org/开源地址:https://github.com/tinylog-org/tinylog支持的日志级别:TRACEDEBUGINFOWARNERRO.

2022-01-23 17:36:59 698

原创 Java设计模式-原型模式

一、原型模式原型模式与构造器模式、单例模式、工厂方法模式、抽象工厂模式一样,都属于创建型模式。原型模式理解起来,相对简单,来看下其定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式的实例的拷贝包括浅复制和深复制:浅复制:将一个对象复制后,其基本数据类型的变量都会重新创建,而引用类型的变量指向的还是原对象所指向的,也就是指向的内存堆地址没变。深复制:将一个对象复制后,不论是基本数据类型还是引用类型,都是重新创建的。从以上可以看出,浅复制中的引用类型只是复制了变量的值,其

2022-01-23 17:10:07 451

原创 java设计模式-建造者模式

介绍创建者模式又叫建造者模式,是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象。适用场景隔离复杂对象的创建和使用,相同的方法,不同执行顺序,产生不同事件结果多个部件都可以装配到一个对象中,但产生的运行结果不相同产品类非常复杂或者产品类因为调用顺序不同而产生不同作用初始化一个对象时,参数过多,或者很多参数具有默认值Builder模式不适合创

2022-01-16 22:42:47 738

原创 java设计模式-抽象工厂模式

概念:所谓抽象工厂模式就是提供一个接口,用于创建相关或者依赖对象的家族,而不需要明确指定具体类。它允许客户端使用抽象的接口来创建一组相关的产品,而不需要关心实际产出的具体产品是什么。这样一来,客户就可以从具体的产品中被解耦。它的优点是隔离了具体类的生成,使得客户端不需要知道什么被创建了,而缺点就在于新增新的行为会比较麻烦,因为当添加一个新的产品对象时,需要更改接口及其下的所有子类。特点:可以在类的内部对产品族中相关联的多等级产品共同管理,而不必专门引入多个新的类来进行管理。当增加一个新的产品族时不

2022-01-09 20:59:23 153

原创 java并发包-tools

java并发tools

2022-01-03 18:57:55 523

原创 java设计模式-工厂方法模式

JAVA 设计模式工厂方法模式(Factory Method)工厂模式( factory model)1.普通的工厂模式,就是创建一个普通的工厂类,根据相应的参数建造相应的对象首先,创建二者的共同接口:/** * <h3>design-mode</h3> * <p>工厂模式发送接口</p> * * @author : ZhangYuJie * @date : 2022-01-03 15:48 **/public interface Se

2022-01-03 16:52:52 359

原创 java设计模式-单例模式

java设计模式-单例模式一、概述单例模式的定义就是确保某一个类只有一个实例,并且提供一个全局访问点。属于设计模式三大类中的创建型模式。单例模式具有典型的三个特点:只有一个实例。自我实例化。提供全局访问点。二、优缺点优点:由于单例模式只生成了一个实例,所以能够节约系统资源,减少性能开销,提高系统效率,同时也能够严格控制客户对它的访问。缺点:也正是因为系统中只有一个实例,这样就导致了单例类的职责过重,违背了“单一职责原则”,同时也没有抽象类,这样扩展起来有一定的困难。三、常见实现方式常

2021-12-26 16:40:40 112

原创 IntelliJ Idea 常用快捷键列表

Idea快捷键大全

2021-12-26 14:01:22 93

空空如也

空空如也

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

TA关注的人

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