java应届生面试总结spring篇

2022java应届生面试总结spring篇


前言

2022java应届生面试总结-spring篇

一、Spring,Spring mvc,Spring boot,Spring cloud,alibaba 的区别

1.Spring

spring是一个一站式的轻量级的java开发框架,核心是控制反转(IOC)和面向切面(AOP),针对于开发的WEB层(springMvc)、业务层(Ioc)、持久层(jdbcTemplate)等都提供了多种配置解决方案;

2.Spring mvc

spring mvc是spring基础之上的一个MVC框架,主要处理web开发的路径映射和视图渲染,属于spring框架中WEB层开发的一部分;

3.Spring boot

spring boot框架相对于spring mvc框架来说,更专注于开发微服务后台接口,不开发前端视图,同时遵循默认优于配置,简化了插件配置流程,不需要配置xml,相对spring mvc,大大简化了配置流程;

3.Spring cloud

Spring cloud 是一系列框架的有序集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 spring boot 的开发风格做到一键启动和部署。

3.Spring cloud alibaba

在这里插入图片描述

二、spring 常用注解

1.@SpringBootApplication

@Configuration
这个类可以使用Spring IoC容器作为bean定义的来源。@Bean注解告诉Spring,一个带有@Bean的注解方法将返回一个对象,该对象应该被注册为在Spring应用程序上下文中的bean。
@EnableAutoConfiguration
能够自动配置spring的上下文,试图猜测和配置你想要的bean类,通常会自动根据你的类路径和你的bean定义自动配置。
@ComponentScan
会自动扫描指定包下的全部标有@Component的类,并注册成bean,当然包括@Component下的子注解@Service,@Repository,@Controller。

1.@Component

实现bean的注入

2.@RestController

@RestController=@ResponseBody+@Controller

3.@Validated

@Validated作用在类、方法和参数上,用于参数校验。
在这里插入图片描述
详细

4.@Service

声明为一个service组件

5.@Autowired

默认根据type查找,可以根据@Qualifier(“名称”):指定自动注入的id名称

6.@Resource

根据name查找

7.@Transactional

开启事务

三、spring三级缓存解决循环依赖

三级缓存,简单来说,A创建过程中需要B,于是A将自己放到三级缓存里面,去实例化B,B实例化的时候发现需要A,于是B先查一级缓存,没有,再查二级缓存,还是没有,再查三级缓存,找到了A然后把三级缓存里面的这个A放到二级缓存里面,并删除三级缓存里面的A,B顺利初始化完毕,将自己放到一级缓存里面(此时B里面的A依然是创建中状态)然后回来接着创建A,此时B已经创建结束,直接从一级缓存里面拿到B,然后完成创建,并将A放到一级缓存中。

四、spring 自动装配

spring中提供了向Bean中自动注入依赖的功能,这个过程就是自动装配,当向bean中注入的内容非常多的时候,自动注入依赖的功能将极大的节省注入程序的时间。

  • 基于xml文件的自动装配:byType(类型),byName(名称), constructor(根据构造函数)
  • 基于注解的自动装配:@Autowired,@Resource,@Value

五、什么是IOC

IOC,Inversion of Control,控制反转,指将对象的控制权转移给Spring框架,由 Spring 来负责控制对象的生命周期(比如创建、销毁)和对象间的依赖关系。

六、什么是DI

IoC 的一个重点就是在程序运行时,动态的向某个对象提供它所需要的其他对象,这一点是通过DI(Dependency Injection,依赖注入)来实现的,即应用程序在运行时依赖 IoC 容器来动态注入对象所需要的外部依赖。而 Spring 的 DI 具体就是通过反射实现注入的,反射允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性

七、Spring的AOP理解

AOP,一般称为面向切面,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,提高系统的可维护性。可用于权限认证、日志、事务处理。

AOP里面的几个名词的概念:
  1. 连接点(Join point):指程序运行过程中所执行的方法。在Spring AOP中,一个连接点总代表一个方法的执行。
  2. 切面(Aspect):被抽取出来的公共模块,可以用来会横切多个对象。Aspect切面可以看成 Pointcut切点 和 Advice通知的结合,一个切面可以由多个切点和通知组成。
  3. 切点(Pointcut):切点用于定义 要对哪些Join point进行拦截。
  4. 通知(Advice):指要在连接点(JoinPoint)上执行的动作,即增强的逻辑,比如权限校验和、日志记录等。通知有各种类型,包括Around、Before、After、Afterreturning、After throwing。
  5. 目标对象(Target):包含连接点的对象,也称作被通知(Advice)的对象。 由于SpringAOP是通过动态代理实现的,所以这个对象永远是一个代理对象。
  6. 织入(Weaving):通过动态代理,在目标对象(Target)的方法(即连接点Joinpoint)中执行增强逻辑(Advice)的过程。
  7. 引入(Introduction):添加额外的方法或者字段到被通知的类。Spring允许引入新的接口(以及对应的实现)到任何被代理的对象。例如,你可以使用一个引入来使bean实现 IsModified 接口,以便简化缓存机制。
关系图:

在这里插入图片描述
在这里插入图片描述

八、BeanFactory和ApplicationContext有什么区别?

①BeanFactroy采用的是延迟加载形式来注入Bean的,只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化。
②ApplicationContext,它是在容器启动时,一次性创建了所有的Bean。

九、Spring中bean的作用域

  1. singleton:默认作用域,单例bean,每个容器中只有一个bean的实例。
  2. prototype:为每一个bean请求创建一个实例。
  3. request:为每一个request请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。
  4. session:与request范围类似,同一个session会话共享一个实例,不同会话使用不同的实例。
  5. global-session:全局作用域,所有会话共享一个实例。如果想要声明让所有会话共享的存储变量的话,那么这全局变量需要存储在global-session中。

十、Spring事务失效场景

  1. 数据库引擎不支持事务,比如MyISAM
  2. 入口方法不是public,这一点由Spring的AOP特性决定的,理论上而言,不public也能切入,但spring可能是觉得private自己用的方法,应该自己控制,不应该用事务切进去吧)。另外private方法, final 方法 和 static 方法不能添加事务,加了也不生效。
  3. Spring事务管理默认只支持运行期异常进行回滚(至于为什么spring要这么设计:因为spring认为Checked的异常属于业务的,coder需要给出解决方案而不应该直接扔该框架)
  4. 没有启用事务和切面
  5. 类是否被正确代理
  6. 业务和事务要在同一个线程,否则事务也不生效。
  7. 默认情况下,只有来自外部的方法调用才会被AOP代理捕获,也就是,类内部方法调用本类内部的其他方法并不会引起事务行为,即使被调用方法使用@Transactional注解进行修饰。

十一、spring七种事务传播机制

1.REQUIRED (默认)(TransactionDefinition.PROPAGATION_REQUIRED)
支持当前事务,如果有事务就加入到当前事务,没有则会创建一个新的事务。

2.SUPPORTS (TransactionDefinition.PROPAGATION_SUPPORTS)
支持当前事务,如果有事务就加入到当前事务,如果没有事务的话,以非事务的方式执行。

3.MANDATORY(强制性的)(TransactionDefinition.PROPAGATION_MANDATORY)
支持当前事务,当前如果没有事务就抛出异常。

4.REQUIRES_NEW (TransactionDefinition.PROPAGATION_REQUIRES_NEW)
不管是否有事务,都会创建一个新事物,并挂起当前事务。

5.NOT_SUPPORTED (TransactionDefinition.PROPAGATION_NOT_SUPPORTED)
以非事务的方式执行,如果当前存在事务,就将当前事务挂起。

6.NEVER (TransactionDefinition.PROPAGATION_NEVER)
以非事务方式进行,如果存在事务则抛出异常

7.NESTED(嵌套) (TransactionDefinition.PROPAGATION_NESTED)
如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,创建一个新的事务。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值