- 博客(26)
- 收藏
- 关注
原创 黑马点评实战篇【过程笔记】-优惠券秒杀4
摘要:文章探讨乐观锁解决库存超卖的两种实现方式:版本号法(新增version字段)和CAS法(直接使用库存作为版本号)。测试发现CAS法在高并发下成功率低(仅21/200),原因是严格乐观锁导致数据变更即失败。改进方案是放宽条件,只要库存>0即可操作,使库存从100降至0,成功创建100个订单。这体现了根据业务场景调整乐观锁策略的必要性。(150字)
2025-09-16 09:25:40
318
原创 黑马点评实战篇【过程笔记】-优惠券秒杀3
摘要:在高并发场景下,优惠券秒杀功能出现了库存超卖问题(200用户并发导致库存-9)。这是由于MySQL库存查询和扣减非原子操作,多线程交叉执行所致。解决方案包括悲观锁(如synchronized)和乐观锁(版本号法/CAS),前者强制串行执行,后者通过版本校验实现安全更新。该问题本质是并发环境下共享资源的线程安全问题。(149字)
2025-09-16 09:21:38
282
原创 黑马点评实战篇-优惠券秒杀2
摘要:该代码实现了优惠券秒杀功能,主要流程包括:1)查询秒杀券信息;2)校验秒杀时间有效性;3)检查库存;4)使用@Transactional确保扣减库存和创建订单的原子性;5)生成分布式ID作为订单号;6)返回订单结果。关键点在于通过事务管理保证数据一致性,并处理了秒杀时间、库存等业务校验逻辑。
2025-09-15 20:10:42
199
原创 黑马点评实战篇-优惠券秒杀1
摘要:数据库自增ID在订单系统中存在规律性强和分表重复问题。分布式ID可实现全局唯一性,满足高可用、高性能、安全性和递增性要求。基于Redis的分布式ID生成方案结合时间戳、业务前缀和序列号,通过位运算拼接生成唯一ID。测试表明该方案能高效生成大量ID,确保系统在高并发场景下的可用性和安全性。
2025-09-15 20:08:06
400
原创 黑马点评中优惠券秒杀的演变【Java开发面试直接吟唱】
方案优缺点同步锁方案:实现简单,但性能低,扩展性差。Redis + 异步队列:高并发友好,复杂度高,需保证最终一致性。进一步优化引入本地缓存减少 Redis 压力。数据库分库分表缓解写入瓶颈。支付成功后异步更新库存,避免实时一致性要求。通过分层设计(缓存、异步、补偿)平衡性能与可靠性,是秒杀系统的核心思路。
2025-09-14 09:57:19
302
原创 缓存穿透【面试时直接唱给面试官听】
本文针对商铺信息查询中的缓存穿透问题,提出并对比了两种解决方案。背景是商铺数据读多写少,适合Redis缓存,但当恶意请求查询不存在的ID时,请求会直接打到数据库。解决方案一是缓存空值,将不存在的查询结果也缓存并设置TTL,简单有效但略有内存消耗;方案二是布隆过滤器,能预先判断数据是否存在但有误判风险且实现复杂。经分析,由于商铺数据量不大,最终选择了实现简单的缓存空值方案来解决缓存穿透问题。该方案平衡了效果与实现成本,有效降低了数据库压力。
2025-09-12 12:18:11
667
原创 分布式锁解决集群下一人一单超卖问题
本文介绍了使用Redis的setnx指令实现分布式锁来解决秒杀系统中的超卖问题。通过创建SimpleRedisLock类封装分布式锁的基本操作,包括获取锁(tryLock)和释放锁(unlock)。在秒杀业务逻辑中,通过用户ID作为锁的key,确保同一用户只能有一个请求获得锁,从而避免重复下单。获取锁成功后才执行减库存等操作,最后释放锁。这种方案相比本地锁(synchronized)能更好地支持分布式环境,解决了集群部署时的并发控制问题。
2025-09-11 17:28:51
262
原创 缓存击穿【面试时直接唱给面试官听】史上最全
所以总结一下,这是一个针对于热点数据、存在高并发请求的场景下的 存入Redis缓存,并且解决缓存击穿问题的一个工作内容。我考虑了常见的两种解决方案,最终根据应用场景选择了逻辑过期的方案解决。
2025-09-11 10:17:14
328
原创 0基础学习JavaSE第七天【找大厂实习】
数组是一个容器,用来存储同一数据类型的多个值。数组中的元素具有相同类型,且每个元素都有一个索引,索引从 0 开始。
2025-05-07 20:11:16
538
原创 半小时学会灵活运用Git【全】
工作流程图上的7个指令(clone+fetch+pull+checkout+add+commit+push)和2个常用指令(log+merge)
2025-05-06 19:41:25
206
原创 半小时学会灵活运用Git【二】
git remote add origin【远端名称】 git@gitee.com:ko666/git_test.git【仓库路径】git clone <仓库路径> [本地目录] 本地目录可以省略,会自动生成一个目录。ssh-keygen -t rsa 不断回车。
2025-05-05 19:10:24
299
原创 0基础学习JavaSE第五天【找大厂实习】
是一块区域,用于展示文本和图片。JLable构造方法● JLabel()创建一个不含图像,不含文本的 JLabel 对象● JLabel(String text)使用指定的文本创建一个 JLabel 对象● JLabel(Icon image)创建一个具有指定图像的 JLabel 对象。注意:如果多个组件摆放在同一个位置,后添加的组件,会被压在底部。是从下面往里塞的。
2025-05-05 19:07:32
677
原创 半小时学会灵活运用Git【一】
git status 【untracked files工作区| Changes to be committed即将被提交:在暂存区|nothing to commit, working tree clean已经提交到仓库了】git checkout -b 分支名。【HEAD指向谁,谁就是当前的分支】git checkout 分支名。git branch 分支名。
2025-05-04 16:18:45
310
原创 0基础学习JavaSE第四天【找大厂实习】
是一块区域,用于展示文本和图片。JLable构造方法● JLabel()创建一个不含图像,不含文本的 JLabel 对象● JLabel(String text)使用指定的文本创建一个 JLabel 对象● JLabel(Icon image)创建一个具有指定图像的 JLabel 对象。注意:如果多个组件摆放在同一个位置,后添加的组件,会被压在底部。是从下面往里塞的。
2025-05-04 16:12:50
733
原创 0基础速通JavaSE第四天【冲击大厂实习】
面向对象:并不是一项技术,而是一种编程的指导思想。它的核心思想是:通过“对象”来组织程序,解决问题。为什么要学面向对象?:面向对象使得代码更加模块化、可维护、易理解,就像现实生活中解决问题的方式一样,面向对象使得编程变得简单高效。·类:是一组相关属性和行为的集合,类似于设计图。例如,在 Java 中,要创建一个对象,必须先有类。·类是模板,对象是根据类创建的实例。·每个类可以创建多个对象。示例:成员变量是类中的数据字段,定义在类的方法之外。成员方法是类的行为,定义在类中,通常不需要static关键字。打印对
2025-05-03 10:06:36
862
原创 0基础学JavaSE第二天
Java基础语法Java 关键字不能作为变量名或方法名(如classpublicstatic·关键字的字母全部小写。·常用的代码编辑器,针对关键字有特殊的颜色标记,非常直观。
2025-04-29 15:58:55
801
原创 手把手带读Micron-BERT: BERT-based Facial Micro-Expression Recognition
Step2:进行块交换操作,随机的选择一些块,将It+δ中的块与It对应的块交换位置,从而构成一个新的图像帧It/s,这个新的图像帧就是在原有It图像的基础上进行的改造得来的。又将新的图像帧It/s输入到模型中,任务是恢复原始的图像It,通过这样的训练过程,模型就能知道哪些块是被交换的,让模型在比较帧间的差异更加准确。将It+δ/c、It+δ和It/s输入到编码器中,每一个图像块会被线性投影到一个潜在向量中,还会进行位置编码,使模型不仅能识别每个块的内容,还能知道在图像中的相对位置。
2024-11-20 19:13:19
1329
6
原创 打开电脑突然桌面图标突然变大而且间隔很大
3.找到IconSpacing字符串值,双击该字符串值,修改为-1125,其中-1125为默认值。找到IconVerticalSpacing字符串值,双击该字符串值,修改为1-125,其中-1125为默认值.2.打开注册表编辑器后,双击左侧栏目将注册表子项依次定位至:HKEY_CURRENT_USER\ControlPanel\Desktop\WindowMetrics。1.按键盘Win键+R,打开“运行”窗口,输入“regedit”打开注册表编辑器.4.关闭注册表编辑器,重启电脑,桌面图标即恢复正常.
2024-10-14 17:24:53
4878
原创 新用户使用FileZilla往服务器上传输数据显示连接失败
我想要使用我们学校的云服务器,但是从昨天晚上到现在一直显示连接失败。刚刚才解决,写这篇帖子的目的是记录和能够帮助和我遇到相同问题的人。解决bug太开心了!首先是在学校云服务器上创建实例,导师这边有免费的gpu资源,还是挺好的,注意ssh里面有ip地址和端口号。我们需要在登录成功后重置密码,然后关闭实例再重启。密码:是每个用户自己的密码,并不是root的密码。如何从心连接一下服务器就成功了。主机:填ssh里面的ip地址。端口:填ssh里面的端口号。呵呵,并没有那么简单。可以开始传输数据了。
2024-10-13 13:37:58
448
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅