- 博客(162)
- 收藏
- 关注
原创 手把手实现企业级Spring Security Starter安全组件
*** WebSocket 的权限自定义*/@Component@Resource@Override上下文无损传递:TTL实现跨线程数据透传动态权限控制:模块化配置+注解驱动生产级可靠性:异常处理集成高度可扩展:SPI扩展点+配置化策略。
2025-05-10 22:56:58
284
原创 面试官最爱问的Spring Boot启动后执行机制,这次彻底整明白!
机制执行顺序参数获取适用场景是否影响启动最早无Bean级别的简单初始化可能阻塞早无需要属性验证的初始化可能阻塞中原始命令行参数参数处理/简单初始化影响启动完成中结构化参数复杂参数处理影响启动完成最晚无安全的后置操作(网络调用等)不影响启动。
2025-04-30 18:04:29
419
原创 从零实现分布式WebSocket组件:设计模式深度实践指南
*** WebSocket 消息监听器接口* 目的:前端发送消息给后端后,处理对应 {@link #getType()} 类型的消息* @param <T> 泛型,消息类型/*** 处理消息* @param message 消息/*** 获得消息类型* @return 消息类型/*** WebSocket 消息的发送器接口*//*** 发送消息给指定用户* @param userType 用户类型* @param userId 用户编号。
2025-04-27 18:25:35
913
原创 从零搭建HTTP接口签名组件:防篡改实战指南
AOP高级应用切面编程实现非侵入式安全校验注解驱动开发模式安全设计思想防重放攻击的通用解决方案参数防篡改的签名机制分布式系统设计Redis在安全场景下的应用高并发下的数据一致性保障可扩展架构策略模式的应用(不同签名算法)工厂模式管理密钥解析器。
2025-04-25 11:56:34
730
原创 从零搭建高可用分布式限流组件:设计模式与Redis令牌桶实践
*** 限流注解*//*** 限流的时间,默认为 1 秒*//*** 时间单位,默认为 SECONDS 秒*//*** 限流次数*//*** 提示信息,请求过快的提示*/// 为空时,使用 TOO_MANY_REQUESTS 错误提示/*** 使用的 Key 解析器* @see DefaultRateLimiterKeyResolver 全局级别* @see UserRateLimiterKeyResolver 用户 ID 级别。
2025-04-24 16:21:12
631
原创 Spring Boot 整合 Lock4j + Redisson 实现分布式锁实战
本文基于 Spring Boot 2.7.x + MyBatis Plus 3.5.9,演示如何通过 Lock4j 与 Redisson 实现高可靠的分布式锁方案,解决高并发场景下的资源竞争问题。
2025-04-24 11:13:08
902
原创 Spring Boot实战:基于策略模式+代理模式手写幂等性注解组件
*** 幂等注解*//*** 幂等的超时时间,默认为 1 秒* 注意,如果执行时间超过它,请求还是会进来*//*** 时间单位,默认为 SECONDS 秒*//*** 提示信息,正在执行中的提示*/String message() default "重复请求,请稍后重试";/*** 使用的 Key 解析器* @see DefaultIdempotentKeyResolver 全局级别* @see UserIdempotentKeyResolver 用户级别。
2025-04-17 19:03:11
963
原创 Spring Boot 自定义定时任务组件深度解析:Quartz 集成与设计模式实战
*** 异步任务 Configuration*/@AutoConfiguration// 1️⃣ Spring Boot自动配置注解,标识这是一个自动配置类@EnableAsync// 2️⃣ 启用Spring的异步方法执行功能@Bean// 3️⃣ 声明该方法返回的对象会被注册为Spring Beanreturn new BeanPostProcessor() { // 4️⃣ 创建BeanPostProcessor实现(Bean生命周期处理器)@Overrideif (!
2025-04-16 16:45:55
1067
原创 Spring Boot 参数校验 Validation 终极指南
注解使用场景抛出异常@Valid校验对象参数(如 @RequestBody)@Validated校验简单类型参数(如 @RequestParam)@Validated校验对象参数(需配合 @Valid 使用)在大多数项目中,无论是 Bean Validation 定义的约束,还是 Hibernate Validator 附加的约束,都是无法满足我们复杂的业务场景。所以,我们需要自定义约束。1)编写自定义约束的注解;2)编写自定义的校验器 ConstraintValidator。
2025-04-15 11:32:18
1329
原创 Spring 事件机制与观察者模式的深度解析
观察者模式是一种行为型设计模式,其核心思想是:一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知。这通常通过调用各观察者所提供的方法来实现。通过本文的介绍,相信大家对观察者模式和 Spring 事件机制有了更深入的理解。观察者模式不仅能够实现业务解耦,还能提高系统的灵活性和可扩展性。在实际开发中,合理运用这一模式,可以使我们的代码更加优雅和高效。
2025-04-14 17:52:05
1049
原创 基于 Redis 的 MQ消息中间件:模板方法模式与租户透传设计
模板方法模式(Template Method Pattern)通过定义一个算法骨架,将某些步骤的具体实现延迟到子类。And// 所有消息的基类,定义公共头部信息@Data// 频道消息专用基类// 自动获取频道名定义了四个生命周期钩子/*** {@link AbstractRedisMessage} 消息拦截器* 通过拦截器,作为插件机制,实现拓展。* 例如说,多租户场景下的 MQ 消息处理*//*** Redis 广播 WebSocket 的消息/**
2025-04-11 17:08:28
364
原创 企业级开发必备:MapStruct对象映射深度指南
注意,一定要在 maven-compiler-plugin 插件中,声明 mapstruct-processor 为 JSR 269 的 Java 注解处理器。1.2 Lombok实体类定义二、基础映射实战2.1 创建转换器接口2.2 编译生成实现类三、高级映射技巧3.1 自定义字段映射3.2 类型转换方法四、集合批量转换4.1 List类型转换4.2 Set类型转换五、生产环境最佳实践5.1 分层转换策略5.2 异常处理方案六、常见问题解决方案6.1 字段名
2025-04-10 15:38:03
363
原创 微服务注册中心深度对比:Eureka vs Nacos vs Consul架构师选型指南
注册中心主要有三种角色:最后,RPC Client 从本地缓存的服务节点列表中,基于负载均衡算法选择一台 RPC Sever 发起调用。这里主要介绍 3 种常用的注册中心,分别为 Eureka、Nacos、Consul 。Peer ReplicationPeer ReplicationRegister/HeartbeatFailoverEureka ServerEureka ServerEureka ServerClientEureka 架构图除了上述特点,Eureka 还有一种自我保护机制,如果在 1
2025-04-09 18:39:27
1102
原创 Easy-Trans 极简数据翻译框架深度实战指南
Easy-Trans 是一款革命性的数据翻译框架,其设计哲学基于**“约定优于配置”**原则。在微服务架构中,面对多表关联、跨服务数据聚合等场景,传统开发方式需要编写大量样板代码。
2025-04-09 17:43:23
792
1
原创 Spring Boot 自定义 Redis Starter 开发指南(附动态 TTL 实现)
Data@Validated/*** {@link #redisScanBatchSize} 默认值*//*** redis scan 一次返回数量*/核心作用:配置 Redis 基础组件@AutoConfiguration(before = RedissonAutoConfiguration.class) // 目的:使用自己定义的 RedisTemplate Bean/*** 创建 RedisTemplate Bean,使用 JSON 序列化方式*/@Bean。
2025-04-07 18:49:25
510
原创 EasyExcel 数据字典转换器实战:注解驱动设计
*** 字典格式化* <p>* 实现将字典数据的值,格式化成字典数据的标签*/@Inherited/*** 例如说,SysDictTypeConstants、InfDictTypeConstants* @return 字典类型*/设计维度实现方案解决的问题声明式配置通过组合注解实现配置解耦业务代码与字典逻辑类型安全转换使用Hutool的Convert工具自动处理String→Integer等类型转换统一异常处理捕获异常并记录错误日志避免Excel解析中断。
2025-04-03 19:02:52
1323
原创 Guava Cache 实战:构建高并发场景下的字典数据缓存
策略说明本案例实现缓存穿透非法 Key 导致频繁回源返回 DICT_DATA_NULL 空对象缓存雪崩大量缓存同时失效随机过期时间(可扩展)缓存击穿热点 Key 失效导致并发回源使用 LoadingCache 原子加载。
2025-04-03 18:04:03
390
原创 用脱敏代码彻底搞懂模板方法模式
/ 固定流程(不可变部分)定义模板方法@Override// 1. 判断是否禁用脱敏// 2. 执行脱敏// 抽象方法 → 必须实现// 抽象方法 → 必须实现//可变部分抽象出来定义抽象方法由具体子类实现//========================= 抽象方法 → 子类必须实现(核心差异点)========================/*** 获取注解上的 regex 参数* @param annotation 注解信息* @return 正则表达式*/
2025-04-02 18:12:56
221
原创 基于 Jackson 的 JSON 工具类实现解析与设计模式应用
解决的问题:JavaScript 的 Number 类型精度限制(2^53-1)。/*** Long 序列化规则* 会将超长 long 值转换为 string,解决前端 JavaScript 最大安全整数是 2^53-1 的问题// 超出范围 序列化位字符串 if(value . longValue() > MIN_SAFE_INTEGER && value . longValue() < MAX_SAFE_INTEGER) {} else {} } }/**
2025-04-02 11:27:05
646
原创 策略模式与元数据映射模式融合 JSR 380 验证规范实现枚举范围校验
特性实现方式扩展性新增枚举只需实现 ArrayValuable,无需修改验证逻辑类型安全通过泛型 ArrayValuable 保证元数据类型与校验值类型一致校验语义明确@InEnum(CommonStatusEnum.class) 直观表达业务约束错误提示友好通过 context.buildConstraintViolationWithTemplate 动态生成错误信息。
2025-03-31 11:29:20
471
原创 抖音火山方舟使用Chatbox接入DeepSeek-R1满血版671B
以下参数均从火山方舟大模型接入指南提取模型框处填写如图所示模型id。
2025-02-13 18:42:04
2474
3
原创 Docker从入门到精通
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可抑制的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器完全使用沙盒机制,相互之间不会存在任何接口。几乎没有性能开销,可以很容易的在机器和数据中心运行。最重要的是,他们不依赖于任何语言、框架或者包装系统。docker官网docker中文库搜索镜像拉取镜像查看镜像启动镜像停止镜像移除容器。
2024-04-30 17:44:37
1290
1
原创 热门面试题
表类型如果是 MyISAM ,那 id 就是 8。表类型如果是 InnoDB,那 id 就是 6。InnoDB 表只会把自增主键的最大 id 记录在内存中,所以重启之后会导致最大 id 丢失。1、 用户向服务器发送请求,请求被 Spring 前端控制 Servelt DispatcherServlet 捕获(捕获)2、 DispatcherServlet对请求 URL进行解析,得到请求资源标识符(URI)。
2023-08-18 15:47:11
371
原创 java注解以及如何利用反射获取注解的属性值
1.使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口2.分析:(1) @ interface用来声明一个注解,格式: public @ interface注解名{定义内容}(2)其中的每一个方法实际上是声明了一个配置参数(3)方法的名称就是参数的名称(4)返回值类型就是参数的类型(返回值只能是基本类型,Class , String , enum )(5)可以通过default来声明参数的默认值。
2023-01-13 11:43:56
2887
原创 Spring Boot 和 Spring Cloud Feign调用服务及传递参数踩坑记录
FeignClient用于通知Feign组件对该接口进行代理(不需要编写接口实现),使用者可直接通过@Autowired注入。Spring Cloud应用在启动时,Feign会扫描标有@FeignClient注解的接口,生成代理,并注册到Spring容器中。生成代理时Feign会为每个接口方法创建一个RequetTemplate对象,该对象封装了HTTP请求需要的全部信息,请求参数名、请求方法等信息都是在这个过程中确定的,Feign的模板化就体现在这里。微服务端。
2022-12-22 12:02:16
1459
原创 SpringCloud Fegin解决java.lang.IllegalArgumentException: Body parameter 0 was null
造成这个错误的原因是,我在服务a 调用服务b 的时候参数传递的是null,而服务b通过 @RequestBody 来接收参数,@RequestBody 的 required 默认值是true。最近在工作中遇到了一个Fegin传参异常,特此记录便于日后查阅。
2022-12-22 11:30:23
1226
原创 Method has too many Body parameters的处理办法
当使用Feign时,如果发送的是get请求,那么需要在请求参数前加上@RequestParam注解修饰,Controller里面可以不加该注解修饰 ,@RequestParam可以修饰多个,@RequestParam是用来修饰参数,不能用来修饰整个对象。注意 用来处理@RequestBody Content-Type 为 application/json、application/xml编码的内容。
2022-12-22 11:17:07
2243
2
原创 SpringBoot 集成 WebSocket
WebSocket 是一种全新的协议。它将 TCP 的 Socket(套接字)应用在了web page上,从而使通信双方建立起一个保持在活动状态的连接通道,并且属于。
2022-12-22 10:38:14
1631
原创 超详细的Kafka入门,看这篇就够了
Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间复杂度的访问性能。高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条以上消息的传输。支持Kafka Server间的消息分区,及分布式消费,同时保证每个Partition内的消息顺序传输。同时支持离线数据处理和实时数据处理。Scale out:支持在线水平扩展。
2022-12-21 16:45:58
1191
原创 JAVA反射之访问字段
Java的反射API提供的Field类封装了字段的所有信息:通过Class实例的方法可以获取Field实例:getField(),getFields(),getDeclaredField(),getDeclaredFields();通过Field实例可以获取字段信息:getName(),getType(),getModifiers();通过Field实例可以读取或设置某个对象的字段,如果存在访问限制,要首先调用来访问非public字段。通过反射读写字段是一种非常规方法,它会破坏对象的封装。
2022-12-20 18:14:50
189
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人