Java

浏览该分类下的所有文章

反射机制:原理、应用与最佳实践

Java 反射允许在运行时获取类的元信息并动态操作对象,核心 API 包括 Class、Field、Method、Constructor。获取 Class 可通过类字面量、对象 getClass() 或 Class.forName()。利用反射可创建实例、访问私有成员、调用方法,常用于动态代理、框架实现和单元测试。反射带来性能开销和安全风险,建议限制使用、缓存 Class 对象并在敏感操作中使用 AccessController.doPrivileged()。合理使用可提升灵活性,滥用则导致瓶颈与安全隐患。

Java并发编程:深入理解Synchronized关键字与ReentrantLock

本文系统阐述了 Java 并发中的两大锁机制:synchronized 与 ReentrantLock。synchronized 作为语言层面的基础同步,支持方法/代码块锁、对象锁、类锁,可重入但默认非公平,使用简洁安全。ReentrantLock 属于 java.util.concurrent.locks,提供显式加锁、可选公平/非公平、超时尝试、Condition 条件变量等高级特性,同样可重入,但需手动释放,使用复杂且易致死锁。文章比较两者在性能、灵活性、可读性及适用场景,建议在简单同步时优先使用 synchronized,需细粒度控制或条件等待时选用 ReentrantLock,以实现高效安全的并发程序。

深入理解Java虚拟机(JVM):内存模型与垃圾回收机制

本文系统阐述了JVM的内存结构与垃圾回收机制。首先介绍了程序计数器、虚拟机栈、本地方法栈、Java堆和方法区五大内存区域及其作用;随后解析了四类GC算法——标记‑清除、复制、标记‑整理和分代收集,并给出GC调优要点,包括选择合适的收集器、合理配置堆大小、优化对象分配以及使用VisualVM、JConsole等工具监控分析。掌握这些内容有助于提升代码性能、避免内存泄漏,并在面试中展示技术深度。

SpringBoot接口加密解密工具

本文介绍了一个基于 SpringBoot、通过注解实现的接口加密解密工具。工具支持 Base64、DES、3DES、AES、RSA 等对称/非对称算法以及 MD5 加密,只需在接口上添加 @ZxfEncryptResponse 或 @ZxfDecryptRequest 并指定 AlgorithmType 即可完成响应加密或请求解密。使用步骤包括拉取代码、打包成 jar、在项目中引入依赖并在配置文件中配置相应的密钥(DES、3DES、AES、RSA 公私钥),提供了一套可直接使用的密钥示例以及示例代码。项目源码已开源于 Gitee。

ChatGPT的api接口调用

本文介绍了在网站中接入ChatGPT问答功能的基本流程:准备可访问Google的网络环境和海外服务器,注册OpenAI账号并获取API Key,按照官方文档使用HTTP请求调用接口。提供了PHP示例代码,说明参数设置、请求头构造及返回结果处理。并提醒使用费用、代金券有效期以及防骗注意事项。

Spring定时任务

Spring在项目中通过Spring Integration模块提供定时任务功能,核心接口为TaskExecutor(执行Runnable)和TaskScheduler(调度任务)。常用实现包括ThreadPoolTaskExecutor和ThreadPoolTaskScheduler,满足大多数需求。使用时在配置类上加@EnableScheduling,标注@Scheduled的方法会被自动调度,方法必须无参无返回。默认单线程,可通过实现SchedulingConfigurer或在配置文件中设置spring.task.scheduling.pool.size来扩展线程池。@Scheduled支持cron表达式、fixedRate、fixedDelay和initialDelay等参数,分别控制执行频率、间隔和启动延迟。

HTML获取SpringBoot从model传的值

本文说明了在 Spring Boot 中如何通过 Controller 的 Model 向前端页面传递数据,并在 HTML 模板中使用 Thymeleaf 语法 [[${...}]] 获取并显示这些值。文章给出典型的 Controller 代码示例(使用 model.addAttribute 将数据放入模型),以及对应的 HTML 写法,演示了渲染后的效果图,帮助读者快速掌握后端数据在前端页面的读取与展示方法。

JS制造一个方法的方法

文章列举了 JavaScript 中声明函数的多种写法:传统函数声明、函数表达式、箭头函数之外,还可通过 `eval` 动态生成函数或使用 `new Function` 构造函数。后者接受参数名和函数体的字符串,可在运行时拼接代码并返回新函数,虽用得少但在需要动态生成代码时仍有价值。

ChatGPT国内免费使用

本文介绍了一个提供国内免费使用ChatGPT的中文网站,用户可通过链接 https://chat.gptchinese.info 直接访问并使用ChatGPT服务。

win10下部署emqx,报错Unable to load emulator DLL问题

在 Windows 10 上部署 EMQX 时,直接运行 `emqx start` 会报 “Unable to load emulator DLL”。原因是缺少 Erlang/OTP 运行时。解决办法是先从 Erlang 官方或阿里云盘下载安装 Erlang/OTP,完成后重新打开命令行,进入 EMQX 的 `bin` 目录执行 `emqx install`。安装成功后再执行 `emqx start`,即可在浏览器访问 `http://127.0.0.1:18083`,使用用户名 `admin`、密码 `public` 登录。完成后可通过 `emqx stop` 停止服务。

Java基础(一)

Java 通过将源代码编译为平台无关的字节码,再由各平台对应的 JVM 翻译为机器码,实现“一次编写、处处运行”。一个 .java 文件可含多个类,但只能有一个 public 类且名称须与文件名一致。访问修饰符有 private、default、protected、public,分别控制成员在类、同包、子类及任意位置的可见性;类本身仅有 default 与 public 两种可见性。Java 数据类型分为 8 种基本类型(整数、浮点、字符、布尔)和引用类型(数组、类、接口),基本类型有固定的内存占用和默认值,引用类型默认 null。成员变量分为实例变量(存于堆、随对象生命周期)和类变量(存于方法区、随类加载),局部变量存于栈且无默认值。为使基本类型具对象特性,提供对应的包装类,JDK1.5 起支持自动装箱/拆箱,简化基本类型与包装类之间的转换。比较 Integer 与 Double 时应先转换为相同的基本类型(如 double)再使用 ==。

Java基础(二)

本文围绕 Java 基础概念展开,说明 int 与包装类 Integer 的区别及 == 比较时的自动拆箱;阐述面向对象的本质、三大特征(封装、继承、多态)及封装的目的;解析多态的实现原理、单继承原因以及多继承的局限;比较方法的重写与重载、指出构造方法不可重写;并简要介绍 Object 类常用方法(getClass、equals、hashCode、toString、wait/notify、clone、finalize)。整体突出 OOP 基础理论与 Java 语言特性的核心要点。