Java面试题(Spring篇)


💟💟前言


友友们大家好,我是你们的小王同学😗😗
今天给大家打来的是 Java面试题(Spring篇)
希望能给大家带来有用的知识
觉得小王写的不错的话麻烦动动小手 点赞👍 收藏⭐ 评论📄
小王的主页:小王同学🚗
小王的gitee:小王同学🏩🏩
小王的github:小王同学💦

Spring是什么?

轻量级开发框架,为java提供了基础架构支持,简化了企业级应用开发,让开发者只需要关注业务逻辑。

Spring框架常用模式

单例模式、代理模式、模板方法、观察者模式、工厂模式、适配器模式

spring的设计核心是什么

IOC和AOP

bean-的作用域有哪些

Spring 中 Bean 的作用域通常有下面几种:

  • singleton(单例模式) : IoC 容器中只有唯一的 bean 实例。Spring 中的 bean 默认都是单例的,是对单例设计模式的应用。
  • prototype (原型模式): 每次获取都会创建一个新的 bean 实例。也就是说,连续 getBean() 两次,得到的是不同的 Bean 实例。
  • request(请求作用域)(仅 Web 应用可用): 每一次 HTTP 请求都会产生一个新的 bean(请求 bean),该 bean 仅在当前 HTTP request 内有效。
  • session (会话作用域)(仅 Web 应用可用) : 每一次来自新 session 的 HTTP 请求都会产生一个新的 bean(会话 bean),该 bean 仅在当前 HTTP session 内有效。
  • application/global-session (仅 Web 应用可用):每个 Web 应用在启动时创建一个 Bean(应用 Bean),该 bean 仅在当前应用启动时间内有效。
  • websocket (仅 Web 应用可用):每一次 WebSocket 会话产生一个新的 bean。

Spring中bean的注入方式

1.构造器注入

2.setter注入

3.接口注入

BeanFactory 和 ApplicationContext有什么区别?

是spring的核心接口,都可以作为容器,ApplicationContext是BeanFactory的子接口。

BeanFactory: 是spring最底层的接口,包含各种Bean的定义和Bean的管理。

ApplicationContext: 作为BeanFactory的派生,除了有BeanFactory的功能以外,还提供了更多的功能、

区别:

① BeanFactroy采用的是延迟加载形式来注入Bean的,使用到bean才会加载。ApplicationContext一次性加载所有bean。

② BeanFactory需要手动注册,而ApplicationContext则是自动注册。

③ BeanFactory不支持国际化,ApplicationContext支持国际化(实现MessageSource接口)。

spring中单例Bean是线程安全的吗?

不是,因为所有线程共享一个单例Bean,存在资源的竞争所以是线程不安全的,实际上大部分时间Bean是无状态的,所以说在某种程度上来说Bean其实是安全的。如果是有状态,那就需要开发人员修改bean的作用域。singleton改为prototype。

ioc,aop是什么讲一讲

什么是ioc

IoC (Inversion of control )控制反转/反转控制。它是一种思想不是一个技术实现。描述的是:Java 开发领域对象的创建以及管理的问题。

为什么叫控制反转

控制:指的是对象创建(实例化、管理)的权力

反转 :控制权交给外部环境(Spring 框架、IoC 容器)

IOC(Inverse of Control:控制反转)是一种设计思想 或者说是某种模式。这个设计思想就是 将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理。 IOC 在其他语言中也有应用,并非 Spring 特有。IOC 容器是 Spring 用来实现 IoC 的载体, IOC 容器实际上就是个 Map(key,value),Map 中存放的是各种对象。

什么是AOP

AOP:Aspect oriented programming 面向切面编程,AOP 是 OOP(面向对象编程)的一种延续。

  • AOP 主要用来解决:在不改变原有业务逻辑的情况下,增强横切逻辑代码,根本上解耦合,避免横切逻辑代码重复
AOP 为什么叫面向切面编程
  • 切 :指的是横切逻辑,原有业务逻辑代码不动,只能操作横切逻辑代码,所以面向横切逻辑
  • 面 :横切逻辑代码往往要影响的是很多个方法,每个方法如同一个点,多个点构成一个面。这里有一个面的概念

spring中bean的生命周期

bean: 是由 Spring IoC 容器实例化、组装和管理的对象。

正常情况: 当bean不在被使用,就会被回收。

单例模式: spring中bean的生命周期分为:实例化Bean->Bean属性填充->初始化Bean->销毁Bean。

多例模式: spring无法进行管理,所以将生命周期交给用户控制。

bean的自动装配

spring会在上下文中自动寻找,并自动给bean装配属性。之前属性需要我们手动注入。

spring用到了那些设计模式

工厂模式: beanFactory就用到了简单工厂模式。

单例模式: Bean默认为单例模式。

代理模式: AOP用到了JDK的动态代理模式。

模板模式: 减少代码冗余,Jdbc模板等。

观察者模式: 定义对象间的一对多的关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。spring监听器的实现就用了观察者模式。

spring的常用注解

@Component(任何层)、@Controller(表现层)、@Service(逻辑层)、@Repository(持久层): 被修饰的类,会被spring扫描到并注入到bean容器中(实例化对象)。

@Scope: 设置spring的作用域。

@Bean: 用于将方法返回值对象放入容器。

@Import: 在一个配置类中导入其它配置类的内容。

@AutoWired: 按照类型匹配注入。

@Qualifier: 和AutoWired联合使用,在按照类型匹配的基础上,在按照名称匹配。

@Resource: 按照名称匹配依赖注入。

@Configuration: 被此注解标注的类,会被 Spring 认为是配置类。

@ComponentScan: 用于对组件(Component)进行扫描。

@Transactional: 可以用于类和方法上,具有事务管理的功能

@Value: 将外部的值动态注入到 Bean 中。

@Value("${}"):可以获取配置文件的值。

@Value("#{}"):表示SpEl(Spring Expression Language是Spring表达式语言,可以在运行时查询和操作数据。)表达式通常用来获取 bean 的属性,或者调用 bean 的某个方法。

spring 事务实现方式有哪些?

编程式: beginTransaction()、commit()、rollback()等事务管理相关的方法,灵活度高,但是维护性差。
声明式: 利用注解或者xml配置,将业务和事务分离出来。

spring事务的实现方式和实现原理

spring事务就是对数据库事务的支持,没有数据库的事务支持,spring是无法提供事务

功能的。

说一下 spring 的事务隔离?

五大隔离级别。

ISOLATION_DEFAULT: 默认值,使用数据库的隔离级别。

ISOLATION_READ_UNCOMMITTED: 读未提交。

ISOLATION_READ_COMMITTED: 读已提交。

ISOLATION_REPEATABLE_READ: 可重复读。

ISOLATION_SERIALIZABLE: 序列化。

spring事务的传播行为

REQUIRED(默认):默认事务传播行为,存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务。

REQUIRE_NEW:它不管是否存在事务,它都会新开启一个事务来执行,新老事务相互独立的,外部事务抛出异常,并不会影响内部事务的一个正常提交。

NESTED:如果当前存在事务,就嵌套当前事务中去执行,如果当前没有事务,那么就新建一个事务,类似 REQUIRE_NEW这个样一个传播行为。

SUPPORTS:表示支持当前当前的事务,如果当前不存在事务,就以非事务的方式去执行。

NOT_SUPPORT: 总是非事务地执行,并挂起任何存在的事务。

MANDATORY:如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。

NEVER:就是以非事务的方式来执行,如果存在事务则抛出一个异常。

相关推荐
YAy1723 分钟前
CC3学习记录
java·开发语言·学习·网络安全·安全威胁分析
代码小鑫24 分钟前
A035-基于Spring Boot的企业内管信息化系统
java·开发语言·spring boot·后端·spring
cleverpeople27 分钟前
11.15作业
c语言·开发语言·算法
_.Switch27 分钟前
Django SQL 查询优化方案:性能与可读性分析
开发语言·数据库·python·sql·django·sqlite·自动化
qq_35323353891 小时前
【原创】java+ssm+mysql校园疫情防控管理系统设计与实现
java·mvc·javaweb·ssm框架·bs·疫情防控
谈谈叭4 小时前
Javascript中的深浅拷贝以及实现方法
开发语言·javascript·ecmascript
lx学习4 小时前
Python学习26天
开发语言·python·学习
代码调试4 小时前
Springboot校园失物招领平台
java·spring boot
大今野5 小时前
python习题练习
开发语言·python
爱编程的鱼5 小时前
javascript用来干嘛的?赋予网站灵魂的语言
开发语言·javascript·ecmascript