自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 面试必知必会(14):MySQL执行计划与SQL优化

本文是Java面试系列文章中的一篇,重点讲解MySQL执行计划与SQL优化。文章首先概述MySQL查询执行流程,包括连接器、解析器、优化器等关键步骤。核心部分详细解读EXPLAIN命令的输出字段,如访问类型(type)、索引使用(key)、扫描行数(rows)等重要指标。随后提供SQL优化实战技巧:合理使用索引(遵循最左前缀原则)、避免SELECT*以减少数据传输、优化ORDER BY与GROUP BY操作等。通过实际示例演示如何分析执行计划并优化查询性能,帮助开发者掌握MySQL性能调优的核心方法。

2026-03-03 09:40:06 1628 238

原创 面试必知必会(13):MySQL锁机制

MySQL锁机制是数据库控制并发访问的核心技术,主要分为表级锁和行级锁。表级锁锁定整张表,包括共享读锁(S锁)和独占写锁(X锁),MyISAM引擎默认使用表锁,InnoDB在索引失效等场景也会升级为表锁。行级锁锁定单行数据,包含记录锁(锁定索引记录)、间隙锁(防止幻读)和临键锁(组合锁),InnoDB默认使用行锁,但依赖索引实现。合理使用锁机制能有效保证数据一致性,避免并发冲突。

2026-03-02 10:41:07 1114 150

原创 面试必知必会(12):MySQL索引

Java面试索引技术解析 本文系统讲解MySQL索引的核心概念与底层原理: 索引本质:有序数据结构,通过键值映射加速查询(类比书籍目录) 核心作用:加速查询(百万数据毫秒返回)、优化排序分组、降低磁盘IO 使用代价:增加存储空间(1GB表可能需额外1GB索引)、降低写操作性能(增删改需同步更新索引) B+树深度解析: 结构优势:3层结构(根/非叶/叶节点),多路平衡设计使亿级数据仅需3-4次IO 核心特性:非叶节点仅存导航信息,叶节点双向链表连接(范围查询高效) 对比B树:叶节点链表结构使B+树更适磁盘存储

2026-02-27 13:50:26 2159 136

原创 面试必知必会(11):MySQL事务特性

本文是Java面试系列文章之一,重点解析MySQL事务的ACID特性。ACID包括原子性(通过Undo Log实现事务回滚)、一致性(确保数据符合约束)、隔离性(通过MVCC和锁机制解决并发问题)和持久性(Redo Log保证数据持久存储)。文章详细介绍了MySQL的四种隔离级别及其解决的问题(脏读、不可重复读、幻读等),并分析了InnoDB默认可重复读隔离级别的实现原理。文中还包含SQL示例和表格对比,帮助读者深入理解事务特性及其在MySQL中的实现机制。

2026-02-27 09:39:41 879 82

原创 面试必知必会(10):MySQL存储引擎

本文系统对比了MySQL两大存储引擎InnoDB和MyISAM的核心差异。InnoDB支持ACID事务、行级锁和崩溃恢复,适合高并发事务场景;MyISAM仅支持表级锁且无事务,适合读多写少的场景。文章从事务支持、锁机制、索引结构、数据存储和崩溃恢复五个维度进行详细分析,并给出选型建议:绝大多数生产环境应优先选择InnoDB,仅特定读密集型场景可考虑MyISAM。

2026-02-11 11:25:45 1436 222

原创 面试必知必会(9):ThreadLocal

Java面试系列:ThreadLocal原理详解 ThreadLocal是Java中实现线程私有变量的工具类,通过线程隔离机制保证数据安全。其核心原理基于Thread、ThreadLocal和ThreadLocalMap三者的协作:每个Thread对象内部维护一个ThreadLocalMap哈希表,以ThreadLocal实例为Key存储线程私有变量。这种设计实现了无需加锁的线程安全,避免了资源竞争。使用时需注意内存泄漏风险,因为ThreadLocalMap的Key采用弱引用而Value是强引用。典型应用场

2026-02-11 09:56:54 959 106

原创 面试必知必会(8):CountDownLatch、CyclicBarrier、Semaphore、Exchanger

本文是Java多线程面试系列文章之一,重点解析CountDownLatch和CyclicBarrier两种同步工具。CountDownLatch是"主等从"的一次性计数器,用于主线程等待多个子线程完成任务,基于AQS实现,通过countDown()递减计数,await()阻塞等待。典型场景包括服务启动等待、结果汇总和并发测试。CyclicBarrier则是可重复使用的"栅栏",让多个线程相互等待,支持回调任务,适用于分阶段任务和多轮同步。两者核心区别在于使用模式(主从

2026-02-10 13:38:15 1004 27

原创 面试必知必会(7):多线程AQS

摘要: 本文是Java多线程面试系列文章之一,深入解析AQS(AbstractQueuedSynchronizer)框架的核心原理。AQS作为Java并发包的基础组件,为ReentrantLock、Semaphore等同步工具提供了底层支持。文章重点剖析了AQS的两大核心设计:通过volatile修饰的state变量管理同步状态,采用CLH双向队列实现线程排队机制。详细讲解了state变量的多线程可见性和原子操作特性,以及节点状态(CANCELLED、SIGNAL等)在队列管理中的关键作用。全文以Reent

2026-02-10 09:51:41 1070 85

原创 面试必知必会(6):Lock接口及实现类

Java并发编程:Lock接口及实现类详解 本文深入解析Java并发编程中的Lock接口及其核心实现类ReentrantLock,对比synchronized与Lock的关键差异。Lock接口提供显式锁控制,支持中断、超时获取锁等高级功能,弥补了synchronized的不足。文章详细介绍了Lock的核心方法(lock(), tryLock(), unlock()等)及其使用规范,强调必须在finally块中释放锁以避免死锁。重点分析了ReentrantLock的可重入特性,通过状态值实现多次加锁/解锁,并

2026-02-09 09:55:14 1186 94

原创 面试必知必会(5):CAS与原子类

本文是Java面试系列文章之一,重点讲解CAS(比较并交换)技术及其在Java中的应用。CAS是一种无锁并发控制技术,通过比较内存值与预期值实现原子操作,依赖CPU指令、Unsafe类和volatile关键字实现。文章分析了CAS的三大核心问题:ABA问题(通过版本号解决)、自旋开销(自适应自旋优化)和单变量限制(封装对象解决),并介绍了Java原子类的分类和使用。

2026-02-05 10:39:45 1283 129

原创 面试必知必会(4):volatile关键字

本文深入解析Java中volatile关键字的三大特性:可见性、有序性和非原子性。volatile作为轻量级同步机制,能确保多线程环境下共享变量的修改实时可见(通过MESI协议和内存屏障实现),并禁止指令重排序(通过插入特定内存屏障),但不保证复合操作的原子性。通过典型代码示例(如DCL单例模式和非原子操作)展示volatile的适用场景与局限,并与synchronized进行对比,强调volatile适用于一写多读等特定场景,而在需要原子性保证时应选择锁机制。

2026-02-03 09:27:10 1264 142

原创 面试必知必会(3):synchronized底层原理

本文深入解析Java中synchronized的锁机制,分为对象锁和类锁两类。对象锁作用于实例对象,不同实例的锁相互独立,仅当多线程访问同一实例的同步方法时才会竞争;类锁作用于类的Class对象,全局唯一,访问同步静态方法或锁定Class对象的代码块时会产生竞争。两者相互独立,互不干扰。底层通过Monitor机制实现,每个对象关联一个Monitor对象,通过获取锁实现线程同步。文章通过代码示例和对比表格清晰展示了两种锁的使用场景与核心区别。

2026-01-27 09:55:41 985 204

原创 面试必知必会(2):线程池原理

本文介绍了Java线程池的核心概念和原理。首先阐述了线程池的优势:降低资源消耗、提高响应速度、增强线程管理性及防止服务器过载。

2026-01-22 18:55:56 1144 175

原创 面试必知必会(1):线程状态和创建方式

本文详细介绍了Java线程的6种状态及其转换过程:NEW(新建)、RUNNABLE(可运行)、BLOCKED(阻塞)、WAITING(无限等待)、TIMED_WAITING(限时等待)和TERMINATED(终止)。重点阐述了各状态的定义、触发条件及核心特征,包括RUNNABLE状态包含就绪和运行两个子状态,BLOCKED状态仅与synchronized锁相关,以及WAITING/TIMED_WAITING状态的区别。通过代码示例展示了典型的状态转换场景,如调用start()进入RUNNABLE、获取syn

2026-01-13 22:52:04 1407 228

原创 Java基础(十五):注解(Annotation)详解

介绍注解作为Java元数据机制的本质与作用,可用于编译、类加载和运行时处理

2025-11-05 20:41:31 2523 558

原创 告别重复数据烦恼!MySQL ON DUPLICATE KEY UPDATE 优雅解决存在更新/不存在插入难题

MySQL中的ON DUPLICATE KEY UPDATE语法提供了一种高效的"存在则更新,不存在则插入"解决方案。该语法在插入数据与主键或唯一索引冲突时,自动转为执行UPDATE操作。基本语法为在INSERT语句后添加ON DUPLICATE KEY UPDATE子句,并通过VALUES()函数引用原插入值。典型应用场景包括计数器更新、配置项维护和购物车管理等。高级用法支持条件更新、多表关联和批量操作优化。相比REPLACE INTO(先删后插)和INSERT IGNORE(忽略冲突

2025-10-09 18:22:01 3785 511

原创 Java基础(十四):枚举类详解

Java枚举全解析:从基础定义、特性方法到单例最佳实践,解锁类型安全常量的高效用法与设计优势。

2025-09-25 15:51:48 2376 320

原创 Java基础(十三):内部类详解

深入浅出Java内部类:从基础概念到高级应用,掌握成员、静态、局部、匿名四大类型的核心用法与设计优势!

2025-09-24 08:00:00 1999 302

原创 Java基础(十二):抽象类与接口详解

深入解析Java抽象类与接口的核心区别、特性及适用场景,助你掌握多态设计的最佳实践!

2025-09-22 08:30:00 2523 214

原创 为什么 Java 不让 Lambda 和匿名内部类修改外部变量?final 与等效 final 的真正意义

Java 要求 Lambda 和匿名内部类引用的外部变量必须是 final 或等效 final,不是限制,而是保护——背后是变量生命周期、线程安全与数据一致性的深思熟虑!​​

2025-09-10 14:40:56 3873 294

原创 Java基础(十一):关键字final详解

掌握Java中final关键字的核心用法——从不可变的变量、方法到类,深入理解其设计意图与并发安全优势,助你写出更安全、高效的代码!

2025-09-08 09:00:00 1417 231

原创 Java基础(十):关键字static详解

你真的了解 Java 中的 static 吗?它看似简单,实则蕴含了类级别成员的核心机制。从静态变量共享数据,到静态方法工具化设计,再到静态内部类实现优雅架构,这篇文章将为你全面解锁 static 的强大与细节!

2025-09-02 14:43:59 1683 284

原创 Java基础(九):Object核心类深度剖析

深度解密Java万物之源Object类——从equals/hashCode契约到线程通信,掌握Java对象操作的核心基石与高频面试点!

2025-08-18 18:47:26 1774 352

原创 Java基础(八):封装、继承、多态与关键字this、super详解

解锁Java高内聚低耦合的终极密码!5种this用法、super调用禁区、多态转型陷阱——这些教科书没讲透的OOP实战技巧,一文终结你的困惑

2025-07-15 09:00:00 2718 490

原创 Java基础(七): 面向过程与面向对象、类与对象、成员变量与局部变量、值传递与引用传递、方法重载与方法重写

从执行者到设计者:一文掌握Java面向对象的核心思想与基础概念差异,彻底突破POP与OOP的思维鸿沟!

2025-07-02 09:00:00 1731 134

原创 Java基础(六):数组全面解析

🔥 深度解析Java数组内存机制+高效操作秘籍,从底层原理到Arrays工具类实战,彻底掌握数组设计与性能优化!

2025-06-30 08:30:00 3187 252

原创 Java基础(五):流程控制全解析——分支(if/switch)和循环(for/while)的深度指南

深入解析Java流程控制:从条件分支到循环迭代,一文彻底掌握编程逻辑的核心引擎!

2025-06-27 08:00:00 2076 201

原创 Java基础(四):位运算符详解

🔥 揭秘Java位运算:7大运算符详解 + 63%性能提升秘籍,解锁底层高效编程利器!

2025-06-25 08:00:00 1923 177

原创 Java基础(三):逻辑运算符详解

🔥 掌握Java逻辑运算符的短路奥秘:用&&、||避免空指针,用&、|、^处理复杂逻辑,一文解锁高效编码的核心技巧!

2025-06-23 08:00:00 2468 195

原创 计算机基础(三):深入解析Java中的原码、反码、补码

Java整数底层统一采用补码:彻底解决双零难题,实现加减法硬件级高效运算,揭秘byte范围-128~127的二进制连续性本质!

2025-06-17 14:12:35 3679 221

原创 计算机基础(二):轻松理解二进制、八进制、十进制和十六进制

探索进制转换的奥秘:从基础到Java实战,掌握二进制、十六进制等转换技巧,提升编程效率和理解计算机内部运作!

2025-06-16 07:45:11 2646 156

原创 计算机基础(一):ASCll、GB2312、GBK、Unicode、UTF-32、UTF-16、UTF-8深度解析

从ASCII到UTF-8,一文彻底讲透字符集与编码的本质,终结中文乱码的根源!

2025-06-10 15:45:29 3199 232

原创 Java基础(二):八种基本数据类型详解

一文搞懂比特与字节的换算陷阱,掌握Java数据类型内存占用真相及类型转换规则!

2025-06-03 09:20:46 6679 297

原创 Java基础(一):初识Java——发展历程、技术体系与JDK环境搭建

从Oak到Java 21:一部咖啡命名的编程史诗,揭秘跨时代特性(泛型/Lambda/模块化)如何依托JVM实现“一次编译,全球运行”的终极哲学

2025-05-26 13:35:45 4237 317

原创 Java分层开发必知:PO、BO、DTO、VO、POJO概念详解

在Java企业级开发中,POJO、PO、DTO、BO、VO等对象概念常让开发者困惑。PO(持久化对象)与数据库表一一对应,用于数据持久化操作;BO(业务对象)封装业务逻辑,可包含多个PO;DTO(数据传输对象)用于不同层之间的数据传输,支持序列化;VO(视图对象)用于前端展示,避免暴露敏感字段;POJO是所有简单Java对象的统称。这些对象在项目中各有其应用场景和特点,合理使用它们能有效实现解耦、提高灵活性和安全性。通过统一团队规范,选择合适的对象类型,可以提升代码的可读性和可维护性。

2025-05-12 08:00:00 8732 379

原创 MapStruct从入门到精通:Java对象映射的终极指南

Data@Data在Mapper中定义默认方法实现复杂逻辑@Mapperreturn dto;MapStruct通过其优雅的设计和强大的功能,显著提升了Java对象映射的效率。结合编译时安全检查和灵活的自定义能力,它是现代Java工程中不可或缺的工具。

2025-04-21 09:00:00 1939 452

原创 SpringBoot条件注解全解析:核心作用与使用场景详解

Spring Boot的条件注解为开发者提供了强大的动态配置能力,理解其原理和适用场景是构建灵活、可扩展应用的关键。通过合理组合这些注解,可以实现“智能”的自动配置逻辑,同时避免冗余代码。实际开发中,建议结合Spring Boot的自动配置源码(如模块)深入学习。

2025-04-14 08:30:00 5521 357

原创 EasyExcel导出自动回显中文,读取自动转换码值(基于全局转换器与自定义注解)

用于标记需要转换的字段,指定码表类型/*** 码表类型(如 trans_status)*/通过自定义注解和全局转换器,实现了码值与中文的动态转换,代码简洁且易于扩展。这里可以结合之前写的文章EasyExcel自定义下拉注解的三种实现方式实现下拉框选择,进一步提升用户体验。

2025-04-01 17:30:21 2859 405

原创 Spring组件初始化扩展点:BeanPostProcessor

在Spring框架中,是一个强大的扩展接口,允许开发者在Bean初始化的过程中插入自定义逻辑。它是Spring IoC容器生命周期管理的核心机制之一,广泛应用于属性注入AOP代理监控等场景。理解的工作机制,能够帮助开发者更灵活地定制Spring容器的行为。是Spring框架中扩展容器功能的利器,通过介入Bean的生命周期,开发者可以实现高度定制化的逻辑。无论是框架本身的底层实现(如AOP、事务管理),还是业务层的通用增强(如日志、审计),都离不开这一机制的灵活支持。

2025-03-17 10:51:15 4009 497

原创 Spring组件实例化扩展点:InstantiationAwareBeanPostProcessor

是 Spring 生命周期中的一个关键扩展接口,继承自。它在 Bean 的实例化阶段拦截 Bean 的实例化过程,甚至完全自定义实例化逻辑在属性填充(依赖注入)前后执行自定义操作动态修改 Bean 的定义或属性值,实现更灵活的控制与普通的不同,该接口的关注点集中在 Bean 的实例化阶段,而非初始化阶段(如或为 Spring Bean 的生命周期提供了深度的扩展能力,尤其在实例化阶段和属性注入阶段。通过合理利用其回调方法,开发者可以实现高度定制化的 Bean 管理逻辑,如动态代理、属性加密、依赖注入扩展等。

2025-03-10 10:16:01 3858 427

贪吃蛇的java小程序

贪吃蛇的java小程序

2024-03-11

空空如也

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

TA关注的人

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