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

Java面试题———Spring篇①

目录

一,谈谈你对SpringIOC的理解

二,Spring中有哪些依赖注入方式

三,你用过哪些Spring注解

四,SpringBean的作用域有几种

五,Spring中的bean线程安全吗

六,谈谈你对SpringAOP的理解

七,AOP的代理有几种方式


一,谈谈你对SpringIOC的理解

IOC,也叫控制反转,是Spring用来解耦的一种设计思想,它的做法就是将对象的控制权由程序员手中反转到Spring手中。具体来说呢就是,在没有IOC之前,对象都是程序员在类中主动去创建,需要哪个创建哪个;有了IOC之后,对象会交给Spring容器创建和管理,如果哪个对象中需要其它对象属性,Spring也会自动完成依赖注入。

总之一句话,IOC可以将对象的创建和对象之间依赖关系的维护交给Spring自动完成。

二,Spring中有哪些依赖注入方式

依赖注入指的是Spring给对象中属性进行赋值的过程,主要包括两种方式:

  1. 构造器依赖注入:构造器注入是指容器调用一个类的构造器创建对象时,直接传入给属性赋值

  2. Setter方法注入:Setter方法注入是指容器在创建对象完成后,通过调用属性的Setter 方法,可以属性赋值

三,你用过哪些Spring注解

我们常用的Spring注解主要分类下面几大类:

1、创建对象:@Component、@Controller、@Service、@Repository

它们都可以标注在自己开发的类上,Spring会使用注解标注的类创建出对象,然后放入容器

2、依赖注入:@Autowired

标注在属性或者属性对应的set方法上,Spring会根据被标注属性的类型自动对属性进行赋值

3、依赖注入:@Qualifier和@Autowired

一块使用,在同一类型的bean有多个的情况下Spring会根据name进行选择注入

4、配置类:@Configuration、@Bean

主要标注在配置类中,用于声明配置类和向Spring容器中放入一些配置有关的对象

5、当然还有一些平时用的不是特别多的

比如:声明注解扫描的@ComponentScan,声明Bean的作用域的@Scope,用于切面编程的@Around,@Pointcut等等

四,SpringBean的作用域有几种

在Spring中作用域是用来对象的存活范围的,它支持5种作用域

  • 第一种是单例,配置为单例的对象会跟随Spring容器创建而创建,跟随Spring容器销毁而销毁,在Spring容器中无论获取多少次单例对象,得到的都是同一个,这也是Spring中的对象的默认作用域

  • 第二种是多例,配置为多例的对象在每次获取的时候才会创建,而且每次获取到的都不一样

  • 还有三种分别是request、session和application,目前已经基本不再使用

其实,在我们平时的开发过程中,对象基本上都是配为单例的,这样可以有效的节省资源,只有单例对象存在线程安全问题时,才考虑调整为多例。

五,Spring中的bean线程安全吗

Spring中的Bean主要分为单例和多例

  1. 多例对象每次获取都会创建新实例,也就是说线程之间不存在Bean共享问题,也就不存在线程安全问题

  2. 单例对象是所有线程共享一个实例,因此就可能会存在线程安全问题。但是单例对象又分为无状态和有状态。

    • 无状态Bean是指只对对象的成员变量进行查询操作,不会修改成员变量的值,因此不存在线程安全问题

    • 有状态Bean需要对Bean中的成员变量进行数据更新操作,因此就可能存在线程安全问题

所以,最终我们得出结论,在Spring中,只有有状态的单例Bean才会存在线程安全问题

处理有状态单例Bean的线程安全问题有以下两种方法:

  1. 将Bean的作用域由单例改为多例

  2. 将需要的可变成员变量保存在ThreadLocal中, ThreadLocal本身就具备线程隔离的特性,这就相当于为每个线程提供了一个独立的变量副本,每个线程只需要操作自己的线程副本变量,从而解决线程安全问题。

六,谈谈你对SpringAOP的理解

AOP,又叫面向切面编程,核心思想是将那些与业务无关,却为业务模块所共同调用的逻辑(例如事务处理、日志管理)封装起来,然后再动态插入到业务中的功能

        使用AOP可以减少系统的重复代码,降低模块间的耦合度,并有利于扩展和维护,Spring AOP是基于动态代理的,它底层同时支持JDK和CGLIB的代理方式,并且会根据被代理类是否有接口自动选择最合适的代理方式我们在开发中用到AOP的主要使用场景有:事务管理、日志、性能监视、安全检查

七,AOP的代理有几种方式

AOP思想的实现一般都是基于代理模式,在Java中一般采用JDK动态代理模式和CGLIB动态代理模式

  1. JDK动态代理模式只能对有接口的类进行代理,而且效率较高

  2. CGLIB可以对任意的类进行动态代理,但是效率上不如JDK

因此在进行代理时,如果被代理类有接口,就用JDK;如果没有接口,就用CGLIB

使用Spring的AOP,底层会自动按照这个规则进行选择,开发者也无需关心

相关文章:

Java面试题———Spring篇①

目录 一,谈谈你对SpringIOC的理解 二,Spring中有哪些依赖注入方式 三,你用过哪些Spring注解 四,SpringBean的作用域有几种 五,Spring中的bean线程安全吗 六,谈谈你对SpringAOP的理解 七,…...

4章10节:用R做数据重塑,变体函数应用详解和可视化的数据预处理介绍

数据重塑(Data Reshaping)是将数据从一种结构转换为另一种结构的过程,是清理、分析和可视化数据的重要步骤。R语言作为数据科学的强大工具,提供了许多包来帮助我们进行数据重塑,其中最常用的就是dplyr包。dplyr包以其简洁的语法和高效的操作速度著称,它不仅可以帮助我们进…...

Socks5代理IP在跨境电商和网络爬虫领域的实战应用

在现代互联网环境中,Socks5代理IP因其强大的灵活性和隐私保护功能,成为了跨境电商和网络爬虫领域的重要工具。本文将探讨Socks5代理IP的基本原理,并详细介绍其在跨境电商和网络爬虫中的实际应用。 1. Socks5代理IP简介 Socks5代理IP是一种网…...

农业上的目标跟踪论文汇总

文章目录 2022Multi-object tracking using Deep SORT and modified CenterNet in cotton seedling counting (Computers and Electronics in Agriculture)A novel apple fruit detection and counting methodology based on deep learning and trunk tracking in modern orcha…...

gpxt 小程序:轨迹合并与管理的高效工具

引言 在户外探险和运动追踪领域,GPXT小程序以其独特的轨迹管理和合并功能脱颖而出,成为徒步、骑行等运动爱好者不可或缺的工具。本文将详细介绍GPXT小程序的核心功能及其对户外活动爱好者的实用性。 核心功能概览 轨迹合并 GPXT小程序允许用户将多个…...

elasticsearch集成springboot详细使用

1.es下载&配置 配置JVM 配置跨域 配置https和密码 2.es启动 .\elasticsearch.bat 或 后台启动: nohup ./bin/elasticsearch& 浏览器访问:https://localhost:9200 输入账户:elastic / 123456 3.重置es密码 .\elasticsearch-r…...

html+css网页制作 化妆品电商4个页面

htmlcss网页制作 化妆品电商4个页面 网页作品代码简单,可使用任意HTML编辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1&#xff…...

微调LLama 3.1——七月论文审稿GPT第5.5版:拿早期paper-review数据集微调LLama 3.1

前言 对于llama3,我们之前已经做了针对llama3 早7数据微调后的测评 去pk llama2的早7数据微调后,推理测试集中的早期paper:出来7方面review去pk gpt4推理测试集中的早期paper:7方面reviewground truth是早期paper的7方面人工rev…...

rust 编译时报错:type annotations needed for Box

如下图所示: 解决方法: 升级time的版本: cargo update -p time...

应用方案 | 低功耗接地故障控制器D4145

一、概述 D4145 是一个接地故障断路器。它能够检测到不良的接地条件,譬如装置接触到水时,它会在有害或致命的电击发生之前将电路断开。 D4145能检测并保护从火线到地线,从零线到地线的故障.这种简单而传统的电路设计能够确保其应用自如和长时间的可靠性。…...

第一次彩色pcb打样记录

感受和总结 看到彩色电路板和绿油板放在一起,感触还是挺大的。而且彩色板还直接给沉金,感觉焊上器件不要外壳都很好看了。后面一定记录一下这个板子实现的功能。 板子功能暂时分配 五个触摸盘,为了通过触摸控制不同功能,例如&a…...

通过 MediatR 实现了请求的分发和处理器的解耦

1. 前端请求发起 假设前端通过 HTTP GET 请求访问 GetTemplateSettings 端点,URL 中包含了 SubjectUuid 和 SubjectType 作为查询参数。 2. 进入 Controller 方法 请求到达后,会进入 MinBcController 类中的 GetTemplateSettings 方法,该方…...

Naive UI+vue一些组件的注意事项

NSpace(间距 Space) 默认给出space内的组件加一个div间隔,只能批量修改space内的元素样式,不能单独修改自组件样式,一般用于横向布局,若垂直布局若需要flex布局,慎用space组件NDataTable(数据表格 Data Table) :flex-h…...

sgetrf M N is 103040 时报错,这是个bug么 lapack and Openblas the same,修复备忘

号外: $ clang-format -style"{BasedOnStyle: llvm, IndentWidth: 4}" -i hello.cpp $ clang-format -style"{BasedOnStyle: llvm, IndentWidth: 4}" -i hello.cpp IndentWidth:4不错,默认2太下了 1,现象 MN103040时&…...

[后端代码审计] PHP 数组知识汇总

文章目录 前言1. 数组基础1.1 数组概念1.2 索引数组1.3 关联数组1.4 多维数组 2. 数组函数2.1 count()2.2 array_merge()2.3 array_keys()2.4 array_values()2.5 in_array() 3. 数组遍历3.1 for循环遍历3.2 foreach遍历3.3 遍历索引数组3.4 遍历关联数组 4. 数组排序4.1 sort()…...

单点Redis中面临哪些问题

我的后端学习大纲 我的Redis学习大纲 1.面试:请说下在单点Redis中面临哪些问题: 1.1.单点Redis的问题: 1.数据丢失问题:Redis是内存存储,服务重启可能会丢失数据 2.并发能力问题:单节点Redis并发能力虽然…...

数学建模--蒙特卡洛算法之电子管更换刀片寿命问题

目录 1.电子管问题重述 2.电子管问题分析 3.电子管问题求解 4.刀片问题重述 5.刀片问题分析 6.刀片问题求解 1.电子管问题重述 某设备上安装有4只型号规格完全相同的电子管,已知电子管寿命服从100~200h之间的均匀分布. 只要有一个电子管…...

如何解码Linux下事件响应工具evtest的时间戳

evtest介绍 这里放一下原文链接evtest工具介绍及安装 在开发input子系统驱动时,常常会使用evtest工具进行测试。evtest是打印evdev内核事件的工具,它直接从内核设备读取并打印设备描述的带有值和符号名的事件,可以用来调试鼠标、键盘、触摸…...

基于STM32开发的智能门禁系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码控制代码应用场景 小区门禁管理企业办公门禁系统常见问题及解决方案 常见问题解决方案结论 1. 引言 智能门禁系统通过整合多种身份识别技术,如密码输入、RFID刷卡、指…...

EasyExcel-高性能的 Java Excel 处理库

EasyExcel 是阿里巴巴开发的一个高性能的 Java Excel 处理库,主要用于处理大规模的 Excel 文件。它特别注重性能,优化了内存消耗,适合处理大数据量的 Excel 文件,避免了传统 Excel 库在处理大文件时的性能瓶颈。 主要功能 高性能…...

避开这些坑!在Quartus中设计硬布线CPU时,我的控制器和PC模块是如何调试的

硬布线CPU调试实战:从BEQ失效到波形分析的深度排错指南 当你在Quartus中完成单周期CPU的数据通路搭建,满心欢喜点击仿真按钮时,最令人崩溃的莫过于看到BEQ指令毫无反应、存储器读写数据错乱、或者PC计数器像脱缰野马般失去控制。这些看似简单…...

从零到一:手把手教你完成Matlab R2020a的下载、安装与激活【避坑指南】

1. 准备工作:下载与系统检查 第一次安装Matlab的朋友们可能会被复杂的流程吓到,但别担心,跟着我的步骤走绝对没问题。我去年给实验室十几台电脑装过R2020a版本,踩过的坑比你们见过的都多。首先咱们得准备好安装包,这里…...

别再手动敲命令了!用Shell的Here Document(EOF)自动化你的SFTP/MySQL登录操作

告别重复输入:用Here Document实现命令行自动化 每次登录SFTP服务器都要手动输入密码?数据库操作总得反复敲命令?运维工程师的日常被这些重复劳动占据了大半时间。Here Document技术正是为解放你的双手而生——这种源自Unix传统的脚本编写技巧…...

FastbootEnhance:Windows平台终极Android刷机工具箱完整指南

FastbootEnhance:Windows平台终极Android刷机工具箱完整指南 【免费下载链接】FastbootEnhance A user-friendly Fastboot ToolBox & Payload Dumper for Windows 项目地址: https://gitcode.com/gh_mirrors/fa/FastbootEnhance 在Android设备刷机和定制…...

Oracle EBS 的财务核算是以「Ledger(帐套)」为核心,绑定 COA、本位币、日历、核算方法,再配 OU(业务实体)、LE(法人);

Oracle EBS 的财务核算是以「Ledger(帐套)」为核心,绑定 COA、本位币、日历、核算方法,再配 OU(业务实体)、LE(法人);而 SAP FICO 是「FI(财务会计&#xff0…...

为LLM智能体构建主动防御:Agent Shield架构解析与实战部署

1. 项目概述:Agent Shield 是什么,以及它为何重要 最近在开源社区里,一个名为 agent-shield 的项目引起了我的注意。这个由 Shahar Dagan 发起的项目,直译过来是“智能体护盾”,其核心目标非常明确:为基于…...

学生党福音:用最便宜的TT马达和STM32F103C8T6,我焊出了能遥控的平衡小车

低成本DIY平衡小车:TT马达与STM32的极致性价比方案 当我在宿舍里第一次看到那辆价值近千元的商业平衡小车时,脑海中立刻浮现出一个问题:能不能用更便宜的材料实现类似功能?作为一名预算有限的学生,我开始探索如何用最…...

CANN/asc-devkit Reset函数说明

Reset 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode.com/cann…...

VGG改进(24):基于Deformable Convolution网络改进

可变形卷积的核心原理 传统卷积的局限性 标准的二维卷积操作在一个固定的矩形网格上进行采样。假设一个33卷积核,其采样点集合为: {(-1,-1), (-1,0), ..., (1,1)} 每个输出位置的计算涉及对这些固定位置的特征值进行加权求和。这种设计的优点在于结构简单、易于优化,但缺…...

混合量子-经典工作流编排的云原生实践

1. 混合量子-经典工作流编排的挑战与机遇量子计算正从实验室走向实际应用,但当前NISQ(Noisy Intermediate-Scale Quantum)时代的量子设备仍面临量子比特数量有限、噪声干扰强等限制。这使得混合量子-经典工作流(Hybrid Quantum–C…...