自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SpringBoot指标监控_Actuator

Actuator使用JSON格式展示了大量指标数据,不利于我们查看,我们可以使用可视化工具Spring Boot Admin查看actuator生成指标数据。在被监控的项目中连接Spring Boot Admin项目,才能使用Spring Boot Admin查看指标数据。例如查询健康数据,访问http://localhost:8080/actuator/health。访问项目:http://localhost:8080/actuator。此时Spring Boot Admin即可连接被监控的项目。

2022-11-13 15:47:28 88

原创 分布式锁概述

但是在后端集群部署的系统中,程序在不同的JVM虚拟机中运行,且因为synchronized或ReentrantLock都只能保证同一个JVM进程中保证有效,所以这时就需要使用分布式锁了。如果不同的系统或同一个系统的不同主机之间共享了某个临界资源,往往需要互斥来防止彼此干扰,以保证一致性。在单机部署的系统中,使用线程锁来解决高并发的问题,多线程访问共享变量的问题达到数据一致性,如使用synchornized、ReentrantLock等。

2022-10-26 21:42:11 32

原创 接口设计与重试机制引发的问题

程序方面:在系统中,一个接口运行多次,与运行一次的效果是一致的。Update操作:更新操作传入数据版本号,通过乐观锁实现幂等性。Insert操作:此时没有唯一业务单号,使用Token保证幂等。Delete操作:第一次已经删除,第二次也不会有影响。数学方面:幂等元素运行多次,还等于它原来的运算结果。Select操作:不会对业务数据有影响,天然幂等。不是所有接口都要求幂等性,要根据业务而定。一个方向是客户端防止重复调用。为什么会产生接口幂等性问题。一个是服务端进行校验。

2022-10-22 08:40:29 143

原创 SpringMVC参数获取大全

SpringMVC也支持使用Servlet原生对象,在方法参数中定义HttpServletRequest、HttpServletResponse、HttpSession等类型的参数即可直接在方法中使用。而SpringMVC支持参数注入的方式用于获取请求数据,即将请求参数直接封装到方法的参数当中。name=bjsxt。访问该方法时,请求参数名和方法参数的属性名相同,即可完成自动封装。访问该方法时,请求参数名和方法参数的属性名相同,即可完成自动封装。访问该方法时,请求参数名和方法参数名相同,即可完成自动封装。

2022-10-21 12:55:15 28

原创 SpringMVC执行流程

SpringMVC执行流程

2022-10-12 09:52:51 94

原创 SpringBoot参数校验

当程序出现了异常,SpringBoot会使用自带的BasicErrorController对象处理异常。当抛出ConstraintViolationException异常后,我们可以使用SpringMVC的异常处理器,也可以使用SpringBoot自带的异常处理机制。@NotBlank 判断字符串是否为null或者是空串(去掉首尾空格)@Length 判断字符的长度(最大或者最小)@NotNull 判断包装类是否为null。@NotEmpty 判断集合是否为空。@Email 判断邮箱是否合法。

2022-10-12 09:44:27 184

原创 JDBC手写连接池实现原理及过程

***static {try {//加载驱动 Class . forName(driver);} //初始化pool pool = new LinkedList < Connection >();//创建5个连接对象 for(int i = 0;i ++) {} //公有的给外界提供连接对象 public static Connection getConnection() {

2022-10-02 17:59:43 119

原创 SpringTask任务

Cron表达式是一个字符串,分为6或7个域,每一个域代表一个含义,以空格隔开。2.fixedDelay:任务立即执行,之后每隔多久执行一次,单位是毫秒,上一次任务结束后计算下次执行的时间。3.fixedRate:任务立即执行,之后每隔多久执行一次,单位是毫秒,上一次任务开始后计算下次执行的时间。可见效率低下,任务1较浪费时间,会阻塞任务2的运行。这是一个功能比较强大的的调度器,可以让程序在指定时间执行,也可以按照某一个频度。1.cron:cron表达式,定义方法执行的时间规则。执行,配置起来稍显复杂。

2022-09-27 21:33:24 605

原创 【设计模式】-观察者模式->天气预报(源码与类图解析)

观察者模式类似订牛奶业务。

2022-08-29 22:32:36 356 4

原创 【设计模式】-访问者模式->歌手评分(源码与类图解析)

访问者模式(Visitor Pattern),封装一些作用于某种数据结构的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。主要将数据结构与数据操作分离,解决 数据结构和操作耦合性问题访问者模式的基本工作原理是:在被访问的类里面加一个对外提供接待访问者的接口访问者模式主要应用场景是:需要对一个对象结构中的对象进行很多不同操作(这些操作彼此没有关联),同时需要避免让这些操作"污染"这些对象的类,可以选用访问者模式解决。

2022-08-24 22:44:54 46

原创 【设计模式】-职责链模式->采购审批(源码与类图解析)

职责链模式(Chain of Responsibility Pattern),又叫 责任链模式,为请求创建了一个接收者对象的链(简单示意图)。这种模式对请求的发送者和接收者进行解耦。职责链模式通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。这种类型的设计模式属于行为型模式。

2022-08-23 22:40:39 87

原创 【设计模式】-状态模式->借贷平台(源码与类图解析)

**** @Description: 抽象类,默认实现了 State 接口的所有方法,该类的所有方法,其子类(具体的状态类),* 可以有选择的进行重写protected static final RuntimeException EXCEPTION = new RuntimeException("操作不允许");} }

2022-08-20 15:54:34 168 2

原创 【设计模式】-状态模式->APP抽奖活动(源码与类图解析)

假如每参加一次这个活动要扣除用户50积分,中奖概率是10%活动有四个状态: 可以抽奖、不能抽奖、发放奖品和奖品领完。奖品数量固定,抽完就不能抽奖。活动的四个状态转换关系图。

2022-08-20 13:06:52 121

原创 【设计模式】-工厂模式->抽象工法模式(源码与类图解析)

抽象工厂模式:定义了一个interface用于创建相关或有依赖关系的对象簇,而无需指明具体的类抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合。从设计层面看,抽象工厂模式就是对简单工厂模式的改进(或者称为进一步的抽象)。将工厂抽象成两层,AbsFactory(抽象工厂) 和 具体实现的工厂子类。程序员可以根据创建对象类型使用对应的工厂子类。这样将单个的简单工厂类变成了工厂簇,更利于代码的维护和扩展。类图。

2022-08-20 00:05:33 109

原创 【设计模式】-工厂模式->工厂方法模式(源码与类图解析)

工厂方法模式设计方案:将披萨项目的实例化功能抽象成抽象方法,在不同的口味点餐子类中具体实现。工厂方法模式:定义了一个创建对象的抽象方法,由子类决定要实例化的类。工厂方法模式将对象的实例化推迟到子类。

2022-08-19 22:48:12 219

原创 【设计模式】-工厂模式->简单工厂模式(源码与类图解析)

简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码)在软件开发中,当我们会用到大量的创建某种、某类或者某批对象时,就会使用到工厂模式.......

2022-08-19 00:15:28 236

原创 【设计模式】-单例模式(饿汉式静态常量)

代码】【设计模式】-单例模式(饿汉式静态常量)

2022-08-18 22:06:57 43

原创 【设计模式】七大原则之“合成复用原则”

原则是尽量使用合成/聚合的方式,而不是使用继承。

2022-08-17 23:59:27 30

原创 【设计模式】七大原则之“迪米特法则”

一个对象应该对其他对象保持最少的了解类与类关系越密切,耦合度越大迪米特法则(Demeter Principle)又叫最少知道原则,即一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部。对外除了提供的public 方法,不对外泄露任何信息迪米特法则还有个更简单的定义:只与直接的朋友通信直接的朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系。耦合的方式很多,依赖,关联,组合,聚合等。...

2022-08-17 23:49:05 41

原创 【设计模式】七大原则之“开闭原则”

开闭原则(Open Closed Principle)是编程中最基础、最重要的设计原则一个软件实体如类,模块和函数应该对扩展开放(对提供方),对修改关闭(对使用方)。用抽象构建框架,用实现扩展细节。当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。编程中遵循其它原则,以及使用设计模式的目的就是遵循开闭原则。...

2022-08-17 22:41:27 42

原创 【设计模式】七大原则之“里氏替换原则”

里氏替换原则(Liskov Substitution Principle)在1988年,由麻省理工学院的以为姓里的女士提出的。如果对每个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有发生变化,那么类型T2是类型T1的子类型。换句话说,所有引用基类的地方必须能透明地使用其子类的对象。在使用继承时,遵循里氏替换原则,在子类中尽量不要重写父类的方法。...

2022-08-17 21:45:36 35

原创 【设计模式】七大原则之“依赖倒转原则”

高层模块不应该依赖低层模块,二者都应该依赖其抽象抽象不应该依赖细节,细节应该依赖抽象依赖倒转(倒置)的中心思想是面向接口编程依赖倒转原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比以细节为基础的架构要稳定的多。在java中,抽象指的是接口或抽象类,细节就是具体的实现类使用接口或抽象类的目的是制定好规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成。......

2022-08-17 19:34:58 121

原创 【设计模式】七大原则之“接口隔离原则”

客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上类A通过接口Interface1依赖类B,类C通过接口Interface1依赖类D,如果接口Interface1对于类A和类C来说不是最小接口,那么类B和类D必须去实现他们不需要的方法。按隔离原则应当这样处理:将接口Interface1拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则。...

2022-08-17 10:46:02 43

原创 【设计模式】七大原则之“单一职责原则”

对类来说的,即一个类应该只负责一项职责。如类A负责两个不同职责:职责1,职责2。当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为 A1,A2。

2022-08-16 23:17:17 43

原创 设计模式七大原则

编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等多方面的挑战,设计模式是为了让程序(软件),具有更好。设计模式原则,其实就是程序员在编程时,应当遵守的原则,也是各种设计模式的基础(即:设计模式为什么这样设计的依据)...

2022-08-16 23:12:18 29

原创 HttpClient实现RPC解析(通过Get方式访问)

在JDK中java.net包下提供了用户HTTP访问的基本功能,但是它缺少灵活性或许多应用所需要的功能。HttpClient起初是Apache Jakarta Common 的子项目。用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本。2007年成为顶级项目。通俗解释:HttpClient可以实现使用Java代码完成标准HTTP请求及响应。...

2022-08-15 23:04:35 108

原创 RPC简介

RPC是上层协议,底层可以基于TCP协议,也可以基于HTTP协议。一般我们说RPC都是基于RPC的具体实现,如:Dubbo框架。从广义上讲只要是满足网络中进行通讯调用都统称为RPC,甚至HTTP协议都可以说是RPC的具体实现,但是具体分析看来RPC协议要比HTTP协议更加高效,基于RPC的框架功能更多。在RPC协议中强调当A程序调用B程序中功能或方法时,A是不知道B中方法具体实现的。而HTTP更适合多平台之间相互调用。​ RPC协议是基于分布式架构而出现的,所以RPC在分布式项目中有着得天独厚的优势。...

2022-08-15 00:04:49 64

原创 throw和throws的区别

throws:在方法的声明处告诉方法的调用者,这个方法中可能会出现我声明的这些异常,然后调用者对这个异常进行处理;要么自己处理要么抛出。throws + 异常的类型(可以是多个类型,用 ‘,’ 拼接)throw + 异常对象(检查异常,运行时异常)throw:异常出现的源头,制造异常。throws:方法的声明处。throw:方法内部。...

2022-08-13 00:02:23 38

原创 Java自定义注解解析

➢RetentionPolicy.CLASS:在class文件中有效(即class保留),保留在.class文件中,但是当运行Java程序时,他就不会继续加载了,不会保留在内存中,JVM不会保留注解。默认情况下,javadoc是 不包括注解的,但是加上了这个注解生成的文档中就会带着注解了。用于修饰注解的注解,用于指定被修饰的注解能用于修饰哪些程序元素。@Target也包含一个名为value的成员变量。无参数方法的类型:基本数据类型(八种),String,枚举,注解类型,还可以是以上类型对应的数组。...

2022-08-11 00:28:35 129

原创 SpringBoot容器化部署_Dockerfile制作镜像

由于在SpringBoot中嵌入了Web容器,所以在制作SpringBoot项目的镜像时无需依赖Web容器,基于JDK制作镜像即可,接下来我们。

2022-08-07 23:02:18 166

原创 SpringBoot日志管理-Logback

屏蔽org包中的日志输出,在application.yml或者application.properties文件配置。

2022-08-07 22:11:30 34

原创 token、jwt、oauth2、session解析

●通俗地讲就是验证当前用户的身份,证明“你是你自己”(比如你每天上下班打卡,都需要通过指纹打卡,当你的指纹和系统里录入的指纹相匹配时,就打卡成功)●互联网中的认证○用户名密码登录○邮箱发送登录链接○手机号接收验证码○只要你能收到邮箱/验证码,就默认你是账号的主人●用户授予第三方应用访问该用户某些资源的权限○你在安装手机应用的时候,APP会询问是否允许授予权限(访问相册、地理位置等权限)●实现认证和授权的前提是需要一种媒介(证书)来标记访问者的身份...

2022-08-01 11:40:52 187

原创 Docker核心概念

Docker技术的三大核心概念,分别是镜像(Image)容器(Container)仓库(Repository)

2022-07-31 22:21:04 139

原创 Optional类的高级使用

Optional是一个没有子类的工具类,Optional是一个可以为null的容器对象,它的主要作用就是为了避免Null检查,防止NullpointExcepion

2022-06-28 23:53:01 140 1

原创 MybatisPlus实现多表联查

mybatisplus如何实现多表联查

2022-06-28 22:24:47 4877 1

原创 Stream常用方法介绍

StreamAPI

2022-06-15 00:05:28 218

原创 Mybatis-Plus自动生产代码模板

代码构造

2022-06-07 12:17:14 199

原创 如何使ArrayList容器转换成线程安全的容器

同步容器

2022-06-05 22:41:28 102

原创 Jdk8常见的函数式接口

jdk8新特性

2022-06-02 19:44:40 117

原创 设计模式实际开发中应用场景

观察者模式Zookeeper监听机制 是使用观察者设计模式来设计的。当客户端注册监听它关心的目录节点时, 当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,Zookeeper 会通知客 户端。广播机制消息订阅装饰者模式IO流底层架构,比如:BufferedWriter bw = new BufferedWriter(FileWriter)单列模式工具类在spring MVC框架/struts1框架中,控制器对象也是单例在Spring中,每个Bean默认就是单例的,这样

2022-05-31 19:05:27 74

空空如也

空空如也

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

TA关注的人

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