- 博客(72)
- 收藏
- 关注
原创 【Spring中Bean的生命周期】
Spring何时创建对象?Spring工厂创建的同时创建对象。Spring工厂会在获取对象的同时创建对象。可不可以让scope=singleton的情况下也在获取对象的同时创建对象?
2023-06-14 14:18:17
918
原创 【SpringCloud——Seata分布式事务管理框架】
分布式事务和传统形式的事务区别有什么?众所周知,我们采用微服务框架开发项目时,不同服务之间通过相互调用的方式完成业务处理,用以下案例来描述分布式业务存在的问题:假设我们此时现在有一个商城系统,其中包括下单系统、用户系统、仓库系统。当我们进行下单时,就需要创建订单信息,同时需要对用户的余额进行扣减,还需要对仓储系统的商品数量进行减少,由于每个系统分别负责一部分的业务,且其拥有独立的数据库信息,因此我们就会有三个事务,订单创建、余额扣减、商品剩余量扣减。
2023-06-12 18:16:52
1243
原创 【SpringCloud——Sentinel】
-引入sentinel依赖-->之前的限流是统计访问某个资源的所有请求,判断是否超过QPS阈值。而热点参数限流是分别统计参数值相同的请求,判断是否超过QPS阈值。热点参数限流即限制对热点参数的访问,限制其控制在一个特定值范围内,防止大量相同请求访问同一资源。@Slf4j@[email protected]("查询用户异常",throwable);默认情况下,发生限流、降级、授权拦截时,都会抛出异常到调用方。
2023-06-06 17:04:52
2246
原创 【SpringCloud——Elasticsearch(下)】
①、创建docker-compose.yml文件services:es01:volumes:ports:networks:- elastices02:volumes:ports:networks:- elastices03:volumes:networks:- elasticports:volumes:data01:data02:data03:networks:elastic:②、es运行需要修改一些linux系统权限,修改/etc/sysctl.conf文件。
2023-06-05 18:45:42
1873
1
原创 【SpringCloud——Elasticsearch(中)】
使用第三方工具获取当前地理位置,发送至后端,后端根据传递的地理位置对酒店距离进行排序后返回。精确查询一般是查找keyword、数值、日期、boolean等类型字段。查询所有酒店并按照酒店评分降序排列,评分一致时按照酒店价格升序排列。类型、数值类型、地理坐标类型、日期类型等。下文操作均使用此方法对响应进行解析。,默认是根据相关度算分(
2023-06-03 19:46:34
694
原创 【SpringCloud——Elasticsearch(上)】
elasticsearch是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容。 以下操作均根据以上数据库表进行: ①、创建索引库②、查看索引库③、修改索引库索引库和mapping一旦创建则无法修改,但是可以添加新的字段。④、删除索引库2、基于RestClient(代码) 以下操作均根据以上数据库表进行:①、编写mapping映射 ②、创建索引库②、删除索引库③、查看索引库是否存在五、操作文档1、基于Kibana(WE
2023-05-31 00:43:09
599
原创 【SpringCloud——Docker】
镜像结构:镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。DockerFile文件内容:# 指定基础镜像# 暴露端口# 入口,java项目的启动命令镜像创建命令:进入创建好的docker-demo目录docker build -t 镜像名称(名字:版本-》例如:javaweb:1.0) .
2023-05-30 02:54:56
588
原创 【SpringCloud组件——GateWay】
用户发送的请求,首先会抵达网关,网关并不会直接将请求路由到对应的微服务当中去执行,而是将请求传递给过滤器,由过滤器对请求做出一系列处理之后才转发到微服务当中,同理,微服务处理完请求后也不会直接将响应传递到路由上,也是经过一系列过滤器之后才抵达路由,由路由对用户的访问进行响应。
2023-05-29 00:10:53
3042
原创 【SpringCloud组件——Feign(远程调用)】
我们配置Logger来看看:方式1:基于配置文件的方式①全局生效②局部生效方式2:基于java代码的方式先声明一个Bean@Bean声明完成后定义该Bean的作用域,即全局生效还是局部生效。在SpringBoot的启动类注解@EnableFeignClients添加如下参数,表明不论远程调用哪个微服务,都将采取配置类当中的配置。在Feign客户端的类注解上添加如下参数,表明谁远程调用我这个微服务,将采用这个配置文件的信息。
2023-05-23 22:44:28
1024
原创 【SpringCloud组件——Nacos】
分别提供订单系统(OrderService)和用户系统(UserService)。订单系统主要负责订单相关信息的处理,用户系统主要负责用户相关信息的处理。
2023-05-20 23:40:27
1443
原创 【SpringCloud组件——Ribbon(负载均衡)】
案例依然采用Eureka章节提供的案例,orderService根据服务名称发起请求,请求传达至Ribbon,此时Ribbon从Eureka中心拉取userService服务列表,Ribbon根据负载均衡算法对服务列表进行选择,最后决定将请求发送至哪个userService服务实例。
2023-05-20 16:53:19
736
原创 【SpringCloud组件——Eureka】
分别提供订单系统(OrderService)和用户系统(UserService)。订单系统主要负责订单相关信息的处理,用户系统主要负责用户相关信息的处理。服务提供者:一次业务中,被其它微服务调用的服务。(提供接口给其他微服务)服务消费者:一次业务中,调用其它微服务的服务。(调用其它微服务提供的接口)访问订单系统,查询订单编号为XXX的订单,并返回订单当中的用户信息。我们知道每张订单都会记录该订单支付者的信息,一般是支付者账号信息。根据该信息调用用户系统当中的根据账户查询用户的接口即可。①、订单查询接口
2023-05-20 16:11:10
738
原创 【SpringCloud组件——RabbitMQ(下)】
先从概念解释上搞清楚这个定义,死信,顾名思义就是无法被消费的消息,字面意思可以这样理解,一般来说,producer将消息投递到broker或者直接到queue里了,consumer从queue取出消息 进行消费,但某些时候由于特定的,这样的消息如果没有 后续的处理,就变成了死信,有死信自然就有了死信队列。
2023-05-16 20:02:04
480
原创 【SpringCloud组件——RabbitMQ(上)】
预取值是对不公平分发的进一步优化,所谓预取值,举个例子,此时队列当中有1\2\3\4\5\6\7\8,共8条消息,设置消费者1的预取值为5,消费者2的预取值为2,表示将这8条消息当中的5条发送给消费者1的信道当中,将2条发送给消费者2的信道当中,消费者1每应答一条消息,队列才会将下一条消息发往消费者1的信道,类似的,消费者2也是如此。这就的由交换机的类型来决定。参考三当中的线程沉睡,我们类比成消费者1的处理能力高效,消费者2的处理能力低下,此处采用不公平分发,即能者多劳,让闲着的线程处理更多的消息。
2023-05-15 21:20:47
775
原创 【Redis——主从复制、哨兵机制、分片集群_底层原理】
在上图过程当中,我们比如添加Node-5节点,此时Node-5节点假设需要2000个槽位,此时其余四个节点就会拼凑出2000个槽位给Node-5节点,同时槽位当中的值也会转移给Node-5节点,这样一来,Node-5节点就算添加进了集群。如果是16385个节点,那槽位不就没得分了?并且,我们我们为了保证集群的高可用性,建议每个主节点都至少持有一个从节点,当主节点宕机的时候,从节点可以顶替上来~主节点持有的槽位会转移给从节点,因为从节点上面的数据和主节点的一致,只需要将数据分配进槽位即可。
2022-12-02 10:15:48
661
原创 个人博客系统项目+测试用例
使用邮箱进行注册,输入邮箱后点击发送验证码按钮,服务器会根据邮箱输入框的信息对该邮箱发送验证码,验证码有效期为120秒,获取验证码之后设置登录密码,注册成功则会返回生成的账号。
2022-09-11 21:41:29
2188
3
原创 【Redis缓存】
相比于数据库而言,缓存的操作性能更高,缓存性能高的主要原因有以下几点:1、缓存一般都是key-value查询数据的,因为不像数据库一样还有查询的条件等因素,所以查询的性能一般会比数据库高;2、缓存的数据是存储在内存当中的,而数据库的数据是存储在磁盘当中的,因为内存的操作性能远远大于磁盘,因此缓存的查询效率会高很多;3、缓存更容易做分布式部署(当一台服务器变成多台相连的服务器集群),而数据库一般比较难实现分布式部署,因此缓存的负载和性能更容易平行扩展和增加。缓存大致分为两大类:本地缓存、分布式缓存本地缓存:也
2022-07-06 21:28:00
9622
原创 【Cookie和Session的基本使用说明】
在前面我们讲到了Cookie和Session具体是干什么用的,对于这样的机制有何作用呢?我们试着想想,当我们访问一个需要身份验证的页面时,是否需要对于该页面的每个分支页面都需要重新登录一次呢?显然,这样是很不科学的,因此,Cookie和Session机制就是为了应对这样的场景而产生的。好比于去医院看病挂号,这个挂号这个操作就会发给你一张就诊卡,这张就诊卡就是类似于Cookie这样的机制,当我们访问每个不同的科室(页面)的时候,只需要携带着这张就诊卡,就能够随意访问每个科室(页面),每个科室(页面)会先针对这
2022-06-27 20:54:36
624
原创 【关于Tomcat那些不得不知道的事儿】
Tomcat是一个HTTP服务器。我们也可以认为它是一个TCP/UDP服务器,因为HTTP协议我们也可以认为是基于TCP的。HTTP服务器就是在TCP服务器的基础上,加上了一些额外的功能:例如能够解析请求中的HTTP报文,把请求转换成结构化的数据(对象),也能很方便的构造HTTP请求。HTTP服务器提供了一组API,方便程序猿直接调用来操作HTTP协议,从而大大简化程序猿的开发功能~HTTP服务器是属于很大的类别,在这个类别下面其中就包含着很多具体的实现,Tomcat只是其中的一种(Java这个圈子里,最知
2022-06-22 22:21:33
567
1
原创 【HTTP协议——八股文(下)篇】
在前两篇我们介绍了关于HTTP请求响应当中的一些具体属性字段,那么我们如何通过代码构造出一个HTTP请求发送至服务器端呢?常见的构造HTTP请求可以通过HTTP客户端,即浏览器构造,基于Form表单或是ajax。还有一种是基于java当中的socket,这种方式并不常见,但在某些特殊场合我们仍然在用,这里我们不做过多介绍。form表单这种方式,是属于比较原始的构造请求,使用form就一定会涉及到页面跳转,此时浏览器就需要加载出来全新的页面,因此这样就非常不科学,尤其是页面相对来说比较复杂的时候,就会比较低效
2022-06-22 19:45:28
447
1
原创 【HTTP协议——八股文(中)篇】
在上篇中,我们描述了关于HTTP请求和HTTP响应中都包含哪些部分,下面我们先对Header部分中的数据进行详细剖析。Host表示要访问的服务器主机的地址和端口,这个地址可以是IP地址,也可以是域名,通过DNS域名解析系统分析过后转换成对应的IP地址。这两个属性都是在描述body,倘若请求当中没有body(GET),也就不需要这两个字段,一般情况下是POST带body而GET不会带body,一般的登录场景都会基于POST来实现,那么我们考虑为什么使用POST实现而不使用GET呢?常见的Content-Typ
2022-06-22 14:21:45
851
1
原创 【HTTP协议——八股文(上)篇】
首先我们了解到网络层的五层体系,跟我们程序猿最密切相关的就是应用层,说到应用层,我们就不得不提到一个协议,那就是HTTP协议。HTTP(“超文本传输协议”)是一种应用非常广泛的应用层协议。我们首先需要了解HTTP协议具体是干什么用的,再来了解他的机制。我们使用的抓包工具分为很多种,而对HTTP协议进行抓包的工具中最常见的是使用Fiddler,接下来我们通过Fiddler工具进行抓包,观察HTTP协议的格式以及内在细节。在进行抓包之前,我们需要了解Fiddler抓包工具的工作原理,当我们在浏览器输入网址的时候
2022-06-15 23:39:51
1008
原创 【关于SpringBoot的配置文件】
1.为系统框架提供数据支持。2.为程序猿自己去调用。首先我们要了解,在配置文件中的信息都是以Key-Value的形式存在的。在此我们要知道,如果是程序猿自己配置的信息,那么可以在遵循Key-Value的格式下,定义任何名称的Key。 读取配置的方法一:@Value 注解读取单个配置项,此时我们可以重写afterPropertiesSet方法来查看是否读取到了配置文件中的内容,我们知道afterPropertiesSet方法是参数设置完成之后执行的方法,代码如下: 运行程序,控制台信息如下:具体分为两步操作:
2022-06-04 20:02:15
3295
原创 【Spring----对象的读取和存储】
一、存储Bean对象1.修改配置文件传统的存储Bean对象的方式:更简单的存储Bean对象的方式:此处我们看到,我们配置了存储对象的扫描包路径,只有被配置包下的所有类,添加了注解才能被正确的识别并保存到Spring中。2.添加注解存储对象我们要想对象存储到Spring中,有两种注解类型可以实现:1、类注解:@Controller、@Service、@Repository、@Component、@Configration2.方法注解:@Bean我们先了解类注解各自
2022-05-16 22:24:21
550
原创 【Spring中获取Bean(对象)的三种方式】
方式1:通过bean的id来获取这种方式的弊端在于需要强制类型转换方式2:通过类型获取这种方式的弊端对于多个对象的同一种类型的Bean获取会报错方式3:通过id+类型的方式来获取这种方式无需强制类型转换,也解决了对于多个对象的同一种Bean获取会报错的问题。三种方式相比之下,方式三是更推荐的使用方法,其次是方式一,方式二不建议使用~...
2022-05-13 22:41:07
2161
原创 【ApplicationContext和BeanFactory的区别和联系】
继承关系:二者同属于Spring容器的两个顶级接口,并且ApplicationCentext继承自BeanFactory,是BeanFactory的子类 功能方面:BeanFactory提供了基础的访问容器的能力,由于ApplicationContext继承自BeanFactory,因此其拥有BeanFactory的所有功能,在此基础上,它还拥有独特的特性,例如:对国际化支持、资源访问支持、以及事件传播等 性能方面:ApplicationContext是一次性加载并初始化所有Bean对象,所以它的启动过
2022-05-13 22:29:49
400
原创 【Spring核心与设计思想——IOC和DI】
一、Spring是什么?用一句话来概括Spring:Spring是包含了众多工具方法的IoC容器。那么问题来了,什么是容器?什么是IoC容器?1、什么是容器?容器这个词的本身含义就是用来容纳某种物品的装置。至此,我们目前在Java中接触过的容器有哪些?List/Map ..... -> 数据存储的容器 Tomcat -> Web容器2、什么是IoC?IoC = Inversion of Control 中文意思是“控制反转”,也就是说Spring是一个“控制反转”
2022-05-13 18:01:06
385
原创 【关于JVM,不得不知道的那些事儿】
一、JVM内存区域划分JVM主要是分成四个区域:堆、栈、程序计数器、方法区JVM本质上是一个java进程,JVM启动之后就会从操作系统这里申请到一大块内存~每个线程,都有自己的栈和程序计数器~下面我们对于这四个区域进行详细的描述~1.堆:里面放的就是new出来的对象我们程序中每new一个实例对象,就会放到堆中。2.方法区:里面放的是类对象.java =》 .class =》 JVM就会把 .class进行加载,加到内存里=》类对象类对象里都包含哪些内容:类的st
2022-05-11 17:44:48
1364
1
原创 【牛牛开店-淘宝开店问题】
public class Main3 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); KuoRong(); while (scanner.hasNext()){ int[] arr = new int[6]; for (int i = 0; i < 6; i++) { ...
2022-05-10 14:04:18
161
原创 【Linux基本使用和程序部署】
一、Linux常用命令1.ls(罗列当前目录中包含哪些文件)常用选项①:ls -l 以列表形式来显示内容 --> 可以简写为: ll常用选项②:ls -a 能够罗列出隐藏文件(以 . 开头的文件)关于文件显示的几种颜色详细说明:白色:普通文件蓝色:目录绿色:可执行文件红色:压缩包2.pwd(查看当前所在的目录)3.cd(切换当前目录)语法:cd 目录名功能:改变工作目录,将当前工作目录改变到指定目录下举例:cd .. :返回上一级目
2022-05-08 13:03:45
375
原创 【博客系统页面效果展示】
注册页面编辑发布页面修改个人信息页面查看自己发布的博客页面查看其他人发布的博客页面博客主页登录页面页面功能仍在不断丰富,点击github链接获取系统源码:https://gitee.com/yang-xiaodou/projects...
2022-05-05 20:24:58
542
原创 【青蛙跳台阶——动态规划(进阶)】
public static int jumpFloorII(int target) { if (target <= 2){ return target; } int[] dp = new int[target]; dp[0] = 1; for (int i = 1; i < target; i++) { dp[i] = 2 * dp[i-1]; ...
2022-04-25 20:20:26
658
3
原创 【求出现次数超过一半的数字--类似题】
消除法,时间复杂度O(n),遍历数组,相同则消除,不同则次数+1,出现次数超过一半,则必然消除完成后仍存在~ public static int getValue(int[] gifts, int n) { if (n == 0){ return 0; } int number = gifts[0]; int time = 1; for (int i = 0; i < n; i++...
2022-04-21 19:23:13
458
2
原创 【利用辗转相除法求最大公约数--JAVA】
private static int Yue(int power, int i) { int big = Integer.MIN_VALUE; int small = Integer.MAX_VALUE; if(power > i){ big = power; small = i; }else { big = i; small =...
2022-04-21 19:08:38
731
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人