Ajax Zhan's Blog
Welcome!This is Ajaxzhan.
坚信:品味优先于执行,价值驱动下创造、系统工程保安全
持续跟进AI前沿研究,持续思考技术、产品与思维。
坚信:品味优先于执行,价值驱动下创造、系统工程保安全
持续跟进AI前沿研究,持续思考技术、产品与思维。
本文围绕用户中台的高并发需求,深入探讨MySQL读写分离与分库分表架构。首先分析读写分离的必要性,通过主从复制缓解读压力,并介绍代理层与中间件实现方案;随后阐述分库分表的类型(垂直/水平)及分片算法,同时指出分布式事务等挑战。实践部分演示冷热分离表设计、存储过程创建分表及Docker搭建MySQL主从架构,为后续ShardingJDBC应用及主从延迟解决方案奠定基础,助力高并发场景下的数据库性能优化。
8253是可编程定时/计数器,通过软硬结合实现定时计数,不占用CPU且可程控调节精度高。其内部含3个独立16位通道,每个通道可设6种工作方式。编程需先写控制字(选择通道、工作方式、计数方式及读写方式),再写计数初值(>255分两次)。6种工作方式中:方式0(计数结束中断,初始OUT低)、方式1(硬件触发单稳,负脉冲宽度可调)、方式2/3(连续负脉冲/方波,自动重装,分频应用)、方式4(软件触发选通单脉冲)、方式5(硬件触发选通单脉冲,自动重装)。例题涵盖控制字配置、定时波形生成及长延时设计,突出其在定时、分频、中断等场景的应用。
本文记录了作者在微服务项目中使用Dubbo与Nacos时,通过Docker部署Nacos 2.3.1版本遇到的鉴权配置问题。部署时采用官方Docker方式,并选用MySQL存储数据。开启鉴权时,发现直接配置环境变量(如NACOS_AUTH_USERNAME/PASSWORD)无效,经排查原因为新版本未预置默认用户数据。正确做法需在MySQL的users和roles表中手动插入用户信息(密码需BCrypt加密),并配置对应角色。最终成功实现鉴权,Dubbo服务可正常向Nacos注册。
Spring AI是受Python项目启发的AI应用开发框架,核心在于提供抽象能力、简化开发,支持多模型(如OpenAI、通义)及向量数据库,屏蔽底层交互细节。Spring Cloud Alibaba AI基于其适配国内通义大模型,支持对话、文生图、文生语音等功能,提供便捷的Spring Boot集成。动手体验显示,通过简单配置依赖与API-Key,即可快速实现文本问答、图像生成、语音合成等模型对接,代码简洁(如ChatClient一行调用)。使用小结指出其简化复杂AI应用开发的优势,但也存在响应时间优化空间及模型选择灵活性待提升问题,未来将持续适配VectorStore、RAG等场景,助力国内Java开发者高效构建AI应用。
本文针对物联网项目中华为云IoT平台数据需转发至本地Web服务的需求,探讨了内网穿透解决方案。作者排除了直接部署云服务器和转发脚本方案后,重点实践了内网穿透技术。过程中先后尝试了ngrok、CloudFlare tunnel等工具,遭遇了访问限制、带宽不足、URL格式错误等问题。最终采用frp(高性能反向代理工具)实现成功穿透,通过在云服务器和本地分别部署frps和frpc服务,配置HTTP代理使公网可通过自定义域名访问本地服务。文章详细分享了frp的配置要点、systemd管理最佳实践,为类似场景提供了可复用的解决方案。
本文介绍了防重幂等的概念及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(平衡延迟与吞吐)。