大家好,我是编程小6,很高兴遇见你,有问题可以及时留言哦。
Java面试总结汇总,整理了包括Java重点知识,以及常用开源框架,欢迎大家阅读。文章可能有错误的地方,因为个人知识有限,欢迎各位大佬指出!文章持续更新中......
ID 标题 地址 1 设计模式面试题(总结最全面的面试题) Spring Boot面试题(总结最全面的面试题!!!) 2 Java基础知识面试题(总结最全面的面试题) Spring Boot面试题(总结最全面的面试题!!!) 3 Java集合面试题(总结最全面的面试题) Spring Boot面试题(总结最全面的面试题!!!) 4 JavaIO、BIO、NIO、AIO、Netty面试题(总结最全面的面试题) Spring Boot面试题(总结最全面的面试题!!!) 5 Java并发编程面试题(总结最全面的面试题) Spring Boot面试题(总结最全面的面试题!!!) 6 Java异常面试题(总结最全面的面试题) Spring Boot面试题(总结最全面的面试题!!!) 7 Java虚拟机(JVM)面试题(总结最全面的面试题) Spring Boot面试题(总结最全面的面试题!!!) 8 Spring面试题(总结最全面的面试题) Spring Boot面试题(总结最全面的面试题!!!) 9 Spring MVC面试题(总结最全面的面试题) Spring Boot面试题(总结最全面的面试题!!!) 10 Spring Boot面试题(总结最全面的面试题) Spring Boot面试题(总结最全面的面试题!!!) 11 Spring Cloud面试题(总结最全面的面试题) Spring Boot面试题(总结最全面的面试题!!!) 12 Redis面试题(总结最全面的面试题) Spring Boot面试题(总结最全面的面试题!!!) 13 MyBatis面试题(总结最全面的面试题) Spring Boot面试题(总结最全面的面试题!!!) 14 MySQL面试题(总结最全面的面试题) Spring Boot面试题(总结最全面的面试题!!!) 15 TCP、UDP、Socket、HTTP面试题(总结最全面的面试题) Spring Boot面试题(总结最全面的面试题!!!) 16 Nginx面试题(总结最全面的面试题) Spring Boot面试题(总结最全面的面试题!!!) 17 ElasticSearch面试题 18 kafka面试题 19 RabbitMQ面试题(总结最全面的面试题) Spring Boot面试题(总结最全面的面试题!!!) 20 Dubbo面试题(总结最全面的面试题) Spring Boot面试题(总结最全面的面试题!!!) 21 ZooKeeper面试题(总结最全面的面试题) Spring Boot面试题(总结最全面的面试题!!!) 22 Netty面试题(总结最全面的面试题) 23 Tomcat面试题(总结最全面的面试题) Spring Boot面试题(总结最全面的面试题!!!) 24 Linux面试题(总结最全面的面试题) Spring Boot面试题(总结最全面的面试题!!!) 25 互联网相关面试题(总结最全面的面试题) 26 互联网安全面试题(总结最全面的面试题)
启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:
@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项, 例如:java 如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
@ComponentScan:Spring组件扫描。
我个人理解SpringBoot就是由各种Starter组合起来的,我们自己也可以开发Starter
在sprinBoot启动时由@SpringBootApplication注解会自动去maven中读取每个starter中的spring.factories文件,该文件里配置了所有需要被创建spring容器中的bean,并且进行自动配置把bean注入SpringContext中 //(SpringContext是Spring的配置文件)
打包用命令或者放到容器中运行
用 Maven/ Gradle 插件运行
直接执行 main 方法运行
继承spring-boot-starter-parent项目
导入spring-boot-dependencies项目依赖
Spring JavaConfig 是 Spring 社区的产品,Spring 3.0引入了他,它提供了配置 Spring IOC 容器的纯Java 方法。因此它有助于避免使用 XML 配置。使用 JavaConfig 的优点在于:
面向对象的配置。由于配置被定义为 JavaConfig 中的类,因此用户可以充分利用 Java 中的面向对象功能。一个配置类可以继承另一个,重写它的@Bean 方法等。
减少或消除 XML 配置。基于依赖注入原则的外化配置的好处已被证明。但是,许多开发人员不希望在 XML 和 Java 之间来回切换。JavaConfig 为开发人员提供了一种纯 Java 方法来配置与 XML 配置概念相似的 Spring 容器。从技术角度来讲,只使用 JavaConfig 配置类来配置容器是可行的,但实际上很多人认为将JavaConfig 与 XML 混合匹配是理想的。
类型安全和重构友好。JavaConfig 提供了一种类型安全的方法来配置 Spring容器。由于 Java 5.0 对泛型的支持,现在可以按类型而不是按名称检索 bean,不需要任何强制转换或基于字符串的查找。
常用的Java config:
主要是Spring Boot的启动类上的核心注解SpringBootApplication注解主配置类,有了这个主配置类启动时就会为SpringBoot开启一个@EnableAutoConfiguration注解自动配置功能。
有了这个EnableAutoConfiguration的话就会:
在 Spring Boot 里面,可以使用以下几种方式来加载配置。
1.properties文件;
2.YAML文件;
3.系统环境变量;
4.命令行参数;
等等……
YAML 现在可以算是非常流行的一种配置文件格式了,无论是前端还是后端,都可以见到 YAML 配置。那么 YAML 配置和传统的 properties 配置相比到底有哪些优势呢?
配置有序,在一些特殊的场景下,配置有序很关键
简洁明了,他还支持数组,数组中的元素可以是基本数据类型也可以是对象
相比 properties 配置文件,YAML 还有一个缺点,就是不支持 @PropertySource 注解导入自定义的 YAML 配置。
单纯做 Spring Boot 开发,可能不太容易遇到 bootstrap.properties 配置文件,但是在结合 Spring Cloud 时,这个配置就会经常遇到了,特别是在需要加载一些远程配置文件的时侯。
spring boot 核心的两个配置文件:
第一种方式是在service层的@TransactionManager中使用transactionManager指定DataSourceConfig中配置的事务
第二种是使用jta-atomikos实现分布式事务管理
由于 Spring Boot 官方提供了大量的非常方便的开箱即用的 Starter ,包括 Spring Security 的 Starter ,使得在 Spring Boot 中使用 Spring Security 变得更加容易,甚至只需要添加一个依赖就可以保护所有的接口,所以,如果是 Spring Boot 项目,一般选择 Spring Security 。当然这只是一个建议的组合,单纯从技术上来说,无论怎么组合,都是没有问题的。Shiro 和 Spring Security 相比,主要有如下一些特点:
Spring Security 是一个重量级的安全管理框架;Shiro 则是一个轻量级的安全管理框架
Spring Security 概念复杂,配置繁琐;Shiro 概念简单、配置简单
Spring Security 功能强大;Shiro 功能简单
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowCredentials(true)
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.maxAge(3600);
}
}
如果项目比较大,类比较多,不使用@SpringBootApplication,采用@Compoment指定扫包范围
在项目启动时设置JVM初始内存和最大内存相同
将springboot内置服务器由tomcat设置为undertow
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
XXXAutoConfiguration
,在这个配置类中通过条件注解来决定一个配置是否生效(条件注解就是 Spring 中原本就有的),然后它还会提供一系列的默认配置,也允许开发者根据实际情况自定义相关配置,然后通过类型安全的属性(spring.factories)注入将这些配置属性注入进来,新注入的属性会代替掉默认属性。正因为如此,很多第三方框架,我们只需要引入依赖就可以直接使用了。当然,开发者也可以自定义 Starter在 Spring Boot 中使用定时任务主要有两种不同的方式,一个就是使用 Spring 中的 @Scheduled 注解,另一-个则是使用第三方框架 Quartz。
使用 Spring 中的 @Scheduled 的方式主要通过 @Scheduled 注解来实现。
我们都知道,新创建一个 Spring Boot 项目,默认都是有 parent 的,这个 parent 就是 spring-boot-starter-parent ,spring-boot-starter-parent 主要有如下作用:
总结就是打包用的
Spring Boot 项目最终打包成的 jar 是可执行 jar ,这种 jar 可以直接通过 java -jar xxx.jar
命令来运行,这种 jar 不可以作为普通的 jar 被其他项目依赖,即使依赖了也无法使用其中的类。
Spring Boot 的 jar 无法被其他项目依赖,主要还是他和普通 jar 的结构不同。普通的 jar 包,解压后直接就是包名,包里就是我们的代码,而 Spring Boot 打包成的可执行 jar 解压后,在 \BOOT-INF\classes
目录下才是我们的代码,因此无法被直接引用。如果非要引用,可以在 pom.xml 文件中增加配置,将 Spring Boot 项目打包成两个 jar ,一个可执行,一个可引用。