Springboot高频面试题《看完吊打面试官(二)》

前言  

欢迎和小码哥聊一聊:扣扣群:917138995,可帮查内推进度 & 聊八卦,最新秋招信息。 现在阶段最常使用的框架就是springboot,也是面试中必问的存在,这不阿里和腾讯已经开始招人了,大家赶紧蹭次机会收藏面试一波

41、Spring Boot 有哪几种读取配置的方式?

Spring Boot 可以通过

@PropertySource,

@Value,

@Environment,

@ConfifigurationProperties

42、Spring Boot 支持哪些日志框架?推荐和默认的日志

框架是哪个?

Spring Boot 支持 Java Util Logging, Log4j2, Lockback 作为日志框架,如果你使用 Starters 启动 器,

Spring Boot 将使用 Logback 作为默认日志框架

43、Spring Boot 如何定义多套不同环境配置?

提供多套配置文件,

如:applcation.properties

application-dev.properties

application-test.properties

application-prod.properties

运行时指定具体的配置文件

44、保护 Spring Boot 应用有哪些方法?在生产中使用HTTPS

使用Snyk检查你的依赖关系

升级到最新版本

启用CSRF保护

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

45、Spring Boot 2.X 有什么新特性?与 1.X 有什么区别?

配置变更

JDK版本升级

第三方类库升级

响应式 Spring 编程支持

HTTP/2 支持

配置属性绑定

更多改进与加强…

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

这可以使用DEV工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入式tomcat将重新启动。

Spring Boot有一个开发工具(DevTools)模块,它有助于提高开发人员的生产力。Java开发人员面临

的一个主要挑战是将文件更改自动部署到服务器并自动重启服务器。

开发人员可以重新加载Spring Boot上的更改,而无需重新启动服务器。这将消除每次手动部署更改的 需要。

Spring Boot在发布它的第一个版本时没有这个功能。

这是开发人员最需要的功能。DevTools模块完全满足开发人员的需求。该模块将在生产环境中被禁用。

它还提供H2数据库控制台以更好地测试应用程序。

org.springframework.boot spring-boot-devtools true

50、Spring Boot、Spring MVC 和 Spring 有什么区别?

Spring

Spring 最重要的特征是依赖注入。所有 SpringModules 不是依赖注入就是 IOC 控制 反转 。

当我们恰当的使用 DI 或者是 IOC 的时候,我们可以开发松耦合应用。松耦合应用的单元测试可以很容 易的进行。

SpringMVC

Spring MVC 提供了一种分离式的方法来开发 Web 应用。通过运用像 DispatcherServelet,

MoudlAndView 和 ViewResolver 等一些简单的概念,开发 Web 应用将会变的非常简单。

SpringBoot

Spring 和 SpringMVC 的问题在于需要配置大量的参数。

<bean

class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<pr

operty name="prefix">

<value>/WEB-INF/views/</value>

</property>

<property name="suffix">

<value>.jsp</value>

</property>

</bean>

<mvc:resources mapping="/webjars/" location="/webjars/"/>

Spring Boot 通过一个自动配置和启动的项来目解决这个问题。为了更快的构建产品就绪应用程 序,

Spring Boot 提供了一些非功能性特征。

51、Spring Boot 还提供了其它的哪些 Starter Project Options?

Spring Boot 也提供了其它的启动器项目包括,包括用于开发特定类型应用程序的典型依赖项。

spring-boot-starter-web-services - SOAP Web Services

spring-boot-starter-web - Web 和 RESTful 应用程序

spring-boot-starter-test - 单元测试和集成测试

spring-boot-starter-jdbc - 传统的 JDBC

spring-boot-starter-hateoas - 为服务添加 HATEOAS功能

spring-boot-starter-security - 使用 SpringSecurity 进行身份验证和授权spring-boot-starter-data-jpa - 带有 Hibeernate 的 Spring Data JPA

spring-boot-starter-data-rest - 使用 Spring Data REST公布简单的 REST服务

.

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

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

第一步: 安装 Java

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

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

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

让我们来思考如何使服务器成为应用程序的一部分?你只需要一个安装了 Java 的虚拟机,就可以直接在上面部署应用程序了,是不是很爽?

这个想法是嵌入式服务器的起源。

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

例如,对于一个 Spring Boot 应用程序来说,你可以生成一个包含 Embedded Tomcat 的应用程 序jar。

你就可以想运行正常 Java 应用程序一样来运行 web 应用程序了。

嵌入式服务器就是我们的可执行单元包含服务器的二进制文件(例如,tomcat.jar)。

53、如何在 Spring Boot 中添加通用的 JS 代码?

在源文件夹下,创建一个名为 static 的文件夹。然后,你可以把你的静态的内容放在这里面。

例如 ,myapp.js 的路径是 resources\static\js\myapp.js

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

<csript src="/js/myapp.js"></script>

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

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

{  "timestamp": 148****019562,  "status": 401,  "error": "Unauthorized",  "message": "Full authentication is required to access this resource.",  "path": "/beans"  }

两种方法:

方法 一:关闭安全验证

application.properties

management.security.enabled:FALSE

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

54、什么是 Spring Date?

来自://projects.spring.io/spring- data/

Spring Data 的使命是在保证底层数据存储特殊性的前提下,为数据访问提供一个熟悉的,一致

性的,基于 Spring 的编程模型。这使得使用数据访问技术,关系数据库和非关系数据库,map

reduce 框架以及基于云的数据服务变得很容易。

为了让它更简单一些,Spring Data 提供了不受底层数据源限制的 Abstractions 接口。

下面来举一个例子interface TodoRepository extends CrudRepository<Todo, Long> {}

你可以定义一简单的库,用来插入,更新,删除和检索代办事项,而不需要编写大量的代码。

55、什么是 Spring Data REST?

Spring Data TEST可以用来发布关于 Spring 数据库的 HATEOAS RESTful 资源。

下面是一个使用 JPA的例子

@RepositoryRestResource(collectionResourceRel = "todos", path = "todos")  public interface TodoRepository  extends PagingAndSortingRepository<Todo, Long> {}

不需要写太多代码,我们可以发布关于 Spring 数据库的 RESTful API。

下面展示的是一些关于 TEST服务器的例子

POST

URL:http  //localhost:8080/todos  Use Header:Content-Type:Type:application/json  Request Content

代码如下

{  "user": "Jill",  "desc": "Learn Hibernate",  "done": false  } 
//响应内容 {  "user": "Jill",  "desc": "Learn Hibernate",  "done": false,  "_links": {  "self": {   "href": "http://localhost:8080/todos/1"   },"todo": {   "href": "http://localhost:8080/todos/1"   }     } } 

响应包含新创建资源的 href。

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

你需要做下面两个步骤:

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

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

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

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

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

57、RequestMapping 和 GetMapping 的不同之处在哪里?

RequestMapping 具有类属性的,可以进行 GET,POST,PUT或者其它的注释中具有的请求方法。

GetMapping 是 GET请求方法中的一个特例。

它只是 ResquestMapping 的一个延伸,目的是为了提高清晰度。

58、JPA 和 Hibernate 有哪些区别?

简而言之

JPA是一个规范或者接口

Hibernate 是 JPA的一个实现

当我们使用 JPA的时候,我们使用 javax.persistence 包中的注释和接口时,不需要使用

hibernate 的导入包。

我们建议使用 JPA注释,因为哦我们没有将其绑定到 Hibernate 作为实现。后来(我知道 - 小于百 分之

一的几率),我们可以使用另一种JPA实现。

59、使用 Spring Boot 启动连接到内存数据库 H2 的 JPA

应用程序需要哪些依赖项?

在 Spring Boot 项目中,当你确保下面的依赖项都在类路里面的时候,你可以加载 H2 控制台。 web

启动器

h2

jpa 数据启动器

其它的依赖项在下面:

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<dependency><groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-data-jpa</artifactId>

</dependency>

<dependency>

<groupId>com.h2database</groupId>

<artifactId>h2</artifactId>

<scope>runtime</scope>

</dependency>

需要注意的一些地方:

一个内部数据内存只在应用程序执行期间存在。这是学习框架的有效方式。

这不是你希望的真是世界应用程序的方式。

在问题“如何连接一个外部数据库?”中,我们解释了如何连接一个你所选择的数据库。

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

配置文件不是设别环境的关键。

在下面的例子中,我们将会用到两个配置文件

dev

prod

缺省的应用程序配置在 application.properties 中。

让我们来看下面的例子:

application.properties

basic.value= true

basic.message= Dynamic Message

basic.number= 100

我们想要为 dev 文件自定义 application.properties 属性。我们需要创建一个名为 application

dev.properties 的文件,并且重写我们想要自定义的属性。

application-dev.propertiesbasic.message: Dynamic Message in DEV

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

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

在 VM 参数中使用 Dspring.profifiles.active=prod

在 application.properties 中使用 spring.profifiles.active=prod

61、如何对Spring Boot应用进行测试?

在为Spring应用程序运行集成测试时,我们必须有一个ApplicationContext 。

为了简化测试, SpringBoot为测试提供了一个特殊的注释@SpringBootTest 。此批注从其classes 属性指示的配置类创建ApplicationContext 。

如果未设置classes属性,Spring Boot将搜索主配置类。搜索从包含测试的包 开始,

直到找到使用@SpringBootApplication或@SpringBootConfifiguration注释的类。

请注意,如果 我们使用JUnit 4 ,我们必须用@RunWith(SpringRunner.class)装饰测试类。

62、Spring Boot Actuator有什么用?

Spring Boot Actuator 可以帮助你监控和管理Spring Boot

应用,比如健康检查、审计、统计和HTTP追 踪等。

所有的这些特性可以通过JMX或者HTTP endpoints 来获得。

Actuator同时还可以与外部应用监控系统整合,比如 Prometheus ,Graphite , DataDog , Inflflux ,

Wavefront , New Relic 等。这些系统提供了非常好的仪表盘、图标、分析和告警等功能,使得你可以 通过

统一的接口轻松的监控和管理你的应用。

Actuator 使用Micrometer 来整合上面提到的外部应用监控系统。这使得只要通过非常小的配 置就

可以集成任何应用监控系统。将Spring Boot Actuator集成到一个项目中非常简单。我们需要做的就是在pom.xml 文件中包含

spring-boot-starter-actuator 启动器:

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-actuator</artifactId>

</dependency>

成URL路径。 以下是Actuator提供的一些最常见的内置端点:

auditevents : 公开审计事件信息

env : 公开环境属性

health : 显示应用程序运行状况信息

httptrace : 显示HTTP跟踪信息

info : 显示任意应用程序信息

metrics : 显示指标信息

mappings : 显示所有@RequestMapping路径的列表

scheduledtasks : 显示应用程序中的计划任务

threaddump : 执行线程转储

beans :所有加载的spring bean

63、SpringBoot 中静态资源直接映射的优先级是怎样的?

SpringBoot 静态资源直接映射为/,可以通过根目录来访问。

/META-INF/resources/webjars/映射 为 /webjars/,通过访问 /webjar 访。

优先级顺序为:META-INF/resources > resources > static > public。

64、继承 WebMvcConfifigurerAdapter 抽象类,常用的重写方法列举几个?

WebMvcConfifigurerAdapter 实现 WebMvcConfifigurer 接口,

常用的可能需要重写的方法有下面几 个:

/ 解决跨域问题 /

public void addCorsMappings(CorsRegistry registry) ;

/ 添加拦截器 /

void addInterceptors(InterceptorRegistry registry);

/ 这里配置视图解析器 /

void configureViewResolvers(ViewResolverRegistry registry);

/ 配置内容裁决的一些选项 /

void configureContentNegotiation(ContentNegotiationConfigurer configurer);

/ 视图跳转控制器 /

void addViewControllers(ViewControllerRegistry registry);

/ 静态资源处理 /

void addResourceHandlers(ResourceHandlerRegistry registry);

/ 默认静态资源处理器 /

void configureDefaultServletHandling(DefaultServletHandlerConfigurerconfigurer);

65、@SpringBootApplication 引入了哪3个重要的注解?

@SpringBootConfifiguration、@EnableAutoConfifiguration、@ComponentScan。

其它的 4 个

@Target、@Retention、@Documented、@Inherited,

也重要,但应该不是本题想问的知识点。

66、@SpringBootApplication 注解中的属性相当于哪几个注解?

等价于以默认属性使用 @Confifiguration,@EnableAutoConfifiguration 和 @ComponentScan。Spring Cloud面试题
#秋招##内推##小码哥带你圆梦大厂##搞技术你要知道##面经#
全部评论
点赞 回复 分享
发布于 2022-09-05 12:06 广东
感谢楼主分享
点赞 回复 分享
发布于 2022-09-05 21:59 广东
大佬666
点赞 回复 分享
发布于 2022-09-05 22:01 广东
很详细,收藏了
点赞 回复 分享
发布于 2022-09-05 22:02 广东
希望面试用得上,感谢楼主
点赞 回复 分享
发布于 2022-09-05 22:04 广东
期待楼主更新
点赞 回复 分享
发布于 2022-09-05 22:05 广东
哇,好及时,最近刚好在准备秋招面试
点赞 回复 分享
发布于 2022-09-05 22:08 广东
赞赞赞,必须赞
点赞 回复 分享
发布于 2022-09-05 22:12 广东
跟着楼主学
点赞 回复 分享
发布于 2022-09-05 22:13 广东
点赞 回复 分享
发布于 2022-09-06 08:27 上海
mark
点赞 回复 分享
发布于 2022-09-06 11:50 广东

相关推荐

Noob1024:一笔传三代,人走笔还在
点赞 评论 收藏
分享
27 125 评论
分享
牛客网
牛客企业服务