每日一句: To always face my adversity head on.面试
下面整理了一些面试的过程当中被问到的Spring相关的题目,只因简历上写了熟练使用SpringBoot,SpringCloud。但愿为即将准备面试的胖友提供一些帮助,平时仍是要多关注一些细节的地方!redis
SpringBoot能够快速一键搭建一个基于Spring的生产就绪的应用框架,简化Spring应用的初始搭建以及开发过程:算法
SpringBoot自动配置自带了不少了配置类,自动配置创建在spring条件化配置基础之上的:spring
首先SpringBoot的主配置类上的@SpringBootApplication 开启了自动配置功能@EnableAutoConfiguration后端
@EnableAutoConfiguration 利用AutoConfigurationImportSelector将META-INF/spring.factories里面配置的全部xxxAutoConfiguration的配置类都加入容器中,用他们来作自动配置。spring-boot-autoconfiguration的jar 文件里面包含了不少的配置类,好比jpa, mvc,redis,neo4j。用户能够本身选择是否在程序里面使用他们,这些配置类构成了Springboot的自动配置。缓存
尽管这些配置存在与应用程序的ClassPath中,可是在知足某些条件以前应用会忽略这个配置,好比:安全
Spring启动的时候会作几百次这样的检查,好比检查Jdbctemplate是否是在Classpath里面,若是是就会配置一个对应的jdbcTemplate的配置Bean。 全部的这些配置都是尽可能的不让开发者本身去写配置。网络
服务提供者向服务注册中心进行服务的注册,并周期性的发送心跳来更新服务信息,服务消费者拉取服务注册中心的服务列表并维护在本地,并从服务列表中拉取一个服务进行消费。架构
Eureka自己支持高可用,能够经过集群的方式部署,Eureka Server之间也能够相互注册,相互同步服务信息。并发
失效服务的剔除: 好比超过30s没有心跳的服务,就会被Eureka标记为不可用
自我保护机制:
当Eureka 与其它服务之间的心跳大面积失败的时候,它会认为多是本身的问题,好比本身网络很差,就会把注册的信息保护起来。这时若是有消费者来访问,可能就会拿到真正过时的服务的状况。
Zuul的原理: 经过一个统一的Servlet入口ZuulServlet拦截全部的请求,而后经过ZuulFilter链对请求作拦截和过滤处理。Zuul大部分功能都是经过过滤器来实现的,Zuul中定义了4种标准的过滤器,这些过滤器对应于请求的典型生命周期:
PRE: 请求路由到某个服务以前调用,能够实现身份验证等
ROUTING: 用于构建发送给微服务的请求,并经过HttpClient 或 Ribbon 请求微服务
POST: 在请求路由到微服务之后执行,能够为响应结果添加Http Header, 将结果发送给客户端
ERROR: 在其它阶段发生错误的时候执行该过滤器
微服务数量比较多的时候,配置管理就比较复杂了,SpringCloud Config经过分布式配置中心来统一管理配置文件并能够实时更新。Config Server用于配置属性的存储,Config Client用于服务属性的读取。
当配置文件须要动态更新的时候,能够经过Bus在不关闭服务的状况下更新咱们的配置。
Fegin 经过代理模式自动将全部的方法用Hystrix进行了包装,目的是在调用方实施针对被调用微服务的熔断逻辑,针对被调用服务设置超时时间,一旦超时就会进入熔断逻辑,而这个故障指标信息也会返回给Hystrix组件,hystrix根据故障信息打开断路器,以后全部针对该微服务的请求都会直接进入熔断逻辑,直到故障恢复关闭断路器为止。
SpringCloud SpringBoot 这套技术栈,你们平时本身使用的过程,可能以为比较简单,不过了解其底层实现细节,对咱们写出高性能的服务架构确定大有裨益。好比在了解原理后,咱们知道Hystrix在有大量的请求时,若是默认使用线程池可能会频繁的线程切换,更加剧系统性能,这时候能够考虑切换了。
最后欢迎你们关注“开发运维技术圈”公众号,群里有阿里云,蚂蚁,口碑,字节的同窗,也有各类岗位内推哦!