自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JSON Web Token在登陆中的使用

Header(头部):通常包含签名的算法信息(例如 HMAC SHA256 或 RSA)。Payload(负载):包含声明(Claims)。声明可以是关于实体(通常是用户)的信息,或者元数据。JWT 的负载部分是 base64 编码的。Signature(签名):签名是用来验证 JWT 数据是否被篡改的。它通过将 header 和 payload 使用私钥加密生成,确保 JWT 的数据安全性和完整性。@Component@Overridetry {// 去掉 "Bearer " 前缀。

2025-02-24 22:06:19 1026

原创 Seata基本使用及二阶提交流程

AT 模式:适用于标准的数据库操作,自动管理事务,适合不涉及复杂业务逻辑的场景。TCC 模式:适用于跨多个服务的复杂业务,需要手动编写补偿逻辑。SAGA 模式:适用于长事务,适合拆分为多个子事务的场景,每个子事务都可以独立回滚。XA 模式:严格一致性的分布式事务协议,适用于需要强一致性的场景,如金融交易等。

2025-02-18 13:22:07 751

原创 Spring Cloud Gateway中断言路由和过滤器的使用

我们通过继承类,创建了一个名为/*** 自定义路由断言工厂*/@Component// 传入Config类@Override// 返回配置类中的字段顺序@Override@Override// 获取请求// 从请求的查询参数中获取 'param' 对应的值// 比较查询参数的值与配置中的 'value' 是否匹配// 配置类// 查询参数名称// 查询参数期望的值// Getter和Setter方法类该类继承自,实现了自定义断言工厂的功能。

2025-02-17 12:51:07 1447

原创 SpringCloud中Sentinel基础场景和异常处理

Override// 使用 Feign 完成远程调用// 总金额。

2025-02-14 13:42:19 1448

原创 SpringCloud中OpenFeign远程调用

Bean// 设置日志级别Retryer添加请求头@Component/*** 请求拦截器* @param template 请求模板*/@Override@Component@Override// 返回默认值或做错误处理。

2025-02-11 12:14:10 722

原创 基于Redis的Stream消息队列实现异步秒杀

这是秒杀逻辑的入口,负责调用 Redis 中的 Lua 脚本以完成高并发场景下的秒杀操作,包含库存校验、扣减库存、用户下单记录以及异步下单的消息发送。通过全局唯一的订单 ID 和 Lua 脚本原子性,确保秒杀操作在高并发下的性能与一致性,并根据脚本返回结果快速响应用户秒杀请求。4.完成下单项目启动时开启一个线程任务,尝试获取消息队列中的订单信息。

2025-01-16 18:11:43 839

原创 Redis消息队列

Redis的LIST数据结构支持双向链表操作,可以作为简单的消息队列来使用。通过Lpush(从左插入)和Rpop(从右取出)实现消息的生产和消费。

2025-01-13 12:10:13 701

原创 基于Redisson实现重入锁

【代码】基于Redisson实现重入锁。

2025-01-05 19:57:58 823

原创 高并发场景下秒杀券的库存超卖问题(乐观锁解决)

时才会执行扣减操作。如果多个请求同时扣减库存,把当前的查询到的。的条件,其他请求会因为条件不满足而失败。首先通过更新语句,将。

2024-12-16 14:17:45 877

原创 Redis 全局 ID 的生成

Redis 全局 ID 是一种基于时间戳和序列号生成的全局唯一标识符。生成逻辑依赖 Redis 的自增操作(),并结合一定的时间位移计算,保证在分布式系统中 ID 的唯一性和有序性。

2024-12-11 22:05:58 413

原创 Redis缓存穿透及常见的解决方案

Redis缓存穿透及常见的解决方案

2024-11-25 16:03:01 956

原创 ThreadLocal 的概念及使用场景(登录状态验证)

是 Java 提供的一种存储每个线程独立变量的方法,非常适合处理每个线程需要有独立变量副本的场景。适用场景适合用户上下文信息存储、事务管理、数据库连接管理等需要在线程中共享数据但与其他线程独立的数据。优点:它的最大优点是避免了显式的同步操作,提供了线程安全的数据隔离。注意事项:要小心使用,防止内存泄漏。适时调用remove()方法清理数据是最佳实践。在登录系统中,比如登录状态验证中,可以很好地保证每个用户请求的线程都有自己的用户信息,从而避免了线程数据的干扰,确保系统的安全性和稳定性。

2024-11-10 20:36:30 731

原创 登陆验证中的cookie和session对比

Cookie:Cookie 是一种存储在客户端(如浏览器)的小数据。它通常被服务器生成并发送给客户端,之后在每次请求时由客户端将其附带返回服务器,从而实现用户的身份识别和状态管理。Session:Session 是一种服务器端的会话机制,用于跟踪特定用户的状态和数据。通常会在服务器中为每个用户维护一个唯一的session,用以存储用户的数据,如登录状态等。Cookie用于存储session_id,帮助服务器识别客户端的身份。Session存储在服务器端,保存用户登录状态和相关数据。

2024-11-08 19:48:08 419

原创 VUEX的介绍和使用方式

Vuex 是专为 Vue.js 应用设计的状态管理模式,它可以帮助开发者在组件之间更方便地共享数据。Vuex 使用集中化的方式来管理应用的状态,将应用中所有共享的状态存储在一个 store 中。这样可以避免组件之间因为数据共享而产生的复杂交互,提升代码的可维护性和可扩展性。Vuex 的核心思想是将应用状态集中存储在一个地方,并且只有通过特定的方式(mutations)才能修改这些状态,从而保证数据的可预测性和一致性。

2024-11-03 15:23:52 1012

原创 Spring Task介绍与基本使用

简单集成:它是 Spring 框架的一部分,无需额外配置,使用方便。强大的调度功能:支持多种方式的任务调度,例如固定频率、固定延迟以及 Cron 表达式。支持并发执行:可以灵活配置任务执行的线程池,管理并发任务的执行。@Bean// 设置线程池大小秒 分 时 日 月 周 [年]秒(0-59)分(0-59)时(0-23)日(1-31)月(1-12)周(0-7,其中0和7都表示周日)例如,")表示每天中午 12 点执行。

2024-10-20 16:12:41 726 1

原创 Spring Cache 的说明及常用注解

多种缓存提供者支持。

2024-10-07 22:11:08 453 1

原创 Mybatis中遍历List内容进行动态SQL拼接

定义了 MyBatis 的查询映射,:表示集合中的每一项在循环时的变量名。集合,将其生成 SQL 的。:表示生成的 SQL 中。:指定传入的集合名称。

2024-09-30 11:58:38 331

原创 Springboot中基于注解实现公共字段自动填充

AutoFill自定义注解用于标识某个方法需要进行公共字段的自动填充。注解包含一个刚才定义枚举值,用于指定该方法对应的数据库操作类型,是插入还是更新。我下面对重要内容进行解释:标注该注解只能应用在方法上。:指定该注解在运行时保留,可以通过反射机制获取该注解。:这个方法定义了注解的一个属性,必须设置枚举值(INSERT或UPDATE),来表示操作类型。/*** 自定义注解,用于标识某个方法需要进行功能字段自动填充*/// 数据库操作类型:UPDATE 或 INSERT。

2024-09-29 23:04:39 1049

原创 Nginx配置负载均衡

upstream通过Nginx的负载均衡功能,可以轻松地将请求分发到多台服务器,从而提高系统的可用性、容错性和处理能力。根据不同的应用场景,选择合适的负载均衡策略(如轮询、权重、IP哈希、最少连接)来优化系统的性能。默认轮询:适用于负载相对均衡的后端服务器。权重:适合不同性能服务器的场景,能够合理分配负载。IP哈希:适用于需要会话保持的场景。最少连接数:适用于处理请求时间差异较大的场景。

2024-09-17 20:29:18 4474

原创 基于TCP实现聊天

【代码】基于TCP实现聊天。

2024-09-17 20:17:13 508

原创 RabbitMQ的Direct Exchange模式实现的消息发布案例

表示自动应答(auto-acknowledge),即消息处理完毕后,RabbitMQ会自动确认消息已成功处理。如果需要手动应答,可以将。:消费者的队列名称、交换机名称和路由键与生产者保持一致,即监听。获取消息内容,随后可以对消息进行处理、存储或其他业务逻辑操作。来定义收到消息后的处理逻辑。Consumer消费者代码。队列,并接收路由键为。,并在处理完成后调用。

2024-09-11 22:23:04 721

原创 在RabbitMQ中四种常见的消息路由模式

【代码】在RabbitMQ中四种常见的消息路由模式。

2024-09-11 20:40:53 1372

原创 Redis中事务与乐观锁

会失败,事务不会执行。这时可以选择重新执行整个操作,确保数据一致性。此时就相当于SQL中的乐观锁功能。此时我想在一个事务中更新多个相关联的键,并希望确保在执行过程中这些键不会被其他客户端修改。被其他客户端修改了,

2024-08-25 20:36:10 270

原创 Redis模型中Geospatia、HyperLogLog、Bitmap使用

【代码】redis模型中Geospatia、HyperLogLog、Bitmap使用。

2024-08-16 11:53:11 431

原创 Swagger中配置环境及扫描接口

docketdev。

2024-08-08 15:22:28 479

原创 Spring Security中认证和授权模式

【代码】Spring Security中认证和授权模式。

2024-08-01 11:30:06 482 1

原创 Linux中基本目录介绍

这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。: 这个目录中存放着在不断扩充的东西,我们引用数据库经常会涉及到的目录放在这个目录下。: 用户的主目录,在Linux中,每个用户都有一个自己的目录,一般这目录名是以用户的账号命名的。: 这个目录是用来存放一些临时文件的。用完即删除的文件,可以放在这个目录下,安全!: 这个目录用来存放所有的系统管理所需要的配置文件和子目录。: 这是系统管理员,也称作超级管理员的用户目录。

2024-07-27 21:17:41 260 1

原创 springboot中resource目录介绍与Thymeleaf使用

访问性static中的资源可以直接被 Web 浏览器请求和获取,而templates目录中的文件则需要经过服务器处理(如填充数据、执行逻辑)才能形成最终的页面。交互性templates目录下的文件通常包含动态内容,需要填充数据,适用于用户界面的动态交互,而static更多用于提供不会频繁变动的客户端代码和资源。技术实现static目录的处理较为简单,主要涉及静态文件的服务;templates的处理则复杂,涉及到模板引擎的选择和配置,以及与后端数据的动态绑定。

2024-07-25 11:19:03 565

原创 SpringBoot中JSR303校验

JSR 303 是 Java EE 的一种标准,用于基于注解的对象数据验证。在Spring Boot应用中,你可以通过添加注解直接在POJO类中声明验证规则。这样可以确保在使用这些对象进行操作之前,它们满足业务规则。个人认为非常有用的,因为它减少了代码中的校验逻辑,使得校验逻辑更加集中且易于管理。

2024-07-23 16:53:18 371

原创 springboot给属性赋值的两种方式(yaml与properties)

在Spring Boot中,配置文件是用来设置应用程序的各种参数和操作模式的重要部分。Spring Boot支持两种主要类型的配置文件:properties文件和YAML文件。这两种文件都可以用来定义相同的配置,但它们在格式和表达能力上有所不同。

2024-07-23 16:39:21 726 1

原创 Spring MVC中Restful风格引入

支持注解:Spring的RestController和RequestMapping等注解使得创建RESTful服务变得简单直观。数据绑定:自动的数据绑定支持,可以将请求自动转换为模型对象,同时也支持多种数据格式的响应,如XML、JSON等。异常处理:通过ExceptionHandler提供了统一的异常处理机制。依赖注入:利用Spring的依赖注入优势,更好地管理服务层。{id} :用户的唯一标识符。{a}和{b}:这两个参数可以用于业务逻辑中的其他目的,比如作为查询参数或用于修改返回的数据。

2024-07-12 20:03:23 720

原创 MyBatis中复杂查询(一对多和多对一)

在MyBatis中处理一对多(1)和多对一(N:1)关系是常见的需求,尤其是在操作数据库中存在关联表时。这些关系的管理能让数据查询更加直观和灵活。下面分别介绍如何在MyBatis中配置和查询这两种类型的关系。

2024-07-05 14:54:16 413

原创 Mybatis使用注解开发

通过以上步骤,可以实现 MyBatis 的注解开发,使得持久层代码更加清晰,减少了 XML 配置的繁琐,提高了开发效率。在实际应用中,还需要考虑事务管理、连接池配置等因素以保证应用的健売和性能。

2024-07-04 14:32:36 351

原创 Mybatis实现流程

创建一个MyBatis映射器XML文件,用于映射SQL查询到 UserDAO接口。//此处对应接口类//标签id="getList"对应接口的方法名字

2024-06-30 18:28:14 303

原创 Spring动态代理详解

私有成员变量rent:它是Rent接口的一个实现,代表被代理的对象。setRent 方法:用于设置代理的目标对象。getProxy 方法:利用ProxynewProxyInstance方法生成代理对象。这个方法需要三个参数:类加载器,接口数组(代理类需要实现的接口),以及一个InvocationHandler实例(当前对象this)。invoke 方法:这是代理实例的方法调用时实际执行的代码。invoke方法可以在调用目标方法前后添加自定义逻辑,本例中只是简单地调用了目标对象的相应方法。//租房。

2024-06-29 13:23:46 869

原创 javaweb中ServletContext的使用

ServletContext是一个强大的 web 应用程序级别的对象,它允许不同的 servlet 共享数据和资源。通过它,开发者可以在 servlet 间传递信息、访问全局资源和记录日志,从而使得 web 应用程序的不同部分能够更好地集成和协作。它特别适合处理那些需要跨多个 servlet 维护状态或共享配置信息的情况。

2024-06-20 22:33:31 443

原创 FactoryBean 接口的使用

Override@Override@Test//获取IOC容器在上述示例中,当请求时,实际上Spring容器会调用的方法返回实例。在Spring中提供了一个强大的机制,用于封装单个对象的创建逻辑,特别是当对象的创建过程比较复杂时(如需要多步骤配置或依赖外部系统资源)。通过使用,可以保持Spring配置的简洁性,同时将复杂的实例化逻辑封装在容易管理的Java类中。

2024-06-11 23:27:14 387 1

原创 spring中基于setting和构造器的注入方式

实现方式:在类中添加对应的属性以及对应的setter方法,在配置文件中使用元素进行注入。

2024-06-11 17:32:47 353 1

原创 Spring中获取bean的三种常用方式

在Spring框架中,一个bean是指由SpringIOC容器管理的一个Java对象。Spring提供了一种依赖注入的机制,可以通过在配置文件中配置bean的定义,实现在代码中通过IOC容器获取bean的实例。根据名称获取Bean方法二根据类型获取Bean方法三 (推荐)根据名称+类型来获取Bean

2024-06-11 17:14:22 874

原创 TCP三次握手四次挥手及time_wait状态解析

如上图,在服务器端发送一个FIN时,客户端会处于time_wait状态。当处于time_wait状态时,我们无法创建新的连接,因为端口被占用。

2023-04-14 14:10:44 1223 1

空空如也

空空如也

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

TA关注的人

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