25个你必须掌握的微服务框架⾯试题(含答案解析)
“全⽅位总结⼀下所遇到的⾯试题⽬,与⼤家共同学习,也是对⾃⼰的⼀次总结”
今天给朋友们分享我花了将近⼀个⽉时间,参考了很多⽹上的优质博⽂和项⽬整理的⼀份⽐较全⾯的java⾯试题集,还有⾯试前刷过的题⽬。很多朋友靠着这些内容进⾏复习,拿到了⼤⼚的offer, 也已经帮助了很多的java学习者,希望也能帮助到你。
另外,宣传⼀下⾃⼰做过的⼀些java项⽬: ,希望有兴趣的同学,可以⼀起学习。
⼤家也可以直接访问(直接在线观看java最新版的⾯试题+⼊门教程):
微服务框架:
1.Spring Boot有哪些优点?
答:Spring Boot的优点有:
减少开发,测试时间和努⼒。
使⽤JavaConfig有助于避免使⽤XML。
避免⼤量的Maven导⼊和各种版本冲突。
提供意见发展⽅法。
通过提供默认值快速开始开发。
没有单独的Web服务器需要。这意味着你不再需要启动Tomcat,Glassfish或其他任何东西。
需要更少的配置 因为没有l⽂件。只需添加⽤@ Configuration注释的类,然后添加⽤@Bean注释的⽅法,Spring将⾃动加载对象并像以前⼀样对其进⾏管理。您甚⾄可以将@Autowired添加到bean⽅法中,以使Spring⾃动装⼊需要的依赖关系中。
基于环境的配置 使⽤这些属性,您可以将您正在使⽤的环境传递到应⽤程序:-Dspring.profiles.active = {enviornment}。在加载主应⽤程序属性⽂件后,Spring将在(application{environment} .properties)中加载后续的应⽤程序属性⽂件。
2.如何重新加载Spring Boot上的更改,⽽⽆需重新启动服务器?
答:这可以使⽤DEV⼯具来实现。通过这种依赖关系,您可以节省任何更改,嵌⼊式tomcat将重新启动。Spring Boot有⼀个开发⼯具(DevTools)模块,它有助于提⾼开发⼈员的⽣产⼒。Java开发⼈员⾯临的⼀个主要挑战是将⽂件更改⾃动部署到服务器并⾃动重启服务器。开发⼈员可以重新加载Spring Boot上的更改,⽽⽆需重新启动服务器。这将消除每次⼿动部署更改的需要。Spring Boot在发布它的第⼀个版本时没有这个功能。这是开发⼈员最需要的功能。DevTools模块完全满⾜开发⼈员的需求。该模块将在⽣产环境中被禁⽤。它还提供H2数据库控制台以更好地测试应⽤程序。
分布式和微服务的关系3.常见的系统架构风格有哪些?各有什么优缺点?
1、单体架构
单体架构也称之为单体系统或者是单体应⽤。就是⼀种把系统中所有的功能、模块耦合在⼀个应⽤中的架构⽅式。
单体架构特点:打包成⼀个独⽴的单元(导成⼀个唯⼀的jar包或者是war包),会⼀个进程的⽅式来运⾏。
单体架构的优点、缺点
优点:
项⽬易于管理
部署简单
缺点:
测试成本⾼
可伸缩性差
可靠性差
迭代困难
跨语⾔程度差
团队协作难
2、MVC架构
MVC架构特点:
MVC是模型(Model)、视图(View)、控制器(Controller)3个单词的缩写。 下⾯我们从这3个⽅⾯来讲解MVC中的三个要素。
Model是指数据模型,是对客观事物的抽象。 如⼀篇博客⽂章,我们可能会以⼀个Post类来表⽰,那么,这个Post类就是数据对象。 同时,博客⽂章还有⼀些业务逻辑,如发布、回收、评论等,这⼀般表现为类的⽅法,这也是model的内容和范畴。 对于Model,主要是数据、业务逻辑和业务规则。相对⽽⾔,这是MVC中⽐较稳定的部分,⼀般成品后不会改变。 开发初期的最重要任务,主要也是实现Model 的部分。这⼀部分写得好,后⾯就可以改得少,开发起来就快。
View是指视图,也就是呈现给⽤户的⼀个界⾯,是model的具体表现形式,也是收集⽤户输⼊的地⽅。 如你在某个博客上看到的某⼀篇⽂章,就是某个Post类的表现形式。 View的⽬的在于提供与⽤户交互的界⾯。换句话说,对于⽤户⽽⾔,只有View是可见的、可操作的。事实上也是如此,你不会让⽤户看到Model,更不会让他直接操作Model。 你只会让⽤户看到你想让他看的内容。 这就是View要做的事,他往往是MVC中变化频繁的部分,也是客户经常要求改来改去的地⽅。 今天你可能会以⼀种形式来展⽰你的博⽂,明天可能就变成别的表现形式了。
Contorller指的是控制器,主要负责与model和view打交道。 换句话说,model和view之间⼀般不直接打交道,他们⽼死不相往来。view 中不会对model作任何操作, model不会输出任何⽤于表现的东西,如HTML代码等。这俩甩⼿不⼲了,那总得有⼈来⼲吧,只能Controller上了。 Contorller⽤于决定使⽤哪些Model,对Model执⾏什么操作,为视图准备哪些数据,是MVC中沟通的桥梁。
MVC架构优缺点
优点:
各施其职,互不⼲涉。
在MVC模式中,三个层各施其职,所以如果⼀旦哪⼀层的需求发⽣了变化,就只需要更改相应的层中的代码⽽不会影响到其它层中的代码。
有利于开发中的分⼯。
在MVC模式中,由于按层把系统分开,那么就能更好的实现开发中的分⼯。⽹页设计⼈员可以进⾏开发视图层中的JSP,对业务熟悉的开发⼈员可开发业务层,⽽其它开发⼈员可开发控制层。
有利于组件的重⽤。
分层后更有利于组件的重⽤。如控制层可独⽴成⼀个能⽤的组件,视图层也可做成通⽤的操作界⾯。
缺点:
增加了系统结构和实现的复杂性。
视图与控制器间的过于紧密的连接。
视图对模型数据的低效率访问。
3、⾯向服务架构(SOA)
⾯向服务的架构(SOA)是⼀个组件模型,它将应⽤程序拆分成不同功能单元(称为服务)通过这些服务之间定义良好的接⼝和契约联系起来。接⼝是采⽤中⽴的⽅式进⾏定义的,它应该独⽴于实现服务的硬件平台、操作系统和编程语⾔。这使得构建在各种各样的系统中的服务可以以⼀种统⼀和通⽤的⽅式进⾏交互。
⾯向服务架构特点:
系统是由多个服务构成
每个服务可以单独独⽴部署
每个服务之间是松耦合的。服务内部是⾼内聚的,外部是低耦合的。⾼内聚就是每个服务只关注完成⼀个功能。
服务的优点、缺点
优点:
测试容易
可伸缩性强
可靠性强
跨语⾔程度会更加灵活
团队协作容易
系统迭代容易
缺点:
运维成本过⾼,部署数量较多
接⼝兼容多版本
分布式系统的复杂性
分布式事务
4.什么是AKF拆分原则?
业界对于可扩展的系统架构设计有⼀个朴素的理念,就是:通过加机器就可以解决容量和可⽤性问题。(如果⼀台不⾏那就两台)。
我是个段⼦:(世界上没有什么事是⼀顿烧烤不能解决的。如果有,那就两顿。)
这⼀理念在“云计算”概念疯狂流⾏的今天,得到了⼴泛的认可!对于⼀个规模迅速增长的系统⽽⾔,容量和性能问题当然是⾸当其冲的。但是随着时间的向前,系统规模的增长,除了⾯对性能与容量的问题外,还需要⾯对功能与模块数量上的增长带来的系统复杂性问题以及业务的变化带来的提供差异化服务问题。⽽许多系统,在架构设计时并未充分考虑到这些问题,导致系统的重构成为常态,从⽽影响业务交付能⼒,还浪费⼈⼒财⼒!对此,《可扩展的艺术》⼀书提出了⼀个更加系统的可扩展模型—— AKF可扩展⽴⽅ (Scalability Cube) 。这个⽴⽅体中沿着三个坐标轴设置分别为:X、Y、Z。
Y轴扩展会将庞⼤的整体应⽤拆分为多个服务。每个服务实现⼀组相关的功能,如订单管理、客户管理等。在⼯程上常见的⽅案是 服务化架构(SOA) 。⽐如对于⼀个电⼦商务平台,我们可以拆分成不同的服务
X轴扩展与我们前⾯朴素理念是⼀致的,通过绝对平等地复制服务与数据,以解决容量和可⽤性的问题。其实就是将微服务运⾏多个实例,做集加负载均衡的模式。
Z轴扩展通常是指基于请求者或⽤户独特的需求,进⾏系统划分,并使得划分出来的⼦系统是相互隔离但⼜是完整的。以⽣产汽车的⼯⼚来举例:福特公司为了发展在中国的业务,或者利⽤中国的廉价劳动⼒,在中国建⽴⼀个完整的⼦⼯⼚,与美国⼯⼚⼀样,负责完整的汽车⽣产。这就是⼀种Z轴扩展。
5.什么是Spring Cloud?
Spring Cloud是⼀个微服务框架,相⽐Dubbo等RPC框架, Spring Cloud提供的全套的分布式系统解决⽅案。
Spring Cloud对微服务基础框架Netflix的多个开源组件进⾏了封装,同时⼜实现了和云端平台以及和Spring Boot开发框架的集成。
Spring Cloud为微服务架构开发涉及的配置管理,服务治理,熔断机制,智能路由,微代理,控制总
线,⼀次性token,全局⼀致性
锁,leader选举,分布式session,集状态管理等操作提供了⼀种简单的开发⽅式。
Spring Cloud 为开发者提供了快速构建分布式系统的⼯具,开发者可以快速的启动服务或构建应⽤、同时能够快速和云平台资源进⾏对接
6.Spring Cloud与Dubbo的区别是什么?
7.什么是Eureka注册中⼼?
Eureka是Netflix开发的服务发现组件,本⾝是⼀个基于REST的服务。Spring Cloud将它集成在其⼦项
⽬spring-cloud-netflix中,以实现Spring Cloud的服务注册于发现,同时还提供了负载均衡、故障转移等能⼒。
8.简单谈⼀下Eureka中的三种⾓⾊分别是什么?
1、Eureka Server
通过Register、Get、Renew等接⼝提供服务的注册和发现。
2、Application Service (Service Provider)
服务提供⽅
把⾃⾝的服务实例注册到Eureka Server中
3、Application Client (Service Consumer)
服务调⽤⽅
通过Eureka Server 获取服务列表,消费服务。
9.什么是Ribbon
1.Ribbon 是⼀个基于Http和TCP的客服端负载均衡⼯具,它是基于Netflix Ribbon实现的。
2.它不像spring cloud服务注册中⼼、配置中⼼、API⽹关那样独⽴部署,但是它⼏乎存在于每个spring cloud 微服务中。包括feign提供的声明式服务调⽤也是基于该Ribbon实现的。
3.ribbon默认提供很多种负载均衡算法,例如 轮询、随机 等等。甚⾄包含⾃定义的负载均衡算法。
10.集中式与进程内负载均衡的区别
⽬前业界主流的负载均衡⽅案可分成两类:
第⼀类:集中式负载均衡, 即在consumer和provider之间使⽤独⽴的负载均衡设施(可以是硬件,如F5, 也可以是软件,如nginx), 由该设施负责把 访问请求 通过某种策略转发⾄provider;
第⼆类:进程内负载均衡,将负载均衡逻辑集成到consumer,consumer从服务注册中⼼获知有哪些地址可⽤,然后⾃⼰再从这些地址中选择出⼀个合适的provider。
Ribbon就属于后者,它只是⼀个类库,集成于consumer进程,consumer通过它来获取到provider的地址。
11.Ribbon的常见负载均衡策略有哪些?
12.简单说说什么是Feign?
Feign是⼀种声明式、模板化的HTTP客户端技术(仅在consumer中使⽤)。
13.什么是声明式,有什么作⽤,解决什么问题?
声明式调⽤就像调⽤本地⽅法⼀样调⽤远程⽅法;⽆感知远程http请求。
1、Spring Cloud的声明式调⽤, 可以做到使⽤ HTTP请求远程服务时能就像调⽤本地⽅法⼀样的体验,开发者完全感知不到这是远程⽅法,更感知不到这是个HTTP请求。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论