spring springmvc springboot mybatis

news2024/11/26 4:54:24

Spring框架中的单例bean是线程安全的吗?

面试官:什么是AOP

候选人:
aop是面向切面编程,在spring中用于将那些与业务无关,但却对多个对象产
生影响的公共行为和逻辑,抽取公共模块复用,降低耦合,一般比如可以做
为公共日志保存,事务处理等

面试官:你们项目中有没有使用到AOP

候选人:
我们当时在后台管理系统中,就是使用aop来记录了系统的操作日志
主要思路是这样的,使用aop中的环绕通知+切点表达式,这个表达式就是要
找到要记录日志的方法,然后通过环绕通知的参数获取请求方法的参数,比
如类信息、方法信息、注解、请求方式等,获取到这些参数以后,保存到数
据库

面试官:Spring中的事务是如何实现的

候选人:
spring实现的事务本质就是aop完成,对方法前后进行拦截,在执行方法之前
开启事务,在执行完目标方法之后根据执行情况提交或者回滚事务。 

面试官:Spring中事务失效的场景有哪些

候选人:
嗯!这个在项目中之前遇到过,我想想啊
第一个,如果方法上异常捕获处理,自己处理了异常,没有抛出,就会导致
事务失效,所以一般处理了异常以后,别忘了跑出去就行了
第二个,如果方法抛出检查异常,如果报错也会导致事务失效,最后在
spring事务的注解上,就是@Transactional上配置rollbackFor属性为
Exception,这样别管是什么异常,都会回滚事务
第三,我之前还遇到过一个,如果方法上不是public修饰的,也会导致事务
失效
嗯,就能想起来那么多

面试官:Spring中的循环引用

候选人:
嗯,好的,我来解释一下
循环依赖:循环依赖其实就是循环引用,也就是两个或两个以上的bean互相持
有对方,最终形成闭环。比如A依赖于B,B依赖于A
循环依赖在spring中是允许存在,spring框架依据三级缓存已经解决了大部
分的循环依赖
①一级缓存:单例池,缓存已经经历了完整的生命周期,已经初始化完成的
bean对象
②二级缓存:缓存早期的bean对象(生命周期还没走完)
③三级缓存:缓存的是ObjectFactory,表示对象工厂,用来创建对象

面试官:那具体解决流程清楚吗?

候选人:
第一,先实例A对象,同时会创建ObjectFactory对象存入三级缓存
singletonFactories
第二,A在初始化的时候需要B对象,这个走B的创建的逻辑
第三,B实例化完成,也会创建ObjectFactory对象存入三级缓存
singletonFactories
第四,B需要注入A,通过三级缓存中获取ObjectFactory来生成一个A的对象
同时存入二级缓存
第五,B通过从通过二级缓存earlySingletonObjects 获得到A的对象后可以正
常注入,B创建成功,存入一级缓存singletonObjects
第六,回到A对象初始化,因为B对象已经创建完成,则可以直接注入B,A
创建成功存入一次缓存singletonObjects
第七,二级缓存中的临时对象A清除

面试官:构造方法出现了循环依赖怎么解决?

候选人:
由于bean的生命周期中构造函数是第一个执行的,spring框架并不能解决构
造函数的的依赖注入,可以使用@Lazy懒加载,什么时候需要对象再进行
bean对象的创建

面试官:SpringMVC的执行流程知道嘛

候选人:
嗯,这个知道的,在前后端开发中
1、用户发送出请求到前端控制器DispatcherServlet,这是一个调度中心
2、DispatcherServlet收到请求调用HandlerMapping(处理器映射器)。
3、HandlerMapping找到具体的处理器(可查找xml配置或注解配置),生成处
理器对象及处理器拦截器(如果有),再一起返回给DispatcherServlet。
4、DispatcherServlet调用HandlerAdapter(处理器适配器)。
5、HandlerAdapter经过适配调用具体的处理器(Handler/Controller)。
6、方法上添加了@ResponseBody。
7、通过HttpMessageConverter来返回结果转换为JSON并响应。

面试官:Springboot自动配置原理

候选人:
嗯,好的,它是这样的。
在Spring Boot项目中的引导类上有一个注解@SpringBootApplication,这个
注解是对三个注解进行了封装,分别是:
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
其中 @EnableAutoConfiguration 是实现自动化配置的核心注解。
该注解通过 @Import 注解导入对应的配置选择器。关键的是内部就是读取了
该项目和该项目引用的Jar包的的classpath路径下META-
INF/spring.factories文件中的所配置的类的全类名。
在这些配置类中所定义的Bean会根据条件注解所指定的条件来决定是否需要
将其导入到Spring容器中。
一般条件判断会有像 @ConditionalOnClass 这样的注解,判断是否有对应的
class文件,如果有则加载该类,把这个配置类的所有的Bean放入spring容器
中使用。

面试官:Spring 的常见注解有哪些?

候选人:
嗯,这个就很多了
第一类是:声明bean,有@Component、@Service、@Repository、
@Controller
第二类是:依赖注入相关的,有@Autowired、@Qualifier、@Resourse
第三类是:设置作用域 @Scope
第四类是:spring配置相关的,比如@Configuration,@ComponentScan 和
@Bean
第五类是:跟aop相关做增强的注解 @Aspect,@Before,@After,
@Around,@Pointcut

面试官:SpringMVC常见的注解有哪些?

候选人:
嗯,这个也很多的
有@RequestMapping:用于映射请求路径;
@RequestBody:注解实现接收http请求的json数据,将json转换为java对
象;
@RequestParam:指定请求参数的名称;
@PathViriable:从请求路径下中获取请求参数(/user/{id}),传递给方法的
形式参数;@ResponseBody:注解实现将controller方法返回对象转化为json
对象响应给客户端。@RequestHeader:获取指定的请求头数据,还有像
@PostMapping、@GetMapping这些。

面试官:Springboot常见注解有哪些?

候选人:
嗯~~
Spring Boot的核心注解是@SpringBootApplication , 他由几个注解组成 :
@SpringBootConfiguration: 组合了- @Configuration注解,实现配置文件的功
能;
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选

@ComponentScan:Spring组件扫描

面试官:MyBatis执行流程

候选人:
好,这个知道的,不过步骤也很多
①读取MyBatis配置文件:mybatis-config.xml加载运行环境和映射文件
②构造会话工厂SqlSessionFactory,一个项目只需要一个,单例的,一般由
spring进行管理
③会话工厂创建SqlSession对象,这里面就含了执行SQL语句的所有方法
④操作数据库的接口,Executor执行器,同时负责查询缓存的维护
⑤Executor接口的执行方法中有一个MappedStatement类型的参数,封装了
映射信息
⑥输入参数映射
⑦输出结果映射

面试官:Mybatis是否支持延迟加载?

候选人:
是支持的~
延迟加载的意思是:就是在需要用到数据时才进行加载,不需要用到数据时
就不加载数据。
Mybatis支持一对一关联对象和一对多关联集合对象的延迟加载
在Mybatis配置文件中,可以配置是否启用延迟加载
lazyLoadingEnabled=true|false,默认是关闭的

面试官:Mybatis的一级、二级缓存用过吗?

候选人:
嗯~~,用过的~
mybatis的一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存,其存储作
用域为 Session,当Session进行flush或close之后,该Session中的所有Cache
就将清空,默认打开一级缓存
关于二级缓存需要单独开启
二级缓存是基于namespace和mapper的作用域起作用的,不是依赖于SQL
session,默认也是采用 PerpetualCache,HashMap 存储。
如果想要开启二级缓存需要在全局配置文件和映射文件中开启配置才行。

面试官:Mybatis的二级缓存什么时候会清理缓存中的数据

候选人:
嗯!!
当某一个作用域(一级缓存 Session/二级缓存Namespaces)的进行了新增、修
改、删除操作后,默认该作用域下所有 select 中的缓存将被 clear。

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

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

相关文章

【专题速递】传输网络优化(长专题)

// RTC如何助力远程医疗?5G的差异化体现在哪?SMT如何将远程做到极致?7月29日LiveVideoStackCon2023上海站传输网络优化专场,为您解答。 传输网络优化 为应对互联网日益增长的加速需求、复杂的网络环境以及多种多样的视频业务&am…

第12讲:剖析 Trace 在 SkyWalking 中的落地实现方案(上)

SkyWalking 中 Trace 的相关概念以及实现类与 OpenTracing 中的概念基本类似,像 Trace、Span、Tags、Logs 等核心概念,在 SkyWalking Agent 中都有对应实现,只是在细微实现上略有区别的,其中最重要的是: SkyWalking 的…

Redis——redis的java客户端+(Jedis和SpringDataRedis)

客户端对比 一个Spring Data Redis底层可以兼容前两个 Jedis快速入门 直接使用命令名作为方法名就是Jedis好学的原因 第一步 &#xff1a; 创建一个maven项目并导入如下依赖&#xff0c;除了redis的以来还有一个junit5的依赖 <!--redis的依赖--><dependency>&l…

如何使用3D转换工具HOOPS Exchange与LibConverter进行流缓存导出?

如果您正在使用HOOPS Communicator&#xff0c;您可能想在生成流缓存模型之前利用HOOPS Exchange的高级功能和转换选项。 申请HOOPS试用 HOOPS中文网 如何使用 如您所知&#xff0c;LibConverter是HOOPS Communicator软件包中包含的一个简单的API&#xff0c;conver…

【GeoDa实用技巧100例】003:GeoDa连接并打开多种格式的数据源

GeoDa支持 shapefile、地理数据库、GeoJSON、MapInfo、GML、KML 以及 GDAL 库支持的其他矢量数据格式。该程序还将表格格式&#xff08;.csv、.dbf、.xls、.ods&#xff09;中的坐标转换为这些空间数据格式之一&#xff0c;并在不同文件格式之间转换数据。 文章目录 一、连接文…

深入了解 CSS 变量,让 CSS 创造更多可能!

日常开发中所说的 CSS 变量&#xff0c;实际上是 CSS 的变量函数 var() 与 CSS 自定义属性的统称。 CSS 变量带来的提升: 使得开发和维护成本更低了&#xff0c;如让整个网站的换肤变得更容易&#xff1b;改变了在图形交互效果的实现中 JavaScript 的占据比重&#xff0c;使得…

EasyUI Pagination 分页的两种做法小结

EasyUI Pagination 分页的两种做法小结 EasyUI 的 datagrid 支持服务器端分页&#xff0c;但是官方的资料比较少&#xff0c;以下总结了两种 datagrid 的服务器端分页机制&#xff0c;一种是datagrid默认机制&#xff0c;另一种是利用 Ajax 获取数据并填充 Datagrid&#xff0c…

矩形面积 (力扣)数学推理 JAVA

给你 二维 平面上两个 由直线构成且边与坐标轴平行/垂直 的矩形&#xff0c;请你计算并返回两个矩形覆盖的总面积。 每个矩形由其 左下 顶点和 右上 顶点坐标表示&#xff1a; 第一个矩形由其左下顶点 (ax1, ay1) 和右上顶点 (ax2, ay2) 定义。 第二个矩形由其左下顶点 (bx1, b…

系统驱动作业

作业1 myled_time.c #include <linux/init.h> #include <linux/module.h> #include<linux/of.h> #include<linux/gpio.h> #include<linux/of_gpio.h> #include<linux/timer.h>struct device_node *dnode; unsigned int gpiono; struct t…

Redis — 不仅仅是缓存

1*qIy3PMmEWNcD9Czh_21C8g.png Redis是一种快速、开源的内存键值&#xff08;NoSQL&#xff09;数据库&#xff0c;远远超越了缓存的功能。Redis使用RAM进行操作&#xff0c;提供亚毫秒级的响应时间&#xff0c;支持每秒数百万次请求。Redis主要用于缓存&#xff0c;但它也可以…

【CSS】文字渐变色

CSS设置文字渐变色 background-image: -webkit-linear-gradient(bottom,red,#fd8403,yellow); -webkit-background-clip: text; // 设置背景作用域 -webkit-text-fill-color: transparent;

docker数据卷权限管理--理论和验证

一、Docker容器中用户权限管理 Linux系统的权限管理是由uid和gid负责&#xff0c;Linux系统会检查创建进程的uid和gid&#xff0c;以确定它是否有足够的权限修改文件&#xff0c;而非是通过用户名和用户组来确认。 同样&#xff0c;在docker容器中主机上运行的所有容器共享同一…

【DC系列06】DC-6靶机复盘

【DC系列06】DC-6靶机复盘 我们打开这个靶机后首先还是先对靶机进行一个ip扫描&#xff0c;然后再单独对这个ip进行一个全局扫描。 扫描后ip地址是192.168.102.147。 我们再单独扫描一下 nmap -A 192.168.102.147 -p-这个靶机有一个特点就是扫描到ip后&#xff0c;你需要往…

vulnhub靶机渗透:PWNLAB: INIT

PWNLAB: INIT 靶机环境介绍nmap扫描端口扫描服务扫描漏洞扫描扫描总结 80端口目录爆破LFI利用 3306端口回到80端口文件上传 获得立足点横向移动提权总结参考 靶机环境介绍 https://www.vulnhub.com/entry/skytower-1,96/ 靶机IP&#xff1a;192.168.56.103 kali IP&#xff…

OceanBase 特殊的 INT 与时间类型隐式转换问题

本文作者分享了Oceanbase时间与数值类型隐式转换导致查询结果不符合预期或“不正确”问题的排查思路。 作者&#xff1a;任仲禹 爱可生 DBA 团队成员&#xff0c;擅长故障分析和性能优化&#xff0c;文章相关技术问题&#xff0c;欢迎大家一起讨论。 本文来源&#xff1a;原创投…

create-react-app -V 报错无法将“create-react-app”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

create-react-app -Vcreate-react-app : 无法将“create-react-app”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果 包括路径,请确保路径正确,然后再试一次。 所在位置 行:1 字符: 1 + create-react-app -V + ~~~~~~~~~~~~~~~~+ CategoryInfo …

移动端 van-datetime-picker 组件不支持选择秒,自己写组件支持选择 “年月日时分秒”

需求 使用 van-datetime-picker 组件写时间选择时&#xff0c;不支持选择 “秒” 要求能够选择精确到秒 代码 封装组件 TimePicker <template><div><!-- 弹出层 --><van-popup get-container"body" v-model"isPicker" position&qu…

实时数仓-DWS层

理论依据&#xff1a;指标体系 如果表有相似&#xff0c;可以抽取成一张表 轻度聚合&#xff1a;比如聚合10秒的先放到DWS&#xff0c;这样ADS在计算的时候&#xff0c;会更快

计讯物联5G工业路由器加速赋能公交车监控系统解决方案智能升级

一、方案概述 为提升公交车智能化管理水平为目的&#xff0c;保障公交车营运人员和乘客的安全&#xff0c;计讯物联以公交车智能调度营运为核心&#xff0c;推出计讯物联5G公交车一站式解决方案&#xff0c;通过构建感知层、传输层、设备层、应用层四层架构&#xff0c;通过感…

将名为“普通高等学校本科专业目录.pdf”的pdf文件转换成csv文件

文章目录 任务描述2023年普通高等学校本科专业目录pdf链接代码代码解析运行截图 任务描述 将名为“普通高等学校本科专业目录.pdf”的pdf文件转换成csv文件。这个pdf每页是个表格&#xff0c;表格有7列。 下面是pdf的第一页和第二页&#xff1a; 2023年普通高等学校本科专业…