自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

分享技术,分享Java,分享生活。

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

原创 [队列] - 代码随想录 347. 前 K 个高频元素

本题通过哈希表和最小堆的结合,高效地解决了“前 k 个高频元素”的问题。这种方法不仅适用于本题,也适用于其他类似的问题,比如“Top K”类问题。

2025-12-25 22:31:48 187

原创 [二叉树] - 代码随想录:二叉树的统一迭代遍历

本文介绍了一种二叉树的统一迭代遍历方法,重点解决了后序遍历的迭代实现问题。通过使用栈结构和空节点标记,该方法能统一处理前序、中序和后序遍历。算法核心是:遇到非空节点时重新压栈并标记,再按顺序压入子节点;遇到空节点时则弹出并记录值。这种方法的时间复杂度为O(n),空间复杂度为O(n),适用于各类二叉树遍历场景,具有较高的实用性和扩展性。

2025-12-25 22:31:15 268

原创 [队列] - 代码随想录 239. 滑动窗口最大值

给定一个数组nums和一个整数k,找出每个长度为k的滑动窗口中的最大值。例如:k = 3。

2025-12-25 22:30:34 406

原创 快速上手MySQL中的JSON函数语法——5.x+ / 8.x+

MySQL JSON函数指南:5.7+与8.0+版本特性对比 本文系统介绍了MySQL中JSON函数的分类与用法,重点区分了5.7+和8.0+版本的功能差异。内容涵盖五大类函数:JSON创建、查询、修改、验证以及转换函数。5.7版本提供基础JSON支持,8.0版本新增了JSON_MERGE_PRESERVE、JSON_VALUE等高级功能,并优化了性能。每种函数都配有语法说明和典型示例,帮助开发者快速掌握JSON操作技巧。特别说明了路径规则和版本兼容性注意事项,为不同MySQL环境下的JSON处理提供实用参

2025-11-27 11:45:07 434

原创 代码随想录 58. 区间和

本文介绍了高效计算数组区间和的方法。通过构建前缀和数组,可以在O(n)预处理后,以O(1)时间回答每个区间查询。具体实现是:先读取数组并计算前缀和数组,然后对每个查询区间[a,b],若a=0直接取prefix[b],否则用prefix[b]-prefix[a-1]得到区间和。这种方法显著提升了查询效率,特别适合大规模数据。示例验证了该方法的正确性,时间复杂度为O(n+q),空间复杂度为O(n)。

2025-11-26 13:10:49 302

原创 LeetCode 977. 有序数组的平方

题目要求将非递减整数数组的元素平方后,返回按非递减顺序排序的新数组。解题关键在于利用原数组的有序性,通过双指针法在线性时间内完成。具体做法是从数组两端向中间遍历,比较左右指针指向元素的平方值,将较大的值逆序填入结果数组。这种方法的时间复杂度为O(n),空间复杂度为O(n)(结果数组)。双指针法有效利用了原数组的特性,避免了直接平方后排序的O(n log n)时间复杂度。

2025-11-26 10:12:14 353

原创 LeetCode 27. 移除元素

摘要:LeetCode 27题要求原地移除数组中等于给定值的元素,返回新数组长度。采用双指针法:慢指针记录有效元素位置,快指针遍历数组。当快指针元素不等于目标值时,将其复制到慢指针位置并后移。时间复杂度O(n),空间复杂度O(1)。该方法高效地维护了有效元素边界,无需额外空间即可完成操作。

2025-11-26 10:11:24 268

原创 LeetCode 59. 螺旋矩阵 II

摘要:LeetCode 59题要求生成一个n×n的顺时针螺旋填充1到n²的矩阵。采用分层模拟法,通过维护四条边界(top/bottom/left/right)逐步收缩填充:先从左到右填充上层,再从上到下填充右层,接着从右到左填充下层,最后从下到上填充左层,循环直到填满所有数字。该方法时间复杂度O(n²),空间复杂度O(n²)。示例展示了n=3时的填充过程和结果矩阵。

2025-11-24 14:36:30 240

原创 本体论在AI领域的实践讨论

摘要: 大型语言模型(LLM)的"幻觉"问题是企业级AI应用的主要障碍。传统检索增强生成(RAG)方案仅缓解表面问题,而知识图谱(KG)结合本体论能从根本上解决这一挑战。KG通过结构化语义网络实现确定性推理,相比RAG具有多跳推理、解释性强和数据整合三大核心优势。研究表明,将KG作为AI Agent架构的核心组件,而非可选功能,是构建可信企业级智能系统的关键路径。

2025-11-24 10:36:20 1101

原创 LeetCode 704. 二分查找

本文详细解析了LeetCode 704二分查找的实现要点,强调统一使用闭区间[left, right]定义搜索范围,并保持循环条件与边界更新逻辑的一致性。通过Java代码示例展示了标准实现,对比了开闭区间写法的差异,列举了常见错误(如边界溢出和更新逻辑矛盾),并扩展了寻找左右边界的模板。核心在于选择一种区间定义并严格遵循其规则,避免死循环和逻辑错误。

2025-11-23 23:02:00 289

原创 JUC超全核心知识点快速复习与扫盲

JUC核心知识摘要 本文总结了Java并发编程中的核心知识点,包括线程与进程的基础概念、线程创建方式、生命周期状态、上下文切换等关键内容。线程是进程的更小执行单位,共享堆和方法区资源,但拥有独立的程序计数器、虚拟机栈等。Java线程创建方式有继承Thread类、实现Runnable/Callable接口、使用线程池等多种方式。线程有6种生命周期状态,上下文切换会影响性能。文章还对比了sleep()和wait()的区别,并指出不能直接调用Thread.run()方法。

2025-09-16 12:02:03 1176

原创 黑马程序员JVM基础学习笔记

本文介绍了JVM的核心概念、组成结构和类加载机制。JVM通过解释执行、JIT编译和内存管理实现跨平台能力,其核心组件包括类加载器、运行时数据区和执行引擎。类加载机制采用双亲委派模型确保安全性和唯一性,通过加载、验证、准备、解析和初始化五个阶段完成类的生命周期。文章还详细分析了字节码结构、类加载器分类以及打破双亲委派的方法,并介绍了SPI服务发现机制。这些知识为深入理解JVM运行原理和性能优化奠定了基础。

2025-09-14 16:37:55 1329 1

原创 MySQL索引优化

摘要:MySQL索引优化的核心在于理解B+树结构特性,基于查询需求精准设计索引。优先覆盖高频查询条件,遵循最左匹配原则,高区分度列前置,避免冗余索引。注意索引失效场景如隐式类型转换、函数操作、通配符LIKE查询等。通过EXPLAIN分析执行计划,定期监控索引使用情况,结合业务动态调整。优化需平衡读写性能,避免过度索引增加写开销,同时利用覆盖索引减少回表操作。

2025-09-06 20:37:34 907

原创 一文快速说清HashSet底层数据结构

HashSet判断元素是否重复的逻辑是:先比较哈希值(通过hashCode方法),如果哈希值相同,再通过equals方法判断内容是否相同。如果两个对象的hashCode不同,会直接认为是不同元素;如果hashCode相同但equals返回false,会被存入同一个桶的链表中,但HashSet仍视为不同元素。因此,如果要用自定义对象作为HashSet的元素,必须同时重写hashCode和equals方法。int age;// 未重写hashCode和equals。

2025-09-05 21:24:41 1087

原创 一文快速说清ArrayList扩容机制

ArrayList的扩容机制,看似是一个简单的数组复制过程,背后却蕴含了Java集合框架的设计智慧:延迟初始化减少内存占用,1.5倍扩容平衡空间与时间,防止内存溢出……这些细节的打磨,让ArrayList在大多数场景下都能提供优秀的性能。

2025-09-05 20:08:02 1401

原创 头歌实训作业答案C++ 05

题目描述:输入一段字符(由空格、字母和数字几种组成,保证开头不为空格),里面有若干个字符串,求这些字符串的长度和,并输出最长字符串内容,如果有多个输出最先出现的那个字符串。平台会对您的代码进行运行测试,如果实际输出与预期输出相同,则算通关。,则输出编号(如果存在多个编号,返回编号最小的),如果不存在,则输出。平台会对您的代码进行运行测试,如果实际输出与预期输出相同,则算通关。平台会对您的代码进行运行测试,如果实际输出与预期输出相同,则算通关。的"鞍点",即该位置上的元素在该行上最大,在该列上最小,其中。

2025-09-04 10:21:42 905

原创 头歌实训作业答案C++ 04

本文摘要介绍了指针在C语言中的核心概念及其应用。主要内容包括:(1)指针基础概念及与数组的关系;(2)指针作为函数参数实现变量交换的技巧;(3)使用指针解决约瑟夫环问题;(4)自定义strcmp函数进行字符串比较的方法。通过具体实例展示了指针在输入输出、函数参数传递、算法实现和字符串操作中的应用,强调指针操作的效率优势及其在C语言编程中的重要性。

2025-09-04 10:12:15 681

原创 头歌实训作业答案C++ 03

本文介绍了循环结构程序设计的四个典型问题:1)小球自由落体运动计算,通过循环模拟反弹过程,计算总距离和反弹高度;2)求解n以内能被5整除的正整数乘积,使用循环累乘算法;3)计算最大公约数和最小公倍数,应用欧几里得算法;4)统计字符串中各类字符数量,通过字符分类判断实现。每个问题都详细讲解了数学原理、算法设计思路和实现步骤,并提供了测试用例验证程序正确性。这些案例涵盖了循环结构在物理模拟、数学计算和字符处理中的典型应用,展示了循环结构程序设计的基本方法和技巧。

2025-09-04 09:19:49 1106

原创 头歌实训作业答案C++ 02

本文介绍了C语言顺序结构程序设计的进阶知识,主要内容包括:1)基本输入输出操作,演示了加法运算的实现;2)不使用第三个变量的数据交换技巧,通过数学方法实现变量对调;3)宏定义的使用,展示如何用宏提高代码可维护性;4)数字分离算法,讲解如何提取三位数的各位数字;5)数学计算应用,如计算总成绩和平均成绩。每个知识点都配有具体任务、解题思路和测试用例,帮助读者掌握顺序结构程序设计的核心技能。

2025-09-04 09:14:05 1100

原创 头歌实训作业答案C++ 01

本文介绍了C语言程序设计中的基础编程任务和选择结构程序设计。主要内容包括: 基础编程任务:Hello World程序、图形输出、三数最大值求解、调试练习; 选择结构程序设计:三个数的排序、闰年判断、分段函数计算、成绩等级转换。 每个任务包含明确的编程要求、测试说明和参考代码实现,涵盖了C语言的基本输入输出、条件判断等核心知识点。通过完成这些任务,学习者可以掌握C语言的基本语法和选择结构的使用方法。

2025-09-03 19:02:28 814

原创 [牛客网] NewCoder BISHI2 【模板】栈的操作——完整步骤拆解(含注释)

本文介绍了如何用Java实现栈的四种基本操作:push、pop、query和size。推荐使用LinkedList来模拟栈,因为它比Stack类更高效。push操作直接调用addLast(),pop和query需要先判断栈是否为空,size直接输出元素数量。输入处理时要注意换行符问题,建议用Scanner.next()读取指令。代码实现简洁明了,所有操作时间复杂度都是O(1),整体复杂度为O(n),完全满足题目对10^5次操作的要求。

2025-09-03 16:17:31 613

原创 [牛客网] NewCoder BISHI1 【模板】序列操作——完整步骤拆解(含注释)

(操作 1/2)(操作 3/4)(操作 5/6)(操作 7/8):如何在频繁的插入、删除和排序操作中,平衡时间复杂度与代码简洁性?Java 的ArrayList天然支持动态扩容、随机访问和中间插入,是本题的理想选择。

2025-09-03 11:42:33 461

原创 LeeCode104. 二叉树的最大深度,LeeCode111. 二叉树的最小深度——完整步骤拆解(含注释)

本文解析了LeetCode两道二叉树深度问题:104题计算二叉树最大深度,111题计算最小深度。最大深度的递归解法直接比较左右子树深度并取较大值加1;而最小深度需特殊处理单子树情况,避免误判。文章对比了两种深度计算的区别,指出常见误区如混淆最小/最大深度逻辑、忽略空子树处理等,并提供了Java代码实现。最后强调正确识别叶子节点和边界条件的重要性,附上题目链接供参考。

2025-09-02 18:40:17 640

原创 LeeCode2. 两数相加,LeeCode24. 两两交换链表中的节点——完整步骤拆解(含注释)

本文包含两个LeetCode链表问题的解析:两数相加和两两交换链表节点。 两数相加:通过模拟手工加法,从链表头部开始逐位相加并处理进位。使用哨兵节点简化操作,时间复杂度O(max(m,n)),空间复杂度O(max(m,n)+1)。 两两交换节点:提供迭代和递归两种解法。迭代法使用哨兵节点和前驱指针调整节点指向,递归法将问题分解为子问题处理。两种方法的时间复杂度均为O(n),迭代法空间O(1),递归法空间O(n)。 关键点在于理解链表逆序存储的特点、正确处理进位和边界条件,以及掌握指针操作技巧。

2025-09-02 15:41:45 717

原创 LeeCode143. 链表重排,LeeCode21. 合并两个有序链表——完整步骤拆解(含注释)

LeeCode143. 链表重排:将单链表L0→L1→...→Ln重排为L0→Ln→L1→Ln-1→...。通过三步实现:1)快慢指针找中点拆分链表;2)反转后半部分;3)交替合并两部分。时间复杂度O(n),空间复杂度O(1)。 LeeCode21. 合并有序链表:将两个升序链表合并为一个新升序链表。两种解法:1)迭代法:用哑节点和指针比较并连接节点;2)递归法:比较头节点后递归处理剩余部分。两种方法均保持O(n)时间复杂度和O(1)/O(n)空间复杂度。

2025-09-02 14:52:51 1069

原创 LeeCode83. 删除排序链表中的重复元素,LeeCode82. 删除排序链表中的重复元素II——完整步骤拆解(含注释)

本文分析了两道链表去重问题:LeetCode83(保留一个重复元素)和LeetCode82(彻底删除重复元素)。对于已排序链表,83题通过单指针遍历,遇到重复时跳过后续节点;82题则需使用哨兵节点和双指针,完全删除所有重复节点。两题均具O(n)时间复杂度和O(1)空间复杂度,但82题处理更复杂,需注意头节点可能被删除的情况。代码实现展示了如何通过指针操作高效解决链表去重问题。

2025-09-02 11:32:52 771

原创 LeeCode25. K 个一组翻转链表——完整步骤拆解(含注释)

本文介绍了如何实现K个一组翻转单链表的算法。首先解析了问题要求,即每连续K个节点为一组进行翻转,不足K个则保持原序。接着讲解了单链表翻转的迭代法和递归法两种基础方法。核心思路是将问题拆分为分组、翻转和连接三个步骤,通过虚拟头节点简化边界处理。给出了完整的Java代码实现,并分析了时间复杂度为O(n)和空间复杂度为O(1)。最后讨论了k=1、链表长度为k的整数倍等边界情况。该算法通过实际交换节点完成翻转,适用于各种链表长度和分组规模。

2025-09-01 20:49:18 727

原创 LeeCode141. 环形链表,LeeCode142. 环形链表II——完整步骤拆解(含注释)

本文介绍了链表的基本概念和环形链表的判断方法。链表通过指针连接节点,不需要连续内存空间,但可能出现环形结构。判断链表是否有环可采用哈希表法(O(n)空间)或快慢指针法(O(1)空间)。对于存在环的链表,寻找环入口节点同样可用这两种方法:哈希表法通过记录访问节点,快慢指针法则利用数学推导,在第一次相遇后将快指针重置到表头,两者同速移动再次相遇即为入口节点。两种方法的时间复杂度均为O(n),但快慢指针法空间效率更优。

2025-09-01 19:40:50 880

原创 BigDecimal——解决Java浮点数值精度问题:快速入门与使用

本文深入探讨Java中BigDecimal的应用场景与核心用法。针对浮点数精度丢失问题,详细分析了BigDecimal的底层设计原理(unscaled value+scale),对比不同初始化方式的差异,强调推荐使用String构造。重点讲解了四则运算的实现,特别是除法必须指定精度和舍入模式,并介绍了常用舍入策略。最后,结合实际业务场景(金融、电商等)说明其重要性,并针对高频计算提出性能优化建议。通过系统讲解,帮助开发者掌握精确数值计算的关键技术。

2025-09-01 16:51:40 745

原创 你真的了解二分查找吗?二分查找:你不知道的细节——从基础到变形

二分查找是一种在有序数组中高效查找元素的算法,其核心逻辑是每次比较中间元素与目标值,从而排除一半的搜索范围。该算法的时间复杂度为对数级O(log n),远优于线性查找的O(n)。二分查找的前提是数组必须有序且支持随机访问。基本实现包括初始化左右指针、循环比较中间元素并调整搜索范围。进阶应用包括查找左边界(第一个大于等于目标值的位置)和右边界(最后一个小于等于目标值的位置)。常见错误包括边界条件处理不当、区间定义混淆和溢出问题。二分查找还可用于求平方根、查找旋转数组最小值等场景。

2025-08-31 19:10:26 1050

原创 还弄不明白滑动窗口?一篇文章带你完全理解滑动窗口!——从入门到通解的全场景解析:揭开滑窗的核心思想。

滑动窗口算法核心解析 核心思想:滑动窗口是一种通过动态调整连续区间(窗口)来优化算法效率的技术,将时间复杂度从O(n²)降至O(n)。其本质是双指针维护的动态区间,通过增量更新替代重复计算。 两种主要类型: 固定窗口(如最大子数组和问题):窗口大小不变,通过"旧和-移出元素+移入元素"实现高效计算 可变窗口(如最长无重复子串):窗口大小动态变化,通过哈希表记录字符位置,左指针按需收缩。

2025-08-31 11:19:09 1445

原创 面试必问:你真的了解单例模式吗?:单例模式七种经典实现,从原理到实战

单例模式深度解析 本文系统介绍了单例模式的七种经典实现方式,从基础到高级,全面剖析其核心原理与适用场景。

2025-08-31 10:01:47 888

原创 面试必问:HashMap的扩容机制是?—— HashMap深度解析:从底层原理到扩容机制的全链路拆解!!

本文深度解析Java中HashMap的底层原理与实现机制。HashMap作为高效键值对容器,融合数组与链表/红黑树优势,实现O(1)时间复杂度操作。文章从哈希表基础切入,详解其核心特性:允许null键值、动态扩容、链表树化转换等关键设计。重点剖析哈希函数实现(扰动处理与位运算定位)、put操作全流程(冲突处理与扩容触发)以及get操作的高效查找逻辑。通过JDK8源码分析,揭示HashMap如何平衡空间与时间效率,为开发者提供从使用到原理的全面认知,帮助优化实际开发中的数据结构选择与应用。

2025-08-30 16:36:45 972

原创 [算法] 双指针:本质是“分治思维“——从基础原理到实战的深度解析

双指针技术通过两个指针的协同移动,将线性数据结构的处理复杂度从O(n²)优化至O(n)。文章系统解析了三种核心双指针模式:对向双指针(用于有序数组的两数之和等问题)、同向双指针(用于数组去重等原地操作)和快慢指针(用于检测链表环结构)。通过Java代码示例和经典算法题(如LeetCode 167、26、141等),详细阐述了每种模式的适用场景、操作步骤和效率优势。双指针的高效性源于其对数据结构特性的巧妙利用,是优化算法性能的重要工具。

2025-08-30 15:38:30 1090

原创 什么是策略模式?策略模式能带来什么?——策略模式深度解析:从概念本质到Java实战的全维度指南

本文摘要: 策略模式是一种行为设计模式,通过将算法封装为独立对象实现动态切换,完美解决业务逻辑频繁变更的问题。文章以电商折扣场景为例,系统解析了策略模式的三层架构(策略接口、具体策略、上下文类),并对比传统if-else实现,突出其四大核心优势: 1)逻辑解耦提升可维护性 2)运行时动态切换策略 3)天然支持开闭原则 4)增强单元测试可行性。通过Java代码示例演示了从基础实现到Spring集成的完整方案,为复杂业务系统的可扩展设计提供标准化范式。

2025-08-29 23:30:37 1182

原创 【Java基础】为什么说继承、封装与多态是Java面向对象的“灵魂”?

本文深入解析Java面向对象编程的三大核心特性:封装、继承与多态。封装通过访问控制实现数据隐藏与安全防护,重点介绍了private修饰符与Getter/Setter模式的应用;继承利用extends关键字建立类型层次结构,实现代码复用与功能扩展;多态则通过方法重写和接口实现,使同一行为在不同对象上呈现不同表现。文章采用"概念解析→代码实践→工程价值"的递进式讲解,结合典型示例演示了三大特性的具体实现方法及其在软件设计中的重要意义,帮助开发者从语法层面掌握面向对象编程的精髓。

2025-08-29 23:08:25 861

原创 【Java基础】Java中的基本数据类型你不知道的细节!

Java基本数据类型深度解析 本文深入探讨Java基本数据类型的关键细节: 存储机制:类变量在堆中默认初始化,局部变量在栈中需显式赋值;布尔类型单个变量占4字节,数组元素占1字节 拆装箱陷阱:自动拆装箱会导致性能损耗(20倍时差)和NPE风险;包装类比较需用equals()而非== 数值运算:小类型运算自动提升为int/double;浮点数需注意精度损失;char采用UTF-16编码 特殊机制:Integer缓存-128~127;boolean编译为int/byte;浮点运算需处理舍入误差

2025-08-28 21:42:43 772

原创 面试必问:谈谈你对Spinrg AOP思想的理解——从0到1掌握AOP:面向切面编程的原理、价值与实现

AOP(面向切面编程)是一种编程范式,通过将通用功能(如日志、事务)从业务代码中剥离,形成独立切面,实现代码解耦和复用。其核心概念包括切面(Aspect)、连接点(Join Point)、切点(Pointcut)和通知(Advice)。与OOP形成互补,AOP解决了横向逻辑复用问题,提升了代码可维护性。Spring AOP基于动态代理实现,支持多种通知类型,如前置、后置、环绕等。采用AOP可显著减少重复代码,使业务逻辑更专注,成为企业级开发的基础设施。

2025-08-28 09:52:10 746

原创 面试必问:谈谈你对Spinrg IOC容器的理解——从0到1拆解IOC:理解控制反转的本质与Spring的实现密码

摘要:本文深入解析了IOC(控制反转)的核心概念及其在Spring框架中的实现。首先通过传统开发模式中紧耦合的问题引出IOC的必要性,阐述了IOC如何将对象创建和生命周期管理的控制权从业务代码转移到外部容器。接着分析了IOC与依赖注入(DI)的关系,并详细说明了IOC在解耦、可测试性、生命周期管理和集中配置方面的核心优势。最后简要介绍了Spring IOC容器的实现机制,为理解现代Java框架设计思想提供了理论基础。

2025-08-27 21:04:22 1021

原创 面试常问:什么是灰度发布?灰度发布解决了什么问题?如何实现灰度发布?

摘要:灰度发布 - 安全可控的渐进式发布策略 灰度发布(又称金丝雀发布)是一种渐进式软件发布策略,通过分阶段将新版本功能推送给部分用户(1%→10%→50%→100%),实现边发布边验证。相比传统全量发布,灰度发布具有三大优势:风险可控(问题仅影响小部分用户)、回滚成本低(只需关闭灰度开关)、用户体验平滑(渐进式适应)。典型应用场景包括核心功能迭代、性能敏感变更和UI改版等。 实现灰度发布需解决三个核心问题:流量切分策略(如按用户ID哈希、地域或时间窗口)、路由控制(通过网关或拦截器实现流量分发)和监控回滚

2025-08-27 11:54:43 2400

空空如也

空空如也

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

TA关注的人

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