- 博客(213)
- 资源 (1)
- 收藏
- 关注
原创 二叉树层序遍历技术解析与面试指南
层序遍历(Level Order Traversal)是一种**广度优先搜索(BFS)**算法,按层级从上到下、从左到右访问二叉树节点。通过掌握层序遍历的核心原理与扩展应用,可以更从容地应对树结构相关的问题,展现系统级的算法设计能力。
2025-04-22 22:59:52
730
原创 Java队列(Queue)核心操作与最佳实践:深入解析与面试指南
队列(Queue)是计算机科学中最重要的线性数据结构之一,遵循**先进先出(FIFO)**原则。在Java生态中,队列不仅是算法题(如BFS、缓存管理)的核心工具,更是高并发系统、消息中间件等企业级架构的基石。本文将深入剖析Java队列的实现原理、核心API、性能差异及实战技巧,助力开发者掌握面试高频考点,写出高性能队列代码。核心原则:优先使用ArrayDeque,需要双端操作时选择LinkedListAPI规范:始终使用系列方法扩展方向研究阻塞队列(BlockingQueue)实现原理。
2025-04-22 22:51:32
592
原创 面试常问的扫码登录场景题:从原理到实现全解析
扫码登录的面试回答需抓住流程拆解、状态机设计、安全防护三大核心,结合Redis、JWT等关键词展示技术深度。代码健壮性:处理Token过期、重复提交等边界场景;可观测性:监控扫码成功率、延迟等指标;扩展性:设计支持横向扩展的Token管理方案。更多面试技术解析,欢迎访问作者主页查看系列文章。
2025-04-17 23:27:15
782
原创 滑动窗口+哈希表:最长无重复子串的最优解与高频面试题解析
在 LeetCode 和各大厂算法面试中,“寻找字符串中最长无重复字符子串”是一道经典高频题。它不仅考察对**滑动窗口**和**哈希表**的灵活运用,还能延伸出对时间复杂度优化、边界条件处理的深度思考。本文将通过两种 Java 实现(**求长度**和**求子串本身**),结合代码逐行解析
2025-04-17 08:30:00
632
原创 MySQL 中 `${}` 和 `#{}` 占位符详解及面试高频考点
在 MySQL 和 MyBatis 等框架中,${}和#{}是动态 SQL 中常用的占位符。它们的核心差异在于预编译机制和安全性,正确使用二者是后端开发的基本功,也是面试中的高频考点。本文将从原理、场景、安全性及面试题四方面深入解析。#{}用于替换值类型(如 WHERE 条件值、INSERT 字段值),通过预编译,防止 SQL 注入。${}用于替换标识符(如表名、列名、ORDER BY 子句),直接拼接字符串,需手动校验安全性。场景占位符示例WHERE 条件值#{}动态表名/列名${}
2025-04-16 19:29:09
939
原创 Java字符串操作全解析:语法、示例与应用场景
在Java算法题和日常开发中,字符串处理是必备的核心技能。本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字符串处理技巧,轻松应对笔试面试高频题目。
2025-04-16 09:45:00
4486
7
原创 经典算法问题解析:两数之和与三数之和的Java实现
在算法面试和编程练习中,**两数之和(Two Sum)**和**三数之和(3Sum)**是两个经典的数组处理问题。这两个问题不仅是检验基础算法能力的试金石,也是理解高效搜索技巧的重要案例。本文将通过Java代码实现这两个问题,并深入解析其优化思路。
2025-04-15 21:52:47
1039
原创 盛水最多的容器问题详解:双指针法与暴力法的对比与实现
盛水最多的容器(Container With Most Water)是LeetCode上一道经典的算法题,考察对数组和双指针技巧的应用。本文将详细分析问题的核心思路,探讨暴力法和双指针法两种实现方法,并对比它们的性能差异。通过代码实现和复杂度分析,帮助读者深入理解如何高效解决此类问题。
2025-04-15 20:34:24
837
原创 Java 分布式锁实现全解析:原理、代码、对比与面试指南
在分布式系统中,多个服务实例可能同时访问共享资源(如数据库、缓存、文件等)。分布式锁的核心目标是实现跨进程的互斥访问
2025-04-15 20:06:59
920
原创 Java开发者必备:分布式系统核心概念与场景化解决方案(附完整Demo)
分布式系统是由一组通过网络互联的独立计算机节点(物理或虚拟)协同工作的系统。这些节点通过消息传递机制进行通信与协调,共同完成单一计算机无法实现的大规模计算任务或数据存储需求。通过协作克服单机限制,通过冗余保障系统可靠性。
2025-04-15 20:04:55
1062
原创 从暴力到动态规划再到双指针:使用 Java 探索接雨水问题的不同解法
在本文中,我们将探讨经典的接雨水问题,并提供多种解题思路和方法。通过逐步深入的方式,将了解到如何使用暴力法、动态规划法以及双指针法解决这一问题,并对它们进行性能对比。
2025-04-14 21:22:47
776
原创 Java数组初始化全解析:方式、场景与最佳实践
数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点。本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱并提升代码质量。
2025-04-14 20:55:43
1066
原创 Java集合框架详解:核心类、使用场景与最佳实践
Java集合框架(Java Collections Framework, JCF)是Java中用于存储和操作数据集合的核心工具
2025-04-12 17:46:52
1041
原创 用Java实现O(n)时间复杂度查找最长连续序列
通过哈希集合和仅处理连续序列起点,算法在 O(n) 时间内高效解决问题。核心在于避免重复遍历和冗余计算
2025-04-12 17:02:23
838
原创 Java 列表初始化全解析:7种方式详解与最佳实践
在 Java 开发中,列表(`List`)是最常用的数据结构之一,而列表的初始化方式直接影响代码的简洁性、性能和可维护性。本文全面总结 Java 中列表初始化的 **7 种常见方法**,分析其适用场景、优缺点及注意事项,并给出对比总结与最佳实践建议。
2025-04-09 21:58:47
943
原创 Redis学习(13)| Redisson 看门狗机制深度解析
Redisson 是一个用于 Redis 的 Java 客户端,它提供了丰富的功能来简化分布式应用的开发。其中,看门狗(Watchdog)机制是 Redisson 为了解决分布式锁过期问题而设计的一个重要特性。本文将深入探讨 Redisson 看门狗的工作原理、应用场景以及最佳实践,并提供代码示例帮助读者更好地理解和使用这一特性。
2024-12-11 21:35:08
1701
原创 Java 小抄|解析 JSON 并提取特定层级数据
在日常开发中,我们经常需要从 JSON 数据中提取特定的信息。本文将介绍如何使用 Java 和 Gson 库解析 JSON 数据,并通过流式处理提取特定层级的数据。我们将以一个具体的例子来说明这一过程。首先,我们需要定义一个 Java 类来表示预算条目。这里使用 Lombok 的@Data注解来简化类的编写
2024-12-11 21:31:52
828
原创 深入浅出:序列化与反序列化的全面解析
在软件开发中,**序列化(Serialization)** 和 **反序列化(Deserialization)** 是两个非常重要的概念。它们涉及到数据的转换、传输和存储。本文将通过通俗易懂的语言和实际代码示例,帮助读者理解这两个过程,并探讨如何在不同的编程语言和应用场景中实现它们。
2024-12-09 20:36:47
2221
原创 MySQL|通过JSON_UNQUOTE实现MySQL中JSON数据的干净提取
`JSON_UNQUOTE()` 是 MySQL 中用于处理 JSON 数据类型的一个函数。它的主要作用是从 JSON 字符串中移除最外层的引号,这对于从 JSON 对象或数组中提取字符串值特别有用。
2024-12-09 20:21:44
601
原创 Java 小抄|利用 `retainAll()` 方法实现集合间的交集
在Java编程语言中,`retainAll()` 方法是 `Collection` 接口提供的一个功能,用于从一个集合中移除那些不在另一个指定集合中的所有元素。简而言之,它实现了集合之间的交集操作。本文档将详细介绍 `retainAll()` 方法的使用方法、注意事项以及在后端开发面试中可能遇到的相关问题。
2024-12-02 21:43:38
633
原创 Apache Commons Chain 与 Spring Boot 整合:构建用户注册处理链
本文档旨在展示如何在 Spring Boot 应用中使用 Apache Commons Chain 来实现一个用户注册的处理链。我们将通过ChainBase和类来组织和管理多个处理步骤,并结合 Spring 的依赖注入和上下文管理功能,以实现一个灵活且可扩展的解决方案。为了在处理链中的每个命令之间传递和共享状态信息,我们需要创建一个继承自的自定义上下文类。这个类将包含所有与用户注册相关的属性。} }} }
2024-12-02 20:58:15
1336
原创 Hive | Hive 表如何查看所有分区
Apache Hive 是一个构建在 Hadoop 之上的数据仓库工具,它提供了 SQL 类似的查询语言(称为 HiveQL),使得用户能够更容易地进行大数据处理和分析。在 Hive 中,分区是一种优化查询性能的方法,通过将数据按照一个或多个列的值进行划分,可以显著减少查询时扫描的数据量。本文档将介绍如何在 Hive 中查看表的所有分区信息。通过上述命令,Hive 用户可以轻松地查看和管理表的分区信息,从而更好地利用分区来优化查询性能。
2024-11-26 22:25:57
2634
原创 正则|Pattern 和 Matcher 的使用与优化
在 Java 中,Pattern和Matcher是正则表达式处理的核心类。它们提供了强大的文本匹配和处理功能,广泛应用于各种文本解析和验证场景。本文将详细介绍Pattern和Matcher的使用场景、解决的问题、优缺点以及相关技术问题。Pattern类代表一个正则表达式的编译形式。它主要用于编译正则表达式,并生成一个Pattern对象,该对象可以用于创建Matcher对象来执行匹配操作。Pattern和Matcher。
2024-11-26 22:17:57
1055
原创 Spring Boot | 使用 `@Scheduled`: 定时任务的实现与优化
Scheduled是 Spring 框架提供的一个注解,用于在 Spring 管理的 Bean 中定义计划任务。它允许开发者在 Spring Boot 应用中执行周期性的后台任务,而无需使用外部任务调度器。@Scheduled注解支持多种参数来定义任务的执行规则。cron: 使用Cron表达式来定义任务的执行时间表。// 每日凌晨2点执行")fixedRate: 指定从上一次任务开始到下一次任务开始之间的时间间隔(单位为毫秒)。// 每隔5秒执行一次。
2024-09-23 21:24:43
2398
1
原创 MySQL | 使用 HAVING 子句进行高级数据筛选
SQL 中的HAVING子句用于从GROUP BY查询的结果中进一步筛选记录。当需要根据聚合函数的结果来过滤查询输出时,HAVING就变得非常有用。HAVING与WHERE类似,但WHERE子句是在分组前应用,而HAVING是在分组后应用。在 SQL 查询中,HAVING子句通常与GROUP BY子句一起使用。这里的value是一个具体的数值或表达式。
2024-09-23 21:12:52
935
原创 MySQL|MySQL 中 `DATE_FORMAT()` 函数的使用
是 MySQL 中的一个内置函数,用于格式化日期和时间数据。它可以根据指定的格式字符串来展示日期和时间,使得数据更容易阅读和理解。本文档将详细介绍函数的使用方法及其常见应用场景。
2024-09-18 21:44:21
3441
原创 Java Stream API | Java Stream API 中 `filter()`的使用
在Java 8及更高版本中引入的Stream API提供了一种功能强大的方式来处理集合数据。filter()方法是Stream API中最基本的操作之一,它允许开发者基于某些条件筛选流中的元素。本文档将详细介绍如何使用filter()方法,并提供多个示例来展示其应用。filter()方法是Stream API中的一个重要组成部分,它简化了数据筛选的过程。通过合理地运用filter()方法,开发者可以轻松地实现复杂的数据筛选逻辑,从而使代码更加简洁、易读。结合其他Stream操作,filter()
2024-09-18 21:43:53
566
原创 Java|泛型的使用
泛型(Generic)是 Java 5 引入的一项特性,它允许类、接口和方法可以处理任何类型的数据,而不必指定具体的类型。通过泛型,开发者可以编写更加通用和类型安全的代码。在不使用泛型的情况下,代码往往依赖类型转换,而这可能会导致运行时的错误。泛型提供了一种在编译时进行类型检查的机制,从而减少运行时的错误。Java 的泛型机制通过类型参数化和类型擦除提供了更高的类型安全性和灵活性。通过泛型,开发者可以编写更加通用、灵活且安全的代码,减少类型转换错误并提高代码的重用性。
2024-09-07 18:07:40
1042
1
原创 Java|Java 中 JSONPath 的使用
JSONPath 是一种用于从 JSON 数据结构中提取特定元素的查询语言,类似于 XPath 用于 XML。它提供了强大的查询功能,允许用户通过简单的表达式获取 JSON 文档中的特定数据。本文将介绍 JSONPath 的基本语法,并提供在 Java 中如何使用 JSONPath 的示例代码。JSONPath 提供了一种简便且强大的方式来查询和处理 JSON 数据。它的语法简单但功能强大,适合用于各种场景下的 JSON 数据提取。
2024-09-07 18:06:28
2704
原创 自定义 ConsoleAppender 实现日志预处理
在日志系统中,是一种常见的日志输出方式,通常用于将日志打印到控制台。在实际开发过程中,可能会有对日志输出进行预处理的需求,例如掩盖敏感信息、添加上下文信息或过滤特定的日志内容。通过扩展,开发者可以在日志输出到控制台前对日志进行自定义处理。本文将介绍如何通过继承来实现日志的预处理,并提供相关的代码示例和配置方式。是日志框架中用来将日志输出到控制台的附加器,广泛用于开发和调试场景。它的核心功能是将日志事件(如)格式化后输出到标准输出(System.out)或标准错误输出(System.err在Log4j。
2024-09-05 22:14:44
1051
原创 大数据学习|理解和对比 Apache Hive 和 Apache Iceberg
Hive是一个成熟的数据仓库解决方案,特别适合于批处理和数据仓库应用。Iceberg是一个更为现代的数据表格式,提供了更强的事务支持和性能优化,适用于需要更灵活数据管理和实时处理的应用场景。选择 Hive 还是 Iceberg 取决于具体的业务需求和技术背景。如果你的应用需要支持事务处理和更高的读写性能,Iceberg 可能是一个更好的选择。如果你的应用主要是批处理且对现有 Hadoop 生态系统有较高的依赖度,那么 Hive 仍然是一个可行的选择。
2024-09-03 22:22:20
1232
原创 问题复盘|nestedexceptioniscom.mongodb.MongoNotPrimaryException: Commandfailedwitherror10107(NotMaster)
遇到的问题是,这个异常通常发生在尝试执行写入操作时目标MongoDB实例不是主节点的情况。错误码10107(NotMaster)表示命令在非主节点上执行失败,因为该节点不是复制集中的主节点。
2024-08-12 21:43:11
665
原创 MongoDB | MongoDB 终端查询
MongoDB 是一个高性能、易扩展的文档型 NoSQL 数据库。本文档将指导你如何使用 MongoDB 的命令行工具`mongo` shell来查询存储在MongoDB数据库中的数据。
2024-08-12 21:33:40
1110
原创 代码重构|代码的坏味道及其重构建议
在软件开发过程中,随着项目规模的增长,代码中可能会出现一些不良的编程习惯,这些习惯被称为“代码的坏味道”。识别并消除这些坏味道是重构过程的重要组成部分。本文档将详细介绍几种常见的代码坏味道,并提供具体的重构建议。
2024-08-08 23:32:51
518
原创 代码重构|初识代码重构
重构是通过一系列小而安全的步骤来改进代码的过程。这些步骤可以是简单的重命名变量,也可以是复杂的提取方法或类。重构的目标是在不破坏程序功能的情况下,使代码更加清晰、简洁和易于理解。
2024-08-08 22:54:52
741
原创 Java学习|初识热加载
Java中的类加载是由类加载器(Class Loaders)完成的。通过本文将了解如何在不重启应用程序的情况下更新或替换类和方法,从而提高开发效率和系统可用性。Java热加载是指在不重启应用程序的情况下更新或替换类和方法的能力。A: 热加载可能会带来一定的性能开销,尤其是在频繁更新代码的情况下。本文档将从理论基础入手,逐步深入到具体的实现细节和技术实践,帮助读者掌握Java热加载的核心知识。为了更好地理解Java热加载的工作原理,我们需要先了解Java类加载机制的一些基本概念。假设我们有一个简单的类。
2024-07-29 21:50:20
1747
2
原创 Java小抄|Java中的List与Map转换
第三个参数:(v1, v2) -> v1 表示当有 id 重复的时候,选择第一个作为基准,忽略别的 id 相同的记录;第二个参数: v -> v 表示选择将原来list中的每一个User对象作为map的key对应的每一个value值;如果(v1, v2) -> v2 表示当有 id 重复的时候,选择最后一个作为基准,忽略别的 id 相同的记录。第一个参数: User::getId表示选择 User 的 Id作为map的key值;
2024-07-28 22:13:31
640
原创 Spring Boot|如何实现 Spring Boot 的优雅停机
在部署Spring Boot应用时,优雅停机是一个重要的概念,它指的是在服务关闭时能够有序地释放资源、完成已有的请求处理并拒绝新的请求,从而避免因强制关闭导致的数据丢失或服务不可用等问题。本文档旨在介绍如何在Spring Boot应用中实现优雅停机,并提供具体的步骤和示例代码。可以注册一个Java Shutdown Hook来实现更精细的控制。
2024-07-28 22:06:20
1040
原创 Java小抄|字符串转 Map
import com.alibaba.fastjson;String str="";HashMap hashMap = JSON.parseObject(str, HashMap.class);
2024-07-27 19:46:59
451
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人