1. Eureka的注册与发现
- Eureka包含两个组件:Eureka Server和Eureka Client。
- Eureka Server:提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,包括主机与端口号、服务版本号、通讯协议等。这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
- Eureka Client,主要处理服务的注册和发现。客户端服务通过注册和参数配置的方式,嵌入在客户端应用程序的代码中。在应用程序启动时,Eureka客户端向服务注册中心注册自身提供的服务,并周期性的发送心跳来更新它的服务租约。同时,他也能从服务端查询当前注册的服务信息并把它们缓存到本地并周期行的刷新服务状态。
每一个微服务中都有eureka client,用于服务的注册于发现
(服务的注册:把自己注册到eureka server)
(服务的发现:从eureka server获取自己需要的服务列表) 每一个微服务启动的时候,都需要去eureka server注册 当A服务需要调用B服务时,需要从eureka服务端获取B服务的服务列表,然后把列表缓存到本地,然后根据ribbon的客户端负载均衡规则,从服务列表中取到一个B服务,然后去调用此B服务 当A服务下次再此调用B服务时,如果发现本地已经存储了B的服务列表,就不需要再从eureka服务端获取B服务列表,直接根据ribbon的客户端负载均衡规则,从服务列表中取到一个B服务,然后去调用B服务 微服务,
默认每30秒,就会从eureka服务端获取一次最新的服务列表 如果某台微服务down机,或者添加了几台机器,
此时eureka server会通知订阅他的客户端,并让客户端更新服务列表, 而且还会通知其他eureka server更新此信息 心跳检测,
微服务每30秒向eureka server发送心跳, eureka server若90s之内都没有收到某个客户端的心跳,则认为此服务出了问题, 会从注册的服务列表中将其删除,并通知订阅它的客户端更新服务列表, 而且还会通知其他eureka server更新此信息
eureka server保护机制,通过打开开关,可以让eureka server处于保护状态,主要是用于某eureka server由于网络或其他原因,导致接收不到其他微服务的心跳,此时不能盲目的将其他微服务从服务列表中删除。 具体规则:如果一段时间内,85%的服务都没有发送心跳,则此server进入保护状态,此状态下,可以正常接受注册,可以正常提供查询服务,但是不与其他server同步信息,也不会通知订阅它的客户端,这样就不会误杀其他微服务
2. Eureka实现了CAP理论的哪两个?
- CAP原则(针对分布式系统):
- Consistency:数据一致性
- Availability:系统可用性
- Partition tolerance:分区容错性(对于不同数据的容忍性)
Eureka实现了AP,Zookeeper保证CP
3. SpringBoot的自动配置原理
@SpringBootApplication注解标注在 某个类上, 说明该类为 SpringBoot的主配置类
@SpringBootApplication由@SpringBootConfiguration和@EnableAutoConfiguration组合
@SpringBootConfiguration 标注在 某个类上, 说明该类为 SpringBoot的配置类,此注解下还有一个@Configuration注解,标识配置类,@Configuration注解下有一个@Component注解,说明配置类也是容器中的一个组件
@Configuration是Spring下的配置类注解,@SpringBootConfiguration是SpringBoot下的配置类注解,但二者的本质相同
@EnableAutoConfiguration(SpringBoot实现自动配置的核心注解),开启自动配置功能
内部子注解有:
- @AutoConfigurationPackage(自动配置包)
- @Import(AutoConfigurationImportSelector.class)
@AutoConfigurationPackag 的作用就是将SpringBoot 主配置类所在的包 及其 下面的所有子包里面的所有组件 扫描到 Spring 容器中
@Import(AutoConfigurationImportSelector.class)
这一个注解的作用就是给容器中导入组件,这个注解需要导入的组件就是 AutoConfigurationImportSelector,也就是自动配置导入选择器,
AutoConfigurationImportSelector扫描所有jar包类路径下的META-INF/spring.factories文件并且获取到文件中 EnableAutoConfiguration的值(也就是各种自动配置类),将他们放入spring容器中。
4. IOC、AOP原理
5. 聊聊设计模式
6. 归并排序和快速排序比较
归并排序和快速排序都用到了分治思想,
- 归并排序的核心思想是先分后合。假如要排序一个数组,先将其从数组中间分解为两部分,分别进行排序,之后再将排好序的两部分按序合并在一起。
- 当我们要排序一个数组时,先任意选出一个数据(一般为第一个或最后一个)作为分区点(pivot),将比它小的放在左边,大的放在右边,再通过递归的思想,分别递归左右两部分,当区间缩小到1时,此时所有数据就全部有序了。
归并排序的时间复杂度:O(nlog n),空间复杂度为:O(n)
快速排序的时间复杂度:O(nlog n),空间复杂度为:O(1)