- 博客(16)
- 收藏
- 关注
原创 服务的熔断与降级
熔断关注的是**“下游挂了怎么办”**,它通过状态机机制阻断请求,防止故障扩散。降级关注的是**“资源不够了怎么办”**,它通过牺牲非核心业务,保证核心业务的高可用。当熔断发生时,触发降级逻辑,从而构建一个健壮的分布式系统。
2025-11-24 13:48:03
617
原创 缓存双写问题:先操作数据库还是缓存?
策略结果评价先更 DB,再更缓存不一致并发时可能保留旧缓存;浪费性能。先更缓存,再更 DB不一致并发时可能 DB 存旧值(严重)。先删缓存,再更 DB不一致读写并发时,读请求容易回填旧值到缓存。先更 DB,再删缓存一致 (推荐)理论上有微小概率不一致,但工程实践中最为可靠。最终建议: 在实际项目中,推荐使用“先更新数据库,再删除缓存”的策略。如果对一致性要求极高,建议配合Canal + MQ方案来处理“删除失败”的极端情况,确保数据的最终一致性。
2025-11-24 13:38:27
876
原创 Spring Boot 自动装配解析
简单来说,自动装配指的是 Spring Boot 根据类路径(classpath)下的依赖、配置属性以及现有的 Bean,自动将第三方组件(Starter)配置好并注册到 Spring IoC 容器中的过程。SpringBoot 在启动时会扫描外部引用 JAR 包中的文件(以及新版本的),将文件中配置的类型信息加载到 Spring 容器,并根据条件(Condition)决定是否生效。Java@Bean// 如果用户自己定义了 MessageConverter,则这里的默认配置不生效我们甚至可以实现。
2025-11-22 14:34:53
938
原创 Spring Boot Starter 实践:将判题服务沙箱调用封装为 SDK
使用将中的配置映射为 Java 对象,实现配置的统一管理。Java@Data/*** 沙箱类型: example (默认), remote, thirdparty*//*** 远程沙箱地址*//*** 鉴权账号 / AccessKey (部分沙箱需要)*//*** 鉴权密钥 / SecretKey (部分沙箱需要)*//*** 超时时间 (毫秒),默认 5000*/Java/*** 执行代码* @param request 请求参数。
2025-11-22 14:24:56
1007
原创 Java Stream 流常用方法
Java Stream API 的核心流程可以概括为:数据源 (Source) -> 中间操作 (Intermediate) -> 终结操作 (Terminal)
2025-11-21 21:30:27
987
原创 基于 MyBatis 拦截器 + 策略模式手写轻量级分表组件
首先定义一个统一的接口,所有分表逻辑(列表映射、Hash、范围等)都实现该接口。Java/*** 分表策略接口*//*** 根据业务参数确定路由的物理表名* @param logicalTableName 逻辑表名* @param shardingKey 分片键值(如配置的枚举值、ID等)* @param context 上下文配置(如配置Map)* @return 物理表名*/拦截器 (Interceptor)变薄了,只负责流程控制和 SQL 替换。策略 (Strategy)
2025-11-21 00:00:06
1019
原创 分布式事务常见解决方案
分布式事务方案需根据一致性、性能和复杂度权衡:2PC/3PC强调强一致性但易阻塞;TCC和本地消息表提供最终一致性,性能更好;Seata框架则结合两者优势。实际应用中,优先考虑业务需求和框架支持,以确保系统可靠性和扩展性。
2025-11-20 21:55:30
611
原创 Redis 实现高可用限流:从固定窗口到令牌桶的四大算法实战解析
算法处理突发流量实现复杂度内存占用核心特点与应用场景计数器差简单低适用于简单场景,对突发流量不敏感;存在临界值问题。滑动窗口中中等中等需要平滑处理请求,对时间窗口临界问题敏感。漏桶算法差中等低强制实现稳定、匀速的处理速率,适用于需要流量整形的场景。令牌桶算法好中等低既要限制平均流量,又需要处理一定的突发流量。
2025-11-20 21:48:04
981
原创 Git学习笔记
默认情况下,Git软件就存在分支的概念,而且就是一个分支,称之为master分支,也称之为主干分支。此时Git软件会识别出来,版本库中有一份文件和当前用于临时操作文件的暂存区内的文件状态不一致:版本库中文件还在,但是操作区内的文件已经没有了。上一步从版本库删除的是最后一个版本,但是之前版本的文件其实还是存在的。提交后,Git会对当前的操作进行Hash计算,通过计算后的值将数据保存下来,保存的位置为版本库.git文件目录的objects中。-m 表示提交时的信息(message),是必须输入的。
2024-05-19 17:11:48
918
1
原创 谷粒商城高级篇学习笔记
可修改序列化机制/*** 配置文件中 TTL设置没用上* 原来:* 现在要让这个配置文件生效 : @EnableConfigurationProperties(CacheProperties.class)*/@Bean// 设置kv的序列化机制// 设置配置= null){= null){if(!if(!对于读多写少,即时性,一致性要求不高的数据,可以使用SpringCache的写模式,设置缓存过期时间。对于特定要求数据,不使用springcache并额外设计代码。
2024-05-17 20:48:02
1057
4
原创 谷粒商城基础篇学习笔记
普通接口:使用interface关键字定义,可以包含抽象方法和默认方法。注解接口:使用@interface关键字定义,只能包含抽象方法和默认方法(Java 8+),抽象方法的默认返回类型是void,并且可以指定默认值。实现ConstraintValidator接口。
2024-05-17 20:22:39
1154
2
原创 SpringCloud学习笔记
仿照官网断言写法@Component@Validated@Setter@Getter@NotEmpty//钻、金、银等用户等级@Override@Override//检查request的参数里面,userType是否为指定的值,符合配置就通过//如果说参数存在,就和config的数据进行比较/*** 缺少该方法则不能使用shortcut的配置方式,只能用fully方式.* @return*/@Override修改application.yml文件- My=cqx。
2024-05-16 19:44:07
768
原创 nginx基础知识
nginx配置文件位置: nginx-x.x.x/ conf/ nginx.conf (x.x.x代表nginx版本号,该层目录是nginx安装目录)
2024-05-16 19:19:26
616
原创 Nginx基本配置
4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字 符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。//开启了自动目录索引功能。
2024-03-21 14:14:41
738
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅