1、讲一讲 Spring 框架中 Bean 的生命周期?
在 Spring 框架中,Bean 的生命周期分为以下阶段:
实例化:Spring 容器创建 Bean 实例。这可以通过构造函数实现或者使用工厂方法。
属性赋值:Spring 容器设置 Bean 的属性和依赖关系。可以使用 XML 配置文件或注解等方式进行配置。
初始化方法:如果 Bean 实现了 InitializingBean 接口,那么 Spring 容器会调用 afterPropertiesSet() 方法;如果配置文件中指定了 init-method 属性,则会调用该方法。
使用 Bean:Bean 可以被应用程序使用。
销毁方法:如果 Bean 实现了 DisposableBean 接口,那么 Spring 容器会在容器关闭时调用 destroy() 方法;如果配置文件中指定了 destroy-method 属性,则会调用该方法。
2、Redis 有哪些数据类型?基础数据结构有几种?你还知道哪些 Redis 的高级数据结构?
Redis 支持以下数据类型:
字符串(String):最基本的数据类型,可以存储任何类型的数据,包括二进制数据。字符串类型的值最大能存储 512MB。
列表(List):Redis 中的有序字符串列表,可以存储多个元素,每个元素都有一个索引,支持多种列表操作,支持按范围查询。
集合(Set):无序字符串集合,可以存储多个元素,但是每个元素都是唯一的,支持添加、删除、查找操作,并且支持交集、并集、差集等集合运算。
散列(Hash):字符串字段和字符串值之间的映射表,类似于 Java 中的 Map 数据结构,支持添加、删除、查找操作,以及获取所有字段或所有值的操作。
有序集合(Sorted Set:ZSet):有序字符串集合,每个元素都有一个分数(score)与之关联,支持按分数范围查询、按分数排序等操作。
除了上述基础数据结构之外,Redis 还支持一些高级数据结构,包括:
布隆过滤器(Bloom Filter):一种空间效率非常高的随机数据结构,用于检索一个元素是否在一个集合中。
基数(HyperLogLog):一种用于估计一个集合中元素数量的算法。
发布订阅(Pub/Sub):一种消息传递模式,消息发送者(发布者)将消息发送到频道,而订阅者可以订阅频道以接收消息。
地理位置(Geospatial):可以将地理空间坐标与一个标识符相关联,支持距离查询、范围查询等操作。
限流器(Rate Limiter):用于限制某个操作的速率,防止系统被恶意攻击或者因为某些原因导致负载过高。
3、有哪些主流的消息队列,它们分别有什么优缺点、各自的适用场景是什么?
主流的消息队列如下
消息队列 | 优点 | 缺点 | 适用场景 |
RabbitMQ | 开源、可靠性高、支持多种协议和编程语言、性能稳定 | 需要安装 Erlang 环境、性能较弱 | 适用于吞吐量不高,但对可靠性和多语言支持有要求的场景 |
Apache Kafka | 高吞吐量、分布式、可水平扩展、支持流处理 | 适用于大规模数据处理,但需要额外的复杂配置和运维成本 |
ActiveMQ | 开源、性能稳定、支持多种协议和编程语言、集成广泛 | 稳定性不如 RabbitMQ、复杂性较高 | 适用于需要多种集成方式和协议的场景 |
RocketMQ | 分布式、高可用、性能高、支持批量发送和顺序消费 | 对于消息存储和网络传输对可靠性要求高 | 适用于高吞吐量和可靠性要求高的场景 |
Amazon SQS | 可靠性高、支持多种协议和编程语言、弹性可扩展 | 有一定的限制,如不能支持 push 模式 | 适用于需要可靠性和弹性可扩展性的场景 |
Google Cloud Pub/Sub | 分布式、高可靠性、支持多种协议和编程语言、可以与 Google Cloud 平台集成 | 可能会受到 Google Cloud 平台的限制 | 适用于需要与 Google Cloud 平台集成的场景 |