自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SpringBoot 3.1 新版HTTP调用

SpringBoot3中内置HTTP声明式客户端调用二、被调用方编写(粗略代码逻辑)三、调用方 HTTP端点编写四、 工具里封装五、调用地址定义常量 六、业务调用代码编写七、调用接口八、请求示例以及响应结果

2023-07-03 15:35:46 1053

原创 Nginx + Nacos持久化 + 集群搭建

Nginx + Nacos持久化 + 集群搭建。

2022-11-17 23:33:03 2581 1

原创 Node-Sass 解决版本冲突

当安装好node.js后 在VS code编译器中安装npm 安装好npm依赖后 运行项目 命令:npm run dev 当加载到90%的时候(node-sass 6版本之后)运行项目会发现终端会报错 如图:我这里报的错的 node-sass 6与4两个版本不兼容 因为我node.js安装的版本为16 所以我选择了设置为6版本的node-sass按照这个路径找对应的index.js文件中的代码行数 比如我这里是165 可以看到 虽然我本地的node-sass中安装的是6版本的 但是在sas.

2021-11-10 02:42:58 1262

原创 CentOS 7 RabbitMQ 解决Erlang依赖报错

正常安装步骤如下....1.gcc环境yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC-devel2.去官网下载指定erlang版本​wget http://erlang.org/download/otp_src_24.1.tar.gz​3.解压到指定目录tar -zxvf otp_src_24.1.tar.gz -C /usr/local

2021-10-17 19:18:50 548

原创 单例设计模式中三重检索

饿汉式单例public class Hungry{ private Hungry(){ } public static final HUNGRY = new Hungry(); public HUNGRY getInstance(){ //在创建好这个类时这个对象已经实例化 return HUNGRY; }}懒汉式单例public class Lazzy{ private Lazzy(){

2021-08-15 17:04:44 156

原创 MySQL索引

一、什么是索引? 概念:索引是在数据库表中字段上进行添加的,是为了提高查询效率存在的一种机制 一张表的一个字段可以添加一个索引 多个字段联合起来也可以添加索引 索引是为了缩小扫描范围存在的一种机制 索引是任何数据库优化的重要手段 SQL优化会优先考虑索引。 MySQL的查询方式: ...

2021-08-12 17:13:34 181

原创 Bean创建的生命周期

1.Bean和对象的区别:Bean是一个对象 但是 对象不一定是Bean比方说创建一个Spring容器 通过这个容器中的getBean方法可以获取这个Bean代码实例:AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);UserService userService = applicationContext.getB

2021-08-08 00:59:59 136

原创 胎教级Redis附带SpringBoot整合Redis源码分析

Redis中数据类型中分为八种 前五种为基本数据类型 后三种为特殊数据类型一、String: 1.set key value 添加键值对 2.get key 获取key中的value 3.append key value 向key中追加值(value) 4.strlen key 获取key的长度 5.setnx key v...

2021-08-01 16:35:30 349

原创 注册中心如何选择使用 及Zookeeper、Eureka、Nacos、Consul区别

从这张图中可以看出 这四个注册中心的区别最重要的是基于CAP理论什么是CAP理论?一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)分区容忍性(P):以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。注意:这三个只能同时满足CP、...

2021-07-24 23:42:32 399

原创 什么是熔断?

概念:熔断 是对微服务雪崩效应的一种链路保护机制 当扇出链路的某个微服务出错或者不可用亦或者是响应时间过慢 就会开启服务的降级操作 进而熔断该服务节点的一个调用 然后返回错误的响应信息 通俗一些来说 比如有A/B/C/D/E 这五个微服务 当其中某一个微服务出现了一些问题 导致了其他几个服务不可用(这个就是扇出效应) 这个时候就会造成雪崩 整个服务直接垮掉 而熔断服务就是应对这种雪崩效应的一种链路保护机制 这个时候就会对出现问题的服务进行熔断 让他暂时性的不可用 从而不影响其他的服务 避免了服务雪崩的状态.

2021-07-20 15:38:14 1276 1

原创 Hystrix工作原理

流程架构图:理论总结: 1.构建一个HystrixCommand或者HystrixObservableCommand对象,将请求包装到Command对象中。2.执行命令。具体类在HystrixCommand.java 具体的包 package com.netflix.hystrix;所执行的方法 execute(); queue(); 另一个接口 HystrixObservable 所在包:package com.netflix.hystrix; 所执行的方法 observe();toOb.

2021-07-18 22:40:47 150 1

原创 Hystrix服务降级

此案例是两个微服务工程的相护调用一个provider一个consumer 因此需要引入相关配置 依赖、ymlprovider yml和pomserver: port: 8001 #服务端 端口号spring: application: name: cloud-provider-hystrix-payment #服务应用名eureka: client: register-with-eureka: true #把当前服务注册到注册中心 值为true fe..

2021-07-17 22:42:56 152 1

原创 手撕轮询算法

在Ribbon负载均衡中 他默认的负载均衡为轮询 下面就来手撕一个轮询算法 第一步 先定义好接口public interface LoadBalancer { /** * 负载均衡算法规则公式: rest接口第几次请求数 % 服务器集群总数量 = 实际调用服务器位置下标 * 每次服务重启后rest接口计数从1开始 */ public ServiceInstance instaces(List<ServiceInstance> serviceI

2021-07-12 16:02:04 135

原创 Ribbon中负载均衡 将其改为随机

因为Ribbon在SpringCloud组件中也停止更新了 所以无法在其官方文档上看到它的一些信息 但是Ribbon的功能还是有很多的企业在用 那么Ribbon中的负载均衡有七种方法 默认为轮询 本文是将轮询 替换为随机 早在官方文档中可以看到Ribbon的介绍 如果要将轮询替换为随机或其他的方法 需要自定义配置类 但是这个类不能在@ComponentScan这个注解扫描所在的包或它的子包 也就是说 SpringBoot启动类中使用了@SpringBootApplication注解 这个注解中包含了@Co.

2021-07-11 23:01:27 491 1

原创 getForObject与getForEntity的区别

getForObject:返回响应体中数据转化成的对象,可以理解为jsongetForEntity:返回的是ResponseEntity的对象包含了一些重要的信息 例如以下代码ResponseEntity<CommonResult> entity = restTemplate.getForEntity(PAYMENT_URL + "/payment/get/" + id, CommonResult.class); //与getForObject的区别 是可以打印以下信

2021-07-11 22:27:16 5466 2

原创 SpringCloud整合zookeeper

1.导入依赖 注意:他自带的版本为3.5.3 可能引起jar包冲突而报异常 所以这里先排除一下他自带的版本 再引入不冲突的版本例如 3.4.9<!-- SpringBoot整合zookeeper客户端 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sta

2021-07-10 02:22:17 228

原创 Eureka自我保护机制

为什么会产生Eureka自我保护机制?为了防止EukekaClient可以正常运行,但是与EurekaServer网络不通的情况下,EurekaServer不会立刻将EurekaClient服务删除如何理解自我保护机制?默认的情况下 如果Eureka在特定的时间内(默认为90s)没有接收到某个微服务实例的心跳,EurekaServer将会注销掉这个实例 但是当网络分区发生故障时发生卡顿等现象时 微服务与EurekaServer之间无法正常通信 以上行为可能变得非常危险了 因为微服务本身是可用

2021-07-07 23:23:19 83

原创 SpringCloud中服务发现Discovery基础使用

1.由于Discovery是SpringCloud中Eureka的组件所以在使用之前需要配置相关依赖 cloud版本为:Hoxton.SR1 并且在该工程下的SpringBoot主启动类中加入@EnableDiscoveryClien注解 yml文件中也需要配置instance 代码如下 <dependency> <groupId>org.springframework.cloud</groupId> &

2021-07-07 23:07:53 3032

原创 Docker安装与卸载

1.首先 卸载旧版的Docker 命令:yum remove docker \2.安装docker 命令:yum install -y yum-utils

2021-06-21 03:32:16 432

原创 Eureka注册中心集群搭建

1.导入依赖<!-- 集群需要在多个eureka工程中导入这个依赖 --><dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> <version>1.4.7.RELEAS

2021-06-17 22:31:25 239

原创 dubbo与zookeeper配置使用方法

1.在父工程pom.xml中声明dubbo依赖<depencyManagement> <dependencies> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <!-- 注意:使用此EL表达式取版本号时 要在propertis标签

2021-06-06 15:17:58 1233

原创 如何提高代码的可维护性?

什么是可维护性?通俗来讲就是容易扩展、容易理解、容易调试、容易适配、符合常识 这就是所谓的可维护性那么,怎么提高代码的维护性呢?代码的维护性 分为两种:1.编写时维护:编写时维护是指在(程序/项目)上线后发现的bug,程序员可以及时修复并且不会引发其他的bug。保持方法的原子性,提高代码内聚,能使某一处修改的影响降到最低,这样出现bug也很少能影响其他模块儿的正常操作。2.运行时维护: 运行时的可维护性是指在(程序/项目)运行的过程中修改(程序/项目)中的某个配置使其生效,且不影响目前在进行的业务

2021-05-17 23:28:13 2158 1

原创 MySQL中为什么inner和outer可以省略

答:在MySQL中主要区分内连接和外链接的根本原因并不是这两个关键字 如果SQL语句中 带有left join或者 left outer join时 那这条SQL语句一定是外连接 在写SQL语句时这两个关键字都可以省略 写上这两个关键字只是意味着可读性好...

2021-05-14 19:17:34 1716

原创 Zookeeper与Eureka

Zookeeper:注册中心特点1.顺序一致性:同一客户端发出的请求最终会严格按照顺序被应用到zookeeper中2.原子性:要么集群中的所有机器都应用到了某个事务中 要么全都没有应用(类似于MySQL事务)3.单一系统映像:不管客户端连接到哪个zookeeper服务器上看到的数据模型都是一致的4.可靠性:只要一次更改请求被应用后,就会进行持久化,直到下一次会覆盖工作原理: 它的核心是原子广播 这个机制保证了各个服务之间的同步 实现它的协议是zab协议 这个协议有两种模式 恢复模式和广播模式 恢

2021-05-05 15:03:47 170

原创 RedisTemplate类中属性作用

1.说明当我们在SpringBoot项目中使用@Autowride这个注解来调用RedisTemplate这个类时 可以看到 这个类继承了RedisAccessor这个类这两个类都是在org.springframework.data.redis.core;这个包下并且RedisTemplate这个类实现了RedisOperations、BeanClassLoaderAware这两个接口 在RedisTemplate这个类中 有以下几个属性1.enableTransactionSupport :这

2021-04-25 23:25:27 1293

原创 SpringBootApplication注解作用

@SpringBootApplication:用这个注解修饰的类是SpringBoot的启动类它里面包含了1.@Target:是元注解 作用:用来修饰注解的作用范围此注解中有一个枚举类ElementType的数组变量value说明这注解的作用范围可以定义在一个数组. 其中ElementType这个类中包含了一些属性元素: 1.TYPE:类/接口/枚举 2.FIELD:域 3.METHOD:方法 4.PARAMETER:参数 5.CONSTRUCTOR:构造器

2021-04-20 00:56:39 528

原创 Redis是怎样做持久化的?

通过配置文件(redis.conf) redis中有快照 一般是以rdb文件结尾 在配置文件中可以通过save手动命令 [时间] [次数] 持久化时间 将内存中的数据在设置的有效期内写入多少次 那么redis会自动将内存中的数据存入到当前dump.rdb...

2021-04-14 20:22:43 249

原创 SpringMVC执行流程

客户端发出请求Dispatcher(前台控制器)找到映射器HandlerMapping、处理后返回给Dispatcher、Dispatcher找到适配器HandlerAdapter 处理器适配器然后再找到具体的类 (例如:UserController) 再返回给HandlerAdapter也就是处理器适配器、HandlerAdapter返回ModelAndView给Dispatcher(前台控制器) Dispatcher前台控制器将ModelAndView发送给视图解析器viewResolver、viewR

2021-04-13 23:42:49 73 2

原创 Redis为什么运行速度快?

1.完全基于内存 绝大部分请求是纯粹的内存操作,非常快速2.数据结构简单 对数据操作也简单 Redis中的数据结构是专门进行设计3.采用方式为单线程 避免了多线程之间抢占CPU 或者是多线程导致的切换4.使用多路I/O复用模型 非阻塞IO5.使用底层模型不同 它们之间底层实现方式以及客户端之间的通信应用协议不一致 Redis直接自己构建了VM机制 因为一般的系统调用系统函数的话会浪费一定的时间去移动和请求...

2021-04-13 00:07:51 159

原创 基于CentOS7中Linux忘记/修改root用户密码

1.进入开机启动界面 按e进入编辑界面2.找到以Linux16开头在此行末尾加入init=/bin/sh3.输入完成后 进入单用户模式(ctrl + x) 在新的编辑界面中 输入ls4.继续在光标的位置输入“mount -o remount,rw /” 然后回车5.继续输入passwd 然后回车 注:输入密码要超过8位 并且要输入两遍否则会修改失败6.接着继续输入 touch /.autorelabel7.继续输入 exec /sbin/init8.然后等待自动重启 在图形化界面

2021-04-08 22:18:18 65

原创 Linux中Vim编辑器使用命令

Vim中有三种模式1.普通模式常用语法:1.yy 复制当前一行2.数字+yy 复制当前光标下的几行3.u 撤销 类似于windows中ctrl+z4.dd 删除当前行5.x 向后删除一个字母X 向前删除一个字母6.yw 复制一个词7.dw 删除一个词8.shift + ^ : 移动到当前行号的头部9.shift + $ : 移动到当前行结尾10.G 移动到当前页的末尾11.数字 + shift + g : 移动到目标行数12.v 进入字符选择模式 选择完成后y 复制p 粘贴13

2021-04-06 23:08:47 55

原创 线程的生命周期

1.创建:在生成线程对象,并没有调用该对象的start方法,这钟时候就是处于创建状态2.就绪:当调用了线程对象的start方法之后,该线程就进入了就绪状态,但是此时线程调度程序还没有把该线程设置为当前线程,此时处于就绪状态。在程序运行之后,从等待或者睡眠中回来之后,也就处于就绪状态。3.运行状态:线程调度程序将处于运行状态的线程设置为当前线程,此时线程就进入了运行状态,开始运行run方法中的代码块儿4.阻塞状态:线程正在运行的时候,被暂停,通常是为了等待某个时间的发生之后再继续运行。sleep、wai

2021-03-31 19:35:43 57

原创 ArrayList和Vector之间的区别

ArrayList:非同步 线程不安全更常用一些因为我们使用Collections工具类轻易地获取同步列表和只读列表 如果底层数组存储不够的时候会扩容到原来的0.5倍Vector:同步 线程安全 Vector的底层很多方法都加了 synchronized 关键字 如果底层存储不够的时候扩容的范围是原来的1倍 比ArrayList多了0.5倍...

2021-03-29 23:47:22 56

原创 Array和ArrayList之间的区别

Array:可以容纳基本类型和对象、可以指定大小、没有像ArrayList那么全面的功能例如addAll()、removeAll()ArrayList:只能容纳对象不能容纳基本类型、大小固定、相比于Array方法更多更全面

2021-03-29 23:39:52 142

原创 String、StringBuffer、StringBuilder之间的区别

Sting:String声明的是不可变的对象、每次操作都会生成新的对象,然后将指针指向新的String对象StringBuffer:StirngBuffer是线程安全的,适合在多线程情况下使用StringBuilder:StringBuilder是线程不安全的,适合于单线程的使用...

2021-03-29 23:36:46 42

原创 Spring AOP实现原理

AOP 主要分为两种代理模式1.JDK: JDK的动态代理主要设计java.lang.reflect包中的 Proxy、InvocationHandler这两个Class 但是InvocationHandler只是一个接口 可以通过实现这个接口定义横切的逻辑 并且通过反射机制调用目标类的代码 动态的将横切逻辑与业务逻辑织在一起 Proxy利用InvocationHandler动态创建一个符合某一个接口的实例 生成目标类的代理对象 qi2.cglib...

2021-03-27 21:51:29 65

原创 什么是Spring Beans 以及Bean的生命周期

Spring Beans 是构成Spring应用核心的Java对象 这些对象由Spring IOC容器实例化、组装、管理。这些对象通过容器中配置的元数据创建,基于xml配置文件在Spring配置文件中创建的对象通常默认都是单例的 bean标签中有一个属性名为scope 如果设置为singleton 表示为单例对象 如果设置为prototype 表示不是同一个对象 如果不写这个属性的话 那默认就是单例Bean的生命周期1.容器启动成功以后 会对scoope属性进行加载 默认是singleton(懒加载)

2021-03-26 22:42:50 329

原创 Spring框架基础

spring是一种轻量级 一站式服务的企业级开发框架特点:1.轻量从占用大小和开销两个角度来考虑 Spring框架都是轻量的。完整的Spring框架大小仅仅有1MB左右多的jar包里发布,并且Spring所需要的处理开销也非常的少。2.控制反转(IOC)IOC就是控制反转 通过ioc容器促进了解耦 当我们使用ioc容器时,一个对象依赖的另一个对象会通过被动的方式传递进来 简而言之就是SpringIOC容器来创建对象不需要开发人员手动编写对象3.面向切面编程(AOP)可以理解为OOP的升级版 对

2021-03-24 23:02:01 99

原创 转发与重定向的区别

1.转发:(forward) 直接转发 客户端和浏览器只发出一次请求 JSP、Servlet或者是别的一些信息 由第二个信息资源响应请求,转发是发生在服务器内部跳转 跳转后地址栏不变2.重定向:(sendRedirect) 间接转发 是两次http请求 发生在服务器外部 跳转后地址栏发生改变...

2021-03-24 22:35:41 46

原创 什么是反射?获取反射对象方式 以及常用方法

什么是反射?通俗的话来讲就是反向映射 来获取类的能力可以用其中的方法来获取类的名称、包、属性、方法、类型、类加载器等 可以调用任意对象的方法 获取任意对象的属性,并且能改变对象的属性 还可以判断任意一个对象所属的类 并且 反射可以创建一个对象。获取反射对象的方式分为三种 例如:1.ClassforName(“com.mysql.jdbc.Driver”);2.User user = new User();Class clazz = user.getClass();3.User.class();

2021-03-24 00:15:49 419

空空如也

空空如也

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

TA关注的人

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