2023-07-13实习笔记

92 阅读8分钟

import java.util.List;

@Configuration
public class BMInterceptorConfigurer implements WebMvcConfigurer {

    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
        resolvers.add(new BMRequestParamHandlerMethodArgumentResolver());
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new BMSignCheckInterceptor()).addPathPatterns("/**");
    }
}

1.以上代码的作用是什么?

以上代码是一个配置类,用于配置Spring MVC的拦截器和方法参数解析器。 作用如下:

addArgumentResolvers()注册BMRequestParamHandlerMethodArgumentResolver类为自定义的方法参数解析器,用于处理请求中的自定义参数类型。通过重写addArgumentResolvers()方法,将BMRequestParamHandlerMethodArgumentResolver实例添加到解析器列表中。

addInterceptors()注册BMSignCheckInterceptor类为自定义的拦截器,用于对请求进行签名验证。通过重写addInterceptors()方法,将BMSignCheckInterceptor实例添加到拦截器注册表中,并指定拦截的路径为"/**",即对所有请求进行拦截。

该配置类的作用是在Spring MVC中配置自定义的方法参数解析器和拦截器,以实现对请求参数的处理和对请求的拦截验证操作。

2.LocalTime如何转换为Date?

要将LocalTime转换为Date,需要将LocalTime与当前日期(LocalDate)相结合,以创建一个LocalDateTime,然后再将其转换为Date

下面是一个示例代码段,演示了如何执行此转换:

import java.time.LocalTime;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;

public class Main {
    public static void main(String[] args) {
        LocalTime localTime = LocalTime.of(12, 30, 0); // 示例 LocalTime

        LocalDate currentDate = LocalDate.now(); // 当前日期
        LocalDateTime localDateTime = LocalDateTime.of(currentDate, localTime); // 将 LocalTime 与当前日期相结合

        // 将 LocalDateTime 转换为 Date
        Date date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());

        System.out.println("LocalTime: " + localTime);
        System.out.println("Date: " + date);
    }
}

请注意,在转换为Date时,我们使用了默认的系统时区(ZoneId.systemDefault())。根据需求,可以使用不同的时区。

3.Exception in thread "main" com.alibaba.fastjson.JSONException: Text '08:00' could not be parsed at index 如何解决?

这个错误提示表明在解析文本时发生了错误,具体是在解析'08:00'时出错。以下是一些可能的解决方案:

  1. 检查文本格式:确保要解析的文本符合正确的时间格式。在大多数情况下,时间格式应该是'HH:mm',其中HH表示小时(24小时制),mm表示分钟。如果文本格式不正确,则需要调整文本以匹配正确的格式。

  2. 使用适当的解析方法:根据你在使用的编程语言和库的文档,查找适当的方法来解析时间。不同的编程语言和库可能有不同的解析方法。

  3. 检查语言环境:确保你的代码所用的语言环境正确设置。有时,不同的语言环境可能会影响时间解析的方式。

  4. 更新库版本:如果你使用的是第三方库进行时间解析,尝试更新库的版本,以确保你使用的是最新版本。有时,旧版本的库可能存在解析问题,而新版本可能已修复了这些问题。

3.java waitfor()方法的作用是什么?

waitFor() 是 Java 中 Process 类的一个方法。它的主要作用是使当前线程等待,直到由此 Process 对象表示的进程已经终止。这个方法返回的是被终止的子进程的退出值。如果当前线程被中断,它会抛出 InterruptedException。这个方法常常用于在一个线程中启动另一个进程并等待其完成。

例如,如果你在 Java 中启动了一个外部程序,你可能会想要等待这个程序完成。这就是 waitFor() 方法用武之地。这个方法会阻塞当前线程,直到外部程序完成。

  1. Redis 的 常用配置命令
save命令

Redis的SAVE命令用于将数据集保存到磁盘中,创建一个持久化的快照文件。它的主要涵义是:

  1. 持久化数据:SAVE命令将Redis服务器中的所有数据持久化到磁盘上的一个快照文件中。这样,在Redis服务器重新启动后,可以通过加载这个快照文件来恢复之前的数据。保存的快照文件包含了所有的键值对数据和键的相关配置参数。

  2. 数据备份:通过定期执行SAVE命令,可以创建数据的备份,以防止数据丢失或意外故障。通过将数据保存到磁盘上的快照文件中,可以避免在Redis服务器重启时丢失已存储在内存中的数据。

  3. 系统恢复:当Redis服务器出现异常或崩溃时,可以使用SAVE命令创建的快照文件进行系统恢复。通过加载快照文件,可以将之前保存的数据恢复到Redis服务器中,并继续提供服务。

需要注意的是,SAVE命令会阻塞Redis服务器的进程,直到保存操作完成为止。因此,在处理大型数据集时,会出现一定的延迟。如果不希望阻塞Redis服务器进程,可以使用BGSAVE命令进行异步保存操作。

另外,可以使用CONFIG命令来配置SAVE命令的相关参数,如保存快照文件的路径和文件名等。默认情况下,快照文件会保存在redis.conf配置文件中指定的dir目录下,并使用名为"dump.rdb"的文件名

例:redis中save 900 1的作用是什么?

在Redis中,SAVE命令可以接受可选的两个参数:SAVE [SCHEDULE] [CHANGED]:

  1. 第一个参数900表示时间间隔(以秒为单位)。它表示Redis服务器在900秒(15分钟)内没有执行写操作时,将自动执行SAVE命令进行数据持久化。

  2. 第二个参数1表示Redis服务器在检测到至少一个键发生变化时,才会执行SAVE命令进行数据持久化。如果没有设置这个参数,即为0,则表示Redis服务器在检测到写操作的任何变化时都会执行SAVE命令。

因此,"SAVE 900 1"的作用是告诉Redis服务器在经过900秒且至少有一个键发生变化时,自动执行SAVE命令来持久化数据。这样可以确保Redis数据在一段时间内被持久化,以备份或恢复服务器时使用,同时也减少了频繁执行SAVE操作的开销。

需要注意的是,SAVE命令会阻塞Redis服务器进程,因此在操作大型数据集时可能会导致一定的延迟。如果不希望阻塞服务器进程,可以考虑使用BGSAVE命令进行异步保存操作。

rdbcompression命令

redis中的 rdbcompression yes 有什么作用?

在Redis中,rdbcompression配置项用于指定是否在进行RDB持久化时对快照文件进行压缩。

当rdbcompression设置为yes时,Redis在将快照文件保存到磁盘前会对其进行压缩。这意味着生成的RDB文件将使用压缩算法进行压缩,以减少文件所占用的存储空间。

rdbcompression的作用主要有两个方面:

  1. 节省存储空间:通过启用RDB文件的压缩,可以显著减少持久化文件所占用的磁盘空间。特别是当Redis的数据集非常大时,启用压缩可以节省大量的存储空间。

  2. 降低网络传输成本:如果需要将RDB文件从一个Redis服务器传输到另一个Redis服务器,启用了rdbcompression可以减少传输的数据量,从而降低网络传输成本和时间。

需要注意的是,启用rdbcompression会增加RDB持久化过程的CPU使用量,因为数据需要进行压缩和解压缩。如果系统的CPU资源受限,可能会导致持久化操作的性能下降。因此,在设置rdbcompression时需要根据实际情况进行权衡。

默认情况下,rdbcompression的值为yes,即启用RDB文件的压缩。如果不希望压缩RDB文件,则可以将其设置为no,但这会导致持久化文件的大小增加。可以通过修改redis.conf配置文件或使用CONFIG SET命令来设置rdbcompression的值。

指定存储至本地数据库时是否压缩数据,默认为 yes,Redis 采用 LZF 压缩,如果为了节省 CPU 时间,可以关闭该选项,但会导致数据库文件变的巨大

dbfilename 命令

指定本地数据库文件名,默认值为 dump.rdb

dir ./

指定本地数据库存放目录

slaveof <masterip> <masterport>

设置当本机为 slave 服务时,设置 master 服务的 IP 地址及端口,在 Redis 启动时,它会自动从 master 进行数据同步

masterauth <master-password>

当 master 服务设置了密码保护时,slave 服务连接 master 的密码

5.开发注意事项:

  • 注意使用HTTP Client/RestTmplteClient等I/O流之后一定要及时关闭流。
  • 另外如果有两个请求一定要开启两个连接否则可能会造成连接自动关闭。