自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(105)
  • 收藏
  • 关注

原创 Java 17 迁移实战指南:从避坑到性能飙升的企业级实践

某集团级企业的迁移数据显示:完成 Java 17 升级后,开发效率提升 35%,线上 bug 量下降 42%,服务器成本降低 28%。这背后不仅是版本的更迭,更是开发模式的升级 —— 从 "被动维稳" 到 "主动优化",从 "单体厚重" 到 "云原生轻量"。对于仍在观望的团队,建议采用 "小步快跑" 策略:先在非核心服务(如后台管理系统)验证迁移方案,积累经验后再推广至交易、支付等核心链路。Java 17 不是终点,而是通往 AI + 云原生时代的必经之路。

2025-11-24 17:43:17 424

原创 Java 17 新特性深度解析与企业级应用实践

密封类作为 Java 15 的预览特性,在 Java 17 中终于迎来正式转正(JEP 409)。这一特性通过sealed关键字限制类的继承关系,解决了传统继承体系中 "类膨胀" 和 "访问控制松散" 的痛点。在电商系统的订单模块中,密封类可用于定义订单状态流转模型。通过sealed OrderStatus permits Pending, Paid, Shipped, Delivered的定义,能严格控制订单状态的变更范围,避免非法状态转换导致的业务异常,同时提升代码的可读性和可维护性。

2025-11-24 17:41:39 404

原创 Spring Boot 与 Java 实战:从基础搭建到企业级应用开发

摘要:SpringBoot作为Java企业级开发的首选框架,通过自动配置、起步依赖等特性大幅简化了开发流程。本文系统讲解SpringBoot的核心优势、基础搭建、核心功能(依赖注入、AOP、数据访问)及实战案例。重点包括:1)自动配置机制消除XML配置;2)起步依赖解决版本管理问题;3)嵌入式服务器简化部署;4)生产级特性增强运维能力。通过用户权限管理系统案例,结合SpringSecurity实现完整的RBAC权限控制,涵盖实体设计、JPA集成、安全配置等关键实现,帮助开发者快速构建高效、可扩展的企业级应用

2025-11-22 17:05:48 684

原创 MyBatis 深度实战:从基础映射到企业级性能优化

要熟练使用 MyBatis,首先需要理解其底层工作流程。MyBatis 的核心在于 “配置驱动 SQL 执行”,整个过程可分为初始化、SQL 解析、参数处理、执行与结果映射四个阶段,每个阶段都有明确的组件分工。

2025-11-22 16:36:11 686

原创 Java 并发编程深度剖析:从问题根源到实战优化

Java 并发编程既是技术难点,也是提升应用性能的关键突破口。从理解原子性、可见性、有序性三大核心问题,到熟练运用synchronized、ReentrantLock、线程池等工具,再到掌握虚拟线程、结构化并发等前沿特性,开发者需要建立一套完整的并发知识体系。在实际项目中,并发设计需遵循 “需求导向、数据驱动” 的原则:首先明确业务的并发量、响应时间要求,通过性能测试定位瓶颈;然后选择合适的并发工具与架构模式,平衡线程安全与性能;

2025-11-20 17:09:48 694

原创 Java 17 深度解析:新特性、性能优化与企业级应用实践

Java 17 作为继 Java 8、Java 11 后的又一 LTS 版本,不仅修复了 3000 + 已知问题,更通过革命性的特性升级和性能优化,为企业级应用开发注入新的活力。从密封类带来的架构严谨性,到 ZGC 实现的毫秒级延迟,再到全方位的安全加固,Java 17 正在重新定义企业级应用的技术标准。对于开发者而言,掌握 Java 17 不仅意味着提升开发效率,更代表着把握了未来 5 年 Java 技术的发展方向。

2025-11-20 16:43:52 557

原创 Java 并发编程进阶:从线程安全到高并发架构优化

java运行// 分段锁优化:解决库存超卖问题(按商品ID分段)// 分段锁:key=商品ID,value=对应商品的锁// 共享资源:商品库存(key=商品ID,value=库存数量)static {// 初始化:商品ID=1001,库存=100// 秒杀方法(按商品ID分段加锁)// 获取对应商品的分段锁System.out.printf("线程%s:商品%s不存在%n", Thread.currentThread().getName(), productId);

2025-11-14 16:20:27 936

原创 Java 函数式编程深度实战:从 Lambda 到 Stream API 的工程化落地

若内置函数式接口无法满足需求,可自定义函数式接口,需满足 “仅有一个抽象方法” 的规范。java运行// 自定义函数式接口:双参数加法运算(也可使用内置BiFunction)// 内置BiFunction替代自定义接口// 1. 使用自定义函数式接口// 输出:30// 2. 使用内置BiFunction(双参数函数式接口)// 输出:4.0Java 函数式编程并非替代传统命令式编程,而是提供了一种更简洁、更高效的编程范式,尤其适用于集合操作、异步编程、代码复用等场景。核心概念。

2025-11-14 15:57:36 906

原创 Java 11+ 新特性实战:从 LTS 版本特性到生产级应用优化

/ Java 8:定义UserDTO类,需编写大量模板代码// 无参构造器// 全参构造器(5个参数,代码冗长)// Getter方法(5个字段,每个字段3行代码)return id;return age;// Setter方法(5个字段,每个字段3行代码)// equals方法(需判断每个字段)@Override// hashCode方法(需计算每个字段的哈希值)@Override// toString方法(需拼接每个字段)

2025-11-13 16:51:50 427

原创 Java 9+ 模块化系统(Jigsaw)实战:从 Jar 地狱到模块解耦的架构升级

在理解 Java 模块化系统之前,我们首先要明确:传统classpath机制在依赖管理、权限控制、架构设计等方面存在明显短板,这些痛点在大型项目或框架开发中尤为突出。// 定义模块:模块名称为com.example.service(遵循反向域名规则,确保唯一性)// 模块元信息(依赖、导出等)

2025-11-13 16:48:36 488

原创 Java 并发编程高级实战:从线程安全到锁优化的深度解析

在理解 Java 并发高级特性之前,我们首先要明确:传统并发编程在高并发场景(如秒杀系统、分布式任务调度)中存在明显短板,这些痛点会导致线程安全问题、性能低下或资源浪费。

2025-11-12 16:26:55 783

原创 Java 8 Stream API 高级实战:从数据处理到性能优化的深度解析

Stream 提供的Collectors工具类包含toList()、groupingBy()、summingInt()等基础收集器,但在复杂聚合场景(如 “按用户分组后计算每个用户的订单平均金额与最大金额”“将集合转换为自定义数据结构”)中,基础收集器无法满足需求,需手动编写冗余代码。// 需求:按用户ID分组,计算每个用户的订单总数、总金额、平均金额// 基础API实现:先分组,再遍历计算(冗余)// 手动遍历分组结果,计算聚合指标// 计算订单总数// 计算总金额。

2025-11-12 16:20:17 918

原创 Java 8 CompletableFuture 实战:从传统异步到响应式编程的过渡

java.util.concurrent.Future是传统异步编程的核心接口,用于表示异步任务的结果,但它无法实现任务的链式执行 —— 若一个任务的输出是另一个任务的输入,需手动阻塞获取前一个任务的结果,再启动后一个任务,代码冗余且效率低。实际业务中,常需组合多个异步任务(如 “并行执行 3 个查询任务,全部完成后汇总结果”“任意一个任务完成后立即返回”),但传统Future缺乏对应的 API,需手动编写复杂的线程同步逻辑(如CountDownLatch)。执行无返回值的异步任务。是(指定自定义线程池)

2025-11-11 16:39:53 553

原创 Java 8 日期时间 API(java.time)实战:彻底告别 Date 与 SimpleDateFormat 的坑

在理解 java.time API 之前,我们首先要明确:旧日期 API 的设计缺陷是导致开发效率低、线上故障多的核心原因,这些痛点在高并发场景下尤为突出。

2025-11-11 16:35:11 883

原创 Java 17 密封类(Sealed Classes)进阶实战:从类型安全到领域模型的精准约束

在理解密封类之前,我们首先要明确:传统 Java 的继承机制缺乏对 “子类范围” 的约束,导致在类型判断、代码维护、设计契约遵守等方面存在明显短板。密封类通过sealed关键字定义,并通过permits子句明确指定允许的子类,语法格式如下:// 密封类定义格式sealed class 密封类名 permits 子类1, 子类2, ... {// 类体(抽象方法、字段、构造器等)// 抽象密封类:支付方式(仅允许Alipay、WechatPay为子类)// 抽象方法:支付(定义父类契约)

2025-11-10 10:59:40 269

原创 Java 18 Vector API(孵化器)实战:从传统数组运算到硬件加速的性能跃迁

在理解 Vector API 之前,我们首先要明确:现代 CPU 的硬件架构已支持 SIMD 指令(如 Intel 的 AVX、AMD 的 SSE、ARM 的 NEON),但传统 Java 数组运算无法充分利用这一特性,导致性能浪费。实际开发中,数组长度往往远大于向量的Shape(如百万级元素),此时需通过 “循环分块” 将数组拆分为多个向量块,逐一处理,最后处理剩余元素(不足一个向量的部分)。矩阵乘法是科学计算的核心运算(如有限元分析、流体力学模拟),传统实现性能低下,Vector API 可大幅加速。

2025-11-10 10:42:18 417

原创 Java 16 记录类(Records)实战:从模板代码冗余到数据载体的优雅实现

在理解记录类之前,我们首先要明确:传统 Java 中定义数据载体类的方式,在效率、正确性、可维护性上都存在明显短板,尤其在微服务、分布式系统等需要大量 DTO/VO 的场景中,问题更为突出。记录类通过record关键字定义,语法格式如下:// 记录类定义格式record 记录类名(字段1类型 字段1名, 字段2类型 字段2名, ...) {// 可选:自定义方法、构造器(需遵循记录类规则)// 记录类定义:1行代码替代传统50行代码。

2025-11-09 13:40:01 668

原创 Java 17 密封类(Sealed Classes)实战:从类型安全到架构解耦的范式升级

密封类通过sealed关键字修饰基类,并通过permits关键字显式指定允许继承的子类,语法格式如下:// 密封类定义格式sealed class 基类名 permits 子类1, 子类2, 子类3 {// 类成员(字段、方法、构造器)// 密封基类:OrderStatus,允许4个子类继承// 构造器(子类必须调用)// 抽象方法:处理状态变更(子类必须实现)// getter// 子类1:待支付状态(final,不可再继承)

2025-11-09 13:36:38 1113

原创 Java 11+ HttpClient 实战:从 HttpURLConnection 到现代 HTTP 客户端的全面升级​

http包),它融合了HttpURLConnection的原生优势与第三方库的现代特性,支持同步 / 异步请求、HTTP/2、WebSocket、拦截器等功能,彻底革新了 Java 原生 HTTP 请求的开发体验。例如,发送一个简单的 POST 请求,需要手动设置请求方法、请求头、处理输入输出流,且异常处理复杂:​。新版 HttpClient 的使用围绕 3 个核心组件展开:HttpClient(客户端实例)、HttpRequest(请求对象)、HttpResponse(响应对象),它们的关系如下:​。

2025-11-08 17:03:06 913

原创 Java 9 + 模块化系统实战:从 Jar 地狱到模块解耦的架构升级​

Java 模块化系统是 Java 语言从 “面向类” 到 “面向模块” 的重要升级,它通过 “显式依赖”“边界隔离”“服务发现” 等特性,彻底解决了传统 Jar 依赖的痛点,为大型 Java 应用的架构解耦提供了语言层面的支持。与 ClassPath 的区别:​。本节将通过一个 “电商应用” 案例,展示模块化应用的完整搭建流程,包含 “用户模块”“订单模块”“支付模块” 和 “主应用模块”,实现模块间的依赖与解耦。以下是 6 个常见误区及避坑建议:​。以下是最常用的 5 类配置:​。

2025-11-08 16:54:10 675

原创 Java 8 Stream API 实战:从循环遍历到函数式编程的效率革命

Java 8 引入的Stream API彻底改变了集合操作的范式,它基于函数式编程思想,通过 “链式调用”“惰性执行” 和 “并行优化”,让复杂的集合操作代码更简洁、更高效、更易维护。Stream API 通过 “抽象集合操作”,将开发者从 “如何遍历” 的细节中解放出来,专注于 “要做什么” 的业务逻辑,其核心价值可概括为 3 点:​。.sorted((u1, u2) -> Integer.compare(u2.getAge(), u1.getAge())) // 降序​。

2025-11-07 15:28:22 784

原创 Java 8 Optional 类实战:从根源杜绝空指针异常的优雅方案

Optional 类是 Java 8 为空值处理提供的优雅解决方案,它通过 “容器化封装” 和 “链式调用”,消除了传统的嵌套 if 判断,强制开发者处理空值场景,从根源上减少了空指针异常的发生。Optional 的map()、filter()等方法属于 “中间操作”,它们具有 “惰性执行” 的特性 —— 即仅记录操作逻辑,不立即执行,直到调用orElse()、get()等 “终止操作” 时才触发整个链式流程的计算。例如,要获取 “用户的订单的商品的分类名称”,传统代码如下:​。

2025-11-07 14:38:20 424

原创 Java 8 CompletableFuture 异步编程实战:从基础到业务落地的全解析​

CompletableFuture 是 Java 8 异步编程的核心工具,它通过 “链式调用”“任务组合”“异常处理” 等特性,解决了传统Future的局限性,让异步编程更简洁、更优雅。自定义线程池后,若未在应用关闭时关闭线程池,会导致线程资源泄漏(线程一直存活,无法回收)。

2025-11-06 16:06:38 695

原创 Java 8 Stream API 进阶实战:从基础到业务落地的全解析​

Stream 的中间操作中,limit()、findFirst()、anyMatch()等属于 “短路操作”—— 当满足条件时,立即终止流的计算,避免后续不必要的遍历,尤其适合 “大数据量筛选” 场景。在学习进阶用法前,需先明确 Stream 的本质 —— 它不是集合,也不是数据结构,而是对集合或数组的 “计算管道”,支持链式调用的中间操作与终止操作,最终生成结果。Stream 的操作分为 “中间操作” 和 “终止操作”,两者的区别直接影响代码性能:​。

2025-11-06 16:00:43 681

原创 Java 并发工具类实战:CountDownLatch 与 CyclicBarrier 深度解析

和是 Java 并发编程中 “线程协调” 的利器,它们分别解决了 “单向等待” 和 “双向等待” 的问题,避免了复杂的wait()notify()逻辑(易出错且效率低)。:适合 “一个或多个线程等待其他线程完成” 的场景,如任务汇总、系统初始化;:适合 “多个线程分阶段同步执行” 的场景,如多轮训练、分阶段数据处理。在实际开发中,需根据线程角色和任务流程选择合适的工具类,并注意异常处理和资源释放,才能写出高效、安全的并发代码。

2025-11-05 17:16:59 384

原创 Java NIO 深度解析:从 BIO 到 NIO 的演进与实战​

这种非阻塞特性,使得线程无需等待 I/O 操作完成,可同时处理多个 Channel 的请求,大幅提升线程利用率。Selector 的 “多路复用” 本质是借助操作系统的I/O 多路复用机制(如 Linux 的、Windows 的),实现用一个线程监听多个文件描述符(Channel 对应操作系统的文件描述符)的事件。以 Linux 的为例,Selector 的底层工作流程如下:相比传统的机制,具有 “无连接数限制”“事件驱动” 的优势,能高效处理 10 万级以上的连接,这也是 NIO 支持高并发的核心原因。N

2025-11-05 17:07:32 933

原创 深入理解 Java 注解机制:从原理到自定义注解实战​

在 Java 开发中,注解(Annotation)是一个无处不在的技术点 —— 从@Override标记方法重写,到 Spring 的@Autowired实现依赖注入,再到 JUnit 的@Test标识测试方法,注解简化了代码配置,提升了开发效率。本文将从注解的本质出发,详解注解的分类、解析流程、自定义注解实现,以及在框架中的应用场景,帮你真正掌握注解的 “从 0 到 1”。掌握自定义注解是理解框架注解原理的关键。元注解是 “定义注解的注解”,必须写在自定义注解的上方,用于限制注解的使用规则:​。

2025-11-05 17:03:34 855

原创 Java Stream API 深度解析:从原理到实战的全方位指南​

当我们从集合(如List)中获取 Stream 时(如list.stream()),Stream 并不会复制集合中的数据,而是记录 “从集合中读取数据,并执行一系列处理操作” 的流程。.forEach(user -> System.out.printf("姓名:%s,年龄:%d%n", user.getName(), user.getAge()));.filter(order -> order.getCreateTime().isAfter(thirtyDaysAgo)) // 重复筛选​。

2025-11-03 23:11:58 913

原创 深入理解 Java 反射机制:原理、实践与风险防控​

它打破了类的封装性,让程序能在运行时动态操作类、对象与方法,是许多框架(如 Spring、MyBatis)实现 “解耦” 与 “灵活配置” 的核心基础。java.lang.reflect包提供了实现反射所需的核心类,包括Class(类信息)、Constructor(构造器)、Method(方法)、Field(属性)、Parameter(方法参数)等。Java 是一门静态编译型语言,在程序编译阶段,编译器会对类的结构(属性、方法、构造器)进行检查,若代码中引用了未定义的类或方法,会直接抛出编译错误。

2025-11-03 23:03:14 521

原创 Java 线程池深度解析:原理、实战与性能优化​

这些操作都需要内核态与用户态的切换,若频繁创建销毁线程(如每秒处理数千个短任务),会导致大量 CPU 资源消耗在 “线程管理” 上,而非 “任务执行” 本身。原因:线程池中的线程是复用的,若线程中存在 “线程局部变量(ThreadLocal)” 未清理,会导致数据串用(如前一个任务的 ThreadLocal 值被后一个任务读取)。// 线程编号计数器​。适用场景:非核心业务(如日志打印),可通过 “调用者线程执行” 降低任务丢失风险,同时起到 “限流” 作用(调用者线程被占用,减少新任务提交)。

2025-11-03 22:44:24 454

原创 深入解析 Spring Boot 自动配置:原理、实战与进阶技巧​

理解这三者的协同工作机制,是掌握自动配置的关键。Spring Boot 自动配置遵循 "用户自定义优先" 的原则,当用户自定义了某个 Bean 时,自动配置的默认 Bean 会失效。启动应用后,控制台会输出自动配置的详细日志,包含 "Positive matches"(生效的配置)和 "Negative matches"(未生效的配置),例如:​。Spring Boot 的自动配置正是为解决这些痛点而生,它通过 "约定优于配置" 的理念,将常见场景的配置标准化,让开发者专注于业务逻辑而非框架配置。

2025-11-03 22:35:00 927

原创 深入解析 Spring Boot 自动配置:原理、实践与进阶​

它会读取 Spring Boot 内置的META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件(Spring Boot 2.7 + 版本,此前版本为spring.factories),该文件列出了约 130 个预定义自动配置类(如DataSourceAutoConfiguration、WebMvcAutoConfiguration),覆盖 Web 开发、数据访问、安全认证等场景。

2025-11-03 22:00:23 1046

原创 深入剖析 Java HashMap

HashMap 是基于哈希表实现的 Map 接口的非同步实现类,它允许使用 null 值和 null 键(但 null 键最多只能有一个),存储的元素是无序的。这意味着,当你往 HashMap 中放入一系列键值对后,再遍历它时,不能期望按照插入的顺序获取到元素。其核心优势在于能够在接近常数时间复杂度内完成数据的插入、删除和查找操作,这得益于哈希算法的精妙运用。

2025-01-02 16:44:10 897

原创 深入理解 Java Class

Java 类是一种用户自定义的数据类型,它将数据(以成员变量的形式)和操作这些数据的方法封装在一起。可以把类想象成一个蓝图或者模板,基于这个模板,我们能够创建出一个个具体的 “对象”,这些对象就是类在内存中的实例化表现,它们拥有类所定义的属性和行为。例如,我们要创建一个描述 “汽车” 的类:// 成员变量,描述汽车的属性// 构造方法,用于初始化对象// 成员方法,描述汽车的行为System.out.println(brand + " " + color + " 汽车正在行驶。

2025-01-02 16:41:27 1030

原创 深入探究 Java hashCode:核心要点与实战应用

hashCode ,作为 java.lang.Object 类中的一个本地方法,与生俱来地赋予了 Java 世界里每一个对象独特的标识能力 —— 以一个整数值的形式呈现。这一数值绝非随意生成,它承载着对象在特定情境下的关键特征信息,旨在为后续一系列需要快速定位、比较对象的操作提供便捷通道。从底层视角窥探,不同的 Java 虚拟机(JVM)在实现 hashCode 的生成算法时虽略有差别,但大致思路皆围绕对象的内存地址、内部状态(即成员变量的值),或是二者精妙融合展开。

2024-12-31 15:46:01 1430

原创 深入理解 Java hashCode

简单来说,hashCode 是一个本地方法(native method),定义在 java.lang.Object 类中,意味着 Java 中的每一个对象都与生俱来拥有获取 hashCode 值的能力。它返回一个整数值,这个值理论上应该尽可能唯一地标识该对象在其生命周期内的某种特征,以便在特定的数据结构中(如 HashSet、HashMap 等基于哈希表实现的集合)能够快速定位和操作对象。

2024-12-31 15:41:49 1670

原创 深入探究 Java 中的 hashCode 方法

hashCode 方法绝非 Java 编程中的边缘配角,而是深入骨髓影响程序架构、性能、数据完整性的关键要素。精准把握其设计原则、实现技巧以及与 equals 方法的默契配合,是每一位进阶 Java 开发者的必备技能。回顾过往要点:从理解其作为哈希表导航灯塔的基础用途,到遵循一致性、协同性的设计铁律;从掌握常见基于属性组合或质数乘积的实现路径,到洞悉哈希冲突根源并灵活运用开放定址、链地址等应对策略;再到实战于集合、缓存、分布式系统等多元场景,我们逐步揭开了 hashCode 方法的神秘面纱。

2024-12-27 14:56:29 1280

原创 深入理解 Java 中的 equals 方法

深入理解 equals 方法是每一位 Java 开发者进阶之路上的必经站点。它不仅仅是一个简单的比较操作方法,更是关乎代码逻辑正确性、稳定性以及性能的核心要素。只要自定义类有需要按照业务逻辑判断对象相等的场景,就果断重写 equals 方法,并同时重写 hashCode 方法,确保两者遵循规范协同工作。重写 equals 方法时,严格对照自反性、对称性、传递性、一致性原则进行代码编写与测试,哪怕细微的违背都可能在日后引发大问题。

2024-12-27 14:52:02 2357

原创 深入探索 Java HashMap

HashMap 实现了 Map 接口,允许使用 null 值和 null 键(但 null 键最多只能有一个),它基于哈希表的散列桶(hash bucket)原理来存储数据,旨在提供快速的插入、删除和查找操作。相较于一些其他简单的数据结构,如数组(查找快但插入删除慢且需连续内存空间)、链表(插入删除快但查找慢),HashMap 巧妙地结合两者优势,通过哈希函数将键均匀地分散到各个桶(bucket)中,在理想情况下,能够以接近常数时间复杂度完成基本操作。

2024-12-26 10:41:25 670

原创 深入理解 Java WeakReference

WeakReference 在 Java 内存管理体系中占据着独特的地位,它为开发者提供了一种在特定场景下精细控制对象生命周期的手段。通过深入理解其原理、应用场景以及注意事项,我们能够在开发中更好地利用弱引用来优化内存使用,避免因对象持有不当导致的内存泄漏问题,提升应用程序的性能与稳定性。无论是构建复杂的缓存系统,还是处理对象间微妙的生命周期依赖关系,WeakReference 都是我们手中的有力武器,合理运用它,能让 Java 程序在内存这片 “战场” 上更加游刃有余。

2024-12-26 10:38:47 1075

编写的机器学习相关项目

编写的机器学习相关项目

2025-03-25

《JAVA 系统》--_JAVA GUI 图书馆管理系统 - 副本.zip

一些图书、员工、学生管理系统

2025-03-18

《JAVA 系统》--_一个简单漂亮的SSM(Spring+SpringMVC+Mybatis)博客系统.zip

一些图书、员工、学生管理系统

2025-03-18

《JAVA 系统》--_MPush开源实时消息推送系统.zip

一些图书、员工、学生管理系统

2025-03-18

《JAVA 系统》--_ssh员工管理系统.zip

一些图书、员工、学生管理系统

2025-03-18

《JAVA 系统》--_java学生管理系统.zip

一些图书、员工、学生管理系统

2025-03-18

《JAVA 系统》--_MPush开源实时消息推送系统.zip

《JAVA 系统》--_MPush开源实时消息推送系统

2025-03-18

《JAVA 系统》-java图书管理系统.zip

一个图书管理系统

2025-03-18

Java-master.zip

Java-master.zip

2024-11-08

java-master2

java-master2

2024-11-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除