- 博客(65)
- 收藏
- 关注
原创 spring-retry重试及整合springboot
它提供了一种简单的方式来实现自动重试逻辑,用于处理临时的失败或不确定的操作,比如网络请求、数据库操作等。通过它,可以配置重试次数、重试间隔、失败条件等。与其他属性互斥,当使用 interceptor 属性时,@Retryable 注解的其他配置属性(如 maxAttempts 或 backoff 等)将被忽略,因为拦截器直接控制整个重试逻辑。与 Spring 集成:Spring Retry 可以无缝集成到 Spring 应用中,支持与 Spring 的事务管理、AOP(面向切面编程)、注解等功能的结合。
2025-01-02 11:28:59
288
原创 Caffeine Cache Java缓存组件
特性高性能:基于高效并发设计和 TinyLFU 算法,命中率高。丰富策略:支持容量限制、过期时间、异步加载、自定义清理策略。统计监控:内置 recordStats 提供命中率等监控数据。Spring 集成:支持与 Spring Cache 无缝对接。优点性能卓越,易用性强,配置灵活,内置监控,轻量级无额外依赖。缺点仅限本地缓存,无分布式支持,需手动管理内存,无持久化能力。适用场景单机高并发场景,如配置缓存、字典数据等频繁访问数据的缓存需求。总结。
2024-12-31 18:21:09
512
原创 MongoDB语法及MongoTemplate用法
Date 日期时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。根据你所采用的服务器,可分为 32 位或 64 位。1.MongoDB 是一个文档数据库,数据以 BSON 方式存储(类似于json)8.文档的键是字符串。3.集合(Collection):类似于mysql的一张表。2.文档(Document):类似于mysql的一行数据。用于存储布尔值(真/假)。"开头的键是保留的(不是严格要求的)。
2024-12-08 14:39:48
711
原创 Java集合-Collection & Map
2.添加元素时,先计算得到hash值会转成索引值,找到存储数据表table,若果索引位置没有元素则直接加入,若已经存放有元素则调用equals比较,为true,就放弃添加,不相同,再判断 p 是不是一颗红黑树, 如果是一颗红黑树,就调用 putTreeVal , 来进行添加.不是红黑树,依次和该链表的每一个元素比较后,都不相同, 则加入到该链表的最后.1.LinkedHashSet使用hashcode值来决定元素的存储位置,使用双向链表维护元素的次序,元素以插入顺序保存.(加入和取出元素顺序一致)
2023-06-14 21:17:13
669
原创 Sentinel:服务限流
关联: 当关联的资源请求达到阈值的时候,限流自己,例: 设置/aa和/bb,在/bb的关联中填入/aa,/aa在1s被访问5次(假设限制)则限流/bb。链路: 只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,则进行限流),例: 从指定/aa下访问/fs的请求才统计限流。最大RT: 响应时间,单位毫秒。Warm Up(预热): 设置预热时长,在预热时长内,处理请求上线为 请求数/预热时长,预热时长过后,恢复原单机阈值。如:单机阈值 3, 统计窗口时长 1 ,则1秒内QPS阈值为3。
2023-04-24 14:08:14
624
1
原创 Dubbo & 负载均衡
Invoker是被用装饰器模式一层一层套了很多Filter的,因此在调用最终的实现类之前,又会经过一个服务提供者端的过滤器链。2.RoundRobin: 轮询,访问频率和权重有关,权重:占有比例,集群中每个项目部署的服务器的性能可能不同,性能好的服务器权重应该高一些。@DubboReference(check = false)代表的是启动的时候不会创建代理对象,在访问的时候才会创建这个代理对象。3.LeastActive: 活跃数相同的随机,不同的活跃数高的放前面。5、接着,会使用Client做数据传输。
2023-04-23 16:32:47
964
原创 TX-LCN:分布式事务框架
3.通知事务组: 是指在发起方执行完业务代码以后,将发起方执行结果状态通知给TxManager,TxManager将根据事务最终状态和事务组的信息来通知相应的参与模块提交或回滚事务,并返回结果给事务发起方。TxManager作为分布式事务的控制方,控制整个事务。DTXPropagation.REQUIRED:默认值,表示如果当前没有事务组创建事务组,如果有事务组,加入事务组。1.创建事务组: 是指在事务发起方开始执行业务代码之前先调用TxManager创建事务组对象,然后拿到事务标识GroupId的过程。
2023-04-21 19:24:59
1504
原创 Spring Data Elasticsearch配置及使用
我们学习的是底层封装了Rest High Level的ElasticsearchRestTemplate模板类型。两种类型中的方法API几乎完全一样,学会了一个,另外一个主要就是配置和类型的区别。当然了,每个不同版本的框架,在方法API上还是有些差异的。以POJO为中心模型用于与Elastichsearch文档交互,并轻松编写存储库样式的数据访问层框架。query string 查询。
2023-04-20 20:06:33
4821
原创 Elasticsearch
每个索引中都必须有唯一的一个Type,是Index中的一个逻辑分类,Elasticsearch中的数据Document是存储在索引下的Type中的(类似于表中套表)在7.x版本之后,删除Type定义,每个index只有唯一固定命名为_doc的Type。可以通过命令,在创建index的时候来定制mapping映射,也就是指定字段的类型和字段数据使用的分词器,手工定制mapping时,只能新增mapping设置,不能对已有的mapping进行修改。可以同时删除多个索引,多个索引名称使用逗号’,'分隔。
2023-04-20 11:37:59
404
原创 config: 分布式配置中心 & bus: 消息总线
每一个应用程序在运行时都需要相应的yml配置,分布式架构下多个服务器和应用服务面临着多个配置文件,在修改和发布上难度较大,需要有一个管理中心来统一管理,优雅的解决了配置的动态变更、持久化、运维成本等问题流程:分布式配置中心去远程仓库将创建好的yml文件读取,application client去分布式配置中心获取配置Spring Cloud Config: spring cloud config server和spring cloud config client基于Http协议。
2023-04-19 16:22:35
1107
原创 RabbitMQ:消息中间件
1.Overview: 此面板为RabbitMQ基础信息展示面板,列举了服务器的信息,如:节点名称、内存占用、磁盘占用等。2.Connections: 此面板中展示所有连接到RabbitMQ的客户端链接。只展示基于5672端口的链接。3.Channels: 此面板中展示各链接中的具体信道。标记方式为链接(编号),如:192.168.91.1:12345(1)。4.Exchanges: 此面板中展示RabbitMQ中已有的交换器,并注明交换器名称、类型等基本信息。
2023-04-19 12:15:35
618
原创 Spring Cloud Gateway: 网关
*** 自定义全局过滤器。* 必须实现接口GlobalFilter* 当前类型的对象,必须被spring容器管理。* 无须配置,所有路由都生效。* 执行顺序:* 先执行网关过滤器,后执行全局过滤器* 多个全局过滤器,执行顺序由Spring boot扫描管理当前对象的顺序决定。* 每个过滤器,都是完整执行后,才执行下一个过滤器。/*** 过滤方法。* 实现上,只有唯一的要求。必须调用方法chain.filter(exchange),并把方法的返回值,返回。* @return。
2023-04-18 18:12:34
567
原创 Hystrix:断路器: RestTemplate & Openfeign=>5种防止服务雪崩方法
3.请求缓存: 服务A调用服务B,在A中添加请求缓存,第一次请求后走缓存了,就不在访问服务B了,即使出现大量请求时,也不会对B产生高负载。简单来说: 以前一个请求发到控制层到业务层是一个线程,现在变成了在远程调用的方法里,控制层一个线程,业务层一个线程.变成了两个线程.降级就是,执行访问远程的方法,但application server 异常,无法调用远程方法后,走降级方法。1.去后台查询id为1,2,3的对应的信息,那么就要执行3次service.selectById(id);
2023-04-16 18:13:46
961
原创 1.Java基础面试题
2.线程安全: String 中的对象为常量,线程安全,StringBuilder是线程不安全的,StringBuffer 是线程安全的。多态: 父类的引用指向子类的实例,子类重写了父类的方法,真正执行的是子类覆盖的方法,多态不能调用子类存在但父类不存在的方法;继承: 子类拥有父类所有属性和方法但是私有属性和私有方法不能访问,子类可以有自己属性和方法且可以重写父类的方法。浅拷贝: 在堆上创建一个新的对象,但原对象内部的属性有引用类型,会只复制该对象的地址.装箱:将基本类型用它们对应的引用类型包装起来;
2023-04-14 10:09:12
453
原创 负载均衡:Ribbon - 远程调用:RestTemplate & OpenFeign
根据设定的负载均衡算法,从列表中取出一个合适的URL,到此Ribbon的事情结束了。所以部署集群时都是设置相应的应用程序相同的应用名称.权重轮询策略(常用,中小型项目使用) :根据每个application service的响应时间分配一个权重,响应时间越长,权重越小,被选中的可能性越低。(注意: 这里的客户端指的是一个服务调用另一个服务(不涉及用户端,是内部服务间的调用),调用方是客户端,被调用方是服务端)可以是硬件,如F5, 也可以是软件,如nginx(注意这里的客户端指的是用户端,服务端是服务器)
2023-04-08 21:39:27
769
原创 分布式: 概念详解 & Eureka & CAP
在Eureka集群中所有的节点都是保存完整的信息的,当Eureka Client向Eureka中注册信息时,如果发现节点不可用,会自动切换到另一台Eureka Server,也就是说整个集群中即使只有一个Eureka可用,那么整个集群也是可用的。Eureka Client: 注册到Eureka Server中的应用,注册后才能通过注册中心获取到项目信息和项目所在服务器信息,Spring Cloud中每个项目调用的信息都存储在了注册中心中(Eureka)。名字中不能使用下划线,否则可能出现无法注册的问题。
2023-04-07 15:27:18
585
原创 Spring Boot应用优雅关闭
在需要实现优雅关闭的应用工程中增加下述依赖:部分启动器默认就依赖了Actuator启动器,如:spring-cloud-starter-netflix-eureka-server,那么下述依赖是可以省略的。
2023-04-07 13:24:22
589
原创 分布式文件存储: FastDFS
是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点(可简单的理解为一台计算机)DFS可以看作是一个接口:具体实现有OSS,GlusterFS、GoogleFS、FastDFS、TFS。
2023-04-05 12:01:51
963
原创 Redis
Redis中数据是key-value形式。不同类型Value是有不同的命令进行操作。Value有6中类型: 1. String 字符串2. Hash 哈希表3. List 列表4. Set 集合5. Sorted Set 有序集合.6 Stream类型(Redis5以后新版本类型)
2023-03-31 15:22:41
235
原创 Docker
1.下载JDK镜像一般使用openjdk镜像。使用Maven插件构建镜像修改Docker服务配置在ExecStart变量末尾,增加下述配置:注意:一定是同一行,且与原值之间必须有至少一个英文半角空格3.重启docker服务4.IDEA项目POM依赖--指定镜像名称 仓库/镜像名:标签--> < baseImage > openjdk:8
2023-03-30 21:10:12
285
1
原创 Spring Security
permitAll():表示所匹配的URL任何人都允许访问authenticated():表示所匹配的URL都需要被认证才能访问 :表单提交认证+rememberMe()anonymous():表示可以匿名访问匹配的URL 必须不用认证 如果已经认证 无法访问 :登录页面需要指定当前权限denyAll():表示所匹配的URL都不允许被访问。rememberMe():被“remember me”的用户允许访问。
2023-03-29 21:25:16
724
原创 SpringBoot使用详解
Spring Boot的启动器实际上就是一个依赖。这个依赖中包含了整个这个技术的相关jar包,还包含了这个技术的自动配置,以前绝大多数XML配置都不需要配置了。如果是Spring自己封装的启动器的artifact id名字满足:spring-boot-starter-xxxx,如果是第三方公司提供的启动满足:xxxx-spring-boot-starter。以后每次使用Spring Boot整合其他技术时首先需要考虑导入启动器。Spring Boot版本介绍。
2023-03-26 15:23:37
1453
原创 Mybatis-Springboot
上面的if标签中为了保证语法的正确性,需要在SQL中明确指定where 1=1,其中1=1存在的意义单纯为了保证语法的正确性,没有实际意义的。在企业开发中的表可能都会有很多列,当使用多表联合查询时列的个数更多。collection:要遍历的数组或集合对象。标签带有自动主键回填功能,只需要设置useGeneratedKeys进行开启自动主键回填功能,同时设置keyProperty的值需要回填到对象的哪个属性。MyBatis的sql标签用于定义SQL片段,include标签用于引用sql标签定义的片段。
2023-03-26 11:05:55
302
原创 日志工具包
在Java项目中常见的日志工具包:Log4j:Apache推出的日志工具。与2012年5月发布1.2.17版本后停止更新。Logback:属于Log4j的继承者。Spring Boot默认日志文件支持类型。Log4j2:属于Log4j升级版,同时里面还包含了Logback的很多改进。commons-logging:Apache早期基于门面(Facade)设计模式的日志包,提供了日志解构能力,按照顺序寻找当前项目日志接口实现、Log4j、JDK Log、SimpleLog。
2023-03-25 17:10:51
903
1
原创 SpringMVC用法详解
1.preHandle方法作用:真正执行拦截的方法,返回false表示拦截此次请求,返回true表示放行。执行时机:单元方法之前。参数:HttpServletRequest request:此次拦截的请求的request对象HttpServletResponse response:此次拦截的请求的response对象Object handler:HandlerMethod类型,存储了拦截的单元方法的method对象。
2023-03-25 10:21:46
635
1
原创 过滤器-监听器
只要在浏览器中输入正确的url地址,不管此次请求是否合理,Tomcat服务器在接收到请求后就会直接调用对应的资源完成请求的处理。有些场景, 需要对请求进行相关处理, 处理完成后, 在访问请求的资源。
2023-03-24 17:38:31
260
1
原创 servlet-Tomcat
用户JSESSIONID的Cookie丢失或者服务器中存储的Session对象被销毁,服务器接收到用户的请求后,如果找不到对应的Session对象,会重新创建,并将新的JSESSIONID以Cookie的形式保存到浏览器中。tomcat 服务器的核心配置文件,server.xml的每一个元素都对应了 tomcat中的一个组件(pojo对象),通过对xml中元素的配置,实现对 tomcat中的各个组件和端口的配置。Tomcat服务器的conf/web.xml文件中配置HttpSession的超时时间。
2023-03-24 16:49:41
270
原创 Spring注解-Spring-boot-SpingAOP & Spring事务
Test对应spring-test.jar. Spring提供的测试工具, 可以整合JUnit测试, 简化测试环节. Spring的核心组件, 包含了Spring框架最基本的支撑. Beans, 对应spring-beans.jar. Spring进行对象管理时依赖的jar包. Core, 对应spring-core.jar, Spring核心jar包. Context, 对应spring-context.jar, Spring容器上下文对象.
2023-03-22 21:12:57
612
1
原创 Java-JVM详解
简单来说: 下一级的类加载器,如果接到任务时会先把任务往上传,一直到根加载器,如果根加载器在它负责的路径下没有找到对应的class,会往回传到扩展类加载器让他加载对应的class,如果没有,会传到应用程序类加载器,如果AppClassLoader也没有找到对应的class,那么会报ClassNotFoundException或NoClassDefError,如果在某一级找到了,就直接返回Class对象。因为年轻代中的对象基本都是朝生夕死的(90%以上),所以在年轻代的垃圾回收算法使用的是复制算法。
2023-03-17 16:04:14
2456
4
原创 JUC并发编程
1.支持公平/非公平策略2.支持可重入同一读线程在获取了读锁后还可以获取读锁同一写线程在获取了写锁之后既可以再次获取写锁又可以获取读锁3.支持锁降级,不支持锁升级4.读写锁如果使用不当,很容易产生“饥饿”问题:在读线程非常多,写线程很少的情况下,很容易导致写线程“饥饿”,虽然使用“公平”策略可以一定程度上缓解这个问题,但是“公平”策略是以牺牲系统吞吐量为代价的。5.Condition条件支持写锁可以通过newCondition()方法获取Condition对象。
2023-03-15 20:58:32
660
3
原创 1.AVL树:左右旋-bite
左右子树的高度差的绝对值均不超过1的二叉搜索树.有n个结点,时间复杂度是log以n为底2的对数;左单旋:左旋就是旋转节点的右子树的左子树变为其新的右子树,同时旋转节点变成以前右子树的左子树右端单旋:右旋就是旋转节点的左子树的右子树变成其新的左子树,同时旋转节点变成以前左子树的右子树何时使用左旋,右旋,左右双旋,右左双选?增加节点在要旋转节点的右子树的右子树上时:左旋,在要旋转节点的右子树的左子树上时:右左双旋.增加节点在要旋转节点的左子树的左子树上时:右旋,在要旋转节点的左子树的右子树上时:左右双旋
2022-07-06 10:22:48
632
8
原创 14.IP协议-bite
4位版本: 4/6(0100,0110),主要讨论IPv4.(0100)4位首部长度:和TCP类似.TOS(服务类型,只有4位有效,可以切换形态):最小延时,最大吞吐量,最高可靠性,最小成本,同一时刻只能取一种形态4.16位总长度:单个IP数据报最大长度不能超过64KB(65536Byte),如果超过了,IP协议自身实现了分包和组包这样的操作对于IP数据包来说,根本不关心载荷里是啥只是单纯的对数据进行了切分了.下面三个字段就是用来进行分包和组包的16位标识符:同一个IP数据报拆分出来的多个IP数据报的标
2022-06-28 10:31:07
603
原创 11.应用层数据传输格式/端口号-bite
正是因为这里的应用层协议,可以随心所欲的来指定,这就导致两极分化非常严重!!大佬设计的协议都非常好.菜鸡设计的协议就非常糟糕正因为如此,大佬们发明了一些比较好的协议的模板,可以让我们直接往上套:当下比较流行的一些这种协议的模板(数据的组织格式)可读性好,但是运行效率不高:1.xml2. json3. 可读性不好,运行效率很高:4. protobuffer1.xml:格式有标签名构成:内容:开始标签:结束标签标签名就是key内容就是value......
2022-06-27 11:49:22
570
原创 13.TCP-bite
有连接:得先建立连接再交换数据可靠传输:发送方知道接收方有没有收到数据(不是对方100%能收到,不是安全传输)面向字节流:以字节为单位进行传输. (非常类似于文件操作中的字节流)全双工:一条链路,双向通信半双工:一条链路,单向通信两个核心类:ServerSocket(专门给TCP服务器用的)Socket(既给服务器用也给客户端用)服务器端:客户端:当上面的代码,第一次accept结束之后,就会进入processConnection在processConnection 又会有一个循环,如果pr
2022-06-27 11:14:39
583
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人