前言
Spring Cloud 是一系列框架的有序集合。它利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,均可以用 Spring Boot 的开发风格作到一键启动和部署。Spring Cloud 并无重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,经过 Spring Boot 风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
前端
小编分享的这份金三银四Java后端开发面试总结包含了JavaOOP、Java集合容器、Java异常、并发编程、Java反射、Java序列化、JVM、Redis、Spring MVC、MyBatis、MySQL数据库、消息中间件MQ、Dubbo、Linux、ZooKeeper、 分布式&数据结构与算法等26个专题技术点,都是小编在各个大厂总结出来的面试真题,已经有不少粉丝靠这份PDF拿下众多大厂的offer,今天在这里总结分享给到你们!【持续更新中!】java
完整版Java面试题地址:2021最新面试题合集集锦。git
1、 什么是微服务架构
1. 什么是微服务架构
微服务架构就是将单体的应用程序分红多个应用程序,这多个应用程序就成为微服务,每一个微服务运行在本身的进程中,并使用轻量级的机制通讯。这些服务围绕业务能力来划分,并经过自动化部署机制来独立部署。这些服务可使用不一样的编程语言,不一样数据库,以保证最低限度的集中式管理。 程序员
2. 为何须要学习Spring Cloud
- 首先springcloud基于spingboot的优雅简洁,可还记得咱们被无数xml支配的恐惧?可还记得 springmvc,mybatis错综复杂的配置,有了spingboot,这些东西都不须要了,spingboot好处不 再赘诉,springcloud就基于SpringBoot把市场上优秀的服务框架组合起来,经过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理
- 什么叫作开箱即用?即便是当年的黄金搭档dubbo+zookeeper下载配置起来也是颇费心神的!而springcloud完成这些只须要一个jar的依赖就能够了!
- springcloud大多数子模块都是直击痛点,像zuul解决的跨域,fegin解决的负载均衡,hystrix的熔断机制等等等等
3. Spring Cloud 是什么
- Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、智能路由、消息总线、负载均衡、断路器、数据监控等,均可以用Spring Boot的开发风格作到一键启动和部署。
- Spring Cloud并无重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,经过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
4. SpringCloud的优缺点
优势:web
1.耦合度比较低。不会影响其余模块的开发。 面试
2.减轻团队的成本,能够并行开发,不用关注其余人怎么开发,先关注本身的开发。 算法
3.配置比较简单,基本用注解就能实现,不用使用过多的配置文件。 spring
4.微服务跨平台的,能够用任何一种语言开发。 数据库
5.每一个微服务能够有本身的独立的数据库也有用公共的数据库。 编程
6.直接写后端的代码,不用关注前端怎么开发,直接写本身的后端代码便可,而后暴露接口,经过组件进行服务通讯。
缺点:
1.部署比较麻烦,给运维工程师带来必定的麻烦。
2.针对数据的管理比麻烦,由于微服务能够每一个微服务使用一个数据库。
3.系统集成测试比较麻烦
4.性能的监控比较麻烦。【最好开发一个大屏监控系统】
- 总的来讲优势大过于缺点,目前看来Spring Cloud是一套很是完善的分布式框架,目前不少企业开始用微服务、Spring Cloud的优点是显而易见的。所以对于想研究微服务架构的同窗来讲,学习Spring Cloud是一个不错的选择。
5. SpringBoot和SpringCloud的区别?
- SpringBoot专一于快速方便的开发单个个体微服务。
- SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,
- 为各个微服务之间提供,配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等集成服务
- SpringBoot能够离开SpringCloud独立使用开发项目, 可是SpringCloud离不开SpringBoot ,属于依赖的关系
- SpringBoot专一于快速、方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架。
6. Spring Cloud和SpringBoot版本对应关系

7. SpringCloud由什么组成
- 这就有不少了,我讲几个开发中最重要的
- Spring Cloud Eureka:服务注册与发现
- Spring Cloud Zuul:服务网关
- Spring Cloud Ribbon:客户端负载均衡
- Spring Cloud Feign:声明性的Web服务客户端
- Spring Cloud Hystrix:断路器
- Spring Cloud Confifig:分布式统一配置管理
- 等20几个框架,开源一直在更新
8. 使用 Spring Boot 开发分布式微服务时,咱们面临什么问题
- (1)与分布式系统相关的复杂性-这种开销包括网络问题,延迟开销,带宽问题,安全问题。
- (2)服务发现-服务发现工具管理群集中的流程和服务如何查找和互相交谈。它涉及一个服务目录,在该目录中注册服务,而后可以查找并链接到该目录中的服务。
- (3)冗余-分布式系统中的冗余问题。
- (4)负载平衡 --负载平衡改善跨多个计算资源的工做负荷,诸如计算机,计算机集群,网络链路,中央处理单元,或磁盘驱动器的分布。
- (5)性能-问题 因为各类运营开销致使的性能问题。
9. Spring Cloud 和dubbo区别?
- (1)服务调用方式:dubbo是RPC springcloud Rest Api
- (2)注册中心:dubbo 是zookeeper springcloud是eureka,也能够是zookeeper
- (3)服务网关,dubbo自己没有实现,只能经过其余第三方技术整合,springcloud有Zuul路由网关,做为路由服务器,进行消费者的请求分发,springcloud支持断路器,与git完美集成配置文件支持版本控制,事物总线实现配置文件的更新与服务自动装配等等一系列的微服务架构要素。
2、Eureka
10. 服务注册和发现是什么意思?Spring Cloud 如何实现?

11. 什么是Eureka
- Eureka做为SpringCloud的服务注册功能服务器,他是服务注册中心,系统中的其余服务使用Eureka的客户端将其链接到Eureka Service中,而且保持心跳,这样工做人员能够经过EurekaService来监控各个微服务是否运行正常。
12. Eureka怎么实现高可用
- 集群吧,注册多台Eureka,而后把SpringCloud服务互相注册,客户端从Eureka获取信息时,按照Eureka的顺序来访问。
13. 什么是Eureka的自我保护模式,
- 默认状况下,若是Eureka Service在必定时间内没有接收到某个微服务的心跳,Eureka Service会进入自我保护模式,在该模式下Eureka Service会保护服务注册表中的信息,不在删除注册表中的数据,当网络故障恢复后,Eureka Servic 节点会自动退出自我保护模式
14. DiscoveryClient的做用
- 能够从注册中心中根据服务别名获取注册的服务器信息。
15. Eureka和ZooKeeper均可以提供服务注册与发现的功能,请说说两个的区别
- ZooKeeper中的节点服务挂了就要选举 在选举期间注册服务瘫痪,虽然服务最终会恢复,可是选举期间不可用的, 选举就是改微服务作了集群,必须有一台主其余的都是从
- Eureka各个节点是平等关系,服务器挂了不要紧,只要有一台Eureka就能够保证服务可用,数据都是最新的。 若是查询到的数据并非最新的,就是由于Eureka的自我保护模式致使的
- Eureka本质上是一个工程,而ZooKeeper只是一个进程
- Eureka能够很好的应对因网络故障致使部分节点失去联系的状况,而不会像ZooKeeper 同样使得整个注册系统瘫痪
- ZooKeeper保证的是CP,Eureka保证的是AP
CAP: C:一致性>Consistency; 取舍:(强一致性、单调一致性、会话一致性、最终一致性、弱一致性) A:可用性>Availability; P:分区容错性>Partition tolerance;
3、Zuul
16. 什么是网关?
- 网关至关于一个网络服务架构的入口,全部网络请求必须经过网关转发到具体的服务。
17. 网关的做用是什么
- 统一管理微服务请求,权限控制、负载均衡、路由转发、监控、安全控制黑名单和白名单等
18. 什么是Spring Cloud Zuul(服务网关)

19. 网关与过滤器有什么区别
- 网关是对全部服务的请求进行分析过滤,过滤器是对单个服务而言。
20. 经常使用网关框架有那些?
21. Zuul与Nginx有什么区别?
- Zuul是java语言实现的,主要为java服务提供网关服务,尤为在微服务架构中能够更加灵活的对网关进行操做。Nginx是使用C语言实现,性能高于Zuul,可是实现自定义操做须要熟悉lua语言,对程序员要求较高,可使用Nginx作Zuul集群。
22. 既然Nginx能够实现网关?为何还须要使用Zuul框架
- Zuul是SpringCloud集成的网关,使用Java语言编写,能够对SpringCloud架构提供更灵活的服务。
23. 如何设计一套API接口
- 考虑到API接口的分类能够将API接口分为开发API接口和内网API接口,内网API接口用于局域网,为内部服务器提供服务。开放API接口用于对外部合做单位提供接口调用,须要遵循Oauth2.0权限认证协议。同时还须要考虑安全性、幂等性等问题。
24. ZuulFilter经常使用有那些方法
- Run():过滤器的具体业务逻辑
- shouldFilter():判断过滤器是否有效
- fifilterOrder():过滤器执行顺序
- fifilterType():过滤器拦截位置
25. 如何实现动态Zuul网关路由转发
- 经过path配置拦截请求,经过ServiceId到配置中心获取转发的服务列表,Zuul内部使用Ribbon实现本地负载均衡和转发。
26. Zuul网关如何搭建集群
- 使用Nginx的upstream设置Zuul服务集群,经过location拦截请求并转发到upstream,默认使用轮询机制对Zuul集群发送请求。
4、Ribbon
27. 负载平衡的意义什么?

28. Ribbon是什么?

29. Nginx与Ribbon的区别

30. Ribbon底层实现原理
- Ribbon使用discoveryClient从注册中心读取目标服务信息,对同一接口请求进行计数,使用%取余算法获取目标服务集群索引,返回获取到的目标服务信息。
@LoadBalanced注解的做用
5、Hystrix
31. 什么是断路器

32. 什么是 Hystrix?

33. 谈谈服务雪崩效应

34. 在微服务中,如何保护服务?

35. 服务雪崩效应产生的缘由
- 由于Tomcat默认状况下只有一个线程池来维护客户端发送的全部的请求,这时候某一接口在某一时刻被大量访问就会占据tomcat线程池中的全部线程,其余请求处于等待状态,没法链接到服务接口。
36. 谈谈服务降级、熔断、服务隔离

37. 服务降级底层是如何实现的?
- Hystrix实现服务降级的功能是经过重写HystrixCommand中的getFallback()方法,当Hystrix的run方法或construct执行发生错误时转而执行getFallback()方法。
6、Feign
38. 什么是Feign?
- Feign 是一个声明web服务客户端,这使得编写web服务客户端更容易
- 他将咱们须要调用的服务方法定义成抽象方法保存在本地就能够了,不须要本身构建Http请求了,直接调用接口就好了,不过要注意,调用方法要和本地抽象方法的签名彻底一致。
39. SpringCloud有几种调用接口方式
40. Ribbon和Feign调用服务的区别

7、Bus
41. 什么是 Spring Cloud Bus?

8、Config
42. 什么是Spring Cloud Config?

43. 分布式配置中心有那些框架?
- Apollo、zookeeper、springcloud confifig。
44. 分布式配置中心的做用?
45. SpringCloud Config 能够实现实时刷新吗?
- springcloud confifig实时刷新采用SpringCloud Bus消息总线。
9、Gateway
46. 什么是Spring Cloud Gateway?

10、 SpringCloud主要项目
47. SpringCloud主要项目
- Spring Cloud的子项目,大体可分红两类,一类是对现有成熟框架"Spring Boot化"的封装和抽象,也是数量最多的项目;第二类是开发了一部分分布式系统的基础设施的实现,如Spring CloudStream扮演的就是kafka, ActiveMQ这样的角色。
Spring Cloud Config

Spring Cloud Netflix(重点,这些组件用的最多)

Spring Cloud Bus

Spring Cloud Consul

Spring Cloud Security

Spring Cloud Sleuth


Spring Cloud Stream
- 轻量级事件驱动微服务框架,可使用简单的声明式模型来发送及接收消息,主要实现为Apache Kafka及RabbitMQ。
Spring Cloud Task
- Spring Cloud Task的目标是为Spring Boot应用程序提供建立短运行期微服务的功能。在Spring Cloud Task中,咱们能够灵活地动态运行任何任务,按需分配资源并在任务完成后检索结果。 Tasks是Spring Cloud Data Flow中的一个基础项目,容许用户将几乎任何Spring Boot应用程序做为一个短时间任务执行。
Spring Cloud Zookeeper
- SpringCloud支持三种注册方式Eureka, Consul(go语言编写),zookeeper
- Spring Cloud Zookeeper是基于Apache Zookeeper的服务治理组件。
Spring Cloud Gateway

Spring Cloud OpenFeign
- Feign是一个声明性的Web服务客户端。它使编写Web服务客户端变得更容易。要使用Feign,咱们能够将调用的服务方法定义成抽象方法保存在本地添加一点点注解就能够了,不须要本身构建Http请求了,直接调用接口就好了,不过要注意,调用方法要和本地抽象方法的签名彻底一致。
Spring Cloud的版本关系

48. Spring Cloud和SpringBoot版本对应关系

49. Spring Cloud和各子项目版本对应关系
