自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode热题 100——48. 旋转图像

给定一个n×n的二维矩阵matrix表示一个图像。请你将图像顺时针旋转 90 度。你必须在旋转图像,这意味着你需要直接修改输入的二维矩阵。使用另一个矩阵来旋转图像。

2025-08-27 21:39:20 913

原创 LeetCode热题 100——73. 矩阵置零

则将其所在行和列的所有元素都设为。的矩阵,如果一个元素为。

2025-08-27 21:10:53 789

原创 LeetCode热题 100——238. 除自身以外数组的乘积

之中任意元素的全部前缀元素和后缀的乘积都在。使用前缀和后缀数组可以将时间复杂度降为O(n)直接计算每个位置的乘积需要O(n²)时间。最终结果 = 左边乘积 × 右边乘积。,去掉每个位置自身后得到正确结果。之外其余各元素的乘积。避免了重复计算,提高了效率。时间复杂度内完成此题。

2025-08-26 07:56:54 992

原创 LeetCode热题 100——189. 轮转数组

时,取模运算会使其从数组的开头重新开始计算。这确保了新索引始终在有效的数组范围。中的内容(即轮转后的最终结果)全部复制回原始数组。向右轮转 1 步: [99,-1,-100,3]向右轮转 2 步: [3,99,-1,-100]这个数组将用于存储轮转后的结果。(取模运算):这是处理“溢出”的关键。:从目标数组的起始位置(索引 0)开始粘贴。:从源数组的起始位置(索引 0)开始复制。这是算法的核心循环。:要复制的元素数量(整个数组的长度))的元素,在轮转后将移动到。,将数组中的元素向右轮转。

2025-08-26 07:17:42 533

原创 LeetCode 热题100——435. 无重叠区间

你需要移除两个 [1,2] 来使剩下的区间没有重叠。你不需要移除任何区间,因为它们已经是无重叠的了。需要移除区间的最小数量,使剩余区间互不重叠。移除 [1,3] 后,剩下的区间没有重叠。只在一点上接触的区间是。

2025-08-24 11:54:18 455

原创 LeetCode 热题100——56.合并区间

以数组intervals表示若干个区间的集合,其中单个区间为。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].[[1,5]]区间 [1,4] 和 [4,5] 可被视为重叠区间。

2025-08-24 10:13:12 347

原创 LeetCode 热题100——53.最大子数组和 (java动态规划)

创建一个dp数组,其中dp[i]表示以原数组第 i-1 个元素为结尾的最大子数组和dp数组长度为,多出来的一个位置用于处理边界情况。

2025-08-24 08:57:58 236

原创 RabbitMQ高级特性——TTL、死信队列、延迟队列、事务、消息分发

当队列拥有多个消费者时,RabbitMQ默认会通过轮询的方式将消息平均的分发给每个消费者,但是没有可能其中一部分消费者消费消息的速度很快,另一部分消费者消费很慢呢?其实是有可能的,那么这就有可能导致这个系统的吞吐量下降,那如何分发消息才是合理的?

2025-08-18 15:54:05 1676

原创 RabbitMQ高级特性——消息确认、持久性、发送方确认、重试

在使用RabbitMQ时候,可以通过消息持久化 来解决因为服务器的异常崩溃而导致的消息丢失,但是还有一个问题,当消息的生产者将消息发送出去之后,消息到底有没有正确地到达服务器呢?: 表⽰拒绝后, 这条消息如何处理. 如果requeue 参数设置为true, 则RabbitMQ会重新将这条 消息存⼊队列,以便可以发送给下⼀个订阅的消费者. 如果requeue参数设置为false, 则RabbitMQ会把 消息从队列中移除, ⽽不会把它发送给新的消费者。这是比事务更轻量级的解决方案。

2025-08-14 15:33:12 1120

原创 消息队列系统测试报告

RabbitMQ:是一款基于 AMQP(Advanced Message Queuing Protocol)协议的开源消息队列中间件,由 Erlang 语言开发,以轻量级、高可靠性、灵活的路由机制和丰富的消息模式著称。它广泛应用于分布式系统中,实现服务间的异步通信、解耦和流量控制。RabbitMQ介绍官⽹总结:RabbitMQ是一个消息中间件, 也是一个生产者消费者模型. 它最核心的功能就是负责接收, 存储并转发消息。测试类别测试模块测试目标核心数据组件功能测试。

2025-08-10 22:23:28 1087

原创 RabbitMQ详情介绍—七种工作模式

消息队列(Message Queue)是一种在分布式系统中实现异步通信的中间件技术,它通过存储和传递消息(数据),实现不同组件、服务或系统之间的解耦和高效协作。简单来说,消息队列就像一个 “中转站” 或 “邮箱”,发送方(生产者)将消息放入队列,接收方(消费者)从队列中取出消息并处理,双方无需直接交互,甚至可以在不同时间、不同状态下工作MabbitMQ。

2025-08-08 17:17:31 1926 1

原创 排序算法——归并排序(图文演示)

的经典排序算法,核心逻辑是 “分而治之” ,把复杂排序问题拆分成简单子问题解决,再合并结果。本篇分享十大排序算法中的 需要进行交换操作的归并。归并排序(Merge Sort)是基于。

2025-08-04 10:54:32 588

原创 排序算法-选择排序(选择排序、堆排序)(动图演示)

我们找到了最后一个非叶子节点,即元素值为6的节点,

2025-07-31 22:23:37 1188

原创 抽奖系统(6)——抽奖模块

注意:这里我们让正常队列绑定了新的交换机,对于正常队列来说,其配置已经修改,我们需要在mq的web管理端删除已存在的DirectExchange与DirectQueue,然后再启动项目,要不然启动时MQ会报错。如果不继续处理异常而是将这个消息的代码持续运行,私信队列里面的消息会越来越多,所以此时就要按照逻辑去处理代码中的异常。因此这里的代码只是能将我们的逻辑跑通,并不是死信队列消息重发的真正逻辑。等处理好bug之后运行程序,就需要一个专门处理死信队列的消费者来处理私信队列里面的消息。

2025-07-26 14:28:03 1075

原创 抽奖系统(5)——抽奖模块

总体抽象操作有判断是否需要进行状态扭转和执行状态扭转。其次为了后面完成责任链设计模式,定义一个操作的抽象属性sequence;@Service/*** 控制处理顺序* @return*//*** 是否需要转换*//*** 转换方法*/@Component@Autowired@Autowired@Overridereturn 2;/*** 判断是否需要转换活动状态* @return*/@Override。

2025-07-25 15:56:50 1415

原创 抽奖系统(4)——活动模块

在抽奖系统中,用 Redis 缓存活动状态时,结合事务特性保证 “活动状态不变” 的原理,其实是通过 “关联校验” 和 “原子操作” 实现的,就像给活动状态加了一把 “联动锁”,具体可以拆成三个关键点:​。简单说,原理就是 “用 Redis 事务把活动状态和关联状态绑成一个整体,要么一起变,要么都不变”,确保活动状态的变化符合业务规则,不会因为中途出问题或数据不同步导致混乱。Redis 里缓存的活动状态(比如 “进行中”“已结束”)不是孤立的,而是和奖品状态、人员抽奖状态 “绑在一起” 存储:​。

2025-07-24 16:46:57 1005

原创 抽奖系统(3)——奖品模块

请求采用的是form表单的形式,表单第一项数据是奖品的基本信息,第二项数据是奖品的图片;图片上传成功之后,会保存到项目绑定的路径,并且会返回一个uuid产生的索引.jpg;

2025-07-24 13:52:58 688

原创 抽奖系统(2)——注册/登陆

附加:本项目的抽奖系统测试计划。

2025-07-23 21:21:32 871

原创 抽奖系统(1)——功能模块

随着数字营销的兴起,企业越来越重视通过在线活动来吸引和留住客户。抽奖活动作为一种有效的营销手段,能够显著提升用户参与度和品牌曝光率。集成多种技术组件:利⽤MySQL、Redis、RabbitMQ等常⽤组件,构建⼀个稳定、⾼效、可扩展 的抽奖系统。活动、奖品与⼈员管理:允许管理员创建配置抽奖活动;管理奖品信息;管理⼈员信息。实现状态机管理:通过精⼼设计的状态机,精确控制活动及奖品状态的转换,提⾼系统的可控性和 可预测性。保障数据⼀致性:通过事务管理和数据同步机制,确保数据的⼀致性和完整性。

2025-07-23 14:34:41 1429

原创 测试计划(抽奖系统)

该抽奖系统基于 Java 语言开发,借助 Spring Boot 框架的便捷性与高效性搭建基础架构,运用 MyBatis 进行数据库操作,利用 Redis 实现数据缓存加速,结合 RabbitMQ 完成消息的异步处理。系统涵盖活动创建、奖品管理、抽奖操作以及中奖记录管理等核心功能,为抽奖活动提供了全面、稳定且灵活的解决方案。通过对活动、奖品和人员信息的有效管理,以及采用先进的缓存和消息队列技术,实现了抽奖活动的自动化管理和数据的高效处理,能够满足不同规模和场景下的抽奖需求。

2025-07-19 22:13:10 1335

原创 排序算法—插入排序(插入、希尔)(动图演示)

本文介绍了十大排序算法中的插入排序和希尔排序。插入排序通过构建有序序列,逐个插入未排序元素,时间复杂度为O(n²),适用于小规模数据。优化方案包括二分查找插入位置。希尔排序是插入排序的改进版,通过分组排序逐步缩小间隔,时间复杂度在优化后接近O(n logn),但最坏情况下仍为O(n²)。两种算法空间复杂度均为O(1),插入排序稳定而希尔排序不稳定。文章提供了Java代码实现,其中希尔排序采用gap/3+1的优化增量序列,比传统n/2序列收敛更快。

2025-07-18 09:35:15 1083

原创 排序算法—交换排序(冒泡、快速)(动图演示)

本篇分享十大排序算法中的 需要进行交换操作的与, 其余算法也有介绍噢(努力赶进度中,后续会添加上)

2025-07-17 20:34:54 1288

原创 测试详解 (概念篇、Bug篇、用例篇、测试分类)

找bug,发现缺陷,验证软件产品特性是否符合用户的需求大多数需求有两部分,一部分是用户需求、一部分是软件需求用户需求可以简单理解为甲⽅提出的需求,如果没有甲⽅,那么就是终端⽤⼾使⽤产品时必须要完成的任务。该需求⼀般⽐较简略,通常是⼀句话。(是软件需求的来源和基础)软件需求或者叫功能需求,该需求会详细描述开发⼈员必须实现的软件功能。软件需求是测试⼈员进⾏测试⼯ 作的基本依据。

2025-03-20 10:21:46 1437

原创 博客系统自动化测试

对于一个程序员来说,定期整理总结并写博客是不可或缺的步骤,在学习技术的过程中,总是学一点忘一点,如果把学习的过程记录在一个网站上,自己在学习技术的时候就能访问该网站,进行回顾、复习,回顾大学学习技术这里,我发现不管当时记忆多么深刻,到一定时间后,都会忘得一干二净。针对个人博客项目进行测试,个人博客主要由四个页面构成:登录页、列表页、详情页和编辑页,主要功能包括:登录、编辑并发布博客、查看详情、删除博客以及注销等功能。自动化测试代码/性能测试报告:​​​​​​​​​​。严格按照测试用例进行。

2025-03-12 15:24:26 787

原创 Linux基础使用和程序部署

连接Linux服务器的方式有很多,xshell只是其中一种.xshel是一个客户端,而非服务器Ubuntu软件管理工具是apt,其他的linux发行版本软件包管理工具不同,比如CentOS是使用yum来管理软件的SpringBoot可以使用多个配置文件来完成不同平台的配置.在Window上可以运行成功的代码,在Linux上不一定能运行成功.启动程序需要使用nohup后台运行,需要停止服务时,使用kill命令。

2025-03-03 20:40:18 1301

原创 Spring 事务和事务传播机制(详解)

Spring 事务传播机制定义了多个包含了事务的⽅法,相互调⽤时,事务是如何在这些⽅法间进⾏传递的Spring中使用事务,有两种方式:编程式事务(手动操作)和声明式事务.其中声明式事务使用较多,在方法上添加就可以实现了通过)设置事务的隔离级别.Spring 中的事务隔离级别有 5种通过设置事务的传播机制, Spring 中的事务传播级别有7种,重点关注REQUIRED(默认值)和。

2025-02-26 15:32:58 2015

原创 Spring核心思想之—AOP(面向切面编程)

IoC概述(详情)AOP:Aspect Oriented Programming (面向切面编程)什么是切面编程呢?切面编程指的是某一类特定问题 所以AOP也可以理解为面向特定方法编程。什么是面向特定方法编程呢?统一功能处理之拦截器、统一数据返回格式、统一异常处理这类的问题的统一处理, 所以拦截器也是AOP的一种应用, AOP是一种思想, 拦截器就是AOP思想的一种实现,. Spring框架实现了这种思想, 提供了拦截器技术的相关接⼝。同样统一数据返回格式、统一异常处理 都是AOP思想的一种实现。

2025-02-18 13:17:16 1258

原创 SpringBoot 统一功能处理之拦截器、数据返回格式、异常处理

拦截器是Spring框架提供的核心功能之一,主要用来拦截用户的请求,在指定方法前后,根据业务需要执行预先设定的代码也就是说,允许开发人员提前预定于一些逻辑,在用户的请求响应前后执行,也可以在用户请求前阻止其执行比如通过拦截器来拦截前端发来的请求,判断Session中是否有登录用户的信息,有的话正常响应,没有则进行拦截。

2025-02-11 17:07:47 2316

原创 Mybatis 进阶 / Mybatis—Puls (详细)

学习了MyBatis动态SQL的⼀些标签使⽤. <if>标签中, 使⽤的是Java对象的属性, ⽽⾮数据库字段.动态SQL的实现, 注解和xml的实现⽅式相似, 区别是注解⽅式需要添加但是使⽤注解的⽅式时, Idea不会进⾏格式检测, 容易出错, 建议使⽤xml的⽅式MyBatis-Plus 是 MyBatis 的增强⼯具, 在 MyBatis 的基础上只做增强不做改变, 可以⽤更少的代码实现数据库表的CRUD, 让我们的开发变得更加简单。

2025-01-17 14:47:09 2152

原创 初识MyBatis(详细)

MyBatis是一款优秀的持久层框架,用于简化JDBC的开发。持久层:指的的就是持久化操作的层,通常指数据访问层(Dao),用于来操作数据库的。简单来说MyBatis是为了更简单的完成程序和数据库交互的框架,也就是更简单的操作和读取数据库的工具。

2025-01-16 19:15:28 1120

原创 Spring Book 配置文件 / 日志

可读性高,写法简单,易于理解支持更多的数据类型,可以简单表达对象,数组,list,Map,的数据形态支持更多的编程语言,不只是java中可以使用,在Golang,Python,JavaScript也可以使用缺点:不适合写复杂的配置⽂件对格式有较强的要求(可能一个空格导致整个项目垮掉)

2025-01-15 12:57:39 1194

原创 Spring IoC

loC是Spring的核心思想其实loC我们在前面已经使用了,在类上面添加和注解,就是把这个对象交给Spring管理,Spring 框架启动时就会加载该类.把对象交给Spring管理,就是loC思想.IoC:(控制反转)也就是说 Spring 是⼀个"控制反转"的容器什么是控制反转呢?也就是控制权反转.什么的控制权发生了反转?获得依赖对象的过程被反转了也就是说,当需要某个对象时,传统开发模式中需要自已通过new创建对象,现在不需要再进行创建,把创建对象的任务交给容器,程序中只需要依赖注入。

2024-12-11 22:58:27 1352

原创 Spring Web MVC

Spring Web MVC是基于Servlet API构建的原始Web框架(简单来说 Spring Web MVC是一个Web框架Spring MVC二.什么是Spring MVC?2.1 MVC定义:Mvc是的缩写,分为三基本部分:(控制器 模型 视图MVC可以说是一种思想,而Spring实现了这个思想称为Spring MVCMVC的设计模式(图一):图1。

2024-12-09 23:11:35 947

原创 Java 继承 多态

父类引用 子类对象不一样的时候,调用重写的方法,所表现出的行为不一样,这种思想————多态(大白话)不同对象的引用,调用同一个方法,产生的结果不一样————多态。

2024-11-06 20:42:54 1266 1

原创 java 封装 (内部类)

1.this();是只能在当前类构造方法中使用,去调用当前类的其他构造方法。不能在普通的成员方法中使用。2.只能放在第一行。如果不放在第一行,就不能通过编译。

2024-11-05 22:06:21 1130

原创 Java 网络编程TCP/UDP+线程池(详细)

丰富的网络资源:所谓的网络资源就是在网络上获取各种数据资源。而所有的网络资源,都是通过网络编程来进行数据传输的什么是网络编程::指网络上的主机,通过,以编程的方式实现网络通信(称为网络数据传输)只需要满足进程不同,即使在同一台主机上,进程不同并基于网络来实现传输数据就属于网络编程发送端和接收端:数据的发送方进程 称为及网络通信的源主机数据的接收方进场 称为及网络通信的目的主机发送方和接受方称为请求和响应:一般来说获取网络资源,需要进行两次网络数据传输。

2024-10-31 21:58:28 1286 1

原创 java 网络原理/编程

主要用于表示网络主机,其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机的网络地址。就像我们发送快递一样,需要知道对方的收货地址,快递员才能将包裹送到目的地。32位的二进制数,通常被分割为4个“8位二进制数”(也就是四个字节)网络号:标识网段,保证互相连接的两个网段(局域网)具有不同的标识。表示主机,同一个网段内,主机之间具有相同的网络号,但是必须有不同的主机号。IPv4:IPv4数量=2^32,大约43亿左右,而TCP/IP协议规定,每个主机都需要有一个IP地址。

2024-10-29 22:26:22 719

原创 java 文件与IO

⚠️如何判断一个文件是文本文件还二进制文件,最简单的方法就是用记事本打开,如果打开的是乱码就是二进制文件,反之就是文本文件了。

2024-10-26 15:58:32 933

原创 java多线程(锁策略和CAS)

目录一.常见的锁策略 1.1悲观锁和乐观锁1.2读写锁 1.3 重量级锁和轻量级锁 1.4 自旋等待锁锁和挂起等待锁 1.5公平锁和非公平锁 1.6可重入锁和非可重入锁 ⭐️相关的面试题?二.CAS(Compare and swap)⭐️相关的面试题? 三.synchronized的原理 1.偏向锁2.锁消除 3.锁粗化 四、JUC(java.util.concurrent)的常见类和接口 4.1 Reentrant

2024-10-11 10:54:40 869

原创 Java 多线程(详细)

1️⃣继承Thread来创建一个线程类2️⃣ 创建MyThread的实例3️⃣调用MyThread父类Thread中成员方法 start(作用启动线程)4️⃣ sleep()方法是一个静态方法,属于Thread类,用于让当前正在执行的线程暂停执行一段时间引出一个问题为什么run只有一种解决方式呢? 整体代码:方法二:实现Runnable接口(可执行的) 需要搭配Thread类,才能在系统中真正创建出线程方法三:实现匿名内部类,创建Thread的子类对象

2024-09-17 17:05:22 1260

空空如也

空空如也

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

TA关注的人

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