最新公告
  • 新注册用户请前往个人中心绑定邮箱以便接收相关凭证邮件!!!点击前往个人中心
  • 高薪必备的一些Spring Boot高级面试题

    问:Spring和Spring Boot有什么区别?
    答:Spring Framework提供了多种功能,使Web应用程序的开发更加容易。这些功能包括依赖注入,数据绑定,面向方面的编程,数据访问等等。随着Spring社区的壮大,Spring慢慢变得越来越复杂,不再像开始宣称的那么轻量级。开发应用程序的配置量越来越大令开发者头疼。这时Spring Boot就派上用场了 – 它采用“约定大于配置”的思想简化了配置,对Spring提供的功能和配置而且将一些功能抽象成为“Starter”开箱即用、按需引用。极大地简化了开发。
     
    问:我们如何使用Maven设置Spring Boot应用程序?
    答:我们可以像在任何其他库中一样在Maven项目中包含Spring Boot。但是,最好的方法是从spring-boot-starter-parent项目继承并声明依赖于Spring Boot启动器。这样做可以让我们的项目重用Spring Boot的默认设置。继承spring-boot-starter-parent项目非常简单 – 我们只需要在pom.xml中指定一个parent元素:
    我们可以在Maven 中央仓库找到最新版本的 spring-boot-starter-parent
    上面的方式很方便但是并不一定符合实际需要。例如公司要求所有项目依赖构建从一个标准BOM开始,我们就不能按上面的方式进行。
    在这种情况下,我们可以进行如下引用:
    然后在 dependencies 标签下引用Spring Boot 的starters 就行了。
     
    问:Spring boot 中的starter是什么?
    答:依赖管理对于项目至关重要。当项目足够复杂时,管理依赖项可能会变成一场噩梦,因为涉及的组件太多了。
    这就是Spring Boot 的starter就派上用场了。每个starter都可以为我们提供所需要的Spring技术的一站式服务。并且以一致的方式传递和管理其他所需的依赖关系。
    所有官方starter都在org.springframework.boot组下,其名称以spring-boot-starter-开头 。非官方的starter的名称在前,如mybatis-spring-boot-starter。这种命名模式使得查找启动器变得很容易,尤其是在使用支持按名称搜索依赖关系的IDE时。但是这个不是绝对的,有些开发者可能不遵从这种契约。
    目前大概有超过50种官方starter。最常用的是:
    • spring-boot-starter: 核心启动器,包括自动配置支持,日志记录和YAML
    • spring-boot-starter-aop: 使用Spring AOP和AspectJ进行面向方面编程的初学者
    • spring-boot-starter-data-jpa: 使用Spring Data JPA和Hibernate的启动器
    • spring-boot-starter-jdbc: 用于将JDBC与HikariCP连接池一起使用的启动器
    • spring-boot-starter-security: 使用Spring Security的启动器
    • spring-boot-starter-test: 用于测试Spring Boot应用程序的启动器
    • spring-boot-starter-web: 使用Spring MVC构建Web的启动器,包括RESTful应用程序
    其他starter 可去spring.io查询
     
    问:Spring Boot 如何禁用特定的自动配置?
    答:如果我们需要禁用特定Spring Boot的自动配置,我们可以使用@EnableAutoConfiguration注解exclude属性来指示它。如下禁用了
    DataSourceAutoConfiguration
    如果我们使用@SpringBootApplication注解。 它具有@EnableAutoConfiguration作为元注解 – 我们同样可以配置exclude属性来禁用自动配置:
    我们还可以使用spring.autoconfigure.exclude环境属性禁用自动配置。application.properties配置文件设置如下也可以达到同样的目的:
     
    问:Spring Boot 如何注册自定义自动配置?
    答:要注册自动配置类,我们必须在META-INF /
    spring.factories文件的EnableAutoConfiguration 键
    下列出其完全限定名称,如果是多个按照以下风格配置:
    如果我们使用Maven构建一个项目,那么该文件应放在resources / META-INF目录中。
     
    问:Spring Boot如何根据不同的条件来加载bean?
    答:你可在配置中使用@Conditional 系列注解。例如@ConditionalOnMissingBean此注释的最显着属性是:
    • value:要检查的bean类型
    • name:要检查的bean的名称
    放置在使用@Bean装饰的方法上,目标类型默认为方法的返回类型:
    表示的意思是如果不存在CustomService类型的bean则初始化并注入该bean。
     
    问:如何将Spring Boot Web应用程序部署为JAR和 WAR文件?
    答:传统上,我们将Web应用程序打包为WAR文件,然后将其部署到外部服务器中。这样做可以让我们在同一台服务器上安排多个应用程序。在CPU和内存稀缺的时候,这是节省资源的好方法。
    但事情发生了变化。现在计算机硬件相当便宜,并且注意力转向服务器配置。在部署期间配置服务器的一个小错误可能会导致灾难性后果。
    Spring通过提供一个插件即spring-boot-maven-plugin来解决这个问题,将Web应用程序打包为可执行的JAR要包含此插件,只需向pom.xml添加一个插件元素:
    有了这个插件,我们将在执行阶段后得到一个fat JAR 。此JAR包含所有必需的依赖项,包括嵌入式服务器。因此,我们不再需要担心配置外部服务器。
    然后我们可以像运行普通的可执行JAR一样运行应用程序。
    请注意,必须将pom.xml文件中的packaging元素设置为 jar 才能构建JAR文件:
    如果我们不包含这个元素,它也默认为jar
    如果我们想要构建WAR文件,请将包装 元素更改为war
    并将容器依赖关系从打包文件中删除:
    执行Maven 阶段后,我们将拥有一个可部署的WAR文件。
     
    问:如何在Spring Boot启动的时候运行一些逻辑?
    答:可以实现Spring Boot 提供的接口 ApplicationRunner 也可以实现接口CommandLineRunner,这两个接口实现方式一样,它们都只提供了一个 run 方法。
     
    问: Spring boot支持哪些外部配置?
    答:Spring Boot支持外部配置,允许我们在各种环境中运行相同的应用程序。我们可以使用properties文件,YAML文件,环境变量,系统属性和命令行选项参数来指定配置属性。
    然后,我们可以访问使用这些属性@Value注释,经由绑定对象 的@ConfigurationProperties注释,或Environment 环境抽象类注入。
    以下是最常见的外部配置来源:
    • 命令行属性:命令行选项参数是以双连字符开头的程序参数,例如-server.port = 8080Spring Boot将所有参数转换为属性,并将它们添加到环境属性集中。
    • 应用程序属性:应用程序属性是从application.properties文件或其YAML对应文件加载的属性。默认情况下,Spring Boot会在当前目录,类路径根或其config子目录中搜索此文件。
    • 特定于配置文件的属性:特定于配置文件的属性从application- {profile} .properties文件或其YAML对应文件加载。{profile}占位符是指活性轮廓。这些文件与非特定属性文件位于相同位置,并且优先于非特定属性文件。
    问:Spring和Spring Boot有什么区别?
    答:在为Spring应用程序运行集成测试时,我们必须有一个ApplicationContext
    为了简化测试,Spring Boot为测试提供了一个特殊的注释 @SpringBootTest此批注从其classes属性指示的配置类创建ApplicationContext
    如果未设置classes属性,Spring Boot将搜索主配置类。搜索从包含测试的包开始,直到找到使用@SpringBootApplication@SpringBootConfiguration注释的类。
    请注意,如果我们使用JUnit 4,我们必须用@RunWith(SpringRunner.class)装饰测试类。可以查阅我前面的关于Spring Boot Mock测试的文章来学习更多的测试方式。
     
    问:Spring Boot Actuator有什么用?
    答:Spring Boot Actuator可以帮助你监控和管理Spring Boot应用,比如健康检查、审计、统计和HTTP追踪等。所有的这些特性可以通过JMX或者HTTP endpoints来获得。
    Actuator同时还可以与外部应用监控系统整合,比如 Prometheus, Graphite, DataDog, Influx, Wavefront, New Relic等。这些系统提供了非常好的仪表盘、图标、分析和告警等功能,使得你可以通过统一的接口轻松的监控和管理你的应用。
    Actuator使用Micrometer来整合上面提到的外部应用监控系统。这使得只要通过非常小的配置就可以集成任何应用监控系统。
    将Spring Boot Actuator集成到一个项目中非常简单。我们需要做的就是在pom.xml文件中包含 spring-boot-starter-actuator启动器:
    Spring Boot Actuator可以使用HTTP或JMX端点公开操作信息。但是,大多数应用程序都使用HTTP,其中端点的标识和/执行器前缀形成URL路径。
    以下是Actuator提供的一些最常见的内置端点:
    • auditevents: 公开审计事件信息
    • env: 公开环境属性
    • health: 显示应用程序运行状况信息
    • httptrace: 显示HTTP跟踪信息
    • info: 显示任意应用程序信息
    • metric: 显示指标信息
    • mapping: 显示所有@RequestMapping路径的列表
    • scheduledtasks: 显示应用程序中的计划任务
    • threaddump: 执行线程转储
    • beans :所有加载的spring bean
    生产使用Actuator务必保护好这些端点,避免未授权的访问请求。
    本站所有文章均由网友分享,仅用于参考学习用,请勿直接转载,如有侵权,请联系网站客服删除相关文章。若由于商用引起版权纠纷,一切责任均由使用者承担
    极客文库 » 高薪必备的一些Spring Boot高级面试题

    常见问题FAQ

    如果资源链接失效了怎么办?
    本站用户分享的所有资源都有自动备份机制,如果资源链接失效,请联系本站客服QQ:2580505920更新资源地址。
    如果用户分享的资源与描述不符怎么办?
    可以联系客服QQ:2580505920,如果要求合理可以安排退款或者退赞助积分。
    如何分享个人资源获取赞助积分或其他奖励?
    本站用户可以分享自己的资源,但是必须保证资源没有侵权行为。点击个人中心,根据操作填写并上传即可。资源所获收益完全归属上传者,每周可申请提现一次。
    如果您发现了本资源有侵权行为怎么办?
    及时联系客服QQ:2580505920,核实予以删除。

    参与讨论

    • 125会员总数(位)
    • 3725资源总数(个)
    • 5本周发布(个)
    • 0 今日发布(个)
    • 295稳定运行(天)

    欢迎加入「极客文库」,成为原创作者从这里开始!

    立即加入 了解更多
    成为赞助用户享有更多特权立即升级