欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring 家族面试题 021 - 030

程序员文章站 2022-05-22 20:26:36
...

021、什么是 Spring 框架?有什么缺点?

Spring 为企业级 Java 应用的开发提供了一种相对简单的方法,通过依赖注入和面向切面编程大大提高了开发效率,并且提高了系统的可维护性和可扩展性。

Spring 的组件代码是轻量级的,但它的配置却是重量级的,为了简化配置,后来有创建了 Spring Boot。

022、开发 RESTful 服务常用的注解有哪些?

Spring Bean 相关

  • @Autowired : 自动导入对象到类中,被注入进的类同样要被 Spring 容器管理。
  • @RestController : @RestController注解是@Controller和@ResponseBody的合集,表示这是个控制器 bean,并且是将函数的返回值直 接填入 HTTP 响应体中,是 REST 风格的控制器。
  • @Component :通用的注解,可标注任意类为 Spring 组件。如果一个 Bean 不知道属于哪个层,可以使用@Component 注解标注。
  • @Repository : 对应持久层即 Dao 层,主要用于数据库相关操作。
  • @Service : 对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao 层。
  • @Controller : 对应 Spring MVC 控制层,主要用于接受用户请求并调用 Service 层返回数据给前端页面。

处理常见的 HTTP 请求类型

  • @GetMapping : GET 请求。
  • @PostMapping : POST 请求。
  • @PutMapping : PUT 请求。
  • @DeleteMapping : DELETE 请求。

前后端传值

  • @RequestParam以及@Pathvairable@PathVariable 用于获取路径参数,@RequestParam 用于获取查询参数。
  • @RequestBody :用于读取 Request 请求(可能是 POST,PUT,DELETE,GET 请求)的 body 部分并且 Content-Type 为 application/json 格式的数据,接收到数据之后会自动将数据绑定到 Java 对象上去。系统会使用HttpMessageConverter或者自定义的HttpMessageConverter将请求的 body 中的 json 字符串转换为 java 对象。

023、Spring Boot 常见的两种配置文件?

application.propertiesapplication.yml

YAML 是一种人类可读的数据序列化语言,相比于 Properties 配置的方式,YAML 文件就更加结构化,YAML 配置的方式更加直观清晰,简介明了,有层次感。

但是,YAML 配置的方式有一个缺点,那就是不支持 @PropertySource 注解导入自定义的 YAML 配置。

024、Spring Boot 如何监控系统实际运行状况?

我们可以使用 Spring Boot Actuator 来对 Spring Boot 项目进行简单的监控。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

集成了这个模块之后,你的 Spring Boot 应用程序就自带了一些开箱即用的获取程序运行时的内部状态信息的 API。

比如通过 GET 方法访问 /health 接口,你就可以获取应用程序的健康指标。

025、Spring Boot 如何做请求参数校验?

Spring Boot 程序做请求参数校验的话只需要 spring-boot-starter-web 依赖就够了,它的子依赖包含了我们所需要的东西。

JSR 提供的校验注解

  • @Null 被注释的元素必须为 null
  • @NotNull 被注释的元素必须不为 null
  • @AssertTrue 被注释的元素必须为 true
  • @AssertFalse 被注释的元素必须为 false
  • @Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
  • @Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
  • @DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
  • @DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
  • @Size(max=, min=) 被注释的元素的大小必须在指定的范围内
  • @Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
  • @Past 被注释的元素必须是一个过去的日期
  • @Future 被注释的元素必须是一个将来的日期
  • @Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式

Hibernate Validator 提供的校验注解

  • @NotBlank(message =) 验证字符串非 null,且长度必须大于 0
  • @Email 被注释的元素必须是电子邮箱地址
  • @Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
  • @NotEmpty 被注释的字符串的必须非空
  • @Range(min=,max=,message=) 被注释的元素必须在合适的范围内

更多内容请参考: 如何在 Spring/Spring Boot 中做参数校验?你需要了解的都在这里!

026、如何使用 Spring Boot 实现全局异常处理?

可以使用 @ControllerAdvice@ExceptionHandler 处理全局异常。

更多内容请参考:Spring Boot 异常处理在实际项目中的应用

027、Spring Boot 如何启动一个定时任务?

使用 @Scheduled 注解就能很方便地创建一个定时任务。

@Component
public class ScheduledTasks {
    private static final Logger log = LoggerFactory.getLogger(ScheduledTasks.class);
    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

    /**
     * fixedRate:固定速率执行。每5秒执行一次。
     */
    @Scheduled(fixedRate = 5000)
    public void reportCurrentTimeWithFixedRate() {
        log.info("Current Thread : {}", Thread.currentThread().getName());
        log.info("Fixed Rate Task : The time is now {}", dateFormat.format(new Date()));
    }
}

但单纯依靠 @Scheduled 注解还不行,我们还需要在启动类上加上 @EnableScheduling 注解,这样才可以启动定时任务。

@EnableScheduling 注解的作用是发现注解 @Scheduled 的任务并在后台执行该任务。

028、未完待续

029、

030、