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

黑马Java面试笔记之框架篇(Spring、SpringMvc、Springboot)

一. 单例bean

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

         Spring框架中的bean是单例的,可以在注解@Scope()进行设置

 

  •  singleton:bean在每一个Spring IOC容器中只有一个实例。
  • prototype:一个bean的定义可以有多个实例

总结

二. AOP

        AOP称为面向切面编程,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。

        以下详细说明一下AOP的使用场景

2.1 记录操作日志

        当用户请求时,需要记录请求中的请求方式、访问地址等信息,

代码分析如下:

2.2 Spring中的事务是如何实现的

Spring支持编程式事务管理和声明式事务管理两种方式。

  • 编程式事务控制:需使用TransactionTemplate来进行实现,对业务代码有侵入性,项目中很少使用
  • 声明式事务管理:声明式事务管理建立在AOP之上的。其本质是通过AOP功能,对方法前后进行拦截,将事务处理的功能编织到拦截的方法中,也就是在目标方法开始之前加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。

         在业务逻辑之前开启事务,在业务逻辑执行之后提交事务,如果出现异常,则进行回滚,要在方法前面加上注解@Transactional

总结

三. 事务失效

有三种事务失效的场景

  • 异常捕获处理
  • 抛出检查异常
  • 非public方法

3.1 异常捕获处理

        事务通知只有捉到了目标抛出的异常,才能进行后续的回滚处理,如果目标自己处理掉异常,事务通知无法知悉

        解决方法是在catch块中添加throw new RuntimeException(e)抛出

3.2 抛出检查异常

原因是Spring默认只会回滚非检查异常

解决方法是配置rollbackFor属性@Transactional(rollbackFor=Exception.class)

3.3 非public方法导致的事务失效

总结

Spring中事务失效的场景有以下几种:

1.异常捕获处理,自己处理了异常,没有抛出,解决方法是手动抛出

2.抛出检查异常,配置rollbackFor属性为Exception

3.非public方法导致的事务失效,改为public

四. Spring的bean的生命周期

4.1 BeanDefinition

        Spring容器在进行实例化时,会将xml配置的<bean>的信息封装成一个BeanDefinition对象,Spring根据BeanDefinition来创建Bean对象,里面有很多的属性用来描述Bean

总结

五. Spring循环引用

循环引用可能出现死循环现象

5.1 三级缓存解决循环依赖

一级缓存作用:限制bean在beanFactory中只存一份,即实现singleton scope,解决不了循环依赖

二级缓存

三级缓存

5.2 构造方法出现了循环依赖怎么解决

总结

六. SpringMvc执行流程

SpringMvc的执行流程是这个框架最核心的内容

  • 视图阶段(老旧JSP等)
  • 前后端分离阶段(接口开发、异步)

6.1 视图阶段(JSP)

 

 6.2 前后端分离阶段(接口开发、异步)

 总结

 

 七. SpringBoot自动配置原理

  • @SpringBootConfiguration:该注解与@Configuration注解作用相同,用来声明当前也是一个配置类
  • @ComponentScan:组件扫描,默认扫描当前引导类所在包及其子包
  • @EnableAutoConfiguration:SpringBoot实现自动化配置的核心注解。

@EnableAutoConfiguration注解分析如下

 总结

 

 八. Spring框架常见注解(Spring、SpringBoot、SpringMvc)

8.1 Spring的常见注解

Spring的常见注解有哪些?

回答参照下表:

8.2 SpringBoot的常见注解

SpringBoot的常见注解有哪些?

回答参照下表:

8.3 SpringMvc的常见注解

SpringMvc的常见注解有哪些?

回答参照下表:

八. Mybatis执行流程

Mybatis执行流程

首先要定义核心配置文件mybatis-config.xml,作用一是加载环境配置,二是加载映射文件

操作数据库

总结

Mybatis执行流程是?

九. Mybatis延迟加载

Mybatis是否支持延迟加载?

9.1 什么是延迟加载

9.1 延迟加载的原理

  1. 使用CGLIB创建目标对象的代理对象
  2. 当调用目标方法user.getOrderList()时,进入拦截器invoke方法,发下user.getOrderList()是null值,执行sql查询order列表
  3. 把order查询上来,然后调用user.setOrderList(List<Order> orderList),接着完成user.getOrderList()方法的调用

总结

十. Mybatis一级二级缓存

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

10.1 一级缓存

        基于PerpetualCache的HashMap本地缓存,其存储作用域为Session,当Session进行flush或close之后,该Session中的所有Cache就将清空,默认打开一级缓存

10.2 二级缓存

        基于namespace和mapper的作用域起作用的,不是依赖于SQL session,默认也是采用PerpetualCache,HashMap存储

二级缓存默认是关闭的

开启方式,两步走:

1. 全局配置文件

2.映射文件

使用<cache/>标签让当前mapper生效二级缓存

 注意事项:

总结

相关文章:

黑马Java面试笔记之框架篇(Spring、SpringMvc、Springboot)

一. 单例bean Spring框架中的单例bean是线程安全的吗&#xff1f; Spring框架中的bean是单例的&#xff0c;可以在注解Scope()进行设置 singleton&#xff1a;bean在每一个Spring IOC容器中只有一个实例。prototype&#xff1a;一个bean的定义可以有多个实例 总结 二. AOP AOP称…...

全球IP归属地查询接口如何用C#进行调用?

一、什么是全球IP归属地查询接口 在全球化互联网时代&#xff0c;IP地址作为网络世界的地理位置标识&#xff0c;扮演着至关重要的角色。全球IP归属地查询接口通过解析IP地址&#xff0c;提供包括国家、省、市、区县和运营商在内的详细信息。 二、应用场景 1. 访问识别 全球…...

NumPy 比较、掩码与布尔逻辑

文章目录 比较、掩码与布尔逻辑示例&#xff1a;统计下雨天数作为通用函数&#xff08;Ufuncs&#xff09;的比较运算符使用布尔数组计数条目布尔运算符 布尔数组作为掩码使用关键字 and/or 与运算符 &/| 的区别 比较、掩码与布尔逻辑 本文介绍如何使用布尔掩码来检查和操…...

力扣HOT100之二分查找:35. 搜索插入位置

这道题属于是二分查找的入门题了&#xff0c;我依稀记得一些二分查找的编码要点&#xff0c;但是最后还是写出了一个死循环&#xff0c;无语(ˉ▽ˉ&#xff1b;)…又回去看了下自己当时的博客和卡哥的视频&#xff0c;这才发现自己分情况只分了两种&#xff0c;最后导致死循环…...

使用API有效率地管理Dynadot域名,查看域名市场中所售域名的详细信息

关于Dynadot Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮…...

IM即时通讯软件,构建企业局域网内安全协作

安全与权限&#xff1a;协同办公的企业级保障 在协同办公场景中&#xff0c;BeeWorks 将安全机制贯穿全流程。文件在局域网内传输与存储时均采用加密处理&#xff0c;企业网盘支持水印预览、离线文档权限回收等功能&#xff0c;防止敏感资料外泄&#xff1b;多人在线编辑文档时…...

VueScan:全能扫描,高清输出

在数字化办公和图像处理的领域&#xff0c;扫描仪扮演着不可或缺的角色。无论是文档的数字化存档、照片的高清复制&#xff0c;还是创意项目的素材采集&#xff0c;一款性能卓越、操作便捷的扫描软件能大幅提升工作效率和成果质量。VueScan正是这样一款集多功能于一身的扫描仪软…...

PyCharm项目和文件运行时使用conda环境的教程

打开【文件】—【新建项目】 按照下图配置环境 可以看到我这个项目里&#xff0c;报错“No module named modelscope” 点击终端&#xff0c;输入命令 #显示所有的conda环境 conda env list #选择需要激活的conda环境 conda activate XXX在终端中&#xff0c;执行pip install …...

第八部分:第五节 - 生命周期与副作用 (`useEffect` Hook):组件的幕后工作

知识点&#xff1a; 组件生命周期&#xff08;挂载 Mounting, 更新 Updating, 卸载 Unmounting - 高级概念&#xff09;&#xff0c;副作用 (Side Effects)&#xff0c;useEffect Hook (用于处理副作用&#xff0c;如数据获取、订阅、DOM 操作)&#xff0c;useEffect 的依赖数组…...

docker 搭建php 开发环境 添加扩展redis、swoole、xdebug(2)

3、创建compose 的yml文件 version: "3.9" services:#配置nginxnginx:#镜像名称 nginx:latestimage: nginx#自定义容器的名称#container_name: c_nginxports:- "80:80"#lnmp目录和容器的/usr/share/nginx/html目录进行绑定,设置rw权限#将宿主机的~/lnmp/…...

DeepSwiftSeek 开源软件 |用于 DeepSeek LLM 模型的 Swift 客户端 |轻量级和高效的 DeepSeek 核心功能通信

​一、软件介绍 文末提供程序和源码下载 DeepSeek Swift SDK 是一个轻量级且高效的基于 Swift 的客户端&#xff0c;用于与 DeepSeek API 进行交互。它支持聊天消息完成、流式处理、错误处理以及使用高级参数配置 DeepSeekLLM。 二、Features 特征 Supports chat completion …...

Flask-Login使用示例

项目结构 首先创建以下文件结构&#xff1a; flask_login_use/ ├── app.py ├── models.py ├── requirements.txt └── templates/├── base.html├── index.html├── login.html├── register.html└── profile.html1. requirements.txt Flask2.3.3 Fl…...

React Hooks 基础指南

React Hooks 是 React 16.8 引入的重要特性&#xff0c;它允许开发者在函数组件中使用状态和其他 React 特性。本文将详细介绍 6 个最常用的 React Hooks。 1. useState useState 是最常用的 Hook&#xff0c;用于在函数组件中添加 state。 import React, { useState } from…...

web第九次课后作业--SpringBoot基于mybatis实现对数据库的操作

前言 在前面我们学习MySQL数据库时&#xff0c;都是利用图形化客户端工具(如&#xff1a;idea、datagrip)&#xff0c;来操作数据库的。 在客户端工具中&#xff0c;编写增删改查的SQL语句&#xff0c;发给MySQL数据库管理系统&#xff0c;由数据库管理系统执行SQL语句并返回执…...

沪铜6月想法

市场回顾 2025年5月&#xff0c;沪铜期货主力合约价格整体呈现震荡走势。从月初到月末&#xff0c;价格在7.67-7.82万元/吨之间波动。截至5月31日&#xff0c;沪铜主力合约收盘价为7.76万元/吨。本月铜价围绕供需基本面和宏观政策预期展开波动&#xff0c;尤其在5月14日至5月1…...

网络通信核心概念全解析:从IP地址到TCP/UDP实战

一、网络基础架构三要素 1. IP地址&#xff1a;互联网的“门牌号” 本质&#xff1a;32位整数标识主机位置&#xff08;IPv4&#xff09;表示法&#xff1a;点分十进制&#xff08;如 192.168.1.1&#xff09;功能&#xff1a;全球唯一标识网络设备特殊地址&#xff1a; 127.…...

Spring 中的disposableBean介绍

在 Spring 框架中&#xff0c;DisposableBean 是一个接口&#xff0c;用于定义 Bean 在被销毁前需要执行的清理逻辑。它是 Spring 容器生命周期回调机制的一部分。 &#x1f331; 什么是 DisposableBean DisposableBean 接口是 Spring 提供的一个标准接口&#xff0c;用于通知…...

【Linux命令学习】获取cpu信息 - lscpu命令学习

lscpu命令显示的是服务器cpu架构相关信息&#xff0c;lscpu从伪文件系统(sysfs)、/proc/cpuinfo和任何可用的特定体系架构库中收集cpu架构信息。输出内容包括&#xff1a;CPU、线程、内核的数量以及非同一存储器存取节点。此外还包括关于CPU高速缓存和高速缓存共享的信息&#…...

wordpress免费主题网站

这是一款WordPress主题&#xff0c;由jianzhanpress开发&#xff0c;可以免费下载。专为中小微企业设计&#xff0c;提供专业的网站建设、网站运营维护、网站托管和网站优化等服务。主题设计简约、现代&#xff0c;适合多种行业需求。 主要特点&#xff1a; 多样化展示&#…...

Go中的协程并发和并发panic处理

1 协程基础 1.1 协程定义&#xff08;Goroutine&#xff09; 概念&#xff1a;Go 语言特有的轻量级线程&#xff0c;由 Go 运行时&#xff08;runtime&#xff09;管理&#xff0c;相比系统线程&#xff08;Thread&#xff09;&#xff0c;创建和销毁成本极低&#xff0c;占用…...

Qt Creator工具编译器配置

1、打开Qt Creator&#xff0c;工具-->选项 2、选择"编译器"&#xff0c;Manual配置编译器。 初始化填入“C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\cl.exe”&#xff0c;选择64位amd64。 ABI根据msvc版本进行选择msvc2015. 3、新建项目…...

从零开始的数据结构教程(六) 贪心算法

&#x1f36c; 标题一&#xff1a;贪心核心思想——发糖果时的最优分配策略 贪心算法 (Greedy Algorithm) 是一种简单直观的算法策略。它在每一步选择中都采取在当前状态下最好或最优&#xff08;即最有利&#xff09;的选择&#xff0c;从而希望得到一个全局最优解。这就像你…...

Spring框架学习day7--SpringWeb学习(概念与搭建配置)

SpringWeb1.SpringWeb特点2.SpringWeb运行流程3.SpringWeb组件4.搭建项目结构图&#xff1a;4.1导入jar包4.2在Web.xml配置**4.2.1配置统一拦截分发器 DispatcherServlet**4.2.2开启SpringWeb注解&#xff08;spring.xml&#xff09; 5.处理类的搭建6.SpringWeb请求流程(自己理…...

打造高效多模态RAG系统:原理与评测方法详解

引言 随着信息检索与生成式AI的深度融合&#xff0c;检索增强生成&#xff08;RAG, Retrieval-Augmented Generation&#xff09; 已成为AI领域的重要技术方向。传统RAG系统主要依赖文本数据&#xff0c;但真实世界中的信息往往包含图像、表格等多模态内容。多模态RAG&#xf…...

SSM 框架核心知识详解(Spring + SpringMVC + MyBatis)

&#x1f331; 第一部分&#xff1a;Spring 核心原理与使用 1. 什么是 Spring Spring 是一个开源的 Java 企业级开发框架&#xff0c;旨在简化 Java 企业应用程序开发。它核心思想是控制反转&#xff08;IoC&#xff09;和面向切面编程&#xff08;AOP&#xff09;&#xff0…...

1.2 fetch详解

浏览器 Fetch API 详解 Fetch API 是现代浏览器提供的用于发起网络请求的接口&#xff0c;它基于 Promise 实现&#xff0c;替代了传统的 XMLHttpRequest&#xff0c;提供了更强大、更灵活的功能。 1. 基本用法 使用 fetch() 函数发起请求&#xff0c;返回一个 Promise&…...

【C#】Quartz.NET怎么动态调用方法,并且根据指定时间周期执行,动态配置类何方法以及Cron表达式,有请DeepSeek

&#x1f339;欢迎来到《小5讲堂》&#x1f339; &#x1f339;这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。&#x1f339; &#x1f339;温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01;&#…...

02 Deep learning神经网络的编程基础 逻辑回归--吴恩达

逻辑回归 逻辑回归是一种用于解决二分类任务&#xff08;如预测是否是猫咪等&#xff09;的统计学习方法。尽管名称中包含“回归”&#xff0c;但其本质是通过线性回归的变体输出概率值&#xff0c;并使用Sigmoid函数将线性结果映射到[0,1]区间。 以猫咪预测为例 假设单个样…...

Android Native 内存泄漏检测全解析:从原理到工具的深度实践

引言 Android应用的内存泄漏不仅发生在Java/Kotlin层&#xff0c;Native&#xff08;C/C&#xff09;层的泄漏同样普遍且隐蔽。由于Native内存不受Java虚拟机&#xff08;JVM&#xff09;管理&#xff0c;泄漏的内存无法通过GC自动回收&#xff0c;长期积累会导致应用内存占用…...

React---扩展补充

一些额外的扩展 4.3 高阶组件 高阶组件是参数为组件&#xff0c;返回值为新组件的函数&#xff1b; 高阶组件 本身不是一个组件&#xff0c;而是一个函数&#xff1b;其次&#xff0c;这个函数的参数是一个组件&#xff0c;返回值也是一个组件&#xff1b; import React fr…...