2021 最新 Java 大厂面试真题大全,不明白 JVM 虚拟机还怎么面试
Redis 常用的数据类型
Redis 的五种常用的数据类型分别是:String、Hash、List、Set 和 Sorted set
Redis 的使用场景
1.Counting(计数)2.展示最近、最热、点击率最高、活跃度最高等等条件的 top list3.用户最近访问记录也是 redis list 的很好应用场景 4.通过 list 的 lpop 及 lpush 接口进行队列的写入和消费 5.Redis 的 Lua 的功能扩展实际给 Redis 带来了更多的应用场景,你可以编写若干 command 组合作为一个小型的非阻塞事务或者更新逻辑 6.Redis 提供的主从数据同步功能,其实是对 cache 的一个强有力功能扩展
小结
如此多的应用无非离不开 Redis 的所有特性
揭开 Redis 的神秘面纱
Redis 是一个开源(KEY-VALUE 键值对),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。采用单进程单线程模型,并发能力强大,是当前互联网架构中主流的分布式缓存工具。
Redis 高性能缓存架构设计
1.架构设计
由于 redis 是单点,项目中需要使用,必须自己实现分布式。基本架构图如下所示:
2.分布式实现
通过 key 做一致性哈希,实现 key 对应 redis 结点的分布。
一致性哈希的实现:
hash 值计算:通过支持 MD5 与 MurmurHash 两种计算方式,默认是采用 MurmurHash,高效的 hash 计算。
一致性的实现:通过 java 的 TreeMap 来模拟环状结构,实现均匀分布
3.client 的选择
对于 jedis 修改的主要是分区模块的修改,使其支持了跟据 BufferKey 进行分区,跟据不同的 redis 结点信息,可以初始化不同的 ShardInfo,同时也修改了 JedisPool 的底层实现,使其连接 pool 池支持跟据 key,value 的构造方法,跟据不同 ShardInfos,创建不同的 jedis 连接客户端,达到分区的效果,供应用层调用
4.模块的说明
脏数据处理模块,处理失败执行的缓存操作。
屏蔽监控模块,对于 jedis 操作的异常监控,当某结点出现异常可控制 redis 结点的切除等操作。
整个分布式模块通过 hornetq,来切除异常 redis 结点。对于新结点的增加,也可以通过 reload 方法实现增加。(此模块对于新增结点也可以很方便实现)
最后
一次偶然,从朋友那里得到一份“java 高分面试指南”,里面涵盖了 25 个分类的面试题以及详细的解析:JavaOOP、Java 集合/泛型、Java 中的 IO 与 NIO、Java 反射、Java 序列化、Java 注解、多线程 &并发、JVM、Mysql、Redis、Memcached、MongoDB、Spring、Spring Boot、Spring Cloud、RabbitMQ、Dubbo 、MyBatis 、ZooKeeper 、数据结构、算法、Elasticsearch 、Kafka 、微服务、Linux。
这不,马上就要到招聘季了,很多朋友又开始准备“金三银四”的春招啦,那我想这份“java 高分面试指南”应该起到不小的作用,所以今天想给大家分享一下。
请注意:关于这份“java 高分面试指南”,每一个方向专题(25 个)的题目这里几乎都会列举,在不看答案的情况下,大家可以自行测试一下水平 且由于篇幅原因,这边无法展示所有完整的答案解析
评论