Java

浏览该分类下的所有文章

JVM对象创建与内存分配机制

JVM在执行new指令时首先检查类是否已加载、解析、初始化,然后在堆中为对象分配内存,采用“指针碰撞”或“空闲列表”方式,并通过CAS或TLAB解决并发冲突。分配后进行零值填充,设置对象头(包含hash、年龄、锁状态、类指针等),最后执行构造函数完成属性赋值。对象大小受对象头、实例字段和8字节对齐填充影响,默认开启指针压缩(UseCompressedOops/UseCompressedClassPointers)以降低内存占用并支持最高32 GB堆。JVM通过逃逸分析和标量替换可将不逃逸对象分配到栈上,减轻GC压力。

微服务入门(SpringCloud Alibaba)

本文以 Spring Cloud Alibaba 为例,演示了微服务项目的搭建流程。首先创建 Maven 父工程 cloud2021,统一管理 Spring Boot、Spring Cloud、Alibaba 以及 MySQL、Druid、MyBatis 等依赖,并通过 dependencyManagement 锁定版本。随后在父工程下新增支付服务模块 cloud‑provider‑payment8001,编写子模块 pom 引入公共 api 包及 Web、Actuator、MyBatis、Druid 等必要依赖;在 application.yml 中配置服务端口、Spring 应用名、Druid 数据源及 MyBatis 扫描路径;最后提供启动类 PaymentMain8001。全文展示了父子模块结构、依赖声明、资源配置及启动入口的完整实现,为新手快速搭建 Spring Cloud Alibaba 微服务提供了可复制的模板。

JVM类加载机制

JVM在执行 main 方法时先通过类加载器把主类加载到方法区,加载过程依次为加载、验证、准备、解析、初始化。加载阶段在内存生成对应的 Class 对象;验证检查字节码合法性;准备为静态字段分配默认值;解析把符号引用转为直接引用;初始化执行静态代码块并赋予真实值。JVM 提供引导、扩展、应用和自定义四种加载器,启动时由 Launcher 创建 ExtClassLoader 与 AppClassLoader。类加载遵循双亲委派机制:先交给父加载器(最终到引导加载器)尝试加载,若失败再由当前加载器自行查找。示例代码展示了按需加载、静态块打印以及各加载器的加载路径,说明了类加载的延迟性和层次结构。

使用Spring Boot整合Mybatis-Plus实现数据库的增删查改

文章详细演示了在 Spring Boot 项目中使用 Mybatis‑Plus 完成增删改查的全过程。首先在 MySQL 中创建 `tbl_employee` 表并插入示例数据;随后初始化 Spring Boot 项目并在 `pom.xml` 中加入 Mybatis‑Plus、MySQL、Druid 等依赖。将数据库连接配置写入 `application.yml`,使用 Lombok 编写实体类并通过 `@TableName`、`@TableId`、`@Version` 注解映射表结构。定义继承 `BaseMapper` 的 Mapper 接口并在启动类上使用 `@MapperScan` 指定扫描路径。最后提供 JUnit 测试代码,分别演示 `selectList`、`insert`、`update`、`delete` 等 CRUD 操作的使用方法,验证 Mybatis‑Plus 与 Spring Boot 的无缝集成。

Elasticsearch初体验-----将MySQL的数据导入kibana并展示到页面

本文详细演示了在已装 Docker 的服务器上,使用 Docker 部署单节点 Elasticsearch(7.12.1)和 Kibana(7.12.1),包括创建专用网络、加载镜像、配置容器参数及端口映射。随后通过 Kibana 的 DevTools 界面验证 ES 连接,并使用 MyBatis‑Plus 编写 Java 示例代码,将 MySQL 中的酒店数据批量转换为文档(HotelDoc),利用 RestHighLevelClient 的 BulkRequest 写入名为 hotel 的索引。最终在 Kibana 页面成功展示导入的数据,实现 MySQL 数据在 Elasticsearch 与 Kibana 可视化的完整流程。

Redis实战常见问题与解决方案

Redis在Java项目中常见的穿透、击穿、雪崩等缓存问题,可通过布隆过滤、互斥锁或逻辑过期、随机TTL等手段防御;为保证缓存与库的一致性,采用延迟双删或基于消息队列的最终一致方案;大key导致内存压力时,可拆分分片或使用合适的数据结构;通过配置allkeys‑lru、合理的maxmemory‑policy 以及 Jedis 连接池的 maxTotal、maxIdle、testOnBorrow 等参数,提升内存管理和连接稳定性。整体提供了代码示例和实践要点,帮助开发者在实际使用 Redis 时避免性能瓶颈和数据错误。

SpringBoot开发中的十大常见问题与解决方案

本文围绕SpringBoot 开发中常见的十类问题提供实战解决方案,重点包括:① 多环境配置的 profile 与 @ConfigurationProperties 正确写法,防止加载顺序混乱;② 自动装配冲突、循环依赖及多实现注入的 @Lazy、@Primary、@Qualifier 用法;③ @Transactional 生效条件、事务传播属性及事务管理器配置;④ Hikari 连接池参数、泄漏检测与监控端点的设置;⑤ Redis 缓存的穿透、击穿、雪崩和一致性处理,示例 cacheable、空值缓存、分布式锁和 @CacheEvict。文章通过完整代码示例,帮助开发者快速定位并规避这些坑,提高 SpringBoot 项目可靠性与性能。

Java 21 新功能介绍(LTS)

Java 21(2023 9月发布)是继 17 后的下一个 LTS,正式推出 15 项 JEP。核心亮点包括:虚拟线程(JEP 444)实现数百万轻量线程、资源占用极低,配合结构化并发(JEP 453)提供任务范围管理与异常传播;序列集合(JEP 431)扩展 List、Map 的顺序操作;记录模式与增强的模式匹配(JEP 440)提升解构与 switch 表达力;外部函数与内存 API(JEP 442)取代 JNI,实现安全高效的本地调用;还有字符串模板(预览)、分代 ZGC、后量子密钥封装等特性。文中指出了已弃用的 Windows 32‑bit、Applet、Security Manager 等,并给出兼容性检查、虚拟线程与 ZGC 调优建议。通过高并发 Web 服务和 ETL 场景示例,展示新并发模型的实际价值,并展望虚拟线程、模式匹配和 Project Loom 将继续驱动 Java 生态演进。开发团队应尽早评估迁移,以享受长期支持和性能提升。

SpringBoot整合阿里云实现短信验证码功能

本文详述在 Spring Boot 项目中集成阿里云短信服务并结合 Redis 实现验证码功能的完整步骤。先在 pom.xml 引入阿里云 SDK、Redis 与工具类依赖,随后在 application.yml 配置阿里云账号、短信模板、Redis 连接及验证码参数(有效期、长度、重发间隔)。文中提供 RedisTemplate 与阿里云短信 Client 的 Java 配置类,定义发送与校验验证码的 Service 接口及实现。实现逻辑包括手机号校验、发送频率限制、随机验证码生成、将验证码存入带过期时间的 Redis、调用阿里云 API 发送短信,以及校验时的错误次数防暴力破解、验证码失效处理和一次性删除。整体方案实现了高效、可控且安全的短信验证码系统。

Redis6标准配置文件

本文提供 Redis 6 标准配置文件示例,说明如何通过命令行加载配置、单位写法以及包含其它文件的用法。列出模块加载方式、网络参数(bind、protected‑mode、端口、tcp‑backlog、unix‑socket、连接超时、keepalive)及其安全警示。重点介绍 TLS/SSL 配置,包括启用 tls‑port、证书/私钥文件、客户端证书、DH 参数、CA 证书及客户端认证模式。整体展示各项可选指令的作用与最佳实践。

CentOS 7 安装 JDK 8、MySQL 8、Redis 6、Nginx保姆级教程

本文提供在 CentOS 7 上一步步安装 JDK 8、MySQL 8、Redis 6 与 Nginx 的完整指南。包括卸载旧 Java、使用 yum 安装 OpenJDK 并配置环境变量;添加阿里云和 MySQL 官方仓库、安装并启动 MySQL、开放 3306 端口;安装编译依赖后源码编译 Redis、编辑配置、创建 systemd 服务实现开机自启;通过 epel 安装 Nginx、设置开机启动、检查状态并放通 HTTP/HTTPS 防火墙端口。

Swagger使用教程

Swagger是基于OpenAPI的完整生态,包含规范(YAML/JSON)、交互文档(Swagger UI)、编辑器(Editor)和代码生成(Codegen)。教程分别演示了Node.js + Express和Spring Boot的集成方式,使用JSDoc或注解生成OpenAPI文档并通过/api‑docs查看。随后说明编写OpenAPI YAML、利用UI手动或自动化测试、使用Codegen生成服务器骨架和客户端SDK,以及生产环境的安全和CI/CD最佳实践。最后建议“契约先行”,先设计规范再生成代码,提升前后端协作效率与质量。