热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

1000道大厂面试题之SpringBoot

大家好,我是青空。今天青空给大家带来的是Spring相关面试题文末领取面试大全1.SpringBoot2.X有哪些新特性?与1.X有什么区别?配置变更、JDK版本

大家好,我是青空。

今天青空给大家带来的是Spring相关面试题

文末领取面试大全


1.SpringBoot 2.X有哪些新特性?与1.X有什么区别?

配置变更、JDK版本升级、第三方类库升级、响应式Spring编程支持、HTTP/2支持、配置属性绑定、更多改进与加强

2.保护SpringBoot应用有哪些方法?

在生产中使用HTTPS

使用Snyk检查你的依赖关系

升级到最新版本

启用CSRF保护

使用内容安全策略防止XSS攻击

3.Spring Boot的核心注解是哪些?他由哪几个注解组成的?

启动类上面的注解是@SpringBootApplication,他也是SpringBoot的核心注解,主要组合包含了以下3个注解:

@SpringBootConfiguration:组合了@Configuration注解,实现配置文件的功能;

@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置的功能:@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class});

@ComponentScan:Spring组件扫描。

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

跨域可以在前端通过JSONP来解决,但是JSONP只可以发送GET请求,无法发送其他类型的请求,在 RESTful⻛格的应用中,就显得非常鸡肋,因此推荐在后端通过(CORS,Crossorigin resource sharing)来解决跨域问题。这种解决方案并非Spring Boot特有的,在传统的SSM框架中,就可以通过CORS来解决跨域问题,只不过之前我们是在XML文件中配置CORS,现在可以通过实现 WebMvcConfigurer接口然后从addCorsMappings方法解决跨域问题。

@Configuration
public class CorsConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOrigins("*").allowCredentials(true).allow
edMethods("GET", "POST", "PUT", "DELETE", "OPTIONS").maxAge(3600);}
}

项目中前后端分离部署,所以需要解决跨域的问题。我们使用COOKIE存放用户登录的信息,在spring拦截器进行权限控制,当权限不符合时,直接返回给用户固定的json结果。

当用户登录以后,正常使用;当用户退出登录状态时或者token过期时,由于拦截器和跨域的顺序有问题,出现了跨域的现象。

我们知道一个http请求,先走filter,到达servlet后才进行拦截器的处理,如果我们把cors放在filter里, 就可以优先于权限拦截器执行。

@Configuration
public class CorsConfig {@Beanpublic CorsFilter corsFilter() {CorsConfiguration corsConfiguration = new CorsConfiguration();corsConfiguration.addAllowedOrigin("*");corsConfiguration.addAllowedHeader("*");corsConfiguration.addAllowedMethod("*");corsConfiguration.setAllowCredentials(true);UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new
UrlBasedCorsConfigurationSource();urlBasedCorsConfigurationSource.registerCorsConfiguration("/**",
corsConfiguration);return new CorsFilter(urlBasedCorsConfigurationSource);
} }

5.比较一下Spring Security和Shiro各自的优缺点?

由于Spring Boot官方提供了大量的非常方便的开箱即用的Starter,包括Spring Security的 Starter,使得在SpringBoot中使用Spring Security变得更加容易,甚至只需要添加一个一来 就可以保护所有接口,所以如果是SpringBoot项目,一般选择Spring Security。当然这只是一个建议的组合,单纯从技术上来说,无论怎么组合,都是没有问题的。

Shiro和Spring Security相比,主要有如下特点:

Spring Security是一个重量级的安全管理框架;Shiro则是一个轻量级的安全管理框架; Spring Security概念复杂,配置繁琐;Shiro概念简单、配置简单; Spring Security功能强大;Shiro功能简单

6.如何实现Spring Boot应用程序的安全性?

为了实现Spring Boot的安全性,使用spring-boot-starter-security依赖项,并且必须添加 安全配置。它只需要很少代码。配置类将必须扩展WebSecurityConfigurerAdapter并覆盖其方法。

7.什么是Swagger? 你用Spring Boot实现了吗?

Swagger 广泛用于可视化 API,使用 Swagger UI 为前端开发人员提供在线沙箱。Swagger 是用于生成 RESTful Web 服务的可视化表示的工具,规范和完整框架实现。它使文档能够以与服务器相同的速度更新。当通过 Swagger 正确定义时,消费者可以使用最少量的实现逻辑来理解远程服务并与其进行交互。因此,Swagger消除了调用服务时的猜测。

8.如何使用配置文件通过 Spring Boot 配置特定环境的配置?

配置文件不是设别环境的关键。在下面的例子中,我们将会用到两个配置文件

  • dev

  • prod 缺省的应用程序配置在 application.properties 中。让我们来看下面的例子: application.properties

 
basic.value= truebasic.message= Dynamic Messagebasic.number= 100

我们想要为 dev 文件自定义 application.properties 属性。我们需要创建一个名为 application- dev.properties 的文件,并且重写我们想要自定义的属性。application-dev.properties

   basic.message: Dynamic Message in DEV

一旦你特定配置了配置文件,你需要在环境中设定一个活动的配置文件。

有多种方法可以做到这一点:

在 VM 参数中使用 Dspring.profiles.active=prod 在 application.properties 中使用 spring.profiles.active=prod

9.如何使用 Spring Boot 部署到不同的服务器?

你需要做下面两个步骤:

  • 在一个项目中生成一个 war 文件。

  • 将它部署到你最喜欢的服务器(websphere 或者 Weblogic 或者 Tomcat and so on)。

第一步:这本入⻔指南应该有所帮助:

https://spring.io/guides/gs/convert-jar-to-war/

第二步:取决于你的服务器。

10.如何在 Spring Boot 中添加通用的 JS 代码?

在源文件夹下,创建一个名为 static 的文件夹。然后,你可以把你的静态的内容放在这里面。例如,myapp.js 的路径是 resources\static\js\myapp.js

你可以参考它在 jsp 中的使用方法:  

错误:HAL browser gives me unauthorized error - Full authenticaition is required to access this resource.

该如何来修复这个错误呢?

image-20210917234651706

两种方法:

方法 1:关闭安全验证 application.properties

management.security.enabled:FALSE

方法二:在日志中搜索密码并传递至请求标头中

11.什么是嵌入式服务器?我们为什么要使用嵌入式服务器呢?

思考一下在你的虚拟机上部署应用程序需要些什么。

第一步: 安装 Java

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

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

如果我们想简化这些步骤,应该如何做呢?

让我们来思考如何使服务器成为应用程序的一部分?

你只需要一个安装了 Java 的虚拟机,就可以直接在上面部署应用程序了,是不是很爽? 这个想法是嵌入式服务器的起源。

当我们创建一个可以部署的应用程序的时候,我们将会把服务器(例如,tomcat)嵌入到可部署的服务器中。

例如,对于一个 Spring Boot 应用程序来说,你可以生成一个包含 Embedded Tomcat 的应 用程序 jar。你就可以想运行正常 Java 应用程序一样来运行 web 应用程序了。嵌入式服务器就是我们的可执行单元包含服务器的二进制文件(例如,tomcat.jar)。

12.为什么我们需要 spring-boot-maven-plugin?

spring-boot-maven-plugin 提供了一些像 jar 一样打包或者运行应用程序的命令。

spring-boot:run 运行你的 SpringBooty 应用程序。

spring-boot:repackage 重新打包你的 jar 包或者是 war 包使其可执行

spring-boot:start 和 spring-boot:stop 管理 Spring Boot 应用程序的生命周期 (也可以说是为 了集成测试)。

spring-boot:build-info 生成执行器可以使用的构造信息。

13.Spring Initializr 是创建 Spring Boot Projects 的唯一方法吗?

不是的。

Spring Initiatlizr 让创建 Spring Boot 项目变的很容易,但是,你也可以通过设置一个 maven 项目并添加正确的依赖项来开始一个项目。

在我们的 Spring 课程中,我们使用两种方法来创建项目。

第一种方法是 start.spring.io 。

另外一种方法是在项目的标题为“Basic Web Application”处进行手动设置。

手动设置一个 maven 项目

这里有几个重要的步骤:

在 Eclipse 中,使用文件 - 新建 Maven 项目来创建一个新项目 添加依赖项。

添加 maven 插件。

添加 Spring Boot 应用程序类。

到这里,准备工作已经做好!

14.怎么使用 Maven 来构建一个 SpringBoot 程序?

就像引入其他库一样,我们可以在 Maven 工程中加入 SpringBoot 依赖。然而,最好是从 spring-boot- starter-parent 项目中继承以及声明依赖到 Spring Boot starters。这样做可以 使我们的项目可以重用 SpringBoot 的默认配置。

继承 spring-boot-starter-parent 项目依赖很简单 – 我们只需要在 pom.xml 中定义一个 parent 节点

我们可以在 Maven central 中找到 spring-boot-starter-parent 的最新版本。

使用 starter 父项目依赖很方便,但并非总是可行。例如,如果我们公司都要求项目继承标准 POM,我们就不能依赖 SpringBoot starter 了。这种情况,我们可以通过对 POM 元素的依赖管理来处理:

org.springframework.bootspring-boot-starter-parent2.1.1.RELEASE
org.springframework.bootspring-boot-dependencies2.1.1.RELEASEpomimport

15.如何在 Spring Boot 中禁用 Actuator 端点安全性?

默认情况下,所有敏感的 HTTP 端点都是安全的,只有具有 ACTUATOR ⻆色的用户才能访问 它们。安全性是使用标准的 HttpServletRequest.isUserInRole 方法实施的。我们可以使用来禁用安全性。只有在执行机构端点在防火墙后访问时,才建议禁用安全性。

16.Spring Boot 中的监视器是什么?

Spring boot actuator 是 spring 启动框架中的重要功能之一。Spring boot 监视器可帮助您 访问生产环 境中正在运行的应用程序的当前状态。有几个指标必须在生产环境中进行检查和监控。即使一些外部应 用程序可能正在使用这些服务来向相关人员触发警报消息。监视器模块公开了一组可直接作为 HTTP URL 访问的REST 端点来检查状态。

17.如何重新加载 Spring Boot 上的更改,而无需重新启 动服务器?

这可以使用 DEV 工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入式tomcat 将重 新启动。Spring Boot 有一个开发工具(DevTools)模块,它有助于提高开发人员的生产 力。Java 开发人员面临的一个主要挑战是将文件更改自动部署到服务器并自动重启服务器。开 发人员可以重新加载 Spring Boot 上的更改,而无需重新启动服务器。这将消除每次手动部署更改的需要。Spring Boot 在发布它的第一个版本时没有这个功能。这是开发人员最需要的功能。DevTools 模块完全满足开发人员的需求。该模块将在生产环境中被禁用。它还提供 H2 数据库控制台以更好地测试应用程序。

18.Spring 和 SpringBoot 有什么不同?

Spring 框架提供多种特性使得 web 应用开发变得更简便,包括依赖注入、数据绑定、切面编 程、数据 存取等等。

org.springframework.bootspring-boot-devtoolstrue

随着时间推移,Spring 生态变得越来越复杂了,并且应用程序所必须的配置文件也令人觉得 可怕。这 就是 Spirng Boot 派上用场的地方了 – 它使得 Spring 的配置变得更轻而易举。

实际上,Spring 是 unopinionated(予以配置项多,倾向性弱) 的,Spring Boot 在平台和 库的做法 中更 opinionated ,使得我们更容易上手。这里有两条 SpringBoot 带来的好处: 根据 classpath 中的 artifacts 的自动化配置应用程序 提供非功能性特性例如安全和健康检查给到生产环境中的应用程序

19.Spring Boot 有哪些优点?

Spring Boot 的优点有:

1、减少开发,测试时间和努力。

2、使用 JavaConfig 有助于避免使用 XML。

3、避免大量的 Maven 导入和各种版本冲突。

4、提供意⻅发展方法。

5、通过提供默认值快速开始开发。

6、没有单独的 Web 服务器需要。这意味着你不再需要启动 Tomcat,Glassfish或其他任何东⻄。

7、需要更少的配置 因为没有 web.xml 文件。只需添加用@ Configuration 注释的类,然后添加用 @Bean 注释的方法,Spring 将自动加载对象并像以前一样对其进行管理。您甚至可以将@Autowired 添加到 bean 方法中,以使 Spring 自动装入需要的依赖关系中。

8、基于环境的配置 使用这些属性,您可以将您正在使用的环境传递到应用程序: Dspring.profiles.active = {enviornment}。在加载主应用程序属性文件后,Spring 将在 (application{environment} .properties)中加载后续的应用程序属性文件。

20.什么是springboot

用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml 文件) 创建独立的spring引用程序 main方法运行

嵌入的Tomcat 无需部署war文件

简化maven配置

自动配置spring添加对应功能starter自动化配置

spring boot来简化spring应用开发,约定大于配置,去繁从简,just run就能创建一个独立的,产品级别的应用

面试大全包括:包括 Java 集合、JVM、多线程、并发编程、设计模式、SpringBoot、SpringCloud、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat、Python、HTML、CSS、Vue、React、Javascript、Android 大数据、阿里巴巴等大厂面试题等、等技术栈!

领取方式:扫描下方公众号【蚂蚁原图】回复【面试题】即可获取


推荐阅读
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • springboot项目引入jquery浏览器报404错误的解决办法
    本文介绍了在springboot项目中引入jquery时,可能会出现浏览器报404错误的问题,并提供了解决办法。问题可能是由于将jquery.js文件复制粘贴到错误的目录导致的,解决办法是将文件复制粘贴到正确的目录下。如果问题仍然存在,可能是其他原因导致的。 ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • Spring Boot基础教程 ( 五 ) :构建 RESTful API 与单元测试
    首先,回顾并详细说明一下在下面我们尝试使用SpringMVC来实现一组对User对象操作的RESTf ... [详细]
  • 用Python手把手教你搭建一个web框架-flask微框架!
    在之前的文章当中,小编已经教过大家怎么搭建一个Django框架,今天我们来探索另外的一种框架的搭建,这个框架就是web框架-flask微框架啦!首先我们带着以下的几个问题来阅读本文:1、flask ... [详细]
  • 业务:Payments&Risk大数据/AI/数据可视化时间要求:至少实习6个月,每周5天,入职时间4-5月 ... [详细]
  • 博客分类:restful笔记如何保持可见性?(a)使用HTTP方法(例如GET,POST,PUT)时,其语义要与HTTP所规定的语义保持一致,并添加适当的标头来描述请 ... [详细]
  • 实战基于SpringBoot2的WebFlux和mLab搭建反应式Web
    SpringFramework5带来了新的ReactiveStack非阻塞式Web框架:SpringWebFlux。作为与SpringMVC并行使用的Web框架,SpringWeb ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
author-avatar
liu
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有