<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Alicea_Wind的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Alicea_Wind</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Alicea_Wind]]></copyright><item><title><![CDATA[JavaNIO摸鱼聊天室：单线程玩转多连接]]></title><link>https://blog.youkuaiyun.com/Alicea_Wind/article/details/161775308</link><guid>https://blog.youkuaiyun.com/Alicea_Wind/article/details/161775308</guid><author>Alicea_Wind</author><pubDate>Sun, 07 Jun 2026 17:21:46 +0800</pubDate><description><![CDATA[本文介绍了一个基于Java NIO的轻量级即时通信软件NIO摸鱼聊天室;。该项目聚焦Java NIO核心组件：ServerSocketChannel、SocketChannel、Selector、SelectionKey和ByteBuffer，实现了多客户端连接管理、群聊/私聊功能。相比传统BIO模型，NIO通过非阻塞通道和Selector多路复用机制，使用单线程高效处理多个连接。项目采用简单文本协议处理用户指令，通过双Map维护用户状态，客户端采用双线程设计实现输入/接收分离。]]></description><category></category></item><item><title><![CDATA[拿一个 7000 字故事，把大模型拉上刑场：用 Java 从 0 到 1 做一个上下文记忆压测器]]></title><link>https://blog.youkuaiyun.com/Alicea_Wind/article/details/160154893</link><guid>https://blog.youkuaiyun.com/Alicea_Wind/article/details/160154893</guid><author>Alicea_Wind</author><pubDate>Tue, 14 Apr 2026 19:44:15 +0800</pubDate><description><![CDATA[本文探讨了大模型在长上下文记忆中的表现问题，通过构建一个&quot;上下文记忆压测器&quot;进行测试。作者设计了一个包含多人物、多地点、多时间点的复杂故事作为测试素材，通过Java程序持续追问模型细节来评估其记忆能力。测试发现模型在短文本中表现良好，但在长文本、多轮对话中会出现记忆混淆、答非所问等问题。文章分析了模型记忆的局限性，并提出了改进方向，如优化提问方式、调整温度参数等。这种测试方法虽然简单，但能有效检验模型记忆能力的边界，为开发更可靠的Agent系统提供参考。]]></description><category></category></item><item><title><![CDATA[Alicea Wind的个人网站开发日志（2）]]></title><link>https://blog.youkuaiyun.com/Alicea_Wind/article/details/157810869</link><guid>https://blog.youkuaiyun.com/Alicea_Wind/article/details/157810869</guid><author>Alicea_Wind</author><pubDate>Fri, 06 Feb 2026 19:02:28 +0800</pubDate><description><![CDATA[第二天的工作，重点已经不在“页面长什么样”，而是开始思考：这个网站。第一天我把首页结构和视觉大致定下来之后，很快就意识到一个问题——如果所有内容都只是写死在前端，那这个网站本质上还是一张“展示图”，而不是一个正在运转的系统。哪怕是个人站，也应该有最基本的数据流动。。]]></description><category></category></item><item><title><![CDATA[Alicea Wind的个人网站开发日志（1）]]></title><link>https://blog.youkuaiyun.com/Alicea_Wind/article/details/157771463</link><guid>https://blog.youkuaiyun.com/Alicea_Wind/article/details/157771463</guid><author>Alicea_Wind</author><pubDate>Thu, 05 Feb 2026 19:10:23 +0800</pubDate><description><![CDATA[这个选择本身没什么好说的，开发体验足够顺，构建工具也足够现代，适合做一个结构清晰、可扩展的个人站。目标并不复杂，也不是一开始就想着“上线即成品”，而是希望它能成为一个长期生长的东西：能展示项目、能写技术文章，也能承载一些真实的前后端交互，而不是只停留在静态页面。因为它已经不是“只有页面的前端项目”，也不是“孤立跑着的后端服务”，而是一个真正开始有“系统感”的东西。先不做持久化，只用内存里的变量来累计访问次数，每请求一次就加一，然后返回当前的计数值。的请求，这样前后端边界非常清楚，也能尽早暴露配置问题。]]></description><category></category></item><item><title><![CDATA[锁正确使用]]></title><link>https://blog.youkuaiyun.com/Alicea_Wind/article/details/157697640</link><guid>https://blog.youkuaiyun.com/Alicea_Wind/article/details/157697640</guid><author>Alicea_Wind</author><pubDate>Tue, 03 Feb 2026 19:47:18 +0800</pubDate><description><![CDATA[冲突真的多的时候，它会变成“大家都在重试”，CPU 忙但有效进展很少，所以通常会加：有限次重试 + 退避（sleep 一下）+ 失败提示。你会发现悲观锁适合那种“不能失败、不能重试”的地方，比如余额/库存这种，失败不是性能问题，是事故问题。它的优点是“确定性强”，缺点是“并发时会排队”，慢事务会把队伍拖长。如果更新行数是 0，说明别人先改了，你这次就必须失败，然后重读重算。这类写法的价值是：避免把线程“锁死在等待上”，让系统在压力大时更可控。死锁的本质不是“你忘了释放锁”，而是“你拿锁的顺序不一致”。]]></description><category></category></item><item><title><![CDATA[Java程序秒变exe，Launch4j一键搞定]]></title><link>https://blog.youkuaiyun.com/Alicea_Wind/article/details/157696684</link><guid>https://blog.youkuaiyun.com/Alicea_Wind/article/details/157696684</guid><author>Alicea_Wind</author><pubDate>Tue, 03 Feb 2026 18:50:15 +0800</pubDate><description><![CDATA[别急，其实这玩意很单纯，说白了它就是在你原来的 jar 文件外面套一层壳子，让 Windows 以为这是个正常的 exe 文件，然后偷偷在里面运行 JVM 来加载你的 jar。顺便说下，如果你运行生成出来的 exe 时弹出“请先安装 Java”，那就是你没打包 JRE，Launch4j 也不帮你内嵌 JRE，它只是外层的壳。第一次点的时候，它可能会跳出一个窗口，要求你保存一个 xml 文件，这是它的配置文件，你可以随便起个名保存下来。，它应该就会弹出你的 Swing 界面或者控制台窗口，跟你直接用。]]></description><category></category></item><item><title><![CDATA[假队友：接口的调用]]></title><link>https://blog.youkuaiyun.com/Alicea_Wind/article/details/157616235</link><guid>https://blog.youkuaiyun.com/Alicea_Wind/article/details/157616235</guid><author>Alicea_Wind</author><pubDate>Sun, 01 Feb 2026 17:07:56 +0800</pubDate><description><![CDATA[那时候你写的系统是完整的，你能看到每一行代码，能理解每一个逻辑分支，出问题的时候也知道责任在谁身上，基本不会怀疑“这个世界本身是不是假的”。你只知道它对外暴露了一个地址，一个路径，一个参数格式，一份文档，然后你在自己的代码里写上一句请求，假装这个世界真的会按照约定的方式回应你。于是你开始怀疑自己参数写错了，类型不对，编码不对，签名不对，时区不对，缓存不对，网络不对。你假设对方接口永远遵守文档，你假设字段不会随意改名，你假设返回结构不会多一个 null，你假设状态码是可信的，你假设网络是稳定的。]]></description><category></category></item><item><title><![CDATA[假世界：.venv 的用处]]></title><link>https://blog.youkuaiyun.com/Alicea_Wind/article/details/157587208</link><guid>https://blog.youkuaiyun.com/Alicea_Wind/article/details/157587208</guid><author>Alicea_Wind</author><pubDate>Sat, 31 Jan 2026 20:44:28 +0800</pubDate><description><![CDATA[摘要： Python项目中的.venv文件夹是一个虚拟环境，用于隔离项目依赖，确保环境稳定性和可复现性。它如同一个封闭的“假世界”，包含独立的解释器和库，避免系统环境被污染。虽然初期可能忽视其价值，但随着项目复杂度增加，虚拟环境能防止依赖冲突和环境失控，保障代码在不同机器上的一致性。.venv体现了现代软件工程对局部封装和可控性的追求，是长期维护项目的必要工具，其意义远超技术隔离，更是一种工程规范的体现。]]></description><category></category></item><item><title><![CDATA[Java 的反射机制：其实 Java 能运行 txt 的……就用这种方法]]></title><link>https://blog.youkuaiyun.com/Alicea_Wind/article/details/157547631</link><guid>https://blog.youkuaiyun.com/Alicea_Wind/article/details/157547631</guid><author>Alicea_Wind</author><pubDate>Fri, 30 Jan 2026 14:32:28 +0800</pubDate><description><![CDATA[如果你想真正理解为什么 Java 能在运行时“调用某个你根本没写死的方法”，那你必须从 JVM 的底层设计说起。在 Java 编译之后，每个.class文件不仅包含字节码（就是你写的函数逻辑），还包含一份完整的“类结构描述信息”。这份信息包括类的名字、父类、字段名、方法签名、参数类型、修饰符、注解……你能在代码里定义的几乎所有东西，都会以结构化的形式写入.class文件中。JVM 把这个结构化信息加载进内存，并用对象来描述它。这就像是一个“活着的类说明书”：你可以向它提问：“你有哪些方法？]]></description><category></category></item><item><title><![CDATA[一个最小可扩展聊天室系统的设计与实现（Java + Swing + TCP）(2)]]></title><link>https://blog.youkuaiyun.com/Alicea_Wind/article/details/157512348</link><guid>https://blog.youkuaiyun.com/Alicea_Wind/article/details/157512348</guid><author>Alicea_Wind</author><pubDate>Thu, 29 Jan 2026 16:29:15 +0800</pubDate><description><![CDATA[这种问题，其实不是小失误，它们对应的是“模块边界被打穿”的症状：当你开始分包（common/server/client），代码的结构就不允许再像以前那样随手把功能塞进任何一个类里。这一版的更新，说白了就是：我们终于把“聊天室”从一个只存在于内存里的即时通信小玩具，推到一个具备“可追溯性”和“可恢复性”的系统雏形——它不再只关心消息能不能发出去，而是开始关心“消息有没有被可靠地记录下来、以后还能不能再被拿回来”。这版最讲究的不是“写文件”，而是“写的时机”。最核心的变化，是引入了一个专门负责持久化的组件。]]></description><category></category></item><item><title><![CDATA[一个最小可扩展聊天室系统的设计与实现（Java + Swing + TCP）]]></title><link>https://blog.youkuaiyun.com/Alicea_Wind/article/details/157508209</link><guid>https://blog.youkuaiyun.com/Alicea_Wind/article/details/157508209</guid><author>Alicea_Wind</author><pubDate>Thu, 29 Jan 2026 13:52:46 +0800</pubDate><description><![CDATA[本文介绍了一个基于TCP协议的聊天室系统，采用三层架构设计：客户端UI层（JavaSwing实现）、通信协议层和服务端逻辑层。系统通过RoomID实现状态隔离，所有消息都封装为包含type、roomId和text的Packet数据结构进行传输。客户端采用事件驱动模型，服务端为每个连接分配独立线程，并通过长度前缀协议解决粘包问题。项目重点展示了如何通过协议解耦各层，使系统具备扩展性，同时探讨了从抽象设计到具体实现的工程化过程。]]></description><category></category></item><item><title><![CDATA[TCP 与 UDP 的区别]]></title><link>https://blog.youkuaiyun.com/Alicea_Wind/article/details/154992777</link><guid>https://blog.youkuaiyun.com/Alicea_Wind/article/details/154992777</guid><author>Alicea_Wind</author><pubDate>Tue, 18 Nov 2025 16:08:07 +0800</pubDate><description><![CDATA[TCP和UDP是两种不同的传输层协议：TCP是面向连接的可靠协议，通过三次握手、数据确认、重传等机制保证数据正确传输，适合Web、文件传输等场景；UDP是无连接的快速协议，不保证可靠性但延迟极低，适合游戏、直播等实时应用。现代应用常混合使用二者：UDP处理实时数据，TCP处理关键数据。理解这两种协议的本质差异（可靠VS快速）是网络编程的重要基础。]]></description><category></category></item><item><title><![CDATA[单例模式与线程池的实际应用]]></title><link>https://blog.youkuaiyun.com/Alicea_Wind/article/details/153627447</link><guid>https://blog.youkuaiyun.com/Alicea_Wind/article/details/153627447</guid><author>Alicea_Wind</author><pubDate>Mon, 20 Oct 2025 12:51:58 +0800</pubDate><description><![CDATA[单例模式是一种确保全局唯一对象的设计模式，主要应用于配置管理、日志系统、连接池等需要统一访问点的场景。核心实现包含私有构造器、静态实例和访问方法，并通过同步控制保证线程安全。常见实现方式包括：饿汉式（类加载时初始化）、懒汉式（延迟初始化+同步锁）、双重检查锁（volatile防止指令重排）、静态内部类（利用类加载机制）和枚举式（反射安全）。该模式在提升系统可控性和资源复用性的同时，需权衡初始化时机与线程安全的关系。]]></description><category></category></item><item><title><![CDATA[线程池相关内容与操作]]></title><link>https://blog.youkuaiyun.com/Alicea_Wind/article/details/153627152</link><guid>https://blog.youkuaiyun.com/Alicea_Wind/article/details/153627152</guid><author>Alicea_Wind</author><pubDate>Mon, 20 Oct 2025 12:42:40 +0800</pubDate><description><![CDATA[线程池是管理并发任务的一种机制，通过复用线程资源提升效率。它的核心思想是限制线程数量，避免频繁创建销毁线程的开销。创建线程池时需配置核心线程数、最大线程数、任务队列和拒绝策略等参数，这些参数决定了系统的处理能力和行为方式。线程池会按需调度任务执行，空闲线程会保持待命状态。使用完毕后需要显式关闭线程池，否则可能造成资源浪费。线程池性能受限于硬件资源，过多线程会导致内存消耗和上下文切换开销。总体而言，线程池通过有序的资源管理实现了高效的任务处理，体现了对系统资源的节制使用。]]></description><category></category></item><item><title><![CDATA[如何制作手感良好的移动算法？]]></title><link>https://blog.youkuaiyun.com/Alicea_Wind/article/details/150984545</link><guid>https://blog.youkuaiyun.com/Alicea_Wind/article/details/150984545</guid><author>Alicea_Wind</author><pubDate>Fri, 29 Aug 2025 15:45:21 +0800</pubDate><description><![CDATA[本文探讨了游戏中移动算法的设计要点，分析了不同游戏类型对移动手感的影响。文章首先定义了良好移动算法的要素，包括加速、减速、最高速度限制和冲刺功能。接着通过《CS:GO》《第五人格》等游戏案例，说明不同游戏对移动算法的特殊需求。文章还详细讨论了动作优先级的设计原则，以及如何通过调整参数优化游戏体验。最后提供了一个可配置的Java模拟器，允许开发者测试不同移动参数的效果。全文强调了移动算法对游戏手感的重要性，并提供了实用的设计思路和工具。]]></description><category></category></item><item><title><![CDATA[差点膨胀成微信的小型支持私聊的聊天软件的实现与Java联机基础]]></title><link>https://blog.youkuaiyun.com/Alicea_Wind/article/details/150982469</link><guid>https://blog.youkuaiyun.com/Alicea_Wind/article/details/150982469</guid><author>Alicea_Wind</author><pubDate>Fri, 29 Aug 2025 13:16:40 +0800</pubDate><description><![CDATA[这篇文章介绍了一个基于Java开发的小型聊天软件实现过程。作者通过构建&quot;服务器-客户端&quot;模型，逐步实现了用户登录、好友管理、消息收发等核心功能。服务器作为中转站管理在线用户信息，客户端负责用户交互，使用Socket通信、对象序列化和多线程处理等技术实现数据传输和并发处理。文章详细阐述了功能模块设计、实现思路和Java网络编程的关键技术点，如Socket连接、对象流传输、多线程处理等，并分享了开发过程中遇到的挑战和功能扩展的思考，最终形成一个具备基础聊天功能的简化版微信。]]></description><category></category></item><item><title><![CDATA[Java是如何实现通信的，在空气之外？]]></title><link>https://blog.youkuaiyun.com/Alicea_Wind/article/details/150850431</link><guid>https://blog.youkuaiyun.com/Alicea_Wind/article/details/150850431</guid><author>Alicea_Wind</author><pubDate>Tue, 26 Aug 2025 12:02:14 +0800</pubDate><description><![CDATA[本文介绍了Java网络通信的核心原理与实现方法。通过聊天室程序示例，重点阐述了Socket编程中&quot;收发对应&quot;的基本原则：服务器端监听与客户端连接必须匹配，每个write操作对应read操作。文章还讲解了多线程处理客户端连接、消息广播机制以及异常处理等关键技术，强调网络通信的本质在于维护严格的输入输出对应关系。这些对应原则确保了Java网络应用的可靠性和稳定性，使开发者能够构建高效的通信系统。]]></description><category></category></item><item><title><![CDATA[当你红温砸手柄时候，游戏执行的存档：]]></title><link>https://blog.youkuaiyun.com/Alicea_Wind/article/details/150468972</link><guid>https://blog.youkuaiyun.com/Alicea_Wind/article/details/150468972</guid><author>Alicea_Wind</author><pubDate>Sun, 17 Aug 2025 16:29:30 +0800</pubDate><description><![CDATA[游戏几乎都有存档功能，连泡泡堂和秋山坦克大战也有。那么它是如何执行的？又如何避免不被修改的？这是一个企业级的实现方案，至少用到三种技术栈，有些过于复杂了。其实有三个核心过程：写入，加密，读取。]]></description><category></category></item><item><title><![CDATA[Java 图片像素碰撞检测]]></title><link>https://blog.youkuaiyun.com/Alicea_Wind/article/details/150397491</link><guid>https://blog.youkuaiyun.com/Alicea_Wind/article/details/150397491</guid><author>Alicea_Wind</author><pubDate>Thu, 14 Aug 2025 18:32:50 +0800</pubDate><description><![CDATA[摘要：ImageIconCrack类实现了2D图形应用中精确的像素级碰撞检测，解决了传统矩形边界检测在透明区域误判的问题。该方法通过读取图片的像素数据，先进行快速矩形碰撞预判，再对重叠区域逐像素检查透明度，仅当两个非透明像素重叠时才判定为碰撞。适用于格斗游戏、精确拖拽等需要高精度交互的场景，相比矩形检测更耗时但准确度更高。建议对频繁检测的图片使用内存缓存，并控制图片尺寸以优化性能。]]></description><category></category></item><item><title><![CDATA[边学边做边玩：我的类魂斗罗Java小游戏与Java学习（1）]]></title><link>https://blog.youkuaiyun.com/Alicea_Wind/article/details/150348145</link><guid>https://blog.youkuaiyun.com/Alicea_Wind/article/details/150348145</guid><author>Alicea_Wind</author><pubDate>Wed, 13 Aug 2025 17:03:37 +0800</pubDate><description><![CDATA[很高兴看到我练手的小游戏能收到这么多学习者的欢迎，我将在此篇分享我的开发日志。]]></description><category></category></item></channel></rss>