<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[2402_88094563的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/2402_88094563</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; 2402_88094563]]></copyright><item><title><![CDATA[【数据结构】图论入门：从表示到遍历，手把手带你实现BFS/DFS]]></title><link>https://blog.youkuaiyun.com/2402_88094563/article/details/158841752</link><guid>https://blog.youkuaiyun.com/2402_88094563/article/details/158841752</guid><author>2402_88094563</author><pubDate>Mon, 09 Mar 2026 12:54:36 +0800</pubDate><description><![CDATA[上述实现针对的是无权图。最短路径问题：如 Dijkstra 算法，用于计算一个顶点到其他顶点的最短路径。最小生成树：如 Prim 算法、Kruskal 算法，用于在连通图中找到一棵包含所有顶点且边权和最小的树。网络流：如最大流问题。在处理有权图时，邻接表中存储的不仅仅是邻居顶点，还需要存储边的权重。通常我们会定义一个内部类Edge，包含目标顶点和权重。遍历算法也需要相应调整（如 Dijkstra 使用优先队列）。由于篇幅限制，本文不展开有权图的算法，但希望读者了解，图的表示和遍历是学习这些高级算法的基础。]]></description><category></category></item><item><title><![CDATA[【数据结构】深入浅出字典树（Trie）与并查集（Union-Find）：从原理到Java实现]]></title><link>https://blog.youkuaiyun.com/2402_88094563/article/details/158841623</link><guid>https://blog.youkuaiyun.com/2402_88094563/article/details/158841623</guid><author>2402_88094563</author><pubDate>Mon, 09 Mar 2026 12:47:43 +0800</pubDate><description><![CDATA[字典树，又称前缀树或Trie树，是一种专门用于处理字符串集合的树形数据结构。它的核心思想是利用字符串的公共前缀来减少查询时间，最大限度地避免不必要的字符串比较。想象一个场景：我们要存储一个单词列表，比如，并快速判断某个单词是否在列表中，或者查找所有以某个前缀开头的单词。如果用哈希表存储，可以快速判断单词是否存在，但无法高效地查询前缀。而字典树通过将单词拆分成字符，逐层构建树结构，使得查找前缀变得极其高效。字典树的特点根节点不包含字符，除根节点外每个节点都包含一个字符。]]></description><category></category></item><item><title><![CDATA[【数据结构】高级树——红黑树太难懂？换个思路，从 2-3 树的分裂合并聊起]]></title><link>https://blog.youkuaiyun.com/2402_88094563/article/details/158806907</link><guid>https://blog.youkuaiyun.com/2402_88094563/article/details/158806907</guid><author>2402_88094563</author><pubDate>Sun, 08 Mar 2026 14:41:37 +0800</pubDate><description><![CDATA[2-3树是一种多路查找2-节点：包含1个键和2个子节点（左子树所有键小于该键，右子树所有键大于该键），与BST节点类似。3-节点：包含2个键和3个子节点，通常记为(a, b)，其中a < b。左子树所有键小于a，中间子树所有键介于a和b之间，右子树所有键大于b。重要性质：所有叶子节点都在同一层，因此树是完美平衡的。下图展示了2-3树的结构（用文字描述）：[50]/    \这里根节点是2-节点（50），左子节点是3-节点（20,30），右子节点也是3-节点（60,80）。2-3树。]]></description><category></category></item><item><title><![CDATA[【数据结构】树基础——从 BST 到 AVL：手写实现二叉树的“平衡艺术”]]></title><link>https://blog.youkuaiyun.com/2402_88094563/article/details/158806736</link><guid>https://blog.youkuaiyun.com/2402_88094563/article/details/158806736</guid><author>2402_88094563</author><pubDate>Sun, 08 Mar 2026 14:21:59 +0800</pubDate><description><![CDATA[二叉搜索树是一棵二叉树，满足以下性质：每个节点有一个键（key）和值（value），通常键是唯一的。左子树所有节点的键都小于根节点的键。右子树所有节点的键都大于根节点的键。左右子树也分别是二叉搜索树。这个性质使得我们可以在O(log n)（平均）时间内完成查找、插入和删除。但最坏情况下，如果插入的数据是有序的，BST会退化成一条链表，操作复杂度变为O(n)。这就是我们需要平衡树的理由。每个节点包含键、值、左子节点引用、右子节点引用。int key;// 这里用String作为值类型，方便演示。]]></description><category></category></item><item><title><![CDATA[【数据结构】进阶大厂必备：彻底搞懂堆（Heap）的结构、堆排序及优先队列实现]]></title><link>https://blog.youkuaiyun.com/2402_88094563/article/details/158741163</link><guid>https://blog.youkuaiyun.com/2402_88094563/article/details/158741163</guid><author>2402_88094563</author><pubDate>Sat, 07 Mar 2026 13:08:26 +0800</pubDate><description><![CDATA[完全二叉树：除了最后一层，其他层的节点都是满的，且最后一层的节点尽可能靠左排列。堆序性质：对于最小堆，任意父节点的值小于等于其子节点的值；对于最大堆，任意父节点的值大于等于其子节点的值。下图是一个最小堆的示例（数字代表节点的值）：5/ \8   9/ \12  11可以看到，每个父节点都小于它的子节点，根节点（5）是整个堆中最小的元素。最大堆则相反，根节点最大。// 存储堆元素的数组// 当前堆中元素个数size = 0;/**]]></description><category></category></item><item><title><![CDATA[【数据结构进阶版】从数组到哈希表：用五大基础数据结构拼出一台 LRU 缓存引擎]]></title><link>https://blog.youkuaiyun.com/2402_88094563/article/details/158740884</link><guid>https://blog.youkuaiyun.com/2402_88094563/article/details/158740884</guid><author>2402_88094563</author><pubDate>Sat, 07 Mar 2026 13:08:01 +0800</pubDate><description><![CDATA[LRU 是的缩写，即最近最少使用。它是一种缓存淘汰策略：当缓存空间满时，优先淘汰最长时间没有被访问的数据。现实类比：手机后台 App 管理。当你打开多个应用，系统内存不足时，会关闭你最长时间没用的那个应用。应用场景：Redis 缓存、操作系统页面置换、浏览器历史记录等。每个节点存储 key、value 以及前后指针。存储 key 是为了在淘汰时能从哈希表中删除对应的条目。int key;int value;哈希表提供了 O(1) 的键值查找。双向链表保证了节点顺序的快速维护（移动、删除）。]]></description><category></category></item><item><title><![CDATA[【数据结构】当两个不同的 Key 撞在了一起：HashMap 的“事故”现场与急救指南]]></title><link>https://blog.youkuaiyun.com/2402_88094563/article/details/158740306</link><guid>https://blog.youkuaiyun.com/2402_88094563/article/details/158740306</guid><author>2402_88094563</author><pubDate>Fri, 06 Mar 2026 17:37:28 +0800</pubDate><description><![CDATA[现实很骨感：不同的 key 经过哈希函数计算后，可能得到相同的下标。比如"apple"和"banana"都映射到了下标 3。这种情况称为哈希冲突（Hash Collision）。冲突是无法完全避免的，因为数组长度有限，而 key 的可能性无限。所以我们必须有办法解决冲突。K key;V value;// 指向下一个节点，用于拉链 public Entry (K key, V value, Entry<K, V> next) {// 默认数组长度// 桶数组// 当前存储的键值对数量。]]></description><category></category></item><item><title><![CDATA[【数据结构】栈的艺术：从括号匹配到 ArrayDeque 的数组迁移实现]]></title><link>https://blog.youkuaiyun.com/2402_88094563/article/details/158737026</link><guid>https://blog.youkuaiyun.com/2402_88094563/article/details/158737026</guid><author>2402_88094563</author><pubDate>Fri, 06 Mar 2026 15:18:01 +0800</pubDate><description><![CDATA[LIFO 特性：通过push和pop在数组末尾操作实现。数组实现：用数组存储，size记录元素个数，栈顶在size-1处。动态扩容：当数组满时，创建新数组并复制原数据，保证栈可以无限增长。数据迁移：扩容时的复制操作，是数组实现动态容量的核心。]]></description><category></category></item><item><title><![CDATA[【数据结构】队列全家桶：数组实现、堆与延迟队列]]></title><link>https://blog.youkuaiyun.com/2402_88094563/article/details/158690993</link><guid>https://blog.youkuaiyun.com/2402_88094563/article/details/158690993</guid><author>2402_88094563</author><pubDate>Thu, 05 Mar 2026 11:03:18 +0800</pubDate><description><![CDATA[本文深入探讨了队列数据结构及其变种实现。首先介绍了队列的FIFO特性及基本操作，然后详细讲解了基于数组的循环队列实现方案，解决了简单数组队列的&quot;假溢出&quot;问题。接着阐述了优先队列的概念，展示了如何通过最小堆实现优先队列及其应用场景。最后介绍了延迟队列的设计思路，结合优先队列和时间维度实现定时任务调度功能。文章通过具体代码示例，完整呈现了从基础队列到高级队列变种的实现路径，为开发各类队列相关应用提供了实用参考。]]></description><category></category></item><item><title><![CDATA[【数据结构】拆解 ArrayList：从内存布局到扩容机制实战]]></title><link>https://blog.youkuaiyun.com/2402_88094563/article/details/158632389</link><guid>https://blog.youkuaiyun.com/2402_88094563/article/details/158632389</guid><author>2402_88094563</author><pubDate>Wed, 04 Mar 2026 00:37:02 +0800</pubDate><description><![CDATA[数组（Array）是一种线性表数据结构，它用一组连续的内存空间来存储相同类型的数据。每个元素占用相同大小的内存，通过下标（索引）可以直接计算出对应元素的内存地址。例如：一个会在内存中开辟一块连续的 5×4=20 字节的空间（假设 int 占 4 字节）。元素arr[0]的地址是起始地址，arr[1]的地址是起始地址+4，以此类推。// 存储元素的数组// 实际元素个数// 默认初始容量// 构造方法：指定初始容量// 无参构造，使用默认容量解释是实际存放元素的数组，由于泛型擦除。]]></description><category></category></item><item><title><![CDATA[【数据结构】三部曲：搞懂链表分类、掌握核心操作、复刻官方 LinkedList]]></title><link>https://blog.youkuaiyun.com/2402_88094563/article/details/158544475</link><guid>https://blog.youkuaiyun.com/2402_88094563/article/details/158544475</guid><author>2402_88094563</author><pubDate>Sun, 01 Mar 2026 23:11:18 +0800</pubDate><description><![CDATA[如果你想找第 100 个元素，Java 会先看一共多少人。这意味着它既能当队列用（先进先出），也能当栈用（先进后出）。：手里有两张纸条，一张写着“下一站”，一张写着“上一站”。造一个新节点，让它的 next 指向 oldFirst。每个盒子要装三样东西：数据、前面的地址、后面的地址。把公司的“门牌号”（first）挂在新人头上。遍历链表，找到第一个匹配的元素并解除链接。：最后一个人手里拿着指向第一个人的纸条。记住现在的“老大”（oldFirst）。，方便垃圾回收（GC）赶紧把内存腾出来。]]></description><category></category></item><item><title><![CDATA[阿里巴巴编程规范---编程规约之常量定义与代码格式篇]]></title><link>https://blog.youkuaiyun.com/2402_88094563/article/details/157838435</link><guid>https://blog.youkuaiyun.com/2402_88094563/article/details/157838435</guid><author>2402_88094563</author><pubDate>Sat, 07 Feb 2026 10:20:57 +0800</pubDate><description><![CDATA[1.【强制】不允许任何魔法值即未经预先定义的常量直接出现在代码中。反例：// 本例中，开发者 A 定义了缓存的 key，然后开发者 B 使用缓存时少了下划线，即 key 是"Id#taobao"+tradeId，导致出现故障尤其是Enum枚举类里2.【强制】在 long 或者 Long 赋值时，数值后使用大写字母 L，不能是小写字母 l，小写容易跟数字混淆，造成误解。说明：写的是数字的 21，还是 Long 型的 2？（三）代码格式1.【强制】]]></description><category></category></item><item><title><![CDATA[阿里巴巴编程规范---编程规约之命名风格篇]]></title><link>https://blog.youkuaiyun.com/2402_88094563/article/details/157837468</link><guid>https://blog.youkuaiyun.com/2402_88094563/article/details/157837468</guid><author>2402_88094563</author><pubDate>Sat, 07 Feb 2026 10:05:25 +0800</pubDate><description><![CDATA[布尔属性加is前缀会导致框架通过 getter 反向推导的属性名（如deleted）与实际属性名（如isDeleted）不匹配，引发序列化 / 映射错误；MySQL 用is_xxx命名布尔字段是为了可读性，POJO 用xxx命名是为了适配框架解析规则；两者的衔接依赖 MyBatis 的，将数据库is_xxx字段映射到 POJO 的xxx属性，兼顾两种规范。Ⅹ.包名统一使用小写，点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式，但是类名如果有复数含义，类名可以使用复数形式。]]></description><category></category></item><item><title><![CDATA[Java枚举、校验注解与MyBatis-Plus条件构造器方法]]></title><link>https://blog.youkuaiyun.com/2402_88094563/article/details/157555847</link><guid>https://blog.youkuaiyun.com/2402_88094563/article/details/157555847</guid><author>2402_88094563</author><pubDate>Fri, 30 Jan 2026 23:55:51 +0800</pubDate><description><![CDATA[Java 枚举是一个特殊的类，一般表示一组常量。Java 枚举类使用 enum 关键字来定义，各个常量使用逗号 , 来分割。（下面是JPA默认时的枚举，mybatis时存储的是name，可以看（3）⑥）enum Color// 执行输出结果//输出RED。]]></description><category></category></item><item><title><![CDATA[Socket通信基础原理（会话层核心）]]></title><link>https://blog.youkuaiyun.com/2402_88094563/article/details/155650825</link><guid>https://blog.youkuaiyun.com/2402_88094563/article/details/155650825</guid><author>2402_88094563</author><pubDate>Sun, 07 Dec 2025 01:38:24 +0800</pubDate><description><![CDATA[本文系统介绍了Socket网络通信的实现与优化方案。首先讲解了Socket的基本概念及其在网络体系中的位置，然后详细演示了基础通信的实现步骤，包括服务器端和客户端的代码实现。针对单线程模式的局限性，提出了多线程解决方案，并进一步引入线程池优化，分析了线程池的核心参数、运行流程及四种拒绝策略。文章比较了单线程、多线程和线程池三种方案的优缺点，并指出线程池最适合生产环境高并发场景。最后拓展了OSI七层模型知识，强调Socket在会话层的关键作用。通过从基础到优化的完整演进，展示了构建高效网络应用系统的技术路径。]]></description><category></category></item><item><title><![CDATA[java基础深入：包装类的剖析]]></title><link>https://blog.youkuaiyun.com/2402_88094563/article/details/154318590</link><guid>https://blog.youkuaiyun.com/2402_88094563/article/details/154318590</guid><author>2402_88094563</author><pubDate>Tue, 04 Nov 2025 00:15:09 +0800</pubDate><description><![CDATA[Java包装类将基本数据类型转为对象，实现面向对象特性。通过自动装箱（基本类型→包装类）和拆箱（包装类→基本类型）机制，使基本类型能参与对象操作。装箱调用valueOf()方法，在-128~127范围内会复用缓存对象；拆箱调用intValue()返回存储的int值。注意包装类比较时，&quot;==&quot;比较地址（相同值可能不同地址），equals()比较值。包装类解决了基本类型不能作为对象使用的问题，支持泛型等特性，是Java面向对象设计的重要补充。]]></description><category></category></item><item><title><![CDATA[两个递增链表合并为一个递增链表（C++)]]></title><link>https://blog.youkuaiyun.com/2402_88094563/article/details/153661718</link><guid>https://blog.youkuaiyun.com/2402_88094563/article/details/153661718</guid><author>2402_88094563</author><pubDate>Tue, 21 Oct 2025 00:32:39 +0800</pubDate><description><![CDATA[【代码】两个递增链表合并为一个递增链表（C++)]]></description><category></category></item><item><title><![CDATA[简易计算器（无优先级）]]></title><link>https://blog.youkuaiyun.com/2402_88094563/article/details/153654506</link><guid>https://blog.youkuaiyun.com/2402_88094563/article/details/153654506</guid><author>2402_88094563</author><pubDate>Mon, 20 Oct 2025 22:14:35 +0800</pubDate><description><![CDATA[【代码】简易计算器（无优先级）]]></description><category></category></item><item><title><![CDATA[环境配置经验——pytorch-wheels-cu113安装报错解决+pycharm虚拟环境python版本不一致问题解决]]></title><link>https://blog.youkuaiyun.com/2402_88094563/article/details/152054012</link><guid>https://blog.youkuaiyun.com/2402_88094563/article/details/152054012</guid><author>2402_88094563</author><pubDate>Thu, 25 Sep 2025 00:04:42 +0800</pubDate><description><![CDATA[摘要：用户尝试安装PyTorch时遇到文件路径错误，提示找不到指定版本的whl文件。建议从阿里云镜像下载正确版本并放置到对应目录。同时发现PyTorch虚拟环境存在Python版本冲突问题：conda list与python -V显示版本不一致。解决方法是先退出所有虚拟环境（包括.venv），再重新激活目标环境。其中.venv可能是之前配置其他项目时遗留的虚拟环境，与当前虚拟环境产生了冲突。]]></description><category></category></item><item><title><![CDATA[cf 1050 div4 C题题解具体分析]]></title><link>https://blog.youkuaiyun.com/2402_88094563/article/details/151713229</link><guid>https://blog.youkuaiyun.com/2402_88094563/article/details/151713229</guid><author>2402_88094563</author><pubDate>Mon, 15 Sep 2025 13:08:23 +0800</pubDate><description><![CDATA[Farmer John 正在运行 FitnessGram 起搏器测试！农夫约翰花跑到体育馆的另一边。因此，在每一分钟开始时，FJ可以选择要么跑到健身房的另一边，要么留在原地。如果他选择跑到健身房的另一边，他会获得。FJ 将运行 Pacer 测试，直到开始m-第分钟。最初（在0-th minute），FJ 位于健身房的起始侧，我们将其表示为侧0.健身房的另一侧表示侧面1起搏器测试音频播放n次。在第aiminute，FJ 必须位于bi一侧。]]></description><category></category></item></channel></rss>