Spring常见面试题

导读:本篇文章讲解 Spring常见面试题,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

Java常见面试题_2022最新版

序号 内容 链接
1 Java基础面试题 https://blog.csdn.net/weixin_46030002/article/details/126399353
2 Java集合容器面试题 https://blog.csdn.net/weixin_46030002/article/details/126425298
3 Java线程面试题 https://blog.csdn.net/weixin_46030002/article/details/126518395
4 Java异常面试题 https://blog.csdn.net/weixin_46030002/article/details/126482778
5 Spring常见面试题 https://blog.csdn.net/weixin_46030002/article/details/127281194
6 SpringMVC常见面试题 https://blog.csdn.net/weixin_46030002/article/details/127057785
7 Mybatis常见面试题 https://blog.csdn.net/weixin_46030002/article/details/126026561
8 MySQL常见面试题 https://blog.csdn.net/weixin_46030002/article/details/126557564
9 Redis常见面试题 https://blog.csdn.net/weixin_46030002/article/details/126435834
  • 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 进行装配,找不到或者找到多个,都会抛出异常。
    • 如果同时指定了 nametype ,则从 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

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!