1.如何在springboot启动时,获取/data/目录下的所有文件名。

您可以使用Java的File类来获取指定目录下的所有文件名。以下是一种在Spring Boot应用程序启动时获取指定目录下所有文件名的方法:

在您的Spring Boot应用程序中,创建一个服务或组件类,用于获取文件名。
java
Copy code
@Component
public class FileNameService {

private final String directoryPath = "/data/";

public List<String> getAllFileNames() {
    List<String> fileNames = new ArrayList<>();
    File directory = new File(directoryPath);
    File[] fileList = directory.listFiles();
    if (fileList != null) {
        for (File file : fileList) {
            if (file.isFile()) {
                fileNames.add(file.getName());
            }
        }
    }
    return fileNames;
}

}
在Spring Boot应用程序的启动类或配置类中,使用@Autowired或@Bean注解注入FileNameService,以便在应用程序启动时调用getAllFileNames方法。
java
Copy code
@SpringBootApplication
public class MyApp {

@Autowired
private FileNameService fileNameService;

public static void main(String[] args) {
    SpringApplication.run(MyApp.class, args);
}

@PostConstruct
public void printFileNames() {
    List<String> fileNames = fileNameService.getAllFileNames();
    System.out.println("All file names in /data/ directory:");
    fileNames.forEach(System.out::println);
}

}
启动应用程序,您将看到所有位于/data/目录中的文件名。
请注意,这种方法仅适用于获取/data/目录中的文件名,不包括子目录中的文件名。如果您想要获取子目录中的文件名,您需要使用递归方法来遍历整个目录树。

2.请描述一下,从输入URL地址,到页面完成展示之间发生了什么,应用做了前后端分离,后台服务只有一个进程,没有调用其他服务,有使用数据库,建议画出流程图。
客户端输入URL地址,包括协议、主机名、端口号和请求路径等信息,如:http://www.example.com:8080/index.html。
客户端向DNS服务器发出域名解析请求,将域名解析为对应的IP地址,如:192.168.1.1。
客户端向服务器发送HTTP请求,请求包括HTTP方法、请求头、请求体等信息。
服务器接收到HTTP请求后,解析请求,根据请求路径和参数等信息,将请求转发给前端服务处理。
前端服务接收到请求后,根据请求路径和参数等信息,处理相应的业务逻辑,包括根据需要向后台服务发送请求,读取数据库等操作。
前端服务将处理结果封装成HTTP响应,包括响应码、响应头、响应体等信息,返回给服务器。
服务器接收到HTTP响应后,解析响应,将响应转发给客户端。
客户端接收到HTTP响应后,解析响应,根据响应头和响应体等信息,渲染页面。
客户端将渲染后的页面展示给用户。

3.有一个表A,请使用SQL找出所有根据user_code重复,且open_time与close_time存在重复的数据,如果close_time为空则默认为关闭时间无穷大。

Id user_code … open_time close_time
 1 A 2019-01-01 2019-12-31
 2 B 2019-02-01 
 3 C 2019-02-03 2019-12-31
 … 
 100 A 2020-01-01 
 101 C 2018-01-01 2020-12-31
 … 
 200 A 2020-06-01 
 201 B 2019-06-01 2020-12-31
 …

例如上表中的数据,第1行与100、200行虽然user_code重复,但时间不重叠,不应该被查出来;100行与200行user_code重复,且open_time与close_time存在重叠;3行与101行的存在重叠应该被查出来;2行与201行时间存在重叠应该查出来。

SELECT A1., A2.
FROM A AS A1
INNER JOIN A AS A2
ON A1.user_code = A2.user_code
AND A1.Id < A2.Id
AND ((A1.close_time IS NULL AND A2.close_time IS NULL) OR
(A1.close_time >= A2.open_time AND (A2.close_time IS NULL OR A1.open_time <= A2.close_time)))

4.现在有一个数字与字母的映射表,且有以下规则:

映射表:
数字 字母
3 A
5 B
7 C

规则:

1.碰到当前数字时,使用字母替换,例如,3-> A
2.碰到当前数字的倍数时,使用字母替换, 例如:6->A
3.碰到多个数字的倍数时,使用多个对应的字母替代,例如:15 -> AB,21->AC
请根据映射表和规则,给出0-100之间的转换结果,提示:不要直接在for循环中使用if判断,尽可能的使用设计模式。

package com.eric.springboottest;
import java.util.HashMap;
 import java.util.Map;public class Converter {
 private final RuleChain ruleChain;public Converter() {
    Map<Integer, String> map = new HashMap<>();
    map.put(3,"A");
    map.put(5,"B");
    map.put(7,"C");
    this.ruleChain = new RuleChain(map);
}

public String convert(int n) {
    StringBuilder result = new StringBuilder();// for (int i = 1; i <= n; i++) {
 // result.append(ruleChain.handle(i)).append(" ");
 // }
 result.append(ruleChain.handle(n));
 return result.toString().trim();
 }
public static void main(String[] args) {
    /**
     * 在这个实现中,MappingRule 接口定义了单个数字的转换规则,NumberLetterMappingRule 类实现了该接口,
     * 并封装了单个数字的映射规则。RuleChain 类实现了 MappingRule 接口,封装了多个数字的转换规则。
     * Converter 类将规则链和输入数字结合在一起进行转换。
     */
    Converter converter = new Converter();
    System.out.println(converter.convert(15));
}
}
package com.eric.springboottest;
public interface MappingRule {
String handle(int n);}
package com.eric.springboottest;
public class NumberLetterMappingRule implements MappingRule {
 private final int number;
 private final String letter;public NumberLetterMappingRule(int number, String letter) {
    this.number = number;
    this.letter = letter;
}

@Override
public String handle(int n) {
    if (n % number == 0) {
        return letter;
    }
    return "";
}}
package com.eric.springboottest;
import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;public class RuleChain implements MappingRule {
private final List<MappingRule> rules;

public RuleChain(Map<Integer, String> mappingRules) {
    this.rules = new ArrayList<>();
    for (Map.Entry<Integer, String> entry : mappingRules.entrySet()) {
        rules.add(new NumberLetterMappingRule(entry.getKey(), entry.getValue()));
    }
}

@Override
public String handle(int n) {
    StringBuilder result = new StringBuilder();
    for (MappingRule rule : rules) {
        result.append(rule.handle(n));
    }
    if (result.length() == 0) {
        result.append(n);
    }
    return result.toString();
}

}
1.如何在springboot启动时,获取/data/目录下的所有文件名。

您可以使用Java的File类来获取指定目录下的所有文件名。以下是一种在Spring Boot应用程序启动时获取指定目录下所有文件名的方法:

在您的Spring Boot应用程序中,创建一个服务或组件类,用于获取文件名。
java
Copy code
@Component
public class FileNameService {

private final String directoryPath = "/data/";

public List<String> getAllFileNames() {
    List<String> fileNames = new ArrayList<>();
    File directory = new File(directoryPath);
    File[] fileList = directory.listFiles();
    if (fileList != null) {
        for (File file : fileList) {
            if (file.isFile()) {
                fileNames.add(file.getName());
            }
        }
    }
    return fileNames;
}

}
在Spring Boot应用程序的启动类或配置类中,使用@Autowired或@Bean注解注入FileNameService,以便在应用程序启动时调用getAllFileNames方法。

java
 Copy code
 @SpringBootApplication
 public class MyApp {
@Autowired
private FileNameService fileNameService;

public static void main(String[] args) {
    SpringApplication.run(MyApp.class, args);
}

@PostConstruct
public void printFileNames() {
    List<String> fileNames = fileNameService.getAllFileNames();
    System.out.println("All file names in /data/ directory:");
    fileNames.forEach(System.out::println);
}

}
启动应用程序,您将看到所有位于/data/目录中的文件名。
请注意,这种方法仅适用于获取/data/目录中的文件名,不包括子目录中的文件名。如果您想要获取子目录中的文件名,您需要使用递归方法来遍历整个目录树。

2.请描述一下,从输入URL地址,到页面完成展示之间发生了什么,应用做了前后端分离,后台服务只有一个进程,没有调用其他服务,有使用数据库,建议画出流程图。
客户端输入URL地址,包括协议、主机名、端口号和请求路径等信息,如:http://www.example.com:8080/index.html。
客户端向DNS服务器发出域名解析请求,将域名解析为对应的IP地址,如:192.168.1.1。
客户端向服务器发送HTTP请求,请求包括HTTP方法、请求头、请求体等信息。
服务器接收到HTTP请求后,解析请求,根据请求路径和参数等信息,将请求转发给前端服务处理。
前端服务接收到请求后,根据请求路径和参数等信息,处理相应的业务逻辑,包括根据需要向后台服务发送请求,读取数据库等操作。
前端服务将处理结果封装成HTTP响应,包括响应码、响应头、响应体等信息,返回给服务器。
服务器接收到HTTP响应后,解析响应,将响应转发给客户端。
客户端接收到HTTP响应后,解析响应,根据响应头和响应体等信息,渲染页面。
客户端将渲染后的页面展示给用户。

3.有一个表A,请使用SQL找出所有根据user_code重复,且open_time与close_time存在重复的数据,如果close_time为空则默认为关闭时间无穷大。

Id user_code … open_time close_time
 1 A 2019-01-01 2019-12-31
 2 B 2019-02-01 
 3 C 2019-02-03 2019-12-31
 … 
 100 A 2020-01-01 
 101 C 2018-01-01 2020-12-31
 … 
 200 A 2020-06-01 
 201 B 2019-06-01 2020-12-31
 …

例如上表中的数据,第1行与100、200行虽然user_code重复,但时间不重叠,不应该被查出来;100行与200行user_code重复,且open_time与close_time存在重叠;3行与101行的存在重叠应该被查出来;2行与201行时间存在重叠应该查出来。

SELECT A1., A2.
FROM A AS A1
INNER JOIN A AS A2
ON A1.user_code = A2.user_code
AND A1.Id < A2.Id
AND ((A1.close_time IS NULL AND A2.close_time IS NULL) OR
(A1.close_time >= A2.open_time AND (A2.close_time IS NULL OR A1.open_time <= A2.close_time)))

4.现在有一个数字与字母的映射表,且有以下规则:

映射表:
数字 字母
3 A
5 B
7 C

规则:

1.碰到当前数字时,使用字母替换,例如,3-> A
2.碰到当前数字的倍数时,使用字母替换, 例如:6->A
3.碰到多个数字的倍数时,使用多个对应的字母替代,例如:15 -> AB,21->AC
请根据映射表和规则,给出0-100之间的转换结果,提示:不要直接在for循环中使用if判断,尽可能的使用设计模式。

package com.eric.springboottest;
import java.util.HashMap;
 import java.util.Map;public class Converter {
 private final RuleChain ruleChain;public Converter() {
    Map<Integer, String> map = new HashMap<>();
    map.put(3,"A");
    map.put(5,"B");
    map.put(7,"C");
    this.ruleChain = new RuleChain(map);
}

public String convert(int n) {
    StringBuilder result = new StringBuilder();// for (int i = 1; i <= n; i++) {
 // result.append(ruleChain.handle(i)).append(" ");
 // }
 result.append(ruleChain.handle(n));
 return result.toString().trim();
 }public static void main(String[] args) {
    /**
     * 在这个实现中,MappingRule 接口定义了单个数字的转换规则,NumberLetterMappingRule 类实现了该接口,
     * 并封装了单个数字的映射规则。RuleChain 类实现了 MappingRule 接口,封装了多个数字的转换规则。
     * Converter 类将规则链和输入数字结合在一起进行转换。
     */
    Converter converter = new Converter();
    System.out.println(converter.convert(15));
}}
package com.eric.springboottest;
public interface MappingRule {
String handle(int n);}
package com.eric.springboottest;
public class NumberLetterMappingRule implements MappingRule {
 private final int number;
 private final String letter;public NumberLetterMappingRule(int number, String letter) {
    this.number = number;
    this.letter = letter;
}

@Override
public String handle(int n) {
    if (n % number == 0) {
        return letter;
    }
    return "";
}}
package com.eric.springboottest;
import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;public class RuleChain implements MappingRule {
private final List<MappingRule> rules;

public RuleChain(Map<Integer, String> mappingRules) {
    this.rules = new ArrayList<>();
    for (Map.Entry<Integer, String> entry : mappingRules.entrySet()) {
        rules.add(new NumberLetterMappingRule(entry.getKey(), entry.getValue()));
    }
}

@Override
public String handle(int n) {
    StringBuilder result = new StringBuilder();
    for (MappingRule rule : rules) {
        result.append(rule.handle(n));
    }
    if (result.length() == 0) {
        result.append(n);
    }
    return result.toString();
}}