当前位置: 首页 > news >正文

对线面试官之幂等和去重

面试官能谈谈你对「去重」和「幂等」这两个概念的理解吗?

候选人:

「去重」是对相同请求或者相同消息在「一定时间内」进行去掉重复,只保留一条。

「幂等」则是保证重复的请求或消息在「任意时间内」进行处理,都需要保证它的结果是一致的,不会因重复处理导致副作用。

  • 去重是 “短期过滤”,解决 “重复操作的资源浪费”,适用于允许 “过了时间窗口后可重复” 的场景。
  • 幂等是 “永久保障”,解决 “重复操作的结果错乱”,适用于必须保证结果唯一的核心业务(如支付、订单)。

不论是「去重」还是「幂等」,都需要对有一个「唯一 Key」,并且有地方对唯一Key进行「存储」

面试官:假设我有个需求:“1 小时内同一用户通过同一渠道发送的消息,最多推送 3 次,超过则去重”。如何实现?

候选人:使用用户ID+渠道ID为唯一key;使用Redis存储推送记录次数,key=用户ID+渠道ID,value=推送次数,并设置过期时间为1小时;主要逻辑就是每次请求时,先检查Redis中对应的次数,大于等于3直接返回;否则推送并且计数+1。

  • 唯一 Key:用户ID+渠道ID
  • 存储:Redis,Key 的过期时间设为 1 小时,Value 记录推送次数。
  • 逻辑:每次请求时检查 Redis 中次数,若≥3 则过滤,否则计数 + 1 并推送。

面试官:嗯,回答不错。假设我有另一个需求:同一订单的支付请求,无论调用多少次,只扣一次钱。

候选人:使用订单号作为唯一key,在MySQL中,订单表用订单号作为唯一索引。当支付请求来时,通过唯一索引判断订单是否已支付,若未支付则扣钱并标记 “已支付”;若已支付则直接返回 “成功”。

  • 唯一 Key:订单号
  • 存储:MySQL,订单表中用订单号作为唯一索引。
  • 逻辑:支付请求时,通过唯一索引判断订单是否已支付,若未支付则扣钱并标记 “已支付”;若已支付则直接返回 “成功”(不重复扣钱)。

面试官既然提到了「去重」了,你听过布隆过滤器吗?

候选者:有了解的

面试官来讲讲布隆过滤器吧

候选者:布隆过滤器的底层数据结构可以理解为bitmap,bitmap也可以简单理解为是一个数组,元素只存储0和1,所以它占用的空间相对较小

候选者:当一个元素要存入bitmap时,其实是要去看存储到bitmap的哪个位置,这时一般用的就是哈希算法,存进去的位置标记为1

候选者:标记为1的位置表示存在,标记为0的位置标示不存在

候选者:布隆过滤器是可以以较低的空间占用来判断元素是否存在进而用于去重,但是它也有对应的缺点。

候选者:只要使用哈希算法就离不开「哈希冲突」,导致有存在「误判」的情况。在布隆过滤器中,如果元素判定为存在,那该元素「未必」真实存在。如果元素判定为不存在,那就肯定是不存在。(结合「哈希冲突」和「标记为1的位置表示存在,标记为0的位置标示不存在」这两者就能得出该结论。)

布隆过滤器也不能「删除」元素(也是哈希算法的局限性,在布隆过滤器中是不能准确定位一个元素的),Guava有布隆过滤器的实现。

http://www.lryc.cn/news/620058.html

相关文章:

  • 【OpenGL】LearnOpenGL学习笔记07 - 摄像机
  • 会议征稿!IOP出版|第二届人工智能、光电子学与光学技术国际研讨会(AIOT2025)
  • 【Android】RecyclerView多布局展示案例
  • [系统架构设计师]架构设计专业知识(二)
  • Linux 计划任务
  • 《书写范式》——代码如诗,诗娟代码(Python)(附精巧“九九表”生成代码)
  • Coze Studio 概览(十)--文档处理详细分析
  • k8s资源管理
  • 【android bluetooth 协议分析 05】【蓝牙连接详解3】【app侧该如何知道蓝牙设备的acl状态】
  • 如何理解vue组件失活与激活及导航全流程
  • 免费专业PDF文档扫描效果生成器
  • PHP imagick扩展安装以及应用
  • GISBox工具处理:将高斯泼溅模型导出为3DTiles
  • 【Android】四种不同类型的ViewHolder的xml布局
  • transforms的使用 小土堆pytorch记录
  • 专题:2025抖音电商与微短剧行业研究报告|附150+份报告PDF汇总下载
  • MATLAB 绘图速查笔记
  • 如何通过 Actor 网络压缩为概率分布实现
  • 使用 python-pptx 完成 ppt 页面的复制
  • 终端安全检测与防御
  • Open3d:从mesh中采样点云的两个函数
  • round robin轮询仲裁器
  • 2025 开源语音合成模型全景解析:从工业级性能到创新架构的技术图谱
  • hutool 作为http 客户端工具调用的一点点总结
  • 理解RESTful架构:构建优雅高效的Web服务
  • 《Unity Shader入门精要》学习笔记一
  • Dimensional Analysis量纲分析入门
  • 【Excel】被保护的文档如何显示隐藏的行或列
  • MongoDB 入门指南二:索引 —— 让查询速度飞起来
  • 随想记-excel报表美化