⾯试:SpringBootSpringCloud当下最流⾏的微服务框架常⽤⾯试题---附加答案SpringBoot&SpringCloud ⾯试题。
其他推荐:
1.什么是 Spring Boot?
Spring Boot 是解决这个问题的⽅法。Spring Boot 已经建⽴在现有 spring 框架之上。使⽤ spring 启动,我们避免了之前我们必须做的所有样板代码和配置。因此,Spring Boot 可以 帮助我们以最少的⼯作量,更加健壮地使⽤现有的 Spring 功能。
2.Spring Boot 有哪些优点?
答: 独⽴运⾏、简化配置、⾃动配置、⽆代码⽣成和XML配置、 应⽤监控、上⼿容易
3.什么是 JavaConfig?
答: Spring JavaConfig 是 Spring 社区的产品,它提供了配置 Spring IoC 容器的纯 Java ⽅法。因此 它有助于避免使⽤ XML 配置。使⽤ JavaConfig 的优点在于:
⾯向对象的配置。由于配置被定义为 JavaConfig 中的类,因此⽤户可以充分利⽤ Java 中的 ⾯向对象功能。⼀个配置类可以继承另⼀个,重写它的@Bean ⽅法等。 减少或消除 XML 配置。基于依赖注⼊原则的外化配置的好处已被证明。但是,许多开发⼈员不希望在 XML 和Java 之间来回切换。JavaConfig 为开发⼈员提供了⼀种纯 Java ⽅法来配 置与 XML 配置概念相似的 Spring 容器。从技术⾓度来讲,只使⽤ JavaConfig 配置类来配置 容器是可⾏的,但实际上很多⼈认为将 JavaConfig 与 XML 混合匹配是理想的。 类型安全和重构友好。JavaConfig 提供了⼀种类型安全的⽅法来配置 Spring 容器。由于 Java 5.0 对泛型的⽀持,现在可以按类型⽽不是按名称检索 bean,不需要任何强制转换或 基于字符串的查。
4.如何重新加载 Spring Boot 上的更改,⽽⽆需重新启动服务器?
答: 这可以使⽤ DEV ⼯具来实现。通过这种依赖关系,您可以**节省任何更改,嵌⼊式 tomcat 将重新启动。**Spring Boot 有⼀个开发⼯具(DevTools)模块,它有助于提⾼开发⼈员的⽣ 产⼒。Java 开发⼈员⾯临的⼀个主要挑战是将⽂件更改⾃动部署到服务器并⾃动重启服务 器。开发⼈员可以重新加载 Spring Boot 上的更改,⽽⽆需重新启动服务器。这将消除每次 ⼿动部署更改的需要。Spring Boot
在发布它的第⼀个版本时没有这个功能。这是开发⼈员 最需要的功能。DevTools 模块完全满⾜开发⼈员的需求。该模块将在⽣产环境中被禁⽤。 它还提供 H2 数据库控制台以更好地测试应⽤程序。
5.Spring Boot 中的监视器是什么?
答: Spring boot actuator 是 spring 启动框架中的重要功能之⼀。Spring boot 监视器可帮助您访问⽣产环境中正在运⾏的应⽤程序的当前状态。有⼏个指标必须在⽣产环境中进⾏检查和 监控。即使⼀些外部应⽤程序可能正在使⽤这些服务来向相关⼈员触发警报消息。监视器 模块公开了⼀组可直接作为 HTTP URL 访问的 REST 端点来检查状态。
6.如何在 Spring Boot 中禁⽤ Actuator 端点安全性?
答: 默认情况下,所有敏感的 HTTP 端点都是安全的,只有具有 ACTUATOR ⾓⾊的⽤户才能访 问它们。安全性是使⽤标准的HttpServletRequest.isUserInRole ⽅法实施的。 我们可以使⽤ abled = false 来禁⽤安全性。只有在执⾏机构端点在防⽕墙后访问时,才建议禁⽤安全性。
7.如何在⾃定义端⼝上运⾏ Spring Boot 应⽤程序?
答: 为了在⾃定义端⼝上运⾏ Spring Boot 应⽤程序,您可以在 application.properties 中指定端⼝。 server.port = 8090
8.什么是 YAML?
答: YAML 是⼀种⼈类可读的数据序列化语⾔。它通常⽤于配置⽂件。 与属性⽂件相⽐,如果我们想要在配置⽂件中添加复杂的属
性,YAML ⽂件就更加结构 化,⽽且更少混淆。可以看出 YAML 具有分层配置数据
9.如何实现 Spring Boot 应⽤程序的安全性?
答: 为了实现 Spring Boot 的安全性,我们使⽤ spring-boot-starter-security 依赖项,并且必须添 加安全配置。它只需要很少的代码。配置类将必须扩展 WebSecurityConfigurerAdapter 并覆 盖其⽅法。
答: 对于集成 Spring Boot 和 ActiveMQ,我们使⽤ spring-boot-starter-activemq 依赖关系。 它只需要很少的配置,并且不需要样板代码。
11.如何使⽤ Spring Boot 实现分页和排序?
答: 使⽤ Spring Boot 实现分页⾮常简单。使⽤ Spring Data-JPA 可以实现将可分页的
org.springframework.data.domain.Pageable 传递给存储库⽅法。
12.什么是 Swagger?你⽤ Spring Boot 实现了它吗?
答: Swagger ⼴泛⽤于可视化 API,使⽤ Swagger UI 为前端开发⼈员提供在线沙箱。 Swagger 是⽤于⽣成 RESTful Web 服务的可视化表⽰的⼯具,规范和完整框架实现。它使⽂档能够以 与服务器相同的速度更新。当通过 Swagger 正确定义时,消费者可以使⽤最少量的实现逻 辑来理解远程服务并与其进⾏交互。因此,Swagger 消除了调⽤服务时的猜测。
13.什么是 Spring Profiles?
答: Spring Profiles 允许⽤户根据配置⽂件(dev,test,prod 等)来注册 bean。因此,当应⽤ 程序在开发中运⾏时,只有某些 bean 可以加载,⽽在 PRODUCTION 中,某些其他 bean 可 以加载。假设我们的要求是 Swagger ⽂档仅适⽤于 QA 环境,并且禁⽤所有其他⽂档。这 可以使⽤配置⽂件来完成。Spring Boot 使得使⽤配置⽂件⾮常简单。
14.什么是 Spring Batch?
答: Spring Boot Batch 提供可重⽤的函数,这些函数在处理⼤量记录时⾮常重要,**包括⽇志/跟 踪,事务管理,作业处理统计信息,作业重新启动,跳过和资源管理。**它还提供了更先进 的技术服务和功能,通过优化和分区技术,可以实现极⾼批量和⾼性能批处理作业。简单 以及复杂的⼤批量批处理作业可以⾼度可扩展的⽅式利⽤框架处理重要⼤量的信息。
15.如何使⽤ Spring Boot 实现异常处理?
答: Spring 提供了⼀种使⽤ ControllerAdvice 处理异常的⾮常有⽤的⽅法。 我们通过实现⼀个 ControlerAdvice 类,来处理控制器类抛出的所有异常。
16.我们如何监视所有 Spring Boot 微服务?
答: Spring Boot 提供监视器端点以监控各个微服务的度量。这些端点对于获取有关应⽤程序的 **信息(如它们是否已启动)以及它们的组件(如数据库等)**是否正常运⾏很有帮助。但 是,使⽤监视器的⼀个主要缺点或困难是,我们必须单独打开应⽤程序的知识点以了解其状态或健康状况。想象⼀下涉及 50 个应⽤程序的微服务,管理员将不得不击中所有 50 个 应⽤程序的执⾏终端。
17.Spring Boot 的核⼼配置⽂件有哪⼏个?它们的区别是什么?
答: Spring Boot 的核⼼配置⽂件是 application 和 bootstrap 配置⽂件。application 配置⽂件主要⽤于 Spring Boot 项⽬的⾃动化配置。
spring ioc注解bootstrap 配置⽂件有以下⼏个应⽤场景。
1. 使⽤ Spring Cloud Config 配置中⼼时,这时需要在 bootstrap 配置⽂件中添加连接到配置中⼼的配置属性来加载外部配置中⼼的
配置信息。
2. ⼀些固定的不能被覆盖的属性。
3. ⼀些加密/解密的场景。
18.Spring Boot 的核⼼注解是哪个?它主要由哪⼏个注解组成的?
答: @SpringBootApplication。 @Configuration、@EnableAutoConfiguration、@ComponentScan组成。
19.开启 Spring Boot 特性有哪⼏种⽅式?
1. 继承spring-boot-starter-parent项⽬
2. 导⼊spring-boot-dependencies项⽬依赖
20.Spring Boot 需要独⽴的容器运⾏吗?
答: 内置了 Tomcat/ Jetty 等容器,不需要独⽴容器。
答: Starters可以理解为启动器,它包含了⼀系列可以集成到应⽤⾥⾯的依赖包,你可以⼀站式集成Spring及其他技术,⽽不需要到处⽰例代码和依赖包。如你想使⽤Spring JPA访问数据库,只要加
⼊spring-boot-starter-data-jpa启动器依赖就能使⽤了。
Starters包含了许多项⽬中需要⽤到的依赖,它们能快速持续的运⾏,都是⼀系列得到⽀持的管理传递性依赖。
22.如何将Spring Boot应⽤程序作为war包部署?
答: 在l⽂件中将 packaging 修改为war如下代码:
<groupId>com.javainuse</groupId>
<artifactId>temp-page</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
接下来,修改Spring BootStrap类,该类扩展了SpringBootServletInitializer类,以初始化Tomcat所需的Servlet上下⽂。
@SpringBootApplication
public class SpringBootHelloWorldApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application){
return application.sources(SpringBootHelloWorldApplication.class);
}
public static void main(String[] args){
SpringApplication.run(SpringBootHelloWorldApplication.class, args);
}
}
运⾏maven命令-clean install,然后在⽬标⽂件夹中创建⼀个war⽂件。
23.SpringBoot 中怎么禁⽤某些⾃动配置特性?
答: @EnableAutoConfiguration 或 @SpringBootApplication 注解的 exclude 属性来指明。
24.什么是Spring Cloud?
答: Spring cloud流应⽤程序启动器是基于Spring Boot的Spring集成应⽤程序,提供与外部系统的集成。 Spring cloud Task,⼀个⽣命周期短暂的微服务框架,⽤于快速构建执⾏有限数据处理的应⽤程序。
25.使⽤Spring Cloud有什么优势?
答: 使⽤Spring Boot开发分布式微服务时,我们⾯临以下问题。
1. 与分布式系统相关的复杂性-这种开销包括⽹络问题,延迟开销,带宽问题,安全问题。
2. 服务发现-服务发现⼯具管理集中的流程和服务如何查和互相交谈。它涉及⼀个服务⽬录,在该 ⽬录中注册服务,然后能够查并
连接到该⽬录中的服务。
3. 冗余-分布式系统中的冗余问题。
4. 负载平衡 --负载平衡改善跨多个计算资源的⼯作负荷,诸如计算机,计算机集,⽹络链路,中央 处理单元,或磁盘驱动器的分布。
5. 性能-问题 由于各种运营开销导致的性能问题。
6. 部署复杂性-Devops技能的要求。
26.服务注册和发现是什么意思?Spring Cloud如何实现?
答: 当我们开始⼀个项⽬时,我们通常在属性⽂件中进⾏所有的配置。随着越来越多的服务开发和部署,添加 和修改这些属性变得更加复杂。有些服务可能会下降,⽽某些位置可能会发⽣变化。⼿动更改属性可能会 产⽣问题。 Eureka服务注册和发现可以在这种情况下提供帮助。由于所有服务都在Eureka服务器上注 册并通过调⽤Eureka服务器完成查,因此⽆需处理服务地点的任何更改和处理。
27.负载平衡的意义什么?
答: 在计算中,负载平衡可以改善跨计算机,计算机集,⽹络链接,中央处理单元或磁盘驱动器等多种计算 资源的⼯作负载分布。负载平衡旨在优化资源使⽤,最⼤化吞吐量,最⼩化响应时间并避免任何单⼀资源 的过载。使⽤多个组件进⾏负载平衡⽽不是单个组件可能会通过冗余来提⾼可靠性和可⽤性。负载平衡通 常涉及专⽤软件或硬件,例如多层交换机或域名系统服务器进程。
28.ribbon和feign区别
答:
1. 启动类使⽤的注解不同,Ribbon⽤的是@RibbonClient,Feign⽤的@EnableFeignClients。
2. 服务的指定位置不同,Ribbon是在@RibbonClient注解上声明,Feign则是在定义抽象⽅法的接⼝中使⽤@FeignClient声明。
3. 调⽤⽅式不同:Ribbon需要⾃⼰构建http请求,模拟http请求然后使⽤RestTemplate发送给其他服务,步骤相当繁琐。Feign则是
在Ribbon的基础上进⾏了⼀次改进,采⽤接⼝的⽅式,将需要调⽤的其他服务的⽅法定义成抽象⽅法即可, 不需要⾃⼰构建http请求。不过要注意的是抽象⽅法的注解、⽅法签名要和提供服务的⽅法完全⼀致。
29.什么是Hystrix?它如何实现容错?
答: Hystrix是⼀个延迟和容错库,旨在隔离远程系统,服务和第三⽅库的访问点,当出现故障是不可避免的 故障时,停⽌级联故障并在复杂的分布式系统中实现弹性。
30.什么是Hystrix断路器?我们需要它吗?
答: 当⼀个服务调⽤另⼀个服务由于⽹络原因或者⾃⾝原因出现问题时 调⽤者就会等待被调⽤者的响应 当更多的服务请求到这些资源时导致更多的请求等待,这样就会发⽣连锁效应(雪崩效应),断路器就是解决这⼀问题。
由于某些原因,公开服务会引发异常。在这种情况下使⽤Hystrix我们定义了⼀个 回退⽅法。如果在公开服务中发⽣异常,则回退⽅法返回⼀些默认值。
如果firstPage method() 中的异常继续发⽣,则Hystrix电路将中断,并且员⼯使⽤者将⼀起跳过 firtsPage⽅法,并直接调⽤回退⽅法。断路器的⽬的是给第⼀页⽅法或第⼀页⽅法可能调⽤的其他⽅法 留出时间,并导致异常恢复。可能发⽣的情况是,在负载较⼩的情况下,导致异常的问题有更好的恢复机会 。
31.什么是Netflix Feign?它的优点是什么?
答: Feign是受到Retrofit,JAXRS-2.0和WebSocket启发的java客户端联编程序。Feign的第⼀个⽬标 是将约束分母的复杂性统⼀到http apis,⽽不考虑其稳定性。
32.spring cloud 与dubbo的区别是什么
答: 最⼤的区别:Dubbo底层是使⽤Netty这样的NIO框架,是基于TCP协议传输的,配合以Hession序列化完成RPC通信。
⽽SpringCloud是基于Http协议+Rest接⼝调⽤远程过程的通信,相对来说,Http请求会有更⼤的报⽂,占的带宽也会更多。但是REST相⽐RPC更为灵活,服务提供⽅和调⽤⽅的依赖只依靠⼀纸契约,不存在代码级别的强依赖。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论