redis面试常见题_redis 面试

redis面试常见题_redis 面试头条面试题:如何实现 LRU 原理?LRU 原理作为操作系统课程中的一个重要部分在很多地方会被考到(比如操作系统课的考试或者一些公司的面试题)。LRU 算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很

头条面试题:如何实现 LRU 原理?

LRU 原理作为操作系统课程中的一个重要部分在很多地方会被考到(比如操作系统课的考试或者一些公司的面试题)。

LRU 算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰。

这个算法的出发点在于:如果某个页面被访问了,则它可能马上还要访问。反之,如果很长时间未被访问,则它在最近一段时间也不会被访问。

该算法的性能接近于最佳算法,但实现起来较困难。因为要找出最近最久未使用的页面,必须为每一页设置相关记录项,用于记录页面的访问情况,并且每访问一次页面都须更新该信息。这将使系统的开销加大,所以在实际系统中往往使用该算法的近似算法。

对于考试题目而言,由于一般是卷面考试,所以我们通常需要完成的是在纸上描绘出 LRU 的置换原理,一般题目如下:


redis面试常见题_redis 面试

最近最久未使用算法例

假定系统为某进程分配了 3 个物理块,进程运行时的页面走向为 1,2,3,4,1,2,5,1,2,3,4,5,开始时 3 个物理块均为空,计算采用 最近最久未使用页面淘汰算法时的缺页率 ?(10/12)


redis面试常见题_redis 面试

对于面试而言,可能就不仅仅是「明白概念」+「画出示例」那么简单了,可能还需要自己动手去实现一个 LRU 算法的小 Demo。


redis面试常见题_redis 面试

146.LRU缓存机制

在力扣上有这么一道题:


redis面试常见题_redis 面试

并且给出了提示——在 O(1) 时间复杂度内完成 get 和 put 操作。

一个比较通用的做法是通过 Hashmap + Double Linked List 来完成,图示如下:


redis面试常见题_redis 面试

这样,整个数据的操作过程如下:


redis面试常见题_redis 面试

实现算法代码如下:

from collections import OrderedDict


class LRUCache:
    """Implement LRUCache using OrderedDict"""
    def __init__(self, capacity: int):
        self._ordered_dict = OrderedDict()
        self._capacity = capacity

    def get(self, key: int) -> int:
        self._move_to_end_if_exist(key) 
        
        return self._ordered_dict.get(key, -1)
        
    def put(self, key: int, value: int) -> None:
        self._move_to_end_if_exist(key) 
        
        self._ordered_dict[key] = value 
        if len(self._ordered_dict) > self._capacity:
            self._ordered_dict.popitem(last=False)  # popitem支持弹出头部或尾部
            
    def _move_to_end_if_exist(self, key: int) -> None:
        if key in self._ordered_dict:
            self._ordered_dict.move_to_end(key)


# Your LRUCache object will be instantiated and called as such:
# obj = LRUCache(capacity)
# param_1 = obj.get(key)
# obj.put(key,value)


redis面试常见题_redis 面试

Redis

Redis LRU algorithm is not an exact implementation. This means that Redis is not able to pick the best candidate for eviction, that is, the access that was accessed the most in the past. Instead it will try to run an approximation of the LRU algorithm, by sampling a small number of keys, and evicting the one that is the best (with the oldest access time) among the sampled keys.

Redis 是一个著名的键值对数据库,在 Using Redis as an LRU cache 中我们知道 Redis 可以用来做为 LRU 缓存(虽然不是一个非常标准的实现,因为 Redis 可能无法选出最佳换出项),Redis 的方法是随机取出若干个 key,然后按照访问时间排序后,淘汰掉最不经常使用的页面,一个较为详尽的分析在参考资料中已经有所提及,建议有兴趣的读者参考。

参考资料

1.LRU原理和Redis实现——一个今日头条的面试题

2.LeetCode 算法题解——LRU 缓存机制

力扣

本文作者:Nova Kwok

激活谷谷主为您准备了激活教程,为节约您的时间请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/14447.html

(0)
上一篇 2024年 5月 16日 下午10:16
下一篇 2024年 5月 16日 下午11:02

相关推荐

  • 分区表类型mbr与guid用哪个好固态硬盘分区4k对齐_ssd分区表类型mbr与guid用哪个好

    分区表类型mbr与guid用哪个好固态硬盘分区4k对齐_ssd分区表类型mbr与guid用哪个好无垠pe官网(口袋pe官网)蓝鲸是世界上最大的鲸鱼,也是世界上最大的动物。蓝鲸体长一般为24米,质量为100吨以上。最大的蓝鲸体长可达33米,质量可达190余吨。大约相当于32头大象(陆地上最大的动物)、300多头牛的质量。捕鲸者曾在南极捕到一头蓝鲸,产鲸肉61

    激活谷笔记 2024年 5月 24日
  • html如何设置文本框大小_html如何设置文本框大小和宽度

    html如何设置文本框大小_html如何设置文本框大小和宽度自学前端课程的成果如何?来做一套前端基础测试题吧!(附答案)千锋教育推出web前端基础全套课堂,看过的小伙伴掌握情况如何?可以做一套前端基础测试题来测试一下!Web 前端基础全套教程1、以下是<!DOCTYPE>元素作

    激活谷笔记 2024年 6月 2日
  • matlab自动调整坐标轴_matlab调整坐标轴位置

    matlab自动调整坐标轴_matlab调整坐标轴位置matlab作图怎样改变坐标轴的位置一、背景介绍对于数据可视化和图形分析来说,合理设置坐标轴的位置是十分重要的。Matlab作为一种强大的数据分析工具,通过调整坐标轴的位置可以更好地展示数据特征和趋势。本文将详细介绍如何在Matlab作图中改变坐标轴的位置。二、调整X轴位置1.

    激活谷笔记 2024年 5月 26日
  • 二叉排序树的优点_二叉排序树的优点缺点

    二叉排序树的优点_二叉排序树的优点缺点数据结构与算法之 —— 二叉树和二叉搜索树二叉树01. 什么是二叉树定义:每个节点都最多只能有两个子节点的树结构特点: 通常子树被称作“左子树”(left subtree)和“右子树”(right subtree) 任何一个树都可以转成二叉树02. 完

    2024年 5月 30日
  • 分区分桶的应用场景_分区和分桶的作用

    分区分桶的应用场景_分区和分桶的作用实际应用中,hive里面的分区表和分桶表一般用于什么场景呢?相同点:分区表和分桶都能将参与计算的数据限定在一个范围内,hive 上分区是以目录的形式存在,分桶则是以不同文件的形式存在。从存储形式所在的层级上来看,这两者并不冲突。

    2024年 5月 31日
  • 串口调试助手没有对应的串口号怎么办_串口调试助手没有对应的串口号怎么办啊

    串口调试助手没有对应的串口号怎么办_串口调试助手没有对应的串口号怎么办啊串口助手选不到串口号你好!遇到串口助手无法选到串口号的问题可能有几种原因。请尝试以下[解决](https://geek.csdn.net/educolumn/03368addd5d267af1b4c6df01bb4af26?spm=1055.2569.30

    激活谷笔记 2024年 5月 27日
  • 单片机c语言应用100例答案第三版解析_单片机c语言应用100例答案第三版解析

    单片机c语言应用100例答案第三版解析_单片机c语言应用100例答案第三版解析单片机C语言程序设计实训100例——基于8051+Proteus仿真-程序.docx《单片机C语言程序设计实训100例一基于8051+Proieus仿克》案例第01篇基础程序设讣01闪烁的LED#include<reg5 Lh&gt

    激活谷笔记 2024年 5月 25日
  • 函数已有主体怎么解决方法问题_函数已有主体怎么解决方法问题

    函数已有主体怎么解决方法问题_函数已有主体怎么解决方法问题C语言提示函数已有主体怎么解决如果C语言中的函数已经有主体,意味着该函数已经被定义了。如果你想对该函数进行修改或添加新的功能,可以在函数主体中进行相应的修改或添加代码。如果你只想使用该函数,可以直接在其他地方调用该函数。如果你不确定如何修改已有的函数主体,可以参考以下步骤:确保你理解函数的功能和

    激活谷笔记 2024年 5月 28日
  • 7zip压缩后在哪_7zip压缩并邮寄会到哪里去

    7zip压缩后在哪_7zip压缩并邮寄会到哪里去有哪些关于外国铁路、火车的冷知识?有一个类似的问题,大家答的都很精彩,但大部分都是中国的。这里再开一个楼,专说外国的冷知识。前言感谢大家的热烈支持,截至本文Chapter 2首次发表时,Chapter 1已经获得了111赞

    2024年 5月 9日
  • win10系统激活密钥免费_没有密钥怎么激活windows10

    win10系统激活密钥免费_没有密钥怎么激活windows10永久激活Windows10系统的三种方式方法一:(小白用户可以直接看最底部或评论区,附工具下载地址)1、现在我们可以看下当前系统的激活状态,查看方法"WIN+R"打开运行对话框,输入命令slmgr.

    2024年 5月 17日
  • someapples是什么意思_some apples什么意思

    someapples是什么意思_some apples什么意思Have some apples 的翻译是:有几个苹果 中文翻译英文意思,翻译英语翻译结果1翻译结果2翻译结果3翻译结果4翻译结果5翻译结果1.mytext’)” class=’d_copy’复制译文.mytext’)” 编辑译文.mytext’,’g

    激活谷笔记 2024年 5月 22日
  • tiny怎么用免流_tiny免流小白教程

    tiny怎么用免流_tiny免流小白教程[免流教程]Tiny模式编写│X-

    激活谷笔记 2024年 5月 25日
关注微信