
java
文章平均质量分 52
m0_63486540
大家一起进步!!!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
REDIS 各种数据结构有什么作用?都能干什么?
Redis数据结构在多种场景下的应用总结:String类型可用于缓存对象、分布式锁、共享Session及计数器功能;Hash结构适合存储对象、购物车及动态配置管理;List可实现简单消息队列和实时消息流;Set适用于抽奖系统、点赞功能和共同兴趣计算;ZSet凭借有序特性可完成排行榜、滑动窗口限流、用户浏览记录存储等功能。每种数据结构都针对特定需求提供了高效解决方案,但需注意其在持久化、权限管控等方面的局限性。原创 2025-08-11 19:37:52 · 993 阅读 · 0 评论 -
缓存击穿、穿透、雪崩怎么解决?
本文探讨了缓存系统中的三大问题及解决方案。缓存击穿指热点key失效导致大量请求直击数据库,可通过分布式锁、逻辑过期或中间件方案解决;缓存穿透是查询不存在的数据导致数据库压力,可通过参数校验、缓存空值或布隆过滤器应对;缓存雪崩则是大量key同时失效或Redis宕机引发的问题,可通过随机过期时间、缓存预热及高可用架构来预防。文章还强调了针对不可抗力情况的降级和限流措施,全面保障系统稳定性。原创 2025-08-08 08:00:00 · 302 阅读 · 0 评论 -
AQS是什么?
本文剖析了并发工具类实现线程安全的核心机制。通过状态变量state管理共享资源访问,采用volatile保证可见性,CAS操作确保原子性,并基于双向链表实现等待队列。重点分析了AQS框架的设计思想:提供模板方法tryAcquire供业务定制,支持独占/共享两种模式,分别适用于ReentrantLock和Semaphore/CountDownLatch等场景。与synchronized相比,AQS实现了公平锁、可重入机制和通过Condition实现的精细化线程通信。此外,AQS通过用户态操作避免了系统调用开销原创 2025-08-07 11:22:32 · 593 阅读 · 0 评论 -
如何实现分布式锁
文章摘要:本文系统探讨了锁机制的核心特性与实现。首先阐述了锁的互斥性本质,分析Redis中setnx命令的原子性优势。针对锁使用中的关键问题,提出了过期时间、看门狗机制和守护线程等解决方案。深入讲解了可重入锁的实现原理,对比了synchronized和ReentrantLock的不同机制。在分布式锁方面,详细介绍了Redission的哈希结构实现、阻塞锁设计及主从架构下的联锁机制。最后讨论了红锁(Redlock)的优缺点,指出其时间敏感性和运维复杂性等实际应用中的挑战。全文提供了从基础到进阶的完整锁机制知识原创 2025-08-06 17:42:07 · 1097 阅读 · 0 评论 -
一篇认识synchronized锁
摘要:synchronized是Java解决多线程并发问题的关键机制。它通过monitorenter/monitorexit指令实现原子性、可见性和有序性:加锁时强制从主存读取最新数据,解锁时将数据刷新回主存,并防止指令重排。其锁升级机制(无锁→偏向锁→轻量级锁→重量级锁)根据竞争程度动态优化性能:偏向锁优化单线程场景,轻量级锁采用CAS自旋应对低竞争,重量级锁则在激烈竞争时阻塞线程。重量级锁通过监视器管理锁状态,维护owner线程、重入次数计数器、锁池(竞争失败的BLOCKED线程)和等待池(主动wait原创 2025-08-06 16:24:18 · 796 阅读 · 0 评论 -
自定义SpringBoot Starter(2.7版)
Spring Boot自动装配机制解析:从2.7版本开始,自动配置方式由META-INF/spring.factories改为META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件。封装starter的两种方式:1)starter+autoconfigure分离模式,便于依赖管理;2)单模块整合模式。建议采用新规范创建autoconfigure模块,需配置spring-boot-autoconfig原创 2025-06-25 17:18:08 · 398 阅读 · 0 评论 -
GlobalFilter、Filter关系
本文对比了Spring Cloud Gateway的GlobalFilter与传统Servlet Filter的技术差异。GlobalFilter基于响应式编程模型(WebFlux),适合API网关和高并发场景,通过Spring Bean自动注册;而Servlet Filter采用阻塞式模型,适用于传统Spring MVC应用,通过web.xml或注解配置。文章还分别展示了两种过滤器的实现示例:GlobalFilter演示了请求头修改和日志记录功能,支持执行顺序控制原创 2025-06-25 12:02:45 · 299 阅读 · 0 评论 -
Spring Cloud Gateway 的过滤器:自己编写过滤器用GatewayFilterFactory?AbstractGatewayFilterFactory?
Spring Cloud Gateway 提供两种过滤器实现方式:直接实现GatewayFilterFactory需手动处理所有逻辑,包括配置解析;而继承AbstractGatewayFilterFactory则通过抽象基类自动处理配置绑定,减少样板代码。后者支持结构化配置类,开发效率更高,尤其适用于需要动态配置的场景。虽然功能相同,但官方推荐继承抽象基类的方式,更适合需要灵活配置的生产环境。两种方式均可通过@Order控制执行顺序,新手建议优先使用抽象基类实现。原创 2025-06-24 23:53:38 · 557 阅读 · 0 评论 -
MyBastis 三种批量插入方式的性能比较
摘要:本文对比了MyBatis在SpringBoot环境下的三种批量插入方式:单条循环插入、XML拼接SQL和批处理执行。测试结果显示,对于少量数据(20条以内),单条插入简单高效;大量数据时批处理方式性能最佳(1000条耗时175ms,10000条894ms)。XML拼接SQL方式在大数据量时会因包大小限制而报错,不推荐使用。批处理实现时建议每1000条提交一次以避免内存问题。实验环境为MySQL+JDK1.8+SpringBoot,源代码已开源。结论:少量数据用单条插入,大量数据用批处理,避免XML拼接原创 2025-06-24 21:42:11 · 515 阅读 · 0 评论 -
游标分页方法代替limit
摘要:为了解决MySQL分页查询(如LIMIT 1000000,1000)性能低下(O(n+m)复杂度)的问题,推荐使用游标分页法。该方法首次查询获取1000条记录并记录最大ID,后续查询使用WHERE id>上次最大ID LIMIT 1000的方式,将复杂度降为O(logn+m)。通过利用B+树索引特性直接定位记录位置,显著提升大数据量分页查询效率,特别适合处理500万条记录等大规模数据表的分页需求。原创 2025-06-22 21:03:50 · 324 阅读 · 0 评论 -
初识线程池1
本文介绍了使用Java线程池实现多线程数据获取的两种方法:1)使用submit()提交Callable任务获取Future结果,主线程通过get()阻塞等待;2)使用execute()提交Runnable任务执行无返回值操作。代码示例展示了如何创建固定线程池,异步获取B、C数据源,并合并处理结果。同时对比了submit()与execute()的差异:前者支持返回值,后者仅执行任务。最后强调了线程池必须及时关闭释放资源。关键点包括Future机制、任务提交方式和线程池生命周期管理。原创 2025-06-22 10:54:52 · 290 阅读 · 0 评论 -
sa-token:我将代替你,Spring Security
等一系列权限相关问题。无需实现任何接口,无需创建任何配置文件,只需要这一句静态代码的调用,便可以完成会话登录认证。原创 2025-06-21 22:21:18 · 709 阅读 · 0 评论 -
try{ }catch{ }finally{ }返回数据问题
【摘要】三道Java异常处理题解析:1) try返回1但finally返回3,最终返回3;2) catch返回2但finally返回3,最终返回3;3) try返回1前执行finally块抛出异常,终止程序并抛出RuntimeException,未执行finally的return3。说明finally块总会执行,但其中return会覆盖try/catch返回,而异常会中断流程。(149字)原创 2025-06-17 10:26:48 · 226 阅读 · 0 评论 -
Language level is invalid or missing in pom.xml. Current project JDK is 17. Specify language level i
摘要:设置JDK17开发环境需统一4处配置:1)编译器设置(File-Settings-Build-JavaCompiler)保持默认或设为17;2)项目设置(ProjectSettings-Project)选择JDK17;3)模块源码(Modules-Sources)语言级别设为17;4)模块依赖(Modules-Dependencies)使用JDK17。注意确保所有位置的JDK版本一致,才能保证项目正常编译运行。(150字)原创 2025-06-10 22:34:44 · 352 阅读 · 0 评论 -
ThreadLocalMap的引用类型
ThreadLocalMap使用弱引用作为键是为了降低内存泄漏风险,虽然键回收后值仍存在泄漏可能,但通过清理机制可部分缓解。而值采用强引用是为了保证数据完整性,避免被意外回收。开发者仍需及时调用remove()方法手动清理,确保资源释放。原创 2025-06-09 08:43:03 · 252 阅读 · 0 评论 -
自己来做个AOP-超简单
摘要:本文展示了如何在Spring Boot中使用自定义注解和AOP实现方法执行时间监控。首先创建@LogExecutionTime注解标记需要监控的方法,然后定义LoggingAspect切面类,通过@Around环绕通知计算并输出方法执行时间。MyService业务类中标注了该注解的serve()方法将被监控,而anotherMethod()则不会。最后配置@EnableAspectJAutoProxy启用AOP支持。这种非侵入式实现方式可以有效跟踪方法性能,适用于需要监控特定方法执行时间的场景。原创 2025-06-05 19:35:02 · 319 阅读 · 0 评论 -
一篇文章带你配置Sentinel
摘要:本文介绍了如何使用Sentinel实现API限流保护。首先通过Maven引入Sentinel核心库和AOP切面依赖,然后配置QPS流量控制规则(每秒1次请求)。通过定义CustomBlockHandler类处理限流后的降级逻辑,最后在Controller方法上添加@SentinelResource注解绑定资源名称和降级方法。当请求超过阈值时,系统将自动触发降级策略,返回提示信息而非业务错误,有效保障系统稳定性。这种方案适用于高并发场景下保护核心接口。原创 2025-06-05 19:27:02 · 265 阅读 · 0 评论 -
一篇文章带你配置openfeign
摘要:本文介绍了如何在Spring Boot项目中整合OpenFeign进行微服务调用。主要内容包括:1) 添加Maven依赖和BOM管理;2) 使用@EnableFeignClients注解启用OpenFeign;3) 通过UserContext类管理线程本地用户信息;4) 配置RequestInterceptor实现请求头自动传递;5) 定义FeignClient接口并示例调用。文章提供了完整的代码示例,涵盖了从依赖配置到实际调用的全流程,特别强调了用户上下文信息在微服务间的传递方案。原创 2025-06-05 19:09:30 · 309 阅读 · 0 评论 -
后端调用大模型api用org.apache.http.*踩过的雷,hutool包yyds
摘要:实习项目调用大模型API时遇到中文乱码问题。原使用Apache HttpClient发送POST请求,虽正确设置请求头和JSON参数,但响应内容出现乱码。多次尝试未解决后,改用Hutool工具包重构代码:1)添加Hutool依赖;2)用JSONObject构建完整请求体;3)通过HttpRequest发送请求并处理响应。新方案成功解决了乱码问题,能正确解析大模型返回的中文内容。关键改进在于Hutool提供了更简洁的HTTP请求接口和JSON处理能力,有效规避了字符编码问题。(150字)原创 2025-06-05 11:19:58 · 330 阅读 · 0 评论 -
分页插件的使用
摘要:本文介绍MyBatis-Plus分页插件的使用步骤:1.通过@Configuration配置类注册分页拦截器,指定MySQL数据库类型;2.请求DTO需继承Page<T>类;3.服务层接口继承IService<DO>;4.服务实现类继承ServiceImpl<Mapper,DO>并实现自定义服务接口。该配置实现了基于MyBatis-Plus的标准化分页功能,适用于MySQL数据库环境。(150字)原创 2025-06-04 01:37:38 · 205 阅读 · 0 评论 -
java后端返回response、json相关代码,一篇就解决
反斜杠(\)是一个特殊字符,在很多编程语言中都被用作转义字符。在JSON数据中,反斜杠通常用来转义一些特殊字符,如双引号、斜杠等,以确保数据的正确性和完整性。但有时候在处理JSON数据时,可能会出现需要手动添加或删除反斜杠的情况。原创 2025-06-03 23:03:52 · 339 阅读 · 0 评论 -
Create breakpoint : Password cannot be set emptyat org.jasypt.commons.CommonUtils.validateIsTrue(C
摘要:该报错是由于缺少必要的配置参数所致。如果是企业代码,建议联系企业相关负责人获取正确的配置信息以解决问题。需要补充的配置内容应由企业内部技术团队提供并指导完成设置。原创 2025-06-03 12:28:17 · 182 阅读 · 0 评论 -
错误: 找不到或无法加载主类
【Java版本兼容性问题解决方案】 摘要:运行Java程序时出现"找不到主类"和"版本警告"错误,提示-Xverify选项在JDK13中已被弃用。主要原因为Java版本不兼容导致ClassNotFoundException。解决方案是切换至Java8环境,特别是企业项目需与团队使用的版本保持一致。操作流程包括:1)确认当前JDK版本;2)卸载高版本JDK;3)安装Java8并配置环境变量;4)验证版本切换是否成功。企业开发中建议优先咨询同事使用的JDK版本以确保环境一原创 2025-06-03 12:20:17 · 259 阅读 · 0 评论