自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 Git的使用和本地部署---在IDEA中的使用

本文介绍了Git版本控制工具的使用指南,主要包括:1. Git与Linux相同的常用指令;2. Git安装方法及GUI/Bash工具说明;3. 基本配置流程;4. 本地仓库操作(初始化、提交、分支管理等);5. 远程仓库操作(SSH配置、推送、克隆等);6. IDEA集成Git的方法。文章详细说明了从安装配置到本地/远程仓库管理的完整工作流程,并提供了常见命令的使用示例和注意事项,适合Git初学者快速掌握基本操作。

2025-12-30 16:22:14 848

原创 零基础手撕二叉排序树

本文系统讲解了二叉排序树(BST)的核心原理与Java实现。BST通过"左小右大"的特性实现高效数据组织,时间复杂度为O(logn)。文章详细解析了BST的基础架构设计、有序插入逻辑、四种遍历方式(先序/中序/后序/层次)的实现,以及基于有序特性的查询优化。通过完整测试案例验证了各功能的正确性,包括后序遍历(0→4→3→6→9→7→5)和层次遍历(5→3→7→0→4→6→9)的正确输出。

2025-12-17 17:36:31 1226

原创 从代码到原理:冒泡、快排、堆排序深度解析

排序算法的学习核心不在于背诵代码,而在于理解背后的思想:冒泡排序的 “相邻交换”、快速排序的 “分治分区”、堆排序的 “结构利用”,这些思想也是后续学习更复杂算法的基础。实际开发中,无需重复造轮子(如直接使用面对特殊场景选择最优算法;排查因排序导致的性能问题;应对面试中的算法考察。希望本文能帮助你从代码层面理解排序算法的本质,真正做到 “知其然,更知其所以然”。

2025-12-15 23:51:00 1071

原创 Java Socket 网络编程实战(含线程池优化)

Socket是计算机网络中进行进程间通信的核心技术,它作为通信端点封装了底层协议复杂性,提供标准API接口。本文系统介绍了Socket的概念、工作原理及在OSI模型中的位置,并详细展示了Java实现的Socket通信开发流程:从基础单向通信到多客户端并发处理,再到线程池优化方案。通过ServerSocket和Socket类实现TCP连接,利用输入输出流进行数据传输,采用线程池解决并发性能问题。

2025-12-03 21:55:34 1174

原创 一篇搞懂 Java 注解:从基础到实战,新手也能轻松上手

理解了元注解,自定义注解就非常简单了。注解的定义语法和接口类似,只是多了使用@interface关键字定义注解;添加元注解(指定@Target和@Retention定义注解的属性(可选,类似接口的方法)。需求:定义一个@Table注解,用于标记 Java 类对应的数据库表名。// 元注解:指定注解作用于类// 元注解:运行时保留,可通过反射获取// 生成javadoc时包含该注解// 注解的属性:表名,设置默认值为"default_table"注解属性的说明。

2025-11-21 15:14:39 970

原创 深入理解 Java Stream 流:函数式编程的优雅实践(全面进阶版)

许多初学者误以为Stream只是“更酷的 for 循环”,但这种理解远远不够。在 Java 中,Stream 是一种对数据源进行声明式计算的抽象管道,其设计灵感来源于函数式编程语言(如 Haskell)和 Unix 管道(pipe)模型。理解本质:Stream 是声明式、惰性、不可变的计算管道。选择合适场景:适合数据转换、过滤、聚合,不适合复杂控制流。善用 Collector:它是连接 Stream 与结果容器的桥梁。慎用并行:性能提升非自动获得,需实测验证。避免副作用。

2025-11-16 18:26:00 1180

原创 Java反射机制:深入底层的“破窗锤”与实践指南

反射是Java中突破封装、实现动态性的核心技术,它就像一把“双刃剑”——用得好能成为框架开发的利器,用得差则会破坏代码的安全性和可维护性。核心认知:反射的本质是操作Class对象,而Class对象是JVM加载类时创建的元数据载体。核心API围绕构造器、属性、方法展开,用于获取所有权限的成员,用于突破私有限制。反射的核心应用是动态代理和框架开发,日常业务代码应尽量避免使用。性能和安全是反射的主要痛点,可通过缓存、MethodHandle等方式优化。

2025-11-15 12:12:21 1555

原创 深入理解Java异常体系:从原理到实战的完整指南

JDK内置异常仅能描述通用场景,在业务开发中,我们需要自定义异常来表达特定业务错误(如“用户余额不足”“订单状态异常”)。继承RuntimeException(非受检)或Exception(受检),并遵循异常命名规范(以Exception结尾)。实际开发中,非受检异常更灵活(无需强制捕获),因此自定义异常通常继承,并添加必要的构造方法(默认构造、带消息的构造、带消息和根源异常的构造)。/*** 自定义业务异常:用户余额不足异常*/// 无参构造super();// 带异常消息的构造。

2025-11-13 20:02:06 1149

原创 Java- ArrayList 深度解析:从底层原理到高级应用与性能优化

ArrayList 是中最常用的,它继承自 AbstractList、实现了 List 接口,兼具数组的高效访问和集合的灵活扩容特性。本文将从底层数据结构、核心 API 实现、扩容机制、性能优化到常见误区,全方位拆解 ArrayList 的核心知识点,结合实战代码帮助开发者彻底掌握这一基础集合。

2025-11-12 20:40:21 1263

原创 Java 数组深度解析:从基础语法到高级应用与性能优化

数组是相同数据类型元素的有序集合存储一致性:数组中所有元素必须是同一类型(基本类型或引用类型),确保内存布局规整;内存连续性:元素在内存中连续存储,通过索引可直接定位元素位置,访问效率极高;长度固定性:数组一旦创建,长度不可修改(若需动态扩容,需手动实现或使用集合框架)。数组的本质是 “内存块的连续分配”,例如在内存中的存储形式:plaintext索引:0 1 2值: 1 2 3内存地址:0x100 0x104 0x108(int占4字节,地址连续递增)// 方式1:推荐,类型与数组标识分离。

2025-11-11 01:00:00 1003

原创 从二叉树到红黑树:Java 树形结构的演进与实现

树形结构是计算机科学中最重要的数据结构之一,它在查找、排序、索引等场景中发挥着不可替代的作用。本文将从最基础的二叉树开始,逐步深入到二叉查找树、平衡二叉树,最终解析红黑树的设计原理与 Java 实现,帮助你理解树形结构的演进逻辑与应用场景。二叉树是一种每个节点最多拥有两个子节点的树形结构,这两个子节点分别被称为左子节点和右子节点。与线性结构(如数组、链表)相比,二叉树的非线性特性使其在数据检索时具有更高的效率潜力。第 i 层最多有 2^(i-1) 个节点。

2025-11-09 23:03:23 976

原创 从两数之和到重复元素判断:HashMap 在数组问题中的核心应用对比

两数之和与存在重复元素 II 看似是不同类型的题目,但本质都是 “通过元素值查找索引信息”,而 HashMap 的 “键值映射” 特性完美适配这类需求。HashMap 的核心价值:在数组问题中,将 “元素值→索引” 的查找从 O (n) 降至 O (1),是解决 “超时” 问题的关键;通用框架的复用性:掌握 “初始化→遍历→判断→存储→返回” 的流程,可应对大多数 “数组 + 值 + 索引” 的算法题;需求驱动细节调整。

2025-11-07 22:00:11 1005

原创 Leetcode-反转链表 、K 个一组翻转链表

对比点206题25题反转范围整个链表每k个节点为一组思想核心双指针反转分组 + 调用反转难点理解指针移动分段截取与拼接时间复杂度O(n)O(n)空间复杂度O(1)O(1)(递归O(n))206题教你如何反转链表;25题教你如何在反转的基础上“分段操作并拼接”,是反转链表的进阶应用。

2025-11-06 19:12:44 1122

原创 Java 包装类与泛型深度解析:从基础原理到 128 陷阱实战指南

包装类使用原则优先使用自动装箱 / 拆箱,简化代码(避免手动调用valueOf()xxxValue()比较数值用equals(),比较地址用==(明确需求时才用==避免(已过时),优先用或自动装箱(触发缓存);处理null值:包装类可存储null自动拆箱前需判断非null,避免空指针。泛型与包装类协同原则泛型参数必须用包装类(如),不可用基本类型(如List<int>泛型集合添加基本类型时,依赖自动装箱(如→;遍历泛型集合时,增强 for 循环会自动拆箱(如),需确保集合中无null。

2025-11-05 08:39:42 959

原创 Java 包(Package)与 final 关键字详解:从语法到工程化实践

package特性核心作用关键注意事项包(Package)组织代码结构、解决类名冲突、控制访问权限包名用反向域名,工程化项目按功能分层设计final 修饰类禁止类被继承内置类如 String、Math 都是 final 类final 修饰方法禁止方法被重写允许重载,可提升静态绑定性能final 修饰变量禁止变量重新赋值(基本类型值不变,引用地址不变)成员变量需在声明时或构造方法中初始化,静态变量需在声明时或静态代码块中初始化。

2025-11-04 16:29:05 916

原创 Java 多态详解:从原理到实战,掌握面向对象的灵魂特性

同一方法调用,在不同对象上表现出不同的行为。举个生活中的例子:“按下播放键” 这个行为,在 “手机” 上会播放音乐,在 “电视” 上会播放视频,在 “音响” 上会播放电台 —— 这就是多态的直观体现。在 Java 中,多态主要通过“父类引用指向子类对象” 实现,结合方法重写(Override)机制,让程序能根据运行时对象的实际类型,调用对应的方法逻辑。

2025-11-03 17:48:49 1203

原创 Java 继承详解:从概念到实战,吃透面向对象的核心特性

/ 父类:Person(封装人与生俱来的共性)// 共性属性(注意:此处用protected,子类可访问,后面会讲访问权限)// 共性方法:吃饭System.out.println(name + "正在吃饭");// 共性方法:睡觉System.out.println(name + "正在睡觉,今年" + age + "岁");// 父类构造方法(用于初始化属性)// 子类:Student(继承Person,扩展学生专属功能)// 子类专属属性:学号。

2025-11-02 23:09:56 1635

原创 LeeCode 209. 长度最小的子数组

入门阶段:先掌握暴力解法,理解 “枚举子数组” 的基本思路,建立对问题的直观认知;进阶阶段:深入理解滑动窗口的 “动态调整” 逻辑 —— 它的本质是 “用空间换时间”(虽然此处空间未增加,但通过指针减少了重复计算),是解决 “连续子数组 / 子串” 问题的通用优化手段;实战选择:若数组长度较小,暴力解法可快速实现;若数组长度较大(如 LeetCode 中等 / 困难难度题目),必须使用滑动窗口等优化思路。通过本文的讲解,相信你已掌握 “长度最小的子数组” 的两种核心解法。

2025-10-24 21:44:15 1142

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

两种方法的选择取决于原数组是否有序以及对时间 / 空间效率的要求。组成的新数组,要求也按。

2025-10-22 11:14:49 560

原创 深入拆解 Java 基础:从变量定义、方法编写到递归调用实例分析

在 Java 编程入门阶段,变量定义、方法编写是构建代码的基础框架,而递归调用则是方法调用中极具逻辑性的特殊形式。本文将从基础概念到实例拆解,逐层深入讲解,帮助初学者夯实 Java 核心基础。变量是 Java 程序中用于存储数据的基本单元,所有运算和逻辑处理都依赖于变量承载的数据。变量定义需遵循固定格式,确保数据的有效性和可调用性。在Java中分为基本数据类型和引用数据类型!修饰符:控制方法的访问权限,入门阶段常用(公共静态方法),可直接通过类名调用。返回值类型。

2025-10-21 16:39:40 1278

原创 LeetCode 15. 三数之和

首选双指针法性能更优:常数因子更小,实际运行更快代码更健壮:去重逻辑简单,不容易出错面试友好:展示了对指针操作的熟练程度扩展性强:类似问题(四数之和等)都可沿用此思路哈希表法仅在特定场景考虑:当问题不允许排序原数组时作为理解问题的辅助思路排序是基础:两种方法都需要先排序去重是关键:避免重复三元组是本题难点提前终止:当a > 0时直接返回,重要优化边界处理:注意数组长度检查和指针越界双指针法是解决这类"多数之和"问题的标准且最优解法,建议重点掌握!

2025-10-20 20:00:40 804

原创 数据结构与算法---基数排序

基数排序算法是必须掌握的一种基础算法,在很多竞赛和公司面试题中都可能会出现,而且作为基础算法我们必须拿下,下面让我们来深入了解基数排序算法。基数排序(Radix Sort)是一种非比较型整数排序算法,核心应用场景是对数字(如整数、可按位拆分的数值型数据)进行排序。它的基本思想是按 “位” 分层排序:既可以从最低有效位(如个位)开始,依次处理到最高有效位(如百位);也可以从最高有效位开始,逐步处理到最低有效位。在每一层的位排序中,通常会依赖计数排序或桶排序作为子排序算法,以保证该位排序的效率与稳定性。

2025-10-14 16:42:15 923

原创 JavaScript 变量与数据类型全面解析

本文系统梳理了JavaScript的核心语法基础,重点讲解了变量定义(隐藏式与显示式)、数据类型(弱类型与强类型差异)、类型转换(自动与强制转换)、作用域规则(全局与局部变量)、变量提升特性及常量声明。文章通过对比Java等强类型语言,突出了JS作为弱类型语言的灵活性特点,并提供了字符串常用API等实用技巧,帮助初学者快速掌握JS编程基础。全文以实例说明核心概念,强调开发中应避免的常见错误,为前端开发打下坚实基础。

2025-10-09 17:16:18 750

空空如也

空空如也

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

TA关注的人

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