- 博客(130)
- 收藏
- 关注
原创 分布式事务原理深度解析:从ACID到BASE的架构演进
在电商系统中,用户下单操作需要同时扣减库存、生成订单、增加积分,这三个步骤可能涉及库存服务、订单服务和积分服务三个独立的系统。理解不同方案的底层原理,结合业务场景合理选型,才能构建高可靠的分布式系统。无论是追求强一致的金融系统,还是接受最终一致的电商平台,选择合适的工具,方能游刃有余。:天然支持异步和长事务,适合物流等复杂业务流程。:通过正向服务与反向补偿服务编排长事务。服务A完成本地事务后,异步通知服务B。:任一步骤失败时,逆向执行补偿操作。:事务要么全部成功,要么全部回滚。
2025-03-10 20:56:05
771
原创 Seata:分布式事务的终极解决方案与深度实践
Seata 通过灵活的事务模型,为分布式系统提供了高可用的事务保障。无论是追求快速上线的初创项目,还是对一致性要求严苛的金融系统,Seata 都能找到合适的解决方案。在微服务架构中,订单支付需调用支付服务、库存服务和积分服务,若其中一个服务失败,如何保证数据的一致性?传统的单体事务(ACID)无法跨越服务边界,而分布式事务的复杂性让许多开发者望而生畏。:整合 Kafka 事务消息,实现跨系统事务。:资源管理者,负责分支事务的资源锁定与提交。:事务协调者,负责全局事务的提交与回滚。
2025-03-09 18:16:30
826
原创 Seata:分布式事务的终极解决方案
随着云原生技术的普及,Seata 将更深度集成 Service Mesh、Kubernetes 等基础设施,进一步提升分布式事务的透明化和自动化。当一个业务操作需要跨多个服务完成时(如电商系统的下单、扣库存、扣积分),如何保证所有服务要么全部成功,要么全部回滚?若积分服务调用失败,Seata 自动回滚订单和库存操作,保证数据一致性。TC 根据所有分支事务的状态,决定全局事务提交或回滚。:事务协调器,全局事务的大脑,负责事务的提交和回滚。:资源管理器,管理分支事务(如数据库连接)。
2025-03-07 21:38:08
915
原创 高并发系统守护者:5大限流算法原理剖析与实战指南
当系统遭遇DDoS攻击时,漏桶算法像防洪堤坝般稳定输出;当双11零点到来时,令牌桶为秒杀系统保留合理弹性;当突发流量未知时,自适应算法展现智能风控的魅力。理解每个算法背后的哲学思想,才能在架构设计中做出最优雅的取舍。
2025-03-06 21:23:37
883
原创 如何设计高并发分布式系统的唯一ID?主流方案深度解析与实战选型指南
没有完美的ID方案,只有最适合业务场景的权衡取舍。理解每个方案背后的设计哲学,比单纯追求技术指标更重要。当你的系统日订单突破百万时,希望这篇文章能成为你的技术选型指南针。
2025-03-05 21:02:35
886
原创 通俗版解释:分布式和微服务就像开餐厅
一个厨师要同时切菜、炒菜、烤面包,手忙脚乱还容易出错。,就像用乐高积木代替大理石雕塑——更灵活,但组装需要技巧。:要么全部上齐再算成功,要么接受有时序问题。:让专业的人做专业的事,但要建立好沟通机制。情人节订单暴增,但其他菜品的厨师却在闲着。抗风险:炒菜间着火了,其他厨房还能工作。川菜馆:只做辣菜,有自己的厨师和食材库。遇到客流量大时,临时开分店(弹性扩容)老板亲自下厨且拒绝招人(团队能力不足)川菜馆说“收到订单”,但甜品屋没听见。:给每个厨房装烟雾报警器(监控系统)不同菜系由不同团队管理(跨团队协作)
2025-03-04 21:02:40
512
原创 从单块巨石到星辰大海:分布式与微服务的本质思考
分布式系统如同曼德博集合,在无限细分中展现自相似性。微服务不是银弹,而是架构师在业务复杂性与技术可行性之间的动态平衡。好的架构不是设计出来的,而是在约束条件下生长出来的。延伸思考:当我们在谈论"分布式"时,是否正在用代码构建一个数字社会?服务间的通信协议是否隐喻着人类社会的协作规则?这或许就是软件工程的终极浪漫。
2025-03-03 20:59:21
770
原创 Nacos数据同步原理深度解析:构建高可用配置中心的基石
未来,随着Nacos社区的发展,我们有望看到更多创新的一致性协议(如基于Paxos的优化版本)被引入,进一步平衡性能与一致性需求。(最终一致性):基于自研的Distro协议,适用于配置管理等对强一致性要求不高的场景。本文将深入剖析Nacos集群节点间的数据同步机制,揭秘其如何实现多节点数据一致性。对非责任节点的数据,转发请求到对应节点。,Nacos采用Raft协议保证强一致性,确保服务实例状态的准确性和可靠性。(强一致性):基于Raft协议,适用于服务注册等需要强一致性的场景。
2025-03-02 18:48:55
1050
原创 Nacos数据同步原理解析
Nacos(Dynamic Naming and Configuration Service)是一个用于服务发现和配置管理的平台,数据同步在其中起着关键作用,以保证配置信息和服务实例信息在不同节点间的一致性。
2025-02-28 20:49:21
322
原创 Spring Cloud 的核心定义与定位
举例说明在过往项目中如何选择 Spring Cloud 组件(例如:“我曾用 Hystrix 实现服务熔断,将系统可用性从 95% 提升至 99.9%”)。:提及 Spring Cloud Alibaba 对 Nacos、Sentinel 的整合,体现对技术生态的关注16。通过以上结构化回答,既能展示对 Spring Cloud 的全面理解,又能体现实际应用能力,帮助你在面试中脱颖而出。,它通过整合多个成熟的分布式框架(如 Netflix OSS 组件),提供了一套标准化的工具集,简化了微服务架构中。
2025-02-27 20:58:42
578
原创 IO 与 NIO 的区别:Java 输入输出的演进与核心差异
维度IONIO设计目标简化基础操作支持高并发和非阻塞处理资源开销高(每连接一线程)低(单线程多连接)学习曲线简单复杂适用领域传统文件操作、低并发网络高并发网络服务、大数据传输选择建议传统 IO:优先用于简单的文件操作或低并发场景。NIO:用于高并发网络服务或需要非阻塞处理的场景。NIO.2(AIO):需要异步处理时选择(如大文件异步读写)。通过理解 IO 与 NIO 的核心差异,开发者可以更高效地选择适合的工具,构建高性能的 Java 应用。
2025-02-26 20:58:21
1024
原创 可重入与可重入锁:多线程编程中的安全卫士
可重入(Reentrant)是指一段代码(如函数、方法或锁)在同一线程中被多次调用时,不会因重复访问而导致错误或死锁的特性。可重入性是线程安全的重要基础。可重入锁是一种允许同一线程多次获取同一把锁的同步机制。每次获取锁时,锁的计数器加1;释放锁时,计数器减1。只有当计数器归零时,锁才被完全释放。可重入锁的核心价值解决同一线程多次加锁的死锁问题。支持递归和嵌套调用,提升代码灵活性。
2025-02-25 20:50:16
796
原创 MySQL主从集群同步延迟问题深度解析与解决方案
MySQL主从同步延迟的解决需要多维度协同优化基础设施:确保硬件和网络满足业务需求。配置调优:合理设置参数,启用并行复制和GTID。业务改造:避免大事务,设计合理的读写分离策略。监控兜底:实时监控延迟,建立应急预案。通过以上方法,可显著降低同步延迟风险,构建稳定高效的数据库架构。
2025-02-24 20:48:58
952
原创 Redis 如何实现消息队列?
在当今的分布式系统架构中,消息队列起着至关重要的作用,它能够帮助系统实现异步通信、解耦组件以及缓冲流量等功能。Redis,作为一款高性能的键值对存储数据库,也为我们提供了便捷的方式来构建消息队列。今天,咱们就深入探讨一下 Redis 是如何实现消息队列的。
2025-02-23 19:31:53
796
原创 数据库索引:优点、缺点及常见类型
在现代数据库管理系统中,索引是优化查询性能的关键工具。通过创建索引,可以显著减少数据检索的时间。然而,索引并不是万能的,它们也有其自身的缺点和适用场景。本文将详细介绍索引的优势、劣势以及不同类型的索引。
2025-02-21 21:00:26
285
原创 Redis 的线程安全问题解析:为什么 Redis 是线程安全的?
Redis 服务端是线程安全的:核心命令执行由单线程处理,避免并发问题。多线程仅用于网络 I/O:Redis 6.0+ 通过多线程优化网络性能,不影响数据操作的原子性。客户端需注意线程安全:多线程环境下应使用连接池或独立连接。理解 Redis 的线程模型,能帮助开发者在高并发场景下更高效、安全地使用 Redis。对于分布式系统,可结合集群、持久化、哨兵等机制,进一步提升可用性和扩展性。
2025-02-20 20:49:42
1019
原创 Spring Bean生命周期通俗讲解
◦ @PreDestroy 或 DisposableBean:当容器关闭时,Spring 会调用 @PreDestroy 注解的方法或 destroy() 方法,进行清理工作,就像人退休、安享晚年。2. 设置属性(属性赋值):Spring 通过依赖注入为 Bean 的属性赋值,比如通过 @Autowired 或 XML 配置注入其他 Bean 或值,就像给婴儿喂奶、穿衣服。1. 出生(实例化):Spring 容器通过构造函数或工厂方法创建 Bean 的实例,就像人出生一样。希望这个比喻能帮助你理解!
2025-02-19 20:36:37
373
原创 Spring Boot自动装配:约定大于配置的魔法解密
1. **加载候选配置**:读取所有jar包的`META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports`1. **工厂方法模式**:通过`AutoConfigurationImportSelector`实现配置加载。2. **条件装配**:通过`@Conditional`系列注解实现动态决策。2. **策略模式**:不同的`Condition`实现对应不同判断策略。
2025-02-18 20:46:11
961
原创 Spring 是如何解决循环依赖问题的?
Spring的三级缓存设计展现了经典框架的智慧:通过缓存不同状态的Bean对象,在保持单例特性的同时,巧妙地打破了循环依赖的死锁。理解这一机制不仅能帮助开发者规避陷阱,更能启发我们设计复杂系统时的分层处理思想。
2025-02-17 20:45:54
722
原创 InnoDB如何解决幻读?深入解析MySQL的并发控制机制
这种现象通常发生在事务未完全隔离的场景下,尤其是在**可重复读(Repeatable Read)**和**读未提交(Read Uncommitted)**隔离级别中。- **快照读(Snapshot Read)**:普通的`SELECT`语句使用MVCC,读取的是事务开始时的数据版本,不会看到其他事务的插入或删除操作。InnoDB通过**MVCC的快照读**和**临键锁的当前读**双重机制,在`Repeatable Read`隔离级别下解决了幻读问题。`(返回3条记录)。间隙锁和临键锁依赖于索引。
2025-02-16 20:44:24
575
原创 Spring Boot 的约定优于配置:简化开发的艺术
通过 `spring-boot-starter-data-jpa` 和 `spring-boot-starter-data-mongodb` 等依赖,Spring Boot 能够自动配置数据源和 ORM 框架,简化数据访问层的开发。- **数据源**:如果引入了 `spring-boot-starter-data-jpa` 和 H2 依赖,Spring Boot 会自动配置内存数据库。1. **默认配置**:Spring Boot 提供了大量默认配置,开发者无需手动配置即可快速启动应用。
2025-02-14 20:20:00
725
原创 布隆过滤器:大数据时代的高效过滤器
在当今数字化浪潮下,数据量呈爆炸式增长,如何快速、准确地处理海量数据成为各个领域面临的关键挑战。布隆过滤器(Bloom Filter)作为一种精巧的数据结构,正发挥着独特且重要的作用。
2025-02-13 20:28:36
978
原创 Spring Boot 自动装配机制深度解析
在 Java 开发领域,Spring Boot 以其强大的功能和便捷的开发体验受到广大开发者的青睐。其中,自动装配机制是 Spring Boot 的核心特性之一,它极大地简化了 Spring 应用的开发过程,让开发者能够专注于业务逻辑的实现。本文将深入剖析 Spring Boot 自动装配机制的原理、实现方式以及在实际开发中的应用。
2025-02-06 19:58:38
1003
原创 技术选型对比:Redis 与 MySQL、Dubbo 与 Spring Cloud
而 Spring Cloud 诞生于微服务架构时代,它是一个更为全面的生态系统,提供了配置管理、服务注册与发现、服务调用的负载均衡、资源隔离、熔断降级等一系列组件,旨在解决微服务架构中的各种问题。为了解决这些问题,在实际应用中,对于一些对数据一致性要求极高的场景,可以采用最终一致性方案,例如基于 RocketMQ 的可靠性消息通信来实现数据的最终一致性,或者通过 Canal 组件监控 MySQL 的 binlog 日志,将更新后的数据同步到 Redis 中。
2025-02-06 19:49:22
373
原创 Java 技术在实际场景中的应用
使用布隆过滤器,在系统启动时将所有可能的目标数据缓存到布隆过滤器中,当有请求到来时,先在布隆过滤器中查询,如果不存在,则直接认为该 key 在数据库中也不存在,无需查询数据库,从而有效防止缓存穿透。通过消息队列,订单系统只需将订单相关消息发送到队列中,而无需关心其他系统的具体实现和状态,其他系统从队列中获取消息并进行相应处理,从而实现了各个系统之间的解耦,降低了系统之间的耦合度,使得每个系统可以独立进行升级和维护。同时,要充分考虑可能出现的问题,并采取相应的解决方案,以确保系统的高效稳定运行。
2025-02-06 19:48:50
424
原创 Java 面试真题解析与技巧分享
在传统的数据传输过程中,数据从磁盘读取到内核缓冲区,再从内核缓冲区复制到用户空间缓冲区,接着在应用程序中调用 write () 方法,将数据从用户空间缓冲区复制到内核下的 Socket Buffer,最后从 Socket Buffer 复制到网卡缓冲区并传输到目标服务器,整个过程需要进行 4 次拷贝。当我们执行查询操作时,B + 树能够更快地定位到数据所在的位置,尤其是在范围查询时,B + 树只需遍历叶子节点的双向链表,而 B 树则需要获取所有节点,因此 B + 树在范围查询上具有更高的效率。
2025-02-06 19:48:17
366
原创 深入理解 Java 核心技术原理
此外,Spring Boot 的自动装配机制通过扫描约定路径下的 spring.factories 文件来识别配置类,实现 Bean 的自动装配,进一步减少了开发人员的配置工作。通过这种方式,InnoDB 有效地解决了幻读问题。在实际应用中,比如在高并发的电商抢购场景中,AQS 的合理运用可以有效控制对商品库存的访问,避免超卖等问题的发生。深入理解这些 Java 核心技术原理,不仅有助于我们在面试中脱颖而出,更能在实际项目开发中,根据不同的业务需求,合理运用这些技术,构建出更加高效、稳定的系统。
2025-02-06 19:47:41
415
原创 MySQL三大日志
总之,MySQL 的 binlog、redo log 和 undo log 各司其职又紧密协作,它们是保障 MySQL 数据库稳定、可靠、高性能运行的基石,深入理解它们对于数据库的运维、优化以及开发都有着不可忽视的意义。主库上的 binlog 会被发送到从库,从库通过读取并执行 binlog 中的操作,实现与主库的数据同步,确保数据的一致性,满足高可用架构的需求。redo log 由多个日志文件组成,以循环写入的方式工作,有多个日志组可以提升写入的并发能力,保证 redo log 的持续写入不中断。
2025-01-15 20:57:52
447
原创 JVM 详解
例如,可以调整堆内存大小(-Xmx 设置最大堆内存,-Xms 设置初始堆内存),合理设置新生代和老年代的比例(-XX:NewRatio),以及开启垃圾回收的详细日志(-XX:+PrintGCDetails)等,通过对这些参数的不断调整测试,找到最适合应用程序运行的配置。Java 具有 “一次编写,到处运行” 的特性,这得益于 Java 编译器将 Java 源文件编译成与平台无关的字节码文件(.class)。Java 作为一门广泛应用的编程语言,其强大之处离不开 Java 虚拟机(JVM)的支持。
2025-01-14 20:42:37
633
原创 Java 序列化详解
这篇博客从 Java 序列化的基础概念入手,详细介绍了如何实现序列化和反序列化,讨论了序列化的一些细节,如序列化版本号、静态和瞬态变量的处理,还涉及到序列化的应用场景、缺点和替代方案。在日常的 Java 开发中,根据不同的需求和场景选择合适的序列化方式可以提高开发效率和程序性能。序列化后的字节流可以保存对象的状态和信息,而反序列化则是将字节流重新转换为对象的过程。总之,Java 序列化是一个强大的工具,但也需要谨慎使用,以避免潜在的问题。在 Java 中,实现序列化非常简单,只需要让对象所属的类实现。
2025-01-13 20:40:20
892
原创 Java 反射机制详解
反射是 Java 语言提供的一种强大机制,它允许程序在运行时动态地获取类的各种信息,比如类的成员变量、方法、构造函数等,并且能够实例化对象、调用方法以及访问和修改成员变量的值,而这些操作在编译期并不需要明确知道类的具体细节。简单来说,正常情况下,我们编写代码时都是明确地引用类,例如创建一个类的对象:Person person = new Person();这里我们清楚知道 Person 类的结构。
2025-01-12 19:15:24
701
原创 NoSQL 基础知识总结
NoSQL,最初的含义是 “Non-SQL”(非 SQL)或 “Not Only SQL”(不仅仅是 SQL),它代表了一类不同于传统关系型数据库的数据存储技术。这些技术放弃了关系模型的一些严格约束,例如固定的表结构、强一致性等,以换取更好的可扩展性、更高的读写性能以及对复杂数据结构的支持。
2025-01-07 20:43:07
1029
原创 MySQL执行计划分析
但是,因为左边是检索条件,'10000'转到10000虽然是唯一,但是其他字符串也可以转换为10000,比如'10000a','010000','10000'等等都能转为浮点数10000,这样的情况下,是不能用到索引的。根据官方文档的描述,我们的第 23 两条 SQL 都发生了隐式转换,第 2 条 SQL 的查询条件num1 = '10000',左边是int类型右边是字符串,第 3 条 SQL 相反,那么根据官方转换规则第 7 条,左右两边都会转换为浮点数再进行比较。那么这个字符串隐式转换的规则是什么呢?
2025-01-06 20:16:01
950
原创 Java 反射机制详解
反射是 Java 语言提供的一种在运行时动态获取类信息的机制。通过反射,我们可以在程序运行时获取类的名称、属性、方法、构造函数等信息,并可以调用这些方法和构造函数来创建对象、访问属性等操作。
2025-01-05 18:39:52
344
原创 Java IO 基础知识总结
在 Java 编程中,IO(Input/Output,输入 / 输出)操作是至关重要的一部分,它使得程序能够与外部系统进行交互,比如读取文件、写入数据到数据库或者在网络上传输信息等。今天,我们就来深入了解一下 Java IO 的基础知识。
2025-01-03 20:37:19
518
原创 Redis 持久化机制详解
Redis 的持久化机制是保障其在不同应用场景下数据可靠性的关键所在。RDB 和 AOF 两种持久化方式各有优劣,通过深入了解它们的原理、触发机制、优缺点以及如何选择合适的方式,我们可以根据实际业务需求更好地配置 Redis,让它在提供高性能数据存储和访问服务的同时,最大程度地保障数据的安全性和持久性。希望这篇文章能够帮助大家对 Redis 持久化机制有更清晰、全面的理解,在实际项目中运用自如。
2025-01-02 20:39:32
953
原创 深入理解 MVCC 与 BufferPool 缓存机制
MVCC 机制通过 read - view 和 undo 版本链比对机制,让不同事务能根据规则读取同一条数据在版本链上的不同版本,保证了事务隔离性。BufferPool 缓存机制则通过先更新内存再写日志的方式,提升了数据库性能并保证数据一致性。理解这两种机制对于优化数据库应用、处理并发事务以及确保数据可靠性都具有重要意义。在实际应用中,合理利用 MVCC 的隔离级别和 BufferPool 的缓存特性,可以有效提高数据库系统的性能和稳定性,为业务提供可靠的数据支持。
2024-12-30 20:29:04
752
原创 JVM 垃圾回收
垃圾回收(Garbage Collection,GC)是指 JVM 自动回收不再被使用的对象所占用的内存空间的过程。在 Java 中,程序员不需要手动管理内存的分配和释放,这大大减轻了编程的负担。
2024-12-27 20:40:09
1045
1
原创 Java 集合使用注意事项总结
在 Java 开发中,集合是非常常用的数据结构。正确地使用集合可以提高代码的效率和可读性,同时避免一些常见的错误。本文将结合javaguide的内容,总结 Java 集合使用的注意事项。
2024-12-26 20:32:19
695
原创 Java 基础
Java 异常是在程序执行过程中出现的打断正常指令流的事件。它是一种对象,所有的异常类都继承自类。ThrowableException和Error。Exception:表示程序本身可以处理的异常情况,比如(输入输出异常)、(数据库操作异常)等。Error:通常表示 Java 虚拟机本身出现的问题,例如(内存溢出错误)、(栈溢出错误)等,这些情况一般是不可恢复的,程序通常无法处理。线程线程是进程中的一个执行单元,是程序执行流的最小单元。
2024-12-25 20:24:08
648
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人