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 注解中的属性相当于哪几个注解?
推荐阅读
🎈🎈🎈 小码哥公众号:码出宇宙,纯技术干货分享,为圆梦大厂助力。(最近更新IDEA的激活码好用很,再也不用担心IDEA因为破解不了而烦恼)