Ajax Zhan's Blog
Welcome!This is Ajaxzhan.
坚信:品味优先于执行,价值驱动下创造、系统工程保安全
持续跟进AI前沿研究,持续思考技术、产品与思维。
坚信:品味优先于执行,价值驱动下创造、系统工程保安全
持续跟进AI前沿研究,持续思考技术、产品与思维。
本文介绍了防重幂等的概念及SpringBoot实现方案。防重幂等旨在防止用户重复提交相同数据导致业务异常,通过AOP+Redis实现。核心设计思路是:将用户路径、请求参数和Token生成唯一ID存入Redis,拦截重复请求。实现方案包括自定义@RepeatSubmit注解(设置间隔时间、时间单位和提示消息)和@RepeatSubmitAspect切面(前置验证、后置处理和异常处理)。切面通过MD5生成唯一标识,Redis存储限制同参数请求,业务成功则保留限制,失败则释放限制。测试验证了2秒内重复提交会触发异常,有效防止了重复提交问题。
本文详细介绍了SpringBoot中三类日志系统的开发实践:系统日志、登录日志和操作日志。系统日志基于Logback框架实现,配置控制台和文件输出,并集成p6spy进行SQL性能分析。登录日志采用SpringEvent事件机制,通过@Async注解实现异步监听,记录用户登录信息。操作日志通过自定义@Log注解和AspectJ切面实现,记录操作类型、请求参数等详细信息,同样使用异步处理提升性能。文章还深入讲解了线程池配置与@Async异步注解的使用,确保日志记录不影响主业务流程,实现高效可靠的日志管理。
本文详细记录了Spring Boot中国际化与Validator校验的配置及协同使用。首先通过i18n目录配置多语言资源文件(如messages.properties、messages_en_US.properties),结合Yml配置和自定义LocaleResolver实现请求头语言解析。封装MessageUtils工具类,支持异常信息与日志的国际化输出。随后集成Hibernate Validator,通过ValidatorConfig配置快速校验模式,并封装ValidatorUtils工具类。利用@Validated注解或编码方式实现实体校验,结合国际化资源文件(如@Size注解引用length.not.valid键值)实现动态错误提示。最后通过分组校验(AddGroup/UpdateGroup等)满足不同场景需求,提升开发效率与用户体验。
本文详细介绍了如何使用Sa-Token框架整合JWT实现登录鉴权和权限授权,并采用Redis作为数据持久层。文章首先说明了必要的Maven依赖和yml配置,包括token名称、有效期、JWT密钥等关键参数。随后通过自定义SaTokenConfig类实现拦截器功能,注入JWT模式、权限接口和Redis自定义DAO层。重点分析了登录验证流程,包括密码校验、token生成与Redis存储机制,以及基于注解和API的权限功能实现。文章还深入探讨了Sa-Token的源码架构,包括多级缓存策略、上下文持有类和拦截器原理,为开发者提供了完整的实战指南。
本文详细介绍了JVM内存结构与垃圾回收机制。内存结构分为线程共享(堆区、方法区)和线程私有(程序计数器、JVM栈、本地方法栈)区域,其中堆存储对象,方法区存放类元信息(JDK8后移至元空间),直接内存用于NIO优化。垃圾回收基于可达性算法,通过GC Root(如线程对象、类加载器等)判断对象存活,并支持强、软、弱、虚、终结器五种引用类型。回收算法包括标记清除(存在碎片)、复制(高效但空间利用率低)、标记整理(无碎片但效率低)及分代GC(年轻代复制算法+老年代标记整理),主流垃圾回收器有Serial(单线程)、CMS(低延迟)、Parallel(高吞吐)和G1(平衡延迟与吞吐)。
JVM是Java虚拟机的核心,负责解释执行字节码、管理内存(含自动GC)和通过JIT编译优化热点代码。其规范支持多种语言运行,常见实现包括HotSpot、GraalVM等。JVM由类加载器、运行时数据区、执行引擎和本地接口组成。字节码文件包含魔数、版本号、常量池等结构,可通过jclasslib、javap或Arthas工具查看。类生命周期包括加载、连接(验证、准备、解析)、初始化等阶段,类加载器采用双亲委派机制保证安全,也可通过自定义类加载器、线程上下文类加载器等方式打破。
单元测试通过隔离依赖、拆分组件降低耦合,提升代码质量并减少bug,同时为重构提供保障。测试驱动开发(TDD)采用“先写测试再写功能”模式,能理清需求、设计接口,虽门槛高且需投入大量精力,但熟练后可提高效率。JUnit提供@BeforeAll、@Test等生命周期注解及断言方法,支持SpringBoot环境测试,并通过@ParameterizedTest实现带参测试。Maven的surefire-plugin可通过@Tag标签控制测试执行,如按环境分组或排除特定测试,确保打包前关键测试通过。
罗洛·梅《人的自我寻求》聚焦现代人泛化的失望与无意义问题,剖析空洞、孤独、焦虑的本质:空洞者缺乏自我感知,孤独源于对独立存在的恐惧,焦虑是心理冲突的信号。书中强调,人性如树需内在力量成长,理论的意义在于提供体系化思考,助我们建立自我体验(I-ness)、承担责任、创造性生活。通过增强自我意识、拥抱自由与责任、以勇气打破顺从、在爱中实现自我升华,我们能在不确定中找到方向,对抗焦虑与麻木,完成内修与自我整合,活出真实的生命体验。
本文记录了基于Docker的SpringBoot+Vue3项目部署全流程。首先在Ubuntu22服务器安装Docker及Docker Compose(国内环境采用apt安装解决网络问题);接着配置SpringBoot后端Dockerfile(基于openjdk:8-jdk-alpine)并打包Jar包,同时使用Vite构建前端项目并配置Nginx代理;通过docker-compose.yml编排MySQL5.7、Redis、Nginx及Java应用容器,实现数据卷挂载与端口映射;部署后重点解决常见问题:Maven打包需配置spring-boot-maven-plugin避免主类缺失,MySQL密码重置需修改my.cnf跳过权限校验,以及数据源问题需检查yml配置并注释多余依赖。最终通过`docker compose up -d`一键启动,实现前后端分离项目的容器化部署。
本文记录了作者对“学习金字塔模型”的学习感悟,该模型将学习分为六个阶段:不求甚解(概念理解)、找寻主干(原理拆解)、达成最小目标(demo实证)、构建知识树(全局整合)、迭代计划(问题驱动)、关键点突破(内化与顿悟)。文章强调实践是养成思考习惯的核心,迭代优于增量堆砌,需通过demo验证理论、复盘总结,再以问题驱动知识树演进。作者作为大二学生,正以此模型构建思维体系,平衡写作、管理等能力,探索IT行业成长路径,力求通过渐修实现顿悟。