文章目录
- 一、Spring面试题
-
- 1.你为什么使用 Spring?
- 2. Spring 支持几种 bean 的作用域?
- 3.请问 Spring 有几种自动装配模式?
- 4.对 Java 接口代理模式的实现原理的理解?
- 5.怎么理解面向切面编程的切面?
- 6.什么是 IOC 容器?
- 7.为什么需要代理模式?
- 8.讲讲静态代理模式的优点及其瓶颈?
- 9.讲解 Spring 框架中基于 Schema 的 AOP 实现原理?
- 10. 讲解 Spring 框架中如何基于 AOP 实现的事务管理?
- 11. Spring 在 Bean 创建过程中是如何解决循环依赖的?
- 12. Spring 中 Bean 是如何管理的?
- 13. 请具体描述 IOC 容器对 Bean 的生命周期控制流程:
- 14. BeanFactory 和 ApplicationContext 有什么区别?
- 15. 谈谈 Spring Bean 创建过程中的设计模式?
- 16. Spring MVC 运行流程
- 17. Spring 框架中的单例 bean 是线程安全的吗?
- 18. 解释 Spring 支持的几种 bean 的作用域
- 19.解释 Spring 框架中 bean 的生命周期
- 20.哪些是重要的 bean 生命周期方法?你能重载它们吗?
- 二、SpringMvc面试题
-
- 1、什么是 SpringMvc?
- 2、Spring MVC 的优点:
- 3、SpringMVC 工作原理?
- 4、SpringMVC 流程?
- 5、SpringMvc 的控制器是不是单例模式,如果是,有什么问题,怎么解决?
- 6、如果你也用过 struts2.简单介绍下 springMVC 和 struts2 的区别有哪些?
- 7、SpingMvc 中的控制器的注解一般用那个,有没有别的注解可以替代?
- 8、 @RequestMapping 注解用在类上面有什么作用?
- 9、怎么样把某个请求映射到特定的方法上面?
- 10、如果在拦截请求中,我想拦截 get 方式提交的方法,怎么配置?
- 11、怎么样在方法里面得到 Request,或者 Session?
- 12、我想在拦截的方法里面得到从前台传入的参数,怎么得到?
- 13、如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象?
- 14、SpringMvc 中函数的返回值是什么?
- 15、SpringMVC 怎么样设定重定向和转发的?
- 16、SpringMvc 用什么对象从后台向前台传递数据的?
- 17、SpringMvc 中有个类把视图和数据都合并的一起的,叫什么?
- 18、怎么样把 ModelMap 里面的数据放入 Session 里面?
- 19、SpringMvc 怎么和 AJAX 相互调用的?
- 20、当一个方法向 AJAX 返回特殊对象,譬如 Object,List 等,需要做什么处理?
- 21、SpringMvc 里面拦截器是怎么写的
- 22、讲下 SpringMvc 的执行流程
|
|
一、Spring面试题
1.你为什么使用 Spring?
轻量级:Spring 在大小和透明性方面绝对属于轻量级的,基础版本的 Spring 框架大约
只有 2MB。
控制反转(IOC):Spring 使用控制反转技术实现了松耦合。依赖被注入到对象,而不是
创建或寻找依赖对象。
面向切面编程(AOP): Spring 支持面向切面编程,同时把应用的业务逻辑与系统的服
务分离开来。
容器:Spring 包含并管理应用程序对象的配置及生命周期。
MVC 框架:Spring 的 web 框架是一个设计优良的 web MVC 框架,很好的取代了一些 web
框架。
事务管理:Spring 对下至本地业务上至全局业务(JAT)提供了统一的事务管理接口。
异常处理:Spring 提供一个方便的 API 将特定技术的异常(由 JDBC, Hibernate, 或 JDO
抛出)转化为一致的、Unchecked 异常。
2. Spring 支持几种 bean 的作用域?
1)singleton:默认,每个容器中只有一个 bean 的实例,单例的模式由 BeanFactory
自身来维护。
2)prototype:为每一个 bean 请求提供一个实例。
3)request:为每一个网络请求创建一个实例,在请求完成以后,bean 会失效并被垃圾
回收器回收。
4)session:与 request 范围类似,确保每个 session 中有一个 bean 的实例,在 session
过期后,bean 会随之失效。
5)global-session:全局作用域,global-session 和 Portlet 应用相关。当你的应用
部署在 Portlet 容器中工作时,它包含很多 portlet。如果你想要声明让所有的 portlet 共
用全局的存储变量的话,那么这全局变量需要存储在 global-session 中。全局作用域与
Servlet 中的 session 作用域效果相同。
3.请问 Spring 有几种自动装配模式?
自动装配提供五种不同的模式供 Spring 容器用来自动装配 beans 之间的依赖注入:
no:默认的方式是不进行自动装配,通过手工设置 ref 属性来进行装配 bean。
byName:通过参数名自动装配,Spring 容器查找 beans 的属性,这些 beans 在 XML 配
置文件中被设置为 byName。之后容器试图匹配、装配和该 bean 的属性具有相同名字的 bean。
byType:通过参数的数据类型自动自动装配,Spring 容器查找 beans 的属性,这些 beans
在 XML 配置文件中被设置为 byType。之后容器试图匹配和装配和该 bean 的属性类型一样的
bean。如果有多个 bean 符合条件,则抛出错误。
constructor:这个同 byType 类似,不过是应用于构造函数的参数。如果在 BeanFactory
中不是恰好有一个 bean 与构造函数参数相同类型,则抛出一个严重的错误。
autodetect:如果有默认的构造方法,通过 construct 的方式自动装配,否则使用
byType 的方式自动装配。
4.对 Java 接口代理模式的实现原理的理解?
答:
1、字符串拼凑出代理类
2、用流的方式写到.Java 文件
3、动态编译.Java 文件
4、自定义类加载器把.class 文件加载到 jvm
5、返回代理类实例
其实核心就是根据接口反射出接口中的所有方法,然后通过拼凑或者 cglib 字节码的方
式把代理类反射出来,而代理类在内存中就会对某种类型的类进行调用,invocationHandler
(Jdk)或者 MethodInterceptor(cglib)
5.怎么理解面向切面编程的切面?
答:
切面指的是一类功能,比如事务,缓存,日志等。切面的作用是在目标对象方法执行前
或者后执行切面方法
6.什么是 IOC 容器?
答:
Spring IOC 负责创建对象、管理对象(通过依赖注入)、整合对象、配置对象以及管理
这些对象的生命周期。
Ioc 是把对象的控制权较给框架或容器,容器中存储了众多我们需要的对象,然后我们
就无需再手动的在代码中创建对象。需要什么对象就直接告诉容器我们需要什么对象,容器
会把对象根据一定的方式注入到我们的代码中。注入的过程被称为 DI。有时候需要动态的
指定我们需要什么对象,这个时候要让容器在众多对象中去寻找,容器寻找需要对象的过程,
称为 DL(Dependency Lookup, 依赖查找)。按照上面的理解,那么 IOC 包含了 DI 与 DL,并
且多了对象注册的过程。
7.为什么需要代理模式?
答:
代理其实是对开闭原则和里氏代换原则的一种实现,它强调在不修改老代码的基础上扩
展功能,代理模式大大提高了代码的灵活性,同时也使代码的可读性变差,同时动态代理也
加大了内存溢出的风险。
8.讲讲静态代理模式的优点及其瓶颈?
答:
静态代理一种傻瓜式的对目标类的增强,其核心就两点,1、跟目标类实现同一接口 2、
持有目标类的引用。 如果需要对目标类方法进行增强,就只要调用代理类的方法,在方法
里面写增强功能然后调用目标类方法即可。优点就是代码直观且执行速度快,缺点就是不够
灵活,代码量比较大,每一种类型的目标类都需要单独写一个代理类。