国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

前端面試中經(jīng)常提到的LRU緩存策略詳解

這篇具有很好參考價值的文章主要介紹了前端面試中經(jīng)常提到的LRU緩存策略詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

?? 個人主頁:不叫貓先生
???♂? 作者簡介:2022年度博客之星前端領域TOP 2,前端領域優(yōu)質作者、阿里云專家博主,專注于前端各領域技術,共同學習共同進步,一起加油呀!
??優(yōu)質專欄:vue3從入門到精通、TypeScript從入門到實踐
?? 資料領取:前端進階資料以及文中源碼可以找我免費領取
?? 前端學習交流:博主建立了一個前端交流群,匯集了各路大神,一起交流學習,期待你的加入!(文末有我wx或者私信)

LRU

LRU(Least Recently Used)最近最少使用緩存策略,根據(jù)歷史數(shù)據(jù)記錄,當數(shù)據(jù)超過了限定空間的時候對數(shù)據(jù)清理,清理的原則是對很久沒有使用到過的數(shù)據(jù)進行清除

一、為什么要使用Map是來定義容器

Map在保存數(shù)據(jù)時會按照記住存儲數(shù)據(jù)時候的順序,這樣存儲的數(shù)據(jù)是有序列的,并且會維護鍵值對的插入順序,Map存儲數(shù)據(jù)的鍵值可以是任意類型(對象或者基本類型都可),Map提供了get、set、delete方法十分方便;而Object的話是無序,當然也可以使用Array。另外Map的算法復雜度是O(1),處理數(shù)據(jù)更迅速。

二、應用場景

  • redis
  • 瀏覽器瀏覽記錄
  • vue中內置組件keep-alive

三、代碼實現(xiàn)

實現(xiàn)的大概思路如下:

  • 創(chuàng)建一個LRUCache類
  • 定義容器以及容器的容量
  • 定義set方面,設置容器中的數(shù)據(jù)
  • 定義get方法,獲取容器中的數(shù)據(jù)
class LRUCache {
  constructor(length) {
    // 定義容器容量
    this.length = length;
    // 創(chuàng)建數(shù)據(jù)容器,生成一個空映射
    this.map = new Map();
  }
  // 設置key值
  set(key, value) {
  }
  // 獲取key值
  get(key) {}
}

接下來就是對set方法和get方法的處理:

  • set

    • 當容器長度不超過設定的長度:設置key值,但是為了達到緩存策略的效果,需要我們先刪除數(shù)據(jù),后添加到容器的最后一條
    • 當容器長度超過設定的長度:先刪除掉容器中的第一條數(shù)據(jù)
  • get

    • 先獲取數(shù)據(jù)值,然后刪除該條數(shù)據(jù),再設置數(shù)據(jù)到最后

class LRUCache {
  constructor(length) {
    // 定義容器容量
    this.length = length;
    // 定義數(shù)據(jù)容器
    this.map = new Map();
  }
  // 設置key值
  set(key, value) {
    // 如果容器容量超過設定的容量
    if (this.map.size >= this.length) {
      // 等價于:let firstKey = this.map.keys()[0]
      //map.keys().next()查詢容器中第一條數(shù)據(jù)的key值 
      //keys()會返回一個迭代器對象,包含了實力對象中的每一個key值
      let firstKey = this.map.keys().next().value;
      //刪除容器中第一條數(shù)據(jù)
      this.map.delete(firstKey);
    }

    // 容器中存在key就先刪除掉
    if (this.map.has(key)) {
      this.map.delete(key);
    }
    // 刪除后重新加入該條數(shù)據(jù)
    this.map.set(key, value);
  }
  // 獲取key值
  get(key) {
    // 獲取key值不存在返回null
    if (!this.map.has(key)) {
      return null;
    }
    // 獲取key值
    let value = this.map.get(key);
    //刪除容器中的該條數(shù)據(jù)
    this.map.delete(key);
    //重新把該條數(shù)據(jù)添加到容器中
    this.map.set(key, value);
    return value
  }
}
// 創(chuàng)建實例對象并設置容器大小
const lruCache = new LRUCache(5)

添加6條數(shù)據(jù)

        lruCache.set('name', 'zhangsan')
		lruCache.set('class', 'xinguan')
		lruCache.set('age', 19)
		lruCache.set('sex', '男')
		lruCache.set('occupation', '前端工程師')
		lruCache.set('year', '2023')
		console.log(lruCache, 'lruCache')

對lruCache添加了6條數(shù)據(jù)并按順序排列,打印出來只剩5條數(shù)據(jù),添加的第一條(‘name’, ‘zhangsan’)被刪除了。

前段lru緩存,前端需要了解的算法,前端,LRU緩存策略,javascript
然后獲取class的值,發(fā)現(xiàn)key為class的這條數(shù)據(jù)跑最后了。因為在get時候先delete后set了。

	console.log(lruCache.get('class'), 'lruCache')//xinguan

前段lru緩存,前端需要了解的算法,前端,LRU緩存策略,javascript文章來源地址http://www.zghlxwxcb.cn/news/detail-793928.html

到了這里,關于前端面試中經(jīng)常提到的LRU緩存策略詳解的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 面試題??迹篖RU緩存

    題目: 請你設計并實現(xiàn)一個滿足 LRU (最近最少使用) 緩存 約束的數(shù)據(jù)結構。 實現(xiàn) LRUCache 類: LRUCache(int capacity) 以 正整數(shù) 作為容量 capacity 初始化 LRU 緩存 int get(int key) 如果 key 存在于緩存中,則返回的值,否則返回 -1 。 void put(int key, int value) 如果 key 已經(jīng)

    2024年02月09日
    瀏覽(22)
  • 面試遇到算法題:實現(xiàn)LRU緩存

    面試遇到算法題:實現(xiàn)LRU緩存

    請你設計并實現(xiàn)一個滿足 LRU (最近最少使用) 緩存約束的數(shù)據(jù)結構。 這是一道大廠面試高頻出現(xiàn)的算法題,難度為??????,屬于中等,老鐵們來一起看看這個題該怎么解? 沒有廢話,翠花,上酸菜! 為了實現(xiàn)一個滿足 LRU (最近最少使用)緩存約束的數(shù)據(jù)結構,我們需

    2024年04月25日
    瀏覽(28)
  • 【前端方案】-表格排序列LRU緩存方案

    【前端方案】-表格排序列LRU緩存方案

    目標: 排序后的表格列,頁面刷新或者用戶重新登錄后,能夠保持之前的操作排序 完成效果: 解決方案: 利用localstorage對排序后的表格列屬性進行存儲,頁面刷新或者用戶重新進入該頁面時都先從localstorage中讀取 1.存儲方式:localstorage(key,value) key - 表格增加配置屬性

    2024年02月08日
    瀏覽(21)
  • 【前端方案】-表格排序列LRU緩存方案(二)

    【前端方案】-表格排序列LRU緩存方案(二)

    一. 目標 個人賬號的設置記憶功能-避免用戶每次登錄之后重新對表單字段做展示設置 二、存儲方案 輕量方案 結合localstorage低容量存儲(5M),根據(jù)LRU只存最近訪問的20至30張表格列配置數(shù)據(jù) 全量方案 大內存G級別,使用indexedDb進行存儲,有多少表格操作列數(shù)據(jù)就存多少, 結

    2024年02月08日
    瀏覽(20)
  • LeetCode講解篇之面試題 16.25. LRU 緩存

    設計和構建一個“最近最少使用”緩存,該緩存會刪除最近最少使用的項目。緩存應該從鍵映射到值(允許你插入和檢索特定鍵對應的值),并在初始化時指定最大容量。當緩存被填滿時,它應該刪除最近最少使用的項目。 它應該支持以下操作: 獲取數(shù)據(jù) get 和 寫入數(shù)據(jù) put 。

    2024年02月09日
    瀏覽(26)
  • 前端理解的HTTP緩存(作用、緩存策略、緩存控制機制、應用)

    前端理解的HTTP緩存(作用、緩存策略、緩存控制機制、應用)

    目錄 一、HTTP緩存有什么作用? 二、?瀏覽器的緩存策略有哪些? 1、強緩存(Expires、Cache-control) 2、協(xié)商緩存(Last-Modified、ETag) 3、緩存過程是什么? 三、瀏覽器緩存控制機制有哪些? 1、使用HTML Meta 標簽 2、使用HTTP頭信息控制緩存 四、哪些請求不能被緩存? 五、部署時

    2024年02月15日
    瀏覽(25)
  • 前端理解的HTTP緩存(緩存的過程/策略/控制機制/作用和應用)

    前端理解的HTTP緩存(緩存的過程/策略/控制機制/作用和應用)

    目錄 一、HTTP緩存有什么作用? 二、?瀏覽器的緩存策略有哪些? 1、強緩存(Expires、Cache-control) 2、協(xié)商緩存(Last-Modified、ETag) 3、緩存過程是什么? 三、瀏覽器緩存控制機制有哪些? 1、使用HTML Meta 標簽 2、使用HTTP頭信息控制緩存 四、哪些請求不能被緩存? 五、部署時

    2024年02月16日
    瀏覽(23)
  • 前端面試:【性能優(yōu)化】前端緩存、CDN、懶加載和預加載

    親愛的前端開發(fā)者,Web性能對用戶體驗至關重要。如果你想讓你的網(wǎng)站更快、更具吸引力,就需要關注前端性能優(yōu)化。在這篇文章中,我們將深入探討四個關鍵的性能優(yōu)化策略:前端緩存、CDN(內容分發(fā)網(wǎng)絡)、懶加載和預加載,以助你構建高性能的Web應用。 1. 前端緩存:優(yōu)

    2024年02月11日
    瀏覽(106)
  • 【面試題】如何理解 前端設計模式-測策略模式?

    前端面試題庫 ( 面試必備) ?? ? ? ? ? ? 推薦:★★★★★ 地址:前端面試題庫 【國慶頭像】- 國慶愛國 程序員頭像!總有一款適合你! 策略(Strategy)模式的定義:該模式定義了一 系列算法 ,并將每個算法封裝起來,使他們可以相互替換,且算法的變化不會影響使用

    2024年02月07日
    瀏覽(27)
  • 【數(shù)據(jù)結構】LRU緩存的簡單模擬實現(xiàn)(leetcode力扣146LRU緩存)

    【數(shù)據(jù)結構】LRU緩存的簡單模擬實現(xiàn)(leetcode力扣146LRU緩存)

    LRU是Least Recently Used的縮寫,意思是最近最少使用,它是一種Cache替換算法。 Cache的容量有限,因此當Cache的容量用完后,而又有新的內容需要添加進來時, 就需要挑選并舍棄原有的部分內容,從而騰出空間來放新內容。LRU Cache 的替換原則就是將最近最少使用的內容替換掉。

    2024年02月03日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包