- 博客(77)
- 收藏
- 关注
原创 什么事索引?
将数据中的一部分信息提取出来,重新组织成一定的数据结构,我们可以根据该结构进行快速搜索,这样的结构称之为索引。索引即目录,例如字典会将字的拼音提取出来做成目录,通过目录即可快速找到字的位置。像mysql中把某个字段提取出来,建立索引,进而搜索出全部数据。
2025-04-25 16:21:29
112
原创 黑马解决订单重复问题的方案
在订单确认页,会先产生预订单id,返回给前端,当用户真正下订单的时候,会把预交易订单id传到后端作为订单表的主键,如果有连点行为,只有第一条会保存成功,因为主键是唯一的,就会避免重复订单。数据一样,订单id不一样怎么解决的。用户在下订单页面连点两次结算。
2025-04-23 22:09:42
100
原创 关于黑马的天机学堂领取优惠券中存在的问题
把mysql中的数据放到redis用于校验,会有修改redis和mysql的操作。存在的问题:mq后续操作报错会有事务问题,涉及两个不同的数据库就不能全部回滚。下面这个流程,设计三个组件。我不信在企业会这么设计。
2025-04-23 21:08:30
198
原创 关于gitee上lilishop商城系统的问题
说说领取优惠券的代码,下面代码存在并发问题。校验和后续操作数据库未加锁,存在并发问题。已领取数量加1,非原子操作,存在并发问题。校验优惠券是否可以领取的方法。
2025-04-22 15:45:30
150
原创 redisson的trylock参数
/lock方法会无限重试。第一个参数(等待时间),如果设置了,获取锁失败后,就不会立即返回了;//这种写法调用代理对象的方法,方法是有事务处理的。//设置失效时间,看门狗失效。//看门机制不能设置失效时间 采用默认的失效时间30秒 (那重试时间怎么设置呢?//分布式方式,分布式锁,采用redisson锁。
2025-04-15 22:45:05
470
原创 redisson的unlock方法
getLock底层是hash,大key是userid,小key是线程,value是重入次数。//这种写法调用代理对象的方法,方法是有事务处理的。//设置失效时间,看门狗失效。//看门机制不能设置失效时间 采用默认的失效时间30秒 (那重试时间怎么设置呢?//分布式方式,分布式锁,采用redisson锁。
2025-04-13 19:50:04
221
原创 DelayQueue
package com.liu.delay;import java.util.concurrent.Delayed;import java.util.concurrent.TimeUnit;public class Mydelay<T> implements Delayed { private T data; private long stopTime;//过期时间 public Mydelay(long delay,T t) { this.
2025-04-11 14:19:02
321
原创 接口优化方式
如果是串行(按顺序依次执行每个任务)执行的话,接口的响应速度会非常慢。考虑到这些任务之间有大部分都是无前后顺序关联 的,可以并行执行 ,就比如说调用获取商品详情的时候,可以同时调用获取物流信息。通过并行执行多个任务的方式,接口的响应速度会得到大幅优化。实际项目中,一个接口可能需要同时获取多种不同的数据,然后再汇总返回,这种场景还是挺常见的。举个例子:用户请求获取订单信息,可能需要同时获取用户信息、商品详情、物流信息、商品推荐等数据。可以帮助我们来做多个任务的编排,功能非常强大。
2025-04-10 10:36:23
296
原创 关于hashset去重和equals和hashcode方法的关系
如果你只重写equals方法,不重写hashcode,代码就会先计算hashcode,直接判定是两个对象。先计算hashcode,这个地址有多个对象就会再次使用equals判断是不是同一个对象。hashset会判断这两个对象是不是同一个,如果是同一个就会去重。如果不重写equals和hashcode方法就会比较对象地址。
2025-04-09 15:17:27
84
原创 关于后端校验的重要性
比如领取优惠券,你昨天打开的页面,今天优惠券已经失效了,但是你并没有刷新页面,所有你还是可以点击立即领取的。如果你不后端校验,优惠券就会超发。
2025-04-06 10:52:22
119
原创 关于权限,ai给的建议
Around("@annotation(com.example.auth.annotation.HasPermission)") public Object around(ProceedingJoinPoint point) throws Throwable { // 提取方法上的注解和权限标识 Signature signature = point.getSignature();- **原理**:将用户的权限信息缓存到内存中(如 Redis、Memcached 等),减少对数据库的直接访问。
2025-04-02 10:41:53
936
原创 aop名词
@Servicepublic class UserService { //连接点(此方法的调用或者异常的抛出都是连接点),目标方法 public void registerUser(User user) { }} //切面(切点+通知)@Aspect@Componentpublic class LoggingAspect { // 切入点(Pointcut) @Pointcut("execution(* com.example.UserService.*(.
2025-03-31 14:12:56
109
原创 关于为什么使用redis锁,不使用zk锁的原因
总结,redis实现的分布式锁虽然是ap模型,理论上锁竞争比较耗性能,但理论就是理论,实际上绝大多数分布式锁只用于避免一些极端情况。而zookeeper实现分布式锁的最大的问题在于国内项目使用zookeeper的概率并不高,引入zookeeper只为了分布式锁太浪费,还增加系统复杂度。至于ap模型的问题,绝大多数分布式锁只是用于避免一些极端情况的,若单一数据会有那么高的并发量你还加锁,那就要考虑这个业务场景设置的合理不合理了。
2025-03-30 22:45:59
285
原创 关于隔离级别,新手容易出现的疑问
场景:a读取订单信息,b修改了商品价格,如果是读已提交,就会读到最新价格,与订单信息发生冲突。那只能使用可重复读隔离级别了。疑问:为什么大多数文章不谈及删除数据,因为删除属于修改数据的范畴。你可以简单理解为删除就是修改。1.读已提交可以读到别人已经提交的修改的数据。可重复读可能会读到别人已提交的新增的数据。2.为啥会有可重复读这种隔离级别?读已提交每次读到最新的提交数据,不好吗?答:确实在有些场景下不好,可重复读要求事物的一致性,而不是实时性。重点:一致性,整体数据是要符合逻辑的。
2025-03-25 12:34:02
110
原创 关于elementui的校验
addSubmit('add')">确 定</el-button><el-button type="primary" @click="addSubmit('add')">确 定</el-button>一般在添加数据的时候会用到校验,也伴随关闭窗口方法的调用。第一种:伴随关闭窗口设置值(失败)第二种:只有校验(成功)
2025-03-06 15:58:25
83
原创 关于redis同步的简单理解
但是像视频播放需要频繁提交记录,就需要合并写操作,这个时候往往会在缓存中去修改或者删除,然后用异步延迟任务去修改数据库。其实像一般的情况,直接从数据库层面去删除和修改,然后清空缓存。以上两种情况是有区别滴!
2025-02-26 09:56:32
91
原创 kafka和rabbitmq的相同之处
当生产者(Producer)发送消息到Kafka时,它会指定一个topic,并可以选择性地指定一个分区。如果生产者没有指定分区,Kafka会根据一定的策略(如轮询、键的哈希值等)来决定消息应该被发送到哪个分区。这个策略是可以在Kafka的配置中进行设置的。会把消息发送到交换机,如果不设置topic,交换机就会把消息发送到所有的队列。
2025-01-20 11:07:19
89
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人