Java面试题总结200道(三)

51、什么是 Spring IOC 容器

Spring 框架的核心是 Spring 容器。容器创建对象,将它们装配在一起,配置它 们并管理它们的完整生命周期。Spring 容器使用依赖注入来管理组成应用程序的 组件。容器通过读取提供的配置元数据来接收对象进行实例化,配置和组装的指 令。该元数据可以通过 XML,Java 注解或 Java 代码提供。

52、什么是依赖注入

在依赖注入中,您不必创建对象,但必须描述如何创建它们。您不是直接在代码 中将组件和服务连接在一起,而是描述配置文件中哪些组件需要哪些服务。由 IOC 容器将它们装配在一起。

53、在 Spring Framework 中可以通过多少种方式完成依赖注入

两种,使用构造函数和 setter 注入。

54、如何区分构造函数注入和 setter 注入

55、spring 中有多少种 IOC 容器?

BeanFactory ---- BeanFactory 就像一个包含 bean 集合的工厂类。它会在客户端 要求时实例化 bean。

ApplicationContext ---- ApplicationContext 接口扩展了 BeanFactory 接口。它 在 BeanFactory 基础上提供了一些额外的功能。

56、区分 BeanFactory 和 ApplicationContext

57、spring 支持几种 bean scope(作用域)?

Singleton - 每个 Spring IoC 容器仅有一个单实例。

Prototype - 每次请求都 会产生一个新的实例。

Request - 每一次 HTTP 请求都会产生一个新的实例,并 且该 bean 仅在当前 HTTP 请求内有效。

Session - 每一次 HTTP 请求都会产 生一个新的 bean,同时该 bean 仅在当前 HTTP session 内有效。

Global-session - 类似于标准的 HTTP Session 作用域,不过它仅仅在基于 portlet 的 web 应用中才有意义。Portlet 规范定义了全局 Session 的概念, 它被所有构成某个 portlet web 应用的各种不同的 portlet 所共享。在 global session 作用域中定义的 bean 被限定于全局 portlet Session 的生命周期范 围内。如果你在 web 中使用 global session 作用域来标识 bean,那么 web 会自动当成 session 类型来使用。

仅当用户使用支持 Web 的 ApplicationContext 时,最后三个才可用。

58、什么是 spring 的内部 bean

只有将 bean 用作另一个 bean 的属性时,才能将 bean 声明为内部 bean。

59、什么是Spring装配

当 bean 在 Spring 容器中组合在一起时,它被称为装配或 bean 装配。Spring 容器需要知道需要什么 bean 以及容器应该如何使用依赖注入来将 bean 绑定 在一起,同时装配 bean。

60、自动装配有哪些方式

Spring 容器能够自动装配 bean。也就是说,可以通过检查 BeanFactory的内容让Spring自动解析 bean 的协作者。

自动装配的不同模式:

no - 这是默认设置,表示没有自动装配。应使用显式 bean 引用进行装配。

byName - 它根据 bean 的名称注入对象依赖项。它匹配并装配其属性与 XML 文件中由相同名称定义的 bean。

byType - 它根据类型注入对象依赖项。如果属 性的类型与 XML 文件中的一个 bean 名称匹配,则匹配并装配属性。构造函数 - 它通过调用类的构造函数来注入依赖项。它有大量的参数。

autodetect - 首先 容器尝试通过构造函数使用 autowire 装配,如果不能,则尝试通过 byType 自 动装配。

61、什么是 AOP

AOP(Aspect-Oriented Programming), 即 面向切面编程。AOP 的主要作用就是在不侵入原有程序的基础上实现对原有功能的增强, 而增强的方式就是添加通知,就是额外增强一个方法。

62、什么是 Aspect

切面(Aspect)是AOP中的核心概念,它实质上是一组通知(Advice)和切点(Pointcut)的组合。通知定义了在何种情况下需要执行某些操作,而切点则确定了这些操作应该在哪里执行。通过切面,你可以在不修改原有代码的基础上,将一些公共的逻辑(比如日志记录或安全检查)注入到程序的多个部分。

63、什么是连接点(Joinpoint)

程序执行的某个特定位置(如:某个方法调用前、调用后,方法抛出异常后)。一个类或一段程序代码拥有一些具有边界性质的特定点,这些代码中的特定点就是连接点。Spring仅支持方法的连接点。

64、什么是通知(Advice)

特定 JoinPoint 处的 Aspect 所采取的动作称为 Advice。Spring AOP 使用一 个 Advice 作为拦截器,在 JoinPoint “周围”维护一系列的拦截器。

65、什么是切点(pointcut)

如果连接点相当于数据中的记录,那么切点相当于查询条件,一个切点可以匹配多个连接点。Spring AOP的规则解析引擎负责解析切点所设定的查询条件,找到对应的连接点。 

66、有哪些类型的通知(Advice)

前置通知

前置通知在目标方法调用前执行,可以在前置通知中进行一些参数校验、权限检查等操作。前置通知通常是通过@Before注解来实现的。

后置通知

后置通知在目标方法调用后执行,可以在后置通知中进行一些结果处理、日志记录等操作。后置通知通常是通过@After注解来实现的。

返回通知

返回通知在目标方法返回结果后执行,可以在返回通知中进行一些结果处理、日志记录等操作。返回通知通常是通过@AfterReturning注解来实现的。

异常通知

异常通知在目标方法抛出异常后执行,可以在异常通知中进行一些异常处理、日志记录等操作。异常通知通常是通过@AfterThrowing注解来实现的。

环绕通知

环绕通知可以在目标方法执行前、执行后、返回时、抛出异常时等不同的时间点插入一些通用的代码逻辑。环绕通知通常是通过@Around注解来实现的。

正常执行的顺序是:Before -- After -- AfterThrowing -- AfterReturning

67、AOP 有哪些实现方式

静态代理

指使用 AOP 框架提供的命令进行编译,从而在编译阶段就可生成 AOP 代理类, 因此也称为编译时增强;

  • 编译时编织(特殊编译器实现)
  • 类加载时编织(特殊的类加载器实现)。

动态代理

在运行时在内存中“临时”生成 AOP 动态代理类,因此也被称为运行时增强。

  • JDK 动态代理
  • CGLIB

68、Spring AOP and AspectJ AOP 有什么区别

Spring AOP 基于动态代理方式实现;AspectJ 基于静态代理方式实现。Spring AOP 仅支持方法级别的 PointCut;AspectJ提供了完全的 AOP 支持,它还支持属性级 别的 PointCut。

69、什么是编织(Weaving)

为了创建一个 advice 对象而链接一个 aspect 和其它应用类型或对象,称为编 织(Weaving)。在 Spring AOP 中,编织在运行时执行。

70、Spring MVC 框架有什么用

Spring Web MVC 框架提供 模型-视图-控制器 架构和随时可用的组件,用于开 发灵活且松散耦合的 Web 应用程序。MVC 模式有助于分离应用程序的不同方 面,如输入逻辑,业务逻辑和 UI 逻辑,同时在所有这些元素之间提供松散耦合。

71、描述一下 DispatcherServlet 的工作流程

1、向服务器发送 HTTP 请求,请求被前端控制器 DispatcherServlet 捕获。

2、 DispatcherServlet 根据 -servlet.xml 中的配置对请求的 URL 进行解 析,得到请求资源标识符(URI)。然后根据该 URI,调用 HandlerMapping 获得该 Handler 配置的所有相关的对象(包括 Handler 对象以及 Handler 对 象对应的拦截器),最后以 HandlerExecutionChain 对象的形式返回。

3、 DispatcherServlet 根据获得的 Handler,选择一个合适的 HandlerAdapter。(附注:如果成功获得 HandlerAdapter 后,此时将开始 执行拦截器的 preHandler(...)方法)。

4、提取 Request 中的模型数据,填充 Handler 入参,开始执行 Handler ( Controller)。在填充 Handler 的入参过程中,根据你的配置,Spring 将 帮你做一些额外的工作:

  • HttpMessageConveter:将请求消息(如 Json、xml 等数据)转换 成一个对象,将对象转换为指定的响应信息。
  • 数据转换:对请求消息进行数据转换。如 String 转换成 Integer、 Double 等。
  • 数据根式化:对请求消息进行数据格式化。如将字符串转换成格式化数字 或格式化日期等。
  • 数据验证:验证数据的有效性(长度、格式等),验证结果存储到 BindingResult 或 Error 中。

5、Handler(Controller)执行完成后,向 DispatcherServlet 返回一个 ModelAndView 对象;

6、根据返回的 ModelAndView,选择一个适合的 ViewResolver(必须是已 经注册到 Spring 容器中的 ViewResolver)返回给 DispatcherServlet。

7、 ViewResolver 结合 Model 和 View,来渲染视图。

8、视图负责将渲染结果返回给客户端。

72、使用 Spring 框架的好处是什么

  • 轻量:Spring 是轻量的,基本的版本大约 2MB。
  • 控制反转:Spring 通过控制反转实现了松散耦合,对象们给出它们的依 赖,而不是创建或查找依赖的对象们。
  • 面向切面的编程(AOP):Spring 支持面向切面的编程,并且把应用业务 逻辑和系统服务分开。
  • 容器:Spring 包含并管理应用中对象的生命周期和配置。
  • MVC 框架:Spring 的 WEB 框架是个精心设计的框架,是 Web 框架的 一个很好的替代品。
  • 事务管理:Spring 提供一个持续的事务管理接口,可以扩展到上至本地 事务下至全局事务(JTA)。
  • 异常处理:Spring 提供方便的API把具体技术相关的异常(比如由JDBC, Hibernate or JDO 抛出的)转化为一致的 unchecked 异常。

73、解释 JDBC 抽象和 DAO 模块

通过使用 JDBC 抽象和 DAO 模块,保证数据库代码的简洁,并能避免数据库资源 错误关闭导致的问题,它在各种不同的数据库的错误信息之上,提供了一个统一 的异常访问层。它还利用 Spring 的 AOP 模块给 Spring 应用中的对象提供事务 管理服务。

74、解释对象/关系映射集成模块

Spring 通过提供 ORM 模块,支持我们在直接 JDBC 之上使用一个对象/关系映射 映射(ORM)工具,Spring 支持集成主流的 ORM 框架,如 Hiberate,JDO 和 iBATIS SQL Maps。Spring 的事务管理同样支持以上所有 ORM 框架及 JDBC。

75、IOC 的优点是什么

IOC 或 依赖注入把应用的代码量降到最低。它使应用容易测试,单元测试不再需 要单例和 JNDI 查找机制。最小的代价和最小的侵入性使松散耦合得以实现。IOC 容器支持加载服务时的饿汉式初始化和懒加载。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【vue video.js】The element or ID supplied is not valid. (videojs) element Ui

问题:使用video.js做了一个弹窗显示视频,效果如下 但是发现弹窗再次打开,视频播放失败,报错The element or ID supplied is not valid 原因是videojs找不到需要初始化的视频id,在关闭弹窗的时候需要重置video.js&…

小迪安全42WEB攻防-通用漏洞文件包含LFIRFI伪协议

#知识点: 1、解释什么是文件包含 2、分类-本地LFI&远程RFI 3、利用-配合上传&日志&会话 4、利用-伪协议&编码&算法等 #核心知识: 1、本地包含LFI&远程包含RF1-区别 一个只能包含本地,一个可以远程加载 具体形成原因由代码和环境配置文件决定…

便利店小程序有哪些功能

​便利店小程序为附近的住户提供小程序在线购物的服务。用户只需要打开小程序,就可以购买需要的商品,可以选择自取或者配送。整个过程非常简单快速。下面具体介绍便利店小程序的功能。 1. **商品展示**:展示便利店的商品信息,包括…

芯片顶级盛会HotChip历年-未来芯片论坛及资料全集下载

提示:下载链接在文章最后。 Hotchips是全球芯片行业影响力最大的会议。 Hot Chips是一个技术会议,聚焦于半导体和微处理器的设计与创新。以下是一些关于Hot Chips的信息和相关链接: Hot Chips会议官方网站:https://www.hotchips…

Prometheus 基于 Consul 实现服务自动发现注册

文章目录 一、概述二、docker-compose 部署 Prometheus1)部署 docker2)部署 docker-compose3)配置 prometheus.yml4)配置 rules.yml5)配置 alertmanager.yml6)编排 docker-compose yaml 文件7)开…

【Windows Defender 排除指定 文件夹、文件夹以提升性能】

使用webStorm时候提醒排出程序和目录提升性能, 于是我就把我的代码目录和常用程序全部排出, 不过不知道能不能提升多少性能, 先加上再说 一.使用UI配置排出项 隐私与安全性安全中心 病毒与威胁防护 添加或删除排出项 配置 二.使用命令配置 使用 PowerShell开启自动排除列表…

Redis数据结构对象之字符串对象

字符串对象 字符串对象的编码可以是int、raw或者embstr 如果一个字符串对象保存的是整数值,并且这个整数值可以用long类型来表示,那么字符串对象会将整数值保存在字符串对象结构的ptr属性里面(将void *转换成long),并且将字符串对象的编码设…

面试算法-39-删除链表的倒数第 N 个结点

题目 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5] 解 class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {L…

在idea中配置tomcat服务器,然后部署一个项日

1.下载tomcat Tomcat下载 点击右边的tomcat8 找到zip点击下载 下载完,解压到你想放置的路径下 2.配置环境变量 打开设置找到高级系统设置点击环境变量 点击新建,变量名输入:CATALINA_HOME,变量值就是Tomcat的安装路径&#x…

空间计算综合指南

空间计算(spatial computing)是指使人类能够在三维空间中与计算机交互的一组技术。 该保护伞下的技术包括增强现实(AR)和虚拟现实(VR)。 这本综合指南将介绍有关空间计算所需了解的一切。 你将了解 AR、VR…

Python 查找并高亮PDF中的指定文本

在处理大量PDF文档时,有时我们需要快速找到特定的文本信息。本文将提供以下三个Python示例来帮助你在PDF文件中快速查找并高亮指定的文本。 查找并高亮PDF中所有的指定文本查找并高亮PDF某个区域内的指定文本使用正则表达式搜索指定文本并高亮 本文将用到国产第三方…

【代码】提取图像轮廓坐标并保存为YOLOv8所需的txt格式

该段代码的应用场景为对图像标注过后,想要对图像进行裁切,但是标签不能裁切,所以将原图像按照标签进行二值化后,将二值化后的图像进行裁切,然后使用opencv对裁切后的图像进行处理,识别出白色区域轮廓&#…

1987-2022年各省专利申请授权数据(8个指标))

1987-2022年各省专利申请授权数据(8个指标)) 1、时间:1987-2023年 2、指标:国内专利申请受理量(项)、国内发明专利申请受理量(项)、国内实用新型专利申请受理量(项)、国内外观设计专利申请受理量(项)、国内专利申请授…

记录-gitlab-安装在k8s中的一些注意点

一、已有cert-manager的时候如何配置? 1、首先需要创建一个ClusterIssuer apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata:name: letsencrypt-staging spec:acme:# You must replace this email address with your own.# Lets Encrypt will use thi…

【linux】搜索所有目录和子目录下的包含.git的文件并删除

一、linux命令搜索所有目录和子目录下的包含.git的文件 在Linux系统中,要搜索所有目录和子目录下的包含.git的文件,可以使用find命令。find命令允许指定路径、表达式和操作来查找文件。 以下是使用find命令搜索包含.git的文件的方法: 1. 基…

react03

react03 修改脚手架创建的打包命令 根据scripts中的命令,执行npm run eject ,输入y, 如果对原始的脚手架文件有过改动需要进行将修改后的文件提交到git 历史区 ,防止暴露后的代码覆盖我们自己的文件 git 提交: git add . git commit -m ‘…

一起玩儿3D打印机——06 Marlin固件的配置(三)

摘要:本文介绍Marlin固件的配置方法 25. 启用EEPROM参数保存功能 #define EEPROM_SETTINGS 打开此功能,会将部分参数保存在打印机中,这样通过屏幕就可以进行调节,而无需重刷固件。 26. 启用板载SD卡支持 #define SDSUPPORT 如…

基于Matlab的图像去雾系统设计,Matlab实现

博主简介: 专注、专一于Matlab图像处理学习、交流,matlab图像代码代做/项目合作可以联系(QQ:3249726188) 个人主页:Matlab_ImagePro-CSDN博客 原则:代码均由本人编写完成,非中介,提供…

WebServer -- 八股(终章)

👂 Honey Honey - 孙燕姿 - 单曲 - 网易云音乐 目录 🌼触类旁通 🚩线程 && 进程 线程与进程的区别 多线程锁是什么 进程 / 线程 / 协程 的区别 线程切换时,需要切换的状态 🎂并发 && 并行 并…

Linux:系统初始化,内核优化,性能优化(1)

我们安装好了一个服务器之后,一定要对他的系统,内核,性能一系列进行一个优化,否则当大并发的情况下很可能出现问题,我把要优化的东西直接罗列出来并介绍,后期可以直接编写一个脚本拿到服务器上直接用就行 …