22年11月-外包-面试题

news2024/11/26 12:48:16

目录

  • 背景
  • 题目
    • Spring怎么解决循环依赖?
      • 什么是循环依赖
        • 第一种:互相依赖
        • 第二种:三者间依赖
        • 第三种:自我依赖
      • 三级缓存
      • 补充:那第三级缓存的作用是什么?
      • 补充:Spring 中哪些情况下,不能解决循环依赖问题?

背景

22年11月底,应聘杭州某外包公司的驻场开发。
题目的答案,是根据我的理解和整理编写的。可能有不对的地方,欢迎大家指正。
这次是电话面,我项目介绍比较充分,也可能是面试官赶时间,除了项目细节,面试官只问了一道面试题。

题目

Spring怎么解决循环依赖?

Spring 是利用缓存机制来解决循环依赖。

什么是循环依赖

如果在代码中,将两个或多个 Bean 互相之间持有对方的引用就会发生循环依赖。
循环的依赖将会导致注入死循环。
这是 Spring 发生循环依赖的原因。
循环依赖有三种形态:

第一种:互相依赖

A 依赖 B,B 又依赖 A,它们之间形成了循环依赖。
在这里插入图片描述

第二种:三者间依赖

A 依赖 B,B 依赖 C,C 又依赖 A,形成了循环依赖。
在这里插入图片描述

第三种:自我依赖

A 依赖 A 形成了循环依赖。
在这里插入图片描述

三级缓存

Spring 设计了三级缓存来解决循环依赖问题。
当调用 getBean()方法的时候,Spring 会先从一级缓存中去找到目标 Bean。
如果发现一级缓存中没有便会去二级缓存中去找,而如果一、二级缓存中都没有找到,意味着该目标 Bean还没有实例化。
于是,Spring 容器会实例化目标 Bean(PS:刚初始化的 Bean称为早期 Bean) 。
然后,将目标 Bean 放入到二级缓存中,同时,加上标记是否存在循环依赖。
如果不存在循环依赖便会将目标 Bean 存入到二级缓存,否则,便会标记该 Bean 存在循环依赖,然后将等待下一次轮询赋值,也就是解析@Autowired 注解。等@Autowired 注解赋值完成后,会将目标 Bean 存入到一级缓存。Spring 一级缓存中存放所有的成熟 Bean,二级缓存中存放所有的早期 Bean,先取一级缓存,再去二级缓存。
在这里插入图片描述

补充:那第三级缓存的作用是什么?

三级缓存是用来存储代理 Bean。
当调用 getBean()方法时,发现目标 Bean 需要通过代理工厂来创建,此时会将创建好的实例保存到三级缓存,最终也会将赋值好的 Bean 同步到一级缓存中。

补充:Spring 中哪些情况下,不能解决循环依赖问题?

有4种情况:
1.多例 Bean 通过 setter 注入
2.单例的代理 Bean 通过 Setter 注入
3.构造器注入的 Bean
4.设置了@DependsOn 的 Bean

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

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

相关文章

【Hadoop】在云服务器上部署Hadoop2.7.1伪分布式集群

文章目录一、准备Hadoop压缩包并安装1、安装Hadoop(1)准备好hadoop压缩包(2)安装hadoop(3)查看是否安装成功2、将hadoop添加到环境变量(1)在文件末尾添加以下内容(2&…

怎样图片转文字?两分钟让你实现快速转文字

在日常的办公中,我们经常会遇到需要将纸质文件里的文字提取出来,再转换为电子档的情况,如果我们采用手动输入的话,不仅速度太慢,而且还可能因此耽误到后边的工作,是不是已经有小伙伴遇到这种现象&#xff0…

[附源码]Python计算机毕业设计Django房产中介管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

[附源码]计算机毕业设计springboot路政管理信息系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

RFC(Remote function call)

文章目录1 Definition2 Call process3. Communication4 Communication module5 RFC version .6 RFC and Web service7 Remote object maintain8 Call RFC1 Definition 2 Call process 3. Communication 4 Communication module 5 RFC version . 6 RFC and Web service 7 Remote…

mysql的主从复制

文章目录前言主备原理binlog的三种格式循环复制问题主备的搭建总结前言 mysql在日常中的使用是比较多的,大部分可能也都搭建过主从复制,或者集群模式。但是其中的原理不知道大家是否清楚。今天我们主要介绍的就是mysql主从复制的原理。 主备原理 主备…

Transformer对接公司需求的调研报告

1. 结构 从宏观的视角开始 首先将这个模型看成是一个黑箱操作。在机器翻译中,就是输入一种语言,输出另一种语言。 那么拆开这个黑箱,我们可以看到它是由编码组件、解码组件和它们之间的连接组成。 编码组件部分由一堆编码器(enc…

Open vSwitch系列之数据结构解析深入分析ofpbuf

上一篇我们分析了hmap,hamp可以说是Open vSwitch中基石结构,很多Open vSwitch中数据结构都依赖hmap。本篇我们来分析一下ofpbuf,这个结构,我们从名字上就可得知,此数据结构用于存储数据的,比如收发OpenFlow…

1543_AURIX_TC275_CPU子系统_CPU内核实现特性

全部学习汇总: GreyZhang/g_TC275: happy hacking for TC275! (github.com) 这个章节看的信息应该是针对内核设计实现上TC275的具体实现特点,应该是覆盖了很多内核中的实施相关的特性的。 1. 在上下文功能支持上,P和更灵活一些。E核只支持DSP…

[附源码]Python计算机毕业设计SSM辽宁科技大学二手车交易平台(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

非常强,批处理框架 Spring Batch 就该这么用!(场景实战)

前言 概念词就不多说了,我简单地介绍下 , spring batch 是一个 方便使用的 较健全的 批处理 框架。 为什么说是方便使用的,因为这是 基于spring的一个框架,接入简单、易理解、流程分明。 为什么说是较健全的, 因为它…

NVIDIA 7th SkyHackathon(八)使用 Flask 与 Vue 开发 Web

1.页面效果 Web 采用 flaskvue 开发,效果图如下 2.后端 import sys import subprocess import os from PIL import Image from datetime import datetime from ASR_metrics import utils as metricsfrom werkzeug.wrappers import Request, Response from …

卡尔曼滤波:过滤随机游走

本文是Quantitative Methods and Analysis: Pairs Trading此书的读书笔记。 我们知道,随机游走序列是到当前时间为止白噪声实现(white noise realization)的简单求和。换句话说,随机游走序列中的对下一个时间点值的估计(预测)是通…

为什么程序员买不起房子?

很多人都说程序员的收入那么高,为什么程序员还是买不起房呢?其实不是程序员不想买,是真的买不起…… 拿北京为例。北京的房价可谓是越来越奇葩,不仅仅是因为银行政策导致贷款越来越难审批下来,更重要的是进入地产市场…

音频3A算法详解

一、音频3A技术背景 手机电脑等智能设备的普及,AI智能、5G等技术的不断发展,语音通信成为了最方便快捷的远程交流方式,会议全向麦克风、会议一体化终端等会议系统逐渐成为企业经营中的重要工具。语音质量决定了企业远程沟通协作效果,其中噪音和回声能够严重影响到语音预处理…

图扑软件获评 2022 年“火炬瞪羚企业”

厦门火炬高新区 2022 年“火炬瞪羚企业”名单公布,图扑软件经过层层遴选,成功入围,获评 2022 年“火炬瞪羚企业”称号。 在 2021 年,图扑软件已经凭借领先的技术实力和发展潜力,入选福建省数字经济领域“瞪羚”创新企业…

连续学习入门(二):连续学习的三种类型

说明:本系列文章若无特别说明,则在技术上将 Continual Learning(连续学习)等同于 Incremental Learning(增量学习)、Lifelong Learning(终身学习),关于 Continual Learni…

Express操作MongoDB【一.Express框架通过Mongoose模块操作MongoDB数据库;二.在接口中间件中使用Mongoose模块】

目录 一.Express框架通过Mongoose模块操作MongoDB数据库 1.MongoDB数据库: (1)存放数据的格式:key:value (2)数据库(database)---集合(collection)---文档…

使用vite 搭建vue 3的项目

一、目标: 使用vite搭建一个Vue 3 的项目,并启动成功。 二、准备工作 首先你要有Node.js、VSCode编辑器、Chrome浏览器 关于下载的问题Node.js可以去官网下载 链接:http://nodejs.cn/download/ 下载左边的长期支持版本就好,最新版…

基于Haar-Like特征的人脸检测算法研究-附Matlab代码

⭕⭕ 目 录 ⭕⭕✳️ 一、引言✳️ 二、Haar-Like 特征✳️ 三、人脸检测实验验证✳️ 四、参考文献✳️ 五、Matlab代码获取✳️ 一、引言 脸是每个人最重要的外貌特征,随着科技推动社会不断向前发展,人脸识别也逐渐融入人们的生活中,例如在…