自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 网关与Gateway

只有当匹配上规则时,断言才为true,此时请求才会被直接路由到目标地址(目标服务器),或先路由到某过滤器链,经过过滤器链的层层处理后,在路由到相应的目标地址(目标服务器)。当请求的断言为true时,会被路由到设置好的过滤器,以及请求或响应进行处理,例如,可以为请求添加一个请求参数,或对请求URI进行修改,或为响应添加header等。Reactive Streams是响应式编程的规范,定义了响应式编程的相关接口,只要符合该规范的库,就称为 Reactive 响应式编程库。,在此之上,后来又产生了。

2024-07-04 17:33:07 262

原创 选择远程调用的底层实现技术

由于JDK的URLConnection不支持连接池,通信效率很低,所以生产中是不会使用该默认实现的。在Spring.cloud.openfeign.httpclient下有大量HttpClient的相关属性设置。在spring.cloud.openfrign.okhttp.enabled默认值为false,表明默认没有启动OKHttp。spring.cloud.openfeign.httpclient.enabled默认为true。用户可根据业务需求选择要使用的远程调用底层实现技术。

2024-07-04 16:17:20 237

原创 Dockerfile构建一个包含多个SpringBoot应用程序的镜像

在dockerfile中,可以定义多个步骤来构建镜像,每个步骤都对应一个镜像层,这种模块化设计使得镜像的构建更加灵活和可定制,例如,可以单独构建包含基础依赖的镜像层,然后在需要时将其与其他应用程序层合并,从而创建完整的镜像。:Dockerfile允许对镜像的构建过程进行优化,例如,通过将多个RUN指令合并成一个,可以减少镜像的层数,从而减小镜像的大小并提高构建速度,此外还可以使用缓存机制来加速重复的构成。: Dockerfile 中的指令清晰明了,记录了构建镜像所需的所有步骤和依赖关系。

2024-07-01 13:48:19 759

原创 Mybatis-Plus自动解析json字符串

2024-06-14 15:33:07 467

原创 深入理解一下栈

2、栈:栈内存,主管程序的运行,生命周期和现成同步;栈满,抛出 StackOverflowError。为什么 main()方法 最先执行,最后结束?线程结束,栈内内存也就释放了,对于栈来说,栈内:8大基本类型+对象引用+实例的方法。当然是因为 main()方法入栈啦。栈 + 堆 + 方法区:交互关系。一旦线程结束,栈就Over!栈 运行原理: 栈帧。

2024-05-27 15:40:00 210

原创 JMM 理解

对应的就是物理机,它有存放数据的存储区:堆、栈等由JVM管理的内存(对应于物理机的内存)、执行数据计算的执行单元:线程(对应于物理机的CPU)、加速线程执行的本次存储区:可能会从 存储区里分配一块空间来存储线程本地数据,比如栈(对应于物理机的Cache)。也就是说,在栈中的变量(局部变量、方法定义的参数、异常处理的参数)不会在线程之间共享,也就不会有内存可见性的问题,也不受内存模型的影响。【JMM】 允许编译器和缓存以数据在处理器特定的缓存(或寄存器)和主存之间的移动次序拥有重要的特权。

2024-05-27 15:39:50 428

原创 SpringBoot配置Swagger

contact(new Contact("五道口职业技术学院", "http://wdk.com","xxx@qq.com"))select():返回ApiSelectorBuilder对象,通过对象调用build()可以创建Docket对象。@Api(tags = {"MyController"}, description = "用户访问控制器").description("这里是Swagger的描述")@ApiOperation(value = "接口描述", notes="接口提示信息")

2024-04-29 15:52:07 383

原创 Mybatis-Plus使用方法

MyBatis-Plus 提供了丰富的增强版的 CRUD 方法,使得开发者能够更简洁、高效地进行数据库操作。如果你需要实现自定义的 CRUD 方法,可以在 Mapper 接口中定义方法,并在对应的 XML 文件中编写 SQL 语句。MyBatis-Plus 还提供了很多其他功能,如分页插件、性能。首先,确保你的 Maven 项目中已经添加了 MyBatis-Plus 的相关依赖,包括核心依赖和数据库驱动依赖。创建一个与数据库表对应的实体类,并使用 MyBatis-Plus 提供的注解来配置字段和主键等。

2024-04-10 23:04:30 285

原创 GC入门介绍

JVM在进行GC(垃圾回收机制)时,并不是对这三个区域统一回收。坏处: 浪费了内存空间~~: 多了一半空间永远是空to。Eden, form ,to 老年区, 说说他们的特点!标记清除法,标记压缩,复制算法,引用计数法,怎么用的?GC两种类: 轻GC(普通的GC), 重GC(全局GC)活的对象移到幸存区中:一旦Eden区被GC后,就会是空的。4、轻GC 和 重 GC 分别在什么时候发生?缺点:两次扫描,严重浪费时间,会产生内存碎片。②: 幸存区(from 来, to 去)好处: 没有内存的碎片~!

2024-04-02 14:23:20 144

原创 服务端如何处理请求?有哪些方式?

③AIO(异步非阻塞方式):客户端发起一个 I/O 操作然后立即返回,等 I/O 操作真正完成以后,客户端会得到 I/O 操作完成的通知,此时客户端只需要对数据进行处理就好了,不需要进行实际的 I/O 读写操作,因为真正的 I/O 读取或者写入操作已经由内核完成了。②NIO(同步非阻塞方式):客户端 发一次请求,服务端并不是每次都创建一个新线程来处理,而是通过I/O多路复用技术,进行处理。就是把多个I/O的阻塞复用到同一个select的阻塞上,从而使系统在单线程的情况下可以同时处理多个客户端请求。

2024-04-01 18:06:41 380

原创 Native关键字、方法区

它的具体做法是: Native Method Stack 中登记native方法,在(Exception Engine)执行引擎。Native(很重要): 凡是带了native 关键字的,说明java的作用范围达不到了,回去调用底层C语言的库!方法区是被所有线程共享,所有字段和方法字节码,以及一些特殊方法,接口代码也在此定义,Java 程序驱动打印机,管理系统,在企业级应用中较为少见。方法区:static, final, class, 常量区。简单说,所有定义的方法的信息都保存在该区域,

2024-03-29 16:18:01 147

原创 沙箱安全机制

当前最新的安全机制实现,则引入了域(Domain)的概念,虚拟机会把所有代码加载到不同的系统域和 应用域,系统域部分专门负责与关键资源进行交互,而各个应用域部分则通过系统域的部分代理来对各种需要的资源进行访问。虚拟机为不同的类加载器 载入的类提供了不同的命名空间,命名空间由一系列唯一的名称组成,每一个被装载的类将有一个名字,这个命名空间是由Java虚拟机为每一个类装载器维护的,他们互相之间甚至不可见。java.security下的类和扩展包下的类,允许用户为自己的应用增加新的安全特性,包括。

2024-03-29 15:47:21 766

原创 JVM双亲委派机制

因为:会一层一层的向上找main方法,找到rt.jar包中java.lang包中的String的main方法。3、启动加载器 检查是否能够加载当前这个类,能加载就结束,使用当前的加载器。2、将该请求向上委托给 父类加载器,一直向上委托,知道启动类加载器。//1、 APP --->EXC---->BOOT(最终执行)Java = C++ --;java 调用不到~ C、C++//双亲委派机制:为了保证安全。1、类加载器收到类加载的请求,抛出异常,通知子加载器进行加载。

2024-03-29 14:50:56 351

原创 JAVA程序在JVM中运行

作用: 加载 Class文件 ————> new Student();//类是模板 是抽象的, 对象是具体的。比如: Car car1 = new Car();是 同一个 Car地址。

2024-03-29 14:39:17 200

原创 走进JVM

Java程序之所有能够实现跨平台,本质就是因为它是运行在虚拟机之上的,而不同的平台,只需要安装对应平台的Java虚拟机即可运行(在JRE中包含),所有的java程序都采用统一的标准,在任何平台编译出来的。JVM只是跑Java程序的虚拟机, 与VmWare不同。安装了JRE之后,就会自带JVM。Linux 虚拟机跑的是整个系统。JVM底层是由C/C++编写的。也是同样的,最后实际上是。

2024-03-29 09:52:20 211

原创 高并发场景下 如何保证接口的幂等性

2024-03-22 10:55:25 100

原创 集群和分布式的区别

举例来说: 一个小公司,只有一个人,财务、开发、行政,全都一个人干,大家可以想想,累死也干不完呀,于是便将公司的业务,细细划分,进行扩招,每个部门都有人,并且他们之间是有联系的,要不然你在这家公司搬砖,别人家的财务给你发工资,想想都不可能,这就。简单来说,就是 多个人一起做不同的事,把一个大问题拆分为多个小问题,并分别解决,最终协同合作。,便是 在多台服务器上,部署相同的应用程序---------->分担客户端的请求压力。简单来说,就是 多个人做同一件事,比如 软件开发,需要多个程序员进行同一个软件开发。

2024-03-22 09:56:05 170

原创 Http协议和Rpc协议有什么区别?

它是定位在实现(不同计算机应用之间)的一个数据通信,屏蔽了通信的底层复杂度,让我们的开发者,能够像调用本地服务一样,去完成远程服务的一个调用,因此,RPC网络通信协议层呢,也可以使用http协议来去实现,例如:grpc、OpenFeign,它底层都采用了http协议,作为一个通信的基础。RPC协议: RPC只是通信协议的一个规范,它并没有具体的实现,只有按照RPC通信协议规范,去实现的。Http协议:它是一个已经实现,并且成熟的应用层协议,它定义了通信报文的一些格式。,才是协议真正具体的一个实现。

2024-03-21 16:44:38 369

原创 实现序列化和反序列化为什么要实现Serializable接口?

表示该类的对象可以被序列化,通过判断对象,是否实现了 Serializable这个接口,可以遵循该规范,确保对象的序列化操作是合法的。Java中 实现Serializable 这个接口,是为了 支持对象的序列化 和 反序列化操作,1、可以确保,那些被设计为 可序列化的类的对象,才能够被序列化,这是一种类型安全性的保障,要对序列化对象实现 Serializable这个接口,有几方面的原因,当一个类实现了Serializable接口的时候,表明这个类的对象,没有定义任何方法,仅仅起到一个标记作用。

2024-03-18 17:14:34 168

原创 Redis 与Mysql 如何保证数据一致性

如果先删除缓存,在更新数据库,理想情况下,是应用下次访问Redis的时候,发现Redis里面的数据是 空的,那么就会从数据库中加载,保存到Redis里面,也就是说数据理论上是一致的,但是 在极端情况下,由于 删除Redis和更新数据库,这两个操作并不是原子操作,所以,在这个过程中,如果出现其他线程来访问,还是会出现数据不一致的问题,所以 如果需要在极端情况下,仍然去保证 Redis和Mysql的 数据一致性,就只能采用最终一致性的一个方案。如果缓存更新失败,就会导致数据库和 Redis中的数据是不一致的。

2024-03-18 16:58:42 206

原创 Cookie、Session、Token的区别?

再把响应的JWT TOKEN传入到后端,后端拿到Token,就会进行JWT的解密,然后会验证 signature,如果检验成功,信息没有被篡改,就会进行放行,正常的进行响应,使用JWT,我们不用依赖后端的任何存储,也不需要前端的任何存储,就是一个加密之后的字符串而已。3、然后会把创建好的JWT返回给前端,前端拿到JWT的TOKEN,如果你想要数据的载体,只要进行分割,分割之后,拿到第二段(第二段保存的是数据的载体),拿到之后,通过Base64的方式进行解码即可。存储在客户端,也就是说存储在浏览器中,

2024-03-18 14:59:25 420

原创 Override 与 Overload的区别

// 正确,method1 方法参数过载,可以有不同的访问权限和返回值类型。}/ /正确,method1 方法参数过载,可以有不同的访问权限和返回值类型。注意:被重写的方法访问权限不能为 private,因为 private 修饰的方法子类没有访问权限,更不要提重写。所以方法重写要求很严格,除了方法体内部的实现和访问权限,其他的都要和父类中需要被重写的方法保持一致。同样的方法名称,参数列表,返回类型,抛出的异常(或者是父类抛出的异常的子类),子类重写一个。抛出的异常相同(或者是父类抛出的异常的子类)。

2024-03-16 16:45:41 351 1

原创 报错:Required URI template variable ‘versionId‘ for method parameter type String is not present

这个错误证明,你在参数中使用了@PathVariable注解 就是这样:错误原因是:注解中需要改为:

2024-03-14 18:00:37 946 1

原创 项目报错Cause: java.lang.IllegalStateException: No typehandler found for property features

代码中碰见这个报错,愁了半天时间,发现我数据表中的features字段定义的JsonArray,在Mapper映射类中,不能像其他 普通字段一样,必须加 TypeHandle。

2024-03-14 17:52:43 529 1

原创 JAVA 深拷贝与浅拷贝

深拷贝在拷贝一个对象时,除了对基本数据类型的成员变量进行拷贝外,对引用类型的成员变量也会进行拷贝,并创建一个新的对象来保存引用类型的成员变量。这意味着深拷贝会对整个对象图进行拷贝,包括对象的所有基本数据类型的成员变量值和所有引用数据类型的成员变量所引用的对象,直到该对象可达的所有对象。因此,两个引用对象分别指向两个完全不同的对象,且两个引用对象的引用也分别指向两个不同的对象。浅拷贝在拷贝一个对象时,对对象的基本数据类型的成员变量进行拷贝,但对引用类型的成员变量只进行引用的传递,并没有创建一个新的对象。

2024-03-11 17:51:52 268

原创 Java创建对象的五种方式

比如 Person p2 = (Person) Class.forName("com.ys.test.Person").newInstance();Clone 是 Object 类中的一个方法,通过 对象A.clone() 方法会创建一个内容和对象 A 一模一样的对象 B,clone 克隆,顾名思义就是创建一个一模一样的对象出来。实际上第二种方法利用 Class 的 newInstance() 方法创建对象,其内部调用还是 Constructor 的 newInstance() 方法。

2024-03-11 17:32:48 397

原创 用Docker 方式 安装Nginx

2、 docker run -d -p 8080:80 nginx 将Nginx容器的80端口映射到主机的8080端口。3、执行完 访问 http://localhost(如果你用centos安装注意是虚拟机的地址):8080。执行完 提示 welcome Nginx。

2024-03-08 17:49:13 172 1

原创 索引失效的情况

数据准备 新建一张学生表,并添加id为主键索引,name为普通索引,(name,age)为组合索引CREATE TABLE `student` ( `id` int NOT NULL COMMENT 'id', `name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '姓名', `age` int DEFAULT NULL COMMENT '年龄', `birthday` datetime DEFAULT NULL COMME

2024-03-07 22:40:07 654

原创 如果查询的字段即在联合索引,又在单列索引,先走哪个,为什么?

回答问题之前,我们先来了解一下为了是最常用的手段。那么问题来了,如果。

2024-03-07 22:31:46 878

原创 Git命令学习

进入公司,肯定少不了Git拉取仓库代码,那么————>它来了,它带着魔法走来了———>Git1、Git是什么?Git是目前世界上最先进的(没有之一)。2、首先让我们来在Linux虚拟机上边输入"Git"命令,来看看系统有没有安装Git像上面的命令,有很多Linux会友好地告诉你Git没有安装,还会告诉你如何安装Git。安装git 由于有好多环境,比如windows、linux、咱们今天主要将命令啦,想在什么环境上安装 git 就去搜索一下,会出来很多。

2024-03-07 22:05:18 441

原创 Linux命令学习————>方法

归根结底,Linux命令学习——————>最重要的就是:一定要自己多敲、多练、多看,总看是记不住的,熟能生巧,各位卷友,一定要记得呀!´༎ຶД༎ຶ`) 哭死,相信你们一定比我强!2、也是因为在公司实习过程中,经理让我用虚拟机搭建各种的服务,比如prometheus,jenkins...等等,然后就一直搜索怎么搭建,当然也遇到很多的坑,因为只会看着敲命令,不过敲得时间长了,然后 命令又很少,然后就记住了。好啦,拼命学习的宝子们!先介绍这么多吧,你们一定要练,练上5、6、7、8遍 一定就是大神了。

2024-03-07 21:06:20 828

原创 Centos 利用docker-compose搭建Loki+promtail日志收集系统

使用命令:/data/docker-compose/loki下 : docker-compose up -d启动。/data/docker-compose/loki/loki/rules/test/ssh.yml如下。/data/docker-compose/loki/promtail/config.yml如下。用户:{{ $labels.dst_ssh_user_name }}"目标IP: {{ $labels.dst_ssh_ip }}loki/loki/local-config.yaml如下。

2024-03-07 10:17:24 1227

原创 Centos7利用docker搭建prometheus+grafana,监控Nginx、mysql、process、linux主机、redis........

虚拟机所需cpu:8个cpu及以上安装docker 映像: yum install -y docker-io启动docker 守护线程:sudo systemctl start docker下载镜像包启动 node-exporter安装netstat 命令:查看 端口是否起来:访问url:虚拟机ip:9100检查哪个占用了端口:访问URL发现拒绝访问发现是由于防火墙开着,所以访问不了查看防火墙:sudo systemctl status firewalld。

2024-03-07 09:48:44 1104

原创 修改VMware ip地址

1、先进入window桌面,

2024-03-07 09:42:01 559

原创 Spring的核心IOC(控制反转)和AOP(面向切面)

(1)在Spring的工作方式中,所有的类都会在spring容器中登记,告诉spring这是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。3、AOP代表的是一个横向的关 系,将“对象”比作一个空心的圆柱体,其中封装的是对象的属性和行为;总而言之,在传统的对象创建方式中,通常由调用者来创建被调用者的实例,而在Spring中创建被调用者的工作由Spring来完成,然后注入调用者,即所谓的依赖注入or控制反转。

2024-03-07 09:34:26 699

原创 SpringMVC的工作流程——>详解

key是url的某个字段,value是bean的id。通过获取到适合的HandlerAdapter处理器适配器执行HandlerAdapter中的 handle方法(这个handle只是处理器适配器中的一个方法而已),方法调用Handler里对应的bean,执行该bean对应的Controller类。URL是一种具体的URI,它是URI的一个子集,它不仅唯一标识资源,而且还提供了定位该资源的信息。URI 是一种语义上的抽象概念,可以是绝对的,也可以是相对的,而URL则必须提供足够的信息来定位,是绝对的。

2024-03-06 17:38:56 1263

原创 jenkins最新版+jdk1.8+gradle-6.8-all虚拟机搭建jenkins构建项目时遇到的一些难题

3、将旧版本的jenkins,将里边的plugins插件wanzhengcopy到旧版本的jenkins版本镜像中,提示不可以使用了,由于jenkins版本太低。2、docker 运行一个Jenkins镜像的话,Jenkins镜像里边自带的 jdk17,由于我的项目用的jdk1.8,故而,构建流水线成功不了。1、使用gradle-6.8-all + jdk1.8.0_402;gradle build 出现问题了。

2024-01-30 17:57:46 234

原创 mysql5.7,mybatis对数据库中json字段中list数组的截取并判断出现的坑

上边这种截取方式 会把 " 双引号截取出来,然后就截取10位,一直报错,后来截取11位 参数加了个双引号,就满足条件了,不过 这不是最优解。需求:需要将下边json字段中的endTime 截取成2023-12-27的形式,然后并对参数进行判断。一开始用怎么截取都是会报错的,然后各种搜索,看是哪里的问题始终没解决,后来才知道。基本是 left函数的语法问题,-> 带引号,->> 不带引号。分享一下SUBSTRING截取的坑。

2023-12-29 09:32:13 442 1

空空如也

空空如也

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

TA关注的人

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