- 博客(786)
- 资源 (321)
- 收藏
- 关注
原创 Java DDD分层架构详解
在Java中实现领域驱动设计(DDD)时,分层架构是核心模式,旨在分离关注点、保持领域模型纯净并提高可维护性。以下是经典的处理用户请求(HTTP/RPC/消息等)数据验证(基础格式校验)数据传输对象(DTO)与领域对象的转换Spring MVCJAX-RS 资源类DTO 类(如执行业务用例(如“创建订单”)事务管理(权限校验(ACL)领域事件的发布,仅编排领域层操作输入/输出为DTO或领域对象Spring@Service类方法代表用例(如包含和。
2025-07-16 15:44:42
696
原创 Rust 变量遮蔽(Variable Shadowing)
Rust中的变量遮蔽(Shadowing)允许在同一作用域内重复声明同名变量,新变量可以改变类型并完全覆盖旧变量。与mut可变绑定不同,遮蔽会创建新内存位置而非修改原值,适用于类型转换、变量重用等场景。使用时需注意作用域规则和移动语义,避免过度遮蔽导致代码可读性下降。合理运用这一特性可简化代码,但应优先保证代码清晰度,建议通过注释说明遮蔽意图,并谨慎处理嵌套遮蔽情况。
2025-07-11 17:24:17
318
原创 Cargo.toml dependencies features 参数详解
《Cargo.toml中的features参数详解》摘要: features参数用于控制Rust依赖包的可选功能,通过在Cargo.toml的[dependencies]中指定。主要作用包括:1)启用crate的特定功能(如serde的derive);2)通过default-features=false禁用默认功能;3)实现条件编译。语法为features=["feature1","feature2"],支持嵌套功能。使用时需注意:功能具有传递性,会影响编译产物大小;
2025-07-11 15:27:15
348
原创 Cargo.toml 配置详解
Cargo.toml是Rust项目的核心配置文件,采用TOML格式。它定义了项目元数据、依赖管理(包括常规、开发和构建依赖)、特性标志、目标配置(如库和二进制文件)、构建优化配置(开发/发布模式)以及工作区管理。文件还支持高级功能如补丁依赖、环境变量和自定义命令别名。最佳实践包括使用语义化版本控制、优化依赖项、合理组织工作区以及针对不同目标进行条件编译。该配置文件是Rust项目构建和管理的中心枢纽。
2025-07-10 18:54:28
254
原创 Rust中Option和Result详解
Rust通过Option和Result枚举类型提供安全的值缺失和错误处理机制。Option<T>用于可能为空的值(Some(T)/None),提供unwrap、map等方法;Result<T,E>处理操作结果(Ok(T)/Err(E)),支持?运算符传播错误。两者可相互转换,强制编译期处理所有状态,避免运行时异常。建议优先使用Result处理可能失败的操作,避免过度unwrap,善用模式匹配和类型系统。这种设计将传统语言的运行时错误转为编译期检查,显著提升代码可靠性。
2025-07-10 14:03:50
307
原创 Rust #[] 语法
Rust中的属性(Attributes)是元数据注解,用于向编译器提供额外信息或修改代码行为。主要分为外部属性(#[attr])和内部属性(#![attr]),常见用途包括条件编译(#[cfg])、自动派生Trait(#[derive])、禁用警告(#[allow])、测试标记(#[test])和性能优化(#[inline])。特殊属性如#[no_mangle]用于FFI,#[repr(C)]确保C兼容内存布局。属性是Rust元编程的核心工具,合理使用能提升代码表达力,但需遵循最佳实践,如优先使用标准属性、
2025-07-09 17:18:03
478
原创 Java字段比较工具类设计
这是一个使用Java反射机制比较两个同类型对象字段变化的工具类。主要功能是通过反射获取对象的所有字段(包括私有字段),比较对应字段值是否发生变化,返回字段名与变化状态的映射。工具类采用空安全比较(Objects.equals()),能自动处理基本类型和包装类型,但不支持递归深度比较引用对象内容。使用时需注意:仅比较同类型非空对象,引用类型比较的是地址而非内容,静态字段不被比较,反射访问异常视为有变化。该实现适合中小型对象的快速字段级变更检测,但在性能敏感场景应考虑缓存Field数组优化。
2025-07-09 15:31:16
134
原创 SpringBoot 通用模块 数据操作记录功能
摘要:本文设计了一个通用操作记录系统,用于追踪各业务模块的数据变更历史。系统采用MySQL数据库存储操作日志,包含模块名称、操作类型、目标ID、前后数据快照(JSON格式)、操作人信息等字段,并建立多维度索引优化查询。后端实现采用Spring框架,提供日志记录、历史查询服务,支持异步处理提升性能。系统具备敏感数据脱敏、操作审计事件、日志归档等高级特性,适用于用户管理、订单系统等多种业务场景。该设计具有通用性强、扩展性好、性能高效等特点,能够满足企业级应用的数据操作审计需求。
2025-07-09 15:16:04
294
原创 Rust 中字符串类型区别解析
Rust中字符串的两种表示方式:"hello"(&str)和String::from("hello")存在本质区别。&str是存储在只读内存区的字符串切片引用,编译时固定,不可变;String则是堆分配的字符串,拥有所有权且可变。&str访问高效但无法修改,String适合动态操作但需要堆分配。两者可相互转换:&str到String需堆分配,String到&str是零成本借用。使用时应根据场景选择:静态文本用&str,需
2025-07-08 19:32:10
232
原创 Rust 仿射类型(Affine Types)
Rust的仿射类型系统是其所有权机制的核心,规定每个值最多被使用一次。与线性类型不同,仿射类型允许值未被使用就被丢弃(自动调用drop)。主要特点包括:移动语义导致所有权转移后原绑定失效;禁止重复使用已转移的值;允许未使用即丢弃。编译器通过借用检查器静态验证这些规则,确保内存安全(如防止悬垂指针)和资源管理(避免泄漏)。仿射类型与Rust的零成本抽象理念契合,所有检查在编译期完成,为并发编程(如安全跨线程传递所有权)提供了基础保障。
2025-07-08 16:25:03
289
原创 Rust 的 Copy 语义:深入浅出指南
Rust中的Copy特性定义了类型是否支持按位复制,决定了赋值行为是复制还是所有权转移。Copy类型(如基本数据类型)在赋值时进行栈复制,原变量仍可用;非Copy类型(如String)则转移所有权。实现Copy需满足:所有字段都是Copy类型、未实现Drop、不含非Copy类型。Copy与Clone不同,前者是隐式低开销复制,后者需显式调用且可能有自定义逻辑。最佳实践是对小类型使用Copy,大类型或堆分配类型避免Copy。合理使用Copy特性有助于编写高效、符合Rust习惯的代码,同时保证内存安全。
2025-07-08 16:02:06
750
原创 Rust BSS段原理与实践解析
Rust中的BSS段是内存布局的重要部分,专门存储零初始化的全局/静态变量,具有磁盘空间优化和自动归零特性。文章解析了BSS的核心原理、Rust中的实现验证及注意事项,包括线程安全处理和类型限制。还介绍了高级应用场景如自定义分配,并总结了BSS的优缺点,强调其对程序存储效率和启动性能的优化作用,同时提醒避免对非Copy类型使用零初始化。合理利用BSS段有助于在保证内存安全的前提下提升Rust程序性能。
2025-07-08 15:45:04
527
原创 Rust * 关键字
Rust中的*运算符具有多重用途:1)作为解引用运算符,用于获取引用或智能指针的值;2)在unsafe块中操作裸指针;3)作为乘法运算符;4)在模式匹配中解构引用;5)表示指针类型;6)作为通配符模式;7)在宏中表示重复模式;8)用于模块通配符导入;9)访问关联常量;10)进行unsafe指针运算。关键区别在于安全要求,普通解引用是安全的,而裸指针操作需unsafe。最佳实践包括优先使用安全解引用、避免不必要的unsafe块、谨慎使用通配符导入等。理解*的多重含义对掌握Rust内存管理和类型系统至关重要。
2025-07-08 14:24:15
454
原创 Rust 异步编程深入浅出指南
Rust异步编程解析:Rust通过Future、async/await和执行器(如tokio)实现高效异步编程,适用于高并发场景。核心机制包括Waker通知系统、异步I/O和轻量级任务调度,并发模式提供select!、异步锁和流处理工具。开发需注意避免阻塞操作、限制并发数,并遵循结构化并发原则。调试时可使用异步堆栈追踪和监控工具,常见陷阱包括任务阻塞和Future未推进问题。Rust的异步模型兼具安全性与高性能,是构建现代网络服务的理想选择。
2025-07-08 11:00:26
910
原创 Rust 宏深入浅出指南
Rust宏是强大的元编程工具,分为声明宏(macro_rules!)和过程宏两类,用于代码重用、DSL创建和编译期计算。声明宏通过模式匹配生成代码,支持元变量和重复操作符;过程宏操作AST实现更复杂逻辑,包括派生宏、属性宏和函数宏。宏具有卫生性避免命名冲突,但需注意调试复杂性和编译时间。最佳实践建议优先使用声明宏、充分测试和文档化。宏虽能提升代码表现力(如Serde框架),但也存在IDE支持有限等局限性。合理使用宏可以消除样板代码,实现编译期计算等高级功能。
2025-07-08 10:43:42
556
原创 Rust 智能指针深入浅出
《Rust智能指针全面解析》摘要: Rust智能指针是管理内存的高级工具,兼具指针功能和额外管理能力。主要类型包括:Box<T>用于单一所有权堆分配;Rc<T>实现单线程引用计数共享;RefCell<T>提供内部可变性;Arc<T>支持线程安全共享;Mutex<T>确保线程间安全修改。智能指针通过Deref和Drop trait实现解引用和资源清理,可组合使用(如Rc<RefCell<T>>或Arc<Mutex<
2025-07-08 10:34:31
738
原创 Rust内存对齐解析与最佳实践
Rust内存对齐关键知识点:内存对齐要求数据地址是指定字节的整数倍,影响硬件兼容性和性能。基本类型有固定对齐值(如u32对齐4字节),结构体对齐值取字段最大值,编译器会优化字段排列减少填充。可通过#[repr]控制布局:C模式保持声明顺序,packed取消填充(风险),align强制更高对齐。最佳实践包括避免手动计算布局,需要精确控制时使用#[repr(C)],警惕packed可能导致的未对齐访问。性能方面,对齐数据能提升CPU读取效率,因未对齐访问需多次操作。Rust默认优化字段顺序,可通过memoffs
2025-07-08 10:10:36
430
原创 Rust 内存结构:深入解析
Rust的内存管理系统通过所有权机制实现了高效且安全的内存管理。其内存结构分为栈(自动管理、固定大小)、堆(动态分配、手动管理)、全局区(静态/常量)三个部分。Rust通过智能指针(Box、Vec、String)管理堆内存,并利用所有权转移和借用规则确保内存安全。编译器还会进行内存对齐、边界检查等优化,防止越界访问。在高级内存结构中,结构体和枚举会根据数据特点进行自动布局优化。虽然Rust默认提供安全的内存管理,但也可以通过unsafe代码进行手动内存操作。开发时应优先使用栈分配,避免不必要的堆分配,并注意
2025-07-07 19:52:19
600
原创 Rust 所有权系统:深入浅出指南
Rust的所有权系统是其内存安全的核心机制,通过三条基本原则实现:每个值有唯一所有者、离开作用域自动释放、引用访问的严格规则。所有权转移(Move)和借用(Borrowing)机制确保数据安全传递,而生命周期标注防止悬垂引用。实践技巧包括可变引用修改数据、直接返回所有权值等。对于复杂场景,Rc<T>和Arc<T>分别提供单线程和多线程的共享解决方案。所有权系统带来的优势包括内存安全、并发安全、高效内存管理以及明确的资源释放时机,使Rust无需垃圾回收即可保证内存安全。
2025-07-07 19:38:26
433
原创 Rust 闭包
Rust闭包全面解析:闭包是能捕获环境的匿名函数,支持三种捕获方式(不可变/可变引用、所有权转移)。通过Fn、FnMut、FnOnce三个trait实现不同调用需求,可作参数或返回值。与迭代器结合能高效处理数据,结构体存储可实现缓存模式。关键特性包括零成本抽象、内联优化,性能接近普通函数。最佳实践建议优先使用不可变借用,复杂场景用move转移所有权。闭包使Rust代码既安全又高效,是函数式编程的核心工具。
2025-07-04 16:29:26
355
原创 Rust 中的返回类型
Rust函数返回类型详解:从基础类型到高级模式。文章系统介绍了Rust函数返回类型体系,包括基础数值/单元类型、复合类型(元组/结构体)、引用(需生命周期注解)和智能指针(Box/Rc)。重点探讨了错误处理类型(Option/Result)、特殊返回模式(闭包/迭代器/Never类型)以及动态返回方案(Trait对象/impl Trait)。同时提供了实用技巧和常见陷阱,如隐式返回表达式处理、避免返回临时引用等。最后总结各类返回类型的适用场景和核心特点,涵盖从简单计算到复杂错误处理的完整解决方案。
2025-07-04 16:15:41
307
原创 Spring @TransactionalEventListener
Spring的@TransactionalEventListener(phase = AFTER_COMMIT)用于在事务提交后执行非事务性操作,如发送通知、更新缓存等。关键点包括:必须依赖于事务提交,默认同步执行建议异步化,需要处理异常避免中断,可配置执行顺序和无事务时的处理。最佳实践是结合@Async实现异步处理,确保逻辑幂等性和资源隔离。适用于事务成功后的非核心操作,能有效解耦事务与后续处理。
2025-07-04 15:03:35
290
原创 Rust中struct、impl、trait、enum关系解析
Rust中的struct、enum、impl和trait构成了面向对象编程的核心机制。struct定义数据结构(如Rectangle),仅包含字段不包含方法;impl块为结构体添加方法和关联函数(如area()和new());trait定义共享行为接口(如Drawable),通过impl Trait for Type实现多态。三者协作实现数据与行为解耦:struct管理数据,trait抽象行为,impl具体实现。这种设计支持泛型约束、动态分发和代码复用,提供了灵活的类型系统与高效的多态能力。
2025-07-02 19:45:31
383
原创 冒险岛 通用函数和功能占位符
本文档详细介绍了游戏脚本编程中的常用功能指令,主要包括三大类:1.文本显示控制指令(16种颜色/格式代码、道具/地图/NPC名称显示等);2.玩家操作指令(装备属性修改、物品销毁、特效播放等);3.条件判断指令(背包检测、玩家属性获取、副本控制等)。文档还包含日期时间获取、随机数生成等辅助功能,并提供了完整的语法示例,适用于游戏NPC对话、任务系统等功能开发。所有指令均以"cm."为前缀,支持道具检测、队伍判断等复杂逻辑处理。
2025-05-26 16:02:54
139
原创 冒险岛(MapleStory) 083脚本教程
本文介绍了游戏脚本的基本原理与实现方法。首先,脚本通过点击NPC触发,服务端在指定文件夹中寻找对应的脚本文件执行。通过设置调试模式,可以获取NPC的ID。脚本的基本框架包括start和action函数,start只执行一次,action则持续调用,直到遇到dispose函数结束。文章还列举了常用的NPC对话函数,如sendYesNo、sendNext等,并提供了模拟训练示例,展示了如何通过输入数字获取道具。最后,文章介绍了如何新增消耗栏道具的脚本,并分享了脚本框架供参考。
2025-05-22 22:48:45
1814
1
原创 JAVA 枚举 获取上下级逻辑
该代码定义了一个枚举类 LevelEnum,用于表示具有层级关系的节点。每个节点包含一个值(value)、一个父节点(parent)和一个子节点(child)。通过构造函数自动绑定父子关系,并提供了判断节点是否为根节点(isRoot)或末端节点(isLeaf)的方法。此外,代码还支持根据数值查找节点(fromValue)、获取从当前节点到根节点或末端节点的路径(getPathToRoot 和 getPathToLeaf),以及获取子节点的值(getChildValue)。最后,提供了获取第一级节点及其值的方
2025-05-15 15:57:53
141
原创 docker 部署 filebeat 采集日志导入到elasticsearch 设置pipeline
docker 部署 filebeat 采集日志导入到elasticsearch 设置pipeline。
2024-10-02 21:45:26
860
原创 volatile 浅谈
在Java中,volatile 关键字是一种轻量级的同步机制,它用于确保变量的可见性和有序性,但不保证原子性。当我们说 volatile 屏障时,我们实际上是在讨论 volatile 变量如何影响Java内存模型(JMM)中的操作重排序和内存可见性问题。
2024-08-15 18:00:44
299
原创 JAVA 如何获取线程中异常
在Java中,获取线程异常的方式通常依赖于你如何创建和管理线程。Java线程可以通过实现Runnable接口或继承Thread类来创建。对于异常处理,有几种方法可以做到这一点。
2024-08-15 17:03:30
477
原创 NIO线程模型
通道是NIO中用于数据读写的组件,类似于标准IO中的流,但与之不同的是,通道是可以双向读写的。:选择器是NIO中的一个重要组件,用于检测一个或多个通道,并确定哪个通道已经准备好进行读或写。这样,一个单独的线程可以管理多个通道,从而实现高效的IO操作。:在NIO中,所有的数据读写都是通过缓冲区来进行的。:根据选择器返回的就绪事件,对相应的通道进行读写操作。:由于NIO采用了非阻塞的方式,因此可以避免传统IO模型中的阻塞现象,提高IO效率。:首先,需要将通道注册到选择器中,并指定感兴趣的事件(如读、写等)。
2024-08-09 16:26:52
547
原创 SpringBoot3 响应式编程
响应式编程是一种编程范式,它使用异步数据流来处理数据,并基于观察者模式来触发事件的响应。在Spring Boot 3中,响应式编程主要通过Spring WebFlux和Spring Data R2DBC等组件来实现。Spring Boot 3中的响应式编程通过Spring WebFlux和Spring Data R2DBC等组件提供了强大的异步、非阻塞和基于事件的数据处理能力。这使得开发者能够构建高性能、可扩展的Web应用程序,以应对现代互联网应用中的高并发和实时数据处理挑战。
2024-08-09 14:40:40
916
原创 Spring Boot 3 新特性
Spring Boot 3 官方支持Java 17,并且由于Java 17带来了许多新特性(如Record类、密封类和接口、模式匹配等),Spring Boot 3 也对这些新特性进行了优化和整合,使得开发者可以更高效地编写代码。: Spring Boot 3 基于 Spring Framework 6 构建,后者同样支持Java 17,并引入了许多新特性,如更细粒度的配置、更高效的日志记录、对WebFlux的增强等。这些改进使得开发者可以更方便地跟踪和诊断应用程序中的问题。
2024-08-09 14:00:04
1055
原创 JVM 加载阶段 Class对象加载位置是在 堆中还是方法区?
Class对象的加载位置:Class对象本身是加载到堆区中的。类的类型信息加载位置:类的类型信息(元数据)是加载到方法区(或元空间)中的。因此,对于问题“jvm 加载阶段 Class加载到堆中还是方法区”,答案是:Class对象加载到堆中,而类的类型信息加载到方法区(或元空间)中。这两个区域在JVM的类加载过程中都扮演着重要的角色,共同支持着Java程序的运行。
2024-08-06 17:56:45
984
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人