2024最新Spring Boot 面试题

总结

如果你选择了IT行业并坚定的走下去,这个方向肯定是没有一丝问题的,这是个高薪行业,但是高薪是凭自己的努力学习获取来的,这次我把P8大佬用过的一些学习笔记(pdf)都整理在本文中了

《Java中高级核心知识全面解析》

小米商场项目实战,别再担心面试没有实战项目:

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

@Retention(RetentionPolicy.RUNTIME)

@Documented

@Inherited

@SpringBootConfiguration

@EnableAutoConfiguration

@ComponentScan(excludeFilters = {

@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),

@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })

public @interface SpringBootApplication {

}

主要组合包含了以下 3 个注解:

  • @SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。

  • @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。

  • @ComponentScan:Spring组件扫描。

Spring Boot 自动配置原理是什么?


Spring Boot的自动配置注解是@EnableAutoConfiguration,从上面的@Import的类可以找到下面自动加载自动配置的映射。

private static Map<String, List> loadSpringFactories(@Nullable ClassLoader classLoader) {

MultiValueMap<String, String> result = cache.get(classLoader);

if (result != null) {

return result;

}

try {

Enumeration urls = (classLoader != null ?

classLoader.getResources(FACTORIES_RESOURCE_LOCATION) :

ClassLoader.getSystemResources(FACTORIES_RESOURCE_LOCATION));

result = new LinkedMultiValueMap<>();

while (urls.hasMoreElements()) {

URL url = urls.nextElement();

UrlResource resource = new UrlResource(url);

Properties properties = PropertiesLoaderUtils.loadProperties(resource);

for (Map.Entry<?, ?> entry : properties.entrySet()) {

List factoryClassNames = Arrays.asList(

StringUtils.commaDelimitedListToStringArray((String) entry.getValue()));

result.addAll((String) entry.getKey(), factoryClassNames);

}

}

cache.put(classLoader, result);

return result;

}

catch (IOException ex) {

throw new IllegalArgumentException(“Unable to load factories from location [” +

FACTORIES_RESOURCE_LOCATION + “]”, ex);

}

}

这个方法会加载类路径及所有jar包下META-INF/spring.factories配置中映射的自动配置的类。

你如何理解 Spring Boot 中的 Starters?


Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成Spring及其他技术,而不需要到处找示例代码和依赖包。如你想使用Spring JPA访问数据库,只要加入spring-boot-starter-data-jpa启动器依赖就能使用了。

Starters包含了许多项目中需要用到的依赖,它们能快速持续的运行,都是一系列得到支持的管理传递性依赖。

Spring Boot官方的启动器都是以spring-boot-starter-命名的,代表了一个特定的应用类型。

第三方的启动器不能以spring-boot开头命名,它们都被Spring Boot官方保留。一般一个第三方的应该这样命名,像mybatis的mybatis-spring-boot-starter。

如何在 Spring Boot 启动的时候运行一些特定的代码?


如果你想在Spring Boot启动的时候运行一些特定的代码,你可以实现接口 ApplicationRunner或者 CommandLineRunner,这两个接口实现方式一样,它们都只提供了一个run方法。

如果启动的时候有多个ApplicationRunner和CommandLineRunner,想控制它们的启动顺序,可以通过@Order注解控制

Spring Boot 有哪几种读取配置的方式?


  • @Value

@Component

public class HttpClientParam {

@Value(“${http.maxTotal}”)

private Integer maxTotal;

public String getMaxTotal() {

return maxTotal;

}

public void setMaxTotal(String maxTotal) {

this.maxTotal = maxTotal;

}

}

  • @ConfigurationProperties

/**

  • HttpClient连接池

  • @author hzy

*/

@Configuration

@ConfigurationProperties(prefix = “http”)

public class HttpClientParam {

private Integer maxTotal;

private Integer defaultMaxPerRoute;

private Integer connectTimeout;

private Integer connectionRequestTimeout;

private Integer socketTimeout;

public Integer getMaxTotal() {

return maxTotal;

}

public void setMaxTotal(Integer maxTotal) {

this.maxTotal = maxTotal;

}

public Integer getDefaultMaxPerRoute() {

return defaultMaxPerRoute;

}

public void setDefaultMaxPerRoute(Integer defaultMaxPerRoute) {

this.defaultMaxPerRoute = defaultMaxPerRoute;

}

public Integer getConnectTimeout() {

return connectTimeout;

}

public void setConnectTimeout(Integer connectTimeout) {

this.connectTimeout = connectTimeout;

}

public Integer getConnectionRequestTimeout() {

return connectionRequestTimeout;

}

public void setConnectionRequestTimeout(Integer connectionRequestTimeout) {

this.connectionRequestTimeout = connectionRequestTimeout;

}

public Integer getSocketTimeout() {

return socketTimeout;

}

public void setSocketTimeout(Integer socketTimeout) {

this.socketTimeout = socketTimeout;

}

}

http:

最大连接数

maxTotal: 100

并发数

defaultMaxPerRoute: 20

connectTimeout: 10000

connectionRequestTimeout: 500

socketTimeout: 10000

  • @PropertySource+@Value

@Component

@PropertySource(value = { “config/http-config.properties”})

public class HttpClientParam {

@Value(“${http.maxTotal}”)

private Integer maxTotal;

public String getMaxTotal() {

return maxTotal;

}

public void setMaxTotal(String maxTotal) {

this.maxTotal = maxTotal;

}

}

Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个?


Spring Boot支持Java Util Logging,Log4j2,Lockback作为日志框架,如果你使用starters启动器,Spring Boot将使用Logback作为默认日志框架。无论使用哪种日志框架,Spring Boot都支持配置将日志输出到控制台或者文件中。

spring-boot-starter启动器包含spring-boot-starter-logging启动器并集成了slf4j日志抽象及Logback日志框架。

属性配置日志


Spring Boot支持属性配置日志参数,这个不是很灵活,不细讲。

参考配置:

LOGGING

logging.config= # Location of the logging configuration file. For instance classpath:logback.xml for Logback

logging.exception-conversion-word=%wEx # Conversion word used when logging exceptions.

logging.file= # Log file name. For instance myapp.log

logging.level.*= # Log levels severity mapping. For instance logging.level.org.springframework=DEBUG

logging.path= # Location of the log file. For instance /var/log

logging.pattern.console= # Appender pattern for output to the console. Only supported with the default logback setup.

logging.pattern.file= # Appender pattern for output to the file. Only supported with the default logback setup.

logging.pattern.level= # Appender pattern for log level (default %5p). Only supported with the default logback setup.

logging.register-shutdown-hook=false # Register a shutdown hook for the logging system when it is initialized.

如:

logging.level.root=DEBUG

logging.level.org.springframework.web=DEBUG

logging.level.org.hibernate=ERROR

自定义日志文件


根据不同的日志框架,默认加载的日志配置文件的文件名,放在资源根目录下,其他的目录及文件名不能被加载。

| Logging System | Customization |

| — | — |

| Logback | logback-spring.xml, logback-spring.groovy, logback.xml or logback.groovy |

| Log4j2 | log4j2-spring.xml or log4j2.xml |

| JDK (Java Util Logging) | logging.properties |

既然默认自带了Logback框架,Logback也是最优秀的日志框架,往资源目录下创建一个logback-spring.xml即可,下面是一个参考配置文件。

<?xml version="1.0" encoding="UTF-8"?>

%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n

INFO

L O G P A T H / {LOG_PATH}/ LOGPATH/{LOG_DIR}/info.log.%d{yyyy-MM-dd}.log

30

%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n

10MB

ERROR

ACCEPT

DENY

架构学习资料

准备两个月,面试五分钟,Java中高级岗面试为何越来越难?

准备两个月,面试五分钟,Java中高级岗面试为何越来越难?

准备两个月,面试五分钟,Java中高级岗面试为何越来越难?

准备两个月,面试五分钟,Java中高级岗面试为何越来越难?

准备两个月,面试五分钟,Java中高级岗面试为何越来越难?

由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

olling.RollingFileAppender">

ERROR

ACCEPT

DENY

架构学习资料

[外链图片转存中…(img-7B8Xy7a6-1715779164402)]

[外链图片转存中…(img-uXBxbIaE-1715779164402)]

[外链图片转存中…(img-54gmnzPm-1715779164402)]

[外链图片转存中…(img-6zvBrwW6-1715779164403)]

[外链图片转存中…(img-VATShYFm-1715779164403)]

由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值