框架篇八股(自用)

框架篇

Spring框架中的bean不是线程安全的

@Scope()

singleton单例

prototype多例

一个类中有可修改的成员变量需要考虑线程安全

bean没有可变状态(service类,DAO类)

某种程度单例bean是线程安全的

AOP面向切面编程,抽取公共行为和逻辑,封装成可重用的模块(切面)

记录操作日志

缓存处理

Spring中内置的事务处理

常用环绕通知

@Around(切面类)

Spring

编程式事务控制:TransactionTemplate 对业务代码侵入 不常用

声明式事务管理:@Transaction

本质通过AOP对方法前后进行拦截

在方法开始前加入一个事务

在执行完目标方法之后根据执行情况提交或者回滚事务

事务失效的场景

异常捕获处理

try catch

目标自己处理掉异常,事务通知无法获悉

在catch块中添加RuntimeException抛出

抛出检查异常

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

在注解里面配置rollbackFor属性

非public方法

事务通知前提是方法是public

bean的生命周期

BeanDefinition

Spring容器进行实例化,xml配置的<bean>的信息封装成BeanDefinition对象

1.构造函数:实例化Bean

Bean的创建和初始化赋值是分开的

2.依赖注入

3.Aware接口

4.Bean前置处理器

5.初始化方法:InitializingBean 自定义init方法

6.Bean后置处理器 AOP 动态代理

7.销毁Bean

三级缓存解决Spring中的循环引用(依赖注入出问题)

一级缓存:单例池,初始化完成的bean

二级缓存:缓存早期的bean对象(生命周期没有走完)

三级缓存:对象工厂,用来创建对象(代理对象)

spring框架依据三级缓存已经解决了大部分的循环依赖

构造方法循环依赖问题

在注入的参数前加@lazy注解

SpringMVC执行流程

视图阶段(老旧JSP)

1.请求到前端控制器

2.前端控制器调用处理器映射器

3.处理器映射器找到具体处理器,生成处理器对象以及处理器拦截器,返回给前端控制器

4.处理器前端控制器调用处理器适配器

5.处理器适配器适配到具体处理器

6.controller执行完返回ModeAndView给处理器适配器

7.处理器适配器将ModeAndView返回给前端控制器

8.前端控制器将ModeAndView传给视图解析器

9.视图解析器解析后返回具体的视图

10.前端控制器根据视图进行渲染

11.响应用户

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

1.请求到前端控制器

2.前端控制器调用处理器映射器

3.处理器映射器找到具体处理器,生成处理器对象以及处理器拦截器,返回给前端控制器

4.处理器前端控制器调用处理器适配器

5.处理器适配器适配到具体处理器

6.方法添加@ResponseBody

7.通过HttpMessageConverter返回结果转换为JSON并响应

Springboot自动配置原理

@SpringBootApplication包含三个注解

@SpringBootConfiguration 与@Configuration注解作用相同,配置类

@ComponentScan 组件扫描 默认引导类所在包及其子包

@EnableAutoConfiguration 实现自动化配置的核心注解

该注解通过@import注解导入对应的配置选择器

读取该项目和该项目引用的jar包的classpath路径下

META-INF/spring.factories文件中所配置的全类名

根据条件注解所指定的条件决定是否导入Spring容器中

@ConditionalOnClass 判断是否有对应的class文件

Mybatis执行流程

1.读取配置文件

2.创建会话工厂SqlSessionFactory

3.会话工厂创建SqlSession对象(包含执行sql语句的所有方法)

4.操作数据库的接口,Executor执行器,同时负责查询缓存的维护

5.Executor接口执行方法中有一个MappedStatement类型的参数,封装了映射信息

6.输入参数映射

7.输出结果映射

Mybatis支持延时加载,默认没有开启

原理:

1.使用CGLIB创建目标对象的代理对象

2.调用目标方法时,进入拦截器invoke方法,发现目标方法为null值,执行sql查询

3.获取数据后,调用set方法设置属性值,再继续查询目标方法,就有值

本地缓存:本质是一个HashMap

一级缓存:作用域是session级别

二级缓存:作用域是namespace和mapper的作用域,不依赖session

一级缓存:HashMap本地存储,Session进行flush或close,Session中所有的Cache清空

默认打开一级缓存

二级缓存:HashMap存储,不依赖于SQL session 默认关闭二级缓存

全局配置文件

映射文件<cache/>

1.数据更新机制:某一个作用域(一级缓存Session/二级缓存Namespace)进行新增、

修改、删除操作后,默认该作用域下的所有select中的缓存被clear

2.二级缓存需要缓存的数据实现Serializable

3.只有会话提交或者关闭之后,一级缓存中的数据才会转移到二级缓存中

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

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

相关文章

Go语言安装proto并且使用gRPC服务(2025最新WINDOWS系统)

1.protobuf简介 protobuf 即 Protocol Buffers&#xff0c;是一种轻便高效的结构化数据存储格式&#xff0c;与语言、平台无关&#xff0c;可扩展可序列化。protobuf 性能和效率大幅度优于 JSON、XML 等其他的结构化数据格式。protobuf 是以二进制方式存储的&#xff0c;占用空…

rust-candle学习笔记11-实现一个简单的自注意力

参考&#xff1a;about-pytorch 定义ScaledDotProductAttention结构体&#xff1a; use candle_core::{Result, Device, Tensor}; use candle_nn::{Linear, Module, linear_no_bias, VarMap, VarBuilder, ops};struct ScaledDotProductAttention {wq: Linear,wk: Linear,wv: …

spark MySQL数据库配置

Spark 连接 MySQL 数据库的配置 要让 Spark 与 MySQL 数据库实现连接&#xff0c;需要进行以下配置步骤。下面为你提供详细的操作指南和示例代码&#xff1a; 1. 添加 MySQL JDBC 驱动依赖 你得把 MySQL 的 JDBC 驱动添加到 Spark 的类路径中。可以通过以下两种方式来完成&a…

web 自动化之 KDT 关键字驱动详解

一、什么是关键字驱动&#xff1f; 1、什么是关键字驱动&#xff1f;&#xff08;以关键字函数驱动测试&#xff09; 关键字驱动又叫动作字驱动&#xff0c;把项目业务封装成关键字函数&#xff0c;再基于关键字函数实现自动化测试 2、关键字驱动测试原理 关键字驱动测试是一…

Java使用POI+反射灵活的控制字段导出Excel

前端传入哪些字段&#xff0c;后端就导出哪些到Excel表格中&#xff0c;具体代码实现如下 controller /*** 用户导出* param dto*/PostMapping("/exportUser")public void exportCharterOrder(RequestBody UserExportDTO dto){userService.exportUser(dto);} serv…

Qt/C++面试【速通笔记八】—Qt的事件处理机制

在Qt中&#xff0c;事件处理机制是应用程序与用户或系统交互的核心。通过事件处理&#xff0c;Qt能够响应用户的输入、窗口的变化、定时器的触发等各种情况。 1. 事件循环&#xff08;Event Loop&#xff09; 在Qt应用程序中&#xff0c;事件循环是事件处理机制的基础。事件循…

TTL (Time-To-Live) 解析

文章目录 TTL (Time-To-Live) 解析&#xff1a;网络与Java中的应用一、TTL的定义二、TTL在网络中的应用1. **路由和数据包的生命周期**2. **DNS中的TTL**3. **防止环路** 三、TTL在Java中的应用1. **缓存管理**2. **Java中的ThreadLocal**3. **网络通信中的TTL** 四、TTL的注意…

HDFS的客户端操作(2)文件上传

我们向/maven下上传一个文件。 要用到的api是put (或者copyFormLocalFile&#xff09;。核心代码如下。 public void testCopyFromLocalFile() throws IOException, InterruptedException, URISyntaxException {// 1 获取文件系统Configuration configuration new Configurati…

光谱相机的光电信号转换

光谱相机的光电信号转换是将分光后的光学信息转化为可处理的数字信号的核心环节&#xff0c;具体分为以下关键步骤&#xff1a; 一、分光后光信号接收与光电转换 ‌分光元件作用‌ 光栅/棱镜/滤光片等分光元件将入射光分解为不同波长单色光&#xff0c;投射至探测器阵列表面…

网络协议分析 实验二 IP分片与IPv6

文章目录 索引及重要内容实验2 IP 高级实验实验2.1 IPv4协议分片实验实验2.2 IPV6协议实验2.3 ARP初级 索引及重要内容 实验2 IP 高级实验 实验2.1 IPv4协议分片实验 icmp的不可达报文 实验2.2 IPV6协议 实验2.3 ARP初级 arp –a 查看ARP缓存表内容 arp –s IP地址(格式&…

20、map和set、unordered_map、un_ordered_set的复现

一、map 1、了解 map的使用和常考面试题等等&#xff0c;看这篇文章 map的key是有序的 &#xff0c;值不可重复 。插入使用 insert的效率更高&#xff0c;而在"更新map的键值对时&#xff0c;使用 [ ]运算符效率更高 。" 注意 map 的lower和upper那2个函数&#x…

基于 Amazon Bedrock 和 Amazon Connect 打造智能客服自助服务 – 设计篇

随着 GenAI 技术不断的发展和演进&#xff0c;人工智能技术广泛地被应用在呼叫中心服务领域&#xff0c;主要包括虚拟坐席&#xff08;即自助服务&#xff09;、坐席助手和呼叫中心运营的数据洞察和智能分析。本博客主要针对自助服务应用场景的实现。 1. 传统自助服务系统瓶颈 …

java高效实现爬虫

一、前言 在Web爬虫技术中&#xff0c;Selenium作为一款强大的浏览器自动化工具&#xff0c;能够模拟真实用户操作&#xff0c;有效应对JavaScript渲染、Ajax加载等复杂场景。而集成代理服务则能够解决IP限制、地域访问限制等问题。本文将详细介绍如何利用JavaSelenium快代理实…

【计算机视觉】OpenCV实战项目:基于OpenCV的车牌识别系统深度解析

基于OpenCV的车牌识别系统深度解析 1. 项目概述2. 技术原理与算法设计2.1 图像预处理1) 自适应光照补偿2) 边缘增强 2.2 车牌定位1) 颜色空间筛选2) 形态学操作3) 轮廓分析 2.3 字符分割1) 投影分析2) 连通域筛选 2.4 字符识别 3. 实战部署指南3.1 环境配置3.2 项目代码解析 4.…

Python核心数据类型全解析:字符串、列表、元组、字典与集合

导读&#xff1a; Python 是一门功能强大且灵活的编程语言&#xff0c;而其核心数据类型是构建高效程序的基础。本文深入剖析了 Python 的五大核心数据类型——字符串、列表、元组、字典和集合&#xff0c;结合实际应用场景与最佳实践&#xff0c;帮助读者全面掌握这些数据类型…

GPT-4.1和GPT-4.1-mini系列模型支持微调功能,助力企业级智能应用深度契合业务需求

微软继不久前发布GPT-4.1系列模型后&#xff0c;Azure OpenAI服务&#xff08;国际版&#xff09;现已正式开放对GPT-4.1和GPT-4.1-mini的微调功能&#xff0c;并通过Azure AI Foundry&#xff08;国际版&#xff09;提供完整的部署和管理解决方案。这一重大升级标志着企业级AI…

构造+简单树状

昨日的牛客周赛算是比较简单的&#xff0c;其中最后一道构造题目属实眼前一亮。 倒数第二个题目也是一个很好的模拟题目&#xff08;考验对二叉树的理解和代码的细节&#xff09; 给定每一层的节点个数&#xff0c;自己拟定一个父亲节点&#xff0c;构造一个满足条件的二叉树。…

apache2的默认html修改

使用127.0.0.1的时候&#xff0c;默认打开的是index.html&#xff0c;可以通过配置文件修改成我们想要的html vi /etc/apache2/mods-enabled/dir.conf <IfModule mod_dir.c>DirectoryIndex WS.html index.html index.cgi index.pl index.php index.xhtml index.htm <…

mysql性能提升方法大汇总

前言 最近在开发自己的小程序的时候&#xff0c;由于业务功能对系统性能的要求很高&#xff0c;系统性能损耗又主要在mysql上&#xff0c;而业务功能的数据表很多&#xff0c;单表数据量也很大&#xff0c;又涉及到很多场景的数据查询&#xff0c;所以我针对mysql调用做了优化…

多模态RAG与LlamaIndex——1.deepresearch调研

摘要 关键点&#xff1a; 多模态RAG技术通过结合文本、图像、表格和视频等多种数据类型&#xff0c;扩展了传统RAG&#xff08;检索增强生成&#xff09;的功能。LlamaIndex是一个开源框架&#xff0c;支持多模态RAG&#xff0c;提供处理文本和图像的模型、嵌入和索引功能。研…