自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Paxos协议详解:分布式系统如何通过多数派协商达成数据一致

该协议将系统抽象为提案者(Proposer)、接受者(Acceptor)和学习者(Learner)三类角色,利用提案编号的全局递增规则和“多数派承诺”策略,既避免了无限循环的活锁问题,又降低了单点故障的风险。

2025-06-09 15:42:15 608

原创 解析两阶段提交与三阶段提交的核心差异及MySQL实现方案

经典的两阶段提交协议(2PC)通过准备阶段与提交阶段的协调机制,以同步决策模式确保事务原子性。其改进版本三阶段提交协议(3PC)通过增加预提交阶段和超时机制,旨在解决2PC的阻塞风险。值得注意的是,MySQL数据库的Binlog与InnoDB引擎通过内部两阶段提交机制,实现了事务日志与存储引擎状态的一致性保障。

2025-06-09 15:36:10 532

原创 Dubbo高频面试题

本文系统梳理Dubbo高频面试核心知识点,涵盖容错策略、负载均衡、注册中心原理、服务上下线感知等关键技术细节,助您深入理解Dubbo设计思想,从容应对分布式服务架构面试挑战。无论是服务注册发现流程,还是ZooKeeper节点监听机制,这里提供清晰的技术脉络与场景化解析。

2025-05-29 10:40:43 762

原创 MyBatis 一二级缓存深度解析:原理、应用与脏读问题

级缓存基于 SqlSession 的生命周期,默认开启但存在跨会话脏读风险;二级缓存虽能实现跨会话数据共享,却需谨慎处理连表查询、集群部署等场景下的缓存同步难题。

2025-05-29 10:12:39 1067

原创 单例模式的隐秘危机

许多开发者误以为“私有构造函数”足以保障其唯一性,却忽视了反射机制、对象克隆、序列化反序列化这三把“隐形利刃”——它们能绕过常规防御,悄无声息地创建多个实例,引发数据污染、资源竞争等灾难性后果。

2025-05-28 10:05:23 739

原创 Elasticsearch父子关系解析

传统关系型数据库通过外键实现的多表关联,在分布式搜索场景下面临性能与扩展性挑战。Elasticsearch通过父子关系(Parent-Child Relationship)提供了一种高效的文档级联方案,支持灵活的多层数据建模与跨文档查询。

2025-05-28 10:01:13 572

原创 Elasticsearch搜索机制与分页优化策略

两阶段查询:协调节点通过Query阶段并行筛选分片结果(基于文档ID与排序值),再经Fetch阶段精准拉取全量数据;混合索引加速:BKD树(数值/日期字段)实现高效范围查询(O(log N)),倒排索引(字符串字段)支持快速关键词匹配;海量数据分页:突破max_result_window默认限制需权衡内存开销,而Scroll API(批量拉取)与Search After(动态分页)分别适用于离线分析与实时场景。

2025-05-27 13:26:53 1186

原创 Elasticsearch索引机制与Lucene段合并策略深度解析

文档生命周期管理:从客户端请求路由到分片定位,从内存缓冲区(Buffer)到事务日志(Translog)的双重写入机制,揭示数据持久化的完整路径;实时性与可靠性平衡:通过剖析Translog同步/异步刷盘策略、内存缓冲区刷新(Refresh)与持久化刷盘(Flush)的触发逻辑,解读搜索可见性与故障恢复的底层保障;Lucene段合并优化:深入对比分层合并(TieredMergePolicy)、字节大小合并(LogByteSizeMergePolicy)和文档数量合并(LogDocMergePolicy)

2025-05-27 13:19:12 1375

原创 Elasticsearch 节点角色详解及协调节点请求策略

Elasticsearch 集群中的节点可以承担多种角色,如主节点、数据节点、预处理节点和协调节点。合理配置和理解这些节点角色,对于保障集群的高可用性、性能优化以及请求调度至关重要。

2025-05-26 19:40:24 595

原创 什么是倒排索引及 Elasticsearch 常用字段类型解析

在全文搜索引擎中,倒排索引是核心的数据结构,它通过从文档中提取关键词并建立关键词到文档的映射关系,实现了高效的文本检索。本文将详细介绍倒排索引的组成与作用,并结合 Elasticsearch,解析其索引、文档、字段等基本概念及常见字段类型。

2025-05-26 19:36:41 1031

原创 JDK动态代理与CGLIB代理原理及区别详解

Java中主要有两种动态代理实现方式:JDK动态代理和CGLIB代理。JDK动态代理通过反射机制在运行时创建实现指定接口的代理对象,而CGLIB代理则通过字节码操作技术动态生成目标类的子类来实现代理功能。

2025-05-15 09:34:47 1238

原创 MySQL 大表中添加索引的两种常见方式及其优缺点分析

由于大表数据量庞大,索引的创建过程往往涉及较高的系统开销和复杂的操作流程。本文将介绍两种在大表中添加索引的常见方法:直接添加索引和表复制方式,分别分析它们的优缺点,帮助开发和运维人员根据实际业务场景选择合适的索引创建方案。

2025-05-15 09:22:36 366

原创 MySQL Explain 中 Type 与 Extra 字段详解

MySQL 的 EXPLAIN 命令能够帮助开发者分析查询的执行路径和效率,其中 Type 和 Extra 字段提供了关键的执行细节。Type 字段表示访问类型,反映了 MySQL 访问数据的方式和效率层级。

2025-05-14 10:05:20 795

原创 MySQL中的索引下推技术(ICP)

索引下推(Index Condition Pushdown,简称ICP)作为一种有效提升查询效率的技术,通过将部分过滤条件提前下推到存储引擎层进行处理,减少了不必要的数据回表操作和网络传输开销,从而显著提升查询性能。特别是在联合索引的应用场景中,索引下推能够充分利用联合索引的多个字段,提高索引的使用效率,避免传统最左前缀原则导致的性能瓶颈。

2025-05-14 09:56:54 366

原创 MySQL 深度分页怎么优化?

逐页翻页通过记录上次查询的最大ID,避免了大量的偏移扫描,适合顺序浏览;而基于页数的直接跳页查询则面临主键不连续和偏移量过大的性能瓶颈。

2025-05-13 10:34:35 415

原创 MySQL排序机制详解:内存排序与索引优化策略

MySQL为每个线程分配专门的排序缓冲区(sort_buffer),并根据排序数据长度和配置参数,决定采用全字段排序还是RowID排序。此外,合理设计索引还能避免排序步骤,提升查询效率。

2025-05-13 10:29:10 1047

原创 MySQL 中自增主键为什么不连续?

MySQL 中自增主键为什么不连续?

2025-05-12 09:23:52 295

原创 MySQL Join连接算法深入解析

MySQL支持多种Join算法,包括经典的索引嵌套循环连接(Index Nested-Loop Join)、块嵌套循环连接(Block Nested-Loop Join)以及针对大数据量场景优化的批量键访问(Batched Key Access,BKA)和多范围读取(Multi-Range Read,MRR)等先进技术。

2025-05-12 09:22:02 932

原创 MySQL中的连接池

数据库连接池作为提升应用性能和资源利用效率的重要技术手段,广泛应用于现代数据库访问场景中。其核心思想是通过池化技术实现数据库连接的复用,避免频繁创建和销毁连接所带来的开销,从而显著提高系统响应速度和并发处理能力。

2025-05-09 09:23:46 429

原创 MySQL中的意向锁 + next-key锁 + 间隙锁

MySQL中意向锁、间隙锁以及next-key锁等复杂锁类型,旨在协调表级锁与行级锁之间的关系,防止数据的脏读、不可重复读和幻读现象,尤其是在可重复读隔离级别下发挥关键作用。

2025-05-09 09:20:11 1075

原创 MySQL中的主从同步

MySQL主从同步是保障数据高可用和读写分离的重要机制,其核心在于将主库的变更日志(binlog)实时传递并应用到从库,实现数据的复制和同步。

2025-05-09 09:11:12 369

原创 MySQL中的两阶段提交(2PC)

在InnoDB存储引擎中,当启用二进制日志(Binlog)且执行事务提交时,会触发两阶段提交(2PC)过程,以确保数据的一致性和持久化安全。

2025-05-08 11:27:06 888

原创 MySQL中隔离级别那点事

在MySQL中,事务隔离级别和二进制日志(binlog)的格式密切相关,直接影响数据的一致性和复制的正确性。尤其是在“已提交读”(Read Committed)隔离级别下,由于没有使用间隙锁,某些并发操作在执行过程中不会产生阻塞,但在采用基于语句(statement-based)的binlog格式时,可能导致主从复制中数据顺序和一致性的问题。

2025-05-08 11:15:46 654

原创 Java中局部变量的生命周期

每个线程都拥有独立的虚拟机栈,栈中包含多个栈帧,而每个栈帧对应一次具体的方法调用。方法执行时,相关的局部变量被存储在当前栈帧的局部变量表中,随着方法执行完毕,栈帧被弹出,局部变量随之失效。

2025-05-08 11:02:37 139

原创 什么情况下会触发Full GC?

Full GC(完全垃圾回收)是一种针对整个堆空间进行的垃圾回收操作,通常相比年轻代GC更加耗时且影响性能。理解触发Full GC的具体情形,对于性能调优和故障排查至关重要。

2025-05-07 17:33:03 399

原创 JVM的双亲委派模型

Java类加载机制中的双亲委派模型通过层层委托保证了核心类加载器与应用类加载器之间的职责分离和加载安全性,但其单向的委托关系也带来了一些局限性。尤其是在核心类库需要访问或实例化由应用类加载器加载的类时,双亲委派模型无法满足需求,导致系统类无法直接调用应用类中的实现。

2025-05-07 17:15:00 909

原创 JVM中类加载过程是什么?

在Java程序运行过程中,类的加载是至关重要的环节,它直接关系到程序的执行效率和安全性。类加载不仅仅是简单地将.class文件读取到内存中,而是经历了加载、连接(包含验证、准备和解析)以及初始化等多个复杂步骤,最终将类的结构和行为完整地映射到JVM内存中。

2025-05-07 17:09:06 540

原创 JVM中对象的存储

每个 Java 对象在内存中都由三个主要部分构成:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。其中,对象头又包含了 Mark Word(存储对象运行时数据)、类型指针(Klass Pointer)以及数组长度(仅针对数组对象)。

2025-05-07 13:06:49 635

原创 内存溢出相关知识

如何在OOM时获取堆内存转储(Heap Dump),如何调整新生代和老年代的内存大小,以及如何使用MAT(Memory Analyzer Tool)工具排查内存溢出问题。

2025-05-06 10:11:36 493

原创 CPU飙高问题怎么排查?

利用 Arthas 和 JDK自带命令 来监控和分析Java应用程序的线程性能。

2025-05-06 10:04:06 312

原创 JMM中的内存屏障

Java内存模型(JMM, Java Memory Model)通过定义一套规范,为开发者提供了在多线程环境下操作共享内存的规则。其中,内存屏障(Memory Barrier)是JMM的核心机制之一,它通过限制指令重排序和确保内存可见性,帮助开发者编写出线程安全的代码。

2025-04-29 10:58:05 266

原创 JVM对象存储格式

在Java虚拟机(JVM)中,对象的内存布局是一个重要的底层概念,它直接影响对象在内存中的存储方式和占用空间。了解对象存储格式不仅有助于优化程序性能,还能帮助我们更好地理解JVM的工作原理。本文将详细探讨对象存储格式,包括对象头的存储结构、Mark Word的格式,以及一个空对象在开启和未开启压缩指针情况下的内存占用情况。通过分析这些内容,我们可以更深入地理解JVM内存管理的机制。

2025-04-29 10:23:03 515

原创 JVM 内存分配策略

JVM 提供了多种内存分配策略,如指针碰撞、空闲列表以及 TLAB(Thread Local Allocation Buffer),并结合不同的垃圾回收器,灵活应对各种内存分配需求。

2025-04-28 13:47:00 587

原创 JVM 什么对象会被晋升到老年代?

什么样的对象会被晋升到老年代

2025-04-28 13:41:05 156

原创 CMS、G1如何并发进行可达性分析

CMS G1 三色标记 可达性分析

2025-04-28 11:02:16 882

原创 JVM常见的垃圾回收器

JVM 垃圾回收器 面试高频

2025-04-27 11:17:01 958

原创 如何让三个线程按照顺序循环输出 1,2,3?(亲测可Run)

如何让三个线程按照顺序循环输出 1,2,3? 多线程 并发

2025-04-24 17:57:39 201

原创 ITL和TTL,能在线程间进行值的传递

ITL和TTL,线程间进行值的传递

2025-04-24 17:55:34 352

原创 CompletableFuture到底怎么用?

CompletableFuture 提供了强大的功能来处理异步编程任务。它同时实现了Future和两个接口。

2025-04-24 17:53:55 434

原创 阻塞队列(BlockingQueue)原理

take(取):队列空时,notEmpty.await(),不空时正常取数据并notFull.signal(),处理逻辑被ReentrantLock.lock()。put(放):队列满时,notFull.await(),不满时正常放数据并notEmpty.signal(),处理逻辑被ReentrantLock.lock()。阻塞队列是由一个ReentrantLock和两个条件组成,notFull队列不满和notEmpty队列不空条件。

2025-04-24 17:52:26 400

空空如也

空空如也

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

TA关注的人

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