硬核!在完成了666页的java访谈高频书之后,腾讯t3-2在4月份获得了成功评级
今年4月,我不自量力地去一家大工厂面试一个java开发职位,一个屏幕还开着的中年人迎面走来。他礼貌地对我笑了笑,然后说:“对不起,让你久等了”,然后示意我坐下来说:“我们开始吧。”读完你的简历后,我认为你应该很好地掌握redis。让我们今天讨论一下redis”我想:“你来就来吧,士兵们会把水挡住,把土盖住。”
记者:让我们来谈谈什么是redis。
我这是对redis的定义和特征的总结。redis是用c语言开发的开源(遵循bsd协议)高性能键值存储数据库,可用作数据库、缓存、消息中间件等。
这是一个nosql(不仅仅是sql)数据库。
我停顿了一下,然后说,redis作为一个记忆数据库:
出色的性能、内存中的数据、快速的读写速度以及对并发10w qps的支持。
单进程,单线程,线程安全,采用输入输出复用机制。
丰富的数据类型,支持字符串、哈希、列表、集合、排序集合等。
支持数据持久性。您可以将数据保存在磁盘的内存中,并在重新启动时加载。
主从复制,哨兵,高可用性。
可以用作分布式锁。
它可以用作消息中间件,支持发布订阅。
采访者:这是一个很好的总结。看来你准备得很好。我刚刚听到你提到redis支持五种数据类型,那么你能简单地告诉我这五种数据类型吗?
我:当然,但是在我说之前,我认为有必要理解redis的内部内存管理是如何描述这五种数据类型的。
我拿起笔,给采访者画了一幅画:
我:首先,redis在内部使用一个redisobject对象来表示所有的键和值。
redisobject最重要的信息如上图所示:类型表示一个值对象的具体数据类型,编码是redis中不同数据类型的存储方式。
例如,type=string意味着值存储一个普通的字符串,因此编码可以是原始的也可以是整数。
我停顿了一下,然后说,让我简单谈谈下面五种数据类型:
①字符串是redis最基本的类型,可以理解为与memcached完全相同的类型,一个键对应一个值。值不仅是一个字符串,也是一个数字。
字符串类型是二进制安全的,这意味着redis的字符串类型可以包含任何数据,如jpg图片或序列化对象。字符串类型的值最多可以存储512兆字节。
②哈希是一组键值。redis哈希是字符串的键值映射表,哈希特别适合存储对象。常用命令:hget、hset、hgetall等。
③列表列表是一个简单的字符串列表,根据插入顺序进行排序。您可以将元素添加到列表的头部(左)或尾部(右)。常用命令:lpush、rpush、lpop、rpop、r range等。
应用场景ist有很多应用场景,也是redis最重要的数据结构之一。例如,推特的关注列表和粉丝列表可以通过列表结构来实现。
数据结构:列表是一个链表,可以用作消息队列。redis提供了列表的推和弹出操作,还提供了操作某个段的应用编程接口,可以直接查询或删除某个段的元素。
实现:redis list是一个双向链表,可以支持反向搜索和遍历,操作起来更方便,但是会带来额外的内存开销。
④集合是字符串类型的无序集合。集合是通过哈希表实现的。集合中的元素没有顺序,没有重复。常用命令:sdd、spop、smembers、sunion等。
应用场景:redis set提供的功能是一个列表式的列表,其特点是set自动去重,set可以判断成员是否在set集合中。
⑤ zset与set一样,是字符串元素的集合,不允许有重复的元素。常用命令:zadd、zrange、zrem、zcard等。
使用场景:排序集可以通过提供额外的得分参数对成员进行排序,并按顺序插入,即自动排序。
当您需要有序且不重复的集合列表时,您可以选择排序的集合结构。
与集合相比,排序集合与双类型权重的参数score相关联,因此集合中的元素可以根据score有序排列。redis根据分数从小到大对集合成员进行排序。
实现:重分类集合使用哈希映射和skiplist来确保数据存储和排序,哈希映射包含从成员到分数的映射。
所有成员都存储在跳转表中,排序是基于哈希表中存储的分数。使用跳转表的结构可以实现更高的搜索效率,并且实现相对简单。
数据类型应用场景摘要:
接下来是连环画式的问题,问题越深,就越紧张。
如何使用redis缓存?
在实际项目中使用缓存时,您会遇到什么问题?
redis缓存溢出、缓存渗透和缓存崩溃之间有什么区别?
redis多线程模型?
redis和memcached有什么区别?
再贴现的持续机制?
aof和rdb的redis持久性机制有什么不同?
redis主从复制原理?
redis主从复制如何确保数据一致性?
redis数据同步原理?
redis主从复制有什么问题?解决办法是?
什么是缓存更新策略?有什么预防措施?
请介绍几个可能导致redis阻塞的原因
什么是redis集群架构模式?
redis群集中的最大节点数是多少?
redis集群的主从复制模式是什么?
请介绍redis集群实施方案
redis群集中的任何写操作都会丢失吗?为什么?
什么是redis慢速查询?用什么配置?
所有的答案最终都被回答后,面试官瞥了我一眼。看来你对redis有了彻底的了解。接下来,我们来谈谈jvm性能优化和高并发应用场景解决方案。
由于文章篇幅有限,无法充分展示。这里只是与redis相大秦诛神司最新章节关的采访问题集的一部分,也是分析的一部分。有关redis访谈的更多分析,请参见“大昌redis高频访谈75个问题的分析文件”。如果您需要帮助,请转发给我,并通过私人信件[采访]回复我,以获得免费的信息收集方法!
redis缓存
redis实现分布式锁
jvm性能调优java内存区域
垃圾收集器和内存分配策略
jvm末世之黑暗召唤师最新章节的执行子系统
编写高效优雅的java程序
深入了解性能优化
mysql性能优化事务
锁
sql优化原则
join的原则
执行计划和执行细节
执行过程
表格结构对性能的影响
指数
我的春季学习笔记春季课程
弹簧mvc
春季aop
国际奥委会春季会议
事务管理
国际奥委会春季会议
春季学习笔记思维脑地图
以上所有的笔记都可以与大家分享,只需要帮忙转发和分享关注。@在@ javaspring advanced旁边有一个私人信件入口,私人信件[大脑地图]可以得到收藏地址。
俗话说,只要功夫深,铁杵就磨成针,平时你都准备好了,没必要在面试中慌张。
还有更多的面试题库:“1000互联网高频面试分析”、“489高级工程师面试答案”和“java核心面试知识点”
在转发和分享关注之后,私人消息[采访]获得收集方法
“1000次互联网高频访谈分析”这份pdf文档包含了主要互联网公司的高频访谈问题。刷完基本的面试没有问题,但这只是一次制造飞机的面试。该由你来拧螺丝了!
“489高级工程师面试答案”
java核心面试知识点的整理
向前+向前+向前
文章来源:www.atolchina.com