位置: IT常识 - 正文

前端面试中经常提到的LRU缓存策略详解(前端面试经常被问的问题)

编辑:rootadmin
前端面试中经常提到的LRU缓存策略详解

推荐整理分享前端面试中经常提到的LRU缓存策略详解(前端面试经常被问的问题),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:前端面试中经常问的问题,前端面试项目中遇到过哪些难题,前端面试项目中遇到过哪些难题,前端面试工作中遇到问题怎么解决,前端面试工作中遇到问题怎么解决,前端面试中经常说的问题,前端面试中经常被问到的问题,前端面试中经常被问到的问题,内容如对您有帮助,希望把文章链接给更多的朋友!

🐱 个人主页:不叫猫先生 🙋‍♂️ 作者简介:2022年度博客之星前端领域TOP 2,前端领域优质作者、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀! 💫优质专栏:vue3从入门到精通、TypeScript从入门到实践 📢 资料领取:前端进阶资料以及文中源码可以找我免费领取 🔥 前端学习交流:博主建立了一个前端交流群,汇集了各路大神,一起交流学习,期待你的加入!(文末有我wx或者私信)

目录LRU一、为什么要使用Map是来定义容器二、应用场景三、代码实现LRU

LRU(Least Recently Used)最近最少使用缓存策略,根据历史数据记录,当数据超过了限定空间的时候对数据清理,清理的原则是对很久没有使用到过的数据进行清除。

一、为什么要使用Map是来定义容器

Map在保存数据时会按照记住存储数据时候的顺序,这样存储的数据是有序列的,并且会维护键值对的插入顺序,Map存储数据的键值可以是任意类型(对象或者基本类型都可),Map提供了get、set、delete方法十分方便;而Object的话是无序,当然也可以使用Array。另外Map的算法复杂度是O(1),处理数据更迅速。

二、应用场景redis浏览器浏览记录vue中内置组件keep-alive三、代码实现前端面试中经常提到的LRU缓存策略详解(前端面试经常被问的问题)

实现的大概思路如下:

创建一个LRUCache类定义容器以及容器的容量定义set方面,设置容器中的数据定义get方法,获取容器中的数据class LRUCache { constructor(length) { // 定义容器容量 this.length = length; // 创建数据容器,生成一个空映射 this.map = new Map(); } // 设置key值 set(key, value) { } // 获取key值 get(key) {}}

接下来就是对set方法和get方法的处理:

set

当容器长度不超过设定的长度:设置key值,但是为了达到缓存策略的效果,需要我们先删除数据,后添加到容器的最后一条当容器长度超过设定的长度:先删除掉容器中的第一条数据

get

先获取数据值,然后删除该条数据,再设置数据到最后class LRUCache { constructor(length) { // 定义容器容量 this.length = length; // 定义数据容器 this.map = new Map(); } // 设置key值 set(key, value) { // 如果容器容量超过设定的容量 if (this.map.size >= this.length) { // 等价于:let firstKey = this.map.keys()[0] //map.keys().next()查询容器中第一条数据的key值 //keys()会返回一个迭代器对象,包含了实力对象中的每一个key值 let firstKey = this.map.keys().next().value; //删除容器中第一条数据 this.map.delete(firstKey); } // 容器中存在key就先删除掉 if (this.map.has(key)) { this.map.delete(key); } // 删除后重新加入该条数据 this.map.set(key, value); } // 获取key值 get(key) { // 获取key值不存在返回null if (!this.map.has(key)) { return null; } // 获取key值 let value = this.map.get(key); //删除容器中的该条数据 this.map.delete(key); //重新把该条数据添加到容器中 this.map.set(key, value); return value }}// 创建实例对象并设置容器大小const lruCache = new LRUCache(5)

添加6条数据

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条数据并按顺序排列,打印出来只剩5条数据,添加的第一条(‘name’, ‘zhangsan’)被删除了。

然后获取class的值,发现key为class的这条数据跑最后了。因为在get时候先delete后set了。

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

本文链接地址:https://www.jiuchutong.com/zhishi/299351.html 转载请保留说明!

上一篇:vue - vue使用echarts实现中国地图和点击省份进行查看(vue中的echarts)

下一篇:vue3.2 基础及常用方法(vue3.0用法)

  • 打印机的使用方法(打印机的使用方法)(打印机的使用方法图解视频)

    打印机的使用方法(打印机的使用方法)(打印机的使用方法图解视频)

  • k40s是什么指纹解锁(k40p指纹)

    k40s是什么指纹解锁(k40p指纹)

  • 行程码怎么添加家人(行程码怎么添加家庭成员)

    行程码怎么添加家人(行程码怎么添加家庭成员)

  • oppoa92s手机什么时候上市(oppoa92s处理器)

    oppoa92s手机什么时候上市(oppoa92s处理器)

  • 微信拉黑后什么样子(微信拉黑后什么效果)

    微信拉黑后什么样子(微信拉黑后什么效果)

  • 苹果手机id注册过多怎么办(苹果手机id注册电子邮件怎么填写)

    苹果手机id注册过多怎么办(苹果手机id注册电子邮件怎么填写)

  • 抖音点关注有什么作用(抖音点关注有什么用,挣钱吗)

    抖音点关注有什么作用(抖音点关注有什么用,挣钱吗)

  • 计算机存储体系中存取速度最快的是(计算机存储体系结构图)

    计算机存储体系中存取速度最快的是(计算机存储体系结构图)

  • 怎么提高淘宝店铺访客量和流量(怎么提高淘宝店铺转化率)

    怎么提高淘宝店铺访客量和流量(怎么提高淘宝店铺转化率)

  • 快手昵称怎么改不了,总提示该用户已被注册(快手昵称怎么改不了,说已被认证)

    快手昵称怎么改不了,总提示该用户已被注册(快手昵称怎么改不了,说已被认证)

  • dvi线18针和24针能混用吗(dvi线18针和24针会影响电脑速度吗)

    dvi线18针和24针能混用吗(dvi线18针和24针会影响电脑速度吗)

  • ip地址分为几类(查询网址域名ip地址)

    ip地址分为几类(查询网址域名ip地址)

  • 金立s10怎么设置双卡使用(金立s10怎么设置返回键图标)

    金立s10怎么设置双卡使用(金立s10怎么设置返回键图标)

  • 拯救者键盘灯怎么换色(拯救者键盘灯怎么开变色)

    拯救者键盘灯怎么换色(拯救者键盘灯怎么开变色)

  • 苹果录屏自动中断(苹果录屏老是自动结束)

    苹果录屏自动中断(苹果录屏老是自动结束)

  • 快手怎么看直播间人数(快手怎么看直播动态)

    快手怎么看直播间人数(快手怎么看直播动态)

  • 华为耳机孔在哪(华为耳机孔在哪nova7图片)

    华为耳机孔在哪(华为耳机孔在哪nova7图片)

  • 华为wifi设置(华为wifi设置在哪里找)

    华为wifi设置(华为wifi设置在哪里找)

  • opporenz是什么处理器(opporeno是什么手机)

    opporenz是什么处理器(opporeno是什么手机)

  • 怎么把好友从微信黑名单拉出来(怎么把好友从微信黑名单里拉出来?)

    怎么把好友从微信黑名单拉出来(怎么把好友从微信黑名单里拉出来?)

  • 春天里的一只雄性开普梅莺 (© JZHunt/Getty Images Plus)(春天里的____作文)

    春天里的一只雄性开普梅莺 (© JZHunt/Getty Images Plus)(春天里的____作文)

  • 加拿大恶地里石窟上方的银河,加拿大亚伯达省德拉姆黑勒 (© Felis Images/Minden Pictures)(加拿大巨石)

    加拿大恶地里石窟上方的银河,加拿大亚伯达省德拉姆黑勒 (© Felis Images/Minden Pictures)(加拿大巨石)

  • python怎么使用md5加密解密(md5 python3)

    python怎么使用md5加密解密(md5 python3)

  • 工程预付款的支付要求
  • 专用发票只能公对公吗
  • 烟丝是消费税的征收范围
  • 其他综合收益何时转投资收益
  • 房屋租赁备案要准备什么资料
  • 去新成立的公司
  • 管道运输是什么和什么合二为一
  • 电子商票贴现具备的条件
  • 材料成本差异怎么理解
  • 赔偿金要交增值税吗
  • 卷式发票有税率吗
  • 增值税专票盖章盖在哪里
  • 建筑业开票内容
  • 环保税是甲方交的吗
  • 抵扣发票勾选到哪个科目
  • 怎么查企业的增值税纳税额
  • 小规模纳税人代理销售税率是多少
  • 生育津贴支付方式
  • ios14 举报短信
  • 华为mate pro翻转静音
  • 应交税金年末
  • Laravel 5.4中migrate报错: Specified key was too long error的解决
  • 无法打开exe程序
  • 价外费用分录
  • php read
  • 在途物资属于什么科目借贷方向
  • 增值税发票怎么抵税
  • 事业单位在建工程会计账务处理
  • 公司代扣税
  • 哥德堡的港口
  • 莱辛巴赫瀑布在瑞士哪里
  • php数据库分页是怎么实现的
  • 新手学web前端开发
  • php怎么上传图片并保存到数据库
  • 汽车租赁业务是否属于租赁服务
  • 固定资产折旧应计入什么费用
  • 利润表中本期数
  • 增值税发票完税证明图片
  • 企业所得税汇算清缴扣除标准2023
  • 上个月的留底税这个使用,会计分录
  • 建筑行业预缴个税怎么算
  • 分公司非独立核算企业所得税处理
  • mongodb使用教程
  • 核定扣除投入产品怎么算
  • 知道实发工资怎么算应发工资计算器
  • 企业税金及附加包括什么
  • 金蝶可以自动结转增值税吗
  • 小规模企业购入原材料会计分录
  • 一年内到期的非流动负债计算公式
  • 支付员工经济补偿金会计处理方式
  • 固定资产收购方案案例
  • 固定资产累计折旧会计科目
  • 应收票据的分录怎么做
  • 税控盘费用进什么科目
  • 12月收入1月份开发票怎么报企业所得税
  • 什么是企业管理的基础工作
  • 供应商销售折让怎么入账
  • 支票的使用流程图
  • 非营利组织会计科目账务处理
  • 简单介绍清明上河图
  • mysql5.7分区表
  • win10系统jdk环境变量
  • linux系统中安装web服务
  • windows勒索病毒
  • 怎样下载电子书免费的
  • 蓝屏错误疑难解答win7
  • linux useradd -m
  • javascript entries
  • android 音频焦点丢失 媒体按键
  • cmd运行指令闪黑框
  • eclipse awt
  • bootstrap响应式工具使用详解
  • jquery放在head还是body
  • jquery 设置checked
  • javascript entries
  • shell for遍历
  • python写出来的程序怎么用
  • 销售黄金饰品
  • 阿尔及利亚关税起征点查询
  • 潍坊特殊工种退休公示名单九月
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设