文章目录
- 2021年Spring面试题70道
- 面试题系列文章传送门
-
- Spring面试题内容
-
- 1. 谈谈你对Spring的理解?
- 2. Spring的特点是什么?
- 3. Spring的优缺点是什么?
- 4. Spring由哪些模块组成?
- 5. 详细讲解一下核心容器(spring context应用上下文) 模块
- 6. 解释AOP模块
- 7. 解释JDBC抽象和DAO模块
- 8. 解释对象/关系映射集成(ORM)模块
- 9. 解释WEB模块
- 10. Spring配置文件
- 11. 什么是Spring IoC 容器。
- 12. 控制反转(IoC)有什么作用
- 13.控制反转(IoC)的优点是什么?
- 14. Spring IoC 的实现机制
- 15. Spring 的 IoC支持哪些功能
- 16. ApplicationContext 通常的实现是什么?
- 17. BeanFactory和 Application contexts 有什么区别?
- 18. 一个 Spring 的应用看起来像什么?
- 19. 什么是Spring的依赖注入(DI)?
- 20. 依赖注入的基本原则?
- 21. 依赖注入有什么优势
- 22. 有哪些不同类型的依赖注入方式,推荐使用哪种?
- 23. 什么是 Spring Beans ?
- 24. 一个 Spring Bean 定义包含什么?
- 25. 如何给 Spring 容器提供配置元数据?
- 26. 你怎样定义类的作用域?
- 27. 解释 Spring 支持的几种bean的作用域?
- 28. Spring 框架中的单例 bean是线程安全的吗?
- 29. 解释 Spring 框架中 bean 的生命周期
- 30. 哪些是重要的 bean 生命周期方法?你能重载它们吗?
- 31. 什么是 Spring 的内部 bean(什么是Spring inner beans)?
- 32. 在 Spring 中如何注入一个 java 集合?
- 33. 什么是bean的装配?
- 34. 什么是 bean 的自动装载?
- 35. 解释不同方式的自动装配
- 36. 自动装配有哪些局限性?
- 37. 你可以在Spring中注入一个null 和一个空字符串吗?
- 38. 什么是基于 java 的 Spring 注解配置?给一些注解的例子
- 39. 什么是基于注解的容器配置
- 40. 怎样开启注解装配?
- 41. @Required 注解
- 42. @Autowired 注解
- 43. @Qualifier 注解
- 44. @RequestMapping 注解
- 45. @Autowired和@Resource之间的区别
- 46. 在 Spring 框架中如何更有效地使用JDBC
- 47. 什么是JdbcTemplate?
- 48. Spring 对数据访问对象(DAO)的支持?
- 49. Spring 支持的事务管理类型
- 50. Spring事务的实现方式和实现原理
- 51. 事务的ACID是指什么?
- 52. Spring事务的五种事务隔离级别?
- 53. 什么是脏读、不可重复读、幻读?
- 54. Spring事务的7种传播级别?
- 55. Spring 框架的事务管理有哪些优点 ?
- 56. 你更倾向使用哪种事务管理类型?
- 57. 解释 AOP?
- 58. Spring AOP and AspectJ AOP 有什么区别?AOP 有哪些实现方式?
- 59. JDK动态代理和CGLIB动态代理的区别?
- 60. 什么是代理?
- 61. 解释一下Spring AOP里面的几个名词?
- 62. Spring通知有哪些类型?
- 63. 在 Spring AOP 中,关注点和横切关注点的区别是什么?
- 64. 什么是(Aspect)切面?
- 65. 有几种不同类型的自动代理?
- 66. 解释基于注解的切面实现?
- 67. Spring 框架中都用到了哪些设计模式?
- 68. Spring基于XML注入bean的几种方式?
- 69. @Component, @Controller, @Repository, @Service 有何区别?
- 70. Spring如何处理线程并发问题?
2021年Spring面试题70道
前言
作为应届生,处于找工作中。今年2月份刚刚整理出来的Spring面试题,时间比较赶就没有按照Spring的模块比如aop、ioc那些分类排序了。总而言之,顺序比较乱,希望大家耐着性子 看。如果实在介意,评论告知,我会视情况作修改的。另外如果大家觉得我找的答案不够清晰,欢迎私信或者评论只出,我看到都会去修改的!
面试题系列文章传送门
Spring面试题内容
1. 谈谈你对Spring的理解?
Spring框架是一个轻量级的开源框架,是核心容器、数据访问与集成、AOP、Web、消息、测试六个模块的集成,主要是为了简化企业级应用的后台开发,降低耦合性。平时接触到最多的还是IoC和AOP两个特性。IoC指的是控制反转,把对象的创建和依赖关系的维护交给Spring容器去管理。Spring通过工厂模式、反射机制等技术管理对象的作用域和生命周期。AoP一般称为面向切面编程,是面向对象的一种补充,将程序中独立于其他功能的方法抽取出来,使Java开发模块化,仅需专注于主业务即可
2. Spring的特点是什么?
轻 量、控 制 反 转、面 向 切 面 的 编 程(AOP)、容 器、MVC 框 架、事 务 管 理、异 常 处 理
3. Spring的优缺点是什么?
- 优点
- 方便解耦,简化开发
- 可以将对象的创建和依赖关系的维护交给Spring管理。
- 提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能。
- 声明式事务的支持
- 只需要通过配置就可以完成对事务的管理,而无需手动编程。
- 可以通过注解方便的测试程序。
- 内部提供了对各种优秀框架的直接支持,方便集成各种优秀框架。
- 降低 JavaEE API 的使用难度
- 缺点
- Spring明明一个很轻量级的框架,却给人感觉大而全
- Spring依赖反射,反射影响性能
- 使用门槛过高,入门Spring需要较长时间
4. Spring由哪些模块组成?
Spring 总共有 20 个模块, 由 1300 多个不同的文件构成。 而这些组件被分别整合在核心容器 、 AOP和设备支持 、数据访问与集成 、 Web、 消息 、 测试 6 个模块中
5. 详细讲解一下核心容器(spring context应用上下文) 模块
这是基本的 Spring 模块,提供 spring 框架的基础功能, BeanFactory 是任何以 spring 为基础的应用的核心.它使 Spring 成为一个容器 。BeanFactory是工厂模式的一个实现,提供了控制反转功能,用来把应用的配置和依赖从真正的应用代码中分离。最常用的就是org.springframework.beans.factory.xml.XmlBeanFactory ,它根据XML文件中的定义加载beans。该容器从XML 文件读取配置元数据并用它去创建一个完全配置的系统或应用。
6. 解释AOP模块
AOP 模块用于 Spring 应用做面向切面的开发,很多支持由 AOP 联盟提供,这样就确保了 Spring和其他 AOP 框架的共通性。AOP模块将元数据编程引入Spring。
7. 解释JDBC抽象和DAO模块
通过使用JDBC抽象和 DAO 模块,保证数据库代码的简洁,并能避免数据库资源错误关闭导致的问题, 它在各种不同的数据库的错误信息之上,提供了一个统一的异常访问层。它还利用 Spring 的 AOP 模块给 Spring 应用中的对象提供事务管理服务。
8. 解释对象/关系映射集成(ORM)模块
- Spring 通过提供ORM模块,支持我们直接在JDBC 之上使用一个对象/关系映射(ORM)工具。
- Spring 支持集成主流的 ORM 框架。
- Spring 的事务管理同样支持主流的 ORM 框架及 JDBC。
9. 解释WEB模块
Spring 的 WEB 模块是构建在 application context 模块基础之上,提供一个适合 web 应用的上下文。
10. Spring配置文件
Spring 配置文件是个XML文件,这个文件包含了类信息,描述了如何配置它们,以及如何相互调用。
11. 什么是Spring IoC 容器。
控制反转即IoC ,它把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现组件对象的装配和管理。所谓的“控制反转”概念就是对组件对象控制权的转移,从程序代码本身转移到了外部容器。Spring IOC 负责创建对象,管理对象,装配对象,配置对象,并且管理这些对象的整个生命周期。
12. 控制反转(IoC)有什么作用
- 管理对象的创建和依赖关系的维护。
- 方便解耦,由容器去维护具体的对象
- 托管了类的产生过程。
13.控制反转(IoC)的优点是什么?
- 把应用的代码量降到最低。
- 它使应用容易测试,单元测试不再需要单例和JNDI查找机制。
- 最小的代价和最小的侵入性使松散耦合得以实现。
- IoC容器支持加载服务时的饿汉式初始化和懒加载。
14. Spring IoC 的实现机制
Spring 中的 IoC 的实现原理就是工厂模式加反射机制。
15. Spring 的 IoC支持哪些功能
- 依赖注入
- 依赖检查
- 自动装配
- 支持集合
- 指定初始化方法和销毁方法
- 支持回调某些方法
16. ApplicationContext 通常的实现是什么?
- FileSystemXmlApplicationContext容器 :此容器从一个XML 文件中加载 beans 的定义,XML Bean配置文件的全路径名必须提供给它的构造函数 。
- ClassPathXmlApplicationContext容器:此容器从一个 XML 文件中加载 beans 的定义,需要正确设置 classpath 。因为这个容器将在 classpath 里面找 bean 的配置。
- WebXmlApplicationContext容器:此容器加载一个 XML 文件,此文件定义了一个 WEB 应用的所有 bean。
17. BeanFactory和 Application contexts 有什么区别?
BeanFactory:是Spring里面最低层的接口,提供了最简单的容器的功能,而且只提供了实例化对象和拿对象的功能;
ApplicationContext:是应用上下文,继承BeanFactory接口,它是Spring的一个更高级的容器,提供了更多的有用的功能,这些功能包括;
国际化
访问资源,如URL和文件
载入多个有继承关系的上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层
消息发送和响应机制
AOP
两者的区别在于装载beans时的区别:
BeanFactory在启动的时候不会去实例化Bean,当Spring应用中有从容器拿Bean的时候才会去实例化;
ApplicationContext在启动的时候就把所有的Bean全部实例化了,它还可以通过配置来实现Bean的延迟实例化,所以实际开发中推荐使用Application contexts。
18. 一个 Spring 的应用看起来像什么?
- 一个定义了一些功能的接口 。
- Spring AOP
<