Spring Boot 面试,一个问题就干趴下了!

  • 时间:
  • 浏览:23
  • 来源:大发快三_快三在线稳定计划_大发快三在线稳定计划

前言

随着 Spring Boot 使用如此广泛,Spring Boot 肯能成为 Java 多多程序 员面试的知识点,过多同学对 Spring Boot 理解也有如此深刻,老是就会被十几个 连环跑给干趴下了!

比如下面你你你什儿 段的 Spring Boot 问答:

问:你我我觉得 Spring Boot 最大的优势是有哪些呢?

答:Spring Boot 的最大的优势是“约定优于配置“。“约定优于配置“是两种软件设计范式,开发人员按照约定的法律依据来进行编程,都可不都可以减少软件开发人员需做决定的数量,获得简单的好处,而又不失灵活性。

问:Spring Boot 中 “约定优于配置“的具体产品体现在哪里。

答:Spring Boot Starter、Spring Boot Jpa 也有“约定优于配置“的两种体现。也有通过“约定优于配置“的设计思路来设计的,Spring Boot Starter 在启动的过程中会根据约定的信息对资源进行初始化;Spring Boot Jpa 通过约定的法律依据来自动生成 Sql ,除理血块无效代码编写。具体完整篇 都可不都可以参考:Spring Boot 为有哪些如此火?

问:Spring Boot Starter 的工作原理是有哪些?

答:Spring Boot 在启动的以也有干这几件事情:

  • ① Spring Boot 在启动也有去依赖的 Starter 包中寻找 resources/META-INF/spring.factories 文件,否则根据文件中配置的 Jar 包去扫描项目所依赖的 Jar 包。

  • ② 根据 spring.factories 配置加载 AutoConfigure 类

  • ③ 根据 @Conditional 注解的条件,进行自动配置并将 Bean 注入 Spring Context

总结一下,我我觉得过多我 Spring Boot 在启动的已经 ,按照约定去读取 Spring Boot Starter 的配置信息,再根据配置信息对资源进行初始化,并注入到 Spring 容器中。原先 Spring Boot 启动完毕后,就肯能准备好了一切资源,使用过程中直接注入对应 Bean 资源即可。

这过多我简单的三连环问答,帮我知道有十几个 同学要能完整篇 的回答出来。

我我觉得 Spring Boot 中有 过多的技术点都可不都可以挖掘,今天给亲戚亲戚让当让我们让当让我们 分类整理了五个高频 Spring Boot 面试题,希望都可不都可以在后期的面试中帮助到亲戚亲戚让当让我们让当让我们 。

1、Spring Boot 的自动配置是何如实现的?

Spring Boot 项目的启动注解是:@SpringBootApplication,我我觉得它过多我由下面一个多多 注解组成的:

  • @Configuration

  • @ComponentScan

  • @EnableAutoConfiguration

其中 @EnableAutoConfiguration 是实现自动配置的入口,该注解又通过 @Import 注解导入了AutoConfigurationImportSelector,在该类中加载 META-INF/spring.factories 的配置信息。否则筛选出以 EnableAutoConfiguration 为 key 的数据,加载到 IOC 容器中,实现自动配置功能!

2、有哪些是嵌入式服务器?亲戚亲戚让当让我们让当让我们 为有哪些要使用嵌入式服务器呢?

思考一下在你的虚拟机上部署应用多多程序 都可不都可以些有哪些。

第一步:安装 Java

第二部:安装 Web 肯能是应用多多程序 的服务器(Tomat/Wbesphere/Weblogic 等等)

第三部:部署应用多多程序 war 包

肯能亲戚亲戚让当让我们让当让我们 想僵化 有有哪些步骤,应该何如做呢?

让亲戚亲戚让当让我们让当让我们 来思考何如使服务器成为应用多多程序 的一主次?

你只都可不都可以一个多多 安装了 Java 的虚拟机,就都可不都可以直接在后面 部署应用多多程序 了,

是也有很爽?

你你你什儿 想法是嵌入式服务器的起源。

当亲戚亲戚让当让我们让当让我们 创建一个多多 都可不都可以部署的应用多多程序 的已经 ,亲戚亲戚让当让我们让当让我们 肯能把服务器(类似于于,tomcat)嵌入到可部署的服务器中。

类似于于,对于一个多多 Spring Boot 应用多多程序 来说,给你生成一个多多 中有 Embedded Tomcat 的应用多多程序 jar。你就都可不都可以像运行正常 Java 应用多多程序 一样来运行 web 应用多多程序 了。

嵌入式服务器过多我亲戚亲戚让当让我们让当让我们 的可执行单元中有 服务器的二进制文件(类似于于,tomcat.jar)。

3、微服务一起调用多个接口,为社 会 支持事务的啊?

支持分布式事务,都可不都可以使用Spring Boot集成 Aatomikos来除理,否则我一般不建议原先使用,肯能使用分布式事务会增加请求的响应时间,影响系统的TPS。一般在实际工作中,会利用消息的补偿机制来除理分布式的事务。

4、shiro和oauth还有cas亲戚让当让我们让当让我们 之间的关系是有哪些?问下您公司权限是何如设计,还有过多我这十几个 概念的区别。

cas和oauth是一个多多 除理单点登录的组件,shiro主过多我负责权限安全方面的工作,过多功能点不一致。但往往都可不都可以单点登陆和权限控制一起来使用,过多也有 cas+shiro肯能oauth+shiro原先的组合。

token一般是客户端登录后服务端生成的令牌,每次访问服务端会进行校验,一般保存到内存即可,也都可不都可以装在你你什儿 介质;redis都可不都可以做Session共享,肯能前端web服务器有几台负载,否则都可不都可以保持用户登录的情況,这场景使用比较常见。

亲戚亲戚让当让我们让当让我们 公司使用oauth+shiro原先的法律依据来做后台权限的管理,oauth负责多后台统一登录认证,shiro负责给登录用户赋予不同的访问权限。

5、各服务之间通信,对Restful和Rpc这2种法律依据何如做选取?

在传统的SOA治理中,使用rpc的居多;Spring Cloud默认使用restful进行服务之间的通讯。rpc通讯速度会比restful要高你你什儿 ,否则对于大多数公司来讲,这点速度影响甚微。我建议使用restful你你你什儿 法律依据,易于在不同语言实现的服务之间通讯。

6、为社 会 设计无情況服务?

对于无情況服务,首先说一下有哪些是情況:肯能一个多多 数据都可不都可以被多个服务共享,要能完成一笔交易,如此你你你什儿 数据被称为情況。进而依赖你你你什儿 “情況”数据的服务被称为有情況服务,反之称为无情況服务。

如此你你你什儿 无情況服务原则并也有说在微服务架构里就不允许指在情況,表达的真实意思是要把有情況的业务服务改变为无情況的计算类服务,如此情況数据也就相应的迁移到对应的“有情況数据服务”中。

场景说明:类似于于亲戚亲戚让当让我们让当让我们 已经 在本地内存中建立的数据缓存、Session缓存,到现在的微服务架构中就应该把有有哪些数据迁移到分布式缓存中存储,让业务服务变成一个多多 无情況的计算节点。迁移后,就都可不都可以做到按需动态伸缩,微服务应用在运行时动态增删节点,就不再都可不都可以考虑缓存数据何如同步的现象。

7、Spring Cache 两种常用的缓存注解和意义?

@Cacheable ,用来声明法律依据是可缓存,将结果存储到缓存中以便后续使用相同参数调用时不需执行实际的法律依据,直接从缓存中取值。

@CachePut,使用 @CachePut 标注的法律依据在执行前,不想去检查缓存中是否指在已经 执行过的结果,过多我每次也有执行该法律依据,并将执行结果以键值对的形式存入指定的缓存中。

@CacheEvict,是用来标注在都可不都可以清除缓存元素的法律依据或类上的,当标记在一个多多 类上时表示其中所有的法律依据的执行也有触发缓存的清除操作。

8、Spring Boot 何如设置支持跨域请求?

现代浏览器出于安全的考虑, HTTP 请求时都可不都可以遵守同源策略,否则过多我跨域的 HTTP 请求,默认情況下是被禁止的,IP(域名)不同、肯能端口不同、协议不同(比如 HTTP、HTTPS)也有造成跨域现象。

一般前端的除理方案有:

  • ① 使用 JSONP 来支持跨域的请求,JSONP 实现跨域请求的原理简单的说,过多我动态创建<script>标签,否则利用<script>的 SRC 不受同源策略约束来跨域获取数据。缺点是可已经 端配合输出特定的返回信息。

  • ② 利用反应代理的机制来除理跨域的现象,前端请求的已经 先将请求发送到同源地址的后端,通已经 端请求转发来除理跨域的访问。

已经 HTML5 支持了 CORS 协议。CORS 是一个多多 W3C 标准,全称是”跨域资源共享”(Cross-origin resource sharing),允许浏览器向跨源服务器,发出 XMLHttpRequest 请求,从而克服了 AJAX 只能同源使用的限制。它通过服务器增加一个多多 特殊的 Header[Access-Control-Allow-Origin]来告诉客户端跨域的限制,肯能浏览器支持 CORS、否则判断 Origin 通过语录,就会允许 XMLHttpRequest 发起跨域请求。

前端使用了 CORS 协议,就可已经 端设置支持非同源的请求,Spring Boot 设置支持非同源的请求有两种法律依据。

第一,配置 CorsFilter。


@Configuration
public class GlobalCorsConfig {
    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
          config.addAllowedOrigin("*");
          config.setAllowCredentials(true);
          config.addAllowedMethod("*");
          config.addAllowedHeader("*");
          config.addExposedHeader("*");

        UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
        configSource.registerCorsConfiguration("/**", config);

        return new CorsFilter(configSource);
    }
}

都可不都可以配置上述的一段代码。第二种法律依据稍微简单你你什儿 。

第二,在启动类加在在:


public class Application extends WebMvcConfigurerAdapter {  

    @Override  
    public void addCorsMappings(CorsRegistry registry) {  

        registry.addMapping("/**")  
                .allowCredentials(true)  
                .allowedHeaders("*")  
                .allowedOrigins("*")  
                .allowedMethods("*");  

    }  
}  

9、JPA 和 Hibernate 有有哪些区别?JPA 都可不都可以支持动态 SQL 吗?

JPA两种是两种规范,它的本质是两种ORM规范(也有ORM框架,肯能JPA并未提供ORM实现,过多我制定了规范)肯能JPA是两种规范,过多,过多我提供了你你什儿 相关的接口,否则接口无须能直接使用,JPA底层都可不都可以两种JPA实现,Hibernate 是 JPA 的一个多多 实现集。

JPA 是根据实体类的注解来创建对应的表和字段,肯能都可不都可以动态创建表肯能字段,都可不都可以动态构建对应的实体类,再重新调用Jpa刷新整个Entity。动态SQL,mybatis支持的最好,jpa也都可不都可以支持,否则如此Mybatis如此灵活。

10、Spring 、Spring Boot 和 Spring Cloud 的关系?

Spring 最初最核心的两大核心功能 Spring Ioc 和 Spring Aop 成就了 Spring,Spring 在这两大核心的功能上不断的发展,才有了 Spring 事务、Spring Mvc 等一系列伟大的产品,最终成就了 Spring 帝国,到了后期 Spring 几乎都可不都可以除理企业开发中的所有现象。

Spring Boot 是在强大的 Spring 帝国生态基础后面 发展而来,发明 Spring Boot 也有为了取代 Spring ,是为了让亲戚亲戚让当让我们让当让我们 更容易的使用 Spring 。

Spring Cloud 是一系列框架的有序集合。它利用 Spring Boot 的开发便利性巧妙地僵化 了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可不都可以用 Spring Boot 的开发风格做到一键启动和部署。

Spring Cloud 是为了除理微服务架构中服务治理而提供的一系列功能的开发框架,否则 Spring Cloud 是完整篇 基于 Spring Boot 而开发,Spring Cloud 利用 Spring Boot 型态整合了开源行业中优秀的组件,整体对外提供了一套在微服务架构中服务治理的除理方案。

用一组不太合理的中有 关系来表达它们之间的关系。

Spring ioc/aop > Spring > Spring Boot > Spring Cloud