自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(346)
  • 收藏
  • 关注

原创 【Leetcode hot 100】438.找到字符串中所有字母异位词

本文介绍了如何在一个字符串 s 中查找所有与字符串 p 构成字母异位词的子串,并返回这些子串的起始索引。字母异位词是指字符相同但顺序不同的字符串。 方法思路: 滑动窗口法:通过维护一个与 p 长度相同的滑动窗口,统计窗口内字符的频率。 字符频率比较:初始化时统计 p 的字符频率,并在 s 中滑动窗口,每次移动窗口时更新字符频率,检查是否与 p 的频率一致。 解决代码: 使用两个长度为26的数组分别统计 p 和当前窗口的字符频率。 初始窗口检查后,滑动窗口遍历字符串 s,动态更新窗口字符频率并比较。 辅助方法

2025-08-11 09:06:25 477

原创 【Leetcode hot 100】3. 无重复字符的最长子串

本文介绍了如何用滑动窗口技术解决"无重复字符的最长子串"问题。通过维护左右指针和哈希集合,算法在O(n)时间内找到最长无重复子串。具体实现中,右指针遍历字符串,左指针在遇到重复字符时收缩窗口,同时用集合记录当前窗口字符,并实时更新最大长度。该方法简洁高效,适用于各种输入规模。

2025-08-08 08:37:07 255

原创 【Leetcode hot 100】42.接雨水

本文介绍了如何使用动态规划解决接雨水问题。通过预处理每个位置的左边和右边最大高度,计算每个位置能接的雨水量,具体公式为当前点左右最大高度的较小值减去当前高度。算法通过两次遍历预处理左右最大高度数组,再遍历计算总雨水量,时间复杂度O(n),空间复杂度O(n)。代码以Java实现,并给出了示例验证其正确性。

2025-08-07 08:35:48 404

原创 【Leetcode hot 100】15.三数之和

本文介绍了LeetCode问题"三数之和"的高效解法。该问题要求在数组中找到所有不重复的三元组,使其元素之和为0。通过排序预处理(O(n log n))和双指针技巧(O(n²)),算法能够高效地解决问题。关键步骤包括:排序数组以方便去重,遍历固定第一个数后使用双指针寻找另外两个数,并在过程中跳过重复元素以保证结果唯一。最终的时间复杂度为O(n²),空间复杂度为O(1)(不考虑结果存储)。这种方法既避免了暴力枚举的高复杂度,又确保了结果的正确性和无重复性。

2025-08-06 08:34:16 681

原创 Linux 环境下 MySQL8.0 的三种安装与部署全面指南

本文详细介绍 Linux 环境下 MySQL8.0 的三种安装部署方案。手动安装涵盖卸载旧版本、下载解压安装包、创建用户与目录、配置文件初始化等完整流程;Shell 脚本方案通过自动化脚本实现一键部署,包含环境检测、解压配置、权限管理等功能;Docker 部署则介绍安装 Docker、拉取镜像、容器运行及相关操作命令。三种方案从基础到进阶,满足不同场景需求,提供清晰步骤与脚本代码,助力高效部署 MySQL8.0。

2025-08-05 15:18:50 1073

原创 【Leetcode hot 100】11.盛最多水的容器

摘要: 该问题要求在给定的整数数组中找到两条垂直线,使其与x轴构成的容器能容纳最多的水。采用双指针法,从数组两端开始向中间移动,每次计算当前容器的面积(由较矮的线高度和指针间距决定),并更新最大面积。移动较矮的一侧指针以寻找可能的更大高度。该方法时间复杂度为O(n),空间复杂度为O(1),适用于大规模数据。例如,输入[1,8,6,2,5,4,8,3,7]时,最大面积为49。

2025-08-05 08:32:46 279

原创 【Java源码阅读系列65】深度解读Java ClassLoader 源码

在Java的运行时体系中,ClassLoader(类加载器)是实现“动态类加载”的核心组件。它负责将类的字节码(.class文件)加载到JVM内存中,生成对应的Class对象,并确保类的唯一性与安全性。本文将基于JDK 8的ClassLoader源码,深入解析其设计逻辑与核心机制。

2025-08-04 09:10:54 654

原创 【Leetcode hot 100】283.移动零

题目要求将数组中的零元素移动到末尾,同时保持非零元素的相对顺序。采用双指针法:slow指针记录非零元素应放置的位置,fast指针遍历数组。遍历时,将非零元素依次前移,最后将剩余位置补零。时间复杂度O(n),空间复杂度O(1),满足原地操作要求。 示例: 输入[0,1,0,3,12],处理后为[1,3,12,0,0]。

2025-08-04 09:02:46 419

原创 【Leetcode hot 100】128.最长连续序列

本文介绍了如何高效求解未排序整数数组的最长连续序列问题,要求时间复杂度为O(n)。通过使用哈希集合存储元素,算法首先筛选出可能的序列起点(即前驱不存在的元素),然后向后扩展计算序列长度。每次遍历仅对序列起点处理,确保每个元素最多访问两次,从而满足线性时间复杂度要求。Java实现利用HashSet快速查询,逐步扩展连续序列并更新最大长度,最终返回结果。该方法避免了排序的高复杂度,适用于大规模数据。

2025-08-03 21:18:46 339

原创 【Java源码阅读系列64】深度解读Java PhantomReference 源码

在Java的引用体系中,PhantomReference(虚引用)是最特殊的一种引用类型。其核心特性是:无法通过虚引用获取目标对象,仅在对象被垃圾回收(GC)时触发队列通知。这种特性使其成为实现“对象销毁前最后一次资源清理”的关键工具(如释放本地内存、关闭文件句柄)。本文将基于JDK 8的PhantomReference源码,深入解析其设计逻辑与核心机制。

2025-08-03 14:46:15 1091

原创 【Leetcode hot 100】49.字母异位词分组

题目要求将字母异位词(字符相同但顺序不同的字符串)分组。提供两种解法: 排序法:将每个字符串排序后作为哈希表的键,时间复杂度O(n·k log k),代码简洁,推荐使用。 计数法:统计字符出现次数作为键,时间复杂度O(n·k),效率更高但实现稍复杂。 两种方法均通过哈希表实现分组,排序法更常用,计数法适合优化性能。示例代码展示了两种实现,适用于小写字母组成的字符串数组。

2025-08-02 23:02:10 762

原创 【Java源码阅读系列63】深度解读Java WeakReference 源码

在Java的引用体系中,WeakReference(弱引用)是一种“最弱”的显式引用类型。其核心特性是:当一个对象仅被弱引用指向时,垃圾回收器(GC)会立即回收该对象(无论内存是否充足)。这种特性使其成为避免内存泄漏、实现轻量级缓存的重要工具。本文将基于JDK 8的WeakReference源码,深入解析其设计逻辑与核心机制。

2025-08-02 15:59:54 709

原创 【Leetcode hot 100】1.两数之和

LeetCode两数之和问题要求在数组中找出和为目标的两个数的索引。推荐使用哈希表优化法(时间复杂度O(n)):遍历时计算互补数,利用哈希表快速查找是否存在互补数,避免重复计算。暴力枚举法(时间复杂度O(n²))虽直观但效率低,适合小数据量。哈希表法通过空间换时间,是更优解,尤其适合大数据量场景。两种方法均需注意避免元素重复使用,题目保证解唯一。

2025-08-01 16:02:22 364

原创 【Java源码阅读系列62】深度解读Java SoftReference 源码

在Java的引用体系中,SoftReference(软引用)是一种“内存敏感型”引用,其核心特性是:当内存不足时,垃圾回收器(GC)会主动回收被软引用指向的对象。这种特性使其成为实现缓存系统的重要工具(如图片缓存、临时数据存储)。本文将基于JDK 8的SoftReference源码,深入解析其设计逻辑与核心机制。

2025-08-01 10:49:39 755

原创 【Java源码阅读系列61】深度解读Java Reference 类源码

在Java的内存管理体系中,Reference 类是连接应用程序与垃圾回收器(GC)的关键桥梁。它通过定义引用对象的通用行为,支持了软引用(SoftReference)、弱引用(WeakReference)、虚引用(PhantomReference)等不同类型的引用语义,是实现内存敏感缓存、资源清理等功能的底层基础。本文将基于JDK 8的Reference类源码,深入解析其设计逻辑与核心机制。

2025-07-24 08:52:23 648

原创 【Java源码阅读系列60】深度解析Java内存管理与GC

Java的自动内存管理(尤其是垃圾回收,GC)是其“一次编译,到处运行”的核心优势之一。开发者无需手动释放内存,但理解内存管理的底层机制(如引用类型、GC触发条件)对优化应用性能、避免内存泄漏至关重要。本文将结合JDK 1.8源码,深入解析`java.lang.ref.Reference`体系及`System.gc()`的底层逻辑。

2025-07-23 09:11:26 552

原创 【Java源码阅读系列58】深度解析Java 注解与动态代理

Java 的注解(Annotation)和动态代理(Dynamic Proxy)是其生态中最具灵活性的两大特性。注解通过元数据标记代码逻辑,动态代理则通过运行时生成代理类实现行为增强。本文将结合 java.lang.annotation、javax.annotation.processing 和 java.lang.reflect.Proxy 源码,深入解析两者的底层机制与应用场景。

2025-07-22 15:49:28 927

原创 【Java源码阅读系列57】深度解读Java MethodHandle 类源码

Java 7 引入的 java.lang.invoke 包是 JVM 动态性的重要升级,而 MethodHandle 作为该包的核心类,是连接静态字节码与动态方法调用的桥梁。它通过类型安全的方式提供了更高效、更灵活的方法调用能力,广泛应用于框架(如 Spring、Groovy)、字节码工具(如 ASM)等场景。本文基于 JDK 1.8 源码,从类结构、关键方法、设计模式、典型场景等维度,深入解析 MethodHandle 的实现逻辑与设计思想。

2025-07-20 20:09:43 1127

原创 【Java源码阅读系列56】深度解读Java Constructor 类源码

Java 反射机制中,Constructor 类是操作构造方法的核心入口。它封装了构造方法的元信息(如参数类型、修饰符)和实例化逻辑,是框架(如 Spring、MyBatis)动态创建对象的关键工具。本文基于 JDK 1.8 源码,从类结构、关键方法、设计模式、典型场景等维度,深入解析 Constructor 类的实现逻辑与设计思想。

2025-07-19 22:11:05 1258

原创 【Java源码阅读系列59】深度解析Java类加载机制

本文将结合JDK 1.8的ClassLoader源码,深入解析核心实现逻辑,并延伸至JVM底层的类元数据存储机制。

2025-07-18 14:47:00 1397

原创 【Java源码阅读系列55】深度解读Java Method 类源码

Java 的反射机制是其动态特性的重要支撑,而 java.lang.reflect.Method 类则是反射调用方法的核心入口。本文将基于 JDK 1.8 源码,从类结构、关键方法、设计模式、典型场景等维度,深入解析 Method 类的实现逻辑与设计思想。

2025-07-17 21:20:54 912

原创 【Java源码阅读系列54】深度解读Java Field 类源码

在 Java 反射体系中,Field 类是操作类字段(Field)的核心工具。它封装了类或接口中单个字段的元信息(如字段名、类型、修饰符),并提供了动态获取或设置字段值的能力。本文将基于 JDK 1.8 源码,从类结构、关键方法、设计模式、典型场景等角度,深入解析 Field 类的实现逻辑与应用价值。

2025-07-16 15:22:28 982

原创 【Java源码阅读系列53】深度解读Java Class 类源码

在 Java 中,反射(Reflection) 是动态操作类、对象、方法的核心能力,而 Class 类则是反射机制的“入口”。本文将基于 JDK 1.8 源码,从类结构、关键方法、设计模式、典型场景等角度,深入解析 Class 类的实现逻辑与设计思想。

2025-07-14 16:56:01 1014

原创 【Java源码阅读系列52】深度解读Java AsynchronousSocketChannel 源码

Java NIO 2.0(JDK 7 引入)通过 AsynchronousSocketChannel 提供了异步非阻塞的流式套接字支持,适用于高并发、低延迟的网络场景(如实时通信、微服务网关)。本文将从源码出发,解析其核心机制、关键方法、设计模式及典型使用场景。

2025-07-14 10:53:21 861

原创 【Java源码阅读系列50】深度解读Java Selector 源码

Java NIO(New IO)的核心优势在于通过多路复用(I/O Multiplexing)实现单线程管理多个I/O通道,显著提升高并发场景下的性能。Selector 作为这一机制的核心组件,负责监听多个可选择通道(SelectableChannel)的I/O事件(如读、写、连接),并通知应用程序哪些通道已就绪。本文将结合 JDK 1.8 源码,从类设计、关键方法、设计模式及实战示例四个维度,深入解析 Selector 的实现逻辑与工作原理。

2025-07-13 08:15:00 733

原创 【Java源码阅读系列51】深度解读Java SelectorProvider 源码

SelectorProvider 是 Java NIO(New IO)体系中服务提供者(Service Provider)的核心抽象类,负责为选择器(Selector)和可选择通道(如 SocketChannel、ServerSocketChannel 等)提供创建接口。本文将从类结构、核心方法、设计模式等角度,深入解析其源码逻辑。

2025-07-13 08:15:00 689

原创 【Java源码阅读系列49】深度解读Java FileChannel 源码

Java NIO(New IO)通过 `FileChannel` 提供了更高效、更灵活的文件操作能力,支持内存映射、文件锁、零拷贝传输等高级特性。本文将结合 JDK 1.8 源码,从类设计、关键方法、设计模式及实战示例四个维度,深入解析 `FileChannel` 的实现逻辑与应用场景。

2025-07-12 08:45:00 2093

原创 【Java源码阅读系列48】深度解读Java ServerSocketChannel 源码

Java NIO(New IO)通过非阻塞 IO 模型和多路复用机制,显著提升了网络编程的性能。ServerSocketChannel 作为 NIO 中服务端监听 TCP 连接的核心类,是构建高性能服务端的关键组件。本文将结合 JDK 1.8 源码,从类设计、关键方法、设计模式及实战示例四个维度,深入解析其实现逻辑与应用场景。

2025-07-12 07:45:00 790

原创 【Java源码阅读系列47】深度解读Java SocketChannel 源码

Java NIO(New IO)作为 JDK 1.4 引入的高效 IO 模型,其核心能力之一是通过 SelectableChannel 实现非阻塞 IO 操作。SocketChannel 作为 NIO 中处理 TCP 连接的核心类,承担了面向流的套接字通道功能。本文将结合 SocketChannel 源码(JDK 1.8),从类结构、关键方法、设计模式等角度展开深度解读。

2025-07-11 09:45:00 916

原创 【Java源码阅读系列46】深度解读Java NIO SelectableChannel 源码

Java NIO(New Input/Output)的核心特性之一是多路复用(Multiplexing),通过 Selector 可以同时监控多个通道(Channel)的 I/O 事件,显著提升高并发场景下的性能。而 SelectableChannel 作为所有可被选择通道的抽象基类,是实现这一机制的关键桥梁。本文将结合源码,深入解析 SelectableChannel 的核心设计、关键方法及设计模式的应用。

2025-07-11 08:15:00 1082

原创 【Java源码阅读系列45】深度解读Java DirectByteBuffer 与 HeapByteBuffer 源码

Java NIO 中的 `ByteBuffer` 是处理字节数据的核心类,其两个重要子类 `HeapByteBuffer`(堆内存缓冲区)和 `DirectByteBuffer`(直接内存缓冲区)分别对应 JVM 堆内存和操作系统堆外内存的存储方式。本文将结合源码,深入解析两者的核心实现、关键方法及设计模式的应用,帮助开发者理解其差异与适用场景。

2025-07-10 09:15:00 940

原创 【Java源码阅读系列44】深度解读Java NIO ByteBuffer 源码

Java NIO(New Input/Output)中的 ByteBuffer 是 Buffer 抽象类的具体子类,专门用于处理字节数据的高效读写。作为 NIO 的核心组件,ByteBuffer 支持堆内存(Heap)和直接内存(Direct)两种存储方式,广泛应用于网络通信、文件 IO 等场景。本文将结合源码,深入解析 ByteBuffer 的核心机制、关键方法及设计模式的应用。

2025-07-10 08:15:00 781

原创 【Java源码阅读系列43】Java NIO Buffer 源码深度解读

Java NIO(New Input/Output)中的 Buffer 类是所有缓冲区(如 ByteBuffer、IntBuffer 等)的抽象基类,是实现高效 IO 操作的核心组件。其源码通过状态变量管理和设计模式的巧妙结合,实现了对数据读写的灵活控制。本文将结合 Buffer 类的源码,深入解析其核心机制、关键方法及设计模式的应用。

2025-07-09 09:45:00 618

原创 【Java源码阅读系列42】深度解读Java ObjectOutputStream 源码

Java 的 ObjectOutputStream 是对象序列化的核心类,负责将内存中的 Java 对象转换为字节流,以便持久化存储或网络传输。其源码中不仅包含复杂的对象图遍历逻辑,还巧妙运用了多种设计模式,本文将结合源码深入解析其核心机制与设计思想。

2025-07-09 08:15:00 917

原创 【Java源码阅读系列41】深度解读Java ObjectInputStream 源码

Java 的 ObjectInputStream 是实现对象反序列化的核心类,负责将字节流转换为内存中的 Java 对象。其源码中不仅包含复杂的对象图解析逻辑,还巧妙运用了多种设计模式,本文将结合源码深入解析其核心机制与设计思想。

2025-07-08 09:15:00 859

原创 【Java源码阅读系列40】深度解读Java BufferedOutputStream 源码

Java 的 BufferedOutputStream 是字节输出流的缓冲装饰类,通过内存缓冲区暂存待写入的字节数据,减少底层 IO 操作次数,显著提升字节数据写入效率。本文基于 JDK 1.8 源码,从类结构、核心机制、关键方法到设计模式,全面解析其实现逻辑。

2025-07-08 08:15:00 1094

原创 【Java源码阅读系列39】深度解读Java BufferedInputStream 源码

Java 的 BufferedInputStream 是字节输入流的缓冲装饰类,通过内存缓冲区减少底层 IO 操作次数,显著提升字节数据读取效率。本文基于 JDK 1.8 源码,从类结构、核心机制、关键方法到设计模式,全面解析其实现逻辑。

2025-07-07 13:15:00 1034

原创 【Java源码阅读系列38】深度解读Java BufferedWriter 源码

Java 的 BufferedWriter 是字符输出流的缓冲装饰类,通过内存缓冲区暂存待写入的字符数据,减少底层 IO 操作次数,显著提升文本写入效率。本文基于 JDK 1.8 源码,从类结构、核心机制、关键方法到设计模式,全面解析其实现逻辑。

2025-07-07 09:15:00 936

原创 【Java源码阅读系列37】深度解读Java BufferedReader 源码

Java 的 BufferedReader 是字符输入流的缓冲装饰类,通过内置缓冲区减少底层 IO 操作次数,显著提升文本读取效率。本文基于 JDK 1.8 源码,从类结构、核心机制、关键方法到设计模式,全面解析其实现逻辑。

2025-07-06 09:45:00 1055

原创 【Java源码阅读系列36】深度解读Java FileOutputStream 源码

Java 的 FileOutputStream 是文件字节输出流的核心类,用于将原始字节数据写入文件。本文将结合 JDK 1.8 源码,从类结构、核心方法、资源管理和设计模式等维度,深入解析其实现逻辑。

2025-07-06 08:45:00 947

空空如也

空空如也

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

TA关注的人

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