自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(73)
  • 收藏
  • 关注

原创 若依plus请求加解密

本文介绍了在RuoYi Plus框架中实现API请求响应加解密的完整方案。采用RSA+AES混合加密机制: 请求流程:前端随机生成AES密钥,用RSA公钥加密后放入请求头,使用AES加密请求体;后端用RSA私钥解密获取AES密钥,再解密请求体。 响应流程:后端生成新的AES密钥,RSA加密后放入响应头,AES加密响应体;前端用RSA私钥解密获取密钥,再解密响应内容。 实现方案:通过请求解密包装器和响应加密包装器拦截处理加解密逻辑,确保数据安全传输。 该方案兼顾性能与安全性,适合企业级应用开发。

2025-11-12 14:24:46 813

原创 Spring Web 请求封装 + 拦截器统计耗时

本文介绍了一种解决Spring MVC中HttpServletRequest输入流只能读取一次问题的方案。通过装饰器模式,使用RepeatedlyRequestWrapper包装原始请求,将请求体内容缓存到内存字节数组,实现重复读取。该方案包含三个核心部分:1) RequestWrapper通过读取并缓存原始流到字节数组,重写getInputStream()方法提供可重复读取功能;2) RepeatableFilter在请求进入前判断并包装需要重复读取的请求;3) 拦截器利用包装器安全打印请求参数并统计处理

2025-11-05 15:44:38 286

原创 深入解析索引下推

索引下推(ICP)是MySQL 5.6引入的重要优化技术,能显著提升联合索引查询性能。当查询条件包含范围查询和后续过滤条件时(如age>25 AND city='北京'),传统方式需要先回表获取完整数据再过滤,而ICP则允许存储引擎直接利用索引中的字段进行预过滤,大幅减少不必要的回表操作。通过EXPLAIN查看执行计划时,Using index condition即表示使用了ICP。该技术适用于InnoDB/MyISAM的二级索引查询,能有效降低I/O开销,是后端开发者优化数据库性能的有力工具。

2025-09-19 09:14:37 1130

原创 你真的了解 count(﹡) 的底层原理吗?

摘要:MySQL中count()统计行数在大数据量下性能较差,MyISAM引擎虽缓存总行数但无法部分统计且不适用于事务引擎。InnoDB需逐行扫描,但会优化选择最小B+树。使用Redis缓存计数存在数据丢失和同步问题。性能对比:count() > count(1) > count(主键) > count(字段)。建议:小数据直接用count(*);大数据量采用缓存、异步统计或分析型数据库;业务允许时可使用冗余表存储统计数据。(149字)

2025-09-19 09:06:43 917

原创 MQ面试汇总

本文总结了消息队列(MQ)的核心知识点,包括其三大核心作用(解耦、异步、削峰)及使用中可能引发的问题(系统复杂度增加、可用性降低、一致性问题)。重点分析了消息堆积、重复消费、顺序性和延时消息等典型问题的解决方案,并对比了主流MQ产品的特性差异,为技术选型提供参考依据。建议业务系统优先考虑RocketMQ,大数据场景选用Kafka,小型系统可采用RabbitMQ或ActiveMQ。

2025-09-18 10:37:07 920

原创 从笛卡尔积噩梦到精准打击:一次复杂的PostgreSQL查询优化实战

本文分享了从低效SQL到高性能查询的优化实战。通过将一个复杂的多维度权限校验需求,从生成笛卡尔积的"暴力组合"方式重构为"分治策略":使用CTE提前过滤有效数据,分别精准计算三种权限路径下的有效人-设备对,最后用UNION合并结果。优化后的查询避免了50万级别的中间结果集,通过职责单一的JOIN和早期过滤,使执行效率提升数十倍。这种"精准打击"的查询设计思路,为处理复杂业务规则下的数据关联提供了高效范式。

2025-09-17 10:31:42 735

原创 Micrometer 的动态线程池运行指标监控

本文介绍了如何使用Micrometer+Prometheus+Grafana监控动态线程池的运行指标。通过Micrometer采集线程池核心参数(线程数、队列长度、拒绝次数等),结合Prometheus定时拉取数据,最终在Grafana实现可视化监控。重点解析了micrometerMonitor()方法的设计原理,强调需要缓存MonitorDTO对象来避免指标重复注册问题。这种方案能实时掌握线程池运行状态,为系统调优提供数据支撑。

2025-09-17 10:31:04 481

原创 告警速率检查器(基于时间窗口的报警限流器设计与实现)

本文介绍了一种基于固定时间窗口的报警限流器设计,用于解决线程池监控中频繁告警"刷屏"的问题。该限流器采用ConcurrentHashMap存储报警记录,通过compute方法原子性地判断是否允许发送报警:同一类报警在设定的时间间隔内只能发送一次,超出时间窗口才可再次触发。实现方案简洁高效,有效避免了告警信息过载,同时保证了并发环境下的线程安全。

2025-09-16 09:00:13 280

原创 为什么动态线程池修改 corePoolSize 和 maximumPoolSize 时要加顺序判断?

动态线程池修改参数时需要确保核心线程数(corePoolSize) ≤ 最大线程数(maximumPoolSize)。修改顺序取决于参数变化方向: 当扩容时(新core > 原max),必须先调大max再调大core 当缩容时(新core ≤ 原max),应先调小core再调小max 这种顺序判断避免了直接设置时可能引发的参数校验异常,确保线程池参数始终合法。该设计源于JDK对线程池参数的严格约束,在动态修改时仍需维持这一关系。

2025-09-15 09:06:00 299

原创 金蝶小微企业生态门户API集成完整指南(Java版)

金蝶API集成指南摘要 本文提供金蝶API集成完整指南,重点介绍获取app-token的核心流程和签名生成方法。主要内容包括: 前置准备:创建金蝶应用、申请沙箱环境 app-token获取:详细说明X-Api-Signature签名算法,包含请求方式、路径、参数等5部分拼接规则 Java实现:提供完整的签名生成工具类代码,涵盖HMAC-SHA256加密、参数排序和双重URL编码等关键技术点 注意事项:参数需按ASCII码排序,参数名和值均需双重URL编码 开发者可参考本文快速完成金蝶API的集成接入。

2025-09-12 09:30:20 421

原创 代理模式增强拒绝策略

摘要:本文介绍了代理模式的两种实现方式:静态代理和动态代理。静态代理需要手动编写代理类,虽然逻辑清晰但扩展性差;动态代理通过反射机制在运行时生成代理类,灵活性高但只能代理接口。文章重点分析了动态代理的核心组件Proxy类和InvocationHandler接口,并提供了增强拒绝策略的具体实现示例,展示了如何通过动态代理统计线程池拒绝次数并触发告警。两种代理方式各有优缺点,可根据实际需求选择使用。

2025-09-12 09:10:42 520

原创 线程池队列与活跃度报警检测器实现详解

本文介绍了一个线程池状态报警检测器的实现方案,用于监控线程池的队列使用率和线程活跃度。通过定时调度器检查线程池的队列容量、剩余容量和活跃线程数,当队列使用率或线程活跃度超过预设阈值时触发报警。该方案采用独立运行的定时任务,可无侵入式监控多个线程池状态,通过日志输出报警信息,后续可扩展接入其他通知方式。核心功能包括队列使用率检查、线程活跃度检查和异常输出,帮助开发者及时发现线程池过载风险,保障系统稳定性。

2025-09-10 18:21:44 323

原创 可变容量阻塞队列设计与实现

可变容量阻塞队列设计与实现 摘要:本文分析了传统固定容量阻塞队列在动态业务场景(如电商秒杀)中的局限性,详细说明了通过反射修改队列容量的方法及其存在的两个关键问题:1)队列满时线程无法感知容量变化;2)容量缩小后约束失效。文章提出了基于RabbitMQ方案的改进实现,核心思想包括主动唤醒机制、改进判断条件和使用智能信号触发。该方案通过复制并修改LinkedBlockingQueue源码,实现了真正可动态调整容量的阻塞队列,解决了高并发场景下流量波动带来的系统资源管理问题。

2025-09-09 09:19:19 317

原创 动态线程池参数变更通知

摘要 本文介绍了动态线程池参数变更通知的实现方案。首先在动态线程池配置中增加通知人设置,包含接收人信息。然后编写钉钉通知类并配置自动装配功能。最后采用模板方法模式,在配置变更时触发通知机制。整个方案通过结构化的配置和模块化的设计,实现了线程池参数变更时的自动通知功能。

2025-07-10 10:00:00 238

原创 NacosCloud 参数变更监听和动态刷新线程池

本文介绍了基于Nacos配置中心实现参数变更监听及动态刷新线程池的架构设计。主要内容包括: 通过NacosCloudRefresherHandler监听器实现配置热刷新,当Nacos配置变更时自动回调处理 使用单线程池异步处理配置变更事件,确保不阻塞Nacos长轮询线程 配置解析流程:将变更的配置内容解析为Map,再绑定到BootstrapConfigProperties对象 线程池动态刷新机制:通过对比本地和远程配置差异,更新线程池核心参数 配置类设计:使用@ConfigurationProperties

2025-07-09 08:43:13 517

原创 动态线程池启用注解

摘要:本文介绍了一种基于Spring条件装配的动态线程池启用机制,核心是通过@EnableOneThread注解配合MarkerConfiguration配置类实现。该组合注解通过@Import导入配置类,后者注册一个无功能的标记Bean作为条件判断标志。其他组件使用@ConditionalOnBean依赖此标记Bean,实现按需启用动态线程池功能。这种模式类似于Spring的@EnableAsync等注解,提供了一种灵活的功能开关方案。(149字)

2025-07-08 08:00:00 236

原创 SpringBoot后置处理器,扫描动态线程池,注册动态线程池

本文介绍了利用SpringBoot后置处理器实现动态线程池注册的机制。首先通过自定义注解@DynamicThreadPool标记动态线程池,然后利用Spring的扩展点:1) 使用ApplicationContextAware将上下文注入静态变量;2) 实现BeanPostProcessor后置处理器扫描标记注解的Bean;3) 将符合条件的线程池注册到静态Map中维护。该方法结合了Spring生命周期扩展点(BeanPostProcessor)和容器感知接口(Aware系列),实现了线程池的动态管理与注册

2025-07-07 08:17:33 235

原创 动态线程池核心包开发

本文介绍了动态线程池核心包的开发,主要包含五个核心类:增强线程池OneThreadExecutor、线程池参数配置类ThreadPoolExecutorProperties、线程池封装类ThreadPoolExecutorHolder、注册器OneThreadRegistry以及support包中的枚举类。其中重点讲解了BlockingQueueTypeEnum枚举类,它通过名称创建不同类型的阻塞队列实现(如ArrayBlockingQueue、LinkedBlockingQueue等),并提供静态方法cr

2025-07-04 16:28:06 160

原创 单点登录(Single Sign-On,SSO)详解

概念含义认证中心唯一负责用户登录鉴权的系统子系统业务系统,接入 SSO 客户端后支持自动登录Cookie用于保存认证中心或子系统本地登录态Ticket一次性登录票据,认证中心颁发,用于安全传递登录状态loginId用户唯一身份标识(一般是用户ID)

2025-04-21 16:42:43 1162

原创 SpringAI入门:对话机器人

Spring 通过 Spring AI 项目正式启用了 AI(人工智能)生成提示功能。本文将带你了解如何在 Spring Boot 应用中集成生成式 AI,以及 Spring AI 如何与模型互动。

2025-04-18 14:13:50 1106

原创 Java 线程中断和LockSupport

首先,一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止,自己来决定自己的命运。所以,Thread.stop, Thread.suspend, Thread.resume 都已经被废弃了。其次,在Java中没有办法立即停止一条线程,然而停止线程却显得尤为重要,如取消一个耗时操作。因此,Java提供了一种用于停止线程的协商机制―—中断,也即中断标识协商机制。中断只是一种协作协商机制,Java没有给中断增加任何语法,中断的过程完全需要程序员自己实现。

2025-04-09 17:00:15 783 1

原创 MySQL日志

本文系统介绍了 MySQL 中三种关键日志:Undo Log、Redo Log 和 Binlog,以及它们在事务处理中的作用与配合关系。Undo Log(回滚日志):用于记录数据修改前的状态,是实现事务原子性和 **MVCC(多版本并发控制)**的关键。事务回滚和快照读都依赖 Undo Log。Redo Log(重做日志):用于记录对数据页的物理更改,即使事务已提交但数据尚未写入磁盘,借助 Redo Log 也能在系统崩溃后恢复数据,保障事务持久性。

2025-04-06 17:06:20 733

原创 深入并发之Runnable、Callable、FutureTask原理分析

在FutureTask出现之前,Java中的多线程编程执行任务后是不能获取执行结果的,当我们需要多线程执行后的结果时则需要自己经过复杂的实现(如写到缓存或者全局变量中主线程再去读取)。而FutureTask整合了Runnable、Callable、Future三个接口,使得我们的多线程任务执行后可以异步获取到多线程的执行结果。FutureTask会将执行结束后的结果保存在成员变量:outcome中,等待获取执行结果的线程则读取outcome成员值即可。ask对象中的一个Callable成员的call。

2025-04-06 16:57:36 856

原创 前缀树学习

假如我们只构建一个只有26个英文小写字母的前缀树那么children的长度就是26 ,如果children[i] 不为空,那么证明有某个单词使用了这个前缀。

2025-03-24 14:01:41 465

原创 若依(RuoYi)OSS上传学习记录总结

在学习若依(RuoYi)框架的OSS(对象存储服务)上传功能过程中,我深入研究了其整合AWS S3协议OSS功能的实现方式、相关配置以及数据库设计等内容,收获颇丰。以下是详细的学习记录总结。

2025-03-22 15:07:25 1105

原创 MQ 消息发送可靠性保证 —— 整合 Spring Retry 重试框架 + 补偿发送方案

RocketMQ Starter 本身提供重试机制较为简单,无法指定较复杂的重试策略Spring Retry 是一个用于为应用程序提供自动重试功能的框架,特别适用于执行可能会因暂时性问题失败的操作(如网络请求、数据库操作、消息队列操作等)。通过配置,Spring Retry 能够在失败时自动重试指定次数,且每次重试可以配置不同的延迟和间隔。

2025-03-08 13:02:42 1093

原创 MYSQL锁的分类

整个数据库处于只读状态 ,增删改会被阻塞通常用于数据备份如何避免全局锁?在可重复读级别下会开启一个事务,整个事务执行期间会使用这个readView。

2025-03-04 16:26:20 808

原创 点赞,点赞列表方案设计

点赞系统是社交平台或内容平台中常见的功能,用户通过点赞来表达对内容的喜好。为了高效地处理大量用户的点赞请求并快速展示点赞列表,需要设计一个高效的点赞存储与查询系统。

2025-02-28 20:58:48 671

原创 提升 Spring Boot 系统性能:高效处理实时数据流的 BufferTrigger 使用详解

快手开源的 BufferTrigger 是一个用于数据处理,它主要用于实时数据流处理场景。BufferTrigger 的主要作用是为了解决在大数据流处理中常见的问题:如何高效地对连续的数据流进行缓冲,并在满足一定条件时触发下游计算或存储操作。提高效率:通过批量处理数据而不是逐条处理,可以显著减少 I/O 操作的次数,从而提升整体处理效率。资源优化:对于一些需要消耗较多计算资源的操作(如写入数据库、调用外部服务等),通过累积一批数据后再执行一次这样的操作,可以更有效地利用系统资源。简化逻辑。

2025-02-27 14:32:32 1193

原创 事务的隔离级别

在数据库的并发控制中,(Transaction Isolation Level)和(Read Types)对解决并发问题至关重要。常见的并发问题包括和。不同的隔离级别和读类型使用不同的锁机制来解决这些问题。

2025-02-26 21:25:13 709

原创 Spring Boot集成Redis + Lua脚本实现原子性操作:小白入门指南

在分布式系统中,多个Redis命令的组合操作(如先查询后修改)可能因网络延迟、并发竞争导致数据不一致。Lua脚本可以将多个命令封装为一个原子操作,确保,避免中间状态。

2025-02-23 12:58:06 745

原创 RocketMQ事务消息原理

RocketMQ的事务消息是一种确保消息与本地事务一致性的机制,广泛应用于分布式系统中,尤其是需要保证跨服务数据一致性的场景。其核心原理是在生产者发送消息到Broker时,先发送一个“半消息”,然后生产者执行本地事务。如果事务成功,生产者会发送提交(Commit)请求,Broker将半消息标记为正常消息;若失败,则发送回滚(Rollback)请求,Broker丢弃该消息。如果生产者未及时确认,Broker会进行事务回查,确保消息的一致性处理。通过这种机制,RocketMQ提供了一种可靠的方式来保证消息的投递

2025-02-22 10:16:59 1050

原创 Spring Boot定时任务原理

在现代应用中,定时任务的调度是实现周期性操作的关键机制。Spring Boot 提供了强大的定时任务支持,通过注解驱动的方式,开发者可以轻松地为方法添加定时任务功能。本文将深入探讨 Spring Boot 中定时任务的实现原理,重点分析和的作用,以及任务如何被注册和执行。我们还将详细介绍底层使用的线程池调度器和 Java 内置的,它们如何协同工作,保证定时任务的准确执行。此外,我们还将探讨任务调度的线程阻塞与唤醒机制,深入剖析延迟队列()如何有效管理任务的执行顺序。

2025-02-22 10:15:35 2282

原创 Feign 请求拦截器:实现 userId 服务间透传

在微服务架构中,通常负责鉴权并从请求头中提取用户身份(如userId),将其传递给下游服务。但服务间的调用(如通过 OpenFeign)userIduserId通过,在服务间调用时主动将当前服务的用户身份添加到请求头中,实现userId的透传。

2025-02-20 11:18:10 816

原创 解决异步线程无法从ThreaLocal获取上下文

如果说,我们写业务代码的时候,有些逻辑是需要在异步线程中去执行,如下图所示,异步线程中,再通过去获取上下文数据,就失效了。

2025-02-19 14:51:31 563

原创 网关整合 SaToken 实现接口鉴权

在微服务架构中,接口鉴权是确保系统安全的关键环节。通过整合 SaToken 与网关,可以有效地实现全局接口鉴权,确保每个请求都经过合法的身份验证。本文介绍了如何在 Spring Cloud Gateway 中集成 SaToken,实现基于 Token 的认证与授权机制。我们通过自定义网关过滤器,提取请求中的 Token 并进行验证,若 Token 合法则允许请求继续传递,否则拒绝请求。此外,利用 SaToken 的 @SaCheckLogin 注解,可以方便地在微服务中进行权限控制。

2025-02-19 09:49:51 769

原创 整合SaToken 实现登录功能

在现代的 Web 开发中,用户认证和登录管理是构建安全应用的关键环节。本文将介绍如何通过 Sa-Token 来实现一个简单、易扩展的登录系统。Sa-Token 是一个高效、轻量的 Java 权限认证框架,能够帮助开发者快速实现用户认证、权限控制和会话管理。

2025-02-18 18:26:28 1150

原创 MybatisMybatisPllus公共字段填充与配置逻辑删除

在开发过程中,很多时候需要处理一些公共字段,例如:创建时间、修改时间、状态字段等。这些字段通常会在插入或更新数据时进行填充,以便记录数据的变化和状态。同时,逻辑删除也是常见的业务需求,比如删除记录并不是从数据库中物理删除,而是通过更新某个字段(如is_deleted)来标记数据已被删除。MyBatis 和 MyBatis-Plus 都提供了相应的机制来处理这些公共字段的填充和逻辑删除。下面我们将分别介绍如何在 MyBatis 和 MyBatis-Plus 中实现公共字段填充与逻辑删除。

2025-02-16 11:02:37 695

原创 Java中的锁

在并发编程中,多个线程可能会同时访问共享资源,这时就会产生线程安全问题。为了避免数据的竞争和不一致性,我们通常使用锁来控制访问共享资源的顺序。锁的实现和类型多种多样,本文将深入探讨Java中的锁的类型和应用。

2025-02-13 13:40:02 460

原创 使用MyBatisMyBatis Plus实现SQL日志打印与执行监控

在开发过程中,SQL日志的完整输出对于调试和性能优化至关重要。MyBatis默认的日志输出仅显示带占位符的SQL语句,无法直接看到实际参数值,且缺乏执行时间统计。本文将介绍两种实现方案:1. 原生配置方案:通过日志框架直接输出基础SQL日志2. 增强方案:使用MyBatis拦截器实现完整SQL打印和执行监控

2025-02-11 15:56:58 2568 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除