自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【RabbitMQ高级特性】消息确认机制、持久化、发送方确认、TTL和死信队列

消费者确认机制确保消息被正确处理后才从队列中删除。如果消费者处理失败(如业务异常或宕机),Broker 会重新投递消息。1.消息一旦被消费者接收(无论是否处理成功),立即自动确认并从队列删除。若消费者在处理消息时崩溃或抛出异常,消息将永久丢失(因为已被确认删除)。非关键业务,允许消息偶尔丢失(如日志采集、监控数据)。2.消费者在处理消息后,必须显式调用basicAck()确认消息;若处理失败,调用或拒绝消息。:确认单条或批量消息。:拒绝消息,可选择是否重新入队。:拒绝单条消息(不支持批量)。

2025-03-24 21:33:20 885 6

原创 【SpringCloud】OpenFeign、Gateway和Nginx

自定义GatewayFilter自定义GatewayFilter,需要去实现对应的接口GatewayFilterFactory,Spring Boot默认帮我们实现的抽象类是AbstractGatewayFilterFactory,可以直接使用代码示例@Data@Slf4j@Component/*过滤器的核心方法*/@Override/*** exchange ServerWebExchange: HTTP请求-响应交互契约,提供了对HTTP请求和响应的访问。

2025-03-22 16:07:04 753 3

原创 【SpringCloud】Eureka、LoadBalancer和Nacos

Spring Cloud 是一系列框架的集合,它提供了工具和组件来帮助开发者快速构建分布式系统,特别是基于微服务架构的应用。它构建在 Spring Boot 基础之上,利用 Spring Boot 的便利性简化了分布式系统基础设施的开发。

2025-03-17 21:45:51 1076 5

原创 【Redis】持久化(RDB和AOF)和事务

对于数据的存储而言,为保证速度快,数据得在内存中,但为了持久,数据还得存在硬盘之中,Redis 的持久化机制是其高可靠性的核心,主要用于在重启或崩溃后恢复数据。和,以及从 4.0 版本开始支持的。

2025-03-10 19:16:21 978 3

原创 【RabbitMQ】Spring Boot 结合 RabbitMQ 完成应用间的通信

Spring 框架与 RabbitMQ 的整合主要通过 Spring AMQP(Advanced Message Queuing Protocol)模块实现,提供了便捷的消息队列开发能力。@RabbitHandler 注解用于标记方法,这些方法会根据消息的类型来处理接收到的消息。当一个消息监听器容器接收到消息时,它会根据消息的类型选择合适的 @RabbitHandler 注解的方法来处理该消息。 

2025-03-06 17:21:42 1775 5

原创 【RabbitMQ】RabbitMQ的核心概念与七大工作模式

在现代分布式系统和微服务架构中,消息队列(Message Queue) 是解决服务间通信、系统解耦和流量削峰的关键技术之一。而 RabbitMQ 作为一款开源的消息中间件,凭借其高可靠性、灵活性和易用性,成为开发者最常用的工具之一。MQ (Message queue),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是消息 (message) 而已。消息可以非常简单,比如只包含文本字符串,JSON 等,也可以很复杂,比如内嵌对象。MQ多用于分布式系统之间的通信。

2025-03-04 21:28:53 1125 3

原创 【Redis】Redis初阶:常用数据结构相关命令与Jedis使用

🔥个人主页: 中草药🔥专栏:Redis(Remote Dictionary Server)是一个开源的、基于内存的键值对存储数据库,支持持久化、网络化访问,并提供多种数据结构操作,用作数据缓存。它由Salvatore Sanfilippo开发,凭借其单线程模型和高效数据结构,成为高并发场景下的首选解决方案。核心特性:内存存储:数据主要存储在内存中(内存为主,硬盘为辅),读写速度远超传统磁盘数据库,如MySQL(最大特点快)。丰富的数据结构:支持String、List、Hash、Set、Zset五种基础类

2025-02-28 20:23:25 1310 49

原创 【测试】开发模型和测试模型

 测试是指使用人工或自动手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。它是对软件规格说明、软件设计和编码的最后复审,是软件质量保证的关键步骤。

2025-01-29 10:00:00 1337 48

原创 【OAA 】面向对象分析:从概念到实践

阅读和理解需求文档或用例描述筛选出名词或名词短语,建立初始类清单(候选类)将候选类分为三类:分别是显而易见的类,无意义的类和不确定类别的类舍弃明显无意义类别的类综合讨论不确定类别的类,直到把他们合并或调整到其他两个类别。如该用例描述我们可以得到经过简单分析:“版块类别”和“版块帖子数量”都可以归结到“版块”类,做为“版块”类的属性;"帖子标题”和“帖子正文”都可以归结到"帖子“类,做为“帖子”类的属性;"权限”可以归结到“用户“类,做为“用户"类的属性。用户、版块、帖子。

2025-01-03 10:00:00 1084 54

原创 【Spring】深入解析 Spring 原理:Bean 的多方面剖析(源码阅读)

SpringBoot的自动配置原理源码口是 @SpringBootApplication 注解,这个注解封装了3个注解@SpringBootConfiguration 标志当前类为配置类@ComponentScan 进行包扫描(默认扫描的是启动类所在的当前包及其子包)@EnableAutoConfiguration@Import 注解:读取当前项目下所有依赖jar包中 META-INF/spring.factories,META-INF/spring/org.springframework.boo

2024-12-25 10:00:00 5062 56

原创 【Spring】Linux的基本使用和程序部署

Linux 的基本使用和程序部署是开发和运维工作中的重要环节。掌握这些知识,可以更好地利用 Linux 系统的强大功能,高效地部署和管理各种应用程序,为构建稳定、可靠的服务奠定坚实的基础。随着不断的实践和学习,对 Linux 的运用会更加熟练和深入,能够应对各种复杂的场景和需求。

2024-12-23 10:03:04 2237 45

原创 【Spring】Spring事务和事务传播机制

Spring 事务管理及其事务传播机制为企业级应用开发提供了强大而灵活的事务处理能力。通过合理地配置事务和选择合适的事务传播行为,可以有效地保证数据的一致性、完整性和隔离性,同时满足复杂业务逻辑和分布式系统的需求。在实际开发中,我们需要深入理解事务传播机制的原理和应用场景,根据业务需求进行准确的配置,以构建健壮、可靠的应用程序。

2024-12-06 16:13:47 3405 57

原创 【Spring】AOP

Spring AOP是Spring框架中的一个强大特性,它为开发者提供了一种优雅的方式来处理横切关注点。通过Spring AOP,可以轻松地实现日志记录、事务管理、安全控制等功能,并且能够保持业务逻辑代码的简洁性和清晰度。无论是使用注解还是XML配置,Spring AOP都能让你的代码更加模块化、可维护和易于扩展。

2024-12-02 09:15:00 3065 62

原创 【Spring】MyBatis&MyBatis-Plus

MyBatis 是一个支持自定义 SQL、存储过程以及高级映射的持久层框架。它在 Java 应用程序和各种数据库之间架起了一座桥梁,使得开发者能够方便地将数据持久化到数据库中,并从数据库中检索数据。与传统的 JDBC 相比,MyBatis 大大简化了数据库操作的复杂性,同时又不失灵活性,让开发者能够更好地掌控 SQL 语句,以满足各种复杂的业务需求。Maven配置数据库spring:mybatis:#日志配置,数据库配置#驼峰自动转化#xml文件所在位置。

2024-11-26 09:00:00 3532 56

原创 【Java算法】链表常用技巧和操作总结

在编程世界中,链表是一种非常重要的数据结构,它具有很多独特的优势和用途。今天,就让我们一起来总结一下链表的常用技巧和操作。链表的基本概念链表是一种线性数据结构,由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。链表的特点是可以动态地增长和收缩,不需要预先分配固定的存储空间。链表的常用技巧1.常画图--->直观形象,便于理解2.引入虚拟头结点处理边界情况方便操作链表3.不要吝啬空间,大胆定义变量(大胆定义变量)4.双指针。

2024-11-13 14:43:03 1205 10

原创 【Java算法】分治--归并排序

这段 Java 代码实现了使用归并排序算法对给定整数数组进行排序的功能。归并排序是一种分治算法,其主要思想是将数组不断地分割成较小的子数组,直到每个子数组只有一个元素,然后再将这些子数组合并成有序的数组。确定中间数:后序遍历,给左右两个数组排序:合并两个有序数组:还原:代码算法原理 这段 Java 代码实现了计算给定数组中 “交易逆序对的总数” 的功能,使用了归并排序的思想。

2024-11-06 20:52:57 848 9

原创 【Java算法】分治--快速排序

快速排序三段法是对传统快速排序的一种优化,主要用于对数组进行高效排序。其核心思想是算法原理 该算法采用了三指针的方法,通过一次遍历将数组分为三个部分,分别对应元素值为 0、1、2 的区域,实现对数组的高效排序。初始化指针:遍历与分类:循环终止条件:代码算法原理 这段代码实现了快速排序算法的一种变体 —— 三段划分快速排序。其目标是对给定的整数数组进行排序,通过随机选择一个枢轴元素(),将数组划分为小于枢轴、等于枢轴和大于枢轴的三个部分,然后对这三个部分分别进行递归

2024-10-31 21:43:28 747 11

原创 【Spring】Ioc&DI

在 Java 开发的世界里,Spring 框架无疑是一颗璀璨的巨星,而其中的控制反转(Inversion of Control,简称 Ioc)和依赖注入(Dependency Injection,简称 DI)更是其核心特性之一。今天,就让我们一起深入探索 Spring 中的 Ioc 和 DI。

2024-10-28 15:41:51 4178 83

原创 【Spring】MVC

Spring MVC 是基于Servlet API构建的原始的Web框架,是 Spring 框架的一个重要模块,它实现了模型 - 视图 - 控制器(MVC)设计模式,用于构建灵活、可维护的 Web 应用程序。MVC设计模式模型(Model):负责处理业务逻辑和数据存储。它包含了应用程序的数据和业务规则,可以是 Java 对象、数据库实体等。视图(View):负责呈现用户界面。它可以是 HTML 页面、JSP 文件、XML 视图等,用于将模型中的数据展示给用户。控制器(Controller)

2024-10-21 09:00:00 3520 85

原创 【JavaEE】JVM

Java虚拟机(JVM, Java Virtual Machine)是Java平台的核心组件,它使得Java程序可以在任何安装了JVM的平台上运行,而不需要关心底层的操作系统和硬件架构。JVM的主要职责包括加载、验证、准备、解析和执行Java字节码,以及自动管理内存。 Java虚拟机(JVM)的内存区域划分是理解Java应用程序如何管理和使用内存的关键。JVM将运行时数据区分为几个不同的部分,每个部分

2024-10-05 11:45:24 2285 89

原创 【JavaEE】http/https 超级详解

HTTP(HyperText Transfer Protocol)即超文本传输协议,他是应用非常广泛的应用层协议,是用于从万维网服务器传输超文本到本地浏览器的传送协议。它是一种请求/响应式的协议,客户端发送请求到服务器,服务器处理后返回响应给客户端。HTTP是一个应用层协议,运行在TCP/IP协议族之上,通常使用80端口进行通信。http不仅能传输文本,还能传输图片,传输音频文件,传输视频,传输其他的各种数据目前互联网见到的绝大多数版本都是http/1.1。

2024-10-01 15:36:03 3721 60

原创 【JavaEE】数据链路层协议和DNS

🔥个人主页: 中草药🔥专栏:【Java】登神长阶 史诗般的Java成神之路 以太网(Ethernet)是一种局域网技术,它定义了开放系统互连(OSI)模型中的物理层和数据链路层的规范。以太网是目前最广泛使用的有线网络技术之一,支持不同类型的计算机和其他设备之间的通信。​​ MAC地址(Media Access Control Address)是一种用于标识网络设备硬件的唯一地址。它在数据链路层(OSI模型中的第二层)上工作,主要用于局域网通信。每个网络接口卡(NIC)或任何其

2024-09-25 15:42:45 1034 79

原创 【Java算法】二叉树的深搜

深度优先搜索 (DFS):算法使用了深度优先搜索的方法来遍历整棵树。从根节点开始,逐步深入到叶子节点。路径构建:使用StringBuilder来构建从根节点到当前节点的路径。每次访问一个节点时,将该节点的值添加到路径中。回溯:通过在每次递归调用时创建一个新的StringBuilder对象path,确保每次递归调用时路径都是独立的。这样在回溯时,路径可以恢复到之前的正确状态。路径存储:当到达叶子节点时,将当前路径转换为字符串并添加到结果列表retl中。剪枝优化:如果某个子树为空,则不需要

2024-09-20 13:31:45 1190 86

原创 【JavaEE】IP协议 应用层协议

简介IP协议是一种无连接、尽最大努力交付的协议,它负责将数据从源主机传输到目的主机。IP协议定义了数据包的格式,并规定了如何将数据包发送到目的地。IP协议有两个主要版本:IPv4和IPv6,两者都在当今的网络环境中发挥着重要作用。IPv4IPv4是最早的IP协议版本,它使用32位地址,可以提供大约43亿个唯一的地址。尽管IPv4在互联网发展的早期阶段表现良好,但随着互联网用户的快速增长,IPv4地址资源逐渐耗尽。IPv6。

2024-09-15 12:09:03 1674 151

原创 【Java算法】递归

递归是一种解决问题的方法,其中函数通过调用自身来求解问题。这种方法的关键在于识别问题是否可以被分解为若干个相似但规模更小的子问题。递归函数有两个主要组成部分:基本情况(Base Case):这是递归调用的终止条件。每个递归函数都必须有一个或多个明确的基本情况,否则递归将无限进行下去。递归步骤(Recursive Step):这是函数调用自身的部分。在此步骤中,问题被分解为更小的子问题,然后递归地求解这些子问题。

2024-09-11 21:36:47 781 14

原创 【Java算法】模拟

模拟算法是一种通过逐步模拟现实世界中的过程或系统行为来解决问题的方法。这种算法通常用于那些可以通过一系列明确步骤来描述其行为的场景。模拟算法可以应用于各种领域,包括物理模拟、经济建模、交通流量分析、游戏开发等。定义问题:建立模型:初始化状态:执行步骤:终止条件:分析结果:交通流量模拟假设我们要模拟一条街道上的车流量,并评估不同交通信号灯配置的效果。定义问题:建立模型:初始化状态:执行步骤:终止条件:分析结果:优点缺点算法原理

2024-09-08 19:59:58 1675 11

原创 【Java算法】位运算

这个算法利用了位运算的高效性和鸽巢原理来实现一个简洁而高效的字符串唯一性检测功能。这种方法非常适合于处理字符集相对较小的情况,例如只包含小写字母的字符串。

2024-09-06 09:43:43 1944 11

原创 【JavaEE】TCP协议 (TCP-传输层协议 万字详解)

TCP小结可靠性校验和序列号确认应答超时重发连接管理流量控制拥塞控制提高性能滑动窗口快速重传延迟应答捎带应答特征类型面向连接无连接可靠性可靠的不可靠的顺序保证保证数据按顺序到达不保证数据顺序流量控制使用滑动窗口机制没有流量控制机制拥塞控制动态调整发送速率以避免网络拥塞没有拥塞控制数据传输单元流数据报 (Datagram)重传机制有,使用超时和重传没有重传机制确认应答有,通过ACK确认收到数据没有确认应答。

2024-09-04 12:54:59 2328 134

原创 【JavaEE】网络原理 UDP协议

特征类型面向连接无连接可靠性可靠的不可靠的顺序保证保证数据按顺序到达不保证数据顺序流量控制使用滑动窗口机制没有流量控制机制拥塞控制动态调整发送速率以避免网络拥塞没有拥塞控制数据传输单元流数据报 (Datagram)重传机制有,使用超时和重传没有重传机制确认应答有,通过ACK确认收到数据没有确认应答头部开销20字节(基本)8字节广播/多播支持不支持多播支持广播和多播应用场景。

2024-08-30 22:11:14 1055 16

原创 【JavaEE】初识网络

IP地址(Internet Protocol Address)是为互联网上的设备分配的一个唯一地址标识。IPv4使用32位地址空间,IPv6则使用128位地址空间,以适应未来互联网的发展需求。

2024-08-27 16:56:21 992 11

原创 【JavaEE】文件操作

在深入学习Java中的文件操作之后,我对文件读写、文件流、路径处理等方面有了更深刻的理解。通过实践和探索,我对文件操作有了更全面的认识。通过这次学习,我对Java中的文件操作有了更深刻的理解,并认识到在实际应用中需要综合考虑多种因素。在未来的开发工作中,我将继续深入研究这些知识点,并努力将它们应用到实践中去。学习文件操作不仅提高了我的编程技能,还让我意识到了在设计文件处理程序时需要考虑的诸多因素。以上,就是本期的全部内容啦,若有错误疏忽希望各位大佬及时指出💐。

2024-08-24 16:57:05 1275 126

原创 【JavaEE】Callable,Semaphore和CountDownLatch

Callable接口位于这里的关键点是call()方法,它会抛出异常,这意味着你可以在call()方法中处理任何需要的逻辑,并可能抛出异常。

2024-08-20 15:01:06 1099 14

原创 【JavaEE】synchronized原理 和 Reentrantlock

​​ 关键字的基本原理是通过使用互斥锁(也称为独占锁)来实现线程间的同步。当一个线程获取了一个对象的锁后,其他试图获取该对象锁的线程将会被阻塞,直到锁被释放。​无锁状态:偏向锁状态:轻量级锁状态:重量级锁状态:锁消除(Lock Elimination)原理锁消除是指在编译阶段,JVM编译器通过分析代码来判断某些块中的锁是否真的有必要。如果编译器确定某些锁是不必要的,那么它会在编译时直接去除这些锁,从而避免运行时的锁开销。何时发

2024-08-20 11:47:55 1034 3

原创 【JavaEE】锁策略和CAS

在深入学习基本锁策略和CAS(Compare-and-Swap)操作的过程中,我对并发编程有了更深刻的理解。这些知识点不仅增强了我的编程技能,还帮助我更好地应对多线程环境下的挑战。以下是我在学习过程中的总结与反思。基本锁策略基本锁策略包括悲观锁、乐观锁、自旋锁、挂起等待锁、可重入锁、不可重入锁、公平锁、非公平锁、轻量级锁和重量级锁等。每种锁策略都有其独特的应用场景和优缺点。悲观锁与乐观锁悲观锁假设数据很可能被并发修改,因此在读取或写入数据之前会锁定数据,确保数据的一致性。

2024-08-18 11:46:38 1012 6

原创 【JavaEE】线程池和定时器

在深入研究Java并发编程的过程中,线程池和定时器是两个不可或缺的概念。它们不仅体现了Java在处理并发和定时任务上的强大功能,也反映了现代软件工程中资源管理和效率优化的重要性。以下是我在学习这两个主题后的总结与反思。线程池:高效资源管理的艺术线程池,顾名思义,是一个预先创建好的线程集合,用于执行提交的任务。它通过复用现有线程,避免了线程创建和销毁的开销,从而提高了系统的响应速度和资源利用率。线程池的配置参数,如核心线程数、最大线程数、工作队列类型等,需要根据具体的应用场景和系统资源进行细致调整。

2024-08-15 11:51:31 1623 95

原创 【JavaEE】单例模式和阻塞队列

阻塞队列是Java并发编程中一个非常重要的概念,它提供了一种线程安全且高效的机制来管理多线程环境下的任务调度和资源分配。通过选择合适的阻塞队列类型,可以有效地控制并发级别,提高系统的响应能力和吞吐量。

2024-08-12 10:48:49 1260 24

原创 【JavaEE】初步认识多线程

下面是一些关于线程的关键点:控制流:线程是进程内单一顺序的控制流,每个线程有自己的执行栈和寄存器状态,但共享所属进程的资源,如内存空间、文件句柄和信号。资源共享:在同一进程中,多个线程共享相同的虚拟地址空间、全局变量和其他进程级别的资源,这使得线程间的通信和数据共享比进程间更加高效和简单。独立调度:线程是独立调度和分派的基本单位,这意味着它们可以被操作系统调度来利用CPU时间,从而实现并行或并发执行。类型:

2024-08-08 09:40:13 1624 126

原创 【Java算法】前缀和 下

这段代码实现了一个寻找数组中具有相等数量的0和1的最长子数组长度的算法。具体来说,它使用了前缀和(prefix sum)的概念以及哈希映射(HashMap)来优化查找过程。初始化哈希映射:计算前缀和:检查相等数量的0和1:更新哈希映射:返回结果:这种方法的时间复杂度为O(n),因为我们只遍历数组一次,并且对每个元素执行常数时间的操作。空间复杂度也是O(n),最坏情况下需要存储n个前缀和值。 初始化阶段:开始遍历数组:继续

2024-07-18 16:29:57 1527 13

原创 【Java算法】前缀和 上

这种算法的时间复杂度是 O(n),因为它只需要两次遍历来计算前缀和和后缀和,再加上一次遍历来比较它们,总的操作次数线性于数组长度。这意味着当前位置的前缀和等于上方的前缀和加上左边的前缀和,再加上当前位置的值,最后减去左上方的前缀和以避免重复计算。通过构建和使用前缀和数组,程序能够非常高效地处理任何子矩阵的和的查询,即使面对大量查询也能保持良好的性能。,并读取矩阵的实际数据,忽略第一行和第一列,因为它们将用于构建前缀和数组时的边界条件。数组的前缀和表示,使得每次查询区间和的操作都非常高效。

2024-07-15 10:38:05 1242 5

原创 【Java算法】二分查找 下

段代码实现了一个查找山峰数组中峰值索引的算法。山峰数组是一个先递增后递减的数组,即存在一个索引 使得对于所有的 ,有 ,且对于所有的 ,有 。这个索引 就是峰值的索引。 算法使用了二分查找(Binary Search)的方法来寻找峰值索引。其核心思想是在数组中寻找拐点(即峰值),在该点左侧的值小于右侧的值,在右侧则相反。由于数组是先升后降的,这个拐点就是我们所要找的峰值。具体分析如下:初始化两个指针 和 ,分别指

2024-07-09 19:15:48 1479 29

空空如也

空空如也

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

TA关注的人

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