精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

面試官:請使用JS完成一個LRU緩存?

開發(fā) 前端
小伙伴們?nèi)绻⑦^ Leetcode 算法題,相信你一定遇到過 LRU 算法的題,那么 LRU 算法到底是一個怎樣的算法呢?今天我們就給大家好好講講,順便使用 JS 把它實現(xiàn)出來!

前言

LRU 緩存算法是一個非常經(jīng)典的算法,在很多面試中經(jīng)常問道,不僅僅包括前端面試。

1.什么是 LRU?

LRU 英文全稱是 Least Recently Used,英譯過來就是”最近最少使用“的意思。 它是頁面置換算法中的一種,我們先來看一段百度百科的解釋。

百度百科:

  • LRU 是一種常用的頁面置換算法,選擇最近最久未使用的頁面予以淘汰。該算法賦予每個頁面一個訪問字段,用來記錄一個頁面自上次被訪問以來所經(jīng)歷的時間 t,當(dāng)須淘汰一個頁面時,選擇現(xiàn)有頁面中其 t 值最大的,即最近最少使用的頁面予以淘汰。

百度百科解釋的比較窄,它這里只使用了頁面來舉例,我們通俗點來說就是:假如我們最近訪問了很多個頁面,內(nèi)存把我們最近訪問的頁面都緩存了起來,但是隨著時間推移,我們還在不停的訪問新頁面,這個時候為了減少內(nèi)存占用,我們有必要刪除一些頁面,而刪除哪些頁面呢?我們可以通過訪問頁面的時間來決定,或者說是一個標(biāo)準(zhǔn):在最近時間內(nèi),最久未訪問的頁面把它刪掉。

百度百科的解釋只是單純的解釋算法,而我們這里可以結(jié)合我們的前端和實際應(yīng)用場景來給大家解釋一下。

通俗的解釋:

  • 假如我們有一塊內(nèi)存,專門用來緩存我們最近發(fā)訪問的網(wǎng)頁,訪問一個新網(wǎng)頁,我們就會往內(nèi)存中添加一個網(wǎng)頁地址,隨著網(wǎng)頁的不斷增加,內(nèi)存存滿了,這個時候我們就需要考慮刪除一些網(wǎng)頁了。這個時候我們找到內(nèi)存中最早訪問的那個網(wǎng)頁地址,然后把它刪掉。
  • 這一整個過程就可以稱之為 LRU 算法。

雖然上面的解釋比較好懂了,但是我們還有很多地方?jīng)]有考慮到,比如如下幾點:

  • 當(dāng)我們訪問內(nèi)存中已經(jīng)存在了的網(wǎng)址,那么該網(wǎng)址是否需要更新在內(nèi)存中的存儲順序。
  • 當(dāng)我們內(nèi)存中還沒有數(shù)據(jù)的時候,是否需要執(zhí)行刪除操作。

最后我們在上一張圖,大家應(yīng)該就更容易理解了,如下圖:

上圖就很好的解釋了 LRU 算法在干嘛了,其實非常簡單,無非就是我們往內(nèi)存里面添加或者刪除元素的時候,遵循最近最少使用原則。

2.使用場景

LRU 算法使用的場景非常多,這里簡單舉幾個例子即可:

  • 我們操作系統(tǒng)底層的內(nèi)存管理,其中就包括有 LRU 算法
  • 我們常見的緩存服務(wù),比如 redis 等等
  • 比如瀏覽器的最近瀏覽記錄存儲,如下圖:

總之 LRU 算法的運用場景還是蠻多的,所以我們很有必要掌握它。

3.梳理實現(xiàn) LRU 思路

我們學(xué)習(xí)了 LRU 算法的基本概念和使用場景之后,那么我們就應(yīng)該考慮如何實現(xiàn)它了。要想實現(xiàn)一個算法,我們很有必要梳理一下思路,這樣才能讓我們更好更快的編寫出代碼。

首先我們來梳理一下 LRU 算法的特點。

特點分析:

  • 我們需要一塊有限的存儲空間,因為無限的化就沒必要使用 LRU 算發(fā)刪除數(shù)據(jù)了。
  • 我們這塊存儲空間里面存儲的數(shù)據(jù)需要是有序的,因為我們必須要順序來刪除數(shù)據(jù),所以可以考慮使用 Array、Map 數(shù)據(jù)結(jié)構(gòu)來存儲,不能使用 Object,因為它是無序的。
  • 我們能夠刪除或者添加以及獲取到這塊存儲空間中的指定數(shù)據(jù)。
  • 存儲空間存滿之后,在添加數(shù)據(jù)時,會自動刪除時間最久遠的那條數(shù)據(jù)。

實現(xiàn)需求:

  • 實現(xiàn)一個 LRUCache 類型,用來充當(dāng)存儲空間
  • 采用 Map 數(shù)據(jù)結(jié)構(gòu)存儲數(shù)據(jù),因為它的存取時間復(fù)雜度為 O(1),數(shù)組為 O(n)
  • 實現(xiàn) get 和 set 方法,用來獲取和添加數(shù)據(jù)
  • 我們的存儲空間有長度限制,所以無需提供刪除方法,存儲滿之后,自動刪除最久遠的那條數(shù)據(jù)
  • 當(dāng)使用 get 獲取數(shù)據(jù)后,該條數(shù)據(jù)需要更新到最前面

現(xiàn)在我們已經(jīng)把 LRU 算法的特點以及實現(xiàn)思路列了出來,那么接下來就然我們一起去實現(xiàn)它吧!

4.具體實現(xiàn)

首先我們定義一個 LRUCache 類,封裝所有的方法和變量。

代碼如下:

<script>
class LRUCache {
constructor(lenght) {
this.length = lenght; // 存儲長度
this.data = new Map(); // 存儲數(shù)據(jù)
}
// 存儲數(shù)據(jù),通過鍵值對的方式
set(key, value) { }
// 獲取數(shù)據(jù)
get(key) { }
}
const lruCache = new LRUCache(5);
</script>

上段代碼只是我們最簡單的一個架子,我們需要去實現(xiàn)具體的 get 和 set 方法。

代碼如下:

<script>
class LRUCache {
constructor(lenght) {
this.length = lenght; // 存儲長度
this.data = new Map(); // 存儲數(shù)據(jù)
}
// 存儲數(shù)據(jù),通過鍵值對的方式
set(key, value) {
const data = this.data;
if (data.has(key)) {
data.delete(key)
}
data.set(key, value);
// 如果超出了容量,則需要刪除最久的數(shù)據(jù)
if (data.size > this.length) {
const delKey = data.keys().next().value;
data.delete(delKey);
}
}
// 獲取數(shù)據(jù)
get(key) {
const data = this.data;
// 未找到
if (!data.has(key)) {
return null;
}
const value = data.get(key); // 獲取元素
data.delete(key); // 刪除元素
data.set(key, value); // 重新插入元素
}
}
const lruCache = new LRUCache(5);
</script>

上段代碼中實現(xiàn)實現(xiàn)了 get 和 set 方法,下面說一下這兩個方法的實現(xiàn)思路:

  • set 方法:往 map 里面添加新數(shù)據(jù),如果添加的數(shù)據(jù)存在了,則先刪除該條數(shù)據(jù),然后再添加。如果添加數(shù)據(jù)后超長了,則需要刪除最久遠的一條數(shù)據(jù)。data.keys().next().value 便是獲取最后一條數(shù)據(jù)的意思。
  • get 方法:首先從 map 對象中拿出該條數(shù)據(jù),然后刪除該條數(shù)據(jù),最后再重新插入該條數(shù)據(jù),確保將該條數(shù)據(jù)移動到最前面。

接下來我們使用一些測試用例來試試行不行。

存儲數(shù)據(jù) set:

lruCache.set('name', '小豬課堂');
lruCache.set('age', 22);
lruCache.set('sex', '男');
lruCache.set('height', 176);
lruCache.set('weight', '100');
console.log(lruCache);

輸出結(jié)果:

繼續(xù)插入數(shù)據(jù),此時會超長,代碼如下:

lruCache.set('grade', '10000');
console.log(lruCache);

輸出結(jié)果:

此時我們發(fā)現(xiàn)存儲時間最久的 name 已經(jīng)被移除了,新插入的數(shù)據(jù)變?yōu)榱俗钋懊娴囊粋€。

我們使用 get 獲取數(shù)據(jù),代碼如下:

lruCache.get('sex');
console.log(lruCache);

輸出結(jié)果:

我們發(fā)現(xiàn)此時 sex 字段已經(jīng)跑到最前面去了。

總結(jié)

LRU 算法其實邏輯非常的簡單,明白了原理之后實現(xiàn)起來非常的簡單。最主要的是我們需要使用什么數(shù)據(jù)結(jié)構(gòu)來存儲數(shù)據(jù),因為 map 的存取非常快,所以我們采用了它,當(dāng)然數(shù)組其實也可以實現(xiàn)的。還有一些小伙伴使用鏈表來實現(xiàn) LRU,這當(dāng)然也是可以的。

責(zé)任編輯:龐桂玉 來源: Web開發(fā)
相關(guān)推薦

2021-03-01 18:42:02

緩存LRU算法

2024-02-20 14:10:55

系統(tǒng)緩存冗余

2022-04-08 08:26:03

JavaHTTP請求

2021-09-28 13:42:55

Chrome Devwebsocket網(wǎng)絡(luò)協(xié)議

2025-10-20 04:00:00

2025-11-11 09:25:19

2022-02-07 20:18:29

Redis緩存裝飾

2024-04-09 08:39:16

本地緩存開發(fā)線程安全

2023-09-12 14:56:13

MyBatis緩存機制

2024-12-26 10:19:16

2021-05-19 08:17:35

秒殺場景高并發(fā)

2020-05-13 14:35:47

HashMap面試官Java

2023-07-31 08:26:09

2022-01-10 11:04:41

單鏈表面試編程

2020-06-22 07:47:46

提交面試官訂單

2024-01-19 14:03:59

Redis緩存系統(tǒng)Spring

2025-03-10 07:05:07

2024-03-12 10:44:42

2017-03-16 15:27:10

面試官測試技術(shù)

2025-09-19 09:57:46

點贊
收藏

51CTO技術(shù)棧公眾號

国产亚洲一区二区三区| 激情六月综合| 91精品国产手机| 欧美视频在线第一页| 天天摸夜夜添狠狠添婷婷| 肉肉av福利一精品导航| 欧美日本啪啪无遮挡网站| 特大黑人巨人吊xxxx| 国产日本久久| 午夜精品久久久久久久蜜桃app| 日本不卡高清视频一区| 国产成人精品亚洲精品色欲| 国产欧美一级| 麻豆一区二区在线观看| 丝袜美腿中文字幕| 久久久久亚洲精品中文字幕| 欧美视频国产精品| 欧美xxxx吸乳| bbbbbbbbbbb在线视频| 国产suv精品一区二区6| 国产精品久久久久福利| 亚欧洲精品在线视频| 色呦哟—国产精品| 亚洲嫩模很污视频| 69xxx免费视频| 99视频这里有精品| 色婷婷久久99综合精品jk白丝| 青青在线视频免费观看| 看女生喷水的网站在线观看| 久久久久久夜精品精品免费| 国产精品福利视频| 国产免费av观看| 毛片av一区二区| 国产精品爱啪在线线免费观看| 日本天堂网在线观看| 国产精品99久久久久久动医院| 亚洲图片制服诱惑| 玖草视频在线观看| 欧美男人操女人视频| 欧美成人精品1314www| 日韩在线一区视频| 四虎国产精品免费久久| 91久久精品午夜一区二区| aa在线免费观看| 国产亚洲成av人片在线观看| 亚洲一区二区三区四区中文字幕| 少妇熟女一区二区| 免费在线看a| 中文字幕一区二区不卡| 伊甸园精品99久久久久久| a天堂中文在线| 国产精品久久久久久久裸模| 日韩福利二区| 最新真实国产在线视频| 国产女人18毛片水真多成人如厕| 日产中文字幕在线精品一区| 国产一二三区在线| 国产清纯美女被跳蛋高潮一区二区久久w | 最近中文字幕日韩精品| av片在线免费看| 国产精品国产一区| 久久福利视频网| 欧美久久久久久久久久久久| 韩日在线一区| 97香蕉久久夜色精品国产| 91浏览器在线观看| 久久久久久夜| 国产欧美精品va在线观看| 在线观看免费中文字幕| 韩国午夜理伦三级不卡影院| 成人免费看片网站| 天堂av电影在线观看| 久久午夜羞羞影院免费观看| 日本精品一区二区三区高清 久久| 黄色小视频在线免费观看| 国产日韩欧美综合一区| 亚洲一区二区三区欧美| 午夜dj在线观看高清视频完整版| 亚洲成av人影院| 激情综合网婷婷| 日韩成人在线电影| 精品国产乱码久久久久久闺蜜| 偷偷色噜狠狠狠狠的777米奇| 免费精品国产的网站免费观看| 在线观看国产精品淫| 日韩在线观看视频一区二区| 亚洲美女色禁图| 国产精品成人一区二区| 国产成人三级一区二区在线观看一| 国产成人av资源| 欧美极品视频一区二区三区| 三区四区在线视频| 亚洲国产精品麻豆| 亚洲精品20p| 国产精品极品在线观看| 中文字幕不卡av| 日韩免费一二三区| 男男成人高潮片免费网站| 91精品国产91久久久久青草| 男人久久精品| 一区二区三区视频在线观看| 成人观看免费完整观看| 精品久久国产一区| 国产一区二区三区免费视频| 久久国产在线观看| 久久久成人网| 国产富婆一区二区三区| 成人精品一区二区三区校园激情| 亚洲一区二区视频在线| 天堂av2020| 一区二区三区四区在线看| 欧美日韩成人在线观看| 中国黄色一级视频| 97精品视频在线观看自产线路二| 黄色网址在线免费看| 欧美一级大黄| 亚洲激情视频网| 91aaa在线观看| 理论电影国产精品| 欧美午夜精品久久久久久蜜| 91超碰在线免费| 日韩一区二区三区高清免费看看| 人与嘼交av免费| 欧美亚洲免费| 国产精品一区二区三区免费| 成人免费视屏| 欧美久久久久中文字幕| 欧美黄色一级生活片| 99精品免费| 国产精品国产精品| 日韩激情av| 日韩精品一区二区三区视频播放| 多男操一女视频| 免费精品视频在线| 日韩欧美亚洲在线| 裤袜国产欧美精品一区| 日韩av在线不卡| 日韩av女优在线观看| 国产a级毛片一区| 老汉色影院首页| 偷拍自拍亚洲| 久久精品99无色码中文字幕| 中文字幕你懂的| 中文成人综合网| 九九热免费精品视频| 国内精品伊人久久久| 日本亚洲欧美三级| 国产一级免费在线观看| 欧美在线观看一区二区| 美国黑人一级大黄| 美女诱惑一区二区| 一区二区三区不卡在线| 亚洲国产伊人| 欧美日韩国产va另类| 国精产品乱码一区一区三区四区| 亚洲一区二区欧美日韩 | 91麻豆视频网站| 久久久久久久激情| 国产一区二区区别| 国产精品自拍偷拍| 91高清在线观看视频| 精品少妇一区二区三区日产乱码| 久久久久久久黄色| 97超碰欧美中文字幕| 成熟老妇女视频| 欧美少妇xxxx| 91精品视频在线看| 秋霞在线视频| 亚洲男人天堂手机在线| 怡红院男人的天堂| 亚洲精品福利视频网站| 青青草视频网站| 久久激情一区| 自拍另类欧美| 欧美xxxx在线| 国产欧美精品va在线观看| 伊人精品影院| 亚洲精品xxx| 探花国产精品一区二区| 亚洲欧美成aⅴ人在线观看 | 国产欧美综合在线| 国产性生活一级片| 国产精品久久久久久模特| 天天综合色天天综合色hd| 亚洲午夜精品| 国产激情999| a在线免费观看| 亚洲另类激情图| 国内精品久久久久久久久久久| 欧美日韩国产在线看| 综合 欧美 亚洲日本| 高清国产午夜精品久久久久久| 任你操这里只有精品| 亚洲欧洲中文字幕| 欧美成人在线免费观看| 91成人精品观看| 欧美亚洲国产视频| 老司机在线看片网av| 精品视频久久久久久久| 99国产在线播放| 色婷婷国产精品| 免费毛片在线播放免费| 日本一区免费视频| 亚洲欧美日韩偷拍| 激情欧美一区二区| 欧美激情成人网| 怡红院精品视频在线观看极品| 视频一区视频二区视频三区视频四区国产 | 欧美性生交大片免费| 人妻人人澡人人添人人爽| 久久久99免费| 国产黑丝在线观看| 国产一区二区三区四| 亚洲精品一二三四五区| 一区二区三区国产盗摄| 国产午夜精品视频一区二区三区| 欧美久久精品一级c片| 成人av资源| av日韩在线免费观看| 国产精品情侣自拍| 欧美电影免费观看网站| 91av视频在线免费观看| 免费在线看电影| 超碰91人人草人人干| 91伦理视频在线观看| 亚洲天堂av网| 四虎精品成人影院观看地址| 精品福利一二区| www.激情五月.com| 制服丝袜在线91| 一级片视频免费| 欧美午夜精品一区| 亚洲天堂五月天| 一本大道av伊人久久综合| 日本天堂在线视频| 性做久久久久久久免费看| 国产女人被狂躁到高潮小说| 国产精品国产三级国产aⅴ入口| 一区二区伦理片| 中文字幕免费不卡在线| 国产精品www爽爽爽| 国产色产综合色产在线视频| 亚欧洲乱码视频| 国产香蕉久久精品综合网| 国产熟妇搡bbbb搡bbbb| 国产午夜一区二区三区| 久久美女免费视频| 日本一区二区综合亚洲| 免费视频91蜜桃| 国产精品美女久久福利网站 | 亚洲成人激情av| 麻豆一区二区三区精品视频| 亚洲一区二区三区在线看| 国产精品第一页在线观看| 午夜伊人狠狠久久| 中文字幕亚洲精品在线| 色综合天天在线| 国产精华7777777| 欧美日韩午夜在线视频| 国产裸体永久免费无遮挡| 日韩欧美在线1卡| 欧美一级特黄aaaaaa| 亚洲欧美日韩网| 91精品专区| 欧美巨乳在线观看| 欧美激情网站| 国产精品久久久久高潮| 精品亚洲a∨一区二区三区18| 成人欧美一区二区三区视频| 秋霞影视一区二区三区| 四虎永久国产精品| 一区二区三区国产精华| 999在线观看视频| 快she精品国产999| 激情文学亚洲色图| 成人污污视频在线观看| b站大片免费直播| 国产精品久久久久久久午夜片| 麻豆疯狂做受xxxx高潮视频| 欧美视频裸体精品| 97在线视频人妻无码| 精品成人免费观看| 丁香在线视频| 欧美精品成人在线| 亚洲第一会所001| 97伦理在线四区| 精品国产一级毛片| 日韩一级免费看| 日本不卡123| 色哟哟无码精品一区二区三区| 国产欧美日韩在线观看| 欧美日韩一级在线观看| 91福利国产精品| 亚洲精品一级片| 中文字幕亚洲激情| 黄色在线免费观看网站| 国产在线视频2019最新视频| 任你弄精品视频免费观看| 一区二区在线观看网站| 国产一区二区三区久久| 亚洲妇女无套内射精| 国产欧美一区二区三区鸳鸯浴| 黄色小视频在线免费看| 欧美日本一区二区在线观看| 凸凹人妻人人澡人人添| 久久夜精品香蕉| 51一区二区三区| 精品乱码一区二区三区| 综合精品久久| 久久国产激情视频| 久久亚洲一区二区三区四区| 欧美成人三级视频| 欧美日韩一区二区三区在线| 青青色在线视频| 久久久久五月天| 老司机亚洲精品一区二区| 日韩精品另类天天更新| 国产一级一区二区| 亚洲成年人av| 亚洲精品一二三四区| 亚洲一级黄色大片| 国产午夜精品一区理论片飘花| 91九色在线播放| 国产精品一区二区三区观看| 欧美1区3d| 午夜免费视频网站| 日韩一区在线播放| 伊人成人在线观看| 国产一区二区激情| 日韩精品99| 久久久精品动漫| 99亚洲伊人久久精品影院红桃| 韩国av中国字幕| 一区二区三区**美女毛片| 国产乱子伦精品无码码专区| 中文字幕无线精品亚洲乱码一区| 欧美黄色三级| 午夜精品亚洲一区二区三区嫩草 | 91精品国产91久久久久青草| 亚洲精品极品少妇16p| 夜夜夜夜夜夜操| 日韩理论片网站| 国产人妖在线播放| 久久成人这里只有精品| 国产色99精品9i| 欧美黑人在线观看| 国产成人在线观看免费网站| 天天干中文字幕| 亚洲大胆美女视频| 色综合亚洲图丝熟| 欧美成ee人免费视频| 天堂蜜桃91精品| 2019男人天堂| 717成人午夜免费福利电影| 成年人网站在线| 国产另类自拍| 国产日韩高清一区二区三区在线| 国产精品伦子伦| 色视频成人在线观看免| 成人影院免费观看| 成人国产精品免费视频| 欧美在线日韩| 182在线视频| 在线视频国产一区| 欧美成年黄网站色视频| 5g国产欧美日韩视频| 1024成人| 亚洲а∨天堂久久精品2021| 5月丁香婷婷综合| a级片在线免费| 日韩精品一区二区三区丰满| 久久国产视频网| 精品一级少妇久久久久久久| 日韩理论片久久| 欧美天堂一区二区| 奇米777四色影视在线看| 91麻豆精品秘密| 国产精品久久久久久久久毛片| 欧美国产日韩二区| 蜜臀久久99精品久久一区二区| 亚洲天堂2018av| 婷婷六月综合亚洲| 五月天婷婷在线视频| 国产91亚洲精品一区二区三区| 久久精品人人做人人爽电影蜜月| 性生交大片免费全黄| 亚洲激情 国产| 在线成人免费| 国产xxxxx在线观看| 成人免费在线播放视频| 天堂在线观看视频| 国产免费亚洲高清| 国产视频一区免费看| 国产人与禽zoz0性伦| 亚洲高清不卡av| 亚洲青青一区| 116极品美女午夜一级| 亚洲六月丁香色婷婷综合久久| 日韩电影在线观看完整版| 91在线网站视频|