自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySQL 索引知识大梳理:底层原理、分类及存储引擎差异全解析

MySQL索引详解:提升查询性能的关键技术 摘要:MySQL索引主要分为顺序访问和索引访问两种方式。索引通过特殊数据结构(B+Tree或哈希)快速定位数据,显著提高查询效率。B+Tree索引因其稳定的查询性能、高效的范围查询和低IO消耗成为MySQL首选。索引类型包括普通索引、唯一索引、主键索引和全文索引,按存储方式可分为聚簇索引(InnoDB主键索引)和非聚簇索引。InnoDB与MyISAM在索引实现上存在差异:InnoDB采用聚簇索引存储数据,辅助索引需回表查询;MyISAM所有索引均为非聚簇索引。合理

2025-10-09 15:04:14 752

原创 MySQL 锁机制全解析:从表锁、行锁到乐观 / 悲观锁,彻底搞懂并发控制

MySQL锁机制是数据库并发控制的核心技术,主要包括全局锁、表级锁、行级锁和页级锁。全局锁适用于全库备份场景,表级锁分为共享锁(S锁)和排他锁(X锁),并通过意向锁提高冲突检测效率。行级锁包含记录锁、间隙锁和临键锁,提供更细粒度的并发控制但可能引发死锁。乐观锁通过版本号实现,悲观锁则直接加锁。锁机制与事务隔离级别密切相关,通过不同锁策略实现不同级别的隔离效果,从读未提交到串行化,锁的强度逐渐增强,确保数据一致性。

2025-09-29 17:45:19 861

原创 MySQL 事务入门:从案例到 ACID 特性,一文搞懂数据库可靠性保障

MySQL事务是确保数据操作一致性的关键机制。文章首先通过转账案例说明事务的必要性,详细介绍了事务的语法(BEGIN/COMMIT/ROLLBACK)和ACID四大特性:原子性(通过undolog实现回滚)、持久性(redolog保障数据持久化)、隔离性(MVCC和锁机制控制并发)和一致性(业务规则的最终目标)。接着分析了并发事务可能出现的脏读、不可重复读、幻读和丢失修改问题,并介绍了四种隔离级别(RU/RC/RR/SERIALIZABLE)及其解决方案。最后指出锁机制是理解事务隔离性的重要基础,为后续深入

2025-09-29 15:14:33 1057

原创 ThreadLocal 全解析:从底层原理到实战场景,一篇搞懂

ThreadLocal是Java中的线程局部变量,用于实现线程间的数据隔离和跨方法共享。它通过为每个线程维护独立的ThreadLocalMap来存储数据,其中ThreadLocal对象作为键,确保线程安全且高效访问。关键特性包括:1)线程隔离性,不同线程操作同一ThreadLocal互不干扰;2)支持跨类/方法传递数据,避免参数耦合;3)需配合remove()防止内存泄漏。典型应用场景包括线程上下文管理(如用户会话)、避免参数传递等。InheritableThreadLocal可扩展至父子线程共享数据。合理

2025-09-28 15:29:40 958

原创 Redis篇章3:Redis 企业级缓存难题全解--预热、雪崩、击穿、穿透一网打尽

本文聚焦企业级 Redis 缓存四大挑战,详解解决方案。缓存预热通过统计热点数据并提前加载,避免系统启动时数据库压力;缓存雪崩可通过给 Key 的 TTL 加随机值、Redis 集群、降级限流及多级缓存应对;缓存击穿有互斥锁(数据一致但性能串行)和逻辑过期(性能好但可能返脏数据)两种方案;缓存穿透可用缓存空对象(简单但有内存、一致性问题)或布隆过滤(内存少但实现复杂、有误判)解决。掌握这些能让 Redis 更稳定高效。

2025-09-15 16:33:54 935

原创 Redis篇章2:持久化、删除策略与 Spring 整合全解析

本文深入探讨Redis在企业级应用中的三大核心能力:持久化机制、删除策略和Spring整合。在持久化方面,详细解析了RDB快照和AOF日志两种机制的实现原理、配置方式及适用场景;针对内存管理,介绍了基于TTL的定时/惰性/定期删除策略和内存不足时的逐出算法;最后讲解了Spring-data-redis如何简化配置、提供统一操作接口并支持事务等特性。这些知识为构建高性能、高可靠的Redis应用奠定了基础,是应对缓存雪崩等复杂问题的必备技能。

2025-09-15 16:23:31 875

原创 Redis篇章1:从入门到实战,轻松掌握高性能数据存储与缓存

Redis是一个开源的内存数据存储系统,支持多种数据结构(字符串、哈希、列表、集合、有序集合)。本文介绍了Redis的下载安装方法(Linux 4.0版/Windows 3.2版)、核心文件功能、基本操作命令,以及5种常用数据类型的特性和使用场景。同时讲解了如何通过Java的Jedis客户端操作Redis,并提供了一个简单的缓存实现示例。最后指出Redis在持久化、事务等方面还有更多高级功能待探索。

2025-09-15 15:43:30 1116

原创 Spring框架中用到的设计模式

摘要: Spring框架通过巧妙运用多种设计模式提升开发效率与代码质量。工厂模式(BeanFactory)实现对象创建与管理;单例模式(默认Bean作用域)确保资源复用;策略模式(Resource接口)支持多种资源访问策略;代理模式(AOP)实现无侵入式功能增强;模板方法模式(JdbcTemplate)封装通用操作流程;适配器模式(MVC)统一处理不同控制器。这些模式的综合应用使Spring具备高度可扩展性、可维护性和灵活性,为Java企业级开发提供强大支持。

2025-09-11 19:43:27 649

原创 StringBuilder类的数据结构和扩容方式解读

本文深入解析了Java中StringBuilder类的数据结构与扩容机制。StringBuilder作为String的可变替代方案,通过动态字符数组和高效扩容策略(通常扩容为原容量2倍加2)解决了String频繁修改导致的性能问题。其核心特点包括:可变字符序列设计、非线程安全、支持多种初始化方式,以及Java9后优化的字节数组存储结构。文章详细介绍了StringBuilder的append操作触发扩容的完整流程,包括容量计算、新数组创建和数据迁移等关键步骤,强调了合理初始容量设置对性能优化的重要性。

2025-09-08 17:19:40 1067

原创 曼基康矮脚猫库存平白少 1 只?Seata 部署 + 微服务集成实战,彻底搞定分布式事务

本文介绍了微服务架构下的事务管理挑战及解决方案。在微服务拆分为独立服务后,传统ACID事务难以保障跨服务数据一致性。通过电商案例演示了订单与库存服务间可能出现的数据不一致问题。重点讲解了Seata分布式事务框架的TC、TM、RM角色架构,以及AT模式的具体实现步骤,包括TC服务部署、微服务集成配置、数据库表创建等。最终通过@GlobalTransactional注解成功解决了跨服务事务问题,在异常情况下保证了订单创建与库存扣减的原子性操作。

2025-09-05 14:15:47 1093

原创 RocketMQ安装教程

本文介绍了Apache RocketMQ的安装配置与基础使用。首先说明了RocketMQ作为阿里巴巴开源的高性能分布式消息中间件,已通过双11等大规模场景验证。详细讲解了Windows环境下的安装步骤,包括JDK1.8+环境准备、环境变量配置以及NameServer和Broker的启动方法。重点提供了Java客户端示例代码,包含生产者发送消息和消费者接收消息的完整实现,并解释了Topic、消费者组等核心概念。最后说明了运行顺序和注意事项,帮助开发者快速上手这一高吞吐、高可靠的分布式消息系统。

2025-09-01 18:37:43 946 1

原创 ElasticSearch安装及使用教程

Elasticsearch是一个基于Lucene的分布式搜索引擎,支持实时搜索和大数据处理。文章介绍了Windows环境下Elasticsearch 7.16.2的安装步骤,重点解决了Java版本冲突问题,建议使用ES自带的JDK11。同时提供了IK分词器的安装方法和Java客户端操作示例,包括创建索引、添加文档和查询等基础功能。针对常见错误给出了解决方案,如临时文件删除和环境变量设置等。内容涵盖从安装到基础开发的全流程指导。

2025-09-01 16:36:28 2127 4

原创 《解锁 CAS:Java 并发中的轻量级同步核心》

CAS(比较并交换)是一种无锁同步机制,通过CPU指令实现原子操作。其核心流程为"读取-计算-比较并交换",无需加锁即可保证多线程安全。Java通过Unsafe类间接调用CPU指令(如x86的cmpxchg)实现CAS,常用于AtomicInteger等并发工具。相比传统锁机制,CAS更轻量级,但存在ABA问题(可用版本号解决)、高并发时自旋开销大、仅支持单变量原子操作等缺点。适合低冲突场景,能有效减少锁的性能损耗。

2025-08-31 17:17:31 681

原创 Spring Boot自动装配的原理

SpringBoot自动装配机制解析:通过@SpringBootApplication整合三大核心功能实现"约定优于配置"。其中@EnableAutoConfiguration是关键,借助@Import机制动态加载META-INF/spring.factories中的配置类,配合@ComponentScan组件扫描和@SpringBootConfiguration手动配置,实现依赖即配置的自动化装配。该机制包含组件注册和依赖注入两个层面,大幅简化了Spring应用的开发配置工作。

2025-08-24 14:42:58 963

原创 Spring Bean 生命周期大揭秘:从诞生到谢幕的 5 大阶段,面试必看!

本文将详细介绍Spring框架中Bean的生命周期,包括实例化、属性赋值、初始化和销毁四个核心阶段。在实例化阶段,Spring支持构造方法、静态工厂和实例工厂等多种实例化方式。属性赋值阶段主要完成依赖注入和基本类型/集合类型的属性设置。初始化阶段包含Aware接口回调、前后置处理、InitializingBean接口和自定义初始化方法等关键步骤。最后,销毁阶段通过DisposableBean接口和自定义销毁方法执行资源释放操作。理解Bean生命周期有助于开发者更好地控制对象行为,实现资源管理和解耦设计。

2025-08-16 18:02:23 1096

原创 MyBatis的执行器

MyBatis执行器是SQL执行的核心组件,承担SQL解析、执行和结果映射等关键任务。它管理一级/二级缓存优化查询,处理参数映射生成可执行SQL,通过JDBC与数据库交互(查询映射结果集,增删改执行或批量暂存),同时控制事务提交与回滚。执行器分为三种类型:SimpleExecutor(单条即开即关)、ReuseExecutor(复用Statement)和BatchExecutor(批量执行),适应不同场景需求。执行器封装了底层复杂逻辑,使开发者只需关注Mapper接口调用,大大简化了数据库操作流程。

2025-08-11 20:23:46 987

原创 MyBatis中Mapper接口的工作原理

MyBatis的Mapper接口通过动态代理机制实现数据库操作,其核心原理是:接口方法通过XML或注解配置SQL语句,运行时由JDK动态代理生成接口实例,拦截方法调用并自动解析namespace、方法名和参数,转换为底层SqlSession操作。这种方式封装了JDBC细节,简化了数据库访问,但需要注意Mapper接口不支持方法重载。整个流程包括定义规则、生成代理、解析信息、执行SQL和返回结果,体现了MyBatis在SQL灵活性和开发便捷性之间的平衡。

2025-08-10 18:27:57 989

原创 线程池的状态

本文介绍了线程池的五种状态及其转换关系:RUNNING(运行)、SHUTDOWN(关闭)、STOP(停止)、TIDYING(整理)和TERMINATED(终止)。这些状态贯穿线程池的生命周期,控制着任务提交、线程执行和资源回收等关键行为。RUNNING状态下线程池接收新任务,SHUTDOWN状态下不再接收新任务但处理队列任务,STOP状态下则中断所有任务。状态转换通过shutdown()和shutdownNow()方法触发,最终线程池会依次进入TIDYING和TERMINATED状态完成清理。这些状态机制确

2025-07-22 19:13:22 819

原创 《线程池的核心配置参数和流程》

本文介绍了线程池的核心概念、关键配置参数和执行流程。线程池通过预先创建和重复利用线程来避免频繁创建销毁的开销,主要由ThreadPoolExecutor实现。核心配置参数包括:核心线程数、最大线程数、线程存活时间、工作队列和拒绝策略等,这些参数共同决定了线程池的性能表现。执行流程遵循"核心线程->工作队列->非核心线程->拒绝策略"的顺序,通过动态伸缩和队列调度机制平衡性能和资源利用率。线程池有效地解决了高并发场景下的线程管理问题,实现了性能、资源和稳定性的平衡。

2025-07-19 16:27:38 1033

原创 装箱(Boxing)与拆箱(Unboxing)

装箱(Boxing) 和 拆箱(Unboxing) 是 Java 中的一种语法特性,主要用于在 基本数据类型 和 包装类对象 之间进行转换。它们的引入增强了 Java 的灵活性和易用性,尤其是在泛型、集合框架等场景中。

2025-03-24 00:16:32 1033

原创 Integer缓存池

在Java的Integer类中,缓存池(也称为整数缓存)是通过一个内部静态类实现的。这个缓存池用于缓存一定范围内的Integer对象,以提高性能并减少内存开销。方法是 Java 中用于获取Integer对象的静态工厂方法。它的一个重要特性是利用缓存池(Integer Cache)来重用对象,从而提高性能并减少内存开销。Integer缓存池是Java中用于优化小整数对象重用的一种机制,默认缓存范围为-128到127。方法是获取Integer对象的推荐方式,它会利用缓存池来重用对象。自动装箱。

2025-03-13 17:37:31 851

原创 String类的equals()的作用和源代码解读

那是因为没有重写equals()方法,采用"=="运算符进行内存地址的比较。当我们在Java中创建两个引用类型的对象时,即使它们的内容完全相同,它们也会被分配在不同的内存地址上。随着Java的发展,开发者需要根据对象的内容(如属性值)来判断相等性,而不是内存地址。首先在我阐述equals()方法的由来之前,先跟大家叙述一下"=="与'"quals"的区别。类是通用类,无法预知子类的具体内容,只能通过地址判断对象是否相等。对象姓名和年龄相同,即使内存地址不同,也可以被认为是“相等”的。

2025-03-05 23:56:29 338

原创 深入理解 String 类的不可变性及其内部数据结构

不可变性String是不可变的,任何对字符串内容的修改操作都会生成一个新的字符串对象。方法行为substringconcat等方法不会修改原字符串的内部数组,而是通过复制字符数据生成新的字符串对象。性能与优化不可变性带来了线程安全、内存优化等优点。频繁的字符串修改操作可能会导致性能问题,建议使用或。

2025-03-03 12:21:00 955 1

空空如也

空空如也

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

TA关注的人

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