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.mzph.cn/bicheng/81916.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ngx_http_realip_module 模块概述

一、使用场景 日志记录 记录真实客户端 IP 而非反向代理的 IP,有助于流量分析和安全审计。访问控制 基于真实 IP 实现防火墙规则(allow/deny)或限流,而非误将上游 IP 视为客户端。GeoIP、WAF、限速等功能 模块化的上游真实 IP 支…

实战5:个性化数字艺术生成与销售

盈利思路 数字艺术销售: 平台销售:将生成的数字艺术作品上传到像OpenSea、Foundation等NFT平台进行售卖。每一件独特的艺术品可以通过NFT技术保证其唯一性,吸引收藏家和投资者。 定价策略:根据作品的复杂度、创意性以及市场需求来…

游戏引擎学习第303天:尝试分开对Y轴和Z轴进行排序

成为我们自己的代码精灵α 所以现在应该可以正常使用了。不过,这两周我们没办法继续处理代码里的问题,而之前留在代码里的那个问题依然存在,没有人神奇地帮我们修复,这让人挺无奈的。其实我们都希望有个神奇的“代码仙子”&#…

InetAddress 类详解

InetAddress 类详解 一、核心作用 封装 IP 地址:同时支持 IPv4 和 IPv6 地址域名解析:将域名转换为 IP 地址(DNS 查询)地址验证:检查网络地址的有效性无构造方法:通过静态工厂方法获取实例 二、核心方法 …

spring cloud alibaba-Geteway详解

spring cloud alibaba-Gateway详解 Gateway介绍 在 Spring Cloud Alibaba 生态系统中,Gateway 是一个非常重要的组件,用于构建微服务架构中的网关服务。它基于 Spring Cloud Gateway 进行扩展和优化,提供了更强大的功能和更好的性能。 Gat…

iOS 直播技术及优化

iOS直播技术的实现和优化涉及多个技术环节,需结合协议选择、编解码方案、播放器技术及性能调优等多方面。 一、核心技术实现 协议选择与传输优化 HLS(HTTP Live Streaming):苹果官方推荐,基于HTTP分片传输&#xff0c…

目标检测135个前沿算法模型汇总(附源码)!

目标检测是计算机视觉核心方向之一,也是发论文的热门领域! 近来不仅YOLO算法迎来了新突破,迭代出YOLOv12!Mamba、大模型等新技术的发展,也给该领域注入了全新的力量,取得了诸多显著成果。比如性能飙升82.3…

期刊采编系统安装升级错误

我们以ojs系统为例: PHP Fatal error: Uncaught Error: Call to a member function getId() on null in /esci/data/html/classes/install/Upgrade.inc.php:1019 Stacktrace: #0 /esci/data/html/lib/pkp/classes/install/Installer.inc.php(415): Upgrade->con…

浅谈无服务器WebSocket的优势

实际上,一个实用的解决方案是将构建业务关键型实时平台的复杂性卸载到专门的云服务中。 完全托管的无服务器 WebSocket 解决方案为事件驱动的消息传递提供了基础结构;它使底层基础设施成为一种商品。客户端使用提供程序服务发送/接收低延迟消息,并专注于…

Python数据可视化高级实战之二——热力图绘制探究

目录 一、热力图的作用 二、热力图反映的信息类型 三、热力图的典型应用场景 1. 地球信息系统 (GIS) 2. 城市交通分析 3. 市场分析 4. 用户行为分析 5. 网络流量分析 6. 传染病传播分析 7. 社交媒体舆情分析 四、Python 绘制热力图的关键技术要点 1. 数据预处理 2. 颜色选择与渐…

配电网运行状态综合评估方法研究

1评估指标体系的构建 [1]冷华,童莹,李欣然,等.配电网运行状态综合评估方法研究[J].电力系统保护与控制,2017,45(01):53-59. 1.1评估范围 图1为配电系统组成示意图,其中A、B、C分别表示高、中、低压配电系统。高压配变(也称主变)将35kV或110kV的电压降到10kV&#…

Docker安装MinIO对象存储中间件

MinIO 是一个高性能、分布式的对象存储系统,兼容 Amazon S3 云存储服务协议,广泛应用于企业存储、大数据、机器学习和容器化应用等领域。以下是详细介绍: 核心特点 兼容 S3 API :全面兼容 Amazon S3 API,这意味着使用…

HTML回顾

html全称:HyperText Markup Language(超文本标记语言) 注重标签语义,而不是默认效果 规则 块级元素包括: marquee、div等 行内元素包括: span、input等 规则1:块级元素中能写:行内元素、块级元素(几乎什么都能写) 规则2:行级元素中能写:行内元素,但不能写:块…

JAVA Spring MVC+Mybatis Spring MVC的工作流程*,多表连查

目录 注解总结 将传送到客户端的数据转成json数据 **描述一下Spring MVC的工作流程** 1。属性赋值 BeanUtils.copyProperties(addUserDTO,user); 添加依赖: spring web、mybatis framework、mysql driver Controller和ResponseBody优化 直接改成RestControl…

H2数据库中一条insert语句到生成java对象到数据写入磁盘的完整步骤

H2 数据库将 SQL 语句转换为磁盘存储的全过程可以分为以下 8 个关键步骤,我们以 INSERT INTO users (id, name) VALUES (1, Alice) 为例详细说明: 1. SQL 解析与语法树生成 词法分析:拆分语句为 INSERT、INTO、users 等 Token语法分析&#…

重磅升级!Google Play商店改版上线

5 月 21 日消息,Android Headline 今天(5 月 21 日)发布博文,报道称在 2025 年 I/O 开发者大会上,谷歌宣布更新 Google Play 应用商店,在优化用户体验的同时,提升开发者收益。 本次更新中&…

Docker面试题(1)

什么是Docker 一个容器化平台 形式是容器 将你的应用程序及所有依赖项打包在一起 确保应用程序在任何环境中无缝运行 什么是Docker镜像 Docker镜像是Docker容器的源代码 用于创建容器 使用build命令创建镜像 什么是 Docker容器 包括应用程序及所有的依赖项 作为操作系统的独立进…

Ulisses Braga-Neto《模式识别和机器学习基础》

模式识别和机器学习基础 [专著] Fundamentals of pattern recognition and machine learning / (美)乌利塞斯布拉加-内托(Ulisses Braga-Neto)著 ; 潘巍[等]译 推荐这本书,作者有自己的见解,而且提供代码。问题是难度高,对于初学…

RabbitMQ的简介

三个概念 生产者:生产消息的服务消息代理:消息中间件,如RabbitMQ消费者:获取使用消息的服务 消息队列到达消费者的两种形式 队列(queue):点对点消息通信(point-to-point) 消息进入队…

自动切换剪贴板路径中反斜杠为正斜杠

有时候需要将我们常见的win全路径中反斜杠为正斜杠,每次用记事本,编辑替换非常麻烦,于是写了这个工具,能自动修改剪贴板中的数据,只需要运行一下即可。 实现效果,将类似于下面的路径: C:\User…