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

spring面试题 一

一、为了降低Java开发的复杂性,Spring采取了那4种关键策略

基于POJO的轻量级和最小侵入性编程;

通过依赖注入和面向接口实现松耦合;

基于切面和惯例进行声明式编程;

通过切面和模板减少样板式代码。

二、Spring框架的核心:

IoC容器和AOP模块。

通过IoC容器管理POJO对象以及他们之间的耦合关系;通过AOP以动态非侵入的方式增强服务。

IoC让相互协作的组件保持松散的耦合,而AOP编程允许你把遍布于应用各层的功能分离出来形成可重用的功能组件。

三、Spring由哪些模块组成?

Spring 总共大约有 20 个模块, 由 1300 多个不同的文件构成。 而这些组件被

分别整合在核心容器(Core Container) 、 AOP(Aspect Oriented Programming)

和设备支持(Instrumentation) 、数据访问与集成(Data Access/Integeration) 、 

Web、 消息(Messaging) 、 Test等 6模块中。 以下是 Spring 5 的模块结构

图:

 

spring core:提供了框架的基本组成部分,包括控制反转(Inversion of 

Control,IOC)和依赖注入(Dependency Injection,DI)功能。

spring beans:提供了BeanFactory,是工厂模式的一个经典实现,Spring将管

理对象称为Bean。

spring context:构建于 core 封装包基础上的 context 封装包,提供了一种框

架式的对象访问方法。

spring jdbc:提供了一个JDBC的抽象层,消除了烦琐的JDBC编码和数据库厂

商特有的错误代码解析, 用于简化JDBC。

spring aop:提供了面向切面的编程实现,让你可以自定义拦截器、切点等。

spring Web:提供了针对 Web 开发的集成特性,例如文件上传,利用 servlet 

listeners 进行 ioc 容器初始化和针对 Web 的 ApplicationContext。

spring test:主要为测试提供支持的,支持使用JUnit或TestNG对Spring组件进

行单元测试和集成测试。

四、Spring 框架中都用到了哪些设计模式?

1. 工厂模式:BeanFactory就是简单工厂模式的体现,用来创建对象的实例;

2. 单例模式:Bean默认为单例模式。

3. 代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术;

4. 模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。

5. 观察者模式

定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知被制动更新,如Spring中listener的实现–ApplicationListener。

五、Spring框架中有哪些不同类型的事件

Spring 提供了以下5种标准的事件:

1. 上下文更新事件(ContextRefreshedEvent

在调用ConfigurableApplicationContext 接口中的refresh()方法时被触发。

2. 上下文开始事件(ContextStartedEvent

当容器调用ConfigurableApplicationContext的Start()方法开始/重新开始容器时触发该事件。

3. 上下文停止事件(ContextStoppedEvent

当容器调用ConfigurableApplicationContext的Stop()方法停止容器时触发该事件。

4. 上下文关闭事件(ContextClosedEvent

当ApplicationContext被关闭时触发该事件。容器被关闭时,其管理的所有单例Bean都被销毁。

5. 请求处理事件(RequestHandledEvent

在Web应用中,当一个http请求(request)结束触发该事件。如果一个bean实现了

ApplicationListener接口,当一个ApplicationEvent 被发布以后,bean会自动被通知。

六、Spring 的 IoC支持哪些功能

Spring 的 IoC 设计支持以下功能:

依赖注入

依赖检查

自动装配

支持集合

指定初始化方法和销毁方法

支持回调某些方法(但是需要实现 Spring 接口,略有侵入)

IoC 在 Spring 里,只需要低级容器就可以实现,2 个步骤:

1. 加载配置文件,解析成 BeanDefinition 放在 Map 里。

2. 调用 getBean 的时候,从 BeanDefinition 所属的 Map 里,拿出 Class 对象进行实例化,同时,如果有依赖关系,将递归调用 getBean 方法 —— 完成依赖注入。

七、BeanFactory 和 ApplicationContext有什么区别?

ApplicationContext是BeanFactory的子接口。

依赖关系:

BeanFactory:是Spring里面最底层的接口,包含了各种Bean的定义,读取

bean配置文档,管理bean的加载、实例化,控制bean的生命周期,维护bean

之间的依赖关系。

ApplicationContext接口作为BeanFactory的派生,除了提供BeanFactory所具

有的功能外,还提供了更完整的框架功能:

继承MessageSource,因此支持国际化

统一的资源文件访问方式

提供在监听器中注册bean的事件

同时加载多个配置文件

载入多个(有继承关系)上下文 使得每一个上下文都专注于一个特定的层次,比如应用的web

加载方式:

BeanFactroy采用的是延迟加载形式来注入Bean,即只有在使用到某个Bean

时(调用getBean()),才对该Bean进行加载实例化。这样,我们就不能发现一些

存在的Spring的配置问题。如果Bean的某一个属性没有注入,BeanFacotry加

载后,直至第一次使用调用getBean方法才会抛出异常。

ApplicationContext,它是在容器启动时,一次性创建了所有的Bean。这样,

在容器启动时,我们就可以发现Spring中存在的配置错误,这样有利于检查所

依赖属性是否注入。 ApplicationContext启动后预载入所有的单实例Bean,通

过预载入单实例bean ,确保当你需要的时候,你就不用等待,因为它们已经创建

好了。

相对于基本的BeanFactory,ApplicationContext 唯一的不足是占用内存空

当应用程序配置Bean较多时,程序启动较慢。

创建方式:

BeanFactory通常以编程的方式被创建,ApplicationContext还能以声明的方

式创建,如使用ContextLoader。

注册方式:

BeanFactory和ApplicationContext都支持BeanPostProcessor

BeanFactoryPostProcessor的使用,但两者之间的区别是:BeanFactory需要

手动注册,而ApplicationContext则是自动注册。

BeanFactory 简单粗暴,可以理解为就是个 HashMap,Key 是 BeanName,

Value 是 Bean 实例。通常只提供注册(put),获取(get)这两个功能。我

们可以称之为 “低级容器”。

ApplicationContext 可以称之为 “高级容器”。因为他比 BeanFactory 多了

更多的功能。他继承了多个接口。因此具备了更多的功能。例如资源的获取,支

持多种消息(例如 JSP tag 的支持),对 BeanFactory 多了工具级别的支持等

待。所以你看他的名字,已经不是 BeanFactory 之类的工厂了,而是 “应用上

下文”, 代表着整个大容器的所有功能。该接口定义了一个 refresh 方法,此

方法是所有阅读 Spring 源码的人的最熟悉的方法,用于刷新整个容器,即重新

加载/刷新所有的 bean。

相关文章:

spring面试题 一

一、为了降低Java开发的复杂性,Spring采取了那4种关键策略 基于POJO的轻量级和最小侵入性编程; 通过依赖注入和面向接口实现松耦合; 基于切面和惯例进行声明式编程; 通过切面和模板减少样板式代码。 二、Spring框架的核心&am…...

C++中char *,char a[ ]的特殊应用

1.数组的本质 数组是多个元素的集合,在内存中分布在地址相连的单元中,所以可以通过其下标访问不同单元的元素。 2.指针 指针也是一种变量,只不过它的内存单元中保存的是一个标识其他位置的地址。 3.字符串常量的本质是它的第一个字符的地…...

【Windows10】电脑副屏无法调节屏幕亮度?解决方法

先说下情况,本人对显示器不太懂,属于小白 这个副屏无法调节的问题出现也已经很久了,但是之前亮度适合就无所谓,今天突然按了之后很亮,于是就找问题。 第一步,我直接百度,遇事不决,百…...

Paper简读 - ProGen2: Exploring the Boundaries of Protein Language Models

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/128976102 ProGen2: Exploring the Boundaries of Protein Language Models ProGen2:探索蛋白质语言模型的边界Cumulative density:累积密度 Ligand:在生…...

leaflet 加载WKT数据(示例代码050)

第050个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中加载WKT文件,将图形显示在地图上。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果; 注意如果OpenStreetMap无法加载,请加载其他来练习 文章目录 示例效果配置方式示例源代码(共67行…...

设计模式-组合模式和建筑者模式详解

一. 组合模式 1. 背景 在现实生活中,存在很多“部分-整体”的关系,例如,大学中的部门与学院、总公司中的部门与分公司、学习用品中的书与书包、生活用品中的衣月艮与衣柜以及厨房中的锅碗瓢盆等。在软件开发中也是这样,例如&…...

Pcap文件的magic_number

1. 简述 pcap文件头中的magicNum是来标识pcap文件文件头和包头字节序和应用是否一致的。 在标准情况下为0xa1b2c3d4。如果相反则说明需要调换字节序。 一般格式 Global Header Packet Header Packet Data Packet Header Packet Data ....pcap文件头格式 typedef struct pca…...

MDS75-16-ASEMI三相整流模块MDS75-16

编辑-Z MDS75-16在MDS封装里采用的6个芯片,是一款工业焊机专用大功率整流模块。MDS75-16的浪涌电流Ifsm为920A,漏电流(Ir)为5mA,其工作时耐温度范围为-40~150摄氏度。MDS75-16采用GPP硅芯片材质,里面有6颗芯片组成。MDS75-16的电…...

基本TCP编程

1. 基本概念 TCP (即传输控制协议) 是一种面向连接的传输层协议,它能提供高可靠性通信 (即数据无误、数据无丢失、数据无失序、数据无重复到达的通信)。 2. 通信流程解析 TCP 通信的流程与打电话的过程相似,以下以一对情侣打电话的过程来展示TCP的通信流程: 其中服务端 …...

【沁恒WCH CH32V307V-R1开发板读取板载温度实验】

【沁恒WCH CH32V307V-R1开发板读取板载温度实验】1. 前言2. 软件配置2.1 安装MounRiver Studio3. ADC项目测试3.1 打开ADC工程3.2 编译项目4. 下载验证4.1 接线4.2 演示效果5. 小结1. 前言 ADC 模块包含 2 个 12 位的逐次逼近型的模拟数字转换器,最高 14MHz 的输入时…...

学习SpringCloudAlibaba(二)微服务的拆分与编写

目录 一、单体架构VS微服务架构 1.单体架构 ​(1).单体架构的优点 (2).单体架构的缺点 2.微服务架构 (1)微服务的特性 (2)微服务架构图 (3)微服务的优点 …...

通过对HashMap的源码分析解决部分关于HashMap的问题

HashMap第一次分配多大的空间我们查看resize()中的源码所以当我们没有传入默认容量的参数的时候,默认容量是16当传进一个20的初始参数时,数组的容量是多大所以当我们传入20的参数,这时创建的容量是32(2^5)对…...

【无标题】

Windeployqt 打包,缺少DLL 的原因分析,解决方法 很多同学使用工具windeployqt进行打包发布后,运行exe文件时,还是会出现下图所示的系统错误提示,这种情况就表示相关的DLL 库文件没有被正确打包。可是windeployqt明确显示运行正常啊,难道是QT自家的windeployqt这个工具有…...

渗透测试 -- 网站信息收集

数据来源 01 网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言(php、java、...)、数据库(Mysql、...)为什么要了解这些? 举个例子:发现了一…...

Windows 搭建ARM虚拟机 UOS系统

搭建环境安装虚拟机下载虚拟机QEMU,https://www.qemu.org/download/,目前最新版本是7.2.0。安装完成后,需要将qemu的安装路径设置到环境变量完成后运行cmd,测试环境变量配置完成。qemu-system-aarch64 --version如上截图所示&…...

day58每日温度_下一个更大元素1

力扣739.每日温度 题目链接:https://leetcode.cn/problems/daily-temperatures/ 思路 什么时候用单调栈呢? 通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了…...

超清遥感影像语义分割处理

分割出城市中的垃圾堆场,遂寻找到了 UrbanAtlas 2012 database 这个数据集和对应的 baseline baseline IoU for class 1: 0.5667 IoU for class 2: 0.3504 IoU for class 3: 0.0001 IoU for class 4: 0.0002 IoU for class 5: 0.4121 IoU for class 6: 0.0204 IoU for cla…...

RabbitMQ安装及配置

目录1.下载和安装1.1 下载1.2. 安装1.3 测试1.4 卸载管理界面2.1 添加用户2.2 创建Virtual Hosts2.3. 设置权限1.下载和安装 1.1 下载 1.下载Erlang的rpm包 RabbitMQ是Erlang语言编写,所以Erang环境必须要有,注:Erlang环境一定要与RabbitMQ…...

网络协议(四):网络互联模型、物理层、数据链路层

网络协议系列文章 网络协议(一):基本概念、计算机之间的连接方式 网络协议(二):MAC地址、IP地址、子网掩码、子网和超网 网络协议(三):路由器原理及数据包传输过程 网络协议(四):网络互联模型、物理层、数据链路层 目录一、网…...

请问有没有关于数据预测的方法?

利用数据对未来进行预测分析,虽然不能百分百的准确预测,但是有数据理论支撑的趋势预测是客观可靠的。当数据分析的目的涉及未来决策时,就可以大胆使用预测的思路和方法,如企业明年的战略计划、销售计划等,这对企业而言…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...