精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

人妻少妇精品一区二区三区| 日韩经典第一页| 欧美日韩在线播放一区二区| 不卡av电影在线| 婷婷综合激情| 精品久久久久久无| 波多野结衣家庭教师视频| 黄网在线观看| 国产精品综合| 日日噜噜噜夜夜爽亚洲精品| 国产精品日日摸夜夜爽| 成人勉费视频| 国产精品美女久久久久高潮| 国产精品一区二| 中文字幕在线播放日韩| 欧美特黄一区| 国产一区二区欧美日韩| 日本人添下边视频免费| 久久久免费人体| 一区二区三区四区亚洲| 涩涩涩999| 五月激情婷婷综合| 亚洲综合小说| 中文在线资源观看视频网站免费不卡| 精品伦一区二区三区| 国产精品无码久久久久| 岛国av一区二区在线在线观看| 日韩久久精品一区二区三区| 熟妇人妻中文av无码| 日韩av网站免费在线| 18一19gay欧美视频网站| 男人在线观看视频| 日韩激情图片| 亚洲国产精品人人爽夜夜爽| 亚洲一级片免费观看| 日韩三区免费| 欧美午夜激情在线| 国产爆乳无码一区二区麻豆| 91免费在线| 国产三级欧美三级日产三级99| 国产日韩精品推荐| 丰满肉肉bbwwbbww| 国产一区二区三区四区五区美女| 欧美在线一区二区三区四| 日本三级网站在线观看| 欧美一区二区三区久久精品| 久久精品在线播放| 最新日韩免费视频| 93在线视频精品免费观看| 欧美va亚洲va国产综合| 久久无码人妻一区二区三区| av日韩一区| 亚洲国产欧美在线人成| 青青草免费在线视频观看| 97超碰人人在线| 欧美精彩视频一区二区三区| 日韩精品第一页| 成人在线免费观看| 国产精品久久毛片| 国产av不卡一区二区| 成人免费网站在线观看视频| 亚洲视频 欧洲视频| 日韩中文在线字幕| 91美女精品| 午夜电影一区二区| 国产欧美日韩网站| 亚洲少妇视频| 色先锋久久av资源部| 成人在线观看a| 久九九久频精品短视频| 欧洲一区在线电影| 激情五月亚洲色图| 深夜福利亚洲| 欧美一区二区精品久久911| 国产精品中文久久久久久| 香蕉免费一区二区三区在线观看| 亚洲精品在线免费播放| 在线观看国产网站| 欧美精选视频在线观看| 色七七影院综合| 久久一级免费视频| 欧美激情视频一区二区三区在线播放 | 亚洲欧美专区| 69精品人人人人| 香蕉视频xxxx| 欧美激情网址| 色爱精品视频一区| 印度午夜性春猛xxx交| 2023国产精品久久久精品双| 久久久亚洲欧洲日产国码aⅴ| 制服.丝袜.亚洲.中文.综合懂色| 久久精品中文| 91在线高清免费观看| 99久久精品日本一区二区免费| 风间由美性色一区二区三区| 蜜桃91精品入口| eeuss影院www在线播放| 亚洲一区二区在线视频| 精品人妻一区二区三区四区在线| 欧美91在线|欧美| 日韩精品专区在线| 成人激情五月天| 欧美精品三级| 国产精品久久久| 黄色三级网站在线观看| 91九色在线看| 一区二区三区精密机械公司| 久久99久久久久久| 国产成人精品一区二三区在线观看| 欧美性xxxxx极品| 九九九九九国产| 日本久久成人网| 日韩在线免费av| 二区视频在线观看| 激情欧美一区二区| 久久手机视频| caoporm免费视频在线| 色诱亚洲精品久久久久久| 日本网站在线看| 国产一区二区在线| 久久久女人电视剧免费播放下载| 又色又爽又黄无遮挡的免费视频| 久久精品久久99精品久久| 九色一区二区| 国产色在线观看| 欧美亚洲高清一区| 熟妇高潮精品一区二区三区| 欧美va久久久噜噜噜久久| 蜜臀久久99精品久久久无需会员| 免费av中文字幕| 91欧美激情一区二区三区成人| 亚洲欧美日韩不卡| 国产精品专区免费| 亚洲福利视频久久| 久久久久久久九九九九| 国产一区二区精品久久99| 亚洲视频精品一区| 中文字幕在线免费观看视频| 亚洲高清久久久久久| 久久久久无码精品国产| 国产精品一二三四| 神马影院一区二区| 天堂а√在线最新版中文在线| 亚洲精品一区二区精华| 国产在线一区视频| 丁香婷婷深情五月亚洲| 国产手机视频在线观看| 99tv成人影院| 深夜福利一区二区| 亚洲在线精品视频| 中文字幕一区二区三区蜜月| 日韩欧美xxxx| 精品国产乱码| 国产精品三级久久久久久电影| 粉嫩av在线播放| 欧美午夜精品理论片a级按摩| 欧美熟妇精品一区二区| 激情欧美日韩一区| 国产欧美一区二区视频| 天堂网在线最新版www中文网| 亚洲免费电影一区| 亚洲午夜18毛片在线看| 国产色综合一区| 最新中文字幕免费视频| 欧美艳星介绍134位艳星| 国产精品久久久久久久一区探花| 成人免费在线电影| 岛国精品视频在线播放| 国产精品高清无码在线观看| 久久久蜜桃一区二区人| 日韩在线第一区| av中文在线资源库| 亚洲毛片在线免费观看| 日韩久久中文字幕| 91偷拍与自偷拍精品| 欧美 激情 在线| 国产电影一区二区在线观看| 999精品视频一区二区三区| 在线中文字幕视频观看| 亚洲国产精品久久久久秋霞不卡| www.久久精品视频| 国产精品传媒视频| 国产成人精品一区二区三区在线观看| 亚洲91视频| 成人黄色午夜影院| 国产高清自产拍av在线| 一本色道久久88亚洲综合88| 99久久一区二区| 婷婷国产v国产偷v亚洲高清| 欧美激情视频二区| 国产成人精品一区二| 午夜精品久久久内射近拍高清| 久久精品国产www456c0m| 国产精品欧美日韩| av2020不卡| 播播国产欧美激情| 视频三区在线观看| 3atv在线一区二区三区| 日本免费在线播放| 国产精品理论片在线观看| 国产a级黄色片| 精品在线你懂的| 国产免费毛卡片| 亚洲国产不卡| 日本在线免费观看一区| 97青娱国产盛宴精品视频| 国产精品黄色av| 第四色日韩影片| 日韩在线免费观看视频| 熟妇人妻中文av无码| 欧美二区在线观看| 成人h动漫精品一区二区下载| 一区二区三区在线视频观看58| 欧美18—19性高清hd4k| 成人精品视频一区二区三区| 黄色片视频在线| 男人的天堂成人在线| 久久久99精品视频| 欧美3p视频| 天堂社区 天堂综合网 天堂资源最新版| 亚洲专区**| 成人观看高清在线观看免费| 吞精囗交69激情欧美| 午夜精品在线观看| 黄色网址免费在线观看| 日韩风俗一区 二区| 性生活三级视频| 欧美男生操女生| 中文字幕日本视频| 日本韩国一区二区三区视频| a v视频在线观看| 亚洲狠狠爱一区二区三区| 成人一级片免费看| 国产婷婷色一区二区三区四区| 性久久久久久久久久久| 国产精品亚洲综合一区在线观看| 国产探花在线看| 国产欧美日韩综合一区在线播放| 国产精品无码免费专区午夜| 欧美日韩一区二区高清| 91麻豆天美传媒在线| 欧美精品色图| 影音欧美亚洲| 国产精品久久久久久| 亚洲视频电影| 久久93精品国产91久久综合| 免费电影一区| 国产99精品| 色综合久久av| 国产精品久久久久久久免费观看| 亚洲一区精彩视频| 水蜜桃久久夜色精品一区| 久久亚洲精品欧美| 先锋影音国产精品| 日本午夜精品一区二区三区| 久久91麻豆精品一区| 日韩欧美一区二区三区四区五区 | 国产精品视频500部| 国产亚洲成av人片在线观黄桃| 国产精品久久久久久久小唯西川| 动漫av一区| 韩国成人一区| 一本色道久久综合亚洲精品酒店| 日韩电影免费观看在| 欧美综合另类| 日韩精品无码一区二区三区| 99久久婷婷这里只有精品| 老司机午夜免费福利视频| 欧美1级日本1级| 无码人妻精品一区二区三区在线| 亚洲欧美日韩综合国产aⅴ| 在线视频日韩一区| 男女性色大片免费观看一区二区 | 久久这里只有精品23| 亚欧成人精品| 欧美精品第三页| 国产尤物一区二区在线 | 日本一区二区三区国色天香| 国产精品视频一区二区在线观看| 一区二区三区成人| 成人毛片在线播放| 欧美巨大另类极品videosbest| 精品国产伦一区二区三区| 亚洲国产欧美在线成人app | 亚洲AV无码一区二区三区少妇| 亚洲国产精品国自产拍av秋霞| 精品三级久久久久久久电影聊斋| 在线观看不卡av| 国产精品一卡二卡三卡 | 久久天堂影院| 超碰在线97av| 日韩av网址大全| av动漫免费观看| 亚洲私人影院| 亚洲福利精品视频| www.欧美日韩国产在线| 国产白袜脚足j棉袜在线观看| 久久蜜臀中文字幕| 欧美成人免费看| 91国产精品成人| 狠狠综合久久av一区二区| 国产一区二区动漫| 三级网站视频在在线播放| 欧美综合激情网| 久久久久亚洲精品中文字幕| 日韩精品久久久| 亚洲欧洲综合| 不卡中文字幕在线观看| 久久久久久久网| av资源吧首页| 欧美色区777第一页| 日夜干在线视频| 欧美黄色免费网站| 欧美v亚洲v综合v国产v仙踪林| 国产一区二区高清视频| 欧美在线亚洲综合一区| 天天干在线影院| 久久精品夜色噜噜亚洲aⅴ| 国产极品在线播放| 日韩欧美国产一区二区在线播放| 国产精品久久一区二区三区不卡| 久久久久久网址| 国产精品xxx| 蜜桃传媒视频麻豆第一区免费观看| 在线一区电影| 蜜臀久久99精品久久久酒店新书| 大白屁股一区二区视频| 国产av自拍一区| 色综合天天综合网国产成人综合天| www.污视频| 欧美大尺度激情区在线播放| 亚洲精品66| 欧洲一区二区在线观看| 亚洲综合精品四区| 中文字幕无码人妻少妇免费| 亚洲成人在线观看视频| 亚洲国产欧美另类| 久久久久久久久久久网站| 久久丁香四色| 亚洲成人自拍| 老鸭窝91久久精品色噜噜导演| 国内精品免费视频| 亚洲综合激情小说| www.成人免费视频| 久国内精品在线| 国产精品三p一区二区| 国产亚洲黄色片| av不卡免费电影| 五月婷婷视频在线| 亚洲精品久久久久久久久久久| 国产丝袜在线观看视频| 国产无套精品一区二区| 国产精品videosex极品| 亚洲天堂2024| 色先锋久久av资源部| 免费在线观看成人av| 亚洲精选91| 4438x亚洲最大成人网| 日本一级淫片色费放| 欧美色大人视频| 久久久久久香蕉| 国产亚洲1区2区3区| 最新在线中文字幕| 亚洲欧美日韩中文视频| 3d欧美精品动漫xxxx无尽| 亚洲国产精品一区在线观看不卡| 久久欧美肥婆一二区| 青青青视频在线播放| 精品婷婷伊人一区三区三| 国产一区精品| 国产在线视频91| 好吊日精品视频| 看全色黄大色黄女片18| 日韩欧美国产成人| 亚洲欧美视频一区二区| 91福利入口| 欧美aaaa视频| 五月天丁香社区| 色婷婷狠狠综合| 欧美黄色激情| 国产精品自拍首页| 日韩成人伦理电影在线观看| 丁香激情五月少妇| 欧美猛男gaygay网站| 男人资源在线播放| 国产99在线免费| 日韩精品电影一区亚洲| 欧美精品久久久久久久久46p| 欧美精品一区二区三区久久久| 自拍偷自拍亚洲精品被多人伦好爽 | 亚洲av无码一区二区三区网址| 欧美色窝79yyyycom| 中文字幕中文字幕在线中高清免费版| 国产精品美女诱惑| 欧美在线你懂得| 国产黄网站在线观看| 成人av免费在线看| 日韩不卡一二三区| 欧美日韩精品一区二区三区视频播放 | 人妻av中文系列|