自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 分布式事务的原理

分布式事务的核心是通过协调机制和补偿策略,在复杂环境下尽可能满足业务的一致性需求。选择方案时需权衡一致性、性能、复杂度,通常结合业务场景采用柔性事务(如TCC、Saga)或最终一致性模型。

2025-03-10 20:39:21 901

原创 谈谈你对 Seata 的理解

Seata 是一款开源的分布式事务解决方案,致力于为微服务架构提供高性能和易用的分布式事务支持。

2025-03-07 20:59:16 956

原创 谈谈常用的分布式 ID 设计方案

高性能、分布式环境下无冲突,易于水平扩展,适用于大规模分布式系统,生成的 ID 是全局唯一的,且可以保证高效地生成,不依赖于集中式服务。基于数据库的号段模式,即预先在数据库中生成一段 ID 号段,应用启动时获取该号段,当本地的号段快用完时,再去数据库获取新的号段。:UUID 比较长,占用存储空间大,不保证 ID 生成的有序性,可能会影响数据库索引效率。:实现复杂,需要依赖于 Google 的基础设施,对于一般的分布式系统来说成本较高。:简单易用,无需依赖中心化服务,生成速度快,适用于无需严格顺序的场景。

2025-03-05 21:15:31 441

原创 请你说一下你对服务降级的理解

服务降级是指在服务出现故障或资源不足的情况下,通过牺牲部分功能或性能,以确保核心功能或服务的可用性。其主要目的是在系统面临压力或故障时,仍然能够提供基本的服务,而不是完全失败。

2025-03-04 20:58:59 483

原创 请说一下你对分布式和微服务的理解

分布式系统是由多台计算机(通常称为节点)组成的系统,这些计算机通过网络进行通信并协调工作,以完成共同的任务。从用户的角度来看,分布式系统就像一台单独的机器一样运行,但实际上它由多个独立的计算单元组成。

2025-03-03 20:52:01 415

原创 Nacos数据同步原理

Nacos 的数据同步机制通过 Raft 协议实现集群一致性,确保配置和服务数据的高可用和强一致性。通过优化措施,Nacos 在保证一致性的同时提升了性能。

2025-02-28 20:47:45 431

原创 关于“你对 Spring Cloud 的理解”

Spring Cloud 是一个功能强大的微服务框架,提供了丰富的工具和组件,帮助开发者构建、部署和管理分布式系统。它的设计理念是简化微服务架构的复杂性,使得开发者能够专注于业务逻辑的实现。通过 Spring Cloud,开发者可以更容易地构建高可用、可扩展和易于维护的微服务应用。

2025-02-27 20:53:35 444

原创 IO与NIO的区别

其次,当程序是面向网络进行数据的 IO 操作的时候,Java 里面提供了 Socket 的方式来实现。(如图)基于 Socket 的 IO 通信,它是属于阻塞式 IO,也就是说,在连接以及 IO 事件未就绪的情况 下,当前的连接会处于阻塞等待的状态。也就是说,通过 NIO 进行网络数据传输的时候,如果连接未就绪或者 IO 事件未就绪的情况下,服务端 不会阻塞当前连接,而是继续去轮询后续的连接来处理。因此,总的来说,IO 和 NIO 的区别,站在网络 IO 的视角来说,前者是阻塞 IO,后者是非阻塞 IO。

2025-02-26 20:41:35 423

原创 什么是可重入,什么是可重入锁?它用来解决什么问题?

又尝试获取同一把锁,如果不是可重入锁,那么。

2025-02-25 20:55:42 419

原创 Mysql 主从集群同步延迟问题怎么解决

5. 从库还会创建一个 SQL 线程,从 relay log 里面读取内容,从 Exec_Master_Log_Pos 位置开始 执行读取到的更新事件,将更新内容写入到 slave 的 db。 通过并行复制解决从库复制延迟的问题 实际上,主动复制的场景无法避免同步延迟的问题,如果一定要用强一致方案,那就应该考虑其他能够 实现一致性场景的技术方案。主从数据同步涉及网络数据传输,由于网络通信的延迟以及从库数据处理的效率问题,就会导致主从数 据同步延迟的情况。2. 从库发起连接,连接到主库。

2025-02-24 21:00:50 221

原创 Mysql 事务的实现原理

那么,失败就意味着要对原本执行成功的数据进行回滚,所以 InnoDB 设计了一个 UNDO_LOG 表, 在事务执行的过程中, 把修改之前的数据快照保存到 UNDO_LOG 里面,一旦出现错误,就直接从 UNDO_LOG 里面读取数 据执行反向操作就行了。其次,C 表示一致性,表示数据的完整性约束没有被破坏,这个更多是依赖于业务层面的保证,数据库 本身也提供了一些,比如主键的唯一余数,字段长度和类型的保证等等。最后一个是 D,表示持久性,也就是只要事务提交成功,那对于这个数据的结果的影响一定是永久性的。

2025-02-22 17:09:59 243

原创 索引有哪些缺点以及具体有哪些索引类型

除了上述常见的索引类型外,还有其他一些索引类型,如 R 树索引(用于处理空间数据)、跳表索引等,不同的索引类型在不同的应用场景和数据特点下具有各自的优势和适用范围,在设计数据库索引时,需要根据具体的业务需求和数据特征来选择合适的索引类型。

2025-02-21 21:01:39 318

原创 Redis 存在线程安全问题吗?为什么?

但是 CPU 不是 Redis 的瓶颈点,所以没必要使用多线程来执行指令。第二个,从 Redis 客户端层面。(如图)虽然 Redis 6.0 里面,增加了多线程的模型,但是增加的多线程只是用来处理网络 IO 事件, 对于指令的执行过程,仍然是由主线程来处理,所以不会存在多个线程同时执行操作指令的情况。当然,对于客户端层面的线程安全性问题,解决方法有很多,比如尽可能地使用 Redis 里面的原子指 令,或者对多个客户端的资源访问加锁,或者通过 Lua 脚本来实现多个指令的操作等等。

2025-02-20 20:52:15 145

原创 Spring Bean 生命周期的执行流程

这个阶段主要的作用是,Bean 在开始加载之前,需要从上下文和相关配置中解析并查找 Bean 有关的 扩展实现,比如像`init-method`-容器在初始化 bean 时调用的方法、destory-method`容器在销毁 bean 时调 用的方法。这个阶段涉及的操作,常见的有,init-method`这个属性配置的方法, 会在这个阶段调用。Spring 生命周期全过程大致分为五个阶段:创建前准备阶段、创建实例阶段、依赖注入阶段、 容器缓存阶段和销毁实例阶段。1. 创建前准备阶段【干什么、作用】

2025-02-19 21:01:27 224

原创 SpringBoot自动装配的原理

2.这个配置类是放在第三方的 jar包里面,然后通过 SpringBoot中的约定优于配置思想,把这个配置类的全路径放在 classpath:META-INF/spring.factories文件中。@Enable注解是模块驱动的意思,我们只需要增加某个@Enable注解,就自动打开某个功能,而不需要针对这个功能去做 Bean的配置,@Enable底层也是帮我们去自动完成这个模块相关 Bean的注入。在我看来,SpringBoot是约定优于配置这一理念下的产物,所以在很多的地方,都会看到这类的思想。

2025-02-18 20:49:50 318

原创 spring如何解决循环依赖

而 Spring 中设计了三级缓存来解决循环依赖问题,当我们去调用 getBean()方法的时候,Spring 会 先从一级缓存中去找到目标 Bean,如果发现一级缓存中没有便会去二级缓存中去找,而如果一、二级 缓存中都没有找到,意味着该目标 Bean 还没有实例化。如果不存在循环依赖便会将目标 Bean 存入到二级缓存,否则,便会标记该 Bean 存在循环 依赖,然后将等待下一次轮询赋值,也就是解析@Autowired 注解。第二种三者间依赖:A 依赖 B,B 依赖 C,C 又依赖 A,形成了循环依赖。

2025-02-17 20:58:40 299

原创 怎么理解接口幂等,项目中如何保证的接口幂等

33. 使用状态机的方式来实现幂等,在很多的业务场景中,都会存在业务状态的流转,并且这些状态流 转只会前进,所以我们在对数据进行修改的时候,只需要在条件里面带上状态,就能避免数据被重复修改的问题。32. 使用 Redis 里面的 setNx 命令,我们可以把当前请求中带有唯一标识的信息存储到 Redis 里面, 根据 setNx 命令返回的结果来判断是否是重复执行,如果是则丢弃该请求。为了保证服务端接口的幂等性,我们就需要在服务端的接口中去识别当前请求是重复请求,从而不再进 行数据的变更操作。

2025-02-15 17:29:34 346

原创 Spring Boot 的约定优于配置,你的理解是什么?

Spring Boot 为常见的开发场景提供了一组默认的约定和配置。这些约定是基于社区的最佳实践和经验总结出来的。

2025-02-14 20:21:04 959

原创 布隆过滤器的原理

布隆过滤器是一种高效的概率型数据结构,适用于需要快速判断元素是否属于某个集合的场景。因此,即使某个元素不在集合中,它映射的所有位置可能已经被其他元素设置为。是一种空间效率极高的概率型数据结构,用于快速判断一个元素是否属于某个集合。在缓存系统中,用于快速判断某个数据是否存在于缓存中,避免直接查询数据库。:相比于传统的哈希表或集合,布隆过滤器使用的内存更少。,即判断某个元素在集合中,但实际上不在;,即如果判断某个元素不在集合中,那么它一定不在。:如果判断某个元素不在集合中,那么它一定不在。

2025-02-13 20:43:26 498

原创 双亲委派(JVM)

定义:双亲委派模型要求除了顶层的启动类加载器外,其余的类加载器都应当有自己的父类加载器。当一个类加载器收到类加载请求时,它首先不会自己去尝试加载这个类,而是把请求委派给父类加载器去完成,每一层的类加载器都是如此,直到顶层的启动类加载器。如果父类加载器无法完成加载任务,子类加载器才会尝试自己去加载。作用:这种模型可以避免类的重复加载,保证 Java 程序的稳定运行。不同的类加载器负责加载不同范围的类,通过这种层级关系,可以确保类的唯一性和安全性。

2025-02-05 20:28:44 790

原创 Shiro

在Shiro中,盐值可以在返回AuthenticationInfo时带上,SecurityManager会根据提交的明文密码、加密算法、加密次数和盐值进行加密,然后与AuthenticationInfo中的密码进行比对。Shiro提供了完整的企业级会话管理功能,不依赖于底层容器(如Tomcat),不管是J2SE还是J2EE环境都可以使用,提供了会话管理,会话事件监听,会话存储/持久化,容器无关的集群,失效/过期支持,对Web的透明支持,SSO单点登录的支持等特性。// 散列的次数,比如散列两次。

2025-02-05 20:27:40 323

原创 代理模式的作用

相比于静态代理来说,动态代理更加灵活。我们不需要针对每个目标类都单独创建一个代理类,并且也不需要我们必须实现接口,我们可以直接代理实现类(说到动态代理,Spring AOP、RPC 框架应该是两个不得不提的,它们的实现都依赖了动态代理。使用的是 JDK 动态代理,我们先来看看 JDK 动态代理的使用。上面我们是从实现和应用角度来说的静态代理,从 JVM 层面来说,实际应用场景非常非常少,日常开发几乎看不到使用静态代理的场景。就 Java 来说,动态代理的实现方式有很多种,比如。CGLIB 动态代理机制。

2025-02-05 20:26:27 816

原创 redis淘汰策略

可以使用Redis的数据淘汰策略,Redis 内存数据集大小上升到一定大小的时候,就会施行这种策略。具体说来,主要有 6种内存淘汰策略:voltile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰。

2025-02-05 20:23:54 864

原创 MVCC+锁

MVCC概念:MVCC 是一种并发控制机制,通过为数据库中的数据维护多个版本,使得不同的事务在并发执行时可以访问数据的不同版本,从而避免读写冲突,提高并发性能。 工作原理 数据版本管理:在支持 MVCC 的数据库中,每行数据都有多个版本,每个版本包含数据的状态和版本号等信息。事务对数据进行修改时,会创建一个新的数据版本,而不是直接修改原数据。 事务可见性判断:每个事务在启动时都会被分配一个唯一的事务 ID。当事务读取数据时,MVCC 会根据事务 ID 和数据版本的信息,判断该事务能够看到哪些数据

2025-01-06 20:27:25 111

原创 JVM和异常

JVM 是运行 Java 字节码的虚拟计算机,它是 Java 程序能够实现 “一次编写,到处运行(Write Once, Run Anywhere)” 特性的关键所在。Java 程序首先被编译成字节码(.class 文件),然后由 JVM 在不同的操作系统和硬件平台上执行这些字节码,屏蔽了底层操作系统和硬件的差异。

2024-12-30 19:53:04 891

原创 Mybatis二级缓存

【代码】Mybatis二级缓存。

2024-12-20 20:24:04 445

原创 MyBatis(二)

这里指定了数据源的类型为 POOLED,并且配置了数据库驱动、连接 URL、用户名和密码等参数。

2024-12-19 20:25:57 661

原创 Mybatis

一、基本概念与作用持久层:在软件架构中,持久层主要负责将数据存储到数据库中(如 MySQL、Oracle 等)以及从数据库中读取数据。MyBatis 简化了这个过程,让开发人员能够更高效地进行数据持久化操作。例如,在一个电商系统中,需要将用户信息、商品信息、订单信息等保存到数据库,并在需要的时候从数据库中检索这些信息,MyBatis 就可以帮助完成这些操作。对象 - 关系映射(ORM):MyBatis 是一个半自动化的 ORM 框架。它不像一些完全自动化的 ORM 框架那样,会自动生成 SQL 语句。

2024-12-18 21:00:12 573

原创 Mybatis

Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,使得开发者在开发时只需要关注如何编写SQL语句,而不需要处理加载驱动、创建连接、创建statement等繁杂的过程。Mybatis提供了XML或注解的方式来配置和映射原生信息,将POJO(Plain Old Java Object,简单的Java对象)映射成数据库中的记录,从而避免了几乎所有的JDBC代码和手动设置参数以及获取结果集的工作。

2024-12-17 21:00:28 1209

原创 MySQL事务和锁

事务是一组逻辑操作单元,这些操作要么全都执行,要么全都不执行。事务处理机制是数据库系统中保证数据一致性和完整性的重要机制之一。在MySQL中,事务的起始和结束通常通过显式命令来控制,如START TRANSACTION、COMMIT和ROLLBACK等。锁是数据库并发控制的重要手段之一,用于控制多个事务对同一数据的并发访问。通过锁机制,可以确保一次只有一个用户可以修改或读取数据,从而避免数据不一致和并发问题。

2024-12-16 20:52:30 840

原创 技术总结(四十五)

线性搜索是一种非常简单的搜索算法。在这种类型的搜索中,逐个对所有项目进行顺序搜索。检查每个项目,如果找到匹配项,则返回该特定项目,否则搜索将继续,直到数据收集结束。二叉排序树(Binary Search Tree, BST),也被称为有序二叉树或排序二叉树,是一种特殊的二叉树数据结构。节点的左子树只包含键值小于该节点键值的节点。节点的右子树只包含键值大于该节点键值的节点。左子树和右子树也必须分别是二叉排序树。每个节点的键值是唯一的(没有重复键值)。

2024-12-09 20:38:17 697

原创 技术总结(四十四)

变量的那段代码用到了 Java8 的知识,它等于下面这段代码,如果你写了下面这段代码的话,IDEA 会提示你转换为 Java8 的格式(IDEA 真的不错!再举个简单的例子:两个人去宝屋收集宝物,这两个共用一个袋子的话肯定会产生争执,但是给他们两个人每个人分配一个袋子的话就不会出现这样的问题。方法来获取默认值或将其值更改为当前线程所存的副本的值,从而避免了线程安全问题。变量,那么访问这个变量的每个线程都会有这个变量的本地副本,这也是。通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。

2024-12-03 20:38:40 844

原创 技术总结(四十三)

MySQL官方对于索引的定义:索引是帮助MySQL高效获取数据的数据结构。​MySQL在存储数据之外,数据库系统中还维护着满足特定查找算法的数据结构,这些数据结构以某种引用(指向)表中的数据,这样我们就可以通过数据结构上实现的高级查找算法来快速找到我们想要的数据。而这种数据结构就是索引。​简单理解为“排好序的可以快速查找数据的数据结构”。

2024-12-02 20:19:02 652

原创 技术总结(四十二)

在数据库操作中,事务(Transaction)是一系列操作的集合,这些操作要么全部成功执行,要么全部不执行,以保证数据的一致性和完整性。然而,当多个事务并发执行时,可能会出现一些数据读取问题,例如脏读、不可重复读和幻读。事务隔离级别(Transaction Isolation Level)就是用来控制并发事务之间相互影响的程度,以解决这些潜在的数据读取问题。

2024-12-01 21:09:41 481

原创 技术总结(四十一)

索引的概念:索引就好比一本书的目录,它能帮助 MySQL 快速定位到表中的数据行,而不用全表扫描。通过创建合适的索引,可以大大提高查询的效率。例如,在一个存储了大量员工信息的表中,如果经常要根据员工的工号来查询员工记录,为工号字段创建索引后,数据库就能快速找到对应记录,而不是逐行去检查表中的每一条数据。索引的类型B-Tree 索引(默认常用的索引类型):它以 B 树数据结构来存储索引数据,适用于全键值、键值范围和键前缀查找等情况。像常见的INTVARCHAR。

2024-11-29 19:43:32 839

原创 技术总结(四十)

MongoDB 中的记录就是一个 BSON 文档,它是由键值对组成的数据结构,类似于 JSON 对象,是 MongoDB 中的基本数据单元。是否需要大数据量的存储?MongoDB 支持多种类型的索引,包括单字段索引、复合索引、多键索引、哈希索引、文本索引、 地理位置索引等,每种类型的索引有不同的使用场合。BSON [bee·sahn] 是 Binary JSON的简称,是 JSON 文档的二进制表示,支持将文档和数组嵌入到其他文档和数组中,还包含允许表示不属于 JSON 规范的数据类型的扩展。

2024-11-28 20:40:20 989

原创 技术总结(三十九)

例如,在企业的客户关系管理系统中,客户的信息可以存储在一个 SQL 数据库中,按照客户编号、姓名、联系方式等字段进行组织,方便企业员工随时查询和更新客户信息。但是,过多的索引也会占用大量的存储空间,并且会影响数据的插入、更新和删除操作的性能。比如,通过监控工具发现某个查询语句的响应时间过长,可以分析查询语句的执行计划,优化查询逻辑,提高查询性能。通过在数据库表的特定字段上创建索引,可以加快数据的检索速度。例如,企业可以定期清理过期的订单数据,优化数据库索引,检查客户信息的完整性,确保数据库的高效运行。

2024-11-27 20:32:51 585

原创 技术总结(三十八)

索引是一种特殊的数据结构,它存储在磁盘上。数据库使用索引来快速定位表中的数据行,而无需对整个表进行扫描。可以把它想象成图书馆的卡片目录,通过它能快速找到你想要的书籍(数据),而不是在整个图书馆(数据表)中盲目寻找。

2024-11-26 20:17:21 764

原创 技术总结(三十七)

查询速度快:由于数据存储在索引的叶子节点中,按主键或按聚簇索引进行查询非常快,特别是范围查询(如 BETWEEN 或 ORDER BY)效率高,因为数据物理上按索引顺序存储。非主键索引 在 InnoDB 中就是非聚簇索引,这些索引的叶子节点存储的是索引列的值,以及对应行的主键值,而不是直接存储数据。非聚簇索引的叶子节点存储的是索引列的值和指向实际数据的指针(即行号或主键)。聚集索引 是指数据表中的数据存储按照索引的顺序排列,因此索引的叶子节点存储的不仅是索引列的值,还存储整行数据。

2024-11-25 19:08:14 577

原创 技术总结(三十六)

图是一种较为复杂的非线性结构。但是,图形结构的元素之间的关系是任意的。简单来说,图就是由顶点的有穷非空集合和顶点之间的边组成的集合。,其中,G 表示一个图,V 表示顶点的集合,E 表示边的集合。下图所展示的就是图这种,并且还是一张有向图。有向图图在我们日常生活中的例子很多!比如我们在社交软件上好友关系就可以用图来表示。

2024-11-24 19:20:38 684

空空如也

空空如也

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

TA关注的人

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