SSM框架测试题整理(上)

仅供个人学习使用

目录

1. 何为Spring Bean容器?Spring Bean容器与Spring IOC 容器有什么不同吗?

2. Spring IOC 如何理解?

3. Spring DI 如何理解?

4. Spring 中基于注解如何配置对象作用域?以及如何配置延迟加载机制?

5. Spring 工厂底层构建Bean对象借助什么机制?当对象不使用了要释放资源,目的是什么?何为内存泄漏?

6. 描述Spring MVC处理流程及应用优势?

7. Spring中的事务处理方式及优缺点?

8. MyBatis应用中#与$有什么异同点?

9. MyBatis应用动态SQL解决了什么问题?

10. Shiro框架权限管理时的认证和授权流程描述?

11. BeanFactory和ApplicationContext有什么区别?

12. 请解释Spring Bean的生命周期?

13. Spring Bean的作用域之间有什么区别?

14. 在Spring AOP 中,关注点和横切关注的区别是什么?

15. 使用Spring框架的好处是什么?

16. Spring 中用到了那些设计模式?

 17. Spring 如何保证 Controller 并发的安全?

18. 在 Spring中如何注入一个java集合?

19. Spring支持的事务管理类型?

 20. Spring框架的事务管理有哪些优点?

21. Spring MVC的主要组件?

22. SpringMvc怎么和AJAX相互调用的?

23. mybatis的缓存机制,一级,二级介绍一下?

24. springMVC与Struts2的区别?

25. mybatis的基本工作流程?

26. 什么是MyBatis的接口绑定,有什么好处?

27.JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的?


1. 何为Spring Bean容器?Spring Bean容器与Spring IOC 容器有什么不同吗?

  • Spring Bean容器是Spring框架的核心,负责实例化、配置和组装对象。这些对象被称为Beans,它们由Spring IoC容器管理。IoC(控制反转)是一种设计原则,用于降低计算机代码之间的耦合度,Spring IoC容器是实现这一原则的框架。
  • Spring Bean容器和Spring IoC容器实际上是同一个概念,只是不同的叫法。在Spring中,IoC容器负责管理Bean的生命周期和依赖关系。

2. Spring IOC 如何理解?

 Spring IoC容器是一个管理对象的工厂,它负责创建对象、管理对象的生命周期、配置对象以及管理对象之间的依赖关系。IoC容器通过读取配置元数据(例如XML配置文件、注解或Java配置类)来了解需要创建哪些对象,以及如何配置它们。

3. Spring DI 如何理解?

DI(依赖注入)是IoC的一个核心组成部分,它是一种实现IoC的技术。DI允许对象之间的依赖关系被注入到对象中,而不是由对象自己创建或查找依赖。这通常通过构造函数注入、字段注入或setter注入实现。 

4. Spring 中基于注解如何配置对象作用域?以及如何配置延迟加载机制?

  • 在Spring中,可以通过@Scope注解来配置对象的作用域,例如@Scope("singleton")表示单例模式,@Scope("prototype")表示原型模式。
  • 延迟加载机制可以通过@Lazy注解实现,它告诉Spring容器在首次请求Bean时才创建Bean,而不是在启动时。

5. Spring 工厂底层构建Bean对象借助什么机制?当对象不使用了要释放资源,目的是什么?何为内存泄漏?

  • Spring工厂底层构建Bean对象主要借助于工厂模式和反射机制。工厂模式用于创建对象,反射用于在运行时动态地创建对象和调用方法。
  • 当对象不使用时释放资源的目的是为了避免内存泄漏。内存泄漏是指程序在申请内存后,无法释放已经申请的内存空间,导致内存的浪费,最终可能导致程序崩溃或系统性能下降。

6. 描述Spring MVC处理流程及应用优势?

  • Spring MVC处理流程大致如下:用户发送请求 -> 前端控制器DispatcherServlet接收请求 -> HandlerMapping将请求映射到对应的处理器(Controller)-> Controller处理请求并返回ModelAndView -> ViewResolver解析视图 -> 返回响应给用户。
  • 应用优势包括:分离关注点、模块化和可测试性、灵活性和可扩展性、集成其他视图技术等。

7. Spring中的事务处理方式及优缺点?

  • 处理方式:
    • 编程式事务管理:通过编码方式直接使用PlatformTransactionManager来管理事务,这种方式灵活但代码重复且难以维护。
    • 声明式事务管理:使用AOP在方法上添加事务属性,这是最常见的方式,通过@Transactional注解来声明事务的边界和属性。
  • 优点:
    • 声明式事务管理减少了样板代码,使业务代码更清晰。
    • 事务管理与业务逻辑分离,提高了代码的可维护性。
    • 可以灵活地配置事务属性,如隔离级别、传播行为等。
  • 缺点:
    • 声明式事务可能不如编程式事务灵活,因为它依赖于框架的配置。
    • 如果配置不当,可能会导致事务行为不符合预期。

8. MyBatis应用中#与$有什么异同点?

  • #{}:
    • 用于预处理语句(prepared statements),可以防止SQL注入攻击。
    • MyBatis会将传入的参数与SQL语句中的占位符替换时进行转义处理。
  • ${}:
    • 直接将传入的参数拼接到SQL中,容易受到SQL注入攻击。
    • 通常用于那些无法使用预处理语句的场景,如动态表名、列名、排序字段等。
  • 异同点:
    • 相同点:都是用来替换SQL语句中的参数。
    • 不同点:#{}是安全的参数替换方式,而${}则不安全;${}可以用于动态SQL,而#{}不行。

9. MyBatis应用动态SQL解决了什么问题?

  • 动态SQL解决了在不同情况下需要执行不同SQL语句的问题,它允许在运行时根据条件构建SQL语句。
  • 它使得SQL语句更加灵活,可以根据业务逻辑的变化快速调整SQL,而不需要修改数据库结构或重新编写大量的SQL代码。
  • 动态SQL通过 <if><choose><when><otherwise> 等标签实现了条件判断和分支选择,使得SQL语句可以根据复杂的业务逻辑动态生成。

10. Shiro框架权限管理时的认证和授权流程描述?

  • 认证(Authentication):
    • 用户提供身份信息,如用户名和密码。
    • Shiro通过Realm来验证这些信息,Realm负责与数据库或其他数据源交互以确认用户身份。
    • 如果验证成功,Shiro会创建一个Subject实例,代表当前用户的安全上下文。
  • 授权(Authorization):
    • 一旦用户被认证,Shiro会根据用户的角色或权限来确定他们可以访问哪些资源。
    • 授权可以在代码中通过编程方式检查,也可以通过注解或配置文件来定义。
    • Shiro支持细粒度的权限控制,包括角色基础的权限控制和权限基础的权限控制。

11. BeanFactory和ApplicationContext有什么区别?

  • BeanFactory是Spring框架的基础设施,提供配置框架和基本功能,是Spring的核心接口。
  • ApplicationContextBeanFactory的子接口,提供了更多高级功能,如事件传播、国际化消息支持、资源访问等。
  • ApplicationContext通常用于应用程序的整个生命周期,而BeanFactory更多用于轻量级的容器。
  • ApplicationContext支持更多的Bean后处理机制,如BeanPostProcessor

12. 请解释Spring Bean的生命周期?

  • 实例化: Bean的定义被加载并实例化。
  • 属性赋值: 设置Bean属性和依赖。
  • BeanNameAware, BeanFactoryAware: 如果Bean实现了这些接口,它们的相关方法会被调用。
  • InitializingBean, init-method: 如果Bean实现了InitializingBean接口或指定了init-method,它们的初始化方法会被调用。
  • 使用Bean: 完成初始化后,Bean可以被应用程序使用了。
  • DisposableBean, destroy-method: 当容器关闭时,如果Bean实现了DisposableBean接口或指定了destroy-method,它们的销毁方法会被调用。

13. Spring Bean的作用域之间有什么区别?

  • singleton(单例): 默认作用域,每个Spring IoC容器中相同Bean定义只创建一个Bean实例。
  • prototype(原型): 每次请求都会创建一个新的Bean实例。
  • request: 每个HTTP请求都会创建一个新的Bean,仅适用于WebApplicationContext环境。
  • session: 在一个HTTP Session中,一个Bean定义对应一个Bean实例。
  • application: 每个ServletContext会创建一个Bean实例,仅适用于WebApplicationContext环境。
  • websocket: 对于每个WebSocket会话,一个Bean定义对应一个Bean实例,仅适用于WebApplicationContext环境。

14. 在Spring AOP 中,关注点和横切关注的区别是什么?

  • 关注点(Concern): 在软件工程中,关注点是指在特定场景下需要考虑的特定功能或行为。例如,日志记录、事务管理、安全性等都可以是关注点。
  • 横切关注(Cross-cutting concern): 横切关注是指那些影响多个模块或组件的关注点,它们通常会跨越整个应用的多个点。在Spring AOP中,横切关注通常通过切面(Aspect)来实现,切面定义了横切关注点的逻辑,并可以应用到多个不同的业务逻辑上。

15. 使用Spring框架的好处是什么?

  • 简化开发: 提供了丰富的模板代码,减少了手动配置和编码的工作量。
  • 松耦合: 通过依赖注入(DI)和面向切面编程(AOP),Spring帮助开发者实现组件之间的松耦合。
  • 声明式事务管理: 提供了简单而强大的事务管理机制。
  • 集成多种技术: 可以轻松集成各种不同的技术,如JPA、Hibernate、JMS等。
  • 测试友好: 支持模拟对象和测试,使得单元测试更加容易。
  • 灵活性: 提供了多种配置方式,包括XML、注解和Java配置。
  • 社区和文档: 拥有一个活跃的社区和丰富的文档资源。

16. Spring 中用到了那些设计模式?

  • 工厂模式: 通过BeanFactory创建对象实例。
  • 单例模式: Spring容器默认以单例模式创建Bean。
  • 代理模式: AOP功能使用代理模式来动态地添加额外的行为。
  • 策略模式: 通过不同的策略实现不同的行为。
  • 模板方法模式: 在数据访问对象(DAO)支持中,提供了模板方法定义了操作的骨架。
  • 观察者模式: 应用事件传播机制中使用。
  • 装饰器模式: 通过BeanPostProcessorBeanFactoryPostProcessor等后处理器增强Bean。

 17. Spring 如何保证 Controller 并发的安全?

  • 无状态: 确保Controller是无状态的,这样多个请求可以在不同的线程中并发处理同一个Controller实例。
  • 线程安全: 使用线程安全的类和方法,或者避免在Controller中使用全局状态。
  • 局部变量: 使用局部变量来存储每个请求的状态。
  • 同步: 对于需要同步访问的资源,使用同步代码块或锁。
  • 并发注解: 使用@Synchronized注解(非Spring官方提供)来同步方法。

18. 在 Spring中如何注入一个java集合?

  • 可以通过XML配置或注解来注入集合类型的Bean。例如,使用@Autowired注解和ListSet等集合类型。
  • 在XML配置中,可以使用<list><set><map>标签来定义集合,并注入到Bean的属性中。
  • 也可以使用@PropertySource注解指定属性文件,并使用@Property注解将属性文件中的值注入到集合中。

19. Spring支持的事务管理类型?

  • 编程式事务管理: 通过PlatformTransactionManager编程式地管理事务。
  • 声明式事务管理: 使用@Transactional注解来声明事务边界和属性。
  • 基于XML的声明式事务管理: 在XML配置文件中使用<tx:*>标签定义事务属性。
  • 基于注解的声明式事务管理: 使用@Transactional注解在类或方法上声明事务属性。

 20. Spring框架的事务管理有哪些优点?

  • 简化编程模型: 通过声明式事务管理简化了事务代码。
  • 一致性: 通过统一的事务管理API,确保了事务管理的一致性。
  • 可重用性: 事务管理代码可以跨不同的应用和组件重用。
  • 可扩展性: 支持多种事务管理器,如JTA、JPA、Hibernate等。
  • 非侵入性: 事务管理不依赖于特定的ORM框架,可以与任何数据访问技术一起使用。
  • 灵活的事务属性配置: 可以灵活地配置事务的隔离级别、传播行为等属性。

21. Spring MVC的主要组件?

  • DispatcherServlet: 作为前端控制器,它接收所有的HTTP请求,并将其转发到具体的Controller处理。
  • Controller: 处理用户的请求,并返回ModelAndView或直接返回视图。
  • Model: 包含应用程序数据,通常作为Controller的输出和视图的输入。
  • View: 负责展示数据,可以是JSP、Thymeleaf、Freemarker等模板引擎生成的HTML页面。
  • ViewResolver: 用于解析具体的View。
  • HandlerMapping: 负责映射Web请求到对应的Controller。
  • HandlerAdapter: 负责将Handler(Controller)的输出转换为ModelAndView。
  • ModelAndView: 包含模型数据和视图信息。
  • HttpServletRequest 和 HttpServletResponse: 表示HTTP请求和响应对象。

22. SpringMvc怎么和AJAX相互调用的?

  • 在Spring MVC中,可以通过在Controller中添加方法来处理AJAX请求。这些方法通常返回@ResponseBody注解的数据,这些数据可以直接被AJAX调用处理。
  • 在前端,使用JavaScript(或jQuery等库)发起AJAX请求,并将请求发送到Spring MVC的Controller。
  • Controller处理请求后,返回JSON或XML格式的响应数据,AJAX调用接收这些数据并进行相应的处理,如更新页面元素。

23. mybatis的缓存机制,一级,二级介绍一下?

  • 一级缓存(Local Cache): 也称为SqlSession级别的缓存,每个SqlSession都有自己的一级缓存,当查询相同的Namespace和SQL时,会直接从一级缓存中获取数据,而不是再次查询数据库。
  • 二级缓存(Global Cache): 可以跨SqlSession共享,需要手动开启。二级缓存可以减少对数据库的访问次数,提高性能。但是,它也增加了复杂性,并且需要处理缓存的一致性问题。

24. springMVC与Struts2的区别?

  • 入口不同: Spring MVC使用DispatcherServlet作为前端控制器,而Struts2使用Filter作为入口。
  • 配置方式: Spring MVC支持注解和XML配置,而Struts2主要使用XML配置。
  • 拦截器: Struts2使用拦截器(Interceptor)机制,Spring MVC使用Aspect Oriented Programming (AOP)。
  • 标签库: Struts2提供了丰富的标签库,而Spring MVC没有。
  • 结果视图: Spring MVC支持多种视图技术,而Struts2主要使用JSP。

25. mybatis的基本工作流程?

  • 配置MyBatis和数据源。
  • 通过SqlSessionFactoryBuilder创建SqlSessionFactory。
  • 通过SqlSessionFactory创建SqlSession。
  • 通过SqlSession执行命令,查询数据库或插入、更新数据。
  • 通过Executor执行SQL语句。
  • 将结果集映射到Java对象。
  • 提交事务或回滚。
  • 关闭SqlSession。

26. 什么是MyBatis的接口绑定,有什么好处?

  • 接口绑定是指MyBatis通过接口和XML映射文件将SQL语句与Java方法关联起来。
  • 好处包括:提高了代码的可读性和可维护性,使得SQL语句与Java代码分离,便于管理。

27.JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的?

  • JDBC的不足: 代码重复性高,数据库操作代码与业务逻辑代码耦合,缺乏足够的灵活性。
  • MyBatis的解决方案: 提供了SQL映射文件,减少了代码重复;将数据库操作与业务逻辑分离;通过XML或注解配置SQL语句,提高了灵活性。
  1. MyBatis的优缺点?
  • 优点: 性能好,灵活,支持动态SQL,易于维护和学习。
  • 缺点: 需要手动编写SQL语句,对于复杂的查询可能需要编写大量的XML配置,可能会增加开发工作量。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day18 结构体

有参宏和函数的区别 1.展开时机&#xff1a;有参宏而言&#xff0c;在预处理阶段展开&#xff0c;而函数在调用时才展开 2.内存使用&#xff1a;有参宏而言&#xff0c;占用的是所在函数的空间&#xff0c;而函数在调用时会单独开辟空间 3.效率上&#xff1a;有参宏的效率比…

44.扫雷第二部分、放置随机的雷,扫雷,炸死或成功 C语言

按照教程打完了。好几个bug都是自己打出来的。比如统计周围8个格子时&#xff0c;有一个各自加号填成了减号。我还以为平移了&#xff0c;一会显示是0一会显示是2。结果单纯的打错了。debug的时候断点放在scanf后面会顺畅一些。中间多放一些变量名方便监视。以及mine要多显示&a…

docker 通过Dockerfile自定义的镜像部署Springboot项目

一、镜像结构介绍&#xff1a; 镜像&#xff1a;层&#xff08;Layer&#xff09;添加安装包、依赖、配置等&#xff0c;每一次操作都形成新的一层&#xff1b;基础镜像&#xff08;BaseImage&#xff09;应用依赖的系统函数库、环境、配置、文件等&#xff1b;入口&#xff0…

全网最早Towards Generalizable Multi-Object Tracking—通用跟踪器的点跟踪CVPR2024

Towards Generalizable Multi-Object Tracking—迈向可推广的多目标跟踪 原标题&#xff1a;Towards Generalizable Multi-Object Tracking 论文链接&#xff1a;https://arxiv.org/pdf/2406.00429 代码链接&#xff1a;https://github.com/qinzheng2000/GeneralTrack.git 作者…

MyBatis框架-动态SQL-XML中的常用标签+特殊字符在XML中的显示

一、if标签、where标签、trim标签、choose标签、set标签、foreach标签 1、问题引入&#xff1a;where关键字和and关键字在动态SQL里面应该如何添加&#xff1f; &#xff08;1&#xff09;if标签&#xff1a; test属性的值是判断条件 if标签里面的内容是条件成立时添加到SQ…

探秘嵌入式位运算:基础与高级技巧

目录 一、位运算基础知识 1.1. 位运算符 1.1.1. 与运算&#xff08;&&#xff09; 1.1.2. 或运算&#xff08;|&#xff09; 1.1.3. 异或运算&#xff08;^&#xff09; 1.1.4. 取反运算&#xff08;~&#xff09; 1.1.5. 双重按位取反运算符&#xff08;~~&#xf…

渗透测试笔记—shodan(7完结)

声明&#xff1a; 学习视频来自B站up主 【泷羽sec】有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&am…

2024年最新版Java八股文复习

最新版本Java八股文复习&#xff0c;每天更新一篇&#xff0c;博主正在持续努力更新中~~~ 一、Java基础篇1、怎么理解面向对象&#xff1f;简单说说封装、继承、多态三大特性&#xff1f;2、多态体现在哪几个方面&#xff1f;3、面向对象的设计原则你知道有哪些吗&#xff1f;4…

Notepad++ 替换所有数字给数字加单引号

前言 今天遇到这样一个场景&#xff1a; 要去更新某张表里 code1,2,3,4,5,6 的数据&#xff0c;把它的 name 设置为 ‘张三’ 但是 code在数据库里面的字段类型是 vachar(64)&#xff0c;它自身携带索引 原本可以这样写 SQL: update tableA set namezhangsan where code in …

前端图像处理(一)

目录 一、上传 1.1、图片转base64 二、图片样式 2.1、图片边框【border-image】 三、Canvas 3.1、把canvas图片上传到服务器 3.2、在canvas中绘制和拖动矩形 3.3、图片(同色区域)点击变色 一、上传 1.1、图片转base64 传统上传&#xff1a; 客户端选择图片&#xf…

推荐一款龙迅HDMI2.0转LVDS芯片 LT6211UX LT6211UXC

龙迅的HDMI2.0转LVDS芯片LT6211UX和LT6211UXC是两款高性能的转换器芯片&#xff0c;它们在功能和应用上有所差异&#xff0c;同时也存在一些共同点。以下是对这两款芯片的详细比较和分析&#xff1a; 一、LT6211UX 主要特性&#xff1a; HDMI2.0至LVDS和MIPI转换器。HDMI2.0输…

51单片机从入门到精通:理论与实践指南入门篇(二)

续51单片机从入门到精通&#xff1a;理论与实践指南&#xff08;一&#xff09;https://blog.csdn.net/speaking_me/article/details/144067372 第一篇总体给大家在&#xff08;全局&#xff09;总体上讲解了一下51单片机&#xff0c;那么接下来几天结束详细讲解&#xff0c;从…

STM32C011开发(3)----Flash操作

STM32C011开发----3.Flash操作 概述硬件准备视频教学样品申请源码下载参考程序生成STM32CUBEMX串口配置堆栈设置串口重定向FLASH数据初始化FLASH 读写演示 概述 STM32C011 系列微控制器内置 Flash 存储器&#xff0c;支持程序存储与数据保存&#xff0c;具备页面擦除、双字写入…

IDEA无法创建java8、11项目创建出的pom.xml为空

主要是由于Spring3.X版本不支持JDK8&#xff0c;JDK11&#xff0c;最低支持JDK17 解决的话要不就换成JDK17以上的版本&#xff0c;但是不太现实 另外可以参考以下方式解决 修改spring初始化服务器地址为阿里云的 https://start.aliyun.com/

【Unity3D】创建自定义字体

前置准备 如图所示&#xff0c;项目工程中需要用文件夹存储0-9的Sprite图片。 使用流程 直接右键存放图片的文件夹&#xff0c;选择【创建自定义字体】&#xff0c;之后会在脚本定义的FontOutputPath中生成材质球和字体。 源码 using System; using System.Collections.Gene…

logminer挖掘日志归档查找问题

--根据发生问题时间点查找归档文件 select first_time,NAME from gv$archived_log where first_time>2016-03-15 17:00:00 and first_time<2016-03-15 21:00:00; 2016-03-15 17:23:55 ARCH/jxdb/archivelog/2016_03_15/thread_1_seq_41588.4060.906577337 2016-03-15 17:…

电商项目高级篇06-缓存

电商项目高级篇06-缓存 1、docker下启动redis2、项目整合redis 缓存 流程图&#xff1a; data cache.load(id);//从缓存加载数据 If(data null){ data db.load(id);//从数据库加载数据 cache.put(id,data);//保存到 cache 中 } return data;在我们的单体项目中可以用Map作…

如何使用GCC手动编译stm32程序

如何不使用任何IDE&#xff08;集成开发环境&#xff09;编译stm32程序? 集成开发环境将编辑器、编译器、链接器、调试器等开发工具集成在一个统一的软件中&#xff0c;使得开发人员可以更加简单、高效地完成软件开发过程。如果我们不使用KEIL,IAR等集成开发环境&#xff0c;…

一个专为云原生环境设计的高性能分布式文件系统

大家好&#xff0c;今天给大家分享一款开源创新的分布式 POSIX 文件系统JuiceFS&#xff0c;旨在解决海量云存储与各类应用平台&#xff08;如大数据、机器学习、人工智能等&#xff09;之间高效对接的问题。 项目介绍 JuiceFS 是一款面向云原生设计的高性能分布式文件系统&am…

Vue-TreeSelect组件最下级隐藏No sub-options

问题&#xff1a;最下级没有数据的话&#xff0c;去除No sub-options信息 为什么没下级&#xff0c;会展示这个&#xff1f; 整个树形结构数据都是由后端构造好返回给前端的。默认子类没数据的话&#xff0c;children是一个空数组。也就是因为这最下级的空数组&#xff0c;导致…