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

  • 时间:
  • 浏览:0
  • 来源:五分时时彩_玩五分时时彩的平台_五分时时彩下注平台

前言

随着 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