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

java面试每日一背 day1

1.什么是缓存穿透

缓存穿透是指查询一个数据库中根本不存在的数据,导致这个查询请求绕过缓存直接访问数据库的情况。这种情况如果频繁发生,会对数据库造成不必要的压力。

典型特征:

(1)查询的数据在数据库和缓存中都不存在

(2)恶意攻击者可能故意查询大量不存在的数据来攻击系统

解决方案 :

1. 缓存空对象
//优点:实现简单
//缺点:可能缓存大量无用的空键,占用内存
// 伪代码示例
public Object getData(String key) {Object value = cache.get(key);if (value != null) {if (value instanceof NullValue) { // 特殊标记的空对象return null;}return value;}value = db.get(key);if (value == null) {// 数据库不存在,缓存一个特殊空对象,设置较短过期时间cache.set(key, new NullValue(), 60); // 60秒过期} else {cache.set(key, value);}return value;
}
2.布隆过滤器
//优点:内存效率高
//缺点:有一定误判率(但不会漏判),需要维护布隆过滤器
// 伪代码示例
public Object getData(String key) {if (!bloomFilter.mightContain(key)) {return null; // 肯定不存在}Object value = cache.get(key);if (value != null) {return value;}value = db.get(key);if (value != null) {cache.set(key, value);}return value;
}

2.什么是布隆过滤器

      布隆过滤器是一种空间效率极高的概率型数据结构,用于快速判断一个元素是否可能存在于集合中。它使用位数组多个哈希函数实现,特点是查询速度快、占用内存小,但有一定误判率(可能误报存在,但绝不会漏报)。典型应用包括缓存穿透防护、爬虫URL去重等场景。

工作原理:
  1. 添加元素时,用k个哈希函数计算元素的哈希值,将位数组中对应位置设为1

  2. 查询元素时,同样计算k个哈希值,若所有对应位都为1则认为可能存在,任一为0则肯定不存在"

实际应用:
  1. 缓存系统:防止缓存穿透,如Redis缓存前先查布隆过滤器

  2. 网页爬虫:URL去重,避免重复爬取

  3. 安全领域:恶意网站/垃圾邮件过滤

  4. 数据库优化:减少不必要的磁盘查询"

优点

  • 内存占用极小(1亿元素约需114MB,误判率1%)

  • 查询性能与数据量无关

  • 可并行化处理

缺点

  • 不能删除元素(除非使用Counting Bloom Filter变种)

  • 误判率随元素增加而升高

  • 不支持获取实际存储的元素

"布隆过滤器的性能取决于三个参数:

  1. 位数组大小m:越大误判率越低

  2. 哈希函数数量k:过多会增加计算开销

  3. 元素数量n:实际插入的元素数

根据公式:最优哈希函数数量k ≈ (m/n)*ln2,工程中常用Guava库自动计算这些参数。

 

http://www.xdnf.cn/news/7868.html

相关文章:

  • 分布式集群中的共识算法及其在时序数据库IoTDB中的应用
  • [250521] DBeaver 25.0.5 发布:SQL 编辑器、导航器全面升级,新增 Kingbase 支持!
  • AI 模型高效化:推理加速与训练优化的技术原理与理论解析
  • Java多线程随笔
  • 03-Web后端基础(Maven基础)
  • C#实现自己的MCP Client
  • CSS、SCSS 和 SASS 的语法差异
  • 将VMware上的虚拟机和当前电脑上的Wifi网卡处在同一个局域网下,实现同一个局域网下实现共享
  • 07SpringMVC底层形象解析
  • 2022年下半年信息系统项目管理师——综合知识真题及答案(5)
  • 使用Vite创建一个动态网页的前端项目
  • 1.0 Epson数据类型以及函数的传值与传址
  • 微信小程序中,解决lottie动画在真机不显示的问题
  • CSDN gitcode代码推送
  • 博主总结框架
  • RISC-V 开发板 MUSE Pi Pro CSI测试,一把点亮ov5647摄像头
  • R语言学习--Day05--绘图技巧
  • .NET外挂系列:5. harmony 中补丁参数的有趣玩法(下)
  • 野火鲁班猫(arrch64架构debian)从零实现用MobileFaceNet算法进行实时人脸识别(四)安装RKNN Toolkit Lite2
  • IP地址详解
  • vue调后台接口
  • 【5.19-5.26学习周报】
  • RPA浪潮来袭,职业竞争的新风口已至?
  • HOT100(二叉树)
  • 大语言模型 16 - Manus 超强智能体 Prompt分析 原理分析 包含工具列表分析
  • Python数据库编程案例
  • 2022CCPC吉林省赛长春邀请赛 Java 做题记录
  • 软考软件评测师—— 操作系统综合知识
  • RedissonClient主要功能概述
  • 黑马点评相关知识总结