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.pswp.cn/bicheng/81916.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/81916.shtml
英文地址,請注明出處:http://en.pswp.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…