2022最新超详细Spring全家桶面试题完整版
- 0. 参考视频
- 1. 谈谈对Spring的理解
- 77.SpringBoot的自动配置原理
- 81. Springboot 启动原理 (启动过程)
- 86. Springboot默认的日志实现框架,如何切换其他日志框架?
- 101.@Component 和@ComponentScan的联系
- 102. @SpringBootApplication和@ComponentScan,扫描包的区别:
- 103 @GetMapping和@RequestMapping的区别
- 1.JDK JRE JVM区别与联系?(JIT即时编译器)
- 2. ACID的实现方式
- 3. Mybatis中#{}和¥{}的区别?
- 4. 浅谈@RequestMapping @ResponseBody 和 @RequestBody 注解的用法与区别
- 5. 如何自定义一个注解(@Annotation)
- 6. 最近最久未使用(LRU算法)算法采用的数据结构
- 7. SpringMVC和JSON的交互
- 8. Spring中@Component与@Bean的区别
- 9. HashMap和HashSet的区别
0. 参考视频
链接: 2021最新超详细Spring全家桶面试题100道完整版.
链接: 2022中文社区上面试趋势+精选+排行榜上所有热度最高的Java面试八股文.
1. 谈谈对Spring的理解
77.SpringBoot的自动配置原理
81. Springboot 启动原理 (启动过程)
第一步:创建 SpringApplication 对象。
第二步:运⾏ run() ⽅法。
以上两步是粗略介绍。
下述关键步骤:
“ApplicationContext是spring中比较高级的容器。和BeanFactory类似,它可以加载配置文件中定义的bean,并将所有bean集中在一起,
- 创建ApplicationContext容器
- 将启动类作为配置类进行读取,将配置类注册为BeanDefinition
- 调用Refresh 加载IOC容器(其中具体包括,解析@import,加载所有的自动配置类,OnRefresh创建内置的servlet容器)
86. Springboot默认的日志实现框架,如何切换其他日志框架?
默认是logback日志框架
切换log4j2 (springboot 中含有log4j2的对应的starter)
切换log4j (了解)
101.@Component 和@ComponentScan的联系
@Component 这个注解的作用是把我们写的bean注入到容器中,以供使用,
@ComponentScan注解的作用则是扫描包中的bean(比如:Spring不知道你定义了某个bean除非它知道从哪里可以找到这个bean,ComponentScan做的事情就是告诉Spring从哪里找到bean),由你来定义哪些包需要被扫描。一旦你指定了,Spring将会将在被指定的包及其下级包中寻找bean,这两个注解进行配合使用。
102. @SpringBootApplication和@ComponentScan,扫描包的区别:
如果你的其他包都在使用了@SpringBootApplication注解的main app所在的包及其下级包,则你什么都不用做,SpringBoot会自动帮你把其他包都扫描了如果你有一些bean所在的包,不在main app的包及其下级包,那么你需要手动加上@ComponentScan注解并指定那个bean所在的包。
103 @GetMapping和@RequestMapping的区别
- @GetMapping用于将HTTP get请求映射到特定处理程序的方法注解
具体来说,@GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。 - RequestMapping 具有类属性的,可以进行 GET,POST,PUT 或者其它的注释中具有的请求方法。
GetMapping 是 GET 请求方法中的一个特例。它只是 ResquestMapping 的一个延伸,目的是为了提高清晰度。
链接: 参考视频.
1.JDK JRE JVM区别与联系?(JIT即时编译器)
2. ACID的实现方式
原子性( A )——>undo log实现;
隔离性( I )——>MVC实现;
持久性( D )——>redo log实现
一致性( C )——>依靠以上特性三个实现
3. Mybatis中#{}和¥{}的区别?
4. 浅谈@RequestMapping @ResponseBody 和 @RequestBody 注解的用法与区别
链接: 参考链接.
5. 如何自定义一个注解(@Annotation)
链接: 参考链接.
自定义校验注解
链接: 自定义校验注解.
6. 最近最久未使用(LRU算法)算法采用的数据结构
链接: 彻头彻尾理解 LinkedHashMap.
HashMap和双向链表合二为一即是LinkedHashMap。所谓LinkedHashMap,其落脚点在HashMap,因此更准确地说,它是一个将所有Entry节点链入一个双向链表的HashMap。由于LinkedHashMap是HashMap的子类,所以LinkedHashMap自然会拥有HashMap的所有特性。比如,LinkedHashMap的元素存取过程基本与HashMap基本类似,只是在细节实现上稍有不同。当然,这是由LinkedHashMap本身的特性所决定的,因为它额外维护了一个双向链表用于保持迭代顺序。此外,LinkedHashMap可以很好的支持LRU算法。
7. SpringMVC和JSON的交互
springMVC中和json的交互:主要分为两点:
一是传递过来的是json字符串,springMVC会先进行解析,
二是传递过来的是key:value那么springMVC可以不进行解析,
这里的解析指的是json和java对象之间的转换
8. Spring中@Component与@Bean的区别
@Component和@Bean的目的是一样的,都是注册bean到Spring容器中。
@Component VS @Bean
@Component 和 它的子类型(@Controller, @Service and @Repository)注释在类上。告诉Spring,我是一个bean,通过类路径扫描自动检测并注入到Spring容器中。
@Bean不能注释在类上,只能用于在配置类中显式声明单个bean。意思就是,我要获取这个bean的时候,spring要按照这种方式去获取这个bean。默认情况下@Bean注释的方法名作为对象的名字,也可以用name属性定义对象的名字。
链接: Spring中@Component与@Bean的区别.
9. HashMap和HashSet的区别
HashMap和HashSet的区别是Java面试中最常被问到的问题。如果没有涉及到Collection框架以及多线程的面试,可以说是不完整。而Collection框架的问题不涉及到HashSet和HashMap,也可以说是不完整。HashMap和HashSet都是collection框架的一部分,它们让我们能够使用对象的集合。collection框架有自己的接口和实现,主要分为Set接口,List接口和Queue接口。它们有各自的特点,Set的集合里不允许对象有重复的值,List允许有重复,它对集合中的对象进行索引,Queue的工作原理是FCFS算法(First Come, First Serve)。
首先让我们来看看什么是HashMap和HashSet,然后再来比较它们之间的分别。
9.1 什么是HashSet
HashSet实现了Set接口,它不允许集合中有重复的值,当我们提到HashSet时,第一件事情就是在将对象存储在HashSet之前,要先确保对象重写equals()和hashCode()方法,这样才能比较对象的值是否相等,以确保set中没有储存相等的对象。如果我们没有重写这两个方法,将会使用这个方法的默认实现。
public boolean add(Object o)方法用来在Set中添加元素,当元素值重复时则会立即返回false,如果成功添加的话会返回true。
9.2 什么是HashMap
HashMap实现了Map接口,Map接口对键值对进行映射。Map中不允许重复的键。Map接口有两个基本的实现,HashMap和TreeMap。TreeMap保存了对象的排列次序,而HashMap则不能。HashMap允许键和值为null。HashMap是非synchronized的,但collection框架提供方法能保证HashMap synchronized,这样多个线程同时访问HashMap时,能保证只有一个线程更改Map.
public Object put(Object Key,Object value)方法用来将元素添加到map中。
链接: HashMap和HashSet的区别 .