首页 > 编程知识 正文

面试题java(面试3个优缺点)

时间:2023-05-04 14:05:02 阅读:98245 作者:2850

今年5月,我在一家大工厂的Java开发职位面试中不自量力,一种风尘仆仆的挣扎心情迎面扑来,屏幕还开着的Mac。他礼貌地对我笑了笑,然后说了一句“抱歉让你久等了”,然后示意我坐下,说:“我们开始吧,看看你的简历,觉得你应该对Redis有一个很好的掌握。咱们今天讨论Redis”。我想,“来吧,来吧,来吧,来吧。”

Redis 是什么

面试官:请先告诉我Redis是什么!

Me:(这是对Redis的定义和特点的总结)Redis是用C语言开发的开源(遵循BSD协议)键值内存数据库,可以作为数据库、缓存、消息中间件等使用。

这是一个NoSQL(不仅仅是SQL)数据库。

我停顿了一下,然后说,Redis作为内存中的数据库:

性能出色,数据在内存中,读写速度非常快,支持并发10W QPS。单进程单线程,线程安全,采用IO复用机制。丰富的数据类型,支持字符串、哈希、列表、集合、排序集合等等。支持数据持久性。您可以将内存中的数据保存到磁盘,并在重新启动时加载。主从副本,包容老师,高可用性。可以用作分布式锁。它可以作为消息中间件,支持发布和订阅。

五种数据类型

面试官:总结的不错。看来我准备好了。刚才听你提到Redis支持五种数据类型,那么你能简单介绍一下这五种数据类型吗?

我:当然,但是在说之前,我觉得有必要知道Redis的内存管理是如何描述这五种数据类型的。

说着,我拿起笔,给面试官画了一幅画:

我:首先,Redis内部使用一个redisObject对象来表示所有的键和值。

redisObject最重要的信息如上图所示:type表示一个value对象是什么样的数据类型,编码是不同的数据类型在Redis中的存储方式。

例如,type=string意味着值存储一个普通字符串,因此编码可以是raw或int。

我停顿了一下,然后说,让我简单谈谈以下五种数据类型:

(1) String是Redis最基本的类型,可以理解为和Memcached一样的类型,一个Key对应一个Value。值不仅是一个字符串,也是一个数字。

String类型是二进制安全的,这意味着Redis的String类型可以包含任何数据,例如jpg图片或序列化对象。String类型的值最多可以存储512M。

哈希是一组键值。Redis的Hash是字符串的键值映射表。哈希特别适合存储对象。常用命令:hget、hset、hgetall等。

List list是一个简单的字符串列表,按照插入顺序排序。您可以将元素添加到列表的头部(左)或尾部(右)。常用命令:lpush、rpush、lpop、rpop、r range等。

应用场景:List的应用场景很多,也是Redis最重要的数据结构之一。比如推特的关注列表和粉丝列表都可以用列表结构来实现。

结构:列表是一个链表,可以作为消息队列使用。Redis提供了List的Push和Pop操作,还提供了操作某一节的API,可以直接查询或删除某一节的元素。

实现:Redis List是一个双向链表,不仅可以支持反向搜索和遍历,而且操作起来也更加方便,但是也会带来额外的内存开销。

集合是字符串类型的无序集合。集合是通过哈希表实现的。集合中的元素没有顺序,并且没有重复。常用命令:sdd、spop、smembers、sunion等。

场景:Redis Set提供的功能是一个和list一样的List。特别之处在于集合自动删除重复项,集合提供判断成员是否在集合集合中的能力。

ZSet和Set一样,是String类型元素的集合,不允许重复元素。常用命令:zadd、zrange、zrem、zcard等。

使用场景:排序集可以通过用户提供额外的评分参数对成员进行排序,并有序插入,即自动排序。

快速酒窝需要一个有序且不重复的集合列表,所以可以选择排序集合结构。

与“集合”相比,“排序集合”与双类型权重的参数相关联。

Score,使得集合中的元素能够按照 Score 进行有序排列,Redis 正是通过分数来为集合中的成员进行从小到大的排序。

实现方式:Redis Sorted Set 的内部使用 HashMap 和跳跃表(skipList)来保证数据的存储和有序,HashMap 里放的是成员到 Score 的映射。

而跳跃表里存放的是所有的成员,排序依据是 HashMap 里存的 Score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。

数据类型应用场景总结:

接下来就是连环炮式提问,越问越深(⊙o⊙),不免紧张了起来。

Redis 缓存你是怎么使用的?实际项目中使用缓存会遇到哪些问题?Redis缓存血崩、缓存穿透、缓存击穿的区别?Redis多线程模型?Redis 和 Memcached 的区别?Redis 的持久化机制?Redis 持久化机制 AOF 和 RDB 有哪些不同之处?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的原理执行计划与执行明细执行流程表结构对性能的影响索引

我的Spring学习笔记

Spring类Spring MVCSpring AOPSpring IOC事务管理

Spring IOC

Spring AOP

Spring学习笔记思维脑图

俗话说的好,只要功夫深,铁杵磨成针,平时准备好,面试不用慌。

还有更多的面试刷题库:《1000道互联网高频面试解析》《489道资深工程师面试解答》《JAVA核心面试知识点整理》

转发分享关注 后私信【面试】获取领取方式

《1000道互联网高频面试解析》

本篇PDF文档包含各大互联网公司面试高频题,刷完基本面试没有问题,只是面试造飞机,工作拧螺丝就得看自己啦!

《489道资深工程师面试解答》

《JAVA核心面试知识点整理》

转发+转发+转发

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。