- 博客(55)
- 收藏
- 关注
原创 JSP详解使用
基本概念EL表达式,全称是Expression Language。意为表达式语言。它是Servlet规范中的一部分,是JSP2.0规范加入的内容。其作用是用于在JSP页面中获取数据,从而让我们的JSP脱离java代码块和JSP表达式。基本语法EL表达式的语法格式非常简单,写为${表达式内容}例如:在浏览器中输出请求域中名称为message的内容。假定,我们在请求域中存入了一个名称为message的数据(Java代码块JSP表达式EL表达式<br/>%>${message}
2024-08-31 08:02:10
2253
原创 Sentinel熔断与限流
什么是雪崩问题?微服务之间相互调用,因为调用链中的一个服务故障,引起整个链路都无法访问的情况。限流是对服务的保护,避免因瞬间高并发流量而导致服务故障,进而避免雪崩。是一种预防措施。超时处理、线程隔离、降级熔断是在部分服务故障时,将故障控制在一定范围,避免雪崩。是一种补救措施。解决雪崩问题的常见方式有四种:超时处理:设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待舱壁模式:限定每个业务能使用的线程数,避免耗尽整个tomcat的资源,因此也叫线程隔离。熔断降级:由断路器。
2024-08-29 00:15:58
1193
原创 Nacos详解使用
Nacos 数据模型 Key 由三元组唯一确定, Namespace默认是空串,公共命名空间(public),分组默认是 DEFAULT_GROUP。是什么类似Java里面的package名和类名,最外层的Namespace是可以用于区分部署环境的,Group和DataID逻辑上区分两个目标对象默认值默认情况:Namespace=public,Group=DEFAULT_GROUPNacos默认的命名空间是public,Namespace主要用来实现隔离。
2024-08-27 19:57:27
1973
原创 LoadBalancer负载均衡
LB负载均衡(Load Balance)是什么简单的说就是将用户的请求平摊的分配到多个服务上,从而达到系统的HA(高可用),常见的负载均衡有软件Nginx,LVS,硬件 F5等spring-cloud-starter-loadbalancer组件是什么Spring Cloud LoadBalancer是由SpringCloud官方提供的一个开源的、简单易用的客户端负载均衡器,它包含在SpringCloud-commons中用它来替换了以前的Ribbon组件。
2024-08-26 22:35:56
977
原创 Gateway详解使用
该项目提供了在 Spring WebFlux 或 Spring WebMVC 之上构建 API 网关的库。Spring Cloud Gateway 旨在提供一种简单而有效的方法来路由到 API 并为它们提供跨切关注点,例如:安全性、监控Cloud全家桶中有个很重要的组件就是网关,在1.x版本中都是采用的Zuul网关;但在2.x版本中,zuul的升级一直跳票,SpringCloud最后自己研发了一个网关SpringCloud Gateway替代Zuul,
2024-08-26 18:06:14
1168
原创 OpenFeign服务的接口调用
Feign 是一个声明式 Web 服务客户端。它使编写 Web 服务客户端变得更加容易。要使用 Feign,请创建一个接口并对其进行注释。它具有可插入注释支持,包括 Feign 注释和 JAX-RS 注释。Feign 还支持可插入编码器和解码器。Spring Cloud 增加了对 Spring MVC 注释的支持,以及对使用 Spring Web 中默认使用的相同 HttpMessageConverters 的支持。
2024-08-25 16:25:24
1244
原创 Resilience4J服务熔断隔离与限流
Circuit Breaker只是一套规范和接口,落地实现者是Resilience4J断路器开启或者关闭的条件当满足一定的峰值和失败率达到一定条件后,断路器将会进入OPEN状态(保险丝跳闸),服务熔断当OPEN的时候,所有请求都不会调用主业务逻辑方法,而是直接走fallbackmetnod兜底背锅方法,服务降级一段时间之后,这个时候断路器会从OPEN进入到HALF_OPEN半开状态,会放几个请求过去探探链路是否通?如成功,断路器会关闭CLOSE(类似保险丝闭合,恢复可用);如失败,继续开启。
2024-08-24 17:53:30
1754
原创 MySQL索引失效的场景
表中的某些列可能会存储 NULL 值,如果把这些 NULL 值都放到记录的真实数据中会比较浪费空间,所以 Compact 行格式把这些值为 NULL 的列存储到 NULL值列表中。如果存在允许 NULL 值的列,则每个列对应一个二进制位(bit),二进制位按照列的顺序逆序排列。二进制位的值为1时,代表该列的值为NULL。二进制位的值为0时,代表该列的值不为NULL。另外,NULL 值列表必须用整数个字节的位表示(1字节8位),如果使用的二进制位个数不足整数个字节,则在字节的高位补 0。
2024-08-22 21:49:31
1068
原创 linux下搭建MySQL8.0.25一主一从
主从复制是指将主数据库的 DDL 和 DML 操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。MySQL支持一台主库同时向多台从库进行复制, 从库同时也可以作为其他从服务器的主库,实现链状复制。
2024-08-21 09:29:57
1219
原创 MySQL慢查询的查找语法
能看到页的数量是刚才的 270 倍,但是查询的效率并没有明显的变化,实际上这两个 SQL 查询的时间基本上一样,就是因为采用了顺序读取的方式将页面一次性加载到缓冲池中,然后再进行查找。虽然页数量(last_query_cost)增加了不少,但是通过缓冲池的机制,并没有增加多少查询时间。使用场景:它对于比较开销是非常有用的,特别是我们有好几种查询方式可选的时候。
2024-08-16 23:36:15
2145
原创 MySQL中的锁事
表级锁是MySQL中最基本的锁策略,是MySQL最早采用的锁策略。表级锁的特点是开销小,加锁快,不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。在MySQL中,对MyISAM表的读操作,会自动加上读锁,对MyISAM表的写操作,会自动加上写锁。InnoDB引擎在必要情况下会使用表锁,但主要是使用行锁来实现多版本并发控制(MVCC),它能提供更好的并发性能和更少的锁冲突。总的来说,表锁适用于读操作多、写操作少的应用,当并发争用不是特别激烈,以及记录级锁并发控制开销大于访问冲突开销的情况。
2024-08-14 14:47:29
1201
原创 JDBC的使用
注册驱动【依赖的驱动类,进行安装】获取连接【Connection建立连接】创建发送SQL语句对象【Connection创建发送SQL语句的Statement】发送SQL语句,并获取返回结果【Statement 发送sql语句到数据库并且取得返回结果】结果集解析【结果集解析,将查询结果解析出来】资源关闭【释放ResultSet、Statement 、Connection】
2024-08-13 22:23:29
1280
1
原创 Java中XML的解析
当将数据存储在XML后,我们就希望通过程序获取XML的内容。如果我们使用Java基础所学的IO知识是可以完成的,不过你学要非常繁琐的操作才可以完成,且开发中会遇到不同问题(只读、读写)。人们为不同问题提供不同的解析方式,使用不同的解析器进行解析,方便开发人员操作XML。XML DOM 和 HTML DOM一样,XML DOM 将整个XML文档加载到内存,生成一个DOM树,并获得一个Document对象,通过Document对象就可以对DOM进行操作。以下面books.xml文档为例。
2024-08-12 23:01:19
5889
2
原创 函数式接口+Stream流
一、函数式接口1.1、函数式接口概述概念有且仅有一个抽象方法的接口如何检测一个接口是不是函数式接口@FunctionalInterface放在接口定义的上方:如果接口是函数式接口,编译通过;如果不是,编译失败注意事项我们自己定义函数式接口的时候,@FunctionalInterface是可选的,就算我不写这个注解,只要保证满足函数式接口定义的条件,也照样是函数式接口。但是,建议加上该注解1.2、函数式接口作为方法的参数package com.jdk8.functiona
2024-08-11 21:45:45
506
原创 JDK8中的Lambda表达式+方法引用
在数学中,就是有输入量、输出量的一套计算方案,也就是“拿什么东西做什么事情”。相对而言,面向对象过分强调“必须通过对象的形式来做事情”,而函数式思想则尽量忽略面向对象的复杂语法——。我们真的希望创建一个匿名内部类对象吗?不。我们只是为了做这件事情而创建一个对象。我们真正希望做的事情是:将run方法体内的代码传递给Thread类知晓。——这才是我们真正的目的。而创建对象只是受限于面向对象语法而不得不采取的一种手段方式。那,有没有更加简单的办法?
2024-08-11 16:43:24
489
原创 Java中线程的6种状态
那如果在RUNNABLE的线程再次调用start呢?其实就会 线程状态的异常。就是底层源码在调用start()方法的时候 针对状态做了判断, 如果不是NEW状态就会报线程状态的异常。如果线程执行完,再调用一次start又会怎么样?所以肯定也是报错啊!我们知道 , 虽然很多八股文面试题中说Java创建线程的方式有3种、4种,或者更多种,但实际上他们底层都是new Thread()那当创建完一个Thread,这时线程处于NEW状态,那这时调用start()方法,会让线程进入到RUNNABLE状态。
2024-08-11 10:21:39
787
原创 Java中的反射
问题:IDEA中的对象是怎么知道类有哪些属性,哪些方法的呢?在运行时获取【任意】一个对象所属的类型在运行时获取【任意】一个类的构造在运行时构造【任意】一个类的对象在运行时获取【任意】一个类所具有的成员变量在运行时设置或者获取【任意】一个属性的值在运行时获取【任意】一个类所具有的成员方法在运行时调用【任意】一个对象的方法提示!在所有的具备的功能中,都是针对任意的对象进行操作,说明反射机制具备很强的灵活性和通用性。
2024-08-11 09:51:52
4934
1
原创 MySQL练习题(五)
当前页 p_curr_page , where条件p_where_string , 排序条件p_order_string。表名p_table_name , 查询字段p_fields , 分页单位 p_page_size。总记录数p_out_counts。
2024-08-05 22:49:24
477
原创 详解线程池的使用
线程池其实就是一种多线程处理形式,处理过程中可以将任务添加到队列中,然后在创建线程后自动启动这些任务。这里的线程就是我们前面学过的线程,这里的任务就是我们前面学过的实现了Runnable或Callable接口的实例对象;我们其实可以这样理解:**线程池:**其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源。由于线程池中有很多操作都是与优化资源相关的,我们在这里就不多赘述。
2024-08-05 20:12:24
1458
原创 生产者与消费者
生产者消费者模式是一个十分经典的多线程协作的模式,弄懂生产者消费者问题能够让我们对多线程编程的理解更加深刻。所谓生产者消费者问题,实际上主要是包含了两类线程:一类是生产者线程用于生产数据一类是消费者线程用于消费数据为了解耦生产者和消费者的关系,通常会采用共享的数据区域,就像是一个仓库生产者生产数据之后直接放置在共享数据区中,并不需要关心消费者的行为消费者只需要从共享数据区中去获取数据,并不需要关心生产者的行为Object类的等待和唤醒方法。
2024-08-05 16:08:43
446
原创 MySQL练习题(四)
注意:这样的回答会生成一个笛卡尔积,这样每一个女学生都会和每一个女教师进行匹配,导致结果集里有大量不必要的重复组合。教师信息表(Teacher)学生表(Student)课程表(Course)
2024-08-03 23:26:59
823
原创 MySQL练习题(二)
- 将成绩表(sc)与课程表(course)进行连接,连接条件是成绩表的课程编号(cid)与课程表的课程编号(cid)相等。-- 将课程表(course)与教师表(teacher)进行连接,连接条件是课程表的教师编号(tid)与教师表的教师编号(tid)相等。(6)、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名。(4)、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名。(1)、查询“001”课程比“002”课程成绩高的所有学生的学号。
2024-08-03 11:29:03
315
原创 Java中的日期类
java.util.Date`类 表示特定的瞬间,精确到毫秒。继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,我们重点看以下两个构造函数说明:由于中国处于东八区(GMT+08:00)是比世界协调时间/格林尼治时间(GMT)快8小时的时区,当格林尼治标准时间为0:00时,东八区的标准时间为08:00。简单来说:使用无参构造,可以自动设置当前系统时间的毫秒时刻;指定long类型的构造参数,可以自定义毫秒时刻。
2024-08-01 23:01:26
2213
原创 Java中包装类
概述:在Java的数据类型中,存在八大基本数据类型,基本类型是属于简单的类型,这些类型的变量是没有属性和方法的,仅仅是用于表示一个数值而已,不具备操作这个数据的属性和方法。这是非对象的开发方式,针对这些类型Java都配备了相应的复合引用类型,既可以表示出数值,也可以操作这个数值。
2024-08-01 17:16:20
1073
原创 Java的异常体系
虽然Java内部提供了非常丰富的异常处理机制,还是满足不了我们开发的需求,比如:我们针对年龄进行限制,这时我们就需要掌握自定义异常的处理方式:我们模仿Java内部定义各种异常类的模式,推出我们自己针对某个模块或者是某个业务来编写自己的异常类;System . out . println("请输入分数:");try {throw new ScoreException("你给的分数有误,分数应该在0-100之间");} else {
2024-08-01 12:49:59
1059
原创 yum安装OpenResty
修改/usr/local/openresty/nginx/conf/nginx.conf,将配置文件使用的根设置为root,目的就是将来要使用lua脚本的时候 ,直接可以加载在root下的lua脚本。默认已经安装好了nginx,在目录:/usr/local/openresty/nginx 下。
2023-05-13 09:58:33
747
原创 基于Docker搭建FastDFS分布式文件系统
Nginx在这里主要提供对FastDFS图片访问的支持,Docker容器中已经集成了Nginx,我们需要修改nginx的配置,进入storage的容器内部,修改nginx.conf。添加以下内容,如已有,忽略。
2023-05-12 16:33:47
358
原创 Harbor管理仓库的离线搭建
harbor是构建企业级私有docker镜像的仓库的开源解决方案,它是 Docker Registry的更高级封装,它除了提供友好的Web UI界面,角色和用户权限管理,用户操作审计等功能外,它还整合了K8s的插件(Add-ons)仓 库,即Helm通过chart方式下载,管理,安装K8s插件,而chartmuseum 可以提供存储chart数据的仓库。
2023-05-07 23:28:54
337
原创 win下nacos-2.2.2搭建开发环境(3种模式)
nacos安装模式:单机模式 Derby: 这种模式是极简模式,数据没法持久化存储,适合开发环境。单机模式 MySQL:这种模式支持数据持久化,数据会存储到MySQL中,适合生产环境。集群模式:这种模式适合生产环境并且服务节点个数较多,不存在单点故障问题。
2023-05-04 18:35:02
961
原创 Apollo配置中心搭建
JavaApollo服务端:1.8+Apollo客户端:1.7+由于需要同时运行服务端和客户端,所以建议安装Java 1.8+。MySQL:版本要求:5.6.5+Apollo的表结构对timestamp 使用了多个default声明,所以需要5.6.5以上版本。
2023-05-03 18:56:06
1077
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人