自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 资源 (1)
  • 收藏
  • 关注

原创 Guava缓存使用

Guava缓存在项目中的使用

2023-03-06 16:30:09 299

原创 ElasticSearch7.x 从部署到开发

ElasticSearch7.x SpringBoot项目如何对接ElasticSearc Spring-data-elasticsearch-2.7.5新版api

2023-02-18 11:03:15 273

原创 Lucene学习笔记

有关lucene存储的使用

2023-02-15 14:47:08 387

原创 Java项目如何接入钉钉群机器人

钉钉

2022-10-28 11:50:22 716

原创 Java泛型

java泛型

2022-10-24 11:06:32 328

原创 SpringBoot项目通过自定义注解+枚举实现入参字段分组校验

自定义注解 校验器扩展

2022-10-23 22:36:34 1112

原创 【每日学设计模式——行为型模式】责任链模式

菜鸟教程链接:责任链模式概念责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。简单而言, 就是将不同的处理器通过类似于单链表的形式去串联起来,通过第一个节点将接收的请求处理之后依次向下传递,从而让对应的消息的到充分的使用。优缺点优点:1、降低耦合度。它将

2022-05-22 22:23:30 152

原创 【每日学设计模式——结构型模式】代理模式

菜鸟教程链接:代理模式概念代理模式在java中的应用非常常见,spring中就大量运用到了各种动态代理与静态代理模式,它和装饰者模式非常类似,都是通过创建包含现有的对象的类实例去访问现有对象的方法,使不兼容或者访问及其复杂的方法可以通过代理类简便访问。它与装饰者模式的区别主要在于装饰者模式重点想要扩展原有方法的功能,而代理模式主要侧重于提供对象访问的通道。优缺点优点:简便被代理类的使用,扩展性高。缺点:实现逻辑可能会复杂,会降低被代理接口的访问速度。适用场景需要代理的场景,如远程代理,防火

2022-05-06 20:34:11 329

原创 【每日学设计模式——结构型模式】享元模式

菜鸟教程链接:享元模式概念享元模式类似于工厂+缓存的模式,当创建对象的时候,通过条件判断缓存中有没有对应对象,如果有直接取出缓存,如果没有则新建并放入缓存中,再返回。优缺点优点:创建对象时利用了缓存,提升了响应速度。节约了资源。缺点:提升了系统的复杂度。适用场景缓存场景,例如校验token场景,通过用户ID获取用户信息的地方。任何系统大量用到重复或相似对象,并有确定的条件区分的地方,都可以用的该设计模式。示例代码import java.util.HashMap; publ

2022-05-05 21:14:01 140

原创 【每日学设计模式——结构型模式】外观模式

菜鸟教程链接:外观模式概念这个模式其实真的没什么好讲的…只要接触过java开发的,必然是使用过这个模式的。简单来说就是屏蔽实现过程,封装成一个类的接口,通过暴露接口让客户端能够通过简单的调用接口实现复杂过程。也就是java封装的特性。对于Spring的三层架构也是很好的体现,我们将各种逻辑抽离成各种接口方法,外层只需要提供参数即可调用实现多种逻辑。优缺点优点:1、减少系统相互依赖。2、提高灵活性。3、提高了安全性。缺点:不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。这也是日常开发中

2022-04-30 13:49:34 777

原创 【每日学设计模式——结构型模式】装饰器模式

菜鸟教程链接:装饰器模式概念装饰器模式是基于已有接口,在不更改原接口的前提下来扩展已有接口功能。简单而言就是对于已有接口A的play方法,我们需要有新的扩展,但是该接口正在服役不能直接改动原接口,所以创建一个装饰器模式的包装类,实现A接口,并注入A的实现类作为成员变量,在需要扩展接口上调用成员变量的对应方法,并自由做其他扩展。该模式跟适配器模式的思想十分相同,可以所示对已有类扩展的一体两面性。他俩的区别可以简单做如下概括:两者都是对已有方法实现的扩展,适配器模式会将适配器注入到已有类实现方法中进

2022-04-29 17:44:22 180

原创 【每日学设计模式——结构型模式】组合模式

菜鸟教程链接:组合模式概念组合模式非常简单,可以简单理解为类包含属于自身对象组的成员变量,即自己中包含自己,从而构成树形结构的类结构。优缺点优点:1、高层模块调用简单。2、节点自由增加缺点:在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则。适用场景递归型树形结构都可以应用到该场景,如文件夹,链表。示例代码public class ListNode { private int value; private List<Node> n

2022-04-27 22:07:44 404

原创 【每日学设计模式——结构型模式】桥接模式

菜鸟教程链接:桥接模式概念桥接模式是利用一个作为桥接的接口,将抽象化与实现化解耦,使两者可以独立变化,并且自由组合秤不同的效果。简单的示意图如下:通过将接口注入到抽象类中,作为抽象类的成员变量,即可通过该接口将抽象类的不同实现与接口的不同实现桥接起来,形成多样自由的组合。优缺点优点:扩展性高,灵活抽象和实现完美分离缺点:对系统设计的要求更加复杂适用场景业务对象具有多种组合,且组合的能力与属性可抽象出具体的接口与父类示例代码如菜鸟教程示例:抽象出来的属性作为抽象父类:p

2022-04-26 22:29:58 130

原创 【每日学设计模式——结构型模式】 适配器模式

菜鸟教程链接:适配器模式概念适配器模式可以理解为通过不修改父类或接口的情况下,通过子类或实现类组合装载了所需扩展接口的适配器(或直接组合所需扩展接口)的方式,让原来的类或接口可以适配于客户端新的场景。该设计模式不应该应用于设计一个类的过程中,而应该在修改历史代码的过程中使用,使在不修改老代码的基础上扩展新的业务场景,体现了 复合大于继承 这一观点。优缺点优点:提高了类的复用灵活,透明缺点:可能会使类的定义与其运行时体现的功能不一致,系统复杂度提升对原有的实现类有侵入由于 JAVA

2022-04-24 23:31:15 281

原创 【每日学设计模式——创建型模式】 原型模式

菜鸟教程链接:原型模式概念原型模式可简单理解为获取对象时,只拥有一个原型,客户端获取所有的对象都是原型通过重写Objects.clone()方法创建的复制品。可适用于各种缓存场景。与通过对一个类进行实例化来构造新对象不同的是,原型模式是通过拷贝一个现有对象生成新对象的。浅拷贝实现 Cloneable,重写,深拷贝是通过实现 Serializable 读取二进制流。优缺点优点:提高性能摆脱对创建方法的依赖缺点:复制逻辑可能会很复杂对于已有的类难以扩展该模式适用场景新建对象复杂

2022-04-23 21:48:10 323 1

原创 【每日学设计模式——创建型模式】 建造者模式

菜鸟教程链接:建造者模式概念建造者模式针对于实例创建复杂且或包含繁多组合可能性的类,通过设计一个builder对象,讲类的创建过程交由builder来处理,从而将类复杂的实现和其表现抽离开来。这种模式跟工厂模式的区别在于,工厂模式侧重点在于把类的实例化过程与外部隔离,交由工厂类去执行。而建造者模式的侧重点在于将类复杂多样的实例过程作简化。除了菜鸟教程里面的表示外,还有一种常见的使用场景如下:对于建造者模式,日常开发中接触最多的便是Lombok这一技术,这一技术很好的扩展了创建对象时具有大量可选参数的

2022-04-21 23:14:42 138

原创 【每日学设计模式——创建型模式】 单例模式

菜鸟教程链接:单例模式概念单例模式是Java中最常用,也是最简单的设计模式。通过私有化类的构造方法,禁止外部实例化该类对象,而是通过类自身创建一个唯一实例,并提供一个接口给外部使用,保证该类在项目中只有唯一的实例,既保证了类实例的唯一稳定性,也节约了内存资源。枚举是单例模式最常见的使用。可简单将单例模式归纳与以下三点:1、单例类只能有一个实例。2、单例类必须自己创建自己的唯一实例。3、单例类必须向外提供暴露该实例的接口。优缺点优点:节约资源,避免重复的类对象的创建于销毁避免对资源的多重

2022-04-20 23:21:46 274

原创 【每日学设计模式——创建型模式】 抽象工厂模式

菜鸟教程链接:抽象工厂模式概念抽象工厂模式可以简单理解为——工厂类的工厂模式,即不同的参数通过工厂类创建不同的工厂。除了菜鸟教程中举出的完全不同类型的工厂的抽象工厂外,我们也可以创建统一类型不同类别的抽象工厂模式,此时我们似乎拥有了更大的操作空间。例如汽车类可以分为奔驰汽车,宝马汽车,奥迪汽车,每一个品牌下又有不同系列的汽车,则每一个实际系列的汽车可做为一个抽象类Car的子类,我们又可以根据不同系列的汽车创建每个品牌的工厂类BENZFactory、BMWFactory、AUDIFactory,因为每一

2022-04-19 22:55:56 263

原创 【每日学设计模式——创建型模式】 工厂模式

菜鸟教程链接:工厂模式概念工厂模式属于创建型设计模式,对于某一类对象,通过工厂模式,我们可以对于客户端屏蔽实现类内部的初始化逻辑,客户端只需要通过名称即可通过工厂类获取到对应的实例化的子类对象。一般配合策略模式使用,通过不同的条件返回不同的子类对象或某一业务接口的不同实现类。示意图:优缺点优点:一个调用者想创建一个对象,只要知道其名称就可以了。扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。屏蔽产品的具体实现,调用者只关心产品的接口。缺点:每次增加一个产品时,都需要增加一个

2022-04-18 20:56:19 284

原创 【每日学算法——Day02】队列

1. 数组模拟队列队列本身是有序列表,具有先入先出的特性,可以使用数组或链表来实现。基础构成:maxSize:数组的最大容量,按照约定空出一个容量,最多能存如maxSize - 1个数据。front:队列头索引,初始为-1,指向队列头前一个数据。rear:队列尾,初始为-1,指向队列尾最后一个数据。特殊场景:队列已满: rear = maxSize - 1队列已空: rear = front基础操作:加入数据:(rear < maxSize - 1) re

2021-12-07 23:59:04 87

原创 【每日学算法——Day01】稀疏数组

稀疏数组1、介绍定义: 用于存在大量零值或重复值的矩阵数据,通过稀疏数组的方式来压缩出有效数据。格式:总是n行3列,int[] sparsArr = int[n][3],[0] 记录矩阵行数,矩阵列数,有效值数(非零);[1~n] 记录数据所在行,所在列,值。意义:去除了大量无意义的零值数据。通过记录数组一共几行几列,有多少个不同的值,把具有不同值的元素的行列及值记录在一个小规模数组中,从而缩小程序的规模。2、处理方式二维数组转稀疏数组的思路遍历原始的二维数组,得到有效数据的个数sum

2021-10-26 23:16:26 75

原创 IO流小结

IO流1.File类File:它是文件和目录路径名的抽象表示文件和目录是可以通过File封装成对象的对于File而言,其封装的并不是一个真的存在的文件,仅仅只是一个路径名而已。他可以是存在的,也可以是不存在的,将来是要通过具体的操作把路径的内容转换为具体存在的。构造方法File(String pathName):通过将给定的路径名字符串转换为抽象路径名来创建新的File实例File(String parent,String child):从父路径名字符串和子路径名字符串创建新的Fi

2021-08-24 23:11:02 96

原创 Git学习笔记

Git1. git的优势大部分操作在本地完成,不需要联网完整性保证尽可能添加数据而不是删除或修改数据分支操作非常快捷方便(内部以快照管理,分支操作等于切换指针)与Linux命令全面兼容2. git的结构3. 本地库与远程库的交互团队内协作跨团队协作4. Git命令行操作设置签名:形式用户名:Email地址:作用:区分不同开发人员的身份辨析:这里设置的签名和登陆远程库(代码托管中心)的账号、密码没有任何关系。命令:项目级别/仓

2021-08-22 11:51:29 83

原创 IDEA中Debug高阶技巧

不会Debug的程序员……不叫程序员普通DebugF8:进入下一步(若当前停留行是调用方法会直接执行完,不会进入方法体内部)F7:进入下一步,若停留行是方法体会进入F9:放行断点Ctrl + F2:停止Debug(后续程序会执行完毕)方法断点:点在方法声明上,会在执行的方法体第一行停留。可用于一个接口有多个实现类的情况下,断点会停留在执行的实现类上。接口方法上添加断点:实现类停留:异常断点:Ctrl+Shift+F8或点击双红点按钮呼出配置页面,添加所要监听的异常,断点会自动停留

2021-08-16 23:45:33 727

原创 IDEA终端替换成git

Setting ===> Terminal ===>Shell Path改为自己git bash.exe文件路径(git安装路径下)

2021-08-15 16:06:47 176

原创 IDEA远程Debug

本地配置启动服务器本地debug笔记内容来自B站UP主御风大世界视屏内容,视频教程链接https://www.bilibili.com/video/BV1Vb4y1Q7KJ

2021-08-14 12:50:23 58

原创 多线程&线程池

多线程&线程池1. 线程线程的基本概念进程:一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程是一种抽象的概念,从来没有统一的标准定义。进程一般由程序,数据集合和进程控制块三部分组成。程序用于描述进程要完成的功能,是控制进程执行的指令集;数据集合是程序在执行时所需要的数据和工作区;程序控制块包含进程的描述信息和控制信息是进程存在的唯一标志。线程:线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小

2021-06-27 01:36:21 162

原创 JVM虚拟机优化

JVM虚拟机优化1. JVM的运行参数​ jvm中有很多参数可以设置,这样可以使jvm在各种环境中都能够高效的运行。绝大部分的参数保持默认即可。JVM的三种参数类型标准参数:顾名思义,标准参数中包括功能和输出的参数都是很稳定的,很可能在将来的 JVM 版本中不会改变。你可以用 java 命令(或者是用 java -help)检索出所有标准参数。-help:-version:-X参数(非标准参数):非标准化的参数在将来的版本中可能会改变。所有的这类参数都以 - X 开始,并且可以用

2021-06-16 00:34:28 250

原创 Java开发手册重点摘录

1. 编码规范命名风格 【强制】抽象类命名使用Abstract或Base开头;异常类命名使用Exception结尾;测试类命名以他要测试的类的名称开始,以Test结尾。 【强制】包名统一小写,点分隔符之间有且仅有一个自然语义的英文单词。包名统一使用单数形式,若类名有复数含义,可以使用复数形式。 【推荐】在常量和变量的命名中,表示类型的名词放在词尾,提升辨识度。 【推荐】如果模块、接口、类、方法中使用了设计模式,在命名中需要体现出具体模式。 【推荐】接口类中的方法和属性不要加任何修饰符号

2021-06-06 19:38:03 140

原创 JDK8新特性——Lambda

JDK8新特性——Lambda函数式编程:形式参数,箭头,代码块(s1,s2) -> { s1 += s2; return s1-s2; }使用前提:有一个接口,接口中有且仅有一个抽象方法必须要有上下文对象才能推导出Lambda对应的接口根据局部变量的赋值的值Lambda对应的接口:Runnable r = () -> sout(“zzz”)根据调用方法的参数的值Lambda对应的接口: new Thread(() - > sout(“xxx”))

2021-05-30 00:15:21 96

原创 JDK8新特性——Stream流

Stream流1. 简介特点:流不会储存元素,所以每个Stream流只能使用一次(每次调用方法后都会销毁)流不会修改其数据源,只是在原数据集上定义了一组操作。流执行具有延迟特性,即每当访问到流中的一个元素,才会在此元素上执行这一系列操作。流操作:生成流中间操作(原Stream流销毁,返回一个新流)终结操作(最终操作,不会返回新流)2.方法简介方法描述流的生成方法of()静态方法,返回一个包含参数的流,有两个overload方法,一个接受变长

2021-05-29 01:14:10 324

原创 JDK8新特性——Optional工具类

JDK8新特性----玩转Optional工具类1. 基本概念​ Java 8 中引入了一个有趣的特性是Optional类,该工具类的引入主要是为了解决空指针异常(NullPointException)。本质上,这是一个包含有可选值的包装类,意味着类本身亦可以有值也可以为Null。2.方法方法描述of()把指定的值封装成Optional对象并返回,如果参数为null,贼会抛出空指针异常(不可以传null值)ofNullable()把指定的值封装为Optional对象并

2021-05-20 23:39:33 453

原创 SQL中使用UNION ALL一定比OR效率高吗?

首先给出结论:SQL语句中使用UNION ALL取代OR不一定能够提升效率,具体情况要视情况而定情况1. 连接字段较少,存在非索引字段,条件简单情况下使用OR,进行一次全表扫描,不走cust_order_id的索引,执行时长:3273使用UNION ALL,先走cust_order_id的索引,再进行全表扫描,反而用时更高.执行时长:3287情况2: 连接字段较多,都是索引字段,条件简单情况下使用OR,都走索引,耗时52使用union all,都走索引,耗时...

2021-05-08 15:50:45 4606

原创 Activiti7工作流引擎 Day 1

Activiti7工作流引擎 Day 11.相关概念工作流:工作流程,事物发展的一个业务过程。就是通过计算机对业务流程自动化执行管理。工作流引擎:一个用于管理和调度流程的应用程序,可以集成并作为程序框架使用,包括流程定义的存储,流程的节点与流程条件判断和调度、流向管理、流程实例管理等功能。工作流系统:如果一个系统具备流程的自动化管理功能,可称为工作流系统。BPM:Business Process Management,是一种以规范化的构造端到端的卓越业务流程为中心,以持续的提高组织

2021-04-17 16:50:31 104

原创 SQL语句中的WHERE 1 = 1 和 WHERE <> 1的作用

之前在捞公司SQL日志的时候发现SQL语句中存在WHERE 1 = 1的句子觉得很奇怪,搜索了一下相关资料发现是用来手动拼接动态SQL语句的,顿时觉得很有意思,但是对于OR的情况下的说法我个人觉得不太确切,于是在这里做一下总结。首先呢,WHERE 1 = 1 的存在是用在条件语句的开头用于避免单条限制存在AND的情况,举个例子:当我们需要动态拼接多个限制条件的时候,我们需要在条件语句中加上AND,但是如果前台传入的限制条件只有一条的时候,SQL语句就会变成:SELECT *FROM TABLEWHE

2021-04-01 11:17:54 1934

原创 IDEA自定义代码&注释模板

类生成时候自动加载类注释模板文件:#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end#parse("File Header.java")/** * <Description> ${NAME}<br> * * @author ${USER}<br> * @version 1.0<br> * @taskId <br>

2021-03-30 19:27:19 636

原创 Oracle使用SQL分页查询不到结果 && 分页查询的优化

由于新公司的技术比较陈旧,而且是自研框架,需要手写原生SQL去实现分页效果,而且使用的是Oracle数据库,在写SQL的时候就发现一件很神奇的事情。在DAO层我使用了类似如下SQL去进行分页查询:SELECT TAC, TAC_TYPE, CREATED_DATE, SQ_ID FROM TAC WHERE 1 = 1 AND ROWNUM > :START_NUM AND ROWNUM <= :END_NUMEND_ROWNUM = (pageIndex + 1) * pageSi

2021-03-30 19:20:08 839

原创 IDEA设置窗口打开最大数量

idea默认Tab Limit是10个,即打开超过十个文件后前面的窗口会自动关闭,若想展示所有打开窗口只需更改Tab Limit为想要的数目

2021-03-24 09:34:15 4020

原创 org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested

SpringCloud中Mybatis读取Mysq报错:报错原因:Mysql的新版驱动中存在数据库和系统时区不匹配的问题解决办法:在配置文件的数据库url参数中加上serverTimezone=CSTspring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/study?serverTimezone=CST username: root

2021-03-22 23:04:37 591

原创 JavaScript系统知识梳理

JavaScript由于新公司前后端不分离,而且使用的自研框架,迫不得已又将快忘光了的JS再次梳理了一遍,在此分享给大家。1.基础概念JS中严格区分大小写。JS中每一条语句以“ ; ”结尾。–如果不写分号,浏览器会自动添加,但是会消耗一些系统资源,而且有时候系统会加错分号,所以必须写。JS中会忽略多个空格和换行,我们可以利用空格和换行对代码格式化。2.基础数据类型字面量:不可改变的值,如常量。可以直接使用,但一般不会直接使用。(Infinity,NaN)变量:可以用

2021-03-07 16:04:16 361 1

Java贪吃蛇源码JDK8

Java贪吃蛇源码

2021-01-09

空空如也

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

TA关注的人

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