自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

QiuMing

仰望星空,脚踏实地

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

原创 排序算法(二):希尔、归并和快速(含Java代码+记忆技巧)

希尔排序改进插入,通过递减步长实现“粗调+微调”;归并排序采用“分而治之(先拆后合)”,稳定且时间复杂度恒为O(n log n);快速排序则以“先定位置再拆”为核心,利用分区使基准就位,效率高且常用于工程实践。三者分别代表插入优化、稳定分治与高效分治的典型思路,理解思想远胜于死记代码。

2026-10-21 12:05:57 99

原创 Java 中调用系统命令 & 外部可执行程序(含真实案例)

和。是早期API,写法简单但坑较多;是JDK1.5引入,生产环境推荐优先使用,支持自定义工作目录、环境变量,参数传递更安全。绝大多数线上出现的服务假死、线程阻塞、定时任务堆积问题,根源都是对子进程输出缓冲区机制不了解。

2026-10-07 18:43:53 190

原创 排序算法(一):冒泡、选择、插入(含Java代码+记忆技巧)

冒泡、选择、插入排序均为原地稳定排序,时间复杂度均在O(n²),空间复杂度为O(1)。冒泡排序通过相邻交换使大数上浮,支持提前终止,适合基本有序数组;选择排序每轮选最小值交换,交换次数少但不稳定,无法提前终止;插入排序模拟打牌过程,逐个插入有序区,对有序数组效率高,稳定性好。三者适用于小规模或部分有序数据。

2026-10-07 16:56:28 305

原创 Java 性能排查利器大比拼:基础 JDK 工具、JFR+JMC、还是 Arthas or MAT?

代表工具jpsjstatjstackjmapjinfojcmd等。核心特点系统自带、纯命令行、极其轻量。无需额外安装,有 JDK 就能用。能力边界:属于“点射”型工具。jps找人(进程 pid)。jstat看 GC 和内存趋势。jstack抓线程栈,排查死锁、线程阻塞。jmap导出堆快照。缺点:输出全是文本,信息零散,缺乏全局视角。JDK 版本关键差异:JDK 8:工具最齐全,jvisualvm和jhat都还在。JDK 11+:移除了jvisualvm和jhat。jcmd。

2026-10-05 21:33:15 292

原创 时间复杂度、空间复杂度与算法稳定性详解

时间复杂度不是程序运行了多少秒,而是衡量:当输入规模nnn增大时,算法需要执行的基本操作次数如何增长。这里的“基本操作”可以是赋值、比较、加法、交换、数组访问等。我们通常假设每种基本操作耗时固定,记为O1O(1)O1。访问数组元素arr[0]:一次操作,O1O(1)O1遍历长度为nnn的数组:执行nnn次操作,OnO(n)On两层嵌套循环,每层执行nnn次:执行n2n^2n2次操作,On2O(n^2)On2时间复杂度关注的是增长趋势,不是具体次数。

2026-10-05 20:50:09 317

原创 Java历代LTS版本新特性详解(代码增强版)

本文系统讲解Java LTS版本核心特性,聚焦Java8、11、17、21、25,涵盖Lambda表达式、Stream流、java.time日期时间API、Optional空值处理及CompletableFuture异步编程。每项均提供完整可运行代码、详细解读与执行结果,助力开发者快速掌握现代Java核心能力,适用于学习、面试与生产实践。

2026-10-01 21:59:49 249

原创 一文吃透高并发编程,包含JDK 21 虚拟线程避坑指南

特别地,我们会重点剖析虚拟线程在实际使用中容易踩的 5 个坑虚拟线程(Virtual Threads)是 JDK 21 正式引入的轻量级线程实现(JEP 444)。它们由 JVM 管理,而非操作系统线程,创建成本极低(一个虚拟线程约几 KB 内存),可以轻松创建数十万甚至上百万个虚拟线程。虚拟线程非常适合 I/O 密集型、高并发的场景,大幅简化了传统的"每个任务一个线程"模型。特性平台线程虚拟线程实现操作系统线程的包装JVM 内部调度创建成本高(约 1MB 栈)极低(可动态调整栈)

2026-09-06 20:36:36 81

原创 Java 异常处理全攻略:从入门到实战(JDK 21 版)

异常(Exception)是指程序在执行过程中发生的非正常事件,它会中断正常的指令流。用户输入错误文件不存在或无法读取网络连接失败数组越界访问空指针引用数据库连接失败Java 通过异常处理机制将错误处理代码与正常业务逻辑分离,使代码更加清晰和可维护。当内置异常不足以描述特定业务错误时,可以创建自定义异常类。异常消息应清晰描述问题,并包含必要的上下文信息(如订单 ID、文件名等)。// 账户余额不足异常(受检异常)// 账户不存在异常(非受检异常)

2026-09-06 20:34:02 122

原创 JDK 21 注解完全指南:从入门到实战,一文吃透 Java 元编程

注解是一种特殊的接口,用于为程序元素(类、方法、字段、参数等)添加元数据。它以符号开头,可以带有元素(类似方法)来存储值。@Override编译检查:让编译器执行额外的检查,如@Override检查方法是否真正重写。编译时处理:通过注解处理器在编译期生成代码或配置文件。运行时处理:通过反射获取注解信息,实现依赖注入、测试框架等。自定义注解使用@interface关键字,元素声明类似方法,可以指定默认值。// ...

2026-09-06 20:32:53 261

原创 Java 泛型深度解析:从类型安全到现代实践(JDK 21 视角)

泛型是 Java 类型系统的核心扩展,它让代码在保持类型安全的同时具备高度的复用性。虽然类型擦除带来了一些限制,但理解其原理能够帮助我们避开陷阱。通过合理使用泛型类、泛型方法、通配符以及与现代特性(record、Stream)的结合,我们可以编写出健壮、优雅且易于维护的代码。在 JDK 21 中,泛型依然是 Java 语言不可或缺的基石,掌握它是每一位 Java 开发者的必修课。

2026-09-06 20:31:44 277

原创 Java 集合框架完全指南:从核心接口到 JDK 21 有序集合新特性

答题要点fail-fast(快速失败)ArrayListHashMap等普通集合在遍历时若结构被修改,立即抛出。原理是迭代器维护modCount计数器,遍历时校验是否被修改。fail-safe(安全失败)等并发集合在遍历时基于快照,不会抛出异常,但遍历结果可能不是最新的。Java 集合框架提供了丰富的数据结构和算法支持,掌握核心接口与实现类的特性,能够帮助我们在不同场景下做出合适的选择。JDK 21 引入的有序集合接口进一步提升了 API 的一致性,让代码更加简洁。

2026-09-06 20:30:31 315

原创 JDK 21 日期时间 API 完全指南:告别 java.util.Date 的坑

java.time是现代 Java 日期时间处理的标准,其不可变性和清晰的设计彻底解决了旧 API 的痛点。掌握核心类的用法、时区处理、格式化解析以及时间差计算,能够让你在处理日期时间时游刃有余。基于 JDK 21,开发者可以放心使用这套 API 构建健壮、可维护的应用。

2026-09-06 20:26:38 293

原创 Java IO 体系深度剖析:从流式编程到 JDK 21 高并发陷阱

环境要求适用读者:有一定 Java 基础、希望系统掌握 IO 体系及了解最新并发陷阱的开发者IO 是 Java 开发者绕不开的核心主题。从 JDK 1.0 的java.io到 JDK 1.4 引入的java.nio,再到 JDK 21 正式转正的虚拟线程,Java 的 IO 生态经历了多次演进。本文将从流的基本概念出发,系统梳理 IO 分类体系,并深入剖析 JDK 21 时代高并发 IO 的真实陷阱与稳妥选型。是程序与外部世界(文件、网络、内存、控制台等)进行数据交换的核心机制。流(Stream)

2026-09-06 20:21:00 356

原创 Java 反射深度剖析:从底层原理到 JDK 21 模块化时代的实战指南

本文系统解析Java反射机制:介绍其动态获取类信息、调用方法的核心价值,强调性能与安全代价;阐述四种获取Class对象方式(Class.forName触发静态初始化是关键区别);演示构造器、私有字段、方法、注解的实操;重点说明JDK 21模块化强封装限制(InaccessibleObjectException)及解决方案,并推荐使用Record官方API

2026-09-06 20:19:19 377

原创 JDK 21 字符串处理全解析:从不可变性到字符串模板

除了STR和FMT// 这里可以对表达式值进行转义处理 } return sb . toString();// 这里可以对表达式值进行转义处理 } return sb . toString();// 这里可以对表达式值进行转义处理String作为 Java 的核心类,其不可变性和常量池设计深刻影响着程序的性能和内存占用。掌握常用 API、理解底层优化(紧凑字符串)以及跟进新特性(字符串模板),能够帮助开发者写出更高效、更安全的代码。

2026-09-04 17:38:21 17

原创 Java 枚举(Enum)完全指南:从基础语法到 JDK 21 新特性

Java枚举是类型安全、单例的类,可替代魔法值。支持字段、构造器与方法,甚至抽象方法实现策略逻辑。JDK 21结

2026-09-04 17:36:28 126

原创 Java 面向对象(极速版)

面向对象编程(Object-Oriented Programming,简称 OOP)是一种编程思想,它把现实世界中的事物看作一个个“对象”,通过对象之间的协作来解决问题。对比一下两种编程思想:面向过程:把问题拆成一步步步骤,按顺序执行。就像做菜,先洗菜、再切菜、最后炒菜。面向对象:先找出有哪些“对象”,再让它们互相配合。就像餐厅里,你只需要告诉“厨师”做菜,告诉“服务员”上菜。表达“is-a”关系,可以包含普通方法和抽象方法,子类必须实现抽象方法。// 抽象方法:子类必须实现。

2026-09-04 17:33:02 65

原创 Java 基础语法

本文概述Java基础语法:类与main入口、强类型变量、流程控制、面向对象核心(封装继承多态接口)、异常处理及集合框架。重点介绍JDK 21新特性:Record、增强Switch、文本块、虚拟线程、Sealed类及var类型推断,提升代码简洁性与性能,是高效开发的关键。

2026-09-04 17:30:24 69

原创 Java 数组详解:从基础语法到实战应用

本文系统介绍Java数组,涵盖其长度固定、类型统一、内存连续及索引从零开始等核心特点,详细讲解静态与动态初始化、默认值规则、访问遍历方式、二维数组使用,以及Arrays工具类的常用操作(如排序),帮助读者全面掌握数组这一基础数据结构。

2026-09-04 17:28:12 273

原创 Java 开发环境搭建(Windows 版本)超详细指南

环境搭建只是万里长征的第一步。接下来,你可以尝试在 IDE 中创建一个 Maven 项目,写下你的第一个HelloWorld。祝你在 Java 的世界里探索愉快!愉快!

2026-09-04 17:24:33 157

原创 Java 核心特性一览

Java 之所以能成为企业级开发的主流语言,得益于其一系列独特的设计特性。下面从多个维度进行梳理。

2026-09-04 17:05:32 240

原创 Java 工程师学习路线

本文推荐一份Java自学路线,从零基础到精通,内容全面,已被万人收藏。该路线要求一定的自学能力,作者将按顺序分享学习笔记于专栏,供参考学习。

2026-09-04 16:59:33 21

原创 2026/6/15 系统故障复盘与整改方案

一次定时任务的“大事务+无索引批量更新”触发数据库死锁,锁竞争拖垮DB,引发应用线程阻塞、Full GC,叠加日志噪音,最终导致下游全量同步任务OOM崩溃。复盘故障四层放大链路,并给出代码层(分批处理、拆事务、脏数据拦截)、SQL层(补索引、改写慢查询、分区)、配置层(超时熔断、清理废弃代码)整改方案。

2026-09-04 16:41:05 293

原创 2026/5/27 生产事故复盘与整改方案

<think>我们根据用户要求,生成一篇不超过150字的文章摘要。内容需涵盖事故复盘要点和优化方案核心。注意字数限制,精炼概括。</think>本次事故因新字段替换旧字段、存量数据缺失及无限重试引发系统雪崩。根因涉及兼容性缺失、测试遗漏、无灰度发布及监控盲区。优化方案引入终止状态机、限制重试次数、统一同步入口、加强监控告警,防止重试风暴,保障核心服务高可用。

2026-09-04 16:32:57 231

原创 MySQL 8.0+ 内核剖析:架构、事务与数据管理

MySQL 8.0是重大升级版本,采用分层插件式架构,包含连接层、服务层和存储引擎层。核心改进包括:默认使用更安全的caching_sha2_password认证;移除查询缓存;优化器增强CTE和窗口函数支持;InnoDB作为唯一可靠引擎。SQL执行流程经过连接认证、解析优化和执行返回结果三个阶段。并发控制通过MVCC和Next-Key Lock机制实现,支持事务ACID特性。安全方面引入数据字典实现原子性DDL、角色管理和增强密码策略。存储引擎层重点优化InnoDB的Buffer Pool、双写缓冲区和自

2025-09-07 16:47:35 1003

原创 SQL 指南:以MySQL为例,从基础到高级查询技巧

查询数据(SELECT)插入数据(INSERT)更新数据(UPDATE)删除数据(DELETE)定义数据库结构(CREATE/ALTER/DROP)SQL 是数据处理的基础工具,本文涵盖了从基础查询到高级特性的核心知识点。灵活查询和筛选数据进行数据聚合与分析处理多表关联查询使用高级函数进行复杂计算实践是掌握 SQL 的关键,建议结合实际业务场景多写多练,逐步提升查询效率和复杂度。对于更复杂的场景,还可以学习存储过程、触发器等数据库编程技术。

2025-08-11 20:44:26 1046

原创 MySQL 从入门到实战:全方位指南(附 Java 操作示例)

本文涵盖了 MySQL 从安装到高级特性的核心知识点,从基础的增删改查,到复杂的查询优化、事务管理,再到 Java 客户端操作,形成了完整的知识体系。实践中需注意数据一致性(通过约束和事务)、查询性能(通过索引和合理设计),并结合框架提高开发效率。掌握这些内容,你将能应对大部分 MySQL 开发场景,后续可深入学习分库分表、性能调优等高级主题。

2025-08-06 09:52:26 1159

原创 数据库理论

本文系统介绍了数据库的基本概念、类型及设计原则。数据库作为数据存储管理工具,分为关系型(如MySQL)和非关系型(如MongoDB)两种类型。文章详细阐述了表、字段、视图等核心组件,以及主键、外键等约束条件。重点讲解了SQL语言的分类(DDL、DML、DCL、DQL)和数据库三大范式设计原则(1NF、2NF、3NF),并通过实例说明了表关联类型(一对一、一对多、多对多)。最后介绍了E-R图在数据库设计中的应用。全文为读者提供了全面的数据库基础知识框架。

2025-08-02 21:27:16 1192

原创 Java8 接口默认方法:从设计初衷到实践指南

默认方法是通过default关键字修饰的接口方法,它包含完整的方法体,为接口提供了默认实现。// 定义带默认方法的接口// 抽象方法(必须由实现类实现)// 默认方法(实现类可直接继承,无需重写)// 实现类:仅需实现抽象方法@Override// 可选:重写默认方法@Override// 测试// 输出:Car startscar.honk();// 若Car未重写,则输出默认值;否则输出Car的实现核心特点接口可以同时包含抽象方法和默认方法。

2025-07-26 09:30:02 968

原创 Java8 新日期时间 API:从设计理念到实战应用

Java8 新日期时间 API 通过不可变设计清晰职责划分丰富的功能特性,彻底解决了旧 API 的线程安全、设计混乱、时区处理复杂等问题。无论是简单的日期格式化,还是复杂的跨时区计算,新 API 都能以简洁、安全的方式实现。掌握新 API 不仅能提升代码质量(减少线程安全问题),还能降低维护成本(清晰的职责划分让代码更易读)。建议在新项目中完全采用新 API,并逐步将旧项目中的旧 API 替换为新 API,充分发挥其优势。若需进一步深入学习,可参考官方文档(

2025-07-26 08:46:55 770

原创 Java8 Lambda 表达式:让代码更简洁高效的秘密武器

简单来说,Lambda 表达式是一个匿名函数,它没有名称,但有参数列表、函数体、返回类型,甚至可以抛出异常。在 Java 中,Lambda 表达式的出现主要是为了简化函数式接口的实现代码。函数式接口是指只包含一个抽象方法的接口,比如我们熟悉的RunnableComparator等。在 Java 8 之前,实现这些接口往往需要使用匿名内部类,代码显得冗长繁琐。而有了 Lambda 表达式,我们可以用更简洁的方式来实现。(参数列表) -> { 函数体 }其中,->

2025-07-21 19:28:05 943

原创 Stream API

Java 8 Stream API 提供了强大的函数式数据处理能力,支持声明式编程风格。核心特点包括:不存储数据、不修改源对象、延迟执行。可通过集合、数组或静态方法创建流,支持过滤(filter)、映射(map)、排序(sorted)等中间操作,以及归约(reduce)、收集(collect)等终止操作。特别提供了并行流处理(parallelStream)提升性能,并采用惰性求值机制(中间操作不立即执行)。典型应用场景包括集合筛选、数据转换和聚合计算等。

2025-07-19 19:18:22 465

原创 HJ3 明明的随机数

【代码】HJ3 明明的随机数。

2025-06-01 18:52:27 174

原创 深入理解享元模式:用Java实现高效对象共享

享元模式是一种结构型设计模式,通过对象共享减少内存占用。它将对象状态分为内部状态(共享)和外部状态(非共享),适用于海量相似对象的场景(如游戏粒子、文档字体)。核心实现包括享元接口、具体享元类和工厂缓存机制,通过复用对象显著提升性能(测试显示10万次操作内存减少99.9%)。该模式以空间换时间,需注意线程安全和状态分离,在Java标准库如Integer.valueOf()中已有应用。适用于对象数量导致性能瓶颈时,但需避免过度设计。

2025-06-01 18:49:49 1002

原创 如何排查Redis单个Key命中率骤降?

Redis热点Key命中率骤降问题分析与解决方案 当Redis整体命中率达98%但特定Key命中率从99%骤降至40%时,需重点排查以下方面:1)通过监控工具确认Key访问模式和TTL设置;2)检查业务代码变更,尤其是缓存读写逻辑和Key生成规则;3)分析缓存失效策略,关注TTL设置和内存淘汰机制;4)验证数据一致性,排查缓存穿透/击穿问题。解决方案包括:对空值进行缓存防止穿透、使用互斥锁避免击穿、实施双删策略保障一致性。预防措施建议设置核心Key监控预警、优化架构采用多级缓存,并调整Redis内存淘汰策略

2025-06-01 18:14:15 697

原创 HJ2 计算某字符出现次数

该Java程序统计第二个字符串在第一个字符串中出现的次数。通过将第一个字符串(转换为小写)中的所有第二个字符串(同样转换为小写)替换为空,然后比较原始字符串与处理后字符串的长度差,得出出现次数。这种方法简单高效地实现了字符串匹配计数功能。程序使用标准输入读取数据并输出统计结果。

2025-05-31 18:36:16 475

原创 深入理解外观模式(Facade Pattern):用Java代码实现复杂系统的简化调用

外观模式是一种结构型设计模式,它通过定义一个高层接口,将多个子系统的复杂功能调用封装成一个简单操作。客户端无需直接与子系统交互,而是通过外观类间接调用,从而降低系统的耦合度[7][9]。外观模式通过封装与简化,体现了“最少知识原则”(Law of Demeter),是应对复杂系统调用的优雅解决方案。它不仅能提升代码可维护性,还能让团队协作更高效——例如后端提供统一接口,前端无需关心实现细节[3][12]在实际开发中,建议优先为高频复杂操作设计外观类,但需警惕过度封装导致的“上帝对象”问题。

2025-05-31 18:34:03 1022

原创 缓存穿透、击穿、雪崩的解决方案

本文总结了三种常见缓存问题(穿透、击穿、雪崩)的解决方案。缓存穿透可通过布隆过滤器拦截非法请求和缓存空值来应对;缓存击穿推荐使用互斥锁和逻辑过期策略处理热点Key失效;缓存雪崩则建议采用随机过期时间和多级缓存机制。文章通过Java代码示例展示了具体实现,并对比了三种问题的适用场景,最后提供了布隆过滤器参数调整和热点数据预热等实用技巧。

2025-05-31 17:27:51 1327

原创 深入理解Java装饰器模式:动态扩展对象功能的优雅之道

装饰器模式是一种结构型设计模式,通过动态包装对象的方式扩展功能,避免继承带来的子类爆炸问题。它由抽象组件、具体组件、抽象装饰器和具体装饰器四个核心角色组成,能在运行时灵活组合功能(如Java IO流、GUI组件美化)。该模式完美遵循开闭原则,实现职责分离,但需注意避免装饰层次过深和接口污染。相比适配器模式,装饰器不改变接口;相比策略模式,它侧重功能叠加而非算法替换。最佳实践包括优先使用组合、保持接口纯净和控制装饰层数。

2025-05-26 20:21:22 1153

原创 热点数据的统计到应用

本文提出了一套基于Redis和Java的热点数据智能管理方案。核心方法包括:1)利用Redis的HyperLogLog实现海量数据统计,内存消耗仅为传统方案的0.01%;2)采用滑动窗口算法实现微秒级QPS计算;3)通过本地缓存快速识别热点Key,响应速度比全量扫描快30倍。方案在电商、流媒体、金融等多个领域得到验证:电商场景实现商品三级热度分级,促销活动可实时监测库存热点;流媒体平台能动态调整经典内容推荐权重;金融风控系统可精准识别异常交易行为。该方案显著提升了系统稳定性,在百万级并发场景下仍能保持高性能

2025-05-26 20:13:46 1098

空空如也

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

TA关注的人

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