每日学习-01

问题一:无限续期导致死锁怎么办

问题二:maven怎么用的,有啥功能

问题三:布隆过滤器知道原理吗?

问题四:mybatis只通过实现接口就可以运行的原因

问题五:看门狗机制

开始分析:

问题一:无限续期导致死锁怎么办

答:一般指 Redisson 分布式锁看门狗无限续期造成死锁。

第一,加锁时指定锁的最大过期时间leaseTime,会关闭自动续期,锁到时间自动释放,从根源防止无限续期;

第二,业务代码放到 try-finally,释放锁前判断是当前线程持有才解锁,避免漏释放;

第三,如果业务耗时不确定要用看门狗,就给业务加执行超时检测,线程阻塞卡死就终止续期; 第四,线上兜底方案:定时任务定期清理长时间未释放的僵尸锁,紧急情况直接删除 Redis 锁 key 恢复。

如果是本地 Lock 死锁,就用带超时的 tryLock,并且统一线程获取锁的顺序。

问题二:maven怎么用的,有啥功能

答:核心功能:

第一是依赖管理,通过 pom.xml 配置引入第三方 jar 包,自动下载、解决包冲突,不用手动导包; 第二是项目标准化构建,统一项目目录结构;

第三是项目生命周期管理,提供 clean、compile、test、package、install、deploy 等一套命令,完成清理、编译、测试、打包、上传私服全流程; 第四是多模块拆分,适合大型项目做分模块开发。

简单使用流程:先创建 Maven 项目,编写 pom.xml 配置依赖和插件;然后用命令执行构建,比如 package 打 jar/war 包;可以配置本地仓库、远程私服,还能自定义插件拓展构建逻辑。

问题三:布隆过滤器知道原理吗?

布隆过滤器底层是位数组 + 多个哈希函数

  1. 存入数据:一个元素经过多个不同哈希函数算出多个下标,把位数组对应下标全部置 1。
  2. 查询数据:同样哈希算出下标,只要有任意一位是 0,元素一定不存在;全为 1 才判断可能存在。
  3. 特点 :不存在误判,但存在假阳性(有可能把不存在的元素误判为存在),无法删除元素;优点是占用内存极小、查询速度快,Redis 里常用来做缓存穿透解决方案。

问题四:mybatis只通过实现接口就可以运行的原因

MyBatis 仅定义接口不用写实现类就能运行,核心是动态代理,流程分这几步:

  1. 启动时解析 Mapper 接口和对应的 XML / 注解 SQL,把接口全限定名当作 key,把 SQL、参数、返回值等元数据封装存进配置;
  2. 调用getMapper()时,MyBatis 底层用 JDK 动态代理生成这个 Mapper 接口的代理对象;
  3. 调用接口方法时,会走到代理类的invoke拦截方法;
  4. 拦截器根据当前调用的接口方法,匹配提前缓存好的 SQL 信息,封装参数,执行 JDBC 数据库操作,最后把结果映射返回,我们就不用手写接口实现类了。

补充一句:因为是 JDK 动态代理,所以 Mapper 必须是接口,不能用普通类

问题五:看门狗机制

我说下 Redis 分布式锁里的看门狗机制:

  1. 触发条件:我们调用lock()不加锁最大过期时间 leaseTime 时,Redisson 会自动开启看门狗;锁默认有效期 30 秒。
  2. 工作逻辑:后台起一个定时线程,每隔 10 秒检查,如果当前业务线程还持有锁,就自动把锁过期时间重置回 30 秒,实现自动续期,防止业务没执行完锁提前释放。
  3. 停止条件:只要业务线程正常走完、手动解锁,或者线程卡死终止,续期任务就会停止,锁到期自动删除。
  4. 缺点:如果业务线程卡死阻塞,看门狗会无限续锁,造成死锁;解决办法就是手动指定 leaseTime,关闭看门狗,给锁设置最大存活时长兜底。
相关推荐
一条泥憨鱼2 小时前
【从0开始学习计算机网络】| DNS 污染、劫持与 CDN:你的网页是怎么被“掉包“的
学习·计算机网络·安全·http·https·dns
poiu12346572 小时前
AI FDE技术学习平台对比测评 2026零基础技术学习参考
人工智能·学习
Bruce_Liuxiaowei2 小时前
从基础理论开始学习人工智能(二):应用和方法——从拼图游戏到神经网络
人工智能·神经网络·学习
MartinYeung53 小时前
[论文学习]动态红队测试DAS:破解医疗大语言模型静态评估的“信任陷阱”
人工智能·学习·语言模型
GlueNa2SiO33 小时前
05-Flask表单处理与文件上传
笔记·python·学习·flask
Zkaisen3 小时前
GIt从零开始:小白完整学习文档
git·学习
那年窗外下的雪.3 小时前
STM32嵌入式学习 03:TIM2 定时器更新中断
stm32·单片机·学习
问天_观心3 小时前
深入学习Transformer(二)
深度学习·学习·transformer
人邮异步社区3 小时前
如何系统地学习 C++ 语言?
开发语言·c++·学习
知识分享小能手3 小时前
概理论与数理统计学习教程,从入门到精通,在数理统计中应用R软件(21)
开发语言·学习·r语言