Spring面试题pro版-6

Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。

Spring中的单例Beans是线程安全的吗?

Spring框架中的单例Beans在创建时是线程安全的,但在使用时是否线程安全取决于具体的设计和实现
spring中的bean如果是无状态的不共享数据,那么是线程安全的。如果说spring中的bean存在共享数据的情况。那 么就是线程不安全的,需要自行进行并发处理。或者使用多例模式。

Spring中事务传播行为

PROPAGATION_REQUIRED–支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS–支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY–支持当前事务,如果当前没有事务,就抛出异常。

PROPAGATION_REQUIRES_NEW–新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED–以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER–以非事务方式执行,如果当前存在事务,则抛出异常。

Spring事务中的隔离级别有哪几种?

在TransactionDefinition接口中定义了五个表示隔离级别的常量:
ISOLATION_DEFAULT:使用后端数据库默认的隔离级别, Mysql默认采用的REPEATABLE_READ隔离级别; Oracle 默认采用的READ_COMMITTED隔离级别。
ISOLATION_READ_UNCOMMITTED:最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不 可重复读。
ISOLATION_READ_COMMITTED:允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有 可能发生
ISOLATION_REPEATABLE_READ:对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可 以阻止脏读和不可重复读,但幻读仍有可能发生。
ISOLATION_SERIALIZABLE:最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间 就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通
常情况下也不会用到该级别。

Spring中用到了哪些设计模式?

单例模式
Spring默认创建的Bean就是单例的。进一步的,依赖注入Bean实例默认是double check的单例模式。并且用 ConcurrentHashMap保证线程安全。
代理模式
AOP底层就是动态代理模式的实现。分JDK动态代理和CGLIB两种默认使用jdk动态代理,如果开启了cglib则优先使用 cglib。如果没有接口, jdk动态代理会失效。cglib则没有这个问题
工厂方法Spring中的BeanFactory就是工厂模式的体现,将对象的创建交给工厂来做。
原来依赖方和被依赖方耦合在一起,现在beanFactory将bean之间的耦合打开了。依赖方到工厂里拿依赖,不直接和 被依赖方接触耦合了,
模版模式
模板方法模式是一种行为设计模式,模版模式类似继承,父类定义规则,子类具体实现
Spring 中 jdbcTemplate、 hibernateTemplate 等以Template 结尾的对数据库操作的类,它们就使用到了模板模 式。
装饰者模式
Spring 在配置DataSource 的时候, DataSource 可能是不同的数据库和数据源。这个时候就要用到装饰者模式。
Spring 中用到的包装器模式在类名上含有Wrapper或者Decorator。这些类基本上都是动态地给一个对象添加一些 额外的职责。
适配器模式

实现方式: SpringMVC中的适配器HandlerAdatper。
实现原理: HandlerAdatper根据Handler规则执行不同的Handler。
实现过程: DispatcherServlet根据HandlerMapping返回的handler,向HandlerAdatper发起请求,处理
Handler。 HandlerAdapter根据规则找到对应的Handler并让其执行,执行完毕后Handler会向HandlerAdapter返 回一个ModelAndView,最后由HandlerAdapter向DispatchServelet返回一个ModelAndView。
实现意义: HandlerAdatper使得Handler的扩展变得容易,只需要增加一个新的Handler和一个对应的
HandlerAdapter即可。因此Spring定义了一个适配接口,使得每一种Controller有一种对应的适配器实现类,让适配 器代替controller执行相应的方法。这样在扩展Controller时,只需要增加一个适配器类就完成了SpringMVC的扩展 了。
观察者模式
观察者模式是一种对象行为型模式。 a观察b的行为, b发生时a相应的做出反应、
Spring 事件驱动模型就是观察者模式很经典的一个应用。主要包括三个组成部分:事件,事件发布者,事件订阅 者,当事件发生时,事件订阅者相应的做出改变。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/813433.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据仓库—ETL最佳实践:提升数据集成的效率与质量

ETL(Extract, Transform, Load)作为数据仓库和数据集成的核心环节,对于确保数据的准确性、一致性和可用性至关重要。在实践中,遵循一些经过验证的最佳实践可以帮助企业提高ETL项目的成功率,优化数据处理流程&#xff0…

Redis GEO实现附近的人功能

附近的人功能是社交应用中非常常见的一项功能,它允许用户查找并发现他们周围的其他用户。使用Redis的GEO特性来实现这一功能是非常高效和简单的。以下是实现这一功能的基本步骤: 1. 准备工作 确保你的Redis服务器版本支持GEO特性(3.2.0及以…

fs.writeFile写入文件后 通过路径获取文件 获取不到最新写入的文件

通过fs.writeFile 直接通过路径获取文件 发现一直是首次上传的图片 不是当前最新上传的图片 const fs uni.getFileSystemManager()fs.writeFile({ilePath: ${uni.env.USER_DATA_PATH}/avatar.png,data: imageData.replace(/^data:image\/\w;base64,/,),encoding: base64,succe…

The Great Equalizer

# The Great Equalizer ## 题面翻译 Tema 购买了一台老旧设备,设备上有一个小屏幕和一个磨损的铭文“伟大的平衡器”。 卖家说,这台设备需要提供一个整数数组 $a$ 作为输入,之后“伟大的平衡器”将按照以下方式工作: 1. 将当前数组…

OSCP靶场--Fail

OSCP靶场–Fail 考点(rsync未授权覆盖公钥Fail2ban提权) 1.nmap扫描 ## ┌──(root㉿kali)-[~/Desktop] └─# nmap -sV -sC 192.168.153.126 -p- -Pn --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-04-12 23:34 EDT Warning: 192.168.153.126 giving …

招生管理|基于SprinBoot+vue的招生管理系统系统设计与实现(源码+数据库+文档)

招生管理目录 基于SprinBootvue的招生管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 前台 后台 教师权限 学生权限: 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍&#xff…

大数据------JavaWeb------JDBC(完整知识点汇总)

JDBC 定义 全称为Java数据库连接(Java DataBase Connectivity):是使用java语句来操作所有关系型数据库的一套API JDBC本质 它是官方定义的一套操作所有关系型数据库的规则(即接口),各个数据库厂商会去实现…

Java 9 新特性

Java 9 新特性 Java 9 发布于 2017 年 9 月 22 日,带来了很多新特性,其中最主要的变化是已经实现的模块化系统。接下来我们会详细介绍 Java 9 的新特性。 Java 9 新特性 模块系统:模块是一个包的容器,Java 9 最大的变化之一是引…

VLC-Qt实现简单的视频播放器

VLC-Qt是一个结合了Qt应用程序和libVLC的免费开源库。它提供了用于媒体播放的核心类,以及用于快速开发媒体播放器的GUI类。由于集成了整个libVLC,VLC-Qt具备了libVLC的所有特性, 例如:libVLC实例和播放器、单个文件和列表播放、音…

.NET i18n 多语言支持与国际化

环境 WIN10 VS2022 .NET8 1.👋创建项目 2.👀创建Resources Controllers HomeController.en.resx HomeController.fr.resx HomeController.zh.resx 3.🌱Program.cs添加国际化支持 // 添加国际化支持 builder.Services.AddLocalization(…

6.Hexo标签插件和资产文件夹

标签插件 标签插件,基本上是只是一些小的代码片段,可以将他们添加到markdown文件中 以便添加特定的代码,不需要编写复杂或混乱的HTML 当很多时候想要在markdown页面添加一些特殊元素,通常必须使用HTML 如果不想这么用HTML&#…

CSS特效---百分比加载特效

1、演示 2、一切尽在代码中 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document</title&…

公众号文章如何添加多个附件?

在公众号分享一些文档给粉丝下载&#xff0c;有那么几种方式。比如把文档转成超链接&#xff0c;放在公众号的“阅读原文”处&#xff0c;或者把文件转成二维码&#xff0c;贴在公众号文章里面。这两种方式其实都需要先把文件转成超链接&#xff08;网页链接&#xff09;&#…

开发需求15-使用el-checkbox组件实现el-tree组件的父子关联关系(非全选/全不选)

需求描述: 大家都知道el-tree可以很明显的通过选中来体现上下节点的父子选中状态,那么如果要求把后端把el-tree的数据结构,通过一个展开的list返回给你,使用el-checkbox组件渲染每一个节点,同时要求选中某一个节点,同时可以选中其父节点和子节点;取消也是一样。 思路:…

【目标检测数据集】VOC2007 数据集介绍

一、介绍 VOC 数据是 PASCAL VOC Challenge 用到的数据集&#xff0c;官网&#xff1a;http://host.robots.ox.ac.uk/pascal/VOC/ 备注&#xff1a;VOC数据集常用的均值为&#xff1a;mean_RGB(122.67891434, 116.66876762, 104.00698793) Pytorch 上通用的数据集的归一化指…

OVITO-2.9版本

关注 M r . m a t e r i a l , \color{Violet} \rm Mr.material\ , Mr.material , 更 \color{red}{更} 更 多 \color{blue}{多} 多 精 \color{orange}{精} 精 彩 \color{green}{彩} 彩&#xff01; 主要专栏内容包括&#xff1a; †《LAMMPS小技巧》&#xff1a; ‾ \textbf…

岛屿个数(dfs)

[第十四届蓝桥杯省B 岛屿个数] 小蓝得到了一副大小为 M N MN MN 的格子地图&#xff0c;可以将其视作一个只包含字符 0 0 0&#xff08;代表海水&#xff09;和 1 1 1&#xff08;代表陆地&#xff09;的二维数组&#xff0c;地图之外可以视作全部是海水&#xff0c;每个岛…

C++递推算法

位数问题 #include<bits/stdc.h> using namespace std; void f(int); int a[100][100]; int b[100][100]; int n; int main() {cin>>n;long long x0;for(int i1;i<n;i){xx*10;}long long y0;long long tx;for(int i1;i<n;i){yyt*9;tt/10;}int sum0;int summ…

守护数据安全:如何应对.360、.halo勒索病毒的攻击

尊敬的读者&#xff1a; 近年来&#xff0c;网络安全问题日益严重&#xff0c;各种病毒、木马、勒索软件层出不穷。其中&#xff0c;.360、.halo勒索病毒因其独特的传播方式和恶意行为而备受关注。本文将对该病毒进行深入剖析&#xff0c;并提出相应的应对策略&#xff0c;帮助…

蓝桥杯易错点汇总

1.当想输入一个数字再输入一个字符串要多一个nextLine(); int a scan.nextInt(); String b scan.nextLine(); 在Java编程语言中&#xff0c;使用Scanner类进行输入时&#xff0c;需要注意nextInt()和nextLine()方法的使用。nextInt()用于读取下一个整数&#xff0c;而nextLi…