Java面试题总结200道(三)

news2025/1/13 13:23:10

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 容器支持加载服务时的饿汉式初始化和懒加载。

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

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

相关文章

Windows Docker 部署 Solr 搜索引擎

一、简介 Solr 是 Apache 下的一个顶级开源项目,采用 Java 开发,它是基于 Lucene 的全文搜索服务器。Solr 可以独立运行在 Jetty、Tomcat 等这些 Servlet 容器中。Solr 提供了比 Lucene 更为丰富的查询语言,同时实现了可配置、可扩展&#x…

OpenHarmony4.0对RK3566的烧写过程

前面已经编译的过程搞了比较长的时间,因为遇到了不少问题,老是编译出错,后来经过努力还是编译成功了。 我这里主要针对RK3566的Purple Pi OH开发板,如下图: 因为开源鸿蒙里没有针对这个板的特殊配置,需要下载下面这个文件: purple-pi-oh-patch.zip 这个文件里包含了可…

(二)OpenOFDM频偏校正

频偏校正 This paper [1]解释了频率偏移发生的原因以及如何纠正它。简而言之,有两种类型的频率偏移。第一个称为载波频率偏移 (CFO),是由发射器和接收器的本地振荡器 (LO) 之间的差异引起的。这种偏移的症状是输入 I/Q 样本(时域&#xff09…

国际前十正规外汇实时行情走势app软件最新排名(综合版)

外汇交易,作为当今世界金融市场上一个重要的板块,备受关注和热议。随着金融市场的日益发展,外汇交易也发展成为一个新兴的投资交易渠道。为了更好地满足投资者对外汇市场的需求,外汇实时行情走势app软件应运而生,它为投…

R语言聚类分析-K均值聚类与系统聚类法

一、数据集为firm.csv,给出了22家美国公用事业公司的相关数据集,各数据集变量的名称和含义如下:X1为固定费用周转比(收入/债务),X2为资本回报率,X3为每千瓦容量成本,X4为年载荷因子&…

YOLOv9详解

1.概述 在逐层进行特征提取和空间转换的过程中,会损失大量信息,例如图中的马在建模过程中逐渐变得模糊,从而影响到最终的性能。YOLOv9尝试使用可编程梯度信息PGI解决这一问题。 具体来说, PGI包含三个部分,&#xff0…

LeetCode每日一题[C++]-310.最小高度树

题目描述 树是一个无向图,其中任何两个顶点只通过一条路径连接。 换句话说,一个任何没有简单环路的连通图都是一棵树。 给你一棵包含 n 个节点的树,标记为 0 到 n - 1 。给定数字 n 和一个有 n - 1 条无向边的 edges 列表(每一个…

数据过滤的练习

定义一个集合,并添加一些整数1,2,3,4,5,6,7,8,9,10,过滤奇数,只留下偶数,并将结果保存起来。 package MyStream;import j…

SAP Activate项目管理方法论路线图

SAP Activate 是 SAP 推出的一种基于敏捷方法论的灵活、快速且引导式的实施方法论,专为加速SAP S/4HANA和其他SAP解决方案的部署而设计。这个方法论结合了最佳实践、引导配置和方法论本身的强大能力,以确保项目的快速实施和成功部署。SAP Activate的核心…

MySQL中出现‘max_allowed_packet‘ variable.如何解决

默认情况下,MySQL的max_allowed_packet参数可能设置得相对较小,这对于大多数常规操作来说足够了。但是,当你尝试执行包含大量数据的操作(如大批量插入或大型查询)时,可能会超过这个限制,从而导致…

Bit的下载及安装和错误解决方案

文章目录 一、Git初识二、Git安装三、使用四、*可能出现的问题及解决方案1、vscode中没有Git Bash 一、Git初识 1、概念:一个免费开源、分布式的代码版本控制系统,帮助开发团队维护代码 2、作用:记录代码内容,切换代码版本&#x…

(官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell

前言 查了很多资料都不靠谱,在安装过程中遇到很多的坑,mangoDB 服务重视起不来;出现了很多难以解决的报错,现在把安装过程中遇到的问题,和如何闭坑说一下,很多时候都是准备工作不足导致的;很多方…

【论文笔记合集】ARIMA 非平稳过程通过差分转化为平稳过程

本文作者: slience_me 文章目录 ARIMA 非平稳过程通过差分转化为平稳过程文章原文具体解释详解参照 ARIMA 非平稳过程通过差分转化为平稳过程 文章原文 Many time series forecasting methods start from the classic tools [38, 10]. ARIMA [7, 6] tackles the fo…

【C/C++】C/C++招聘信息管理系统(源码)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

多线程(代码案例: 单例模式, 阻塞队列, 生产者消费者模型,定时器)

设计模式是什么 类似于棋谱一样的东西 计算机圈子里的大佬为了能让小菜鸡的代码不要写的太差 针对一些典型的场景, 给出了一些典型的解决方案 这样小菜鸡们可以根据这些方案(ACM里面叫板子, 象棋五子棋里叫棋谱, 咱这里叫 设计模式), 略加修改, 这样代码再差也差不到哪里去 … …

phpstudy搭建简单渗透测试环境upload-labs、DVWA、sqli-labs靶场

好久没有做渗透相关的试验了,今天打开phpstudy发现很多问题,好多环境都用不了,那就卸载重装吧,顺便记录一下。 小皮下载地址: https://www.xp.cn/download.html 下载安装完成 一、下载搭建upload-labs环境 github…

基于Linux内核的共享内存C语言示例

本篇文章用C语言完成这样一个功能:创建一块共享内存,然后开辟2个进程。用户在后台控制父进程,输入字符串,父进程会往共享内存里写这段内容。子进程每秒钟去读一次共享内存的内容,然后将读到的内容打印出来。全篇使用C语…

030—pandas 对数据透视并将多层索引整合为一列

使用步骤 读入数据 代码如下(示例): import pandas as pd import random guojia [中国,美国,英国,加拿大] shuiguo [火龙果,西瓜,苹果,梨子] nianfen [2012,2014,2016,2015,2013] df pd.DataFrame({国家: [random.choice(guojia) for …

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Search)

搜索框组件,适用于浏览器的搜索内容输入框等应用场景。 说明: 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 无 接口 Search(options?: { value?: string, placeholder?: Reso…

MySQL | 表的约束

目录 1. 空属性 NULL 2. 默认值 DEFAULT 3. 列描述comment 4. zerofill 5. 主键 PRIMARY KEY 6. 自增长AUTO_INCREMENT 7. 唯一键UNIQUE 8. 外键 真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数…