专业软件网站建设/网站seo推广员招聘
- Spring
- 1. 什么是 Spring 框架?
- 2. 谈谈你对于 Spring IoC 的了解
- 3. 什么是依赖注入
- 4. Spring的依赖注入有几种方式
- 5. 将一个类声明为 Bean 的注解有哪些?
- 6. @Component 和 @Bean 的区别是什么?
- 7. 注入 Bean 的注解有哪些?
- 8. Bean 的作用域有哪些?
- 9. Bean 是线程安全的吗?
- 10. Bean 的生命周期了解么?
- 11. 什么是AOP,应用场景
- 11. Spring AOP 和 AspectJ
- 12. Spring AOP 的实现原理
- 13. AspectJ 定义的通知类型有哪些?
- 14. 多个切面的执行顺序如何控制?
- 15. 什么是SpringMVC
- 16. SpringMVC 核心组件
- 17. SpringMVC 工作原理
- 18. 统一异常处理怎么做?
- 19. Spring 框架中用到了哪些设计模式?
- 20. Spring 管理事务的方式有几种?
- 21. Spring 事务中哪几种事务传播行为?
- 22. Spring 事务中的隔离级别有哪几种?
- 23. @Transactional(rollbackFor = Exception.class)注解了解吗?
Spring
1. 什么是 Spring 框架?
答:
- Spring 是一款开源的轻量级 Java 开发框架。
- Spring 可以很方便地集成第三方组件(电子邮件,任务,调度,缓存等等)。
- 支持IOC、AOP,使用Spring进行开发效率非常高。
2. 谈谈你对于 Spring IoC 的了解
答:
- 将需要手动创建的对象交给框架去创建。
- 我们只需要在一个类上添加一个注解,就可以使用该类的对象了。
3. 什么是依赖注入
答:
- Spring容器在创建bean时,如果发现一个bean的属性是容器中的另一个bean,Spring则会自动的去进行对象关联。
4. Spring的依赖注入有几种方式
答:
- Setter注入
- 构造器注入
- 使用注解:
@Autowired
或@value
5. 将一个类声明为 Bean 的注解有哪些?
答:
@Component
:最基本的 Bean 注解@Controller
:对应控制层@Service
:对应服务层@Repository
:对应持久层@Configuration + @Bean
:通常是在一个配置类里面,将方法的返回结果注入进来。
6. @Component 和 @Bean 的区别是什么?
答:
@Component
:是一个类级别的注解,通常用于无需编程配置即可创建bean对象的类上。Spring 会扫描对应路径上标有@Component
的类,将该类的对象注入进来。@Bean
:是一个方法级别的注解,通常需要进行对象属性的配置,然后配合@Configuration
注解,将方法的返回结果注入到 IOC 容器中。
7. 注入 Bean 的注解有哪些?
答:
@Autowired
:根据类型进行注入,如果匹配到多个Bean,则会爆出异常。可以和@Qualifier
搭配使用,指定使用哪个名称的Bean@Resource
:首先根据名称注入,如果找不到,再根据类型进行查找。可以通过name
属性指定Bean的名称。
8. Bean 的作用域有哪些?
答:
- singleton (单例):IOC容器只会存在唯一的一个Bean。
- prototype:每次获取都会创建一个新的 bean
- request:每一次 HTTP 请求都会产生一个新的 bean。该 bean 仅在当前 HTTP request 内有效。
- session:每一次来自新 session 的 HTTP 请求都会产生一个新的 bean。该 bean 仅在当前 HTTP session 内有效。
- application:每个 Web 应用在启动时创建一个 Bean(应用 Bean),该 bean 仅在当前应用启动时间内有效。
- 使用
@Scope
注解声明 Spring Bean 的作用域
9. Bean 是线程安全的吗?
答:
prototype
、request
、Session
每次获取都会创建一个新的 bean 实例,所以不需要考虑线程安全。Singleton
是单例的,会被多个线程共享,所以要考虑线程安全的问题。
10. Bean 的生命周期了解么?
答:
- 实例化: Spring容器在启动时,默认会扫描启动类所在的路径,并为标注为
Bean
的类创建实例。 - 属性填充: 为 Bean 设置相关属性和依赖。例如@Autowired 注入的对象
- 初始化: Spring容器会检测Bean是否实现了特定的生命周期回调接口。如果实现了则会在特定时间调用它们。
- 销毁: 当Spring容器关闭时,会销毁所有的Bean,如果销毁有回调方法的话,也会执行。
11. 什么是AOP,应用场景
答:
- 面向切面编程,把方法中通用的功能抽离出来,比如(鉴权、日志记录等),通过预编译或是动态代理方式在不修改源代码的情况下给程序进行功能增强。
- 应用场景:日志、鉴权、Spring的事务等
11. Spring AOP 和 AspectJ
答:
Spring AOP
和 AspectJ
都是AOP的具体实现。AspectJ
是完全实现了 AOP,功能比 Spring AOP 要强。
Spring AOP
中使用了 AspectJ
的切点表达式,注解(通知类型)等
区别:
AspectJ
是在编译时增强,使用字节码处理技术。Spring AOP
是在运行时动态生成的,所以性能不如AspectJ
高AspectJ
不仅可以织入方法执行,还可以字段赋值时,构造函数执行时等。完全实现了 AOP 思想。Spring AOP
只支持方法级别的切入点
12. Spring AOP 的实现原理
答:
-
Spring AOP的实现是基于
JDK动态代理
和CGLIB
实现的。 -
如果要代理的对象,实现了某个接口,那么 Spring AOP 会使用
JDK动态代理
,去创建代理对象 -
而对于没有实现接口的对象,则使用的是
Cglib
生成一个被代理对象的子类来作为代理。
13. AspectJ 定义的通知类型有哪些?
答:
- Before(前置通知):目标对象的方法调用之前触发
- After (后置通知):目标对象的方法调用之后触发
- Around (环绕通知):可以在目标对象的方法调用之前和之后进行操作。
14. 多个切面的执行顺序如何控制?
答:
- 可以在切面类上使用
@Order
注解直接定义切面顺序。值越小优先级越高
15. 什么是SpringMVC
答:
- SpringMVC 是基于
MVC
模式设计的 Web 框架。 - MVC代表
Model-View-Controller
- 通常划分为
Controller
接口层,Service
业务层,Entity
实体类,dao
持久层
16. SpringMVC 核心组件
答:
DispatcherServlet
:中央处理器,负责接收请求、进行分发,客户端响应。HandlerMapping
:处理器映射器,根据URL
去查找对应的Handler
HandlerAdapter
:处理器适配器,指定对应的Handler
Handler
:请求处理器,负责处理请求ViewResolver
:视图解析器,视图解析器负责解析Handler
返回的视图,并将结果返回给DispatcherServlet
17. SpringMVC 工作原理
答:
客户端(浏览器)
发送请求, 首先会到达DispatcherServlet
。DispatcherServlet
收到请求后,调用HandlerMapping
处理器映射器。- 处理器映射器根据请求url找到具体的处理器
Handler
,并返回给DispatcherServlet
DispatcherServlet
通过HandlerAdapter
处理器适配器执行找到的处理器。Handler
完成对用户请求的处理后,会返回一个ModelAndView
对象给DispatcherServlet
DispatcherServlet
再调用ViewResolver
视图解析器,解析出具体的ViewDispatcherServlet
将 Model 填充到 解析出来的View中DispaterServlet
把 View 返回给浏览器
注意:
- 如果使用
@ResponseBody
或者@RestController
注解,表明方法返回值应该直接在HTTP响应体中写出 - 所以Spring MVC将直接跳过视图解析器。
18. 统一异常处理怎么做?
答:
- 可以使用
@ControllerAdvice + @ExceptionHandler
捕获 Controller 层的异常。 - 如果是业务层的异常,如果自己能处理,就自己处理。
- 如果处理不了,就抛给 Controller 层。
19. Spring 框架中用到了哪些设计模式?
答:
- 工厂设计模式 : Spring 使用工厂模式通过 BeanFactory、ApplicationContext 创建 bean 对象。
- 代理设计模式 : Spring AOP 功能的实现。单例设计模式 : Spring 中的 Bean 默认都是单例的。
- 模板方法模式 : Spring 中 jdbcTemplate、hibernateTemplate 等以 Template 结尾的对数据库操作的类,它们就使用到了模板模式。
- 包装器设计模式 : 我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。
- 观察者模式: Spring 事件驱动模型就是观察者模式很经典的一个应用。
- 适配器模式 : Spring AOP 的增强或通知(Advice)使用到了适配器模式、spring MVC 中也是用到了适配器模式适配Controller。
20. Spring 管理事务的方式有几种?
答:
- 编程式事务:将事务管理的代码硬编码在业务逻辑中,手动管理事务的开启、提交、回滚等操作。
- 声明式事务:在 XML 配置文件中配置或者基于注解。
21. Spring 事务中哪几种事务传播行为?
答:
事务传播行为: 是指当在一个事务中调用另外一个事务方法时,这个被调用的事务方法应该如何进行执行,即事务如何在方法之间进行传播。
TransactionDefinition.PROPAGATION_REQUIRED
:默认的,如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。TransactionDefinition.PROPAGATION_REQUIRES_NEW
:新建事务,如果当前存在事务,把当前事务挂起。TransactionDefinition.PROPAGATION_NESTED
:如果当前存在事务,则会再当前事务内嵌套一个事务,如果没有事务,则新建一个事务TransactionDefinition.PROPAGATION_MANDATORY
:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。TransactionDefinition.PROPAGATION_SUPPORTS
:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。TransactionDefinition.PROPAGATION_NOT_SUPPORTED
:以非事务方式运行,如果当前存在事务,则把当前事务挂起。TransactionDefinition.PROPAGATION_NEVER
:以非事务方式运行,如果当前存在事务,则抛出异常
22. Spring 事务中的隔离级别有哪几种?
答:
TransactionDefinition.ISOLATION_DEFAULT
:使用后端数据库默认的隔离级别,MySQL 默认采用的 REPEATABLE_READ 隔离级别 Oracle 默认采用的 READ_COMMITTED 隔离级别.TransactionDefinition.ISOLATION_READ_UNCOMMITTED
:读未提交,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读TransactionDefinition.ISOLATION_READ_COMMITTED
: 读已提交,允许读取事务提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生TransactionDefinition.ISOLATION_REPEATABLE_READ
: 可重复读,多次读取结果都是一致的,可以阻止脏读和不可重复读,但幻读仍有可能发生。TransactionDefinition.ISOLATION_SERIALIZABLE
: 串行化,完全服从 ACID 的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。
23. @Transactional(rollbackFor = Exception.class)注解了解吗?
答:
@Transactional
注解默认回滚策略是只有在遇到RuntimeException
(运行时异常) 或者Error
时才会回滚事务,而不会回滚Checked Exception
(受检查异常)- 可以使用
@Transactional
注解的rollbackFor
指定遇到什么异常回滚。
相关文章:

【Spring】面试题汇总
Spring1. 什么是 Spring 框架?2. 谈谈你对于 Spring IoC 的了解3. 什么是依赖注入4. Spring的依赖注入有几种方式5. 将一个类声明为 Bean 的注解有哪些?6. Component 和 Bean 的区别是什么?7. 注入 Bean 的注解有哪些?8. Bean 的作用域有哪些?9. Bean…...
thinkphp6入门(23)-- 如何导入excel
1. 安装phpexcel composer require phpoffice/phpexcel composer update 2. 前端 <form class"forms-sample" action"../../xxxx/xxxx/do_import_users" method"post" enctype"multipart/form-data"><div class"cont…...

【数据结构3-栈和队列】
数据结构3-栈和队列 1 栈-特殊的线性表-先进后出1.1 栈的三个案例 2 队列-与栈相反-先进先出2.1 队列的案例 3 用C实现栈的代码:4 用C实现队列的代码 1 栈-特殊的线性表-先进后出 1.1 栈的三个案例 2 队列-与栈相反-先进先出 2.1 队列的案例 3 用C实现栈的代码&…...

STL--list双向链表
功能 将数据进行链式存储 链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的 链表的组成:链表由一系列结点组成 结点的组成:一个是存储数据元素的数据域࿰…...

ElasticSearch入门篇
简介 ElasticSearch简介:简称为es, es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也使用Java开发并使用Lucene…...

MAXHUB会议解决方案持续进化,以“高效”为核心推动行业发展
4月16日,MAXHUB 2024新品发布会在视源股份(002841)北京产业园圆满举行。本次发布会以“智会融合 进化不止”为主题,首发MAXHUB高效会议解决方案,以AI智能、开放兼容、场景化交付为方向,为用户提供高效、便捷…...

CentOS 7安装Redis
说明:本文介绍如何在CentOS 7操作系统下安装Redis 下载安装 首先,去官网上下载所需要安装的版本,官网地址:https://download.redis.io/releases/,我这里下载3.2.1版本的 下载完,上传到云服务器上…...

Kubernetes (K8s) 部署前后端分离项目
要使用Kubernetes (K8s) 部署一个涵盖Django后端、Vue前端、Redis、Nginx、RabbitMQ和MySQL的前后端分离项目,需要遵循以下步骤。这个过程涉及创建和配置多个资源,包括部署(Deployments)、服务(Services)、配置映射(ConfigMaps)、密钥(Secrets)和Ingress规则。 大纲…...

MLT媒体程序框架01:概述
MLT官网 概述 MLT是一个开源的多媒体框架,专为电视广播而设计和开发。它为广播公司、视频编辑器、媒体播放器、转码器、网络流媒体和更多类型的应用程序提供了一个工具包。该系统的功能是通过各种现成的工具、XML创作组件和基于API的可扩展插件提供的。 它是通过…...

9【原型模式】复制一个已存在的对象来创建新的对象
你好,我是程序员雪球。 今天我们来学习23种设计模式之原型模式,在平时开发过程中比较少见。我带你了解什么是原型模式,使用场景有哪些?有什么注意事项?深拷贝与浅拷贝的区别,最后用代码实现一个简单的示例…...

谷粒商城实战(013 业务-认证服务-短信验证)
Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强 总时长 104:45:00 共408P 此文章包含第211p-第p219的内容 介绍 认证中心要集成 社交登录、OAuth2.0、单点登录 等功能 OAuth 2.0: 问题解决: OAuth 2.0 主要…...

Unity中支持泰语--没有版权限制
在Unity中支持泰语主要涉及以下几个方面: 选择合适的字体:在Unity中,确保使用支持泰文字符的字体是至关重要的。例如,可以选择使用Noto Serif Thai字体,这是一个支持泰语的字体2。 处理Unity版本问题:某些…...

C语言传统垃圾收集器的缺陷以及我的思路
传统的比如Boehm回收器,都是在malloc/realloc/free上做文章,参考这篇文章【How the Boehm Garbage Collector Works】的解释,因为C数据结构是无法预料的,内存里面并没有特殊标记,很难判断哪些是指针哪些是数据…...

数据交换格式
一、什么是数据交换格式 在计算机的不同程序之间,或者不同的编程语言之间进行交换数据,也需要一种大家都能听得懂得‘语言’,这就是数据交换格式,它通过文本以特定的形式来进行描述数据。 二、常用的几种数据交换格式 客户端常…...

电力系统卫星授时信号安全隔离装置防护方案
电力系统是国家关键基础设施, 电力安全关系国计民生, 是国家安全的重要保障, 与政治安全、经济安全、 网络安全、社会安全等诸多领域密切关联。电网运行情况瞬息万变,为了在其发生事故时能够及时得到处理,需要统一的时…...

【编程TOOL】VC++6.0下载安装配置使用保姆式教程
目录 编辑 1.软件介绍 2.软件下载 3.软件安装 3.1.下载得到可执行文件并双击进行安装 3.2. 点击下一步 3.3. 选择安装位置 3.4. 勾选“创建桌面快捷方式”并点击下一步 5. 点击安装并等待 3.6. 先取消运行,后点击完成,软件即安装完毕 4.兼容性配置 4.1…...

组织机构代码是哪几位?营业执照怎么看组织机构代码?
组织机构代码是哪几位? 组织机构代码通常指的是组织机构代码证上的一组特定数字,它用于唯一标识一个组织或机构。在中国,组织机构代码由9位数字组成,前8位是本体代码,最后1位是校验码。这组代码是按照国家有关标准编制的&#x…...

nginx禁止ip访问,只允许域名访问
无论ip直接访问,还是通过域名访问,最终都是通过ip访问到服务器浏览器访问时会携带Host参数,通过ip访问时携带的是ip,通过域名访问时携带的是域名nginx收到请求后判断host的值,如果判断出不是通过域名访问的则拒绝&…...

10组Python面试高频问题与详尽解答指南
大家好,你们准备好了吗?面试官们总喜欢出其不意地问些让人头大的问题。别担心,今天我来帮你们梳理10个Python面试中的热门难题,让你的回答既专业又有趣!让我们一起变身Python高手吧! 1. 问题: 什么是Pytho…...

使用SpringBoot将中国地震台网数据保存PostGIS数据库实践
目录 前言 一、数据转换 1、Json转JavaBean 2、JavaBean与数据库字段映射 二、空间数据表设计 1、表结构设计 三、PostGIS数据保存 1、Mapper接口定义 2、Service逻辑层实现 3、数据入库 4、运行实例及结果 总结 前言 在上一篇博客中基于Java的XxlCrawler网络信息爬…...

后端返回树结构
出参结构 Getter Setter public class TreeResponse implements Serializable {// 主键private Long id;// 父级节点private Long parentId;// 层级private Byte layer;// 编码private String docCode;// 名称private String docName;// 子节点private List<TreeResponse&g…...

C语言——通讯录的实现
一.前言 嗨嗨嗨,又和大家见面了!前面我们讲到了如何实现一个循序表。现在我们开始讲解如何基于循序表来实现通讯录功能。 二.正文 通讯录中的SeqlList.h #pragma once //#define SLDateType int #include<stdio.h> #include<stdlib.h> #…...

Next-Scale Prediction、InstantStyle、Co-Speech Gesture Generation
本文首发于公众号:机器感知 Next-Scale Prediction、InstantStyle、Co-Speech Gesture Generation Visual Autoregressive Modeling: Scalable Image Generation via Next-Scale Prediction We present Visual AutoRegressive modeling (VAR), a new generation p…...

class中 padding和margin的用法;
如果我们想要移动盒子等的位置 ,除了可以用相对定位和绝对定位还可以用margin 和paddinng; 结构如图所示 margin和padding的用法: padding和margin后面可以跟1或2或3或4个数,按照顺序分别是上,右,下&…...

单独使用YOLOV9的backbone网络
前言 YOLO系列的网络结构都是通过.yaml来进行配置的,当要单独想使用其中的backbone网络时,可以通过yaml配置文件来进行网络搭建。 backbone的yaml配置文件与网络结构 backbone:[[-1, 1, Silence, []], # conv<...

WordPress JS Support Ticket插件 RCE漏洞复现
0x01 产品简介 WordPress和WordPress plugin都是WordPress基金会的产品。JS Support Ticket是使用在其中的一套开源票务系统插件。 0x02 漏洞概述 WordPress中的JS Support Ticket插件存在未经上传漏洞,未经身份验证的攻击者可以上传恶意脚本的服务器,执行任意指令,从而获…...

加盟代理短视频无人直播项目,开启互联网线上经营新模式
随着短视频行业的快速发展和用户数量的不断增长,短视频无人直播项目成为了近年来备受关注的创业机会。本文将分享如何加盟代理短视频无人直播项目,开启属于自己的经营新模式。 一、了解无人直播项目的核心优势 短视频无人直播项目是结合了短视频与直播的…...

spring高级篇(一)
1、ApplicationContext与BeanFactory BeanFactory是ApplicationContext的父级接口:(citlaltu查看类关系图) 在springboot的启动类中,我们通过SpringApplication.run方法拿到的是继承了ApplicationContext的ConfigurableApplicatio…...

免费的GPT-3.5 API服务aurora
什么是 aurora ? aurora 是利用免登录 ChatGPT Web 提供的无限制免费 GPT-3.5-Turbo API 的服务,支持使用 3.5 的 access 调用。 【注意】:仅 IP 属地支持免登录使用 ChatGPT的才可以使用(也可以自定义 Baseurl 来绕过限制&#x…...

突破编程_C++_网络编程(Windows 套接字(处理 TCP 粘包问题))
1 TCP 协议与粘包问题概述 1.1 TCP 粘包的产生原因 TCP粘包问题的产生原因涉及多个方面,主要的原因如下: 首先,发送方在发送数据时,由于TCP协议为提高传输效率而采用的Nagle算法,可能会将多个小数据包合并成一个大数…...