自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 并发编程有哪些业务场景

场景类型要解决的核心问题关键技术/思想计算密集型如何缩短计算时间并行计算 (Fork/Join)I/O密集型如何等待时不浪费CPU多线程、异步回调、NIO任务调度型如何定期或在未来执行任务定时线程池 (Scheduler)资源共享型如何高效管理昂贵资源池化技术 (Pooling)数据竞争型如何安全地修改共享数据锁、同步、原子变量协作模型型如何协调不同线程的工作生产者-消费者、等待/通知重要提示:并发在带来巨大好处的同时,也引入了复杂性和风险,如线程安全问题、死锁、性能调优等。

2025-09-11 18:19:52 801

原创 Java NIO的底层原理

特性Java BIO (传统 I/O)Java NIO工作方式流式 (Stream Oriented)缓冲区导向 (Buffer Oriented)阻塞性阻塞 I/O (Blocking I/O)非阻塞 I/O (Non-blocking I/O)多连接处理一个线程处理一个连接 (Thread per Connection)一个线程处理多个连接 (Selector 多路复用)底层机制基于流,使用read()write()基于 Channel 和 Buffer,底层使用epollkqueue性能。

2025-09-11 18:17:15 442

原创 SYN 包在什么场景下会被丢弃

目标机器宕机或IP地址不存在。:目标机器存在,但防火墙或自身规则拒绝了连接。:目标机器存在且未拒绝,但资源耗尽无法处理新连接。:数据包在传输过程中因路由、策略、拥塞等原因丢失。

2025-09-08 22:02:17 1051

原创 为什么 MySQL 采用 B+ 树作为索引

MySQL的不同存储引擎支持不同的索引类型。例如,Memory存储引擎就支持哈希索引,因为它适用于临时表、数据量小且完全在内存中的场景,这时哈希的O(1)查询速度更有优势。而InnoDB也支持自适应哈希索引(Adaptive Hash Index),它会自动为频繁访问的B+树索引页在内存中创建哈希索引,来加速等值查询,但这只是一个内部优化,主索引结构依然是B+树。

2025-09-08 21:54:41 693

原创 HashMap 和 ConcurrentHashMap的区别

Map.get(key) 返回 null 时,在并发环境下无法确定真实含义。:CAS + synchronized + volatile(桶级别锁):无法区分 "key 不存在" 还是 "key 对应的值为 null":synchronized 锁定单个桶的首节点。:分段锁(Segment),默认 16 段。避免可变对象作为 Key:防止哈希值变化。:链表长度 ≥8 且桶数组长度 ≥64。:同 Segment 不同桶仍会竞争锁。:默认容量 16,负载因子 0.75。迭代器弱一致性:不保证实时最新数据。

2025-06-28 22:04:41 1100

原创 详解HashMap底层原理

HashMap 的底层核心是一个动态扩容的桶数组。它通过计算键的哈希值(经过扰动)确定桶的位置。使用链表解决哈希冲突,并在链表过长(且桶数组足够大)时将其转换为红黑树以保证最坏情况下的性能。

2025-06-27 23:01:44 1151

原创 MySQL(1)——count()聚合函数

深入剖析一下 MySQL 中的 COUNT() 函数。它是 SQL 中最常用的聚合函数之一,用于计算表中符合特定条件的行数。

2025-06-27 22:53:08 1127

原创 JVM(12)——详解G1垃圾回收器

G1(Garbage-First)垃圾回收器。它是现代 Java 应用中默认的垃圾回收器(自 JDK 9 起),旨在提供一个高性能、可预测停顿时间(低延迟)的解决方案,尤其适合大内存(多GB甚至TB级别)和多核处理器的服务器环境。

2025-06-24 23:06:13 1559

原创 JVM(11)——详解CMS垃圾回收器

CMS (Concurrent Mark-Sweep) 垃圾回收器。它是 JDK 1.4 后期引入,并在 JDK 5 - JDK 8 期间广泛使用的一种以低停顿时间 (Low Pause Time) 为主要目标的老年代垃圾回收器。它是 G1 出现之前解决 Full GC 长停顿问题的主要方案。

2025-06-24 23:04:30 1540

原创 JVM(10)——详解Parallel垃圾回收器

Parallel 垃圾回收器(也称为 吞吐量优先收集器)。它是 Java 早期(特别是 JDK 8 及之前)在多核处理器上的默认垃圾回收器,其核心设计目标是最大化应用程序的吞吐量。

2025-06-22 23:01:40 1437 1

原创 JVM(9)——详解Serial垃圾回收器

 Serial 垃圾回收器是 JVM 最古老、最基础、最简单的垃圾回收器,也是理解其他更复杂回收器的基础。

2025-06-22 22:57:17 1046

原创 JVM(8)——详解分代收集算法

JVM 的分代收集算法不是一种具体的垃圾收集算法实现,而是一种指导思想和设计原则,是现代 JVM 垃圾收集器的基石。其核心思想源于对程序运行过程中对象生命周期分布的观察(即弱分代假说)。

2025-06-21 23:10:15 1064

原创 JVM(7)——详解标记-整理算法

标记-整理算法通过引入对象移动和紧凑排列的整理阶段,完美解决了标记-清除算法最致命的内存碎片问题,带来了更高的内存利用率和更快的对象分配速度(指针碰撞)。然而,这种优势是以更长的 Stop-The-World 停顿时间(主要来自移动对象和更新引用)为代价的。

2025-06-19 23:16:58 1280

原创 JVM(6)——详解标记-清除算法

标记-清除算法是垃圾回收的基础,其核心的“标记可达对象 -> 清除不可达对象”的思想是几乎所有现代垃圾收集器的基石。它的简单性和无移动开销是其优点,但内存碎片和效率问题是其致命弱点。

2025-06-19 23:14:53 1145

原创 Redis(2)——AOF持久化

AOF 持久化通过记录每一次写操作的日志,为 Redis 数据提供了强大的安全保障,将数据丢失窗口大幅缩小至秒级甚至理论上的零丢失。理解其日志追加机制、appendfsync 策略的权衡、以及至关重要的 AOF 重写原理,是高效、安全使用 AOF 的关键。

2025-06-18 15:13:36 1187

原创 Redis(1)——RDB持久化

RDB 持久化以其高效的全量备份、快速的恢复速度和较低的运行时开销,成为 Redis 数据安全保障体系中的重要一环。理解其基于 fork 和 Copy-On-Write 的运作机制,合理配置触发条件,并结合有效的备份策略,能够最大化其优势,规避其潜在的数据丢失风险。

2025-06-18 15:10:29 1043

原创 JVM(5)——对象的生命周期

创建→使用→不可达→回收→内存重用,对象生命周期由GC Roots可达性决定,不同引用类型提供精细控制能力

2025-06-17 19:25:07 1164

原创 JVM(4)——引用类型

为什么需要不同的引用类型?直接只用强引用不行吗?(内存泄漏风险、缓存管理粗粒度、对象生命周期监听需求)

2025-06-17 19:16:00 1061

原创 JVM(3)——垃圾回收器

本文将深入剖析JVM垃圾回收器的核心原理、实现细节和调优实践,涵盖7大主流回收器+3大前沿技术+20个调优参数,通过GC日志真实案例+内存布局示意图,带您彻底掌握JVM内存回收的底层机制。

2025-06-16 23:52:53 1065

原创 JVM(2)——垃圾回收算法

本文将穿透式解析JVM垃圾回收核心算法,涵盖7大基础算法+4大现代GC实现+3种内存分配策略,通过15张动态示意图+GC日志实战分析,带您彻底掌握JVM内存自动管理机制。

2025-06-16 23:34:58 804

原创 JVM(1)——运行时数据区

本文将带你深入Java虚拟机最核心的运行时数据区(Runtime Data Areas),通过3000字详解+20张图解+实战案例,彻底掌握JVM内存管理的精髓。

2025-06-14 17:22:06 2028

原创 深入剖析 Spring @Bean 注解:灵活定义与掌控你的 Bean

@Bean 注解是 Spring Framework 中 Java 配置(@Configuration)的核心支柱之一。它赋予开发者直接在 Java 代码中显式定义 Spring IoC 容器所管理 Bean 的能力,极大地提升了配置的灵活性和可读性。

2025-06-12 16:59:37 1382

原创 【Java开发】Spring 事务开发完全指南:从入门到精通

在 Spring 开发中熟练运用事务,确保数据的一致性和完整性。记住:事务的核心是 "要么全做,要么全不做",所有的配置和代码都是为了实现这个目标。

2025-06-11 16:37:27 1477

原创 深入解析MySQL锁机制:从全局锁到行级锁的全面指南

在多用户并发访问数据库的场景下,锁机制是保障数据一致性与完整性的核心手段。MySQL的锁按粒度可分为三类

2025-06-10 16:37:16 585

原创 MySQL索引:7大类型+4维分类

索引是数据库高效查询的基石。理解MySQL的索引类型及其适用场景,是优化数据库性能的关键一步。本文将系统剖析MySQL支持的7大索引类型,结合底层原理、使用示例和选型建议,助你彻底掌握索引设计精髓。

2025-06-08 19:11:17 1827 1

原创 MySQL 索引失效全攻略:从原理到实战,让你的查询快 10 倍!

在 MySQL 性能优化中,索引失效是最常见的 "性能杀手"。当精心设计的索引突然无法被查询使用,轻则导致慢查询,重则引发数据库负载飙升。

2025-06-08 18:59:24 1367

原创 Spring MVC深度解析:从原理到实战,一文掌握核心架构

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑

2025-06-07 18:21:35 1245

原创 深入浅出Spring AOP:原理、实战与最佳实践

AOP(Aspect-Oriented Programming) 是一种编程范式,用于解耦横切关注点(如日志、事务、权限)。通过将通用功能从业务逻辑中剥离,提升代码可维护性和复用性。

2025-06-07 18:12:53 1242

原创 深入解析:为什么 Redis 比 MySQL 快

Redis 之所以比 MySQL 快,本质是其针对 "快速读写少量数据" 的场景进行了极致优化:放弃复杂的关系模型和强一致性,利用内存存储和高效数据结构,通过单线程避免并发开销。而 MySQL 则专注于 "海量数据的持久化存储和复杂业务逻辑",在数据可靠性和通用性上做出了更多妥协。

2025-06-06 22:53:18 978

原创 深入解析Java中的装箱与拆箱机制

装箱:基本类型 → 包装类对象(自动/手动)拆箱:包装类对象 → 基本类型(自动/手动)最佳实践在循环中避免使用自动装箱比较包装类对象使用equals()而非==警惕包装类可能的null值导致的NPE了解-128~127的Integer缓存机制。

2025-06-06 22:38:05 402

原创 Spring Bean生命周期全解析:从创建到销毁的底层细节

Spring框架的核心是IoC(控制反转)容器,它负责管理应用中所有Bean的完整生命周期。

2025-06-05 18:16:26 1511

原创 深入理解 Spring IOC:从概念到实践

Spring 框架的 IOC(Inversion of Control,控制反转) 作为其核心特性,通过将对象的创建和管理从程序代码中解耦,极大地简化了组件之间的依赖关系。

2025-06-05 18:01:11 1291

原创 深入浅出 Java 泛型(超详细)

泛型(Generics)是 Java 5 引入的核心特性,它让代码更安全、更灵活、更易于复用。本文从“为什么需要泛型”出发,系统讲解泛型的概念、语法、通配符、类型擦除及实际应用场景,助你彻底掌握 Java 类型系统的精髓。

2025-06-04 20:32:32 1091

原创 Java中 int 与 Integer 的区别详解

优先使用 int:在不需要对象特性(如 null 值、方法操作)时,提升性能。必须使用 Integer:在泛型集合、数据库映射或需要区分“无值”场景时。

2025-05-30 23:36:57 1272

原创 Spring 核心注解精讲:掌握 @Configuration,构建优雅配置类

它不仅仅是标记一个配置类,更重要的是它通过巧妙的 CGLIB 代理机制,确保了配置类内部。方法间依赖注入的正确性(单例行为),并提供了组织、导入、条件化配置等一系列强大功能。方法能够被 Spring 容器识别并处理,将这些方法返回的对象实例化、配置并管理为 Spring Bean。的作用、原理、用法以及最佳实践,助你构建清晰、可维护的 Spring 应用配置。方法时,容器会执行实际的方法体创建 Bean 实例,并将其注册到容器中。的区别,对于编写健壮、可维护的 Spring 应用配置至关重要。

2025-05-28 18:26:43 796

原创 Spring注解详解:@RequestMapping——Web请求映射的核心

在Spring框架中,@RequestMapping是构建Web应用的核心注解之一。无论是传统的Spring MVC项目还是现代的Spring Boot应用,@RequestMapping都扮演着将HTTP请求路由到具体处理方法的角色。通过灵活配置路径、HTTP方法、请求参数等,开发者可以精准控制请求的处理逻辑。

2025-05-27 20:24:09 1504

原创 深入浅出 Spring 注解:@RestController 详解

在构建 RESTful API 或前后端分离的 Web 应用时,Spring 框架的 @RestController 注解是开发者最常用的核心注解之一。它极大简化了 HTTP 请求处理的代码编写,是 Spring MVC 模块的“明星注解”。

2025-05-27 20:19:37 861

原创 Java线程池创建方式全面解析:从基础到高级实践

ThreadPoolExecutor 是创建和管理线程池的核心类,位于 java.util.concurrent 包下。它提供了高度可定制的线程池配置,适合处理大量异步任务。在 Spring 框架中,ThreadPoolTaskExecutor 是一个基于 ThreadPoolExecutor 的线程池实现,专为 Spring 环境设计,提供了更便捷的配置方式(如与 @Async 注解结合使用)

2025-05-25 10:00:55 2547

原创 Java-final关键字详解

final。

2025-05-24 13:24:36 532

原创 【面试题】深拷贝和浅拷贝

维度浅拷贝深拷贝复制范围对象本身 + 引用地址对象及其所有子对象内存占用低(共享引用对象)高(独立副本)性能快(仅复制顶层)慢(递归或序列化)适用场景不可变对象、简单结构可变对象、复杂嵌套结构安全性低(易数据污染)高(完全隔离)选择建议优先使用不可变对象(如String),天然线程安全且无需深拷贝。明确需求:若需副本完全独立,必须深拷贝;若允许共享部分数据,可浅拷贝。深拷贝推荐使用序列化工具或第三方库,避免手动实现遗漏字段。

2025-05-24 13:17:43 694

空空如也

空空如也

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

TA关注的人

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