java面试背诵随笔(SpringBoot面试知识点 背诵第七天)

1、什么是 Spring Boot?

Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。
java面试背诵随笔(SpringBoot面试知识点 背诵第七天)_第1张图片

 

2、Spring Boot 有哪些优点?

        Spring Boot 主要有如下优点:
        1. 容易上手,提升开发效率,为 Spring 开发提供一个更快、更广泛的入门体验。
        2. 开箱即用,远离繁琐的配置。
        3. 提供了一系列大型项目通用的非业务性功能,例如:内嵌服务器、安全管理、运行数据监控、运行状况检查和外 部化配置等。
        4. 没有代码生成,也不需要XML配置。
        5. 避免大量的 Maven 导入和各种版本冲突。

3、Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?

        启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:
        @SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
        @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能:
        @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
        @ComponentScan:Spring组件扫描。

4、Spring Boot 自动配置原理是什么?

        注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是自动配置的核心, @EnableAutoConfiguration 给容器导入META-INF/spring.factories 里定义的自动配置类。
筛选有效的自动配置类。
        每一个自动配置类结合对应的 xxxProperties.java 读取配置文件进行自动配置功能

5、你如何理解 Spring Boot 配置加载顺序?

        在 Spring Boot 里面,可以使用以下几种方式来加载配置。
        1)properties文件;
        2)YAML文件;
        3)系统环境变量;
        4)命令行参数;
        等等……

6、spring boot 核心配置文件是什么?bootstrap.properties 和 application.properties 有何区别 ?

        单纯做 Spring Boot 开发,可能不太容易遇到 bootstrap.properties 配置文件,但是在结合 Spring Cloud 时,这个配 置就会经常遇到了,特别是在需要加载一些远程配置文件的时侯。
        spring boot 核心的两个配置文件:
        bootstrap (. yml 或者 . properties):boostrap 由父 ApplicationContext 加载的,比 applicaton 优先加载,配置在应用程 序上下文的引导阶段生效。一般来说我们在 Spring Cloud Config 或者 Nacos 中会用到它。且 boostrap 里面的属性不能被覆 盖;
        application (. yml 或者 . properties): 由ApplicatonContext 加载,用于 spring boot 项目的自动化配置。

7、比较一下 Spring Security 和 Shiro 各自的优缺点 ?

        由于 Spring Boot 官方提供了大量的非常方便的开箱即用的 Starter ,包括 Spring Security 的 Starter ,使得在 Spring Boot 中使用 Spring Security 变得更加容易,甚至只需要添加一个依赖就可以保护所有的接口,所以,如果是 Spring Boot 项目,一般选择 Spring Security 。当然这只是一个建议的组合,单纯从技术上来说,无论怎么组合,都是 没有问题的。Shiro 和 Spring Security 相比,主要有如下一些特点:
        1. Spring Security 是一个重量级的安全管理框架;Shiro 则是一个轻量级的安全管理框架
        2. Spring Security 概念复杂,配置繁琐;Shiro 概念简单、配置简单
        
        3. Spring Security 功能强大;Shiro 功能简单

8Spring Boot 中如何解决跨域问题 ?

        跨域可以在前端通过 JSONP 来解决,但是 JSONP 只可以发送 GET 请求,无法发送其他类型的请求,在 RESTful 风格 的应用中,就显得非常鸡肋,因此我们推荐在后端通过 ( CORS,Cross-origin resource sharing) 来解决跨域问题。
        这种解决方案并非 Spring Boot 特有的,在传统的 SSM 框架中,就可以通过 CORS 来解决跨域问题,只不过之前我们 是在 XML 文件中配置 CORS ,现在可以通过实现WebMvcConfigurer接口然后重写addCorsMappings方法解决跨域 问题。
        
        项目中前后端分离部署,所以需要解决跨域的问题。
        我们使用cookie存放用户登录的信息,在spring拦截器进行权限控制,当权限不符合时,直接返回给用户固定的json结 果。 当用户登录以后,正常使用;当用户退出登录状态时或者token过期时,由于拦截器和跨域的顺序有问题,出现了跨域的 现象。 我们知道一个http请求,先走filter,到达servlet后才进行拦截器的处理,如果我们把cors放在filter里,就可以优先于权 限拦截器执行。

9、什么是 FreeMarker 模板?

        FreeMarker 是一个基于 Java 的模板引擎,最初专注于使用 MVC 软件架构进行动态网页生成。使用 Freemarker 的主 要优点是表示层和业务层的完全分离。程序员可以处理应用程序代码,而设计人员可以处理 html 页面设计。最后使用 freemarker 可以将这些结合起来,给出最终的输出页面。

10、什么是 Apache Kafka?

        Apache Kafka 是一个分布式发布 - 订阅消息系统。它是一个可扩展的,容错的发布 - 订阅消息系统,它使我们能够构建 分布式应用程序。这是一个 Apache 顶级项目。Kafka 适合离线和在线消息消费。
11、什么是 Swagger?你用 Spring Boot 实现了它吗?
        Swagger 广泛用于可视化 API,使用 Swagger UI 为前端开发人员提供在线沙箱。Swagger 是用于生成 RESTful Web 服务的可视化表示的工具,规范和完整框架实现。它使文档能够以与服务器相同的速度更新。当通过 Swagger 正确定义 时,消费者可以使用最少量的实现逻辑来理解远程服务并与其进行交互。因此,Swagger消除了调用服务时的猜测。

12、您使用了哪些 starter maven 依赖项?

        使用了下面的一些依赖项
        spring-boot-starter-activemq
        spring-boot-starter-security
        这有助于增加更少的依赖关系,并减少版本的冲突。

13、Spring Boot 中的 starter 到底是什么 ?

        首先,这个 Starter 并非什么新的技术点,基本上还是基于 Spring 已有功能来实现的。首先它提供了一个自动化配置 类,一般命名为 XXXAutoConfiguration ,在这个配置类中通过条件注解来决定一个配置是否生效(条件注解就是 Spring 中原本就有的),然后它还会提供一系列的默认配置,也允许开发者根据实际情况自定义相关配置,然后通过类型安全 的属性注入将这些配置属性注入进来,新注入的属性会代替掉默认属性。正因为如此,很多第三方框架,我们只需要引 入依赖就可以直接使用了。当然,开发者也可以自定义 Starter
14、spring-boot-starter-parent 有什么用 ?
        我们都知道,新创建一个 Spring Boot 项目,默认都是有 parent 的,这个 parent 就是 spring-boot-starter-parent ,spring-boot-starter-parent 主要有如下作用:
        1. 定义了 Java 编译版本为 1.8 。
        2. 使用 UTF-8 格式编码。
        3. 继承自 spring-boot-dependencies,这个里边定义了依赖的版本,也正是因为继承了这个依赖,所以我们在写 依赖时才不需要写版本号。
        4. 执行打包操作的配置。
        5. 自动化的资源过滤。
        6. 自动化的插件配置。
        7. 针对 application.properties 和 application.yml 的资源过滤,包括通过 profile 定义的不同环境的配置文件,
        例如 application-dev.properties 和 application-dev.yml。

15、微服务中如何实现 session 共享 ?

        在微服务中,一个完整的项目被拆分成多个不相同的独立的服务,各个服务独立部署在不同的服务器上,各自的 session 被从物理空间上隔离开了,但是经常,我们需要在不同微服务之间共享 session ,常见的方案就是 Spring Session + Redis 来实现 session 共享。将所有微服务的 session 统一保存在 Redis 上,当各个微服务对 session 有相关的读写操 作时,都去操作 Redis 上的 session 。这样就实现了 session 共享,Spring Session 基于 Spring 中的代理过滤器实 现,使得 session 的同步操作对开发人员而言是透明的,非常简便。

你可能感兴趣的:(笔记,java,面试,spring,boot)