- 博客(41)
- 收藏
- 关注
原创 Redis Cluster 集群模式深度拆解
Redis Cluster 是处理海量数据和高并发写入的标准解决方案,也是中高级后端工程师必须掌握的核心技能。它通过哈希槽分片实现了数据的分布式存储,通过 Gossip 协议实现了去中心化的节点通信,通过自动故障转移实现了高可用。当数据量超过 10GB 或写入 QPS 超过 1 万时,必须使用 Redis Cluster核心原理是 16384 个哈希槽的分片机制,每个主节点负责一部分哈希槽故障转移流程:主观下线→客观下线→从节点选举→新主接管。
2026-05-07 08:19:31
390
原创 SkyWalking 分布式链路追踪
默认情况下,SkyWalking 会自动拦截 Spring MVC、MyBatis、Dubbo 等主流框架的调用,生成链路数据。但对于一些自定义的方法,或者第三方框架的调用,你可能需要手动添加链路追踪。分布式链路追踪是微服务架构中不可或缺的组件,它能让你清晰地看到系统的运行状态,快速定位和解决线上故障。而 SkyWalking 是目前最优秀的开源 APM 工具之一,它无侵入、性能好、功能丰富,是中小团队的最佳选择。微服务故障排查的四大痛点,催生了分布式链路追踪技术。
2026-05-06 01:10:09
284
原创 Sentinel 流量控制与熔断降级
Sentinel 是微服务架构中不可或缺的流量治理组件,它就像系统的 "保险丝",能在故障发生时自动切断故障链路,保护系统不被拖垮。服务雪崩是微服务架构的致命威胁,Sentinel 是解决这个问题的最佳方案Sentinel 的核心概念包括资源、规则、流量控制、熔断降级和热点参数限流Spring Boot 整合 Sentinel 非常简单,只需要引入依赖和配置支持流量控制、熔断降级、热点参数限流、系统保护等多种功能生产环境必须配置规则持久化,避免规则丢失。
2026-04-29 01:18:31
269
原创 Spring Cloud Gateway 深度实战
除了全局过滤器,我们还可以自定义局部过滤器,只作用于特定的路由。自定义认证过滤器示例java运行@Component@Override// 获取 token// 验证 token// 认证失败,返回 401// 认证成功,继续执行@Overridereturn 0;// 实际项目中这里应该调用认证服务验证 token然后在路由配置中使用这个过滤器:yamlroutes:filters:- name: AuthFilter # 使用自定义认证过滤器。
2026-04-27 19:55:12
388
原创 Redis 核心原理与生产实战
哨兵模式 =主从复制 + 自动监控 + 故障自动转移,轻量高可用首选。核心关键点:主观下线、客观下线、quorum 投票、哨兵领导者、从库择优选举。故障切换全程自动化,业务无感,是中小团队最友好的 Redis 高可用方案。1 主 2 从 + 3 哨兵,跨机器部署,杜绝单点故障。架构简单、运维成本低、接入简单,日常业务开发必须吃透。
2026-04-25 00:28:13
407
原创 Java 并发编程
Java 内存模型(Java Memory Model)是 Java 虚拟机规范中定义的,用来解决多线程环境下,CPU 缓存、寄存器和主内存之间的数据同步问题。简单来说,每个线程都有自己的工作内存(对应 CPU 的缓存和寄存器),所有的变量都存储在主内存中。线程对变量的所有操作,都必须在工作内存中进行,不能直接读写主内存。不同线程之间也无法直接访问对方的工作内存,线程间的变量传递必须通过主内存来完成。plaintext│ 线程A工作内存 │ │ 线程B工作内存 │ │ 线程C工作内存 ││ │ │。
2026-04-24 00:58:19
380
原创 MyBatis-Plus-从 CRUD 到高级特性
MyBatis-Plus 是一个非常优秀的 ORM 框架,它大大简化了 MyBatis 的开发,让我们从繁琐的 CRUD 代码中解放出来,专注于业务逻辑的实现。MyBatis-Plus 是 MyBatis 的增强工具,解决了原生 MyBatis 的诸多痛点集成 MyBatis-Plus 非常简单,只需要三步就能完成BaseMapper 提供了 17 个基本的 CRUD 方法,覆盖了所有常见的单表操作条件构造器可以轻松构建各种复杂的查询条件,不需要写 SQL。
2026-04-23 08:22:55
379
原创 分布式事务-从理论到生产落地
分布式事务是分布式系统中最难解决的问题之一,没有一种完美的解决方案能适用于所有场景。我们需要根据自己的业务需求,在一致性、性能和复杂度之间做权衡。分布式事务是为了解决分布式环境下多个操作的原子性和一致性问题CAP 定理告诉我们,在分布式系统中,我们只能在一致性和可用性之间做权衡BASE 理论的核心思想是接受最终一致性,这是大多数业务场景的最佳选择常见的分布式事务解决方案有 2PC、TCC、SAGA、本地消息表、事务消息和 Seata AT 模式。
2026-04-22 01:52:34
383
原创 XXL-Job
XXL-Job 是一个开源的、轻量级的分布式任务调度平台,由美团点评的许雪里开发。它于 2015 年开源,目前已经迭代到 2.4.x 版本,被广泛应用于各大互联网公司。XXL-Job 是一个非常优秀的分布式任务调度框架,它解决了单机定时任务的所有痛点,而且轻量级、易部署、易使用,是中小团队的最佳选择。Spring 的@Scheduled注解在分布式环境下有很多局限性,不能满足生产需求XXL-Job 采用 "调度中心 + 执行器" 的架构,支持分布式执行、动态管理、失败重试、告警通知等核心能力。
2026-04-21 01:38:30
394
原创 Elasticsearch:从入门到生产落地
java运行@Data@Idjava运行// 根据名称搜索// 根据名称和描述搜索// 根据价格区间查询。
2026-04-20 02:12:19
292
原创 Redis-不止是缓存
一、Redis 到底是什么?Redis(Remote Dictionary Server)是一个。它支持多种数据结构,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)等,因此也被称为 "数据结构服务器"。
2026-04-17 00:16:05
467
原创 一文看懂 AI 技术栈
大模型:一个没有记忆、没有手脚的超级大脑,只能靠概率生成文本Bot:给大脑装上了记忆,能记住你说过的话,提供个性化的对话Agent:给大脑装上了手脚,能调用工具和外部世界交互,真正帮你做事MCP:给所有工具做了一个通用插座,让 Agent 能轻松调用任何工具:给智能体装上了预制技能包,让复杂任务的执行变得简单可靠这五个层次,一层比一层更高级,一层比一层更接近我们理想中的 AI。
2026-04-16 00:58:20
776
原创 Redis:高性能的键值存储与缓存系统全面解析
作为一个开源的内存数据结构存储,Redis 不仅提供了高效的键值存储功能,还支持多种复杂的数据结构如列表、集合、哈希和有序集合等。虽然 Redis 在消息持久化和可靠性上可能不如专业的消息队列系统,但对于一些实时性要求较高的场景,Redis 是一个不错的选择。将用户的会话信息存储在 Redis 中,能够实现跨服务器的会话共享,并且可以设置会话超时,提升系统的可用性。命令,用户可以在 Redis 服务器端执行 Lua 脚本,这避免了客户端和服务器之间的多次往返,提高了性能,并且确保了脚本的原子性。
2026-04-15 00:01:21
404
原创 SSM框架搭建最佳实践
基于实体类编写数据访问层MyBatis接口及映射文件,业务逻辑层接口及实现类,最后编写控制器实现整体流程控制和分发。重点应该放在编写业务上,SSM框架的搭建过程中配置比较繁琐,将配置模板直接引入到新项目中即可,不用纠结,也无需记忆,只要会根据实际情况对配置做相应修改即可。类型,注意JDK版本,需要使用JDK17及以上版本,这里选择JDK 21版本,填写组ID等信息后完成创建。在IDEA中,MyBatis接口中定义的方法报红不用慌,鼠标点到方法定义处,按。规范命名,根据业务需求在接口中定义方法。
2025-12-04 20:02:57
960
原创 Spring MVC 全面详解:原理、组件、实战与高级特性
Model(模型):封装业务数据和逻辑(如实体类、Service 层),专注数据处理;View(视图):负责数据展示(如 JSP、Thymeleaf、Vue 页面),专注界面渲染;Controller(控制器):接收用户请求,协调 Model 和 View(如调用 Service 获取数据,传递给 View 展示),专注请求分发。// 请求处理前执行(返回 true 继续,false 终止)@Override// 检查用户是否登录// 未登录,重定向到登录页。
2025-12-03 14:58:08
1301
原创 我的梦想是学会【反射】,爷爷奶奶可高兴了给了我最喜欢的点赞收藏
/ 模拟MyBatis的@Select注解:标记查询SQL@Retention(RetentionPolicy.RUNTIME) // 运行时保留,供反射获取@Target(ElementType.METHOD) // 只能标注在方法上// 存储SQL语句(如"SELECT * FROM user WHERE id = #{id}")// 模拟MyBatis的@Param注解:标记参数名称(解决参数名获取问题)
2025-12-01 23:56:46
875
原创 了解JVM 结构和运行机制,从小白编程Java 大佬
我们都知道在 Windows 系统上一个软件包装包是 exe 后缀的,而这个软件包在苹果的 Mac OSX 系统上是无法安装的。类似地,Mac OSX 系统上软件安装包则是 dmg 后缀,同样无法在 Windows 系统上安装。为什么不同系统上的软件无法安装,这是因为操作系统底层的实现是不一样的。对于Windows 系统来说,exe 后缀的软件代码最终编译成 Windows 系统能识别的机器码。而 Mac OSX 系统来说,dmg 后缀的软件代码最终编译成 Mac OSX 系统能识别的代码。
2025-11-28 22:22:25
871
原创 为你的项目选择一个适合的[垃圾收集器]
其实 ZGC 并不是一个凭空冒出的全新垃圾回收,它结合前几代 GC 的思想,同时在战术上做了优化以达到极限的 STW,ZGC 的优秀表现有可能会改变未来程序编写方式,站在垃圾收集器的角度,垃圾收集器特别喜欢不可变对象,原有编程方式鉴于内存、GC 能力所限使用可变对象来复用对象而不是销毁重建,试想如果有了 ZGC 的强大回收能力的加持,是不是我们就可以无脑的使用不可变对象进行代码编写。
2025-11-27 23:23:29
1161
原创 我的梦想是学会[单例模式],爷爷奶奶可高兴了给了我最喜欢的点赞收藏
因为「需要全局共享的资源 / 状态」,如果允许外部随意创建实例,会导致「内存中存在多个独立的资源句柄 / 状态副本」—— 比如数据库连接池,多实例会导致连接数超标、连接管理混乱;」—— 通过封装实例的创建逻辑,确保在整个应用的 “生命周期粒度”(或特定粒度)内,只有一个实例被创建、复用,从而解决 “资源独占” 和 “状态一致” 的底层问题。实际开发中,我们很少手动写单例模式,更多是使用框架提供的单例管理能力 —— 核心区别是「手动单例是 “应用级单例”,框架单例是 “容器级单例”」。
2025-11-26 16:13:32
1213
原创 带你完全了解Java——从‘写代码’到‘代码运行’的全链路追溯”[超级详细]
引用类型变量的本质是「存储对象的内存地址变量本身不存储数据,只存储「对象在堆内存中的地址」;所有引用类型都间接继承自;引用类型包括:类(如PersonString)、数组(如int[]String[])、接口(如List)、枚举、注解等。解决「部分代码复用 + 强制子类实现特定方法」—— 抽象类是 “半抽象” 的(可以有普通方法 + 抽象方法),不能实例化,只能被继承(子类必须实现所有抽象方法,否则子类也需为抽象类)。(1 最低,10 最高);
2025-11-24 00:38:24
1041
原创 Spring 框架[从搭建到内核,了解Spring 这篇文章就够了]
传统开发:开发者手动new对象(如),还要手动管理对象的依赖(如),对象的创建、组装全由开发者控制;将对象的创建、依赖组装的控制权,交给 Spring 容器—— 开发者只需定义对象(如用@Component注解),Spring 会自动创建对象、注入依赖(如用@Autowired注解),无需手动new。Bean 是「被 Spring IoC 容器管理的 Java 对象」—— 它不是普通的 Java 对象(普通对象是new出来的),而是由容器创建、组装、销毁的对象。
2025-11-20 23:04:00
1644
原创 深度了解哈希表[超级详细讲解]
哈希函数的均匀性→降低冲突概率;链地址法(+ 红黑树)→高效解决冲突;负载因子和扩容→平衡空间与时间;工程优化(高位混合、预设容量)→榨干性能极限。
2025-11-19 23:15:55
1654
原创 Explain 执行计划详解
有了慢查询语句后,就要对语句进行分析。一条查询语句在经过MySQL查询优化 器的各种基于成本和规则的优化会后生成一个所谓的执行计划,这个执行计划展示了接下来 具体执行查询的方式,比如多表连接的顺序是什么,对于每个表采用什么访问方法来具体执 行查询等等。EXPLAIN语句来帮助我们查看某个查询语句的具体执行计划,我们需要搞懂的各个输出项都是干嘛使的,从而可以有针对性的提升我们查询语句的性 能。通过使用 EXPLAIN 关键字可以模拟优化器执行 SQL 查询语句,从而知道MySQL。
2025-11-18 23:59:56
1036
原创 线程[从浅到深,了解线程这篇文章就够了]
线程(Thread) 是程序运行的基本执行单元。每个线程有自己的程序计数器、虚拟机栈、本地方法栈。一个进程可以包含多个线程,这些线程可以并发执行。多个线程可以共享同一个进程的资源(如堆、方法区)。
2025-11-17 22:05:08
2607
原创 MySQL 缓冲池(Buffer Pool) 详细讲解
但是磁盘的速度慢,所以 InnoDB 存储引擎在处理客户端的请求时,当需要访问某个页的数据时,就会把完整的页的数据全部加载到内存中,也就是说即使我 们只需要访问一个页的一条记录,那也需要先把整个页的数据加载到内存中。我们知道,对于使用 InnoDB 作为存储引擎的表来说,不管是用于存储用户数 据的索引(包括聚簇索引和二级索引),还是各种系统数据,都是以页的形式存 放在表空间中的,而所谓的表空间只不过是 InnoDB 对文件系统上一个或几个实 际文件的抽象,若未命中,则从磁盘读取页到缓冲池,再返回数据。
2025-11-14 22:40:45
1306
原创 时间复杂度和空间复杂度讲解[易懂版]
假设有一个算法,其运行时间(或空间)与输入规模 n 的关系可以用函数 T(n) 表示。大O表示法用来描述 T(n) 的渐近上界。数学上,我们说 T(n)=O(f(n)),当且仅当存在正常数 c 和 n0,使得对于所有 n≥n0,都有 T(n)≤c⋅f(n)。简单来说,大O表示法告诉我们,当输入规模 n 足够大时,算法的运行时间(或空间)不会超过 c⋅f(n) 的某个倍数。
2025-11-14 11:43:53
1097
原创 最左匹配原则详细讲解
最左匹配原则指的是:在使用复合索引时,查询条件必须从索引的最左边的列开始匹配,才能有效利用索引。换句话说,查询条件必须包含复合索引的最左边的列,否则索引可能无法被充分利用。
2025-11-13 12:41:17
747
原创 一条SQL在MySQL中是如何执行的?
我们知道由于MySQL是开源的,他有非常多种类的客户端:navicat,mysql front,jdbc,SQLyog等非常丰富的客户端,这些客户端要向mysql发起通信都必须先跟Server端建立通信连接,而建立连接的工作就是有连接器完成的。开始执行的时候,要先判断一下你对这个表 T 有没有执行查询的权限,如果没有,就会返回没有权限的错误,如下所示 (在 工程实现上,如果命中查询缓存,会在查询缓存返回结果的时候,做权限验证。查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。
2025-11-11 22:51:18
999
原创 清楚易懂的红黑树讲解
— 无论是节点值的替换,还是子树的整体替换,最终都要保证交换后树依然满足红黑树的约束条件,确保树的平衡和 O (log n) 的查询 / 插入 / 删除效率。它在二叉搜索树的基础上,在每个节点上增加了一个存储位来表示节点的颜色(红色或黑色)。通过对任何一条从根到叶子的路径上各个节点着色方式的限制,红黑树确保。从根节点到最远叶子节点的路径长度(主要取决于黑色节点数)不会超过到最近叶子节点路径长度的两倍,这就保证了平衡。红黑树通过上述规则和操作,在动态数据集中高效维持平衡,是工程中广泛使用的数据结构之一。
2025-11-10 19:55:40
851
原创 LinkedList 和ArrayList 的区别?
当数组容量不足时,会创建一个新的更大的数组(通常是原来的1.5倍),并将旧数组的数据拷贝过去,这个过程称为。LinkedList 在头尾插入/删除时间复杂度为 O(1),中间位置为 O(n)(需遍历定位)。ArrayList 尾部插入/删除为 O(1),中间或头部操作可能导致数组移动,平均为 O(n)。ArrayList 基于动态数组实现,元素在内存中连续存储,通过索引直接访问。,每个人(节点)都知道自己前后是谁,但他们在内存中的位置是分散的。之后的所有元素都向后移动一位,这是一个 O(n) 操作。
2025-11-07 19:57:49
1435
原创 Java中程序是如何执行的?
程序首先通过Java编译器(javac)将源代码编译为字节码文件(.class),然后由Java虚拟机(JVM)加载并执行这些字节码。JVM在内存中划分为多个区域:方法区(存储类信息)、堆(存储对象实例)、栈(存储方法调用和局部变量)、程序计数器(记录执行位置)和本地方法栈(支持本地方法调用)。现代JVM通常结合即时编译(JIT)技术,将热点代码(频繁执行的代码)编译为本地机器码以提高性能。Java源代码(.java文件)通过Java编译器(javac)编译成字节码(.class文件)。
2025-11-05 19:36:35
809
原创 Java 反射理解
反射是 Java 提供的一种在运行时(而非编译时)检查、访问和修改类、接口、字段、方法等程序自身信息的能力。核心思想"反"其道而行之。代码 → 创建对象 → 调用方法(编译时确定)类信息 → 动态创建对象 → 动态调用方法(运行时确定)
2025-11-04 11:12:37
504
原创 MySQL 锁机制
MySQL 的锁机制是为了在并发访问下,保证数据的一致性、完整性而设计的。:锁定的范围大小:锁的兼容性,即多个锁之间能否共存。
2025-11-01 11:48:31
1162
原创 MVCC 多版本并发机制
MVCC(Multi-Version Concurrency Control)是一种数据库并发控制技术,通过保存数据的多个版本来实现读操作与写操作的并发执行。它避免了传统锁机制中读写冲突的问题,提高了数据库的并发性能。MVCC通过版本控制机制平衡了并发与一致性,是现代数据库如MySQL、PostgreSQL的核心特性之一。每个事务启动时分配唯一ID,用于标记数据版本的创建和删除时间。指向旧版本数据的指针,形成版本链,便于事务回滚或读取历史数据。
2025-11-01 08:54:35
458
原创 Java 常用包有哪些?
Object 是所有 Java 类的超类,提供基本方法如 equals()、hashCode() 和 toString()。java.lang 是 Java 语言的核心包,包含基础类和接口,如 Object、String、Math、System 和 Thread。集合框架提供 List、Set、Map 等接口及其实现类,如 ArrayList、HashSet 和 HashMap。Arrays 和 Collections 类提供数组和集合的操作方法,如排序和搜索。
2025-10-29 19:46:08
1219
原创 学习 JVM 虚拟机
JVM(Java Virtual Machine)是Java程序的运行环境,它是一个虚拟的计算机,能够执行Java字节码。类加载:将.class文件加载到内存中。字节码执行:通过解释器或即时编译器(JIT)将字节码转换为机器码。内存管理:管理堆、方法区、虚拟机栈等内存区域。垃圾回收:自动回收不再使用的对象,释放内存。类加载子系统:负责加载、链接和初始化类。运行时数据区:包括堆、方法区、虚拟机栈、本地方法栈和程序计数器。执行引擎:负责解释或编译执行字节码。本地方法接口。
2025-10-29 11:32:00
457
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1