- 博客(10)
- 收藏
- 关注
原创 单例模式学习笔记
一个类只能有一个实例,并提供全局访问点。有些东西,真的只需要一个。比如配置管理器、线程池、数据库连接池,或者你的日志记录器。在编程里,如果我们不小心 new 出多个实例,可能就会造成资源浪费、状态混乱,甚至程序崩溃。单例模式就是用来避免这种情况的。提示:以下是本篇文章正文内容,下面案例可供参考单例模式的核心就是“保证唯一”。选择哪种实现方式,取决于对延迟加载、线程安全和防反射的要求。简单场景:饿汉式。懒加载 + 线程安全:静态内部类。绝对安全:枚举。
2026-03-23 17:27:13
488
原创 线程池保姆级教程:从零开始彻底搞懂它
今天我们要一起学习一个在并发编程中非常重要且实用的概念——线程池。这篇教程是专门为零基础的同学准备的,请放心食用!重点:用 ThreadPoolExecutor 自定义线程池,不用 Executors。线程池是并发编程中非常实用的一把利器,掌握了它,我们就能更高效地处理多线程任务,同时避免资源耗尽的风险。希望这篇保姆级教程对你有所帮助。如果你有任何疑问,欢迎在评论区留言,我们一起讨论。编程路上,我们一起加油!
2026-03-14 00:51:14
422
原创 解决IDEA Maven报错:从「内置」到「本地」的完整切换
摘要:IDEA使用内置Maven时因修改settings.xml失败导致依赖报错。问题根源是IDEA仍使用内置Maven而非本地配置。解决步骤:1)下载本地Maven;2)在IDEA设置中修改Maven home path为本地路径;3)刷新项目。最终成功加载依赖,建议避免修改内置文件。该问题排查耗时2小时,关键点在于检查Maven home path设置。(149字)
2026-03-05 14:31:41
809
原创 从零开始:用Java写一个简单的菜品管理系统
在Java学习过程中,编写一个简单的管理系统是一个很好的练手项目。今天我们就来分享一个基于控制台交互的菜品管理系统,它包含了菜品的增删改查、动态数组扩容等基本功能,非常适合初学者理解面向对象编程、数组操作以及用户交互的设计思路。通过这个小项目,我们实践了Java面向对象编程的基本思想,掌握了数组操作、用户交互、字符串处理等实用技能。初学者可以以此为基础,逐步完善功能,甚至尝试加入GUI界面或数据库连接,向更完整的项目迈进。希望这篇博客对正在学习Java的你有所帮助!
2026-03-03 16:50:08
918
原创 Git 安装保姆级教程(一):从零开始,手把手教你搞定版本控制
Git 是目前最流行的版本控制工具,它可以帮你记录代码的每一次修改,让你随时回到历史版本,还能方便地和别人协作开发。无论你是写 Java、Python 还是前端代码,学会 Git 都是程序员的基本功。本教程将带你从零开始,一步步完成 Git 的下载、安装、配置,并简单演示如何使用。跟着做,保证你能成功!恭喜你!跟着本教程一步步操作,现在 Git 已经成功安装在电脑上了。🎉 这是我们踏入版本控制世界的第一步,也是成为专业开发者不可或缺的技能。
2026-03-01 15:15:57
1380
原创 LeetCode 11:盛最多水的容器——双指针法的完美应用
在计算机科学的世界里,有些问题看似简单,却蕴含着深刻的算法思想。LeetCode 第 11 题「盛最多水的容器」便是这样一道经典题目。它以一个直观的生活场景——选择两根柱子构成容器盛水——作为切入点,考察我们对数组操作、数学建模以及算法优化的综合能力。LeetCode 11 题是一道非常经典的双指针入门题,它简洁而优美地展示了如何通过数学推理优化算法。
2026-02-20 01:09:56
820
原创 LeetCode 283. 移动零 —— 双指针法的巧妙应用
在 LeetCode 上,第 283 题「移动零」是一道非常经典的数组操作题。它看似简单,但考察了我们对数组元素移动的理解,以及对双指针技巧的掌握。本文我们将从暴力解法一步步优化到最优的双指针解法,并深入解析每一步的原理,彻底掌握这道题。原地操作:不允许使用额外数组,只能在原数组上修改,这就要求我们掌握覆盖、交换等基本操作。保持相对顺序:非零元素的顺序不能改变,这意味着我们不能简单地排序或随意移动,必须按原序处理。
2026-02-19 00:14:52
704
原创 LeetCode 128:最长连续序列 —— 一次遍历,O(n) 找出最长“连号”
在 LeetCode 上,第 128 题「最长连续序列」是一道非常经典的算法题,它不仅考察了对数组的灵活处理,更重要的是要求我们在 O(n) 的时间复杂度内解决问题。我们初次接触可能会想到排序,但排序的时间复杂度是 O(n log n),不符合题目要求。那么如何做到 O(n) 呢?今天我们就来详细拆解这道题的解法,从预备知识到代码实现,彻底掌握它。这道题的精髓在于利用哈希集合的快速查找特性,并结合“只从起点开始统计”的策略,巧妙地避开了排序带来的额外时间开销。
2026-02-15 23:12:23
812
原创 LeetCode 49:字母异位词分组 —— 从零开始,彻底吃透这道经典题
LeetCode 49 题是哈希表专题的经典入门题,解法清晰、代码简洁。把它完全搞懂,不仅能帮我们通过这道题,更能让我们理解“如何将现实问题转化为程序逻辑”的基本方法。这段代码虽然短,但包含了 哈希表、排序、集合转换 等多个知识点。getOrDefault 是让代码更简洁优雅,但不是必须的。核心是找到一组数据的共同标识,这是哈希表分组的通用思想。以后再遇到“根据某个特征分组”的题(比如按频率、按长度、按奇偶),我们就能马上想到用 HashMap 了!
2026-02-13 01:08:24
1007
原创 LeetCode 1. 两数之和 —— 从暴力破解到哈希表,彻底搞懂 HashMap
这是 LeetCode 的第一题,也是无数算法学习者梦开始的地方。它看似简单,却隐藏着数据结构中最重要的思想之一:空间换时间。哈希表到底是怎么建立的?为什么它能“瞬间”找到我要的值?Java 里为什么不能写 hashmap[nums[i]] = i?先判断,后插入—— 避免使用同一个元素两次。哈希表的键是数组元素的值,值是下标—— 不要搞反。Java 不能用 [ ] 操作 HashMap—— 记住用 put 和 get。
2026-02-12 19:03:54
942
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅