Java开发框架和中间件面试题(1)

news2024/9/23 1:25:48

1.什么是Spring框架?    

    Spring是一种轻量级框架,旨在提高开发人员的开发效率以及系统的可维护性。

    我们一般说的Spring框架就是Spring Framework,它是很多模块的集合,使用这些模块可以很方便的协助我们进行开发。这些模块是核心容器、数据访问/集成、web、aop(面向切面编程)、工具、消息和测试模块。比如core container中的core组件是Spring所有组件的核心,beans组件和context组件是实现IOC和DI的基础,AOP组件用来实现面向切面编程。

   Spring官网列出的Spring的六个特征:

    核心技术:依赖注入(DI)、AOP、事件(Events)、资源、i18n、验证、数据绑定、类型转换、SPEL。

   测试:模拟对象、TestContext框架、Spring MVC测试、WebTestClient。

    数据访问:事务、DAO支持、JDBC、ORM、编组XML。

Web支持:Spring MVC 和Spring Web Flux Web框架。

集成:远程处理、JMS、JCA、JMX、电子邮件、任务、调度、缓存。

语言:Kotlin,Groovy,动态语言。

2.列举一些重要的Spring模块?

下面对应的是Spring 4.X的版本,目前最新的5.X版本中Web模块的Portlet组件已经被废弃掉,同时增加了用于异常响应的Web Flux组件。

   Spring Core:基础,可以说Spring其他所有的功能都依赖于该类库。主要提供IOC和DI功能。

  Spring Aspects:该模块为与Aspects的集成提供支持。

  Spring AOP:面向切面编程。

  Spring  JDBC:Java数据库连接。

Spring JMS:Java消息服务。

 Spring ORM:用于支持Hibernate等ORM工具。

Spring Web:为创建Web应用程序提供支持。

Spring Test:提供了对Junit和TestNG测试的支持。

3.什么事IOC?如何实现的?

IOC(控制反转)是一种设计思想,就是将本来在程序中手动创建对象的控制权,交给IOC容器来管理,并由IOC容器完成对象的注入。这样可以很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。IOC容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何创建出来的。

Spring 中的 IOC的实现原理就是工厂模式加反射机制。

4.Spring AOP和AspectJ AOP 有什么区别?

    Spring AOP 是属于运行时增强,而AspectJ是编译时增强。Spring  Aop 基于代理,而AspectJ基于字节码操作。

   Spring AOP  已经集成了Aspect J ,Aspect J 应该算得上是Java 生态系统中最完整的AOP框架了。Aspect J相比于Spring AOP功能更加强大,但是Spring AOP相对来说更简单。

如果我们的切面比较少,那么两者性能差异不大。但是,当切面太多的话,最好选择Aspect  J ,它比Spring AOP快很多。

5.Spring中的bean的作用域有哪些?

1.singleton:唯一bean实例,Spring  中的bean默认都是单例的。

2.prototype:每次请求都会创建一个新的bean实例。

3.request:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP  request内有效。

4.session:每一次Http请求都会产生一个新的bean,该bean仅在当前Http Session内有效。

5.global  session:全局session作用域,仅仅在基于portlet的web应用中才有意义,Spring5中已经没有了。

6.Spring 中的单例bean的线程安全问题了解吗?

   大部分时候我们并没有在系统中使用多线程,所以很少有人会关注这个问题。单例bean存在线程问题,主要是因为当多个线程操作同一个对象的时候,对这个对象的非静态成员变量的写操作会存在线程安全问题。

  有两种常见的解决方案:

1.在bean对象中尽量避免定义可变的成员变量(不太现实)。

2.在类中定义一个ThreadLocal成员变量,将需要的可变成员变量保存在TheadLocal中(推荐的一种方式)。

7.Spring中的bean生命周期?

   bean的完整生命周期经历了各种方法调用,这些方法可以划分为以下几类:

   bean自身的方法:这个包括类Bean本身调用的方法和通过配置文件中<bean>的初始化方法和销毁方法指定的方法。

bean 级生命周期接口方法:这个包括了BeanNameAware,BeanFactoryAware,ApplicationContextAware,

当然也包括initializingBean和DisposableBean这些接口的方法(可以被@PostConstructe和@PreDestroy注解替代)

容器级生命周期接口方法:这个包括类InstantiationAwareBeanPostProcessor和BeanPostProcessor这两个接口实现,一般称它们的实现类为后处理器。

工厂后处理器接口方法:

这个包括了AspectJWeavingEnabler,ConfigurationClassPostProcessor,

CustomAutowireCofigure等等非常有用的工厂后处理器接口的方法。工厂后处理器也是容器级别的。在应用上下文装配配置文件之后立即调用。

具体而言,流程如下:

1.如果BeanFactoryPostProcessor和Bean 关联,则调用postProcessBeanFactory方法(即首先尝试从bean工厂中获取bean)。

2.如果InstantiationAwareBeanPostProcessor和Bean关联,则调用postProcessBeforeInstantiation方法。

3.根据配置情况调用Bean构造方法实例化Bean。

4.利用依赖注入完成Bean中所有属性值的配置注入。

5.如果InstantiationAwareBeanPostProcessor和Bean关联,则调用postProcessAfterInstantiation方法和post ProcessProperties.

调用xxAware接口:

第一类Aware接口

如果Bean实现了BeanNameAware接口,则Spring调用Bean的set BeanName()方法传入当前Bean的ID值。

如果Bean实现了BeanFactoryAware接口,则Spring调用set BeanFactory()方法传入当前工厂实例的引用。

第二类Aware接口

  如果Bean实现了EnvironmentAware接口,则Spring调用setEnvironment()方法传入当前Environment实例的引用。

 如果Bean实现了EmbeddedValueResolverAware接口,则Spring调用setEmbeddedValueResolver()方法传入当前StringValueResolver实例的引用。

  如果Bean实现了ApplicationContextAware接口,则Spring调用setApplicationContext()方法传入当前的ApplicationContext实例的引用。

6.如果BeanPostProcessor和Bean关联,则Spring将调用该接口的预初始化方法。

postProcessBeforeInititiazation()对bean进行加工操作,此处非常重要,Spring 的Aop就是利用它实现的。

7.如果Bean实现了initializingBean接口,则Spring将调用afterPropertiesSet()方法。(或者执行@PostConstruct注解的方法)

8.如果在配置文件中通过init method属性指定了初始化方法,则调用该初始化方法。

9.如果BeanPostProcessor和Bean关联,则Spring将调用该接口的初始化方法。

postProcessAfterInitialization().此时,Bean已经可以被应用系统使用了。

10,如果在<bean>中指定了该Bean的作用范围为scope=“singleton”,则将该Bean放入SpringIoc的缓存池中,将触发Spring对该Bean的生命周期管理,如果在<bean>中指定了该Bean的作用范围为scope=“prototype”,则将该Bean交给调用者,,调用者管理该Bean的生命周期,Spring不再管理该Bean。

11.如果Bean实现了DisposableBean接口,则Spring会调用destroy()方法将Spring中的Bean销毁;(或者有执行@PreDestroy注解的方法)

如果在配置文件中通过destroy  method属性指定了Bean的销毁方法,则Spring将调用该方法对Bean进行销毁。

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

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

相关文章

comfyUI + animateDiff video2video AI视频生成工作流介绍及实例

原文&#xff1a;comfyUI animateDiff video2video AI视频生成工作流介绍及实例 - 知乎 目录 收起 前言 准备工作环境 comfyUI相关及介绍 comfyUI安装 生成第一个视频 进一步生成更多视频 注意事项 保存为不同的格式 视频宽高设置 种子值设置 提示词与负向提示词…

【漏洞复现】奥威亚 教学视频应用服务平台任意文件上传漏洞

漏洞描述 AVA 教学视频应用服务平台是由广州市奥威亚电子科技有限公司基于当前教育视频资源建设的背景及用户需求的调研,开发出来能够适应时代发展和满足学校需求,具有实效性、多功能、特点鲜明的平台。 该平台存在任意文件上传漏洞,通过此漏洞攻击者可上传webshell木马,…

【Python-批量修改视频分辨率】

Python-批量修改视频分辨率 1 使用Python修改视频分辨率2 常见的视频编码格式2.1 等效的编码格式表示方式2.2 常见的编码格式 1 使用Python修改视频分辨率 首先拷贝视频文件并修改后缀&#xff0c;然后修改图片的分辨率&#xff0c;实现视频批量修改和转换。 import os impor…

npm安装依赖报错ERESOLVE unable to resolve dependency tree(我是在taro项目中)(node、npm 版本问题)

换了电脑之后新电脑安装包出错 &#x1f447;&#x1f447;&#x1f447; npm install 安装包报错 ERESOLVE unable to resolve dependency tree 百度后尝试使用 npm install --force 还是报错 参考 有人说是 node 版本和 npm 版本的问题 参考 新电脑 node版本&#xff1a;16.1…

在Windows系统平台下部署运行服务端Idea工程的jar服务

前言 目前云原生docker等技术&#xff0c;加上部署流水线大大的简化了各种流程&#xff0c;我们后端开发的人员只需要提交代码后&#xff0c;构建、部署、测试、发布等环节都无需人员接入&#xff0c;完全的自动化交付了。那么你肯定不禁想问&#xff0c;如题的需求不是点击一…

如何用 CleanMyMac 来保护 Mac 隐私

大家早上好&#xff0c;中午好&#xff0c;下午好&#xff0c;晚上好。 在我们使用MacBook上的自带浏览器-Safari&#xff08;或者一些其他浏览器&#xff09;进行网页浏览的时候&#xff0c;往往会留下一些痕迹。如果这些痕迹涉及一些敏感数据信息的话&#xff0c;那么我们肯…

Python 爬虫之下载视频(一)

爬取某平台视频 文章目录 爬取某平台视频前言一、大致内容二、基本思路三、代码编写1.引入库2.前期准备3.获取视频标题和地址3.下载保存视频 总结 前言 今天写个从好K视频平台爬取正在播放的视频&#xff0c;并下载保存到本地。 注意&#xff1a;建议大家先看看我之前的比较简…

【MySQL】mysql执行查询超过30秒之后报错

出现场景&#xff1a; 用workbench&#xff0c;查本地数据库&#xff0c;执行查询超过30秒之后&#xff0c;会报错断开连接&#xff0c;报错信息&#xff1a;Error Code: 2013. Lost connection to MySQL server during query 解决办法&#xff1a; 修改配置设置&#xff0c…

Kafka消费者组

消费者总体工作流程 Consumer Group&#xff08;CG&#xff09;&#xff1a;消费者组&#xff0c;由多个consumer组成。形成一个消费者组的条件&#xff0c;是所有消费者的groupid相同。 • 消费者组内每个消费者负责消费不同分区的数据&#xff0c;一个分区只能由一个组内消费…

RHCE8 资料整理(十一)

RHCE8 资料整理 第 32 章 控制语句32.1 判断语句 when32.1.1 when 判断中>、<、!和的使用32.1.2 when 判断中 in的用法32.1.3 when 判断中 is的用法 32.2 判断语句 block-rescue32.3 循环语句 第 32 章 控制语句 一个play中可以包含多个task&#xff0c;如果不想所有的t…

计算机网络-进阶

目录 易混淆物理层数据链路层网络层nat如何实现私有ip通信IP数据报 格式解析tcp 连接tcp流量控制滑动窗口拥塞控制 报文捕获 wireshark路由模拟器 enspcdn代理服务器 VS cdn VS web cache 计算机有了物理地址&#xff0c;为什么还要有ip地址&#xff1f;单播 多播 广播 传输层会…

EXCEL VLOOKUP函数

参考资料 Excel&#xff1a;史上最全的VLOOKUP应用教程VLOOKUP函数最全面最详细的讲解大全&#xff0c;涵盖17个重要和常见用法&#xff01; 目录 零. 前提条件一. 单条件查找1.1 顺向查找1.2 逆向查找 二. 多条件查找2.1 顺向查找2.2 逆向查找 三. 根据条件查询等级四. 交差查…

excel导出,post还是get请求?

1&#xff0c;前提 今天在解决excel导出的bug时&#xff0c;因为导出接口查询参数较多&#xff0c;所以把原来的get请求接口修改为post请求 原代码&#xff1a; 修改后&#xff1a; 2&#xff0c;修改后 postman请求正常&#xff0c;然后让前端对接口进行同步修改&#xff0…

【图神经网络】在节点分类任务中无特征节点的特征表示

无特征节点的特征表示 节点度数degree pagerank 以pagerank起源的应用场景为例&#xff0c;不是所有的网站都是同等重要的&#xff0c;所以需要根据结构信息对节点进行排序。 直觉上&#xff0c;如果一个网站它有很多链接&#xff0c;它就很重要&#xff0c;举例来说&#…

2023 年 5 大网络攻击

您是否知道 2023 年全球数据泄露的平均损失为 445 万美元&#xff1f;数量不只是数字&#xff1b;它反映了网络威胁对全球经济的深层次影响。他们强调了一个严峻的事实&#xff1a;没有任何实体能够幸免,甚至政府也不能幸免。 在前所未有的技术飞跃中&#xff0c;2023 年网络威…

听GPT 讲Rust源代码--src/tools(16)

File: rust/src/tools/rust-analyzer/crates/ide-completion/src/completions/use_.rs rust-analyzer是一个基于Rust语言的IntelliSense引擎&#xff0c;用于提供IDE自动补全、代码导航和其他代码编辑功能。在rust-analyzer的源代码中&#xff0c;rust/src/tools/rust-analyzer…

用户管理第2节课-idea 2023.2 后端--删除表,从零开始

一、鱼皮清空model文件夹下 二、鱼皮清空mapper文件夹下 三、删除 test 测试类下的部分代码 3.1删除SampleTest 3.2删除部分代码 UserCenterApplicationTests

加密后的数据该如何支持模糊查询

加密后的数据该如何支持模糊查询 在日常工作中&#xff0c;我们经常会有一些模糊查询的条件&#xff0c;比如说按照手机号模糊查询&#xff0c;或者是身份证号码。正常情况下我们可以使用 select * from user where mobile like %123% 来模糊查询&#xff0c;但是这种方式是…

〖大前端 - 基础入门三大核心之JS篇(58)〗- 面向对象案例

说明&#xff1a;该文属于 大前端全栈架构白宝书专栏&#xff0c;目前阶段免费&#xff0c;如需要项目实战或者是体系化资源&#xff0c;文末名片加V&#xff01;作者&#xff1a;哈哥撩编程&#xff0c;十余年工作经验, 从事过全栈研发、产品经理等工作&#xff0c;目前在公司…

【深度学习】序列生成模型(五):评价方法计算实例:计算BLEU-N得分【理论到程序】

文章目录 一、BLEU-N得分&#xff08;Bilingual Evaluation Understudy&#xff09;1. 定义2. 计算N1N2BLEU-N 得分 3. 程序 给定一个生成序列“The cat sat on the mat”和两个参考序列“The cat is on the mat”“The bird sat on the bush”分别计算BLEU-N和ROUGE-N得分(N1或…