Spring-SpringBoot-SpringMVC-MyBatis常见面试题

文章目录

  • Spring篇
    • springbean是安全的的?
    • 什么是AOP
    • 你们工作中有用过AOP吗
    • spring中的事务是如何实现的
    • spring中事务失效场景
    • Spring的生命周期
    • spring中的循坏依赖
    • springMVC的执行流程
    • springboot的启动原理
    • 常用注解
    • MyBatis执行流程
    • Mybatis是否支持延迟加载?
    • Mybatis的一级、二级缓存用过吗?

Spring篇

springbean是安全的的?

不是线程安全的,他默认是单例的,如果有多个线程会并发执行该请求对应的逻辑,在处理过程中如果有对该单例状态修改,则需要考虑线程同步问题,

什么是AOP

他是面向编程的,用于与业务无关,可以抽取为公共模块,降低耦合,一般用于日志,事务

你们工作中有用过AOP吗

  • 主要是使用AOP来记录操作日志,主要思路的使用AOP的环绕通知和切点表达式

spring中的事务是如何实现的

  • 一种是编程式事务,另一只是声明式事务俩种方法
    • 第一种是TransactionTemplate来实现的,对代码有侵入性
    • 第二种是通过AOP在方法前进行拦截,执行完之后是提交还是回滚

spring中事务失效场景

  • 异常的捕获 -在catch块中添加throw new 异常(手动抛出运行时异常)
  • 抛出检查性异常 - 在Transaction属性中添加(Exception.class)
  • 不使用 public 方法

Spring的生命周期

在这里插入图片描述

  1. 通过BeanDefinition获取bean的定义信息
  2. 调用构造函数实例化bean
  3. bean的依赖注入
  4. 处理Aware接口(BeanNameAware、BeanFactoryAware、ApplicationContextAware)
  5. Bean的后置处理器BeanPostProcessor-前置
  6. 初始化方法(InitializingBean、init-method)
  7. Bean的后置处理器BeanPostProcessor-后置
  8. 销毁bean

spring中的循坏依赖

  • 循环依赖其实就是A引用了B,B又引用了A
  • 一级缓存放入的完整的Bean对,二级缓存Bean的生命周期还没有走完,三级缓存:缓存的是ObjectFactory,用来创建某个对象(工厂)
  • 解决方法
    • 先实例化A对象,同时会创建工程放入到三级缓存中,当A需要用到B的时候,B完成实例化完成时,放入到三级缓存中,B需要A的时候,通过三级缓存生产对象放入到二级缓存中,此时B创建成功后放入到一级缓存
    • 如果是构造方法出循环依赖时库使用懒在构造方法上添加@Lazy
      请添加图片描述

springMVC的执行流程

在这里插入图片描述

springboot的启动原理

在这里插入图片描述
在这里插入图片描述
@SpringBootConfiguration:该注解与 @Configuration 注解作用相同,用来声明当前也是一个配置类。
@ComponentScan:组件扫描,默认扫描当前引导类所在包及其子包。
@EnableAutoConfiguration:SpringBoot实现自动化配置的核心注解。
在这里插入图片描述
1, 在Spring Boot项目中的引导类上有一个注解@SpringBootApplication,这个注解是对三个注解进行了封装,分别是:
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
2, 其中@EnableAutoConfiguration是实现自动化配置的核心注解。 该注解通过@Import注解导入对应的配置选择器。
内部就是读取了该项目和该项目引用的Jar包的的classpath路径下META-INF/spring.factories文件中的所配置的类的全类名。 在这些配置类中所定义的Bean会根据条件注解所指定的条件来决定是否需要将其导入到Spring容器中。
3, 条件判断会有像@ConditionalOnClass这样的注解,判断是否有对应的class文件,如果有则加载该类,把这个配置类的所有的Bean放入spring容器中使用。

常用注解

在这里插入图片描述
在这里插入图片描述

MyBatis执行流程

在这里插入图片描述

Mybatis是否支持延迟加载?

  • 支持,默认是关闭状态
  • 原理
    • 使用cglib代理来实现的,他会进来拦截器invoke,如果是null时,执行sql,调用set方法.

Mybatis的一级、二级缓存用过吗?

  • 一级和二级缓存都是保存到本地,本质是一个hashmap,一级缓存的作用域是session级别的,二级缓存是namespace和mapper的作用域,不依赖于session(默认是打开一级缓存)
  • 开启二级缓存
    在这里插入图片描述

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

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

相关文章

数组(个人学习笔记黑马学习)

一维数组 1、定义方式 #include <iostream> using namespace std;int main() {//三种定义方式//1.int arr[5];arr[0] 10;arr[1] 20;arr[2] 30;arr[3] 40;arr[4] 50;//访问数据元素/*cout << arr[0] << endl;cout << arr[1] << endl;cout &l…

K8S如何部署Redis(单机、集群)

在今天的讨论中&#xff0c;我们将深入研究如何将Redis数据库迁移到云端&#xff0c;以便更好地利用云计算的优势提高数据管理的灵活性。 Redis(Remote Dictionary Server)是一个开源的、基于内存的数据结构存储系统&#xff0c;它可以用作数据库、缓存和消息代理。Redis支持多…

pinia——添加插件——基础积累

问题&#xff1a;是否给pinia添加过插件&#xff1f;具体添加的方式是什么&#xff1f; 在pinia中&#xff0c;我们可以为仓库添加插件&#xff0c;通过添加插件能够扩展以下的内容&#xff1a; 为 store 添加新的属性 定义 store 时增加新的选项 为 store 增加新的方法 包装现…

Sketch 98 中文版-mac矢量绘图设计

Sketch是一款专为Mac操作系统设计的矢量图形编辑软件&#xff0c;被广泛应用于UI/UX设计、网页设计、移动应用设计等领域。Sketch提供了各种工具和功能&#xff0c;包括绘图、图形设计、排版等&#xff0c;可以帮助设计师轻松地创建高质量的矢量图形和模型。Sketch的主要特点包…

防溺水智能预警系统解决方案 yolov7

防溺水智能预警系统解决方案采用yolov7先进的AI视觉识别算法模型框架&#xff0c;防溺水智能预警系统解决方案算法实现对危险水域人员活动、水面情况等各项指标的监测和分析。当发现有人进入危险水域或出现紧急情况时&#xff0c;算法会立即发出预警信号。Yolo算法采用一个单独…

数据结构初阶--排序

目录 一.排序的基本概念 1.1.什么是排序 1.2.排序算法的评价指标 1.3.排序的分类 二.插入排序 2.1.直接插入排序 2.2.希尔排序 三.选择排序 3.1.直接选择排序 3.2.堆排序 重建堆 建堆 排序 四.交换排序 4.1.冒泡排序 4.2.快速排序 快速排序的递归实现 法一&a…

Visual Studio 2022的MFC框架——AfxWinMain全局对象和InitInstance函数

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天我们来重新审视一下Visual Studio 2022下开发工具的MFC框架知识。 在看这篇帖子前&#xff0c;请先看我的另一篇帖子《Visual Studio 2022的MFC框架——应用程序向导》。 当程序调用了CWinApp类的构造…

Shell编程之运算符

目录 算数运算符 关系运算符 文件运算符 逻辑运算符 算数运算符 注意&#xff1a; 原生bash不支持简单的数学运算&#xff0c;但是可以通过其他命令来实现&#xff0c; 例如 expr 常用算数运算符 加-减*乘/除%取余 示例如下&#xff1a; A2 B3 expr $[$A$B] expr $[$A-$…

网工内推 | 技术支持工程师,最高40k,CCNP、CISP认证优先

01 卓望公司 招聘岗位&#xff1a;高级技术支持工程师 职责描述&#xff1a; 1、负责网络安全防护类产品技术支持工作&#xff0c;包括但不限于&#xff1a;抗DDoS&#xff0c;云WAF&#xff0c;漏洞扫描等。 2、负责网络安全防护类产品安装、配置、升级和系统加固等维护支撑工…

暴力递归转动态规划(二)

上一篇已经简单的介绍了暴力递归如何转动态规划&#xff0c;如果在暴力递归的过程中发现子过程中有重复解的情况&#xff0c;则证明这个暴力递归可以转化成动态规划。 这篇帖子会继续暴力递归转化动态规划的练习&#xff0c;这道题有点难度。 题目 给定一个整型数组arr[]&…

Git仓库简介

1、工作区、暂存区、仓库 工作区&#xff1a;电脑里能看到的目录。 暂存区&#xff1a;工作区有一个隐藏目录.git&#xff0c;是Git的版本库&#xff0c;Git的版本库里存了很多东西&#xff0c;其中最重要的就是称为stage&#xff08;或者叫index&#xff09;的暂存区&#xf…

leetcode 42. 接雨水

2023.8.29 本题可以用双指针做&#xff0c;求出每一列能盛的雨水&#xff0c;再相加即可。不过暴力法会超时&#xff0c;需要优化。 双指针&#xff08;暴力&#xff09;&#xff1a; class Solution { public:int trap(vector<int>& height) {int ans 0;for(int …