自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 10. 分布式事务解决方案 Seata

重启微服务,现在微服务到底是连接tc的SH集群,还是tc的HZ集群,都统一由nacos的client.properties来决定了。进入bin目录,双击 seata-server.bat 运行即可:如果秒退,可能是registry.conf中的配置存在问题。TCC 模式与 AT 模式非常相似,每阶段都是独立事务,不同的是 TCC 模式通过人工编码来实现数据恢复。特别注意,为了让 seata-tc-server 服务的集群可以共享配置,选择nacos作为统一配置中心。举例,一个扣减用户余额的业务。

2025-01-12 23:24:58 791

原创 9. 分布式事务理论基础

本地事务是传统的单机事务。在传统数据库事务中,必须要满足四个原则ACID1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标Consistency(一致性)Availability(可用性)Partition tolerance (分区容错性)它们的第一个字母分别是 C、A、PEric Brewer 说,这三个指标不可能同时做到。这个结论就叫做 CAP 定理一致性 Consistency。

2025-01-12 23:23:53 1222

原创 8. 线程隔离 熔断降级 授权规则 Sentinel

默认情况下,发生限流、降级、授权拦截时,都会抛出异常到调用方。异常结果都是flow limmiting(限流)。这样不够友好,无法得知是限流还是降级还是授权拦截@Component@OverrideString msg = "未知异常";msg = "请求被限流了";msg = "请求被热点参数限流";msg = "请求被降级了";msg = "没有权限访问";

2025-01-11 20:51:45 985

原创 7. 流量控制 Sentinel

Sentinel是阿里巴巴开源的一款微服务流量控制组件。丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况广泛的开源生态。

2025-01-11 20:49:38 1332

原创 6. 服务网关 GateWay

过滤器的作用是什么?对路由的请求或响应做加工处理,比如添加请求头配置在路由下的过滤器只对当前路由的请求生效defaultFilters 的作用是对所有路由都生效的过滤器参数中是否有authorizationauthorization参数值是否为admin如果同时满足则放行,否则拦截在 gateway-service 中定义过滤器 AuthorizeFilter 并实现 GlobalFilter//@Order(-1) 该注解和以下实现 Ordered 的功能一样@Component。

2025-01-09 21:37:24 1013

原创 5. 远程调用 Feign

类型作用说明修改日志级别包含四种不同的级别:NONE, BASIC, HEADERS, FULL响应结果的解析器http远程调用的结果做解析,如解析json字符串为java对象请求参数编码将请求参数编码,便于通过http请求发送支持的注解格式默认是SpringMVC的注解失败重试机制请求失败的重试机制,默认没有,但会使用Ribbon的重试一般情况下,默认值就能满足我们使用,如果要自定义时,只需创建自定义的@Bean覆盖默认Bean即可。

2025-01-09 21:36:32 932

原创 4. Nacos 注册中心 配置中心

首先按照上面的方式配置 UserServiceApplication 的两个实例,设置两个实力的集群名称是HZ,同时重新开启另一个实例,将 UserServiceApplication 中的配置改为以下的方式,集群名称设置为 SH,因此在nacos配置中心我们就可以看到 HZ 和 SH 集群的三个实例。在分布式系统中,系统间的网络不能100%保证健康,一定会有故障的时候,而服务有必须对外保证服务。微服务要拉取nacos中管理的配置,并且与本地的 application.yml 配置合并,才能完成项目启动;

2025-01-08 22:54:11 1377

原创 3. 负载均衡 Ribbon

当请求进入 Ribbon 之后,Ribbon会怎么去处理呢?首先,请求会被一个拦截器拦住, 这个拦截器的名字叫做LoadBalancerInterceptor 负载均衡拦截器它拦截下来以后会得到请求中的服务名称,然后把它交给而RibbonLoadBanlancerClient 又会将服务交给动态服务列表负载均衡器ServerList也就是服务列表然后 DynamicServerListLoadBalancer又会去 Eureka-server 拉取服务列表拉取服务之后进行负载均衡。

2025-01-08 22:50:40 702

原创 2. 注册中心 Eureka

下一次服务消费者再向Eureka进行拉取服务提供者的信息时,自然拉取不到"挂掉的"服务信息。在 order-service 完成服务拉取,服务拉取是基于服务名称获取服务列表,然后再对服务列表做负载均衡;为了应对更多的并发,将来user服务可能会部署成多实例,形成集群;回答:eureka自己也是一个微服务,eureka在启动时,会将自己也注册到eureka上;之前的代码是将user服务的 ip 和 端口号 硬编码的;服务消费者:业务中调用其他微服务的服务(调用其他微服务提供的接口)提供者与消费者角色其实是。

2025-01-08 22:46:43 1158

原创 1. 微服务技术栈导学以及简单案例

向Spring容器中注入 RestTemplate 对象调用 RestTemplate 方法完成发送,发送 get 请求发送 get 请求:restTemplate.getForObject( url路径, 返回类型 );发送 post 请求:restTemplate.postForObject( url路径, 返回类型 );第一个参数是请求 url 路径得到结果是Json,可以自动把Json反序列化为对应的类型封装User对象到Order对象中,界面就可以显示用户信息,之前的用户信息是null。

2025-01-08 22:42:48 1155

原创 ZooKeeper 面试资料

数据存到磁盘或者文件当中。机器重启后,数据不会丢失。

2025-01-08 22:38:32 1141

原创 Dubbo 面试资料

答:因 dubbo 协议采用单一长连接,如果每次请求的数据包大小为 500KByte,假设网络为千兆网卡(1024Mbit=128MByte),每条连接最大 7MByte(不同的环境可能不一样,供参考),单个服务提供者的 TPS(每秒处理事务数)最大为:128MByte / 500KByte = 262。答:因为服务的现状大都是服务提供者少,通常只有几台机器,而服务的消费者多,可能整个网站都在访问该服务,比如 Morgan 的提供者只有 6 台提供者,却有上百台消费者,每天有 1.5 亿次调用,

2025-01-08 22:35:38 1471

原创 排序算法总结---Java实现

i++) {// 当前的数据元素与前面的元素进行对比// 较大的元素向后移动j--;

2024-12-20 23:04:18 355

原创 排序算法相关场景面试

排序法适用于一般情况,但时间复杂度较高堆法对于查找K大元素是一个高效的选择,特别是当K小于n时快速选择法具有最优的平均时间复杂度,但最坏情况下可能是O(n²)流法简洁,但性能上较排序法差一些,适合小规模数据或学习用途内存排序:适用于内存足够的情况,使用高效的排序算法(如快速排序)外部排序:适用于内存不足的情况,使用归并排序,将数据分批处理并合并数据库排序:如果数据存储在数据库中,直接使用数据库的排序功能是最简单的方法并行排序:如果是分布式系统,可以使用并行计算框架(如Spark)进行高效排序。

2024-12-20 22:57:42 848

原创 Swagger 框架

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法、参数和模型紧密集成到服务器端的代码,允许 API 来始终保持同步作用:接口文档的在线自动生成功能测试/*** @Target - 描述当前的注解可以定义在什么资源上* 属性 value* - 定义具体的资源。包括:* - ElementType.METHOD 可以定义在方法上。

2024-12-19 19:11:41 1254

原创 RabbitMQ 死信和延迟队列

延迟队列的内部是有序的,特性就体现在它的延时属性上,延时队列中的元素是希望在指定时间到了以后或之前取出和处理,简单来说,延时队列就是用来存放需要在指定时间被处理的元素的队列订单在十分钟之内未支付则自动取消新创建的店铺如果十天内没有上传过商品,则会自动发消息提醒;账号注册成功,如果三天内没登陆则进行短信提醒用户发起退款,如果三天内没有得到处理则通知相关运营人员预定会议后,需要在预定的时间点前十分钟通知各个与会人员参加会议。

2024-12-19 19:10:57 1782

原创 RabbitMQ 交换机

将接收到的所有消息广播到它知道的所有队列中Fanout 这种交换类型没有太多的灵活性,只能进行无意识的广播;使用 direct 这种类型来进行替换,该类型的工作方式是,消息只去到它绑定的 routingKey 队列中去上图中交换机 X 绑定了两个队列,绑定类型是 direct;队列 Q1 的 routingKey 为 orange, 队列 Q2 的 routingKey 分别为 black 和 green;

2024-12-19 19:10:01 970

原创 RabbitMQ 消息队列持久化 分发 发布确认

当然如果所有的消费者都没有完成手上的任务,队列还在不停的添加新任务,队列有可能就会遇到队列被撑满的情况,这个时候就只能添加新的工作线程或者改变其他存储任务的策略。例如,假设在通道上有未确认的消息 5678,并且通道的预取计数设置为4,此时RabbitMQ 将不会在该通道上再传递任何消息,除非至少有一个未应答的消息被 ack。本身消息的发送就是异步发送的,所以在任何时候,channel 上肯定不止只有一个消息另外来自消费 者的手动确认本质上也是异步的。,因为如果没有确认发布的消息就会阻塞所有后续消息的发布,

2024-12-19 19:09:14 1136

原创 RabbitMQ 的简单案例

在生产者发送消息 dd,发出消息之后的把 C2 消费者停掉,按理说该 C2 来处理该消息,但是由于它处理时间较长,在还未处理完,也就是说 C2 还没有执行 ack 代码的时候,C2 被停掉了, 此时会看到消息被 C1 接收到了,说明消息 dd 被重新入队,然后分配给能处理消息的 C1 处理了。因为这种模式如果消息在接收到之前,消费者那边出现连接或者 channel 关闭,那么消息就丢失了,当然另一方面这种模式消费者那边可以传递过载的消息,在这种情况下,突然有个消费者挂掉了,我们将丢失正在处理的消息。

2024-12-19 19:08:07 893

原创 RabbitMQ 基础概念以及安装

本质是个队列,FIFO 先进先出,只不过队列中存放的内容是 message 而已,还是一种跨进程的通信机制,用于上下游传递消息。MQ 是一种常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了 MQ 之后,消息发送上游只需要依赖 MQ,不用依赖其他服务。

2024-12-19 19:07:24 1086

原创 Redis 数据库(下)

定义:主机数据更新后根据配置和策略,自动同步到备机的master/slaver 机制数据的复制是单向的!只能由主节点复制到从节点;master 以写为主,slave 只能读默认情况下,每个Redis服务器都是主节点一个主节点可以有0个或者多个从节点,但每个从节点只能有一个主节点读写分离,性能扩展;容灾快速恢复;负载均衡分担服务器的负载,提高并发量为什么使用集群?单台服务器难以负载大量的请求单台服务器故障率高,系统崩坏概率大单台服务器内存容量有限。

2024-12-19 15:44:11 800

原创 Redis 数据库(中)

在指定的时间间隔内将内存中的数据集 Snapshot 快照写入磁盘,恢复时,是将快照文件直接读到内存里,进行数据的恢复以日志的形式记录每个写操作将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据。换言之,redis 重启就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作AOF 保存的是 appendonly.aof 文件官方推荐可以两个都启用;可以同时开启两种持久化方式,

2024-12-19 15:42:43 1033

原创 Redis 数据库(上)

Redis:是高性能的(Key-Value)分布式内存数据库基于内存运行并支持持久化的NoSQL数据库支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用不仅支持简单的 key-value 类型的数据,同时还提供 list、set、zset、hash 等数据结构的存储支持数据的备份,即master-slave 模式的数据备份持久化,多样化数据库,集群,事务...Redis很快!!!Redis是基于内存的操作。

2024-12-19 15:41:04 1407

原创 SpringBoot 框架 下

接口:API(应用程序接口)是一些预先定义的接口(如函数、HTTP接口),可以指访问servlet, Controller 的 url,调用其他程序的函数。资源使用 url 表示,在 url 中使用名词表示资源,以及访问资源的信息,在 url 中,使用"/"分隔资源。在类的上面使用@RestController , 表示当前类者的所有方法都加入了 @ResponseBody。basePackages:指定 dao 接口的所在的包名;使用 http 中的动作(请求方式), 表示对资源的操作(CURD)

2024-12-19 15:37:44 1079

原创 SpringBoot 框架 上

key 来自 application.properties(yml)两个文件都可以application.yml:添加两个自定义配置项 school.name 和 school.websiteserver:port: 8090servlet:school:name: 动力节点address: 北京大兴区启动Application ,访问浏览器读取配置文件数据// 姓名:动力节点,端口是8090, 网址是:www.baidu.com。

2024-12-19 15:35:59 709

原创 MyBatisPlus 框架

MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生组装条件查询@Test// 查询用户名包含S,年龄在20到30之间,并且密码不为空的用户信息AND?组装排序条件@Test// 按 年龄降序 查询用户,如果年龄相同则按 id 升序排列组装删除条件@Test// 删除 password 为空的用户// 条件构造器也可以构建删除语句的条件System.out.println("是否删除成功:" + remove);

2024-12-18 16:28:34 1158

原创 SSM 整合开发

-注册组件扫描器-->--spring的配置文件:声明service,dao, 工具类, 事务配置-->--引入属性的配置文件-->--配置阿里的Druid数据库的连接池--></bean>--注册 SqlSessionFactoryBean --></bean></bean>注册 ServletContext 监听器的实现类 ContextLoaderListener,用于创建 Spring 容器及将创建好的 Spring 容器对象放入到 ServletContext 的作用域中。

2024-12-18 16:26:17 429

原创 SpringMVC 框架进阶

定义三个异常类:NameException、AgeException、MyUserException其中 MyUserException 是另外两个异常的父类控制器增强 (增加控制器功能),放在类上面必须让框架知道这个注解所在的包名,需要在springmvc配置文件声明组件扫描器指定@ControllerAdvice 所在的包名表示异常的类型,当发生此类型的异常时,由当前方法处理。

2024-12-18 16:25:10 1067

原创 SpringMVC 框架基础

Spring:容器,IoC 能够创建管理对象SpringMVC:能创建对象,放入到 SpringMVC 容器中,放的是控制器对象基于 Spring 的框架,本质是 spring 的模块,专门是做web开发的,底层是 servlet该注解可以定义处理器对于请求的映射规则;该注解可以在方法上,也可以在类上。value 属性值常以“/”开始。URI 的请求是相对于 Web 的根目录@RequestMapping 的 value 属性用于定义所匹配请求的 URI ,要访问处理器的指定方法,

2024-12-18 16:23:41 776

原创 Spring 框架整合 MyBatis 框架

spring 依赖;mybatis 依赖;spring-mybatis 依赖;spring 事务依赖。声明 MapperScannerConfigurer 类,类的内部创建 dao 代理对象,创建的对象放入 spring 容器。声明SqlSessionFactoryBean,在这个类的内部,创建SqlSessionFactory。只要创建该对象,才能调用 openSession( ) 方法得到SqlSession对象。,使用这些对象就能使用mybatis提供的功能。使用mybatis,需要。

2024-12-18 16:21:04 625

原创 Spring 框架---事务管理

事务是指一组 SQL 语句的集合;多个sql语句都能成功,或者都失败,这些 SQL 语句的执行是一致的,作为一个整体执行事务隔离级别、事务传播行为、事务默认超时时限,及对它们的操作总结 Spring 的事务管理事务的是事务管理对象 PlatformTransactionManager 和它的实现类Spring 说的事务是一个统一模型指定要使用的事务管理器实现类,使用<bean>指定哪些类,哪些方法需要加入事务的功能指定方法需要的隔离级别,传播行为,超时需要告诉 Spring,你的。

2024-12-18 16:18:00 809

原创 Spring 框架---AOP

面向切面编程,基于动态代理,可以使用JDK、cglib两种代理方式AOP是动态代理的规范化(OOP:面向对象编程)把动态代理的实现步骤方式都定义好了,让开发人员用一种统一的方式,就用动态代理Aspect :表示切面, 给业务方法增加的功能,叫做切面切面一般都是非业务功能, 而且切面功能一般都是可以复用的Orient:面向,对着Programming:编程********怎么理解面向切面编程?以切面为核心设计开发你的应用。(重要)*********分析项目时, 找出切面的功能。

2024-12-18 16:16:09 936

原创 Spring框架---IoC

spring 是一个 Java 框架,使用 Java 语言开发的轻量级开源的框架spring 核心技术是IoC(控制反转)和 AOP(面向切面编程)spring 作为容器装的是 Java 对象;Spring 容器创建对象以及属性赋值spring 的作用: 实现解耦合, 解决Java 对象之间的耦合, 解决模块之间的耦合1. 构造方法 2. 反射 3. 序列化 4. 克隆 5. IoC(容器创建对象) 6. 动态代理对象放入容器中,对象创建,属性赋值,管理依赖关系。

2024-12-18 16:15:05 749

原创 MyBatis 框架

web开发中使用 MVC 架构模式c 控制器(controller): 接收请求,调用service对象,显示请求的处理结果v 视图(view): 显示请求的处理结果m 数据(model): 来自数据库MySQL实现解耦合让 mvc 各负其职使的系统扩展更好,更容易维护接收用户的请求,调用service, 显示请求的处理结果的;对应的是 controller处理业务逻辑, 使用算法处理数据的;把数据返回给界面层;对应的是 service访问数据库,或者读取文件,获取数据;

2024-12-18 16:09:24 737

原创 常见工具---lombok 插件

概念:Lombok能以简单的注解形式来简化java代码,提高开发人员的开发效率开发环境:Lombok需要的开发环境。

2024-12-18 16:07:29 1028

原创 常见工具---git

主流的版本控制工具Git:分布式版本控制,没有中央服务器,可以离线提交SVN:集中式版本控制,有中央服务器,不可以离线提交。

2024-12-18 16:04:55 1006

原创 常见工具---Maven

手工管理多模块之间的关系比较繁琐手动管理 jar 包,版本信息以及之间的依赖(a.jar 需要 b.jar 这个关系叫做依赖,必须首先获取到 b.jar 才可以, 然后才能使用 a.jar)

2024-12-18 16:03:23 985

原创 MySQL 数据库(下)

1. 存储引擎1.1. 存储引擎介绍(MySQL特有术语)存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式 。存储引擎是一个表存储/组织数据的方式,不是基于数据库的,因此可被称为表类型;不同的存储引擎,存储数据的方式不同查看表:show create table t_vip;mysql默认的存储引擎是:InnoDB,engine 来指定存储引擎mysql默认的字符编码方式是:utf-8,charset 来指定这张表的字符编码方式可以在建表的时候给表指定存储引擎,

2024-12-18 16:01:26 701

原创 MySQL 数据库(中)

为了保证cno字段中的值都是t_class表中的classno,需要给cno添加一个外键约束,每个值都是外键值。表创建出来,同时表中的数据也存在了。注意:如果提供的日期字符串是这个格式:%Y-%m-%d,str_to_date函数可以省略。在创建表的时候可以给表中的字段加上一些约束,来保证这个表中数据的完整性和有效性。对于表连接来说,每连接一次新表,则匹配的次数满足笛卡尔积,成倍的翻。案例:查询每个员工的上级领导,要求显示所有员工的名字和领导名。一张表看成两张表,a表的mgr就是b表的empno。

2024-12-18 15:59:45 835

原创 MySQL 数据库(上)

数据库:存储数据的仓库,实际上就是一堆文件,这些文件中存储了具有特定格式的数据数据库管理系统:简称DBMS,专门用来管理数据库中数据的,数据库管理系统可以对数据库当中的数据进行增删改查SQL:结构化查询语言。是一套标准,通过编写SQL语句,然后DBMS负责执行SQL语句,最终来完成数据库中数据的增删改查操作三者之间的关系:DBMS --执行-–> SQL --操作-–> DBselect...from...where...group by...having...

2024-12-18 15:58:33 884

空空如也

空空如也

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

TA关注的人

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