当前位置: 首页 > news >正文

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:就是以非事务的方式来执行,如果存在事务则抛出一个异常。

相关文章:

  • python课后习题一
  • echart多折线图堆叠 y轴和实际数据不对应
  • 全量知识系统“全基因序列”程序构想及SmartChat的回复
  • Github: Github actions自动化工作原理与多workflow创建和部署
  • 掌握Go语言:利用Go语言的单向通道和select语句,提升库存管理效率(21)
  • THM学习笔记—Bounty Hacker
  • 游戏客户端面经
  • mysql基础操作
  • 亮数据代理IP轻松解决爬虫数据采集痛点
  • Python BaseModel和dataclass用法和区别
  • Day74:WEB攻防-机制验证篇重定向发送响应状态码跳过步骤验证码回传枚举
  • 【TB作品】MSP430,单片机,Proteus仿真,数字音乐盒,蜂鸣器音乐仿真
  • 智慧安全:守护智慧城市的安全屏障
  • 应急响应-Web2
  • 【保姆级教程】如何拥有GPT?(Proton邮箱版)
  • 10个最佳ES6特性 ES7与ES8的特性
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • E-HPC支持多队列管理和自动伸缩
  • gulp 教程
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • JavaScript 奇技淫巧
  • JavaScript设计模式与开发实践系列之策略模式
  • k个最大的数及变种小结
  • Material Design
  • Nacos系列:Nacos的Java SDK使用
  • PAT A1092
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • session共享问题解决方案
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • 对象管理器(defineProperty)学习笔记
  • ------- 计算机网络基础
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 前端面试之CSS3新特性
  • 浅谈web中前端模板引擎的使用
  • 使用权重正则化较少模型过拟合
  • 学习使用ExpressJS 4.0中的新Router
  • 异常机制详解
  • 主流的CSS水平和垂直居中技术大全
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • Spring第一个helloWorld
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • #《AI中文版》V3 第 1 章 概述
  • $(selector).each()和$.each()的区别
  • (2022 CVPR) Unbiased Teacher v2
  • (52)只出现一次的数字III
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...