- 博客(74)
- 收藏
- 关注
原创 一篇文章带你理解Redisson原理
①原子性:lua②超时问题:watch dog想要存在看门狗机制,就不能自己设置过期时间,使用它自带的30秒过期时间即可③不可重入:hash 重入次数④失败重试:pub、sub⑤一致性问题:redLock。
2025-10-10 23:05:25
164
原创 bug日记
我也崩溃了,遇到一个bug,前端向后段发送一个请求获得数据库的一个主键,由于主键是一个算法生成的数字比较大,后端long可以接受,但是js中的number由于超过了范围接受不了,导致前端拿着这个主键发请求的时候一直报错。
2025-10-07 15:17:27
279
原创 java开发常用的工具类
组合注解,包含了 @Getter、@Setter、@ToString、@EqualsAndHashCode 和 @RequiredArgsConstructor 的功能,适用于简单的 POJO 类。
2025-10-07 13:38:41
882
原创 定时任务实现
xxl_job_lock:任务调度锁表;xxl_job_group:执行器信息表,维护任务执行器信息;xxl_job_info:调度扩展信息表: 用于保存XXL-JOB调度任务的扩展信息,如任务分组、任务名、机器地址、执行器、执行入参和报警邮件等等;xxl_job_log:调度日志表: 用于保存XXL-JOB任务调度的历史信息,如调度结果、执行结果、调度入参、调度机器和执行器等等;
2025-09-28 13:02:09
838
原创 redis的java客户端
① 导入Spring Data Redis 的maven坐标② 配置Redis数据源③ 简单配置类,创建RedisTemplate对象④ 通过RedisTemplate对象操作Redis简单配置类,修改RedisTemplate序列化相关配置如果直接使用RedisTemplate ,序列化使用的jdk的序列化缺点是:可读性差,内存占用大。如果使用。
2025-09-19 19:02:05
440
原创 MySQL进阶知识梳理
存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。我们可以在创建表的时候,来指定选择的存储引擎,如果没有指定将自动选择默认的存储引擎。字符编码是基于创建的数据库的一个数据库一个字符编码。支持行锁和表锁支持xxx.ibd:xxx代表的是表名,innoDB引擎的每张表都会对应这样一个表空间文件,存储该表的表结构、数据和索引。有一个默认的参数是打开的,代表对于InnoDB引擎的表,每一张表都对应一个ibd文件xxx.sdi:存储表结构信息xxx.MYD: 存储数据。
2025-09-02 22:01:52
807
原创 后端参数校验
前端给后端传输数据,有时候参数需要校验,我们自己写代码会比较麻烦,我们可以使用springboot为我们提供的注解,降低这些没有必要的代码开发。
2025-07-18 20:18:42
399
原创 SpringCloud
Component// 登录校验逻辑// 放行public int getOrder() { // 过滤的顺序,数字越大越靠后return 0;需要实现GlobalFilter和Ordered接口:网关内部的上下文对象,保存网关共享对象如:request,respone,session,或者一些自定的共享属性。:当前过滤器执行完后,要调用过滤器链中的下一个过滤器。Ordered接口作用。
2025-07-13 23:01:59
1033
原创 Java知识梳理——集合框架
默认PriorityQueue创建的是小根堆,如果需要大根堆需要我们自己传比较器。p.offer(3);p.offer(2);p.offer(1);p.offer(5);p.offer(4);p.offer(3);p.offer(2);p.offer(1);p.offer(5);return age;@Override// 要么传比较器,要么Person对象要实现Comparable接口,重写compareTo方法。
2025-07-08 21:45:36
582
原创 Vue3-组件化-Vue核心思想之一
组件的生命周期的四个阶段:1. 创建阶段:创建响应式数据2. 挂载阶段:渲染模板3. 更新阶段:修改数据,更新视图4. 卸载阶段:卸载组件之前把代码写在⼀起的,数据直接使⽤即可;现在是组件化开发,通过代码拆分和组合的⽅式进⾏开发,这种情况下,还要达到和不拆分之前⼀样的效果,这时组件之间难免需要数据传递,这就需要组件之间进⾏通信。封装⼀段 公共的DOM操作 代码,便于复⽤。
2025-07-04 22:11:13
1261
1
原创 Vue3-指令及其相关知识
4.事件绑定指令(v-on)阅读前置知识:表达式是什么?◦ 所有的字⾯量和变量名◦ 对象.属性名◦ 算术运算或三元运算◦ ⽅法的调⽤。
2025-07-02 12:49:02
841
原创 浏览器网站禁止黏贴,但是要交作业怎么快速黏贴
写这篇博客的原因:学校最近要求使用 iwrite 写英语作文,但是浏览器禁止黏贴,我们自己只能手动输入,但是作为程序猿的我想到了一个很好的解决方案。
2025-06-02 19:19:39
431
原创 vscode配置和前端开发配置
1.可以更好看的显示文件图标2.用户快速打开文件使用步骤:在html文件下右键点击 open with live server 即可。
2025-06-01 17:35:17
587
1
原创 使用redis代替session的登录校验
这里存储用户信息使用hash结构进行存储。使用String和json存储不是那么方便。因为原本使用session的方案会自动帮我们进行校验,这里我们使用redis进行代替有很多东西都需要我们自己去存储。前端会把token存放在请求头中,我们每次校验的使用从请求头中获取即可。
2025-05-27 19:31:53
547
原创 rabbitmq的高级特性
每个 RabbitTemplate 只能配置一个 ReturnCallback,因此我们可以在配置类中统一设置。@Slf4j@Overridelog.error("触发return callback,");});由于每个消息发送时的处理逻辑不一定相同,因此ConfirmCallback需要在每次发消息时定义。@Test// 1.创建CorrelationData// 2.给Future添加ConfirmCallback@Override。
2025-05-27 14:05:23
1442
原创 一篇文章带你了解什么是幂等性,如何确保消息的幂等性
相同输入的重复操作,其结果应该保持一致。数据的查询一般是幂等的,但是删除,修改,新增不是幂等的。
2025-05-27 12:44:02
1235
1
原创 初识消息队列
缺点:①拓展性差:代码冗余在了一起,所以拓展性差。②性能下降:调用者需要等待服务提供者执行完返回结果后,才能继续向下执行,也就是说每次远程调用,调用者都是阻塞等待状态。最终整个业务的响应时长就是每次远程调用的执行时长之和。③级联失败:由于我们是基于OpenFeign调用交易服务、通知服务。当交易服务、通知服务出现故障时,整个事务都会回滚,交易失败。这其实就是同步调用的问题。优点:①时效性强,等待到结果后才返回。
2025-05-25 14:35:40
1004
原创 一篇文章带你理解ThreadLocal原理和理解内存泄漏的原因
很多人图方便,把定义为静态变量,全局共享。这样会延长实例生命周期,即使线程退出了,它挂的值还在那儿——弱引用还没释放,value 就一直占着内存不放。
2025-05-23 20:36:51
1194
原创 黑马点评-使用redis生成全局唯一id
② 如果未来数据量很大,数据要存在数据库集群里面,这时候使用主键自增会重复。序列号:32bit,秒内的计数器,支持每秒产生2^32个不同ID。时间戳:31bit,以秒为单位,可以使用69年。ID的组成部分:符号位:1bit,永远为0。④ 数据库自增(就是redis的原理)① id的规律太明显,容易泄露数据。
2025-05-15 21:21:00
419
原创 苍穹外卖-公共字段自动填充
*** 更新操作*/UPDATE,/*** 插入操作*/INSERT/*** 自定义注解,用于标识某个方法需要进行功能字段自动填充*/@Target(ElementType.METHOD) //指定这个注解只能加在方法上面// 数据库的操作类型:UPDATE INSERT/*** 自定切面类,实现公共字段自动填充处理逻辑*/@Aspect@Component@Slf4j/*** 切入点*/
2025-05-09 18:17:46
292
原创 苍穹外卖-统一对日期格式化处理
当然在这个方法里面也可以注册拦截器这个方法和实现 WebMvcConfigurer 接口注册拦截器一样,但是这两种方法还是有区别的 继承 WebMvcConfiguration 这个办法用的比较少有的地方还有坑,具体的可以问ai。注意:下面添加的代码在代码启动运行的时候就会运行。
2025-05-09 14:08:11
187
原创 苍穹外卖-实现更简洁分页查询
底层使用了mybais的拦截器实现,会把后面的一条sql动态的拼接,会动态的把 limit 关键字拼接上去,然后动态的拼接相应的数据,这样的好处就是我们不用自己拼接翻页的sql语句了。
2025-05-09 12:01:47
164
原创 苍穹外卖-获得当前登录用户的id
在拦截器里面获取 token 并从 token 获取当前用户的 id,并把id存放在 BaseContext 里面,如果在这次请求中需要用户id的话直接调用 getCurrentId 这个方法即可。为每个线程提供单独一份存储空间,具有线程隔离的效果,只有在线程内才能获取到对应的值,线程外则不能访问。一个Thread,而是Thread的。
2025-05-09 11:21:12
257
原创 Linux基础指令
cp指令⽤于复制⽂件或⽬录,如同时指定两个以上的⽂件或⽬录,且最后的⽬的地是⼀个已经存在的⽬录,则它会把前⾯指定的所有⽂件或⽬录复制到此⽬录中。2. 当第⼆个参数类型是⽂件时,mv命令完成⽂件重命名,此时,源⽂件只能有⼀个(也可以是源⽬录名),它将所给的源⽂件或⽬录重命名为给定的⽬标⽂件名。3. 当第⼆个参数是已存在的⽬录名称时,源⽂件或⽬录参数可以有多个,mv命令将各参数指定的源⽂件均移⾄⽬标⽬录中。• -f 或 --force 强⾏复制⽂件或⽬录, 不论⽬的⽂件或⽬录是否已经存在。
2025-04-18 09:36:10
496
原创 数据加盐/加密
是指把任意⻓度的输⼊消息数据转化为固定⻓度的输出数据的⼀种密码算法. 摘要算法是不可逆的, 也就是⽆法解密. 通常⽤来检验数据的完整性的重要技术, 即对数据进⾏哈希计算然后⽐较摘要值, 判断是否⼀致. 常⻅的摘要算法有: MD5, SHA系列(SHA1, SHA2等), CRC(CRC8, CRC16,CRC32)
2025-04-17 21:54:00
449
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅