- 博客(35)
- 收藏
- 关注
原创 REDIS 各种数据结构有什么作用?都能干什么?
Redis数据结构在多种场景下的应用总结:String类型可用于缓存对象、分布式锁、共享Session及计数器功能;Hash结构适合存储对象、购物车及动态配置管理;List可实现简单消息队列和实时消息流;Set适用于抽奖系统、点赞功能和共同兴趣计算;ZSet凭借有序特性可完成排行榜、滑动窗口限流、用户浏览记录存储等功能。每种数据结构都针对特定需求提供了高效解决方案,但需注意其在持久化、权限管控等方面的局限性。
2025-08-11 19:37:52
994
原创 缓存击穿、穿透、雪崩怎么解决?
本文探讨了缓存系统中的三大问题及解决方案。缓存击穿指热点key失效导致大量请求直击数据库,可通过分布式锁、逻辑过期或中间件方案解决;缓存穿透是查询不存在的数据导致数据库压力,可通过参数校验、缓存空值或布隆过滤器应对;缓存雪崩则是大量key同时失效或Redis宕机引发的问题,可通过随机过期时间、缓存预热及高可用架构来预防。文章还强调了针对不可抗力情况的降级和限流措施,全面保障系统稳定性。
2025-08-08 08:00:00
303
原创 AQS是什么?
本文剖析了并发工具类实现线程安全的核心机制。通过状态变量state管理共享资源访问,采用volatile保证可见性,CAS操作确保原子性,并基于双向链表实现等待队列。重点分析了AQS框架的设计思想:提供模板方法tryAcquire供业务定制,支持独占/共享两种模式,分别适用于ReentrantLock和Semaphore/CountDownLatch等场景。与synchronized相比,AQS实现了公平锁、可重入机制和通过Condition实现的精细化线程通信。此外,AQS通过用户态操作避免了系统调用开销
2025-08-07 11:22:32
593
原创 如何实现分布式锁
文章摘要:本文系统探讨了锁机制的核心特性与实现。首先阐述了锁的互斥性本质,分析Redis中setnx命令的原子性优势。针对锁使用中的关键问题,提出了过期时间、看门狗机制和守护线程等解决方案。深入讲解了可重入锁的实现原理,对比了synchronized和ReentrantLock的不同机制。在分布式锁方面,详细介绍了Redission的哈希结构实现、阻塞锁设计及主从架构下的联锁机制。最后讨论了红锁(Redlock)的优缺点,指出其时间敏感性和运维复杂性等实际应用中的挑战。全文提供了从基础到进阶的完整锁机制知识
2025-08-06 17:42:07
1097
原创 一篇认识synchronized锁
摘要:synchronized是Java解决多线程并发问题的关键机制。它通过monitorenter/monitorexit指令实现原子性、可见性和有序性:加锁时强制从主存读取最新数据,解锁时将数据刷新回主存,并防止指令重排。其锁升级机制(无锁→偏向锁→轻量级锁→重量级锁)根据竞争程度动态优化性能:偏向锁优化单线程场景,轻量级锁采用CAS自旋应对低竞争,重量级锁则在激烈竞争时阻塞线程。重量级锁通过监视器管理锁状态,维护owner线程、重入次数计数器、锁池(竞争失败的BLOCKED线程)和等待池(主动wait
2025-08-06 16:24:18
797
原创 Nexus Maven私服
本文介绍了如何通过Docker搭建私有Maven仓库Nexus3,解决自定义SpringBoot Starter依赖共享问题。主要内容包括:1. Nexus3安装配置,强调内存参数调整和数据卷映射;2. 仓库类型说明(代理、宿主、仓库组)及配置阿里镜像代理;3. 本地Maven配置(servers设置认证信息、distributionManagement设置上传路径);4. 依赖上传下载操作,包括release和snapshot版本管理。文章还给出了常见问题的解决方案,如内存不足导致数据库损坏的处理方法,并
2025-06-27 01:53:02
1108
原创 自定义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
原创 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
300
原创 Spring Cloud Gateway 的过滤器:自己编写过滤器用GatewayFilterFactory?AbstractGatewayFilterFactory?
Spring Cloud Gateway 提供两种过滤器实现方式:直接实现GatewayFilterFactory需手动处理所有逻辑,包括配置解析;而继承AbstractGatewayFilterFactory则通过抽象基类自动处理配置绑定,减少样板代码。后者支持结构化配置类,开发效率更高,尤其适用于需要动态配置的场景。虽然功能相同,但官方推荐继承抽象基类的方式,更适合需要灵活配置的生产环境。两种方式均可通过@Order控制执行顺序,新手建议优先使用抽象基类实现。
2025-06-24 23:53:38
557
原创 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
原创 如何将进度传给前端呢
摘要:针对大批量数据导出需求,设计基于WebSocket的实时进度推送方案。实现步骤包括:(1)引入SpringBoot WebSocket依赖;(2)配置WebSocket端点,允许跨域连接;(3)核心处理器类维护活跃会话Map,提供连接建立处理和进度推送方法。通过session.sendMessage()向指定客户端发送JSON格式的进度信息(如{"progress":50}),实现导出任务的实时进度反馈。该方案解决了传统轮询的性能问题,确保进度更新的即时性和低延迟。
2025-06-24 00:08:00
350
原创 线程池异步处理
即使主线程等待,仍能通过回调处理中间结果(如进度更新)。:可轻松实现“任务并行→结果聚合”的流程(如。无法集中处理异常(如记录失败日志或重试)无法统计成功/失败的任务数量。
2025-06-22 22:11:15
411
原创 游标分页方法代替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
原创 使用Anything LLM、Ollama与DeepSeek R1打造智能知识库
本文介绍了在Windows本地部署Ollama+DeepSeek大模型并通过内网穿透实现远程访问的完整流程。主要内容包括:1)安装Ollama并下载DeepSeek-r1模型;2)安装AnythingLLM客户端并配置工作区;3)设置局域网共享Ollama服务;4)使用cpolar工具实现公网穿透,生成固定二级子域名实现稳定远程访问。该方案无需云服务器即可实现异地访问本地大模型,支持上传文档训练和网页内容处理,为团队协作提供了便利的AI工具部署方案。
2025-06-22 15:30:43
911
原创 初识线程池1
本文介绍了使用Java线程池实现多线程数据获取的两种方法:1)使用submit()提交Callable任务获取Future结果,主线程通过get()阻塞等待;2)使用execute()提交Runnable任务执行无返回值操作。代码示例展示了如何创建固定线程池,异步获取B、C数据源,并合并处理结果。同时对比了submit()与execute()的差异:前者支持返回值,后者仅执行任务。最后强调了线程池必须及时关闭释放资源。关键点包括Future机制、任务提交方式和线程池生命周期管理。
2025-06-22 10:54:52
290
原创 sa-token:我将代替你,Spring Security
等一系列权限相关问题。无需实现任何接口,无需创建任何配置文件,只需要这一句静态代码的调用,便可以完成会话登录认证。
2025-06-21 22:21:18
711
原创 easyexcel -Dependency not found解决方案(Springboot,绝对有效)
【摘要】遇到easyexcel依赖无法下载的问题时,若Maven配置正常却仍无法解决,可采用本地引入JAR包方案:1)从mvnrepository.com下载所需JAR;2)在项目根目录创建lib文件夹并放入JAR包;3)修改pom.xml文件配置;4)刷新Maven完成导入。该方法作为系统路径方案失效时的替代解决方案。(98字)
2025-06-18 11:58:08
570
原创 想要后端返回的数据,导入excel-----fastexcel
FastExcel是由EasyExcel作者开发的高性能Excel处理工具,兼容EasyExcel功能并优化性能。该项目采用Apache协议,支持大型Excel文件的低内存处理。文章介绍了如何通过Maven添加依赖,并提供读取Excel(使用监听器解析数据)和创建Excel文件(通过注解定义模型)的代码示例,展示其简洁易用的特性。
2025-06-17 23:43:38
405
原创 Git本地版本和远程本版不一致致使添加修改代码上传不了的问题解决
Git操作指南摘要:当本地与远程版本冲突时,可先用git stash暂存本地修改;通过git pull --rebase origin branchName同步远程版本;用git stash pop恢复本地修改并推送。若再次出现冲突,先执行git add -u和空提交git commit -m "",最后再次拉取即可。该流程有效解决版本不一致问题,确保代码顺利同步。(135字)
2025-06-17 11:54:48
375
原创 IDEA Git回滚到以前commit的版本
摘要:Git代码回滚操作指南,分为本地和远端两部分。本地回滚:在IDEA的Git日志中右键目标commit,选择HARD重置。远端回滚:先本地回滚后,右键远端当前版本选择MIXED重置,保持本地代码不变且与远端同commit状态,即可推送完成远端回滚。文章还解释了四种重置模式:SOFT保留修改且暂存,MIXED保留修改需重新暂存,HARD完全删除修改,KEEP删除commit但保留本地修改。(150字)
2025-06-17 11:32:30
808
原创 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
原创 需求优化-搜索框中英文互换
当我们使用一些大型购物软件的时候,会发现当我们不小心没切换正确输入法时,本来想打汉字,结果打了拼音时,进行搜索时,还是能搜索到自己想要的商品,这是为什么呢,经过搜索也是发现了一个好用的工具包———hutool.extra.pinyin.engine.PinyinFactory;:按拼音首字母分组(如通讯录。:为中文内容生成拼音标识(如。:支持拼音/首字母搜索(如。
2025-06-14 14:49:27
274
原创 在idea中如何让代码热加载,使得改代码后不用重启
摘要:本文介绍了在Spring Boot项目中添加开发工具的Maven依赖配置。使用spring-boot-devtools组件可以提升开发效率,依赖配置中标记为runtime范围且optional=true。同时提到了需要修改on-update-action属性,但未给出具体修改内容。该配置适用于需要热部署的开发环境。
2025-06-13 15:10:55
510
原创 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
353
原创 ThreadLocalMap的引用类型
ThreadLocalMap使用弱引用作为键是为了降低内存泄漏风险,虽然键回收后值仍存在泄漏可能,但通过清理机制可部分缓解。而值采用强引用是为了保证数据完整性,避免被意外回收。开发者仍需及时调用remove()方法手动清理,确保资源释放。
2025-06-09 08:43:03
252
原创 自己来做个AOP-超简单
摘要:本文展示了如何在Spring Boot中使用自定义注解和AOP实现方法执行时间监控。首先创建@LogExecutionTime注解标记需要监控的方法,然后定义LoggingAspect切面类,通过@Around环绕通知计算并输出方法执行时间。MyService业务类中标注了该注解的serve()方法将被监控,而anotherMethod()则不会。最后配置@EnableAspectJAutoProxy启用AOP支持。这种非侵入式实现方式可以有效跟踪方法性能,适用于需要监控特定方法执行时间的场景。
2025-06-05 19:35:02
320
原创 一篇文章带你配置Sentinel
摘要:本文介绍了如何使用Sentinel实现API限流保护。首先通过Maven引入Sentinel核心库和AOP切面依赖,然后配置QPS流量控制规则(每秒1次请求)。通过定义CustomBlockHandler类处理限流后的降级逻辑,最后在Controller方法上添加@SentinelResource注解绑定资源名称和降级方法。当请求超过阈值时,系统将自动触发降级策略,返回提示信息而非业务错误,有效保障系统稳定性。这种方案适用于高并发场景下保护核心接口。
2025-06-05 19:27:02
265
原创 一篇文章带你配置openfeign
摘要:本文介绍了如何在Spring Boot项目中整合OpenFeign进行微服务调用。主要内容包括:1) 添加Maven依赖和BOM管理;2) 使用@EnableFeignClients注解启用OpenFeign;3) 通过UserContext类管理线程本地用户信息;4) 配置RequestInterceptor实现请求头自动传递;5) 定义FeignClient接口并示例调用。文章提供了完整的代码示例,涵盖了从依赖配置到实际调用的全流程,特别强调了用户上下文信息在微服务间的传递方案。
2025-06-05 19:09:30
309
原创 后端调用大模型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
331
原创 如何编辑以及复制Json字符串到IDEA
在IDEA中快速格式化JSON字符串: 定义字符串变量后,将光标定位在双引号内,按Alt+Enter选择JSON格式。 若JSON含参数变量,需在字符串左右添加"+和+"进行拼接。此方法可自动识别JSON结构并提供语法高亮,提升开发效率。
2025-06-04 12:14:51
414
原创 分页插件的使用
摘要:本文介绍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
原创 java后端返回response、json相关代码,一篇就解决
反斜杠(\)是一个特殊字符,在很多编程语言中都被用作转义字符。在JSON数据中,反斜杠通常用来转义一些特殊字符,如双引号、斜杠等,以确保数据的正确性和完整性。但有时候在处理JSON数据时,可能会出现需要手动添加或删除反斜杠的情况。
2025-06-03 23:03:52
339
原创 Create breakpoint : Password cannot be set emptyat org.jasypt.commons.CommonUtils.validateIsTrue(C
摘要:该报错是由于缺少必要的配置参数所致。如果是企业代码,建议联系企业相关负责人获取正确的配置信息以解决问题。需要补充的配置内容应由企业内部技术团队提供并指导完成设置。
2025-06-03 12:28:17
182
原创 错误: 找不到或无法加载主类
【Java版本兼容性问题解决方案】 摘要:运行Java程序时出现"找不到主类"和"版本警告"错误,提示-Xverify选项在JDK13中已被弃用。主要原因为Java版本不兼容导致ClassNotFoundException。解决方案是切换至Java8环境,特别是企业项目需与团队使用的版本保持一致。操作流程包括:1)确认当前JDK版本;2)卸载高版本JDK;3)安装Java8并配置环境变量;4)验证版本切换是否成功。企业开发中建议优先咨询同事使用的JDK版本以确保环境一
2025-06-03 12:20:17
260
原创 PyCharm Conda环境配置 “找不到可执行文件”的解决 - 图文详细步骤
PyCharm社区版2025.1无法识别已安装的Conda环境,提示"找不到conda可执行文件",原因是系统用户名含中文导致安装路径问题。解决方案:通过Anaconda Prompt执行where conda命令获取conda.exe路径(通常在Anaconda安装目录下的Scripts文件夹中),然后将该路径手动填入PyCharm的解释器配置界面中的"Conda路径"栏即可解决。文档参考PyCharm官方关于创建Python解释器和故障排除的相关说明。
2025-06-02 21:29:50
766
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人