Java面试题———Spring篇①
目录
一,谈谈你对SpringIOC的理解
二,Spring中有哪些依赖注入方式
三,你用过哪些Spring注解
四,SpringBean的作用域有几种
五,Spring中的bean线程安全吗
六,谈谈你对SpringAOP的理解
七,AOP的代理有几种方式
一,谈谈你对SpringIOC的理解
IOC,也叫控制反转,是Spring用来解耦的一种设计思想,它的做法就是将对象的控制权由程序员手中反转到Spring手中。具体来说呢就是,在没有IOC之前,对象都是程序员在类中主动去创建,需要哪个创建哪个;有了IOC之后,对象会交给Spring容器创建和管理,如果哪个对象中需要其它对象属性,Spring也会自动完成依赖注入。
总之一句话,IOC可以将对象的创建和对象之间依赖关系的维护交给Spring自动完成。
二,Spring中有哪些依赖注入方式
依赖注入指的是Spring给对象中属性进行赋值的过程,主要包括两种方式:
构造器依赖注入:构造器注入是指容器调用一个类的构造器创建对象时,直接传入给属性赋值
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主要分为单例和多例
多例对象每次获取都会创建新实例,也就是说线程之间不存在Bean共享问题,也就不存在线程安全问题
单例对象是所有线程共享一个实例,因此就可能会存在线程安全问题。但是单例对象又分为无状态和有状态。
无状态Bean是指只对对象的成员变量进行查询操作,不会修改成员变量的值,因此不存在线程安全问题
有状态Bean需要对Bean中的成员变量进行数据更新操作,因此就可能存在线程安全问题
所以,最终我们得出结论,在Spring中,只有有状态的单例Bean才会存在线程安全问题
处理有状态单例Bean的线程安全问题有以下两种方法:
将Bean的作用域由单例改为多例
将需要的可变成员变量保存在ThreadLocal中, ThreadLocal本身就具备线程隔离的特性,这就相当于为每个线程提供了一个独立的变量副本,每个线程只需要操作自己的线程副本变量,从而解决线程安全问题。
六,谈谈你对SpringAOP的理解
AOP,又叫面向切面编程,核心思想是将那些与业务无关,却为业务模块所共同调用的逻辑(例如事务处理、日志管理)封装起来,然后再动态插入到业务中的功能
使用AOP可以减少系统的重复代码,降低模块间的耦合度,并有利于扩展和维护,Spring AOP是基于动态代理的,它底层同时支持JDK和CGLIB的代理方式,并且会根据被代理类是否有接口自动选择最合适的代理方式我们在开发中用到AOP的主要使用场景有:事务管理、日志、性能监视、安全检查
七,AOP的代理有几种方式
AOP思想的实现一般都是基于代理模式,在Java中一般采用JDK动态代理模式和CGLIB动态代理模式
JDK动态代理模式只能对有接口的类进行代理,而且效率较高
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ÿ…...
微调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 库在处理大文件时的性能瓶颈。 主要功能 高性能…...
如何用DesignPatternsPHP的建造者模式优雅构建复杂对象:完整指南
如何用DesignPatternsPHP的建造者模式优雅构建复杂对象:完整指南 【免费下载链接】DesignPatternsPHP Sample code for several design patterns in PHP 8.x 项目地址: https://gitcode.com/gh_mirrors/de/DesignPatternsPHP 在软件开发中,创建复…...
如何高效使用开源视频字幕生成工具:5分钟快速入门指南
如何高效使用开源视频字幕生成工具:5分钟快速入门指南 【免费下载链接】video-srt-windows 这是一个可以识别视频语音自动生成字幕SRT文件的开源 Windows-GUI 软件工具。 项目地址: https://gitcode.com/gh_mirrors/vi/video-srt-windows 在当今视频内容爆炸…...
SD-PPP:如何在Photoshop中5分钟搭建AI绘图工作流?
SD-PPP:如何在Photoshop中5分钟搭建AI绘图工作流? 【免费下载链接】sd-ppp A Photoshop AI plugin 项目地址: https://gitcode.com/gh_mirrors/sd/sd-ppp 还在为Photoshop和AI工具之间反复切换而烦恼吗?还在为导出导入文件、对齐图层而…...
告别重复编码:用快马平台生成模块化unet模板,极大提升分割项目开发效率
在工业缺陷检测项目中,图像分割是核心环节之一。传统开发流程中,从数据预处理到模型部署的每个环节都需要手动编写大量重复代码,不仅耗时耗力,还容易引入错误。最近尝试用InsCode(快马)平台生成模块化UNet模板后,开发效…...
AEUX:告别重复劳动,5分钟将Figma设计转为After Effects动画
AEUX:告别重复劳动,5分钟将Figma设计转为After Effects动画 【免费下载链接】AEUX Editable After Effects layers from Sketch artboards 项目地址: https://gitcode.com/gh_mirrors/ae/AEUX 还在为从Figma到After Effects的繁琐转换而烦恼吗&am…...
论文AI率从78%降到1.4%:嘎嘎降AI维普知网双查实测达标率!
论文AI率从78%降到1.4%:嘎嘎降AI维普知网双查实测达标率! 「双查」是 2026 年硕士论文降 AI 率最常见的需求场景。学校送审一般同时查知网和维普——单平台合格不代表两个都合格。学生最怕的是知网 AIGC 6% 看着没问题,维普 AIGC 一查 32% 触…...
别再瞎调权重了!Ceph集群数据分布不均?手把手教你读懂并优化Crush Map
别再瞎调权重了!Ceph集群数据分布不均?手把手教你读懂并优化Crush Map 当你发现Ceph集群中某些OSD负载长期居高不下,而另一些却处于闲置状态时,问题往往出在Crush Map的配置上。作为Ceph数据分布的核心算法,CRUSH决定了…...
Node.js京东自动下单工具完整指南:告别手动抢购烦恼
Node.js京东自动下单工具完整指南:告别手动抢购烦恼 【免费下载链接】jd-happy [DEPRECATED]Node 爬虫,监控京东商品到货,并实现下单服务 项目地址: https://gitcode.com/gh_mirrors/jd/jd-happy 还在为京东热门商品秒光而烦恼吗&…...
英伟达Nemotron 3 Nano Omni:全模态Agentic AI的架构革命与Golang实战
摘要:2026年4月29日,英伟达正式发布Nemotron 3 Nano Omni,这是专为Agentic AI设计的新一代全模态模型。它将文本、图像、音频与视频统一到一个推理体系中,实现了推理吞吐量提升高达9倍的突破性进展。本文深入剖析Nemotron 3 Nano Omni的技术架构、核心创新点,并提供完整的…...
终极指南:如何用FakeLocation轻松管理Android应用位置模拟 [特殊字符][特殊字符]
终极指南:如何用FakeLocation轻松管理Android应用位置模拟 📱📍 【免费下载链接】FakeLocation Xposed module to mock locations per app. 项目地址: https://gitcode.com/gh_mirrors/fak/FakeLocation 想要在Android设备上自由控制每…...
