- 博客(46)
- 收藏
- 关注
原创 Alicea Wind的个人网站开发日志(2)
第二天的工作,重点已经不在“页面长什么样”,而是开始思考:这个网站。第一天我把首页结构和视觉大致定下来之后,很快就意识到一个问题——如果所有内容都只是写死在前端,那这个网站本质上还是一张“展示图”,而不是一个正在运转的系统。哪怕是个人站,也应该有最基本的数据流动。。
2026-02-06 19:02:28
460
原创 Alicea Wind的个人网站开发日志(1)
这个选择本身没什么好说的,开发体验足够顺,构建工具也足够现代,适合做一个结构清晰、可扩展的个人站。目标并不复杂,也不是一开始就想着“上线即成品”,而是希望它能成为一个长期生长的东西:能展示项目、能写技术文章,也能承载一些真实的前后端交互,而不是只停留在静态页面。因为它已经不是“只有页面的前端项目”,也不是“孤立跑着的后端服务”,而是一个真正开始有“系统感”的东西。先不做持久化,只用内存里的变量来累计访问次数,每请求一次就加一,然后返回当前的计数值。的请求,这样前后端边界非常清楚,也能尽早暴露配置问题。
2026-02-05 19:10:23
348
原创 锁正确使用
冲突真的多的时候,它会变成“大家都在重试”,CPU 忙但有效进展很少,所以通常会加:有限次重试 + 退避(sleep 一下)+ 失败提示。你会发现悲观锁适合那种“不能失败、不能重试”的地方,比如余额/库存这种,失败不是性能问题,是事故问题。它的优点是“确定性强”,缺点是“并发时会排队”,慢事务会把队伍拖长。如果更新行数是 0,说明别人先改了,你这次就必须失败,然后重读重算。这类写法的价值是:避免把线程“锁死在等待上”,让系统在压力大时更可控。死锁的本质不是“你忘了释放锁”,而是“你拿锁的顺序不一致”。
2026-02-03 19:47:18
268
原创 Java程序秒变exe,Launch4j一键搞定
别急,其实这玩意很单纯,说白了它就是在你原来的 jar 文件外面套一层壳子,让 Windows 以为这是个正常的 exe 文件,然后偷偷在里面运行 JVM 来加载你的 jar。顺便说下,如果你运行生成出来的 exe 时弹出“请先安装 Java”,那就是你没打包 JRE,Launch4j 也不帮你内嵌 JRE,它只是外层的壳。第一次点的时候,它可能会跳出一个窗口,要求你保存一个 xml 文件,这是它的配置文件,你可以随便起个名保存下来。,它应该就会弹出你的 Swing 界面或者控制台窗口,跟你直接用。
2026-02-03 18:50:15
460
原创 假队友:接口的调用
那时候你写的系统是完整的,你能看到每一行代码,能理解每一个逻辑分支,出问题的时候也知道责任在谁身上,基本不会怀疑“这个世界本身是不是假的”。你只知道它对外暴露了一个地址,一个路径,一个参数格式,一份文档,然后你在自己的代码里写上一句请求,假装这个世界真的会按照约定的方式回应你。于是你开始怀疑自己参数写错了,类型不对,编码不对,签名不对,时区不对,缓存不对,网络不对。你假设对方接口永远遵守文档,你假设字段不会随意改名,你假设返回结构不会多一个 null,你假设状态码是可信的,你假设网络是稳定的。
2026-02-01 17:07:56
226
原创 假世界:.venv 的用处
摘要: Python项目中的.venv文件夹是一个虚拟环境,用于隔离项目依赖,确保环境稳定性和可复现性。它如同一个封闭的“假世界”,包含独立的解释器和库,避免系统环境被污染。虽然初期可能忽视其价值,但随着项目复杂度增加,虚拟环境能防止依赖冲突和环境失控,保障代码在不同机器上的一致性。.venv体现了现代软件工程对局部封装和可控性的追求,是长期维护项目的必要工具,其意义远超技术隔离,更是一种工程规范的体现。
2026-01-31 20:44:28
429
原创 Java 的反射机制:其实 Java 能运行 txt 的……就用这种方法
如果你想真正理解为什么 Java 能在运行时“调用某个你根本没写死的方法”,那你必须从 JVM 的底层设计说起。在 Java 编译之后,每个.class文件不仅包含字节码(就是你写的函数逻辑),还包含一份完整的“类结构描述信息”。这份信息包括类的名字、父类、字段名、方法签名、参数类型、修饰符、注解……你能在代码里定义的几乎所有东西,都会以结构化的形式写入.class文件中。JVM 把这个结构化信息加载进内存,并用对象来描述它。这就像是一个“活着的类说明书”:你可以向它提问:“你有哪些方法?
2026-01-30 14:32:28
863
原创 一个最小可扩展聊天室系统的设计与实现(Java + Swing + TCP)(2)
这种问题,其实不是小失误,它们对应的是“模块边界被打穿”的症状:当你开始分包(common/server/client),代码的结构就不允许再像以前那样随手把功能塞进任何一个类里。这一版的更新,说白了就是:我们终于把“聊天室”从一个只存在于内存里的即时通信小玩具,推到一个具备“可追溯性”和“可恢复性”的系统雏形——它不再只关心消息能不能发出去,而是开始关心“消息有没有被可靠地记录下来、以后还能不能再被拿回来”。这版最讲究的不是“写文件”,而是“写的时机”。最核心的变化,是引入了一个专门负责持久化的组件。
2026-01-29 16:29:15
481
原创 一个最小可扩展聊天室系统的设计与实现(Java + Swing + TCP)
本文介绍了一个基于TCP协议的聊天室系统,采用三层架构设计:客户端UI层(JavaSwing实现)、通信协议层和服务端逻辑层。系统通过RoomID实现状态隔离,所有消息都封装为包含type、roomId和text的Packet数据结构进行传输。客户端采用事件驱动模型,服务端为每个连接分配独立线程,并通过长度前缀协议解决粘包问题。项目重点展示了如何通过协议解耦各层,使系统具备扩展性,同时探讨了从抽象设计到具体实现的工程化过程。
2026-01-29 13:52:46
579
原创 TCP 与 UDP 的区别
TCP和UDP是两种不同的传输层协议:TCP是面向连接的可靠协议,通过三次握手、数据确认、重传等机制保证数据正确传输,适合Web、文件传输等场景;UDP是无连接的快速协议,不保证可靠性但延迟极低,适合游戏、直播等实时应用。现代应用常混合使用二者:UDP处理实时数据,TCP处理关键数据。理解这两种协议的本质差异(可靠VS快速)是网络编程的重要基础。
2025-11-18 16:08:07
519
原创 单例模式与线程池的实际应用
单例模式是一种确保全局唯一对象的设计模式,主要应用于配置管理、日志系统、连接池等需要统一访问点的场景。核心实现包含私有构造器、静态实例和访问方法,并通过同步控制保证线程安全。常见实现方式包括:饿汉式(类加载时初始化)、懒汉式(延迟初始化+同步锁)、双重检查锁(volatile防止指令重排)、静态内部类(利用类加载机制)和枚举式(反射安全)。该模式在提升系统可控性和资源复用性的同时,需权衡初始化时机与线程安全的关系。
2025-10-20 12:51:58
601
原创 线程池相关内容与操作
线程池是管理并发任务的一种机制,通过复用线程资源提升效率。它的核心思想是限制线程数量,避免频繁创建销毁线程的开销。创建线程池时需配置核心线程数、最大线程数、任务队列和拒绝策略等参数,这些参数决定了系统的处理能力和行为方式。线程池会按需调度任务执行,空闲线程会保持待命状态。使用完毕后需要显式关闭线程池,否则可能造成资源浪费。线程池性能受限于硬件资源,过多线程会导致内存消耗和上下文切换开销。总体而言,线程池通过有序的资源管理实现了高效的任务处理,体现了对系统资源的节制使用。
2025-10-20 12:42:40
834
原创 如何制作手感良好的移动算法?
本文探讨了游戏中移动算法的设计要点,分析了不同游戏类型对移动手感的影响。文章首先定义了良好移动算法的要素,包括加速、减速、最高速度限制和冲刺功能。接着通过《CS:GO》《第五人格》等游戏案例,说明不同游戏对移动算法的特殊需求。文章还详细讨论了动作优先级的设计原则,以及如何通过调整参数优化游戏体验。最后提供了一个可配置的Java模拟器,允许开发者测试不同移动参数的效果。全文强调了移动算法对游戏手感的重要性,并提供了实用的设计思路和工具。
2025-08-29 15:45:21
961
1
原创 差点膨胀成微信的小型支持私聊的聊天软件的实现与Java联机基础
这篇文章介绍了一个基于Java开发的小型聊天软件实现过程。作者通过构建"服务器-客户端"模型,逐步实现了用户登录、好友管理、消息收发等核心功能。服务器作为中转站管理在线用户信息,客户端负责用户交互,使用Socket通信、对象序列化和多线程处理等技术实现数据传输和并发处理。文章详细阐述了功能模块设计、实现思路和Java网络编程的关键技术点,如Socket连接、对象流传输、多线程处理等,并分享了开发过程中遇到的挑战和功能扩展的思考,最终形成一个具备基础聊天功能的简化版微信。
2025-08-29 13:16:40
577
原创 Java是如何实现通信的,在空气之外?
本文介绍了Java网络通信的核心原理与实现方法。通过聊天室程序示例,重点阐述了Socket编程中"收发对应"的基本原则:服务器端监听与客户端连接必须匹配,每个write操作对应read操作。文章还讲解了多线程处理客户端连接、消息广播机制以及异常处理等关键技术,强调网络通信的本质在于维护严格的输入输出对应关系。这些对应原则确保了Java网络应用的可靠性和稳定性,使开发者能够构建高效的通信系统。
2025-08-26 12:02:14
516
原创 当你红温砸手柄时候,游戏执行的存档:
游戏几乎都有存档功能,连泡泡堂和秋山坦克大战也有。那么它是如何执行的?又如何避免不被修改的?这是一个企业级的实现方案,至少用到三种技术栈,有些过于复杂了。其实有三个核心过程:写入,加密,读取。
2025-08-17 16:29:30
247
原创 Java 图片像素碰撞检测
摘要:ImageIconCrack类实现了2D图形应用中精确的像素级碰撞检测,解决了传统矩形边界检测在透明区域误判的问题。该方法通过读取图片的像素数据,先进行快速矩形碰撞预判,再对重叠区域逐像素检查透明度,仅当两个非透明像素重叠时才判定为碰撞。适用于格斗游戏、精确拖拽等需要高精度交互的场景,相比矩形检测更耗时但准确度更高。建议对频繁检测的图片使用内存缓存,并控制图片尺寸以优化性能。
2025-08-14 18:32:50
462
原创 JavaSwing监听器的原理及使用
本文系统介绍了Java GUI编程中的事件驱动模型和Swing监听器机制。核心内容包括:1) Java事件本质是用户与GUI组件的交互行为,通过事件监听器实现响应;2) 重点解析了MouseListener、KeyListener和ActionListener三类常用监听器及其方法;3) 详细说明了通过实现接口或继承适配器类两种监听器调用方式;4) 深入探讨了事件驱动编程的精髓、线程安全(EDT)和焦点管理等关键概念。
2025-08-10 12:44:55
910
原创 Daisy —— 轻量级 Java 消息广播与订阅工具
本人的一个轻量级开源项目,用于Java近乎于scratch一般方便的广播和消息接收系统而不用受改static变量之苦。Daisy 是一个单文件、零依赖的 Java 工具类,用于实现跨类的线程安全消息广播与订阅。空主题安全处理:修复了 null 作为键时的 hashCode() 问题。特性 单文件:下载 Daisy.java 放进项目即可用。灵活订阅:支持订阅指定主题或全部主题。零依赖:纯 Java SE 实现。
2025-08-08 13:20:29
384
原创 基于文件存储的键值对管理系统实现与分析
本文介绍了一个基于Java实现的键值对存储系统,采用文本文件作为持久化存储介质。系统通过控制台交互提供增删查功能,核心功能由KVKeyHash类实现。数据以"key=数值-value=字符串"格式存储于kvs.txt文件中。系统采用单类封装设计,包含用户交互、文件操作和业务处理模块。新增功能采用追加写入方式,查询通过逐行解析文件实现,删除则采用"读入-过滤-重写"策略。系统在程序退出时会清空文件内容,确保会话独立性。虽然实现简单直观,但存在大规模数据效率低、缺乏并发控
2025-08-06 18:09:18
457
原创 用 JavaSwing 开发经典横版射击游戏:从 0 到 1 实现简易 Contra-like 游戏
通过上述设计,我们实现了一个具备基础玩法的横版射击游戏框架。这个简易版本虽然功能有限,但包含了 2D 游戏开发的核心要素:场景管理、角色控制、碰撞检测、游戏循环和用户输入。增加多种敌人类型和 Boss 战实现道具系统(武器升级、生命值恢复)添加关卡切换与进度保存加入音效与背景音乐优化 AI 逻辑,实现更复杂的敌方行为JavaSwing 虽然不是游戏开发的首选工具,但通过这个案例可以看出,利用其基础组件和绘图能力,完全可以构建出具有可玩性的小型游戏。
2025-08-02 16:56:34
1087
原创 基于 LFU 策略的存储缓存系统设计与实现
本文探讨了StorageCacheSystem的设计实现,这是一个结合磁盘持久化与内存缓存的存储系统。系统采用LFU缓存策略,通过"缓存优先"访问机制和双重备份存储策略,实现数据的高效管理。核心设计包括数据生命周期管理、访问频率统计、缓存容量控制与淘汰机制。文章还讨论了频率统计优化方案(时间窗口衰减)以及应对缓存击穿、雪崩等问题的解决方案。该系统在保证数据安全性的同时,通过智能缓存策略显著提升了热点数据的访问效率。
2025-08-02 16:40:31
652
原创 内存、硬盘与缓存的技术原理及特性解析
计算机存储系统由内存、硬盘和缓存构成层次化架构,各司其职又协同工作。内存作为易失性存储器,为CPU提供高速数据访问;硬盘实现数据持久化存储,从机械硬盘发展至固态硬盘;缓存则利用局部性原理,在CPU与内存间建立高速桥梁。三者通过虚拟内存、缓存一致性协议等技术协同工作,形成完整的存储体系。随着3D堆叠、非易失性内存等新技术发展,存储系统正朝着更高速度、更大容量和存算一体方向演进,为计算机性能提升奠定基础。
2025-08-02 16:27:05
1300
原创 生命游戏,模拟生命的诞生和生存(Java)
摘要:本文介绍了使用Java实现康威生命游戏的方法。系统采用三层架构:GameUI类负责图形界面展示,GameOfLife类管理网格状态,DieDaiGuiZe类实现核心算法。算法基于二维网格中细胞的邻域状态(3×3范围内)进行迭代更新,存活细胞在2-3个活邻居时存活,死亡细胞在恰好3个活邻居时复活。实现采用双矩阵策略避免状态污染,通过嵌套循环完成每代演化,展现了复杂系统自组织的特性。该实现有效模拟了生命游戏的基本规则和动态特征。
2025-07-29 17:28:02
938
原创 使用Object继承和泛型处理一个复杂多变还要多层套用还要变成无限拓展链的数据结构————————(示例)利用 Object 继承和泛型处理员工职位多层嵌套的无限拓展信息链
本文探讨了Java中equals、toString和clone三个方法的必要性及标准重写模式。equals方法需重写以比较内容而非地址,标准流程包括基础校验、类型转换和字段比较;toString重写应返回类名及属性值的格式化字符串;clone方法需实现深拷贝,对引用类型属性进行递归克隆。文章通过员工管理系统的示例,展示了如何正确实现这三个方法,并验证克隆对象的独立性。掌握这些重写模式能有效处理复杂对象的比较、打印和复制需求。
2025-07-26 17:43:43
942
原创 2D游戏背景滚动教程(JavaSwing)
2D游戏视口滚动控制技术摘要:本文介绍了一个2D游戏视口滚动系统的实现方案。核心思路是将游戏窗口作为显示大世界的"视口",通过计算角色位置与屏幕边缘触发区域的关系来控制背景滚动。系统包含视口初始化、滚动触发区域设置、边界约束等关键模块,实现了当角色接近屏幕边缘时平滑滚动背景,并确保视口不会超出世界边界。代码示例展示了如何计算角色屏幕坐标、处理键盘输入、更新视口位置以及优化绘制性能,最终实现角色在超大世界中自由移动的效果。
2025-07-26 12:51:07
378
原创 Java线程初步(2)
本文展示了一个基于Java多线程的小球碰撞动画系统,主要包含三个核心组件:1)UI框架负责创建窗口和面板;2)ThreadListener类处理鼠标点击添加小球和键盘控制(S键暂停/D键恢复);3)BallClass实现小球物理系统,包括运动轨迹、边界反弹和碰撞检测。系统通过ThreadBall线程实现动画循环,采用2毫秒休眠控制帧率,在保持性能的同时实现流畅动画效果。该案例完整演示了多线程编程、图形绘制和用户事件处理的综合应用,为开发交互式动画提供了实用参考。
2025-07-23 19:00:31
874
原创 水流走迷宫的Java实现
这段Java代码实现了一个迷宫生成与路径搜索可视化系统。系统采用改进的Prim算法随机生成30x30的迷宫,并强制保证从左上角起点到右下角终点的路径存在。可视化功能使用不同颜色标示起点(绿色)、终点(红色)、路径(蓝色)和已探索区域(青色)。通过BFS算法实现路径搜索过程的动画展示,用户可点击"生成新迷宫"创建新的迷宫,或点击"开始求解"观看搜索过程。技术亮点包括采用A*算法确保路径存在、优先队列优化搜索效率,以及动态调整动画速度提升用户体验。
2025-07-22 16:18:04
337
原创 Java线程初步
本文介绍了Java多线程编程的基本方法,以一个Swing界面中球体移动的案例进行演示。主要内容包括:1)通过继承Thread类创建线程(ThreadBall示例);2)线程核心操作在run()方法中实现(如球体向右移动);3)通过start()方法启动线程执行。该案例展示了如何利用多线程实现简单的动画效果,为Java多线程编程提供了入门实践。
2025-07-22 13:47:39
231
原创 日麻役种计算器的java雏形实现
可以看到,里面主要有诸如主页面牌的位置,54张牌的可供选择的点击地点,和已经被选择的牌的显示(当然还有一个答案显示和背景Panel)本项目实现了一个简易的日麻役种计算器,技术栈为Java Swing。包括前端的选牌,看你选的牌,根据你选的牌计算等部分。(本人并不懂全部的规则,所以计算部分的完善只能后人补充了)包括是否是宝牌,牌面数字,牌种类,是牌堆中第几张等等。通过这些内容,我们可以实现日麻役种的简易计算。各种各样的“是与非”
2025-05-25 15:34:46
205
原创 Java图像二值化处理与简易UI实现
本项目包含两个核心类,实现了图像的二值化处理和简易可视化功能:2. ImageUI.java(可视化界面类) 二、核心功能解析1. 图像读取与矩阵转换方法实现图像到二维数组的转换:使用读取图片文件遍历每个像素获取RGB值存储为二维数组方法核心逻辑: 灰度计算:RGB平均值法阈值分割:128为临界值生成二进制字符串表示(1白/0黑)方法实现特性:遍历指定目录的图片文件生成所有图片的二值化编码通过字符对比计算差异度输出相似度统计结果类特性:继承JFrame创建窗口程序使用方
2025-03-30 17:20:22
331
原创 Java 接口设计,书写,调用
当我们的指尖在键盘上敲击出interface这个词时,便悄然叩响了数字世界与理念世界的共振。这看似寻常的语法符号,实则是柏拉图洞穴外投射的永恒投影——它不执着于石壁上的影子,而直指万物运行的元型。那些在字节流中浮沉的接口,恰似《周易》六十四卦的爻变之相。每个方法签名为一道卦象,不涉具体,却暗藏万般可能。正如"乾"卦可化龙在天,亦可为马行地,同一接口在不同实现中演绎着形态的嬗变与本质的恒常。在编译器的凝视下,接口成为一场精妙的二律背反:它既是牢不可破的契约,又是虚无缥缈的承诺。
2025-03-26 22:12:44
675
原创 Java的继承
今天来聊一个快被说烂了的话题,继承。继承是面向对象编程中的一个重要概念,它允许一个类(子类)继承另一个类(父类)的属性和方法。通过继承,子类可以复用父类的代码,并且可以添加自己的特性。对多个类的操作如果同时存在多个类,这些类都具备很多相同的属性、特征、方法,那么我们可以实现将相同部分的属性和方法定义在一个父类中,这些类都来继承父类,可以直接继承父类的属性和方法。1如果父类中的属性和方法使用了受限制的访问权限修饰符修饰,同样子类也不一定可以直接调用.2。
2025-03-23 17:21:48
263
原创 Java编程————面向对象
简单来说,类就是类别的意思,用class表示。面向对象编程,万物皆可编程 ,在程序中表示一个事物时,往往回因为事物的复杂导致编程的代码非常的复杂。或者更深层次的理解,你创建一个类,你就是创建了一个新的,专属于你的数据类型。int age;int height;int weight;//等等等等......以及它所能进行的方法,比如List有add,remove等,我们也可以给类里写上方法。int age;int height;int weight;//等等等等......
2025-03-16 16:14:25
699
原创 代码中那些你以为不是很重要的细节 之 运算符与逻辑控制
从运算符的隐式类型转换,到逻辑控制的边界条件,再到引用类型的地址传递,这些细节看似琐碎,却直接影响程序的正确性与性能。明确类型:避免混合类型运算的意外结果。防御性编程:利用短路特性、边界检查等手段预防潜在错误。理解内存机制:区分值类型与引用类型的底层行为差异。只有重视这些“不起眼”的细节,才能写出健壮、高效的代码。
2025-03-09 20:27:08
1171
原创 代码中那些你以为不是很重要的细节 之 运算符与逻辑控制
从运算符的隐式类型转换,到逻辑控制的边界条件,再到引用类型的地址传递,这些细节看似琐碎,却直接影响程序的正确性与性能。明确类型:避免混合类型运算的意外结果。防御性编程:利用短路特性、边界检查等手段预防潜在错误。理解内存机制:区分值类型与引用类型的底层行为差异。只有重视这些“不起眼”的细节,才能写出健壮、高效的代码。
2025-03-09 20:23:58
1502
原创 从咖啡杯到字节码:我的Java世界观与那些你可能忽略的细节
它原本是Java的“扩展包抽屉”,装着Swing、XML处理这些“非核心工具”。有趣的是,Java最初是为嵌入式系统设计的,结果阴差阳错成了互联网的“基建狂魔”。这个命令,本质上是把你的Java代码“降维”成字节码。:从Spring的“全家桶”到Hadoop的大数据王国,Java的世界永远不缺轮子。(Write Once, Run Anywhere),靠的是JVM这层“翻译官”。所以真正的“一次编写,到处运行”,其实是“一次编写,到处调试”。了
2025-03-04 20:48:41
550
原创 使用Java构建简单的图像查看器和处理器
在本篇博客中,我们将介绍如何使用Java开发一个简单的图像查看器和处理器,主要功能包括加载图像、应用灰度和二值化滤镜,以及保存处理后的图像。该项目采用Java的Swing库构建图形用户界面,并采用面向对象的方法,使代码模块化,易于扩展。
2025-02-18 19:22:24
250
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅