自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 分布式事务的原理

分布式事务是指在分布式系统中,涉及多个节点或服务之间的数据操作,需要保证这些操作要么全部成功提交,要么全部失败回滚,以维持数据的一致性和完整性。

2025-03-10 20:56:12 262

原创 谈谈你对 Seata 的理解?

Seata 将分布式事务抽象为一个全局事务,全局事务由若干个分支事务组成。全局事务管理器(Global Transaction Coordinator,GTC)负责协调这些分支事务,确保它们要么全部提交,要么全部回滚,以保证数据的一致性。

2025-03-07 20:59:59 350

原创 常见的限流算法有哪些?

常见的限流算法主要有以下几种:

2025-03-06 20:59:07 283

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

分布式 ID 设计方案需要满足全局唯一性、高性能、高可用、趋势递增等要求,以下是一些常用的分布式 ID 设计方案:INCRINCRBYINCRINCRBYINCR。

2025-03-05 21:11:48 914

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

服务降级是指在分布式系统中,当系统出现高并发、资源紧张或某些服务出现故障等情况时,为了保证核心服务的稳定性和可用性,主动降低一些非核心服务的功能或性能,甚至暂时关闭某些不重要的服务,以释放资源,确保整个系统的关键功能能够正常运行的一种应对策略。

2025-03-04 20:58:50 363

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

分布式系统是解决大规模系统问题的理论基础,而微服务是在此理论指导下的具体架构实践。,每个服务围绕业务能力构建,通过轻量级协议(如HTTP/REST、gRPC)通信。:所有微服务架构必然是分布式的,但分布式系统不一定是微服务(如分布式数据库)。:不同服务可采用不同技术栈(如Java、Go、Python)。:需服务发现(如Consul)、配置中心、链路追踪。微服务依赖分布式系统的技术(如服务发现、负载均衡)。:服务间通过契约(API)交互,而非集中式规范。电商平台(订单服务、库存服务、支付服务独立)。

2025-03-03 21:00:39 416

原创 nacos数据同步原理能说下吗?

Nacos 是一个用于服务发现、配置管理和服务治理的平台,其数据同步原理涉及到多个方面,包括服务注册与发现的数据同步以及配置数据的同步。

2025-02-28 21:01:27 317

原创 关于“你对 Spring Cloud 的理解”详细讲解?

Spring Cloud 是一系列框架的集合,它基于 Spring Boot 实现,为构建微服务架构提供了丰富的工具和解决方案。

2025-02-27 21:21:10 278

原创 IO 和 NIO 有什么区别?

在 Java 编程中,IO(Input/Output)和 NIO(New Input/Output)是用于处理输入输出操作的两种不同方式,下面将从多个方面详细介绍它们的区别。

2025-02-26 21:01:21 887

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

可重入锁(Reentrant Lock)是一种同步机制,它允许同一个线程在持有锁的情况下再次获取该锁,而不会导致死锁。当一个线程第一次获取可重入锁时,锁的计数器会加 1,此后该线程再次获取同一把锁时,计数器会继续递增。只有当该线程释放锁的次数与获取锁的次数相同时,锁才会被真正释放,其他线程才能获取该锁。例如,在一个面向对象的程序中,一个类的方法可能会调用同一个类的其他方法,而这些方法都需要对类的某个成员变量进行同步访问。是一个典型的可重入锁实现;在 C++ 的标准库中,以下是 Java 中使用。

2025-02-25 20:49:21 334

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

MySQL主从集群同步延迟是常见问题,可能由网络延迟、硬件性能、配置不当、大事务或高并发写入等原因导致。若延迟持续且无法修复,通过物理备份(如Percona XtraBackup)重建从库。通过综合优化主从配置、硬件资源和架构设计,可显著降低同步延迟风险。使用多主同步集群替代传统主从架构(牺牲部分性能)。:延迟时间(可能不准确,需结合其他指标)。使用多个从库分摊读请求,避免单从库过载。:优化从库硬件、启用并行复制、调整参数。确保从库的CPU、内存配置不低于主库。:拆分事务、升级架构、分库分表。

2025-02-24 21:01:48 1033

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

Redis 在设计和使用层面具备较高的线程安全性,下面从多个方面详细阐述其线程安全特性及原因。

2025-02-21 20:53:49 394

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

Redis核心逻辑无线程安全问题。

2025-02-20 21:00:18 586

原创 SpringBean生命周期的执行流程

当找到合适的候选人后,就会让他入职,这就相当于 Spring 利用反射机制,通过调用 Bean 类的构造方法来创建 Bean 实例。Bean 也是如此,它可以在 Spring 应用里被其他组件使用,通过依赖注入的方式提供自己的服务,就像厨师在厨房里做出美味的菜肴供大家享用。方法,在 Bean 正式 “上学”(初始化)之前对它进行一些额外的处理,比如给它修改一下属性值,就像给孩子调整一下书包里的文具。方法,在 Bean 初始化完成后做一些最后的检查和调整,比如给它创建一个代理对象,就像给孩子做一个毕业总结。

2025-02-19 20:54:36 807

原创 Spring Boot 中自动装配机制的原理

Spring Boot 的自动装配(Auto-Configuration)是其核心特性之一,旨在简化配置流程,通过约定大于配置的原则,根据项目的依赖和上下文环境自动配置 Spring 应用。:根据条件注解(如类路径、已有 Bean)排除不满足条件的配置类。:根据当前环境(类路径、Bean、配置属性)筛选有效的配置类。的类,结合条件注解控制 Bean 的加载。这些配置类定义了需要自动装配的 Bean。:将自动配置类与用户自定义的配置合并。:最终生成可用的 Bean 定义。:仅启用符合条件的配置,避免冗余。

2025-02-18 20:51:08 894

原创 Spring 是如何解决循环依赖问题的?

核心机制三级缓存分离了 Bean 的不同状态(原始对象、早期对象、完整对象)。延迟生成代理对象,确保依赖一致性。适用场景单例作用域 + Setter/字段注入。设计精髓空间换时间:通过缓存牺牲内存,避免死锁。关注点分离:将对象的创建、代理生成、依赖注入解耦。实际开发建议:尽量避免循环依赖,优先通过设计模式(如事件驱动、回调接口)解耦。若必须使用,确保符合 Spring 的解决条件。

2025-02-17 20:52:47 473

原创 Spring Cache 详细讲解

Spring Cache 是 Spring 框架提供的缓存抽象层,通过统一的 API 和注解简化缓存操作,支持多种缓存实现(如 Redis、EhCache、Caffeine 等)。对于复杂场景,可结合多种缓存实现(如本地缓存 + Redis)实现多级缓存架构。:方法执行前检查缓存,若存在则直接返回结果,否则执行方法并缓存结果。:更新缓存,无论缓存是否存在,都会执行方法并缓存结果。:代表一个缓存实例(如 Redis 的一个键空间)。:缓存集合或复杂查询结果(需注意数据一致性)。

2025-02-14 20:58:35 749

原创 布隆过滤器到底是什么东西?它有什么用

缓存系统(如Redis)中,若查询的数据不存在,布隆过滤器可快速拦截非法请求,避免大量请求直接压垮数据库。:分布式数据库(如Cassandra)用布隆过滤器判断数据是否在某个节点,减少跨节点查询。(即可能误判某个不存在元素为存在,但绝不会将存在的元素误判为不存在)。:传统布隆过滤器无法直接删除元素(但可通过变种如计数布隆过滤器实现)。:在查询前先用布隆过滤器判断数据是否存在,减少对磁盘的无效访问。,用于快速判断一个元素是否可能存在于一个集合中。(False Positive):可能误判不存在元素为存在。

2025-02-13 20:34:23 421

原创 数据库并发策略

并发控制是数据库管理中的一个重要方面,它确保多个事务能够正确地访问和修改数据,同时保持数据的一致性和完整性。乐观锁、悲观锁和时间戳是并发控制的三种主要方法。

2025-02-06 23:44:22 679

原创 基于Redis分布式锁

综上所述,使用Redis的SETNX命令来实现分布式锁是一种简单而有效的方法。但是,在实际应用中需要注意各种细节和异常情况的处理策略,以确保分布式锁的安全性和有效性。

2025-02-06 23:42:05 364

原创 分库分表详解

结论:描述中的“当一个表中的数据量过大时,我们可以把该表的数据按照某种规则进行划分,然后存储到多个结构相同的表,和不同的库上”符合水平切分的定义。描述:当一个表中的数据量过大时,我们可以把该表的数据按照某种规则,例如userID散列,进行划分,然后存储到多个结构相同的表,和不同的库上。综上所述,描述中关于分库分表的垂直切分和水平切分部分是正确的,同时也准确地提及了与分库分表紧密相关的分布式事务概念。结论:描述中的“将表按照功能模块、关系密切程度划分出来,部署到不同的库上”符合垂直分库的定义。

2025-02-06 23:40:29 371

原创 b 树和 b+树的理解

为了更清晰地理解B树和B+树,我将从您提出的三个方面进行详细解答:二叉树、AVL树、B树的概念,B树和B+树的应用场景,以及为什么选择B树或B+树作为索引结构。

2025-02-06 23:38:35 921

原创 线程池如何知道一个线程的任务已经执行完成

无论是线程池内部还是外部,获取任务执行状态的核心思想都是获取线程执行结束后的状态。由于线程本身没有返回值,因此需要通过阻塞-唤醒的方式来实现。Future.get和都是基于这种原理来实现的。实践中的建议在选择获取任务执行状态的方法时,需要根据具体场景和需求进行选择。例如,如果需要等待单个任务的结果,可以使用Future.get方法;如果需要等待多个任务同时完成,可以使用计数器。在使用这些方法时,需要注意可能的阻塞和异常处理逻辑,以确保程序的健壮性和可靠性。

2025-02-06 23:36:11 468

原创 lock 和 synchronized 区别

Lock和Synchronized都是Java中用来解决线程安全问题的工具,它们能够确保多个线程在访问共享资源时的正确性和一致性。基本定义与实现:锁的粒度与控制:灵活性与非阻塞竞争锁:锁的释放机制:公平锁与非公平锁:Synchronized和Lock在性能方面相差不大,但在实现上有所区别:在实际开发中,应根据具体需求选择合适的同步机制:综上所述,Lock和Synchronized各有优劣,在实际应用中应根据具体需求进行选择。

2025-02-06 23:34:09 305

原创 innoDB 如何解决幻读

在MySQL中,InnoDB存储引擎支持四种事务隔离级别,分别是:读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化(SERIALIZABLE)。MVCC是一种用于管理数据库并发访问的技术,它通过为每个事务提供一个一致的视图,确保在高并发环境下,事务可以独立地进行读写操作而不会相互干扰。Next-Key Lock是InnoDB在可重复读和串行化隔离级别下使用的一种锁机制,它结合了记录锁和间隙锁。

2025-02-06 23:32:25 955

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

实践步骤利用自动配置:Spring Boot提供了大量的自动配置,这些配置会根据项目的依赖和默认设置来自动装配Bean。例如,如果项目中包含了Spring Web依赖,Spring Boot会自动配置Tomcat服务器和DispatcherServlet。自定义配置:在需要时,可以通过或文件来自定义配置。例如,可以修改服务器的端口号、数据库连接信息等。优势减少了手动配置的工作量。自定义配置灵活且易于管理。

2025-02-06 23:30:05 1101

原创 读写分离和分库分表详解

读写分离主要是为了将对数据库的读写操作分散到不同的数据库节点上。这样的话,就能够小幅提升写性能,大幅提升读性能。我简单画了一张图来帮助不太清楚读写分离的小伙伴理解。一般情况下,我们都会选择一主多从,也就是一台主数据库负责写,其他的从数据库负责读。主库和从库之间会进行数据同步,以保证从库中数据的准确性。这样的架构实现起来比较简单,并且也符合系统的写少读多的特点。分表就是对单表的数据进行拆分,可以是垂直拆分,也可以是水平拆分。垂直分表是对数据表列的拆分,把一张列比较多的表拆分为多张表。

2025-01-13 20:42:16 865

原创 常见加密算法

加密算法是一种用数学方法对数据进行变换的技术,目的是保护数据的安全,防止被未经授权的人读取或修改。加密算法可以分为三大类:对称加密算法、非对称加密算法和哈希算法(也叫摘要算法)。ps: 严格上来说,哈希算法其实不属于加密算法,只是可以用到某些加密场景中(例如密码加密),两者可以看作是并列关系。加密算法通常指的是可以将明文转换为密文,并且能够通过某种方式(如密钥)再将密文还原为明文的算法。

2025-01-11 17:11:00 622

原创 认证授权基础概念详解

Cookie和Session都是用来跟踪浏览器用户身份的会话方式,但是两者的应用场景不太一样。维基百科是这样定义CookieCookies是某些网站为了辨别用户身份而储存在用户本地终端上的数据(通常经过加密)。简单来说:Cookie存放在客户端,一般用来保存用户信息。下面是Cookie我们在Cookie中保存已经登录过的用户信息,下次访问网站的时候页面可以自动帮你登录的一些基本信息给填了。除此之外,Cookie还能保存用户首选项,主题和其他设置信息。使用Cookie保存SessionId或者。

2025-01-09 20:37:35 602

原创 MyBatis深入了解

{} 和 ${} 的区别是什么?${}可以是namename desc等,实现灵活的排序。#{}#{}

2025-01-06 20:24:44 1130

原创 如何解决数据库和缓存不一致的问题

然而,如果数据库更新失败,而缓存中的数据已经被删除,会导致后续的读请求直接访问数据库并可能读取到旧数据(因为缓存已经被删除),从而引发数据不一致问题。综上所述,解决数据库和缓存不一致的问题有多种方法,可以根据具体的应用场景和需求选择合适的策略。通过使用分布式锁,可以确保在同一时间内只有一个请求能够访问和修改缓存和数据库中的数据,从而避免并发问题导致的数据不一致。在高并发场景下,可以使用分布式锁来控制对缓存和数据库的访问顺序,从而避免数据不一致的问题。这种方案存在数据不一致的风险,特别是在高并发场景下。

2025-01-04 17:17:07 1119 1

原创 Spring&SpringBoot常用注解总结

Hibernate Validator 是 Hibernate 团队最初的数据校验框架,Hibernate Validator 4.x 是 Bean Validation 1.0(JSR 303)的参考实现,Hibernate Validator 5.x 是 Bean Validation 1.1(JSR 349)的参考实现,目前最新版的 Hibernate Validator 6.x 是 Bean Validation 2.0(JSR 380)的参考实现。拿我们在第 5 节参数校验这块来举例子。

2025-01-03 20:56:00 1170

原创 Spring中的设计模式详解

Spring 框架中用到了哪些设计模式?工厂设计模式: Spring 使用工厂模式通过创建 bean 对象。代理设计模式: Spring AOP 功能的实现。单例设计模式: Spring 中的 Bean 默认都是单例的。模板方法模式: Spring 中等以 Template 结尾的对数据库操作的类,它们就使用到了模板模式。包装器设计模式: 我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。

2025-01-02 20:50:37 1017

原创 Spring 框架基础知识

在三级缓存这一块,主要记一下 Spring 是如何支持循环依赖的即可,也就是如果发生循环依赖的话,就去。

2024-12-28 16:59:41 1016

原创 深入了解Spring MVC

随着 Spring 轻量级开发框架的流行,Spring 生态圈出现了 Spring MVC 框架, Spring MVC 是当前最优秀的 MVC 框架。相比于 Struts2 , Spring MVC 使用更加简单和方便,开发效率更高,并且 Spring MVC 运行速度更快。显而易见,这种模式存在很多问题。Model2 模式下还存在很多问题,Model2 的抽象和封装程度还远远不够,使用 Model2 进行开发时不可避免地会重复造轮子,这就大大降低了程序的可维护性和复用性。中的方法抛出异常的时候,由被。

2024-12-27 20:46:29 618

原创 Spring AOP是什么

AOP(Aspect-Oriented Programming:面向切面编程)能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。,去创建代理对象,而对于没有实现接口的对象,就无法使用 JDK Proxy 去进行代理了,这时候 Spring AOP 会使用。Spring AOP 就是基于动态代理的,如果要代理的对象,实现了某个接口,那么 Spring AOP 会使用。

2024-12-26 20:45:03 728

原创 深入了解SpringIoc(续篇)

prototype 作用域下,每次获取都会创建一个新的 bean 实例,不存在资源竞争问题,所以不存在线程安全问题。singleton 作用域下,IoC 容器中只有唯一的 bean 实例,可能会存在资源竞争问题(取决于 Bean 是否有状态)。如果这个 bean 是有状态的话,那就存在线程安全问题(有状态 Bean 是指包含可变的成员变量的对象)。不过,大部分 Bean 实际都是无状态(没有定义可变的成员变量)的(比如 Dao、Service),这种情况下, Bean 是线程安全的。

2024-12-25 20:19:55 1186

原创 深入了解SpringIOC

简单来说,Bean 代指的就是那些被 IoC 容器所管理的对象。我们需要告诉 IoC 容器帮助我们管理哪些对象,这个是通过配置元数据来定义的。配置元数据可以是 XML 文件、注解或者 Java 配置类。下图简单地展示了 IoC 容器如何使用配置元数据来管理对象。和这两个包是 IoC 实现的基础,如果想要研究 IoC 相关的源码的话,可以去看看。

2024-12-23 19:49:42 901

原创 轻松拿捏Spring

Spring 是一款开源的轻量级 Java 开发框架,旨在提高开发人员的开发效率以及系统的可维护性。

2024-12-20 20:49:23 1117

原创 轻松学会MyBatis(二)

的 key 使用的,如果没有 namespace,就剩下 id,那么,id 重复会导致数据互相覆盖。有了 namespace,自然 id 就可以重复,namespace 不同,namespace+id 自然也就不同。是 null 值,那么就会单独发送事先保存好的查询关联 B 对象的 sql,把 B 查询上来,然后调用 a.setB(b),于是 a 的对象 b 属性就有值了,接着完成。当然了,不光是 MyBatis,几乎所有的包括 Hibernate,支持延迟加载的原理都是一样的。这就是延迟加载的基本原理。

2024-12-19 21:00:08 672

空空如也

空空如也

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

TA关注的人

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