java 面试指南

一、Redis

1、数据类型

string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)
list:可以重复
set:不可以重复
zset:不可以重复且有序(可用于排行榜)

2、优点和缺点

优点
1、操作内存,支持持久化和事务,支持主从复制
2、采用单线程,避免了不必要的上下文切换
3、多路 I/O 复用模型,非阻塞 IO
缺点
受物理内存限制,适合小数据

3、两种持久化(AOF/RDB)

RDB性能好,更新频率低—间隔一段时间持久化,如果持久化间 redis 发生故障,会发生数据丢失。

AOF安全高,更新频率高—执行的每次写命令在单独的日志文件中,重启redis 会去恢复。

4、Redis的过期键的删除策略和内存淘汰策略

定时清理和请求清理—定期过期:每隔一定的时间,会扫描一定数量的数据库的expires字典中一定数量的key,并清除其中已过期的key
淘汰策略
随机key,最近最少使用,报错

5、Redis的事务

事务:ACID
原子性、一致性、隔离性、持久性
Redi支持一致性和隔离性,单线程下,他没有回滚,不具备原子性

6、Redis的缓存雪崩、击穿、穿透

穿透: 没这个Redis key
解决方案:接口用布隆过滤器控制

雪崩:请求太多了,redis宕机
解决方案:redis集群+缓存预热+不设置相同的过期时间

击穿: key同时过期了,都去查数据库
解决方案:不设置相同的过期时间+加分布式锁

二、RabbitMQ(解耦、异步、削峰)

1、基本结构

在这里插入图片描述
Broker:消息队列服务进程,此进程包括两个部分:Exchange和Queue
Exchange:消息队列交换机,按一定的规则将消息路由转发到某个队列,对消息进行过虑。
Queue:消息队列,存储消息的队列,消息到达队列并转发给指定的
Producer:消息生产者,即生产方客户端,生产方客户端将消息发送
Consumer:消息消费者,即消费方客户端,接收MQ转发的消息

2、消息模型

直连模式 work queues
在这里插入图片描述

直连模式–多个消费者work queues
在这里插入图片描述
订阅模式 publish/subscribe fanout
在这里插入图片描述
路由模式 direct
在这里插入图片描述
高级路由模式 topic
在这里插入图片描述
思考
publish/subscribe与work queues有什么区别。
区别
1)work queues不用定义交换机,而publish/subscribe需要定义交换机。

2)publish/subscribe的生产方是面向交换机发送消息,work queues的生产方是面向队列发送消息(底层使用默认交换机)。

相同点:

所以两者实现的发布/订阅的效果是一样的,多个消费端监听同一个队列不会重复消费消息。

2、实际工作用 publish/subscribe还是work queues。

建议使用 publish/subscribe,发布订阅模式比工作队列模式更强大(也可以做到同一队列竞争),并且发布订阅模式可以指定自己专用的交换机

3、消息丢失问题

生产者丢失:开启事务(不推荐,性能耗损),开启confirm 模式 异步的

消费者丢失:用 RabbitMQ 提供的ack机制,简单来说,就是你关闭 RabbitMQ 的自动ack

MQ丢失:消息持久化,开启 RabbitMQ 的持久化,就是消息写入之后会持久化到磁盘当然前提是队列必须持久化

4、重复消费问题(幂等性)

在写入消息队列的数据做唯一标示,消费消息时,根据唯一标识判断是否消费过;

三、ES

1、谈谈ES

基于Lucence 搜索引擎\RestFul

索引:–table
文档:–行row
字段:–列
映射:mapping
查询方式
分片 shaping和replices

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值