大厂面试题(一)


一、简单的自我介绍

1、内容:来自哪里?毕业院校?工作时长?上一家公司项目经验?工作职责?项目的业务?

2、上一个项目使用到了哪些技术?

如果是微服务架构,那么下面的问题围绕这微服务组件来提问。

二、Spring Cloud Eureka

1、请介绍一下Eureka的自我保护机制及优缺点

默认的情况下,Eureka Server在一定时间内(默认90秒)没有接收到某个微服务的实例心跳,Eureka Server将会移除该实例。但是当短暂的网络原因时,微服务与Eureka Server无法保持通信,而微服务本身正常运行,此时就不应该移除这个微服务,所以引入了自我保护机制。自我保护机制是针对网络异常波动安全的保护措施,使用自我保护机制模式能使Eureka集群更加健壮、稳定的运行。如果15分钟内超过了85%的客户端节点没有正常的心跳,那么Eureka 就认为客户端与注册中心出现了网络故障。此时Eureka Server自动进入自我保护机制。当客户端心跳恢复时,Eureka 会自动退出自我保护机制。

优点:当服务与注册中心因为某个原因断开的时候,服务于服务之间还可以连接,这时候Eureka不会立刻清理,依旧会对该微服务的信息进行保护。

缺点:当服务与注册中心由于某个原因断开的时候,服务与服务之间也不可以连接,这时候可能会带坏其它服务。

自我保护机制相关的配置

eureka:
  server:
     enable-self-preservation: false    #默认是打开的,建议生产环境打开,开发环境关闭
     eviction-interval-timer-in-ms: 3000  #续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)
  instance:
     # 默认90秒
     lease-expiration-duration-in-seconds:  10 #发呆时间,即服务续约到期时间(缺省为90s)
     # 默认30秒
     lease-renewal-interval-in-seconds:  3  #心跳时间,即服务续约间隔时间(缺省为30s)

2、简单说一下Eureka服务注册的过程

 

(1)、Service Provider默认每隔30秒向Eureka Server发送一次心跳续约,如果默认90秒内 Eureka Server没有收到Service Provider的续约,则将此实例从注册中心删除(Eriction)

(2)、获取注册列表信息(FetchRegistries),Service Consumer从注册中心获取注册列表信 息缓存到本地,消费方会使用该信息查找其他服务,从而进行远程调用,该注册列表定期30S 更新一次,每次返回注册列表信息可能与服务消费方缓存信息不同,服务消费方会自动处理, 重新获取整个注册表信息,eureka Server和Eureka Client可以使用JSON/XMl格式进行通信, 默认情况下Eureka Client使用Json格式来获取注册列表信息。

(3)、服务下线Cancel,Service Provider服务提供方在程序关闭时向注册中心发送取消请求, 发送之后注册中心将删除此实例。服务下线不会自动完成,需要调用。

(4)、远程调用Remote Call,当服务消费方Eureka Client从注册中心获取到信息后,就可以通过Http请求 调用对应的服务,服务提供者多个时,服务消费方通过Ribbon自动进行负载均衡。

 3、Eureka集群数据是怎么同步的

首先:Eureka集群数据同步与Eureka集群数据备份不一样。

Eureka Server集群数据同步处理的是Eureka Client发起的数据同步请求。
Eureka Server集群数据备份处理的是Eureka Server发起的数据备份请求。

Eureka服务的启动类是Eureka BootStrap,这个类在Eureka-core-1.4.6-source.jar包下,集群数据同步分为两个阶段。

第一阶段:Eureka Client发起数据同步请求。

第二阶段:Eureka Server处理同步请求。

Eureka Client发起数据同步请求有5种Heartbeat, Register, Cancel, StatusUpdate, DeleteStatusOverride。相应的,Eureka Server处理同步请求也是这5种。

Heartbeat:心跳检测

Register:服务注册

Cancel:失效节点清楚

StatusUpdate:服务节点状态更新

DeleteStatusOverride:删除状态覆盖,也就是把InstanceInfo.overriddenStatus状态置为InstanceStatus.UNKNOWN

Eureka Client如何触发数据同步呢?入口有很多,比如服务注册,心跳检测等等都会触发数据同步,我们这里以服务注册这个入口为例,
来分析Eureka Server的集群数据同步。PeerAwareInstanceRegistry.register(InstanceInfo info, boolean isReplication);

三、Redis

1、Redis集群有哪几种模式

2、上一个项目Redis使用的是哪种模式