百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Spring系列面试题

nanshan 2025-03-13 18:29 12 浏览 0 评论

1. SpringMVC 的工作原理


1、用户发送请求到前端控制器(DispatcherServlet)。
2、前端控制器请求处理器映射器(HandlerMapping)去查找处理器(Handler)。
3、找到以后处理器映射器(HandlerMappering)向前端控制器返回执行链(HandlerExecutionChain)。
4、前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)去执行处理器(Handler)。
5、处理器适配器去执行Handler。
6、处理器执行完给处理器适配器返回ModelAndView。
7、处理器适配器向前端控制器返回ModelAndView。
8、前端控制器请求视图解析器(ViewResolver)去进行视图解析。
9、视图解析器向前端控制器返回View。
10、前端控制器对视图进行渲染。
11、前端控制器向用户响应结果。

2. springmvc常用注解

  1. @Controller
    @Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。
  2. @RequestMapping
    RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上
  3. @RequestBody 注解实现接收 http 请求的 json 数据,将 json 数据转换为 java 对象。
  4. @ResponseBody 注解实现将 controller 方法返回对象转化为 json 响应给客户。

3. 如何开启注解处理器和适配器?

我们在项目中一般会在 springmvc.xml 中通过开启 mvc:annotation-driven来实现注解处理器和适配器的开启。

4. 如何解决get 和 post 乱码问题?

解决 post 请求乱码:我们可以在 web.xml 里面配置一个 CharacterEncodingFilter 过滤器。 设置为 utf-8.
解决 get 请求的乱码:有两种方法。对于 get 请求中文参数出现乱码解决方法有两个:

  1. 修改 tomcat 配置文件添加编码与工程编码一致。
  2. 另 外 一 中 方 法 对 参 数 进 行 重 新 编 码 String userName = New
    String(Request.getParameter(“userName”).getBytes(“ISO8859-1”), “utf-8”);

5. 谈谈你对Spring 的理解

Spring 是一个 IOC 和 AOP 容器框架。
**控制反转(IOC),**传统的java开发模式中,当需要一个对象是,我们会用new或getInstance等直接或间接用构造方法创建一个对象。而在 spring 开发模式中,spring 容器使用了工厂模式为我们创建了所需要的对象,不需要我们自己创建了,直接调用spring 提供的对象就可以了,把原来new对象的这种方式转换成了,spring通过反射创建对象的方式
依赖注入(DI),spring 使用 javaBean 对象的 set 方法或者带参数的构造方法为我们在创建所需对象时将其属性自动设置所需要的值的过程,就是依赖注入的思想。
面向切面编程(AOP),在面向对象编程(oop)思想中,我们将事物纵向抽成一个个的对象。而在面向切面编程中,我们将一个个的对象某些类似的方面横向抽成一个切面,对这个切面进行一些如权限控制、事物管理,记录日志等公用操作处理的过程就是面向切面编程的思想。AOP 底层是动态代理,如果是接口采用 JDK 动态代理,如果是类采用CGLIB 方式实现动态代理。

6. Spring 能帮我们做什么

a. Spring 能帮我们根据配置文件创建及组装对象之间的依赖关系。
Spring 根据配置文件来进行创建及组装对象间依赖关系,只需要改配置文件即可
b. Spring 面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制。
Spring 面向切面编程能提供一种更好的方式来完成,一般通过配置方式,而且不需要在现有代码中添加任何额外代码,现有代码专注业务逻辑。
c. Spring 能非常简单的帮我们管理数据库事务。
采用 Spring,我们只需获取连接,执行 SQL,其他事物相关的都交给 Spring 来管理了。
d. Spring 还能与第三方数据库访问框架(如 Hibernate、JPA)无缝集成,而且自己也提供了一套 JDBC
访问模板,来方便数据库访问。
e. Spring 还能与第三方Web(如Struts、JSF)框架无缝集成,而且自己也提供了一套 SpringMVC
框架,来方便web 层搭建。
f. Spring 能方便的与 JavaEE(如JavaMail、任务调度)整合,与更多技术整合(比如缓存框架)。

7. 请描述一下Spring 的事务

声明式事务管理的定义用在 Spring 配置文件中声明式的处理事务来代替代码式的处理事务。这样的好处是,事务管理不侵入开发的组件,具体来说,业务逻辑对象就不会意识到正在事务管理之中,事实上也应该如此,因为事务管理是属于系统层面的服务,而不是业务逻辑的一部分,如果想要改变事务管理策划的话,也只需要在定义文件中重新配置即可,这样维护起来极其方便。

8.什么是事务的特性?事务的隔离级别?

事务的特性(ACID)
原子性: 一个事务是最小的执行单元,不可以分割
一致性: 事务指定的前后,数据要保持一致.
持久性: 事务一旦提交或回滚,在数据库中持久的改变
隔离性: 隔离性用来保证多个用户来操作数据库的同一份数据,不会受到相关干扰的特性.


并发问题
》(1)脏读: 一个事务读到了另一个事务的还没有提交数据.
》(2)不可重复读 一个事务中多次读到的数据不一致.一个事务读到了另一个事务修改后的数据.
》(3)幻读(虚读): 一个事务读到了insert的数据.

8. BeanFactory 常用的实现类有哪些

Bean 工厂是工厂模式的一个实现,提供了控制反转功能,用来把应用的配置和依赖从正真的应用代码中分离。常用的 BeanFactory 实现有
DefaultListableBeanFactory 、 XmlBeanFactory 、 ApplicationContext 等。XMLBeanFactory,最常用的就是
org.springframework.beans.factory.xml.XmlBeanFactory ,它根据 XML 文件中的定义加载 beans。该容器从 XML 文件读取配置元数据并用它去创建一个完全配置的系统或应用。

9. 什么是Spring IOC 容器?

IOC 控制反转:Spring IOC 负责创建对象,管理对象。通过依赖注入(DI),装配对象,配置对象,并且管理这些对象的整个生命周期。

10. IOC 的优点是什么?

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

11 ApplicationContext 的实现类有哪些?


FileSystemXmlApplicationContext
:此容器从一个XML 文件中加载beans 的定义,XML Bean 配置文件的全路径名必须提供给它的构造函数。

ClassPathXmlApplicationContext
:此容器也从一个 XML 文件中加载 beans 的定义,这里,你需要正确设置
classpath 因为这个容器将在 classpath 里找 bean 配置。
WebXmlApplicationContext:此容器加载一个 XML 文件,此文件定义了一个WEB 应用的所有 bean。

12. 有哪些不同类型的 IOC(依赖注入)方式

Spring 提供了多种依赖注入的方式。

  1. Set 注入
  2. 构造器注入
  3. 静态工厂的方法注入
  4. 实例工厂的方法注入

13 Spring 框架中的单例 bean 是线程安全的吗?

Spring 框架中的单例bean 不是线程安全的
Spring框架并没有对单例bean进行任何多线程的封装处理。关于单例bean的线程安全和并发问题需要开发者自行去搞定。

14. 什么是bean 的自动装配?

无须在 Spring 配置文件中描述javaBean 之间的依赖关系(如配置、)。IOC 容器会自动建立javabean 之间的关联关系。

15 Spring 的通知是什么?有哪几种类型?

通知是个在方法执行前或执行后要做的动作,实际上是程序执行时要通过 SpringAOP 框架触发的代码段。
Spring 切面可以应用五种类型的通知:
1) before:前置通知,在一个方法执行前被调用。
2) after: 在方法执行之后调用的通知,无论方法执行是否成功。

3) after-returning: 仅当方法成功完成后执行的通知。4)after-throwing: 在方法抛出异常退出时执行的通知。5)around: 在方法执行之前和之后调用的通知。

16 什么是切点?什么是目标对象? 什么是代理?

切入点是一个或一组连接点,通知将在这些位置执行。可以通过表达式或匹配的方式指明切入点。
被一个或者多个切面所通知的对象。它通常是一个代理对象。也指被通知(advised)对象
代理是通知目标对象后创建的对象。从客户端的角度看,代理对象和目标对象是一样的。

17.Spring 的通知是什么?有哪几种类型

通知是个在方法执行前或执行后要做的动作,实际上是程序执行时要通过 SpringAOP 框架触发的代码段。
Spring 切面可以应用五种类型的通知:
1) before:前置通知,在一个方法执行前被调用。
2) after: 在方法执行之后调用的通知,无论方法执行是否成功。
3) after-returning: 仅当方法成功完成后执行的通知。
4)after-throwing: 在方法抛出异常退出时执行的通知。
5)around: 在方法执行之前和之后调用的通知。

18. 简单解释一下spring 的AOP

AOP(Aspect Oriented Programming),即面向切面编程可以说是 OOP(Object Oriented Programming, 面向对象编程)的补充和完善。OOP 引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过 OOP 允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性、异常处理和透明的持续性也都是如此,这种散布在各处的无关的代码被称为横切(cross cutting),在 OOP 设计中,它导致了大量代码的重复,而不利于各个模块的重用。
AOP 技术恰恰相反,
它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性
AOP 把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点, 与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似, 比如权限认证、日志、事物。AOP 的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。AOP 核心就是切面,它将多个类的通用行为封装成可重用的模块,该模块含有一组 API 提供横切功能。

相关推荐

0722-6.2.0-如何在RedHat7.2使用rpm安装CDH(无CM)

文档编写目的在前面的文档中,介绍了在有CM和无CM两种情况下使用rpm方式安装CDH5.10.0,本文档将介绍如何在无CM的情况下使用rpm方式安装CDH6.2.0,与之前安装C5进行对比。环境介绍:...

ARM64 平台基于 openEuler + iSula 环境部署 Kubernetes

为什么要在arm64平台上部署Kubernetes,而且还是鲲鹏920的架构。说来话长。。。此处省略5000字。介绍下系统信息;o架构:鲲鹏920(Kunpeng920)oOS:ope...

生产环境starrocks 3.1存算一体集群部署

集群规划FE:节点主要负责元数据管理、客户端连接管理、查询计划和查询调度。>3节点。BE:节点负责数据存储和SQL执行。>3节点。CN:无存储功能能的BE。环境准备CPU检查JDK...

在CentOS上添加swap虚拟内存并设置优先级

现如今很多云服务器都会自己配置好虚拟内存,当然也有很多没有配置虚拟内存的,虚拟内存可以让我们的低配服务器使用更多的内存,可以减少很多硬件成本,比如我们运行很多服务的时候,内存常常会满,当配置了虚拟内存...

国产深度(deepin)操作系统优化指南

1.升级内核随着deepin版本的更新,会自动升级系统内核,但是我们依旧可以通过命令行手动升级内核,以获取更好的性能和更多的硬件支持。具体操作:-添加PPAs使用以下命令添加PPAs:```...

postgresql-15.4 多节点主从(读写分离)

1、下载软件[root@TX-CN-PostgreSQL01-252software]#wgethttps://ftp.postgresql.org/pub/source/v15.4/postg...

Docker 容器 Java 服务内存与 GC 优化实施方案

一、设置Docker容器内存限制(生产环境建议)1.查看宿主机可用内存bashfree-h#示例输出(假设宿主机剩余16GB可用内存)#Mem:64G...

虚拟内存设置、解决linux内存不够问题

虚拟内存设置(解决linux内存不够情况)背景介绍  Memory指机器物理内存,读写速度低于CPU一个量级,但是高于磁盘不止一个量级。所以,程序和数据如果在内存的话,会有非常快的读写速度。但是,内存...

Elasticsearch性能调优(5):服务器配置选择

在选择elasticsearch服务器时,要尽可能地选择与当前业务量相匹配的服务器。如果服务器配置太低,则意味着需要更多的节点来满足需求,一个集群的节点太多时会增加集群管理的成本。如果服务器配置太高,...

Es如何落地

一、配置准备节点类型CPU内存硬盘网络机器数操作系统data节点16C64G2000G本地SSD所有es同一可用区3(ecs)Centos7master节点2C8G200G云SSD所有es同一可用区...

针对Linux内存管理知识学习总结

现在的服务器大部分都是运行在Linux上面的,所以,作为一个程序员有必要简单地了解一下系统是如何运行的。对于内存部分需要知道:地址映射内存管理的方式缺页异常先来看一些基本的知识,在进程看来,内存分为内...

MySQL进阶之性能优化

概述MySQL的性能优化,包括了服务器硬件优化、操作系统的优化、MySQL数据库配置优化、数据库表设计的优化、SQL语句优化等5个方面的优化。在进行优化之前,需要先掌握性能分析的思路和方法,找出问题,...

Linux Cgroups(Control Groups)原理

LinuxCgroups(ControlGroups)是内核提供的资源分配、限制和监控机制,通过层级化进程分组实现资源的精细化控制。以下从核心原理、操作示例和版本演进三方面详细分析:一、核心原理与...

linux 常用性能优化参数及理解

1.优化内核相关参数配置文件/etc/sysctl.conf配置方法直接将参数添加进文件每条一行.sysctl-a可以查看默认配置sysctl-p执行并检测是否有错误例如设置错了参数:[roo...

如何在 Linux 中使用 Sysctl 命令?

sysctl是一个用于配置和查询Linux内核参数的命令行工具。它通过与/proc/sys虚拟文件系统交互,允许用户在运行时动态修改内核参数。这些参数控制着系统的各种行为,包括网络设置、文件...

取消回复欢迎 发表评论: