- 博客(198)
- 收藏
- 关注
原创 定时任务线程池 ScheduleThreadPoolExecutor 应用和源码分析
ScheduleThreadPoolExecutor支持延迟执行以及周期性执行的功能,延迟执行:基于延迟队列实现周期性执行:当任务执行完之后,再次设置好延迟时间,将任务重新扔到延迟队列中执行。
2025-03-19 12:32:35
413
原创 深入 AQS 的子类 ReentrantReadWriteLock
有了 ReentrantLock 和 Synchronized ,为啥还要有 ReentrantReadWriteLock 读写锁?有些操作是读多写少的,那么还要保证线程安全的话,如果还采用上面两种互斥锁,那么效率是很低的,这种场景下就可以使用 ReentrantReadWriteLock 处理读读不互斥, 读写,写读,写写互斥。
2025-02-20 15:03:57
525
原创 深入 AQS 中的子类 ReentrantLock
1. 虽然取消节点的前驱节点是头节点时,并没有直接处理取消节点,让其被 GC 回收,但是下一次取消节点是中间节点时,例如上图 C 节点被取消时,它会走上述逻辑,找到一个有效的前驱节点(虚拟节点),指向它的后继节点(D节点), 这一步操作可以让 head 节点无法找到这个取消节点。lockInterruptibly,拿不到锁资源,就死等,等到锁资源释放后,被唤醒,或者是被中断唤醒。那么再下一轮循环的时候,D 的前驱就是头节点了,就可以抢锁了,抢锁成功就重新设置头节点。
2025-02-11 16:41:30
826
原创 Java 层面保证内存可见性的方式
Java 层面保证内存可见性的方式有很多:1. volatile,用volatile基本数据类型,可以保证每次CPU去操作数据时,都直接去主内存进行读写。2. synchronized,synchronized的内存语义可以保证在获取锁之后,可以保证前面操作的数据是可见的。3. lock(CAS-volatile),也可以保证CAS或者操作volatile的变量之后,可以保证前面操作的数据是可见的。4. final,是常量没法动。运行结果:t1 没法正常结束.....
2025-02-05 11:24:19
282
原创 final 修饰的变量一定不能被修改?一定能被修改?
为啥前面修改 final String 还好好的,只不过编译器做了优化,导致它的指向并没有被改变,而到 final Integer 就直接报错了?以上两种情况,代码都会报错,所以 final 修饰的局部变量是不允许被修改的!成员变量的值,这种修改在实际应用中可能不会如预期那样生效。变量的引用不会直接导致编译错误,但修改后的结果可能不会被反映出。,编译器在编译时可能会对值进行优化,使得直接修改变得不现实。变量的引用,实际的编译器优化可能会防止这种修改生效。此处通过反射来获取值,确实看到修改了,只不过。
2024-08-22 13:18:39
1072
3
原创 策略模式的缺点,你知道的有哪些?
策略模式(Strategy Pattern)是一种行为设计模式,它定义了一系列算法,并将每个算法封装到独立的策略类中,使得它们可以互相替换。它可以提高代码的可维护性和灵活性。
2024-08-22 10:17:52
777
原创 Redis 常用命令
TYPE key 返回 key 所存储的值的类型。设置指定 key 的值,并将 key 的过期时间设为 seconds 秒。将哈希表 key 中的字段 field 的值设为 value。有序集合中对指定成员的分数加上增量 increment。只有在 key 不存在时设备 key 的值。通过索引区间返回有序集合中指定区间内的元素。获取存储在哈希表中指定字段的值。移除有序集合中的一个或多个成员。删除存储在哈希表中的指定字段。删除集合中一个或多个成员。
2024-08-03 13:33:41
1090
原创 实时同步:使用 Canal 和 Kafka 解决 MySQL 与缓存的数据一致性问题
由此可见,对数据库的每一个修改操作,都是对应固定格式的一个数据,所以可以监听对应的 topic 并针对 data 中的数据进行一个提取,得到一个 cacheKey,然后删除对应的缓存,使得下一次的查询去访问数据库,并同步缓存。canal 监控 binlog 日志,binlog 日志的传输默认使用 MySQL 的复制协议(基于 TCP/IP),执行修改操作:将 “如何学习Spring?”修改成 “如何学习Spring?将 canal 下 plugin 下的所有 jar 包拷贝到 lib 目录下。
2024-07-25 19:24:04
2341
7
原创 XXL-JOB 定时任务在AI大模型中的应用
得到这个 jar 包后,就可以创建一个执行 jar 包的脚本,例如:xxl-job-start.bat 然后用记事本打开:粘贴执行 jar 包的命令:java -jar xxl-job-admin-2.4.2-SNAPSHOT.jar。那么下次想要访问 xxl-job 的任务调度中心页面时,直接双击 .bat 文件,再拿着。注意:多一个斜杆 / 都可能匹配不上,例如:方法里写的:@XxlJob("/resetAiUseCount"),新增任务写的 resetAiUseCount,此时是匹配不上的。
2024-07-22 19:04:45
882
2
原创 分布式锁在AI大模型调用中的应用
AI大模型的调用往往是一个高资源消耗的操作,在实际应用中,为了防止恶意用户使用辅助工具频繁地调用这些大模型,占用大量服务器资源,影响其他用户的请求处理,降低系统的整体性能和服务质量,使用分布式锁就可以来实现这一限制策略。:如果获取锁失败,返回HTTP 429(Too Many Requests)状态码,提示用户请求频率过高。:调用结束后,释放锁,以便其他请求能够获取锁。:在请求到达之前,拦截并尝试获取分布式锁。:如果成功获取锁,继续执行AI模型调用。
2024-07-22 17:26:43
508
原创 自定义注解 + Redis 实现业务的幂等性
【实现思路】创建自定义幂等性注解.实现自定义幂等性注解的拦截器创建拦截器,添加幂等性判断逻辑定义幂等性判断的 ID(两种方式)请求方携带唯一业务 ID后端程序自行组织唯一业务 ID:当前用户 ID + 请求的数据(此处使用第二种)配置拦截规则使用自定义幂等性注解来保证业务的幂等性/*** 自定义幂等性判断注解*/@Target(ElementType.METHOD) // 方法注解@Retention(RetentionPolicy.RUNTIME) // 程序运行期间有效/**
2024-07-18 11:19:58
630
原创 SpringSecurity + JWT 实现登录认证
Component@Override// 1.获取 JWT 令牌if (!// 2.判断 JWT 令牌正确性// 3.获取用户信息,存储 Security 中= null= null) {// 4.创建用户对象null,// 绑定 request 对象。
2024-07-17 23:15:51
2245
原创 RocketMQ 如何保证全链路消息不丢失?
当然使用直接内存虽然。当 Leader 节点将消息记录到 commitLog 里面后,还没来得及同步消息,它就挂了,这个时候,Dledger 集群就会选出一个日志最新的节点作为 Leader,而挂掉的 Leader 节点中还未提交的消息,当服务重启的时候,就会被主动丢弃,然后以新的 Leader 中的消息为准。虽然说有消息重试机制,但并不代表着消息的绝对不丢失,在某些情况下,还是会存在消息丢失的,当 MQ 发送消息给消费者,如果消费者在消息还未实际处理完成之前就返回了消费成功的响应,就存在消息丢失的可能。
2024-07-17 12:23:47
909
原创 RocketMQ 为什么要自己做一个 NameServer ?RocketMQ 5.x 版本中的 proxy、controller 和 container 分别有什么用 ?
1.独立运行的分散结构2.简化实现,容忍部分数据不一致Proxy:多语言支持、简化开发Controller: 提高 Broker 的性能Container:提高资源利用率,平衡负载
2024-07-12 11:38:44
1117
原创 Spring Cloud Gateway + Nacos + LoadBalancer实现企业级网关
Spring Cloud Gateway + Nacos + LoadBalancer实现企业级网关
2023-12-10 17:51:42
1439
原创 Spring Cloud LoadBalancer 负载均衡策略与缓存机制
深入Spring Cloud LoadBalancer:策略全解析与缓存机制
2023-11-08 17:14:39
5269
1
原创 【微服务 Spring Cloud Alibaba】- Nacos 服务注册中心
【微服务 Spring Cloud Alibaba】- Nacos 服务注册中心
2023-11-01 12:41:30
2201
3
原创 当面试被问到 Java 内存模型,不妨反问面试官:您问得是 Java Memory Model 呢?还是 JVM 运行时数据区?
当面试被问到 Java 内存模型,不妨反问面试官:您问得是 Java Memory Model 呢?还是 JVM 运行时数据区?
2023-09-05 10:54:02
159
原创 Spring Boot 中是使用 JDK Proxy 动态代理还是 CGLib ?
Spring Boot 中是使用 JDK Proxy 动态代理还是 CGLib ?
2023-08-31 00:25:39
861
原创 什么是跨域问题 ?Spring MVC 如何解决跨域问题 ?Spring Boot 如何解决跨域问题 ?
什么是跨域问题 ?Spring MVC 如何解决跨域问题 ?Spring Boot 如何解决跨域问题 ?
2023-08-30 12:27:11
862
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人