8个经典spring boot面试问题


1. 什么是spring boot?

       多年来,随着新功能的增加,spring变得越来越复杂。只需访问页面https://spring.io/projects,我们将看到所有在应用程序中使用的不同功能的spring项目。如果必须启动一个新的spring项目,我们必须添加构建路径或maven依赖项,配置application server,添加spring配置。因此,启动一个新的spring项目需要大量的工作,因为我们目前必须从头开始做所有事情。Spring Boot是这个问题的解决方案。Spring boot构建在现有Spring框架之上。使用spring boot,我们可以避免以前必须执行的所有样板代码和配置。因此,Spring boot帮助我们更健壮地使用现有的Spring功能,并且只需最少的工作量。


2.Spring Boot的优点是什么?

  减少开发、测试的时间和工作量。

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

  避免大量maven导入和各种版本冲突。

  提供可选的开发方法。

  通过提供默认开发方式进行快速开发。

  不需要单独的Web服务器。这意味着您不再需要启动Tomcat、Glassfish或其他任何东西。


3.什么是JavaConfig?

       Spring JavaConfig是Spring社区的一个产品,它提供了一种纯java方法来配置Spring IoC容器。因此,它有助于避免使用XML配置。使用JavaConfig的优点是:

  面向对象的配置。因为配置在JavaConfig中定义为类,所以用户可以充分利用Java中的面向对象特性。一个配置类可以子类化另一个配置类,覆盖它的@Bean方法,等等。

  减少或消除XML配置。已经证明了基于依赖注入原则的外部化配置的好处。然而,许多开发人员不愿意在XML和Java之间来回切换。JavaConfig为开发人员提供了一种纯java方法来配置Spring容器,这种方法在概念上类似于XML配置。从技术上讲,仅使用   JavaConfig配置类来配置容器是可行的,但是在实践中,许多人发现将JavaConfig与XML混合并匹配是理想的。

  类型安全的重构能力。JavaConfig提供了一种类型安全的配置Spring容器的方法。由于Java 5.0对泛型的支持,现在可以通过类型而不是名称检索bean,不需要进行任何基于类型转换或字符串的查找。


4.如何在不重启服务器的情况下在Spring引导时重新加载我的更改?

        这可以通过开发工具来实现。有了这个依赖项,您保存的任何更改都将重新启动嵌入的tomcat。Spring Boot有一个开发人员工具(DevTools)模块,它有助于提高开发人员的工作效率。Java开发人员面临的关键挑战之一是将文件更改自动部署到服务器并自动重启服务器。开发人员可以在Spring引导时重新加载更改,而不必重新启动服务器。这将消除每次手动部署更改的需要。Spring Boot在发布第一个版本时没有这个特性。这是开发人员最需要的特性。DevTools模块完全满足开发人员的需求。此模块将在生产环境中禁用。它还提供了H2-database控制台,以便更好地测试应用程序。使用以下依赖项

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency>


5.什么是ELK堆栈?如何与Spring Boot一起使用?

ELK堆栈由三个开源产品组成——Elasticsearch、Logstash和Kibana from Elastic。

Elasticsearch是一个基于Lucene搜索引擎的NoSQL数据库。  

        Logstash是一个日志管道工具,它接受来自不同来源的输入,执行不同的转换,并将数据导出到不同的目标。它是一个动态的数据收集管道,具有可扩展的插件生态系统和强大的弹性搜索协同作用

        Kibana是一个可视化UI层,工作在Elasticsearch之上。

这三个项目一起用于各种环境中的日志分析。因此Logstash收集和解析日志、弹性搜索索引并存储这些信息,而Kibana提供了一个UI层,提供可操作的可见性。

Spring Boot + ELK stack


6.什么是FreeMarker模板?如何使用Spring Boot实现它?

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

Spring Boot + FreeMarker的例子


7.你什么时候使用WebSockets?如何使用Spring Boot实现它?

WebSocket是一种计算机通信协议,通过单个TCP连接提供全双工通信通道。

WebSocket是双向的——使用WebSocket客户端或服务器都可以发起发送消息。

WebSocket是全双工的——客户端和服务器之间的通信是相互独立的。

单个TCP连接——初始连接使用HTTP,然后将此连接升级为基于套接字的连接。然后,这个单一连接将用于未来的所有通信

轻- WebSocket消息数据交换比http轻得多。

Spring Boot + WebSockets的例子


8.我们如何监视所有Spring Boot微服务?

       Spring Boot提供了actuator 端点来监控单个微服务的指标。这些端点对于获取关于应用程序的信息非常有帮助,比如应用程序是否启动,它们的组件(如数据库等)是否正常工作。但是,使用actuator 接口的一个主要缺点或困难是,我们必须逐个命中这些接口,以了解应用程序的状态或健康状况。假设微服务涉及50个应用程序,管理员将不得不命中所有50个应用程序的actuator 端点。为了帮助我们处理这种情况,我们将使用位于https://github.com/codecentric/springing-boot-admin的开源项目。

它构建在Spring Boot Actuator之上,提供了一个web UI,使我们能够可视化多个应用程序的指标。

Spring Boot Admin

推荐阅读更多精彩内容