常见面试题20

简介: 分布式锁适用于共享资源互斥、防止重复操作、控制并发流量等场景,常见于超卖防控。可通过数据库、Redis(如Redisson)、ZooKeeper实现,其中Redisson适合高并发,ZooKeeper保证强一致性。

什么场景下要使用分布式锁

分布式锁在以下场景中非常有用:

  1. 共享资源的互斥访问
  1. 当多个分布式节点需要同时访问某个共享资源(例如数据库、文件系统)时,为了保证数据的一致性和避免冲突,可以使用分布式锁来确保同一时间只有一个节点能够访问该资源。
  1. 避免重复操作
  1. 在某些情况下,需要防止重复操作,即同一个任务在分布式环境中只能被执行一次。使用分布式锁可以确保只有一个节点能够成功获取锁并执行任务,其他节点则被阻塞或放弃执行。
  1. 控制并发流量
  1. 在高并发环境下,为了避免系统资源耗尽,可以使用分布式锁来控制并发流量。只有获取到锁的节点才能执行某个操作,其他节点需要等待锁释放后才能继续执行。
  1. 避免竞态条件
  1. 当多个节点同时进行某个操作时,可能会产生竞态条件(Race Condition),导致数据不一致或者错误的结果。通过使用分布式锁,可以在关键的操作中保持原子性,避免竞态条件的发生。
  1. 任务调度与协调
  1. 在分布式任务调度中,可以使用分布式锁来协调任务的执行顺序和避免重复执行。只有获取到锁的节点才能执行任务,其他节点需要等待或者跳过。

更常见的场景是:防止超卖 问题

分布式锁的实现方案有哪些

  1. 基于数据库的分布式锁
  1. 可以利用数据库的唯一性约束或者悲观锁来实现分布式锁。通过在数据库中创建一个表或者记录,利用事务的特性来确保锁的唯一性。
  1. 基于 Redis 的分布式锁
  1. 使用 Redis 的 SETNX(SET if Not eXists)指令来实现简单的分布式锁。通过在 Redis 中设置一个键值对表示锁,利用原子操作来确保锁的互斥性。或者直接采用 redisson 客户端;
  1. 基于 ZooKeeper 的分布式锁
  1. 利用 ZooKeeper 的临时顺序节点和 Watch 机制来实现分布式锁。通过创建临时顺序节点来竞争锁,同时利用 Watch 机制监听节点变化来实现分布式锁的释放和获取。

如何选择分布式锁方案

1、redisson:可以使用在并发高,性能要求高的场景;

2、zookeeper:采用cp模式保证高可靠性,对于更高要求绝对可靠的场景;

redisson分布式锁如何应用

在 Redisson 中使用分布式锁通常包括以下步骤:

  • 创建 Redisson 客户端连接到 Redis 服务器。
  • 通过 Redisson API 获取分布式锁对象。
  • 在关键代码段中使用分布式锁的加锁和解锁方法来控制对共享资源的访问。

如何实现分布式锁的可重入

可重入锁意思:是对于同一线程可以多次获取锁;那不同线程之间同一把锁不能重复获取怎么保证线程可重入获取锁呢?

解决:我们可以通过维护当前持有锁的计数来实现可重入功能。

  • 加锁的时候,因为保存了锁的线程标识,后续再次获取锁,先看是否是同一个线程,如果是的话只对锁计数进行递增
  • 解锁时,对锁计数进行递减,同时刷新锁的过期时间。如果计数为 0,最终才释放锁
目录
相关文章
|
2月前
|
云栖大会
阿里云产品九月刊来啦
2025云栖大会重磅合集,阿里云各产品重大升级发布
163 23
|
2月前
|
机器学习/深度学习 编解码 文字识别
医疗票据OCR图像预处理:印章干扰过滤方案与代码实现
医疗票据OCR技术能自动提取票据中的关键信息,但在实际应用中面临多重挑战。首先,票据版式多样,不同医院、地区的格式差异大,需借助动态模板匹配技术来应对。其次,图像质量参差不齐,存在褶皱、模糊、倾斜、印章遮挡等问题,常通过超分辨率重建和图像修复算法处理。此外,手写体识别、复杂业务逻辑理解(如医疗术语和费用规则)以及数据安全与隐私合规要求也是技术难点。 为应对这些挑战,快瞳系统采用“OCR基础识别 + NLP语义修正”的混合架构,并结合深度学习模型(如CRNN、Transformer)来提升准确率和泛化能力。该技术能显著提升医保报销、保险理赔等场景的效率,是推动医疗信息数字化管理的重要工具。
|
2月前
|
人工智能 自然语言处理 安全
氛围编程陷阱:为什么AI生成代码正在制造大量"伪开发者"
AI兴起催生“氛围编程”——用自然语言生成代码,看似高效实则陷阱。它让人跳过编程基本功,沦为只会提示、不懂原理的“中间商”。真实案例显示,此类项目易崩溃、难维护,安全漏洞频出。AI是技能倍增器,非替代品;真正强大的开发者,永远是那些基础扎实、能独立解决问题的人。
217 11
氛围编程陷阱:为什么AI生成代码正在制造大量"伪开发者"
|
2月前
|
人工智能 文字识别 安全
2025年企业防范员工向第三方人工智能工具泄露数据的全面防护方案
随着生成式人工智能工具的普及,企业员工在日常工作中越来越依赖ChatGPT、DeepSeek等第三方AI服务提升效率。然而,这种便利背后隐藏着严重的数据泄露风险。调查显示,近六成企业发生过敏感数据提交事件,其中三成导致实际泄露。传统防护手段在面对AI数据泄露场景时效果有限,企业急需建立针对性的防护体系。
|
2月前
|
算法 API 流计算
《3D古城场景角色碰撞优化的实战指南》
本文聚焦开放世界3A项目“燕云古城废墟”场景的角色物理碰撞优化,记录从解决“穿模”“帧率骤降”等核心问题切入的工程化实践。先针对静态物体碰撞体冗余,设计“层级碰撞体”方案并制定精度规范,大幅降低计算量;再通过“预破碎资源池”优化可破坏物体,减少实时破碎的性能消耗;开发“动态碰撞剔除系统”,基于距离与视野实现碰撞计算按需触发;结合移动端特性,通过碰撞简化与物理步长调整完成多设备适配;最后构建“碰撞-动画协同系统”,提升交互真实感。
187 32
|
2月前
|
人工智能 供应链 小程序
高效赋能数字人:2025 精选工具大推荐
2025 年,生成式 AI 技术推动数字人工具从 “单一功能落地” 迈向 “全链路价值赋能”,不仅能解决 “降本增效” 的基础需求,更能助力个人与企业解锁 “场景创新”。以下精选 5 款能力差异化的数字人工具,从核心技术、适配场景、实用价值等维度拆解,帮你找到能真正落地的数字人解决方案。
|
2月前
|
存储 安全 开发工具
Git安装与配置:操作步骤+Gitee绑定
本文系统介绍了Git从安装配置到远程协作的全流程,涵盖基础概念、常用命令、分支管理、冲突解决及Gitee实战操作,助你高效掌握代码版本控制与团队协作技巧。
345 8
|
2月前
|
小程序 Java 关系型数据库
基于微信小程序的智慧养老服务系统
本系统基于Java、MySQL和Spring Boot技术,构建高效、安全的养老院管理系统,提升信息处理速度与管理规范性,实现数据自动化备份与网络化管理,助力养老机构信息化升级。
|
2月前
|
缓存 NoSQL 关系型数据库
MySQL 与 Redis 如何保证双写一致性?
我是小假 期待与你的下一次相遇 ~
371 7
|
2月前
|
数据采集 分布式计算 并行计算
mRMR算法实现特征选择-MATLAB
mRMR算法实现特征选择-MATLAB
172 2