java框架八股

  1. spring框架中单例bean是线程安全的吗
    不是线程安全的,spring框架并没有对单例bean进行任何多线程的封装处理。通常在项目中使用的spring bean都是不可变的状态。如果bean有多种状态的话,就需要自行保证线程安全。

  2. 什么是AOP?
    aop是面向切面编程,在spring中用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取公共模块复用,降低耦合,一般比如可以作为公共日志保存,事务处理。
    可以使用aop中的环绕通知+切点表达式,这个表达式就是要找到记录日志的方法,然后通过环绕通知的参数获取请求方法的参数,比如类信息、方法信息、注解等,获取到这些信息后保存到数据库。

  3. spring中的事务是如何实现的
    spring实现的事务本质就是aop,对方法前后进行拦截,在执行方法之前开启事务,在执行方法之后根据执行情况提交或者回滚事务。

  4. spring中事务失效的场景有哪些?
    1如果方法上异常捕获处理,自己处理了异常,没有抛出,就会导致事务失败
    2如果方法抛出检查异常,如果报错也会导致事务失败,可以在@Transactional上配置rollbackFor属性为Exception,这样就会回滚事务。
    3如果方法上不是public修饰的,也会导致事务失效。

  5. spring中bean的生命周期
    1首先通过一个非常重要的类,叫做BeanDefinition获取bean的定义信息。包括类的全路径、是否延迟加载、是否是单列。
    2创建bean的时候,第一步是调用构造函数实例化bean,第二步是bean的依赖注入,比如一些set方法注入,都是用@Autowire完成的
    3第三步是处理Aware接口,如果某个bean实现了Aware接口就会重写方法执行
    4第四步是bean的后置处理器BeanPostProcessor,这个是前置处理器
    5第五步是初始化方法,比如实现接口的方法或者自定义了方法
    6第六步是执行bean的后置处理器BeanPostProcessor,主要是对bean进行增强,有可能在这里产生代理对象。
    7最后一步是销毁bean

  6. spring中bean的循环引用?
    循环依赖:循环依赖其实是循环引用,也就是两个或者两个以上的bean互相持有对方,最终形成闭环。比如A依赖B,B依赖于A。
    循环以来在spring中是允许的,spring框架的三级缓存解决了大部分的循环依赖
    一级缓存:单例池,缓存已经经历了完整的生命周期,已经初始化完成的bean对象
    二级缓存:缓存早期的bean对象(生命周期还没走完)
    三级缓存:缓存的是ObjectFactory,表示对象工厂,用来创建某个对象。
    具体流程如下:
    第一,先实例A对象,同时会创建ObjectFactory对象进入三级缓存
    第二,A在初始化的时候需要B对象,这个走B的创建逻辑
    第三,B实例化完成,也会创建ObjectFactory对象进入三级缓存
    第四,B需要注入A,通过三级缓存中获取ObjectFactory来生成一个A的对象同时存入二级缓存中,这个是有两种情况:一个是可能是A的普通对象,另外一个是A的代理对象,都可以让ObjectFactory来生产对应的对象
    第五,B通过从二级缓存获得到A的对象后可以正常注入,B创建成功,存入一级缓存
    第六,回到A对象初始化,B已经完成了创建,则可以直接注入B,A创建成功存入一级缓存。
    第七,二级缓存中的临时对象A清除。

  7. 构造方法中出现了循环依赖怎么解决?
    由于bean的生命周期中构造函数是第一个执行的,spring框架并不能解决构造函数的依赖注入,可以使用@lazy懒加载,什么时候需要对象再进行bean的创建。

  8. spring MVC执行流程?
    1用户发送请求到前端控制器,这是一个调度中心
    2前端控制器收到请求调用处理器映射器
    3处理器映射器找到具体的处理器,生成处理器对象以及处理器拦截器,再一起返回给前端控制器
    4前端控制器调用处理器适配器
    5处理器适配器经过适配调用具体的处理器
    6处理器执行完成后返回ModelAndView对象
    7处理器适配器将处理器执行结果返回给前端控制器
    8前端控制器将ModelAndView传给视图解析器
    9视图解析器解析后返回具体的视图
    10前端控制器根据视图进行渲染视图
    11前端控制器响应用户
    现在的开发都是前后端分离,没有视图这些,一般都是处理器中使用response直接将结果返回。

  9. spring自动配置原理
    springboot项目中引导类上有一个注解,@springbootapplication,它对三个注解进行了封装,其中包括@springbootconfiguration、@enableautoconfiguration、@componentscan。其中@enableautoconfiguration是实现自动装配的核心注解。
    该注解通过@import注解导入对应的配置选择器,关键是内部就读取了该项目和该项目引用的jar包的spring.factories文件中所配置的类的全类名。
    在这些配置类中所定义的bean会根据条件注解所指定的条件决定是否导入到spring容器中。

  10. mybatis执行流程?
    1读取mybatis配置文件:mybatis-config.xml加载运行环境和映射文件
    2构造会话工厂,一个项目只需要一个,单例的。
    3会话工厂创建sqlsession对象,这里面包含了执行sql语句的所有方法
    4操作数据库的接口,executor执行器,同时负责查询缓存的维护
    5executor接口的执行方法中有一个mappedstatement类型的参数,封装了映射信息
    6输入参数映射
    7输出参数映射

  11. mybatis是否支持延迟加载?
    支持,延迟加载是在需要用到数据的时候才进行加载,不需要用的时候不加载数据
    mybatis支持一对一关联对象和一对多关联集合对象的延迟加载
    默认是关闭状态

  12. 延迟加载底层原理?
    1使用CGLIB创建目标对象的代理对象,这里的目标对象就开启了延迟加载的mapper
    2当调用方法的时候,进入拦截器invoke方法,发现目标方法是null值,再执行sql查询。
    3获取数据以后,调用set方法设置属性值,再继续查询目标方法,就有值了。

  13. mybatis一级二级缓存
    mybatis的一级缓存:基于perpetualcache的hashmap本地缓存,其存储作用域为session,当session进行fulsh或close之后,该session中的所有cache就将清空,默认打开一级缓存
    关于二级缓存需要单独开启
    二级缓存是基于namesapce和mapper的作用域起作用,不是依赖于sqlsession。
    如果想要开启二级缓存需要在配置文件和映射文件中开启配置才行。

  14. mybatis的二级缓存什么时候会清理缓存中的数据?
    当某一个作用域(一级缓存session\二级缓存namespaces)的进行了新增、修改、删除操作后,默认该作用域下所有select中的缓存将被清理。

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

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

相关文章

web坦克大战小游戏

H5小游戏源码、JS开发网页小游戏开源源码大合集。无需运行环境,解压后浏览器直接打开。有需要的订阅后,私信本人,发源码,含60+小游戏源码。如五子棋、象棋、植物大战僵尸、贪吃蛇、飞机大战、坦克大战、开心消消乐、扑鱼达人、扫雷、打地鼠、斗地主等等。 <!DOCTYPE htm…

【图论】Dijkstra 算法求最短路 - 构建邻接矩阵(带权无向图)

文章目录 例题&#xff1a;到达目的地的方案数题目描述代码与解题思路构建带权无向图的邻接矩阵 例题&#xff1a;到达目的地的方案数 题目链接&#xff1a;1976. 到达目的地的方案数 题目描述 代码与解题思路 func countPaths(n int, roads [][]int) int {g : make([][]int…

数据库和缓存如何保持一致性

目录 前言 更新数据库更新缓存&#xff1a; 1.在更新缓存前先加一个分布式锁 2.在更新完缓存时&#xff0c;给缓存加上较短的过期时间 Cache Aside策略 1.先删除缓存&#xff0c;再更新数据库 延迟双删 2.先更新数据库&#xff0c;再删除缓存 保证两个操作都能执行成功…

【译】WordPress Bricks主题安全漏洞曝光,25,000个安装受影响

WordPress的Bricks主题存在一个严重的安全漏洞,恶意威胁行为者正在积极利用该漏洞在易受攻击的安装上运行任意PHP代码。 该漏洞被跟踪为CVE-2024-25600(CVSS评分:9.8),使未经身份验证的攻击者能够实现远程代码执行。它影响Bricks的所有版本,包括1.9.6版本及更早版本。 该…

C++三级专项 流感传染

时间限制&#xff1a;1000 内存限制&#xff1a;65536 有一批易感人群住在网格状的宿舍区内&#xff0c;宿舍区为n*n的矩阵&#xff0c;每个格点为一个房间&#xff0c;房间里可能住人&#xff0c;也可能空着。在第一天&#xff0c;有些房间里的人得了流感&#xff0c;以后每…

线程变量ThreadLocal用于解决多线程并发时访问共享变量的问题。

ThreadLocal介绍 ThreadLocal叫做线程变量&#xff0c;用于解决多线程并发时访问共享变量的问题。意思是ThreadLocal中填充的变量属于当前线程&#xff0c;该变量对其他线程而言是隔离的&#xff0c;也就是说该变量是当前线程独有的变量。ThreadLocal为变量在每个线程中都创建…

如何用生成式人工智能准备和制作吸引人的美食视频?

YouTube是一个全球性的视频分享平台&#xff0c;上面充满了各式各样的内容&#xff0c;其中美食内容因其视觉和味觉上的双重吸引而备受欢迎。作为一个想要进入这个领域的创作者&#xff0c;你需要知道如何准备和制作吸引人的美食视频。以下是一些基本步骤和技巧&#xff1a; 选…

你知道便利店神秘顾客调研开展原因啊吗?

便利店神秘顾客调研的开展原因主要有以下几点&#xff1a; 1、评估服务质量和商品质量&#xff1a;通过神秘顾客的调研&#xff0c;可以客观地评估便利店的服务质量和商品质量&#xff0c;发现存在的问题和不足之处&#xff0c;为便利店提供改进的依据。 2、了解顾客满意度和…

UE4 Niagara 关卡3.4官方案例解析

Texture sampling is only supported on the GPU at the moment.(纹理采样目前仅在GPU上受支持) 效果&#xff1a;textures can be referenced within GPU particle systems。this demo maps a texture to a grid of particles&#xff08;纹理可以在GPU粒子系统中被引用这个演…

git使用教程14-Pycharm版本控制与分支管理

一、版本控制 1、版本控制介绍 &#xff08;1&#xff09;Version Control System 版本控制系统&#xff0c;简称VCS。 &#xff08;2&#xff09;版本控制系统分类&#xff1a; 集中式版本控制工具&#xff1a;SVN 分布式版本控制工具&#xff1a;Git 2、Pycharm 支持的版本…

Windows安装MySQL8.0详细步骤

目录 一、官网下载MySQL二、将压缩包解压到没有中文和空格的目录下三、设置配置文件四、配置环境变量五、安装初始化mysql服务 一、官网下载MySQL 进入MySQL官网&#xff1a;https://downloads.mysql.com/archives/community/&#xff0c;下载 Windows (x86, 64-bit), ZIP Arch…

项目管理中,项目经理如何搞定跨部门沟通与协作?

在项目管理中&#xff0c;跨部门沟通是一项至关重要的任务。项目经理作为项目的核心协调者&#xff0c;需要确保不同部门之间的顺畅沟通&#xff0c;以推动项目的顺利进行。项目经理如何搞定跨部门沟通&#xff1f; 实际案例&#xff1a; 某公司正在开发一款智能家居系统&am…

深入探索Docker数据卷:实现容器持久化存储的完美方案(下)

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Docker入门到精通》 《k8s入门到实战》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 四、Docker数据卷的高级管理 1、数据卷的生命周期管理 2、数据…

学习Android的第二十天

目录 Android Toast 吐司 常量 常用方法 例子 Android Notification 状态栏通知 Notification 的基本布局 扩展布局 Notification ( 状态栏通知 ) 相关的方法 例子&#xff1a; 参考文档 Android AlertDialog 弹出框 Android Dialog 继承图谱 AlertDialog 几种常…

如何做代币分析:以 CRO 币为例

作者&#xff1a;lesleyfootprint.network 编译&#xff1a;Mingfootprint.network 数据源&#xff1a;CRO Token Dashboard &#xff08;仅包括以太坊数据&#xff09; 在加密货币和数字资产领域&#xff0c;代币分析起着至关重要的作用。代币分析指的是深入研究与代币相关…

MySQL数据库主从复制与读写分离(一)

目录 前言 主从复制设置 配置主服务器 1. **编辑配置文件**&#xff1a; 2. **重启MySQL服务**&#xff1a; 3. **创建复制用户**&#xff1a; 4. **记录二进制日志文件位置**&#xff1a; 配置从服务器 1. **编辑配置文件**&#xff1a; 2. **重启MySQL服务**&#x…

【Python】进阶学习:pandas--rename()用法详解

【Python】进阶学习&#xff1a;pandas-- rename()用法详解 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望得到您的…

nginx代理minio教程 避坑过的教程 避开SignatureDoesNotMatch

本次教程使用的是单机minio进行演示&#xff0c;集群minio也和这个差不多。 按照这个教程&#xff0c;可以避开nginx代理minio之后&#xff0c;只能访问文件&#xff0c;但是通过预签名url上传文件就会报SignatureDoesNotMatch的坑 暂定如下&#xff1a; 你已经下载好miniom…

Kubernetes operator 零散知识篇【持续更新中】

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 Kubernetes operator学习 系列零散知识篇&#xff0c;在学习过程中发现 operator开发 有很多零碎的知识&#xff0c;所以单独用一篇文章记录Kubernetes operator学习系列 快捷链接 Kubernetes operator 前置知识…

基于SpringBoot的物业管理系统

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一 、设计说明 1.1 研究…