Java常见面试题_2022最新版
- Java常见面试题_2022最新版持续更新中…
一、Spring
说说你对 Spring 的理解
Spring 框架是一个开源免费
的、轻量级
的、非侵入式
的框架。
并且对我们 Bean 的生命周期
(实例化
-> 属性赋值
-> 初始化
-> 销毁
)进行了管理。
其最主要的作用就是将其他框架进行整合
,以一种统一的通用的方法进行管理。
Spring 包含了三大核心,分别是IOC(控制反转)
,DI(依赖注入)
,AOP(面向切面)
。
简述下 IOC,DI
IOC:控制反转
,就是将我们创建及管理对象的权限从我们程序员的手中交给 Spring 框架,这种控制权限的移交我们称之为控制反转。DI:依赖注入
,Spring 通过 set 方法和构造方法等方式实现了我们的依赖注入,可以理解为依赖注入只是实现控制反转(目的)的一种方式
简述下 AOP
AOP:面向切面编程
,是作为面向对象的一种补充,一般用于那些与主要业务无关,但是却对多个业务产生影响的逻辑或公共行为,抽取并封装为一个可用的模块(方法的扩展),这个模块我们称为 切面
。是为了减少系统中的重复代码,降低模块间的耦合度,同时提高了系统的可维护性。常常用于权限认证、日志、事务处理等。
AOP是通过什么实现的
动态代理
CGLIB代理和JDK代理的区别
- JDK代理只能对实现接口的类生成代理,JDK代理使用的是反射机制实现AOP的动态代理;
- CGLib是针对类实现代理,对指定的类生成一个子类,并覆盖其中的方法,这种通过继承类的实现方式。 CGLib代理使用字节码处理框架ASM,通过修改字节码生成子类。
AOP名词
切面(Aspect)
@Aspect
- 由切入点表达式(Pointcut)和 通知方法(Advice)组成
- 它既包含了横切逻辑的定义,也包括了连接点的定义。
连接点(Join point)
通知(Advice)
切入点(Pointcut)
@PointCut
目标对象(Target Object)
SpringAOP通知有哪些类型
- 前置通知
before()
目标方法执行前 - 后置通知
after()
不管目标方法执行是否正确 都要执行 - 返回通知
afterReturning()
目标方法执行后 - 异常通知
afterThrowing()
目标方法执行抛出异常时执行 - 环绕通知
around(ProceedingJoinPoing)
目标方法执行前后都要执行 功能最强大
Java中动态代理的方式有几种
- JDK动态代理(要求代理对象 实现与被代理者相同的接口,默认为JDK代理)
- CGLIB动态代理(被代理者有无接口皆可,但是代理对象是被代理者的子类)
@Autowired 和 @Resource 的区别
@Autowired
和@Resource
都是用于注入依赖(装配 Bean),可以写在字段上、setter 方法上或者构造器上;@Autowired
@Autowired
是 Spring 的注解,默认是按照类型进行装配(byType
),默认情况下必须要求依赖的对象必须存在,如果想要允许为 null 值,可以设置required
属性为false
,如:@Autowired(required=false)- 如果我们想按照名称进行装配(
byName
),我们可以结合@Qualifier
注解进行使用;
@Source
@Source
是 Java 的注解,默认按照名称进行装配(byName
),名称可以通过name
属性进行指定。当找不到与名称匹配的 bean 时才按照类型进行装配(byType)。- 但是需要注意的是,如果
name
属性一旦指定,就只会按照名称进行装配,找不到则抛出异常。如果指定了type
属性,则会通过类型匹配唯一 bean 进行装配,找不到或者找到多个,都会抛出异常。 - 如果同时指定了
name
和type
,则从 Spring 上下文中找到唯一匹配的 bean 进行装配,找不到则抛出异常。
DI依赖注入的方式有几种
- setter 方法注入
- 构造方法注入
- 属性注入
@Controller 和 @RestController 的区别
@Controller 和 @RestController 这两个注解都是用来修饰控制器
(控制层
–> 接受 http 请求
)类的,被它们修饰的类我们会交给我们的 Spring 框架去管理。
@RestController= @Controller + @ResponseBody
@Controller
会通过视图解析器默认 认为返回值类型为一个视图(html,jsp ,…)去解析并跳转到对应的页面,如果没有这个视图会返回 404;
@ResponseBody
是响应正文,可以使用在类上也可以使用在方法上,这里可以理解为被 @ResponseBody
标注的类或者方法,返回值类型为 json
数据
Spring 常用注解
@ComponentScan
@Component
@Controller
@Service
@Repository
@Configuration
@Scope
@Lazy
@PostConstruct
@PreDestroy
@Autowired
@Qualifier
Spring中 Bean作用域
singleton
常用prototype
常用request
在 Web 环境下有效session
在 Web 环境下有效global session
在 Web 环境下有效
事务注解以及作用
- 为单个方法或类上添加事务管理
- 标注事务注解的类,其全部方法都有事务
- 标注了事务注解的方法,默认情况会开启事务,方法中全部功能执行完成以后,自动提交事务,默认情况下,如果方法出现了RuntimeException(含子类型)则会回退事务。
- Spring框架的声明式事务管理是通过Spring面向方面编程(AOP)实现的,底层依赖数据库的事务功能。
二、SpringBoot
SpringBoot的好处
- 自动配置
- 约定大于配置
- 提供了很多整合了第三方库的依赖,使得其开箱即用
- 起步依赖
- 提供了测试,安全,监控,健康检查等功能
SpringBoot的常用注解
@SpringBootApplication
@SpringBootConfiguration
@EnableAutoConfiguration
@SpringBootTest
@ImportAutoConfiguration
SpringBoot项目中常用的配置文件有哪些
- application.properties
- application.yml
SpringBoot 自动配置原理(-)
@EnableAutoConfiguration
会读取工厂配置/META-INF/spring.factories
- 找到标注
@Configuration
的自动配置类 - 自动配置类中使用
@ConditionalXXX
注解,进行条件配置,根据条件初始化Bean组件 - 可以根据属性文件、Bean对象,Bean类型自动配置
Spring、Spring MVC、Spring Cloud、Spring Boot的区别是什么?
- Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。是Spring全家桶的基石。
- Spring MVC是Spring的一个模块,一个web框架。使得开发web应用变得很容易。
- Spring配置复杂,繁琐,所以推出了Spring boot,约定优于配置,简化了spring的配置流程。做到开箱即用。
- Spring Cloud构建于Spring Boot之上,是一个微服务全家桶方案,可以快速搭建微服务应用。
Spring 和 SpringBoot的区别
Spring
- Spring 框架提供了企业软件的各种基础组件,有了这些基础组件的帮助,开发者就可以更多的聚焦在软件的业务功能,大大提升开发效率。
- Spring 的核心功能包括:IoC/DI(依赖注入、控制反转) 和 AOP(面向切面编程)
- Spring 还提供了:事务管理、MVC、测试、数据访问等组件
SpringBoot
- Spring Boot 是以Spring为基础,帮助快速搭建Spring应用程序。开箱即用,几乎不用配置。
- Spring Boot 提供了统一的依赖管理,可以很少代码就能整合各种资源,包括JDBC、MyBatis等。
- Spring Boot 提供了内嵌服务器、安全、健康检查等开箱即用的功能。
- Spring Boot 还提供了打包工具,可以将应用打成 Fat Jar ,然后一个命令就能启动。
三、其它面试题
SLF4j日志等级有哪些
trace
追踪信息debug
调试信息info
一般信息(默认显示级别)warn
警告信息error
错误信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/107607.html