自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

夏日清风

个人见解与经验之谈,欢迎指正讨论

  • 博客(65)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 Java Stream API: 如何优雅地操作集合类

本文介绍了Java Stream API的概念及其常见的操作。Stream API为集合操作提供了一种优雅、高效的编程方式,可以大大简化代码的编写和维护,并且支持并行化处理,提升数据处理的效率。

2023-06-12 21:58:54 1533

原创 JAVA遍历Map的几种方法

介绍JAVA遍历Map的几种方式,分析几种方式的性能优劣,给出使用建议

2022-10-21 19:37:21 24513 1

原创 Java中transient关键字的详细总结

一、概要介绍Java中的transient关键字,transient是短暂的意思。对于transient 修饰的成员变量,在类实例的序列化处理过程中会被忽略。 因此,transient变量不会贯穿对象的序列化和反序列化,生命周期仅存于调用者的内存中而不会写到磁盘里持久化。(1)序列化Java中对象的序列化指的是将对象转换成以字节序列的形式来表示,这些字节序列包含了对象的数据和信息,一个序列化后的对...

2018-06-14 22:15:12 144269 13

原创 Java volatile关键字最全总结:原理剖析与实例讲解(简单易懂)

本文从Java的内存模型和线程的工作原理出发,对volatile关键字进行介绍。帮助读者深入理解volatile的工作机制。同时,还通过简单易懂的示例讲解了如何正确地使用volatile关键字实现线程安全,避免常见的多线程安全问题。

2018-06-13 17:28:14 249575 146

原创 Java中各类修饰符的使用总结(看完这篇就够了)

引言:Java的修饰符根据修饰的对象不同,分为类修饰符、方法修饰符、变量修饰符,其中每种修饰符又分为访问控制修饰符和非访问控制修饰符。访问控制存在的原因:a、让客户端程序员无法触及他们不应该触及的部分 b、允许库设计者可以改变类内部的工作方式而不用担心影响到客户端程序员。

2018-06-07 18:45:24 60184 22

原创 深入理解Java的final关键字

1.final关键字有几种用法(1)修饰变量 # 用final关键字修饰的变量,只能进行一次赋值操作,并且在生存期内不可以改变它的值。final修饰的变量可以先声明,后赋值。 # final修饰基本类型时,起到常量的作用,基本类型的值不可变。 final修饰引用类型时,不能再指向其他的对象,但被引用的对象 的值是可以改变的(引用变量的值 实际上是它所引用的对象的地址)。 ...

2018-06-05 13:36:30 18638 1

原创 Java如何从字符串中提取数字

java提取字符串中的数字

2017-12-19 13:56:14 117631 10

原创 LeetCode算法题详解 42:接雨水

本文分析了柱状图接雨水问题,提出三种解法:1)动态规划法通过预处理左右最大值数组计算水量,时间复杂度O(n),空间复杂度O(n);2)双指针法优化空间至O(1),通过左右指针动态维护最大值;3)单调栈法处理复杂凹陷。关键思路是利用木桶原理,每个位置水量由左右最高柱子的较小值决定。动态规划法适合理解基础原理,双指针法最优,单调栈法适用于特定场景。

2026-01-09 17:23:52 435

原创 LeetCode算法题详解 11:盛最多水的容器

文章摘要: 本文探讨了求解容器盛水最大面积的问题。给定表示垂线高度的数组,目标是通过双指针法高效找到两条垂线,使其与x轴构成的容器面积最大。关键点在于:初始从最宽容器开始,每次移动较短边的指针以寻求更高边,从而可能增大面积。算法时间复杂度为O(n),空间复杂度O(1),相比暴力枚举法(O(n²))显著优化。文章详细分析了问题特性、双指针正确性证明,并提供了Java实现代码,适用于大规模数据场景。

2026-01-09 14:55:05 591

原创 LeetCode算法题详解 15:三数之和

本文探讨了在整数数组中寻找所有不重复三元组使其和为0的问题。通过分析问题特性,提出两种高效解法:排序+双指针法(最优解)和哈希表法。双指针法在排序后固定一个元素,使用双指针在剩余数组中寻找两数之和,时间复杂度O(n²),空间复杂度O(1)。哈希表法利用哈希存储遍历元素,同样达到O(n²)时间复杂度,但空间复杂度为O(n)。两种方法都通过排序预处理和跳过重复元素实现高效去重,适用于大规模数据场景。

2026-01-08 19:12:42 780

原创 LeetCode算法题详解 283:移动零

本文探讨了将数组中的零元素移动到末尾的算法。通过分析问题要求,提出了四种解决方案:双指针填充法(先移动非零元素再补零)、双指针交换法(遍历时交换非零元素)、计数移位法(统计零个数后前移元素)和双指针优化法(减少不必要赋值)。这些方法均满足原地操作和保持顺序的要求,时间复杂度为O(n),空间复杂度为O(1)。核心思想是利用双指针策略,在遍历过程中区分非零元素位置,最终通过填充或交换完成零元素后移。

2026-01-08 18:52:29 835

原创 LeetCode算法题详解 128:最长连续序列

本文探讨了在未排序整数数组中寻找最长连续数字序列的问题。通过分析问题特征,提出两种主要解法:哈希集合法(最优O(n)时间)和哈希映射法,同时对比了排序法(O(n log n))。哈希集合法通过识别序列起点并向后扩展统计长度,哈希映射法则动态维护序列边界信息。两种方法均利用哈希结构实现高效查找,满足时间复杂度要求。文章还提供了Java代码实现和复杂度分析,为处理大规模数据提供了有效解决方案。

2026-01-07 19:10:12 820

原创 LeetCode算法题详解 49:字母异位词分组

本文探讨了字母异位词分组问题的三种解决方案。字母异位词指字符组成相同但顺序不同的单词。第一种方法通过字符串排序后作为哈希表键;第二种使用字符计数数组转换为字符串作为键;第三种采用质数乘积法为每个字符串生成唯一标识。三种方法的时间复杂度分别为O(n×klogk)、O(n×k)和O(n×k),其中排序法实现简单,计数法效率更高,质数法数学特性独特但需注意溢出问题。文章提供了Java代码实现,展示了不同方法的优缺点和适用场景。

2026-01-07 10:57:49 832

原创 LeetCode算法题详解 1:两数之和

本文介绍了在整数数组中寻找两数之和等于目标值的三种解法。暴力枚举法(O(n²))通过两层循环检查所有组合,适合小规模数据;哈希表法(O(n))利用哈希表存储元素实现快速查找,是最优解;排序+双指针法(O(nlogn))通过排序和双指针遍历,适合只需返回数值的情况。哈希表法通过存储元素值和索引,边遍历边查找补数,既保证了效率又避免了重复使用同一元素,是解决该问题的推荐方法。

2026-01-06 16:56:02 1008

原创 Maven项目依赖冲突终极解决方案(实测有效)

摘要:本文详细介绍了解决Maven依赖冲突的方法,特别是针对低版本commons-collections库的排除与替换。通过mvn dependency:tree命令分析依赖树,使用<exclusions>标签精准排除问题依赖,再显式引入高版本。文章还介绍了使用<dependencyManagement>统一管理依赖版本、IDE可视化工具辅助解决冲突等进阶技巧,并提供了验证方案和最佳实践总结。这套方法不仅适用于commons-collections冲突,也可推广到其他Java依赖管理

2025-12-25 17:12:53 779

原创 Java设计模式之代理模式(Proxy)深度解析

代理模式是一种结构型设计模式,通过代理对象控制对真实对象的访问,在客户端和真实对象之间引入间接层。核心价值包括访问控制、功能增强、延迟加载和简化接口。代理模式分为静态代理和动态代理两种实现方式:静态代理在编译期确定代理关系,需要为每个目标类编写代理类,适合简单场景;动态代理(如JDK动态代理)在运行时生成代理类,基于接口和反射机制实现,更加灵活但有一定性能开销。该模式广泛应用于企业级开发,符合开放封闭原则和单一职责原则,提高了系统的灵活性和可维护性。

2025-12-19 19:01:37 717

原创 Java设计模式之享元模式(Flyweight)详解

享元模式是一种结构型设计模式,通过分离对象的内外部状态实现对象复用,从而减少内存占用。其核心是将对象状态分为共享的内部状态(如纹理、动画)和变化的外部状态(如位置、大小)。该模式适用于需要创建大量相似对象的场景,如游戏粒子系统、GUI组件等。实现时通过享元工厂管理对象池,客户端仅维护外部状态。Java标准库中的字符串常量池、Integer缓存池等均采用此模式,可显著提升系统性能,降低内存消耗达40%-70%。

2025-11-28 19:13:18 202

原创 Java设计模式之外观模式(Facade)详解

外观模式是一种结构型设计模式,通过提供统一接口简化复杂子系统的使用。该模式包含Facade(高层接口)、Subsystem(底层功能模块)和Client(使用者)三个角色,遵循单一职责和迪米特法则等设计原则。典型应用场景包括电商订单处理、Java标准库API封装(如Files类)、Spring业务层服务等。其优势在于降低系统复杂度、提高可维护性,但也可能带来性能瓶颈和调试困难等问题。通过异步处理、依赖注入等策略可优化实现,还衍生出可观测外观等高级变体模式。

2025-11-28 18:01:48 673

原创 Java设计模式之装饰器模式详解

装饰器模式(Decorator Pattern)是一种结构型设计模式,允许向一个现有的对象添加新的功能,同时又不改变其结构。它是通过创建一个包装对象(装饰器)来包裹真实对象的方式实现的。// 数据处理器接口// 基础处理器// 原始数据处理动态扩展:运行时添加功能的能力正交设计:功能独立且可组合开闭典范:扩展不修改已有代码组合力量:对象组合替代继承。

2025-11-27 19:03:31 623

原创 Java设计模式之组合模式深度剖析

组合模式是一种结构型设计模式,通过树形结构表示部分-整体层次关系,使客户端能统一处理单个对象和对象组合。其核心价值在于简化复杂结构的创建与操作,提供统一的处理接口,支持递归组合和灵活扩展。模式包含Component抽象接口、Leaf叶子节点和Composite复合节点三个主要角色,通过透明模式(统一接口)或安全模式(分离接口)实现。典型应用场景包括文件系统、组织架构等层次结构,通过递归操作实现对整个结构的统一管理。代码实现展示了文件系统的透明模式实现,包含基础组件、文件和目录类,以及递归显示和计算大小的功能

2025-11-20 19:21:57 998

原创 初识JVM:揭开 Java 虚拟机的神秘面纱

**JVM(Java虚拟机)是Java生态的核心执行引擎,具备平台无关性、自动内存管理、安全沙箱和性能优化等核心能力。其架构主要包括类加载子系统、运行时数据区和执行引擎三大模块,通过双亲委派模型实现类加载,采用堆内存分区管理和垃圾回收机制。JVM支持解释执行与即时编译(JIT)协同工作,利用分层编译策略和代码缓存优化性能。主流实现包括HotSpot、OpenJ9等,其中HotSpot占据90%以上市场份额。随着Java版本演进,JVM不断引入G1、ZGC等创新垃圾收集器,持续提升运行效率和稳定性。

2025-11-18 17:06:48 106

原创 Java设计模式之桥接模式:解耦抽象与实现的艺术

桥接模式是一种解耦抽象与实现的结构型设计模式,通过组合替代继承,使二者能独立变化。其核心思想是正交分解系统维度,通过抽象层(Abstraction)和实现层(Implementor)分离,避免类爆炸问题。典型应用场景包括跨平台UI开发(如不同渲染引擎)和数据库驱动设计(多数据库支持)。该模式符合开闭原则,运行时动态绑定实现,仅需n+m个类即可支持n*m种组合情况,显著提升系统扩展性。

2025-11-17 14:53:36 908

原创 Java 设计模式之适配器模式:系统集成的万能接口

适配器模式是一种结构型设计模式,用于解决接口不兼容问题,使不同接口的类能够协同工作。主要包含目标接口(Target)、被适配者(Adaptee)和适配器(Adapter)三个角色。适配器模式有两种实现方式:对象适配器(通过组合实现)和类适配器(通过继承实现),前者更灵活且推荐使用。该模式适用于遗留系统集成、跨平台开发等场景,能实现接口转换、代码复用和解耦隔离。典型应用包括统一不同日志系统、适配不同UI组件等,是处理接口兼容问题的优雅解决方案。

2025-11-14 18:57:04 1039

原创 Java设计模式之原型模式深度解析

摘要: 原型模式是一种创建型设计模式,通过复制现有对象创建新对象,避免重复初始化。核心特点包括对象自复制、绕过构造函数和动态对象创建。模式结构包含原型接口、具体原型类、客户端和注册管理器。实现时需区分浅克隆(共享引用)和深克隆(完全独立副本),可通过序列化实现通用深克隆。典型应用场景包括游戏角色复制、配置管理和事务快照。优化技巧如原型池可提升性能,适用于创建成本高的对象。该模式是工厂方法替代方案,遵循开闭原则和依赖倒置原则。

2025-11-14 17:13:16 1110

原创 Java设计模式之建造者模式(Builder)详解

建造者模式是一种创建型设计模式,用于分步骤构建复杂对象,特别适合多参数配置或复杂初始化场景。其核心价值在于分离构造与表示,通过链式调用提供流畅API,支持参数灵活组合和构造过程可控。典型应用包括复杂对象创建、多参数配置和不可变对象构建等。模式结构包含指挥者、抽象建造者、具体建造者和产品四个角色,体现了单一职责、开闭等设计原则。代码实现中,产品类封装复杂对象属性,建造者接口定义构建步骤,具体建造者实现细节,指挥者控制流程。该模式优化了对象创建过程,提高了代码可读性和可维护性。

2025-11-13 16:22:08 1481

原创 Java设计模式之抽象工厂模式详解

摘要: 抽象工厂模式是一种创建型设计模式,用于生成相关对象的家族(产品族)而无需指定具体类。它通过抽象接口隔离实现,支持跨平台UI、数据库访问等场景,确保产品一致性。模式结构包含抽象工厂、具体工厂和产品层次,扩展时符合开闭原则(新增产品族不修改代码)。优点是解耦客户端与产品、便于切换产品族;缺点是增加新产品种类需修改接口,可能过度设计。实际应用如Spring的多数据库访问层,可通过配置切换具体工厂。

2025-11-11 09:28:52 738

原创 Java设计模式之单例模式(实现、应用的详细总结)

单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例的访问方法。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求调用。总之,选择单例模式就是为了避免不一致状态。

2025-05-07 18:29:22 177

原创 微信小程序开发之系统学习指南

Promise。

2025-05-06 11:13:46 1612

原创 Java设计模式之工厂方法模式:Java对象创建利器

工厂方法模式(Factory Method Pattern)属于创建型模式家族,其核心思想是定义一个创建对象的接口,但让子类决定实例化哪一个类。这种模式将类的实例化延迟到子类,完美解决简单工厂模式违反开闭原则的问题。工厂方法模式是经典的创建型模式,通过子类延迟绑定对象创建,为构建灵活可扩展的系统提供了优雅的解决方案。将对象创建与使用分离,使代码更加模块化、易于维护和扩展。当你看到代码中遍布new关键字时,不妨想想是否可以用工厂方法模式来重构,让代码变得更加优雅和健壮。学习建议。

2025-04-14 18:40:12 947

原创 初识23种设计模式:分类、原理与实际应用

本文深入剖析了软件开发中至关重要的23种设计模式,涵盖了创建型、结构型和行为型三大类别。通过简明扼要的原理介绍、作用阐述及具体使用场景分析,帮助读者全面理解并掌握这些设计模式的精髓。无论你是初涉软件开发的新手,还是经验丰富的工程师,本文都将为你提供宝贵的参考与启示,助力你打造出更加健壮、灵活且易于维护的软件系统。

2024-04-08 19:32:19 1404

原创 IntelliJ IDEA快捷键大全(中英文对照):提升编程效率的必学秘籍!

本博客介绍了IDEA的各类快捷键,从基础的文件操作、代码编辑到高级的调试和版本控制功能。通过本文,你将学会如何更快速地完成代码编写、代码格式化、代码导航、代码调试等任务。这些快捷键将帮助你在IDEA中更加游刃有余,提升编程效率。

2024-03-04 16:12:58 1265

原创 Java设置session过期时间的几种方法(亲测有效)

本文介绍了Java中如何设置Session会话对象的过期时间。首先介绍了Session的基本概念和过期时间的意义,然后给出了配置Session的过期时间的四种方法

2024-01-08 19:36:32 6947

原创 Java集合类详解:概述、优点、实现与应用

Java集合类提供了动态存储、高效的数据访问和操作等特性,大大简化了开发过程并提高了代码效率。本文将从多个方面详细介绍Java集合类的概念、基本结构、常见实现、操作方法以及性能优化和扩展,帮助读者全面掌握和应用这一关键工具。

2023-06-13 22:14:00 1292

原创 深入理解Java抽象类:定义、特点与实现

本文将深入介绍Java抽象类的定义、特点以及与普通类的区别,探讨抽象类的实现原理、与接口的区别,讨论抽象类的应用场景和优缺点。

2023-06-02 22:42:55 719

原创 一文读懂JAVA的hashCode方法:原理、实现与应用

本文详细介绍了hashCode的作用和定义、实现原理和重写规则、常见的hashCode实现方法以及hashCode和equals的联系,可以帮助开发者们深入理解和使用hashCode方法。

2023-04-22 21:57:15 1233

原创 深入解析Java中的==和equals方法:如何正确比较对象

本篇博客深入探讨了Java中的"=="和"equals"方法,介绍了它们的概念、原理、代码示例和区别,并给出了适用场景和如何覆盖equals方法的建议。可以帮助读者更好地应用Java中的==和equals方法。

2023-04-15 16:42:18 869

原创 走进Java:JDK和JRE分别是什么?它们有什么区别?

一文带你了解JDK 和 JRE 分别是什么?有什么作用?它们之间有什么区别

2023-04-10 22:55:21 1446

原创 如何正确实现JAVA对象拷贝:深入剖析拷贝机制,避免“拷”入歧途

本篇博客将讲解深拷贝和浅拷贝的区别,介绍JAVA对象拷贝的实现方式,以及详细阐述对象拷贝的激活机制,并提供代码示例。希望你能从本文中获得有价值的知识和经验。

2023-04-06 21:58:17 749

原创 Java如何使用Spring JdbcTemplate向in语句中传递参数

Java如何使用Spring JdbcTemplate和NamedParameterJdbcTemplate向in语句中传递参数

2023-02-02 16:23:05 5620

原创 Linux系统中如何修改时间和时区

修改linux系统时区和时间

2021-01-06 17:08:41 9818

Introduction to SysML.pdf

用于帮助初学者系统地学习SysML语言,同时也可以作为一本工具书查看并解决系统建模过程中遇到的问题

2019-10-30

JAVA面试通关:100道经典JAVA面试题及答案解析

该文档是针对Java程序员的面试指南,旨在帮助求职者在面试过程中更好地应对各种问题。本书精选了互联网大厂100道经典的Java面试题目,并为每道题目提供了详细的答案解析,涵盖了Java基础知识、面向对象编程、集合框架、多线程、JVM等方面的知识点。无论您是初学者还是有经验的开发者,都可以从中受益匪浅。通过阅读本文档,您将能够更好地应对Java面试挑战,提高自己的竞争力。

2023-08-25

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

TA关注的人

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