Spring Boot 高级面试题

13. Spring Boot 提供了哪些基本注解?

Spring Boot 提供了几个注释来简化基于 Spring 的应用程序的开发。以下是 Spring Boot 提供的一些基本注解:

@SpringBootApplication:这个注解用来标记一个Spring Boot应用的主类。它启用组件扫描、自动配置并启动嵌入式 Web 服务器。

@Controller:此注解用于将类标记为 Spring MVC 控制器。它处理 HTTP 请求并返回 HTTP 响应。

@RestController :这个注解是@Controller 和@ResponseBody的组合。它用于将类标记为 RESTful 控制器。它处理 HTTP 请求并返回 JSON/XML 响应。

@Service:此注解用于将类标记为服务。它封装了应用程序的业务逻辑。

@Repository:此注释用于将类标记为存储库。它用于与数据库交互。

@Component:此注释是所有 Spring 管理的组件的基本注释。它用于将类标记为 bean。

@Autowired:此注释用于将依赖项注入到 Spring 管理的 bean 中。

@Qualifier:此注解用于指定当有多个相同类型的bean 可用时注入哪个bean。

@Value:此注释用于将属性文件中的值注入到 Spring 管理的 bean 中。

@Configuration:此注解用于将类标记为配置类。它为 Spring 应用程序上下文提供配置。

@Profile:此注释用于根据指定的配置文件激活/停用 bean。

@RequestMapping:此注释用于将 HTTP 请求映射到控制器中的方法。

@PathVariable:此注释用于从 URL 路径中提取变量。

这些是 Spring Boot 提供的一些基本注解。您可以在 Spring 文档中探索更多可用的注释。

14.什么是Spring Boot依赖管理?

Spring Boot 依赖管理用于自动管理依赖和配置,而无需为任何依赖指定版本。

15. 我们可以在 Spring Boot 中创建非 Web 应用程序吗?

是的,可以在 Spring Boot 中创建非 Web 应用程序。尽管 Spring Boot 通常用于开发 Web 应用程序,但它也可以用于非 Web 应用程序。

Spring Boot 提供了几个与 Web 开发无关的特性。例如,Spring Boot 提供了对数据访问、缓存、消息传递、调度和批处理的支持。这些功能可用于开发非 Web 应用程序,例如命令行应用程序、独立应用程序、后台任务和批处理作业。

要在 Spring Boot 中创建非 Web 应用程序,您可以从项目中排除与 Web 相关的依赖项。您可以通过将spring-boot-starter依赖项添加到您的pom.xml文件并使用标记排除与 Web 相关的依赖项来执行此操作exclude

例如,要创建一个命令行应用程序,您可以将spring-boot-starter依赖项添加到您的pom.xml文件中,并排除与 Web 相关的依赖项,如下所示:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </exclusion>
    </exclusions>
</dependency>

一旦排除了与 Web 相关的依赖项,就可以使用 Spring Boot 功能来开发非 Web 应用程序。例如,您可以使用 Spring Data 访问数据库,使用 Spring Batch 处理大量数据,或者使用 Spring Integration 与其他系统集成。

综上所述,Spring Boot 也可以用来开发非 Web 应用程序,它提供了几个与 Web 开发无关的特性。

16. 是否可以在Spring Boot中更改嵌入式Tomcat服务器的端口?

是的,可以在 Spring Boot 中更改嵌入式 Tomcat 服务器的端口。application.properties默认情况下,Spring Boot 应用程序在端口 8080 上运行。但是,您可以通过修改或文件更改端口application.yml

要在 Spring Boot 中更改嵌入式 Tomcat 服务器的端口,您可以将以下行添加到您的文件中application.properties

server.port=8081

在上面的示例中,服务器将在端口 8081 而不是默认端口 8080 上启动。

或者,您也可以在文件中指定端口,application.yml如下所示:

server:
  port: 8081

除了该属性之外,您还可以在文件application.properties或者application.yml中指定与 Tomcat 服务器相关的其他属性。例如,您可以设置最大线程数、最大请求大小或空闲连接超时。

综上所述,可以通过修改application.properties或者application.yml文件来改变Spring Boot中嵌入式Tomcat服务器的端口。这提供了灵活性,并允许您在与默认端口 8080 不同的端口上运行 Spring Boot 应用程序。

17、spring boot中tomcat的默认端口是什么?

tomcat server-id 的默认端口为8080。可以通过在application.property文件中添加sever.port属性来更改。

18.我们可以覆盖或替换Spring Boot中的Embedded tomcat服务器吗?

是的,我们可以通过使用pom.xml文件中的 Starter 依赖项将 Embedded Tomcat 服务器替换为任何服务器。就像您可以使用 spring-boot-starter-jetty 作为在项目中使用码头服务器的依赖项。

19. 我们可以禁用 Spring boot 应用程序中的默认 Web 服务器吗?

是的,我们可以使用application.properties来配置 web 应用类型即spring.main.web-application-type=none。

20. 如何禁用特定的自动配置类?

如果您希望自动配置不适用于任何特定类,则可以使用 @EnableAutoConfiguration 的排除属性。

//排除的使用
@EnableAutoConfiguration(exclude={className})

21.解释一下Sprint启动时的@RestController注解?

它是@Controller 和@ResponseBody 的组合,用于创建一个宁静的控制器。它将响应转换为 JSON 或 XML。它确保每个方法返回的数据将直接写入响应主体而不是返回模板

22.Spring Boot中@RestController和@Controller有什么区别?

@Controller 将模型对象映射到视图或模板并使其可读,但@RestController 只是返回对象,对象数据直接以 JSON 或 XML 的形式写入 HTTP 响应。

23. 描述一下 HTTPS 请求通过 Spring Boot 应用的流程?

当向 Spring Boot 应用程序发出 HTTPS 请求时,请求会流经一系列组件和进程。通过 Spring Boot 应用程序的 HTTPS 请求流可以描述如下:

  • 客户端向 Spring Boot 应用程序发送 HTTPS 请求。
  • 该请求由 Spring Boot 应用程序中的嵌入式 Tomcat 服务器接收。
  • SSL/TLS 握手过程由 Tomcat 服务器发起。服务器向客户端出示其数字证书以验证其自身。
  • 如果客户端信任服务器的证书,它会发送一条消息表明握手成功。如果客户端不信任服务器的证书,它将拒绝连接。
  • SSL/TLS 握手完成后,请求将传递给 Spring MVC DispatcherServlet。
  • DispatcherServlet 分析请求并将其映射到适当的控制器和处理程序方法。
  • 控制器处理请求并将 ModelAndView 对象返回给 DispatcherServlet。
  • DispatcherServlet 然后解析视图,生成响应,并通过加密的 HTTPS 连接将其发送回客户端。
  • 如果客户端需要发出另一个请求,则该过程从步骤 1 开始重复。

总之,通过 Spring Boot 应用程序的 HTTPS 请求流涉及 SSL/TLS 握手过程、Spring MVC DispatcherServlet 以及控制器和视图组件。此流程确保请求和响应通过加密连接安全传输,保护敏感数据免遭窃听和篡改。

24.RequestMapping和GetMapping有什么区别?

RequestMapping 可以与 GET、POST、PUT 和许多其他使用注释上的方法属性的请求方法一起使用。而 getMapping 只是 RequestMapping 的扩展,它可以帮助您提高请求的清晰度。

25. spring boot中的Profiles有什么用?

在开发应用程序时,我们处理多个环境,例如开发、QA、Prod,每个环境都需要不同的配置。例如,我们可能会为开发使用嵌入式 H2 数据库,但对于生产,我们可能拥有专有的 Oracle 或 DB2。即使 DBMS 在整个环境中相同,URL 也会不同。

为了使这变得简单和干净,Spring 提供了配置文件来保持环境的单独配置。

26.什么是弹簧执行器?它的优点是什么?

执行器是 Spring 的一项附加功能,可帮助您在将应用程序推送到生产环境时对其进行监控和管理。这些执行器包括审计、运行状况、CPU 使用率、HTTP 命中和指标收集,以及许多自动应用于您的应用程序的执行器。

27.如何在Spring boot应用中启用Actuator?

Actuator 是一组 Spring Boot 模块,可提供生产就绪的功能来帮助您监控和管理您的应用程序。要在 Spring Boot 应用程序中启用 Actuator,您可以按照以下步骤操作:

  1. 将 Actuator 依赖项添加到您的pom.xml文件或build.gradle文件中。例如,如果您使用的是 Maven,请添加以下依赖项:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2. 添加依赖后,Actuator端点将默认启用。http://localhost:8080/actuator您可以通过在浏览器中访问 URL 来访问它们。

请注意,实际端口号可能会有所不同,具体取决于您的应用程序的配置。

3.也可以通过修改application.properties或者application.yml文件来自定义Actuator端点。例如,要启用/health端点,您可以将以下行添加到您的application.properties文件中:

management.endpoints.web.exposure.include=health

这将公开/health端点,该端点将提供有关应用程序运行状况的信息。

4. 您还可以通过创建一个实现该Endpoint接口的新类来添加自定义执行器端点。例如,要创建一个自定义端点来提供有关应用程序中活动会话数的信息,您可以创建一个类,如下所示:

@Endpoint(id = "session-count")
public class SessionCountEndpoint {

    private final HttpSession httpSession;

    public SessionCountEndpoint(HttpSession httpSession) {
        this.httpSession = httpSession;
    }

    @ReadOperation
    public int getSessionCount() {
        return httpSession.getActiveSessions().size();
    }
}

此类使用 ID 创建一个新端点session-count,并提供有关应用程序中活动会话数的信息。http://localhost:8080/actuator/session-count然后,您可以通过在浏览器中访问 URL 来访问此端点。

总之,要在 Spring Boot 应用程序中启用 Actuator,您需要将 Actuator 依赖项添加到您的项目中,然后您就可以访问 Actuator 端点http://localhost:8080/actuator。您可以通过修改application.properties或者application.yml文件来自定义 Actuator 端点,也可以通过创建实现该Endpoint接口的新类来添加自定义端点。

29. 如何检查 Spring boot 应用程序中的环境属性?

Spring Boot 执行器“/env”返回运行 Spring Boot 应用程序的所有环境属性列表。

30.什么是依赖注入?

依赖注入 (DI) 是软件工程中使用的一种设计模式,也是 Spring Framework 和 Spring Boot 中的一个基本概念。DI 是向类提供依赖项(对象)的过程,而不是类创建自己的依赖项。换句话说,DI 是一种从代码中删除硬编码依赖项并在外部提供它们的方法。

DI 背后的核心思想是通过删除它们之间的硬编码依赖关系来解耦应用程序中的类。相反,依赖项通过构造函数、方法或字段传递给类。这使得代码更加模块化,更容易测试,也更容易维护。

DI 通常使用控制反转 (IoC) 容器实现,例如 Spring Framework。容器管理对象及其依赖的生命周期,并在运行时自动将必要的依赖注入到对象中。依赖项使用一组规则或配置进行配置,这些规则或配置通常存储在 XML、Java 注释或 Java 代码中。

在 Spring Boot 中,DI 是贯穿整个框架的关键概念。例如,当您@Autowired在代码中使用注释时,Spring Boot 会自动将必要的依赖项注入到您的对象中,从而更容易编写模块化、可测试和可维护的代码。

综上所述,Dependency Injection 是软件工程中使用的一种设计模式,用于去除类之间硬编码的依赖关系,并向外部提供依赖关系。它是 Spring Framework 和 Spring Boot 中的一个基本概念,通常使用控制反转容器来实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值