自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

天天的博客

一个热爱Java的程序员

  • 博客(17)
  • 收藏
  • 关注

原创 高效灵活:策略模式在 Spring 中的优雅整合与应用

策略模式是一种行为模式,也是替代大量if else的利器(在项目设计中用的最多的)一句总结就是:定义一组算法类,将每个算法分别封装起来,让它们可以互相替换

2024-08-10 20:11:58 1779

原创 用例图、状态图和类图,31 张图带你速成 UML

从弱到强的关系排序中,这些概念依次为:依赖、关联、聚合、组合,即 依赖 < 关联 < 聚合 < 组合。所以不知道选什么的时候,选依赖肯定没错,但是图的表示也会变得模糊。

2024-12-04 11:29:05 1053

原创 乐观锁和悲观锁的区别 & 使用 & 使用场景 | 图解

悲观锁适用于并发写入多、竞争激烈场景,避免无用尝试。乐观锁适用于多读少写或并发不激烈场景,提高性能。

2024-11-14 16:24:02 783

原创 通俗易懂的理解递归 & 回溯 & DFS | 图解 & 伪代码

递归:方法自己调用自己,每一次调用都会更加接近递归的终止条件,用于解决可以分解为相似子问题的问题。回溯:通过尝试所有可能的选项,并在发现某个选项不可行时撤销上一步重新选择的方法。DFS:用于遍历或搜索树或图的算法,它沿着每个分支尽可能深地搜索,直到达到目标或叶子节点,然后回溯并继续搜索其他未访问的分支。

2024-11-03 16:23:28 1391

原创 运用 JDK8 中的核心新特性

JDK8新特性:1)引入了 Lambda 表达式 2)引入了日期类、接口默认方法、静态方法 3)新增 Stream 流式接口 4)引入 Optional 类 5)新增了 CompletableFuture 等并发实现类。

2024-10-15 19:26:12 1228

原创 学习 RocketMQ 单机部署、消息发送、消息接收

RocketMQ是一款由阿里巴巴开源的分布式消息中间件。它具有低延迟、高吞吐量、高可用性和高可靠性等特点,适用于构建具有海量消息堆积和异步解耦功能的应用系统。

2024-10-11 10:13:49 1359

原创 学习并发编程中的 synchronized

学习并发编程时,synchronized 关键字至关重要。它用于确保同一时间只有一个线程能访问被其修饰的方法或代码块,避免数据不一致。虽然synchronized简化了线程同步,但不当使用会导致性能瓶颈。因此,合理设计锁机制是并发编程的关键。

2024-10-03 16:09:15 871

原创 确保接口安全:六大方案有效解决幂等性问题

幂等(idempotency)本身是一个数学概念,常见与抽象代数中,代表一个函数或操作的结果不受其输入或者执行次数的影响,例如,f(n) = 1^n,无论 n 为多少,f(n)的值永远为 1。在软件开发领域,幂等对请求执行结果的一个描述,这个描述就是无论执行多少次相同的请求,产生的效果和返回的结果和发出单个请求是一样的。有时我们在填写某些form表单时,保存按钮不小心快速点了两次,表中竟然产生了两条重复的数据,只是id不一样。我们在项目中为了解决接口超时问题,通常会引入了重试机制。

2024-10-02 10:49:58 1758

原创 学习 MySQL MVCC

MVCC 是 MySQL 等数据库用于提高并发性能的关键技术,通过维护数据多个版本来避免读写冲突,确保事务隔离性,减少锁竞争,提升数据库响应速度,尤其适用于读多写少的场景,优化整体系统性能。

2024-09-18 19:37:12 1350

原创 学习 MySQL 锁机制

间隙锁(GapLock):锁定索引记录间隙(不含该记录),确保索引记录间隙不变,防止其他事务在这个间隙进行insert,产生幻读。为了避免 DML 在执行时,加的行锁与表锁的冲突,在 InnoDB 中引入了意向锁,使得表锁不用检查每行数据是否加锁,使用意向锁来减少表锁的检查。InnoDB的数据是基于索引组织的,行锁是通过对索引上的索引项加锁来实现的,而不是对记录加的锁。行级锁,每次操作锁住对应的行数据。,加锁后整个实例就处于只读状态,后续的DML的写语句,DDL语句,已经更新操作的事务提交语句都将被阻塞。

2024-09-16 09:31:04 1236

原创 利用 Redis Sorted Set 实现高性能排行榜

Redis 中的 Sorted Set 是一种有序集合,每个元素都关联一个分数score,用于排序。它类似于 Java 中的 HashMap,但增加了排序功能,其中 HashMap 存储键值对,而 Sorted Set 存储带分数的元素,通过分数排序。Sorted Set 支持范围查询和快速排序操作。

2024-08-24 18:20:58 999

原创 实战中有效应对缓存穿透、击穿、雪崩的综合解决方案

实战中有效应对缓存穿透、击穿、雪崩的综合解决方案

2024-08-23 20:18:19 1151

原创 基于 Spring AOP与 Redisson 的令牌桶限流注解实践

整体限流:比如说一个系统只有1万QPS,一下子来了2万,系统就会出现问题,所以要将后到达的1万请求给限制住,就把流量给限制在1万以内了,被限流的用户可以给他返回一个”系统繁忙请稍后重试“之类,请重试的提示,这样起码可以保住1万的请求能正常返回。局部限流:也可以叫接口限流,比如说用户发送短信验证码的场景,因为短信服务是收费,不可能让用户可以无限发,要根据用户手机号或者ip进行限制,可以设置60秒内可以发送2次,超过两次就提示”操作频繁请稍后重试“的提示。/*** 限流类型/**

2024-08-14 23:21:44 1028

原创 如何设计一个既通用又高效的前置校验?责任链模式来帮忙!

前置校验是软件开发中一个重要的环节,它确保数据在进入核心处理逻辑之前满足一定的条件或标准。以下是几个前置校验的场景示例在责任链模式中,多个处理器(参照上述拦截器)依次处理同一个请求。一个请求先经过 A 处理器处理,然后再把请求传递给 B 处理器,B 处理器处理完后再传递给 C 处理器,以此类推,形成一个链条,链条上的每个处理器各自承担各自的处理职责,如下图所示。所以在责任链模式很适合前置校验的场景,当全部校验通过后才执行核心逻辑, 校验不通过则直接返回, 不让请求到达下一个处理器。/**

2024-08-12 17:03:50 1369

原创 基于自定义注解与 Spring AOP 的通用日志记录实现

在软件开发中,针对用户操作日志的记录是一个普遍且重要的需求,旨在跟踪用户行为、保障系统安全及进行后续的问题追踪与性能分析。传统上,若在每次方法调用时都手动构造日志实体并同步插入数据库,不仅会导致代码冗余且难以维护,还会因同步操作而拖慢系统性能。为了优化这一流程, 可以使用自定义注解和aop的方式进行对日志的记录, 能动态记录指定记录的参数, 如请求参数, 响应参数, 操作时间, 操作用户的用户名, 方法耗时等等, 可以灵活拓展,而无需在每个业务逻辑点中显式编写日志代码。

2024-08-09 00:36:50 1321

原创 构建高并发注册系统:Redisson 与分库分表策略实践

在短时间内,系统或平台接收到的大量新用户注册行为。当大量用户同时尝试注册时,系统需要能够快速响应并处理这些请求。如果系统处理能力不足,用户可能会遇到注册失败、页面加载缓慢或超时等问题。数据重复与唯一性校验: 在注册过程中,需要确保用户提交的信息(如用户名、邮箱、手机号等)是唯一的。在高并发情况下,系统需要高效地进行唯一性校验,避免数据重复。安全性。

2024-08-02 13:27:49 850

原创 MySQL 主从01搭建、原理与优缺点

主从复制是指将主数据库的DDL和DML操作通过二进制日志传到从库中, 然后从库对这些日志重新执行(也叫重做), 从而使得从库与主库的数据保持同步MySQL支持一台主库同时向多台从库进行复制, 从库同时也可以作为其他从服务器的主库, 实现链状复制。

2024-07-29 13:26:19 842

空空如也

空空如也

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

TA关注的人

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