java面试整理(Redis21问)

本文深入探讨了Java面试中关于Redis的常见问题,从集群、分布式、微服务的基础概念出发,详细解释了Spring Boot、Spring中Redis的自动化配置。接着介绍了Spring Cloud的组件,如Eureka、Ribbon、Hystrix、Zuul和Config,并讨论了负载均衡策略,包括轮询、随机、哈希和加权策略。文章还深入讲解了Spring的核心,如IOC和AOP,以及JDK动态代理与CGLib代理的区别。对于HashMap,分析了JDK 1.8的改进,包括红黑树的引入。最后,涉及MySQL的隔离级别、事务特性,以及Hibernate和MyBatis的比较,探讨了Redis的缓存策略、过期机制和集群解决方案。
摘要由CSDN通过智能技术生成

一、集群、分布式、微服务的理解

1、集群是个物理形态,分布式是个工作方式。

分布式:一个业务分拆多个子业务,部署在不同的服务器上

集群:同一个业务,部署在多个服务器上

2、分布式是指将不同的业务分布在不同的地方。而集群指的是将几台服务器集中在一起,实现同一业务。

分布式的每一个节点,都完成不同的业务,一个节点垮了,那这个业务就不可访问了。分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。

分布式中的每一个节点,都可以做集群。而集群并不一定就是分布式的。

举例:就比如新浪网,访问的人多了,他可以做一个群集,前面放一个响应服务器,后面几台服务器完成同一业务,如果有业务访问的时候,响应服务器看哪台服务器的负载不是很重,就将给哪一台去完成。

而分布式,从窄意上理解,也跟集群差不多,但是它的组织比较松散,不像集群,有一个组织性,一台服务器垮了,其它的服务器可以顶上来。

3、微服务将模块拆分成一个独立的服务单元通过接口来实现数据的交互。把系统拆分成一个个小服务,技术团队通过技术选型,每个服务单独开发,独立部署运行。

微服务将单一应用程序划分成一组小的服务,每个服务运行独立的自己的进程中,服务之间互相协调、互相配合,为用户提供最终价值。

服务之间采用轻量级的通信机制互相沟通(通常是基于 HTTP 的 RESTful API) 。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。

二、springboot自动化配置

@SpringBootApplication里面包含一下三个注解

@SpringBootConfiguration

@EnableAutoConfiguration

@ComponentScan

@SpringBootConfiguration:标记当前类为配置类。

@EnableAutoConfiguration:开启自动配置,利用AutoConfigurationImportSelector给容器中导入一些组件。

@ComponentScan:扫描主类所在的同级包以及下级包里的Bean,组件扫描和自动装配。

关键是@EnableAutoConfiguration。

@AutoConfigurationPackage

@Import({AutoConfigurationImportSelector.class})

三、springcloud组件

SpringCloud分布式开发五大组件详解

服务发现——Netflix Eureka

客服端负载均衡——Netflix Ribbon

断路器——Netflix Hystrix,SOA/微服务架构中提供服务隔离、熔断、降级机制的工具/框架。Netflix Hystrix是断路器的一种实现,用于高微服务架构的可用性,是防止服务出现雪崩的利器。

服务网关——Netflix Zuul

分布式配置——Spring Cloud Config

四、常见负载均衡策略

1、轮询法

将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。

轮询算法是最简单的一种负载均衡算法。它的原理是把来自用户的请求轮流分配给内部的服务器:从服务器1开始,直到服务器N,然后重新开始循环。

算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

2、随机法

通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。由概率统计理论可以得知,随着客户端调用服务端的次数增多,其实际效果越来越接近于平均分配调用量到后端的每一台服务器,也就是轮询的结果。

3、源地址哈希法

源地址哈希的思想是根据获取客户端的IP地址,通过哈希函数计算得到的一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客服端要访问服务器的序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

4、加权轮询法

不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。

5、加权随机法

与加权轮询法一样,加权随机法也根据后端机器的配置,系统的负载分配不同的权重。不同的是,它是按照权重随机请求后端服务器,而非顺序。

6、最小连接数法

最小连接数算法比较灵活和智能,由于后端服务器的配置不尽相同,对于请求的处理有快有慢,它是根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最少的一台服务器来处理当前的请求,尽可能地提高后端服务的利用效率,将负责合理地分流到每一台服务器。

五、spring的理解

1、spring原理

spring是按照设计模式精心打造的,它实现了工厂模式的工厂类,这个类名为BeanFactory(接口),在程序中通常使用它的子类ApplicationContext(也是接口)。

spring的核心是IOC(反转控制)容器,IOC也是一种编程思想,用于实现模块之间的解耦,在Spring中它的作用是对对象的创建,维护和销毁等生命周期的控制。IOC:把对象的创建、初始化、销毁交给spring来管理,而不是由开发者控制,实现控制反转。

spring是一个大的工厂类,spring的特点就是基于配置,在其配置文件中通过元素来创建实例对象。

根据业务逻辑来看,对象经常不是独立的,一个对象的创建往往涉及另一个对象的创建,当然这个对象也要由IOC容器负责,负责的方式就是依赖注入DI,通过反射机制实现。

有三种注入方式:(1)接口注入(2)构造器注入(3)Setter方法注入。

2.spring的核心技术

spring的核心技术有:IOC,AOP

java 的 高级特性:反射机制,代理

IOC:依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。

AOP:面向切面编程,系统中有很多各不相干的类的方法,在这众多方法中加入某种系统功能的代码,如加入日志,权限判断等,AOP可以实现横切关注点(如日志,安全,缓存和事务管理)与他们所影响的对象之间的解耦。

实现AOP 功能采用的是代理技术,调用代理类,代理类与目标类具有相同的方法声明。

AOP 在spring中主要表现在两个方面:提供声明式的事务管理 、spring支持用户自定义切面。在此我向大家推荐一个架构学习交流圈。交流学习伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

AOP主要包括通知(Advice)切点(PointCut)连接点(JoinPoint)

AspectJ实际上是对AOP编程思想的一个实践

3、spring 优缺点

Spring的核心概念是IOC和AOP,这两个核心服务的对象算是bean(POJO)。

它具备以下优点:

spring中避免了关键字new造成的耦合问题。

spring本身就是一个工厂,不需要再编写工厂类了。

spring不需要进行明确的引用关系的传递,直接通过配置完成

所有框架几乎都可以在spring中整合在一起使用。

spring编程=factory设计模式+proxy设计模式

当然,它的缺点也是不少的:

spring基于大量的xml 配置文件,使得我们花了大量的时间放在配置上,拖慢了开发的进度,springboot 问世后,提倡代码优于配置解决了这个问题。

spring的内容太庞大,随便打断点查看的时候会出现十几二十层代码,阅览性不强。

六、jdk动态代理和cglib代理的区别

JDK动态代理只能对实现了接口的类生成代理,而不能针对类

CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法(继承)

Spring在选择用JDK还是CGLiB的依据:

(1)当Bean实现接口时,Spring就会用JDK的动态代理(java.lang.reflect.Proxy类代理)

优点:因为有接口,所以使系统更加松耦合

缺点:为每一个目标类创建接口

(2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值