小墨の博客

梦想需要付诸行动,否则只能是梦

Spring&SpringMVC&SpringCloud面试题库

来源:开课吧内部资料

#Spring

1.什么是Spring框架?

l  Spring框架是一个为Java应用程序的开发提供了综合、广泛的基础性支持的Java平台。

l  Spring帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发。

l  Spring框架本身亦是按照设计模式精心打造,这使得我们可以在开发环境中安心的集成Spring框架,不必担心Spring是如何在后台进行工作的。

 

2.使用Spring框架能带来哪些好处?

下面列举了一些使用Spring框架带来的主要好处:

l  Dependency Injection(DI) 方法使得构造器和JavaBean properties文件中的依赖关系一目了然。

l  与EJB容器相比较,IoC容器更加趋向于轻量级。这样一来IoC容器在有限的内存和CPU资源的情况下进行应用程序的开发和发布就变得十分有利

l  Spring并没有闭门造车,Spring利用了已有的技术比如ORM框架、logging框架、J2EE、Quartz和JDK Timer,以及其他视图技术

l  Spring框架是按照模块的形式来组织的。由包和类的编号就可以看出其所属的模块,开发者仅仅需要选用他们需要的模块即可

l  要测试一项用Spring开发的应用程序十分简单,因为测试相关的环境代码都已经囊括在框架中了。更加简单的是,利用JavaBean形式的POJO类,可以很方便的利用依赖注入来写入测试数据

l  Spring的Web框架亦是一个精心设计的Web MVC框架,为开发者们在web框架的选择上提供了一个除了主流框架比如Struts、过度设计的、不流行web框架的以外的有力选项

l  Spring提供了一个便捷的事务管理接口,适用于小型的本地事物处理(比如在单DB的环境下)和复杂的共同事物处理(比如利用JTA的复杂DB环境)

l   

3.什么是控制反转(IOC)?什么是依赖注入(DI)?

l  Inversion Of Control ——控制反转,是一种设计思想,程序中需要某个对象时,由原来的new的过程,变成了由容器来创建、管理和维护组件之间的关系。 这样做的好处是 可以大大降低组件之间的耦合度。

l  Dependence Injection 依赖注入(依赖注射)。在Java中依然注入有以下三种实现方式:

¡  构造器注入

¡  Setter方法注入

¡  接口注入

 

4. IOC的优点是什么?

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

 

5.BeanFactory和ApplicationContext有什么区别?

l  BeanFactory 可以理解为含有bean集合的工厂类。BeanFactory 包含了种bean的定义,以便在接收到客户端请求时将对应的bean实例化。

l  BeanFactory还能在实例化对象的时生成协作类之间的关系。此举将bean自身与bean客户端的配置中解放出来。BeanFactory还包含了bean生命周期的控制,调用客户端的初始化方法(initialization  methods)和销毁方法(destruction methods)。

l   从表面上看,application context如同bean factory一样具有bean定义、bean关联关系的设置,根据请求分发bean的功能。但application context在此基础上还提供了其他的功能。

1.      提供了支持国际化的文本消息

2.      统一的资源文件读取方式

3.      已在监听器中注册的bean的事件 以下是三种较常见的 ApplicationContext 实现方式:

a.      ClassPathXmlApplicationContext:从classpath的XML配置文件中读取上下文,并生成上下文定义。应用程序上下文从程序环境变量中取得。 ApplicationContext context = new ClassPathXmlApplicationContext(“bean.xml”);

b.      FileSystemXmlApplicationContext :由文件系统中的XML配置文件读取上下文。 ApplicationContext context = new FileSystemXmlApplicationContext(“bean.xml”);

c.       XmlWebApplicationContext:由Web应用的XML文件读取上下文。

 

6.Spring有几种配置方式?

将Spring配置到应用开发中有以下三种方式:

1.      基于XML的配置

2.      基于注解的配置

3.      基于Java的配置

 

7.如何用基于XML配置的方式配置Spring?

在Spring框架中,依赖和服务需要在专门的配置文件来实现,我常用的XML格式的配置文件。这些配置文件的格式通常用开头,然后一系列的bean定义和专门的应用配置选项组成。

 SpringXML配置的主要目的时候是使所有的Spring组件都可以用xml文件的形式来进行配置。这意味着不会出现其他的Spring配置类型(比如声明的方式或基于Java Class的配置方式)

 Spring的XML配置方式是使用被Spring命名空间的所支持的一系列的XML标签来实现的。Spring有以下主要的命名空间:context、beans、jdbc、tx、aop、MVC和aso。

1

2

3

4

5

<!-- JSON Support -->

<bean name="viewResolver"   class="org.springframework.web.servlet.view.BeanNameViewResolver"/>

<bean name="jsonTemplate"   class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>

 

<bean id="restTemplate"   class="org.springframework.web.client.RestTemplate"/>

  下面这个web.xml仅仅配置了DispatcherServlet,这件最简单的配置便能满足应用程序配置运行时组件的需求。

Archetype  Created Web Application spring  org.springframework.web.servlet.DispatcherServlet 1 

1

2

3

4

<servlet-mapping>

    <servlet-name>spring</servlet-name>

    <url-pattern>/</url-pattern>

</servlet-mapping>

 

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

Spring容器中的bean可以分为5个范围。所有范围的名称都是自说明的,但是为了避免混淆,还是让我们来解释一下:

1.      singleton:这种bean范围是默认的,这种范围确保不管接受到多少个请求,每个容器中只有一个bean的实例,单例的模式由bean factory自身来维护。

2.      prototype:原形范围与单例范围相反,为每一个bean请求提供一个实例。

3.      request:在请求bean范围内会每一个来自客户端的网络请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。

4.      Session:与请求范围类似,确保每个session中有一个bean的实例,在session过期后,bean会随之失效。

5.      global-session:global-session和Portlet应用相关。当你的应用部署在Portlet容器中工作时,它包含很多portlet。如果你想要声明让所有的portlet共用全局的存储变量的话,那么这全局变量需要存储在global-session中。 全局作用域与Servlet中的session作用域效果相同。

 

9.什么是AOP?

Aspect Oriented Programming 面向切面编程 它可以在不修改原代码的情况下 增加新的功能 或者扩展原有的功能,AOP 关注的重点在切面上,可以通过配置手段将切面切入到对应的位置。这样组件和组件之间的耦合度会降低 并且可以提供组件的复用度,提高程序的灵活性。

 

AOP 中涉及到的概念

l  Aspect(切面):切面是用来封装共通业务逻辑的?JoinPoint(连接点):代表切入的位置 一般代表一个方法信息 Pointcut(切点):用来管理连接点的 代表一堆连接点 ,可以看成连接点的集合 (会使用表达式表达 简称切点表达式)

l  Target(目标):将被切入共通业务逻辑的组件叫 目标对象 Proxy(代理 ):被增强之后的目标组件 叫代理 (代理的生成技术有JDK代理 和 CGLIB ) Advice9(通知):代表一种时机(方法之前、方法执行后、方法执行前后出现异常,最终要执行?核心:切面 —– 通知 —– 切点

 

10.Spring主要使用了什么模式?

工厂模式:每个Bean的创建通过方法

单例模式:默认的每个Bean的作用域都是单例

代理模式:关于Aop的实现通过代理模式

 

11.Spring 支持的事务管理类型有哪些?

Spring 支持编程式事务管理和声明式事务管理。

许多 Spring 框架的用户选择声明式事务管理,因为这种方式和应用程序的关联较少,因此更加符合轻量级容器的概念。声明式事务管理要优于编程式事务管理,尽管在灵活性方面它弱于编程式事务管理,因为编程式事务允许你通过代码控制业务。

声明式事务又分为两种:

a、基于XML的声明式事务

b、基于注解的声明式事务。

 

12. 解释WEB 模块。

Spring的WEB模块是构建在application  context  模块基础之上,提供一个适合web应用的上下文。这个模块也包括支持多种面向web的任务,如透明地处理多个文件上传请求和程序级请求参数的绑定到你的业务对象。它也有对Jakarta  Struts的支持。

 

13. ApplicationContext通常的实现是什么?

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

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

l  WebXmlApplicationContext:此容器加载一个XML文件,此文件定义了一个WEB应用的所有bean。

 

#SpringMVC

1.什么是SpringMVC ?简单介绍下你对SpringMVC的理解?

SpringMVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。

 

2.SpringMVC的工作流程

l  用户发送请求至前端控制器DispatcherServlet

l  DispatcherServlet收到请求调用HandlerMapping处理器映射器

l  处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。

l  DispatcherServlet通过HandlerAdapter处理器适配器调用处理器

l  执行处理器(Controller,也叫后端控制器)

l  Controller执行完成返回ModelAndView

l  HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet

l  DispatcherServlet将ModelAndView传给ViewReslover视图解析器

l  ViewReslover解析后返回具体View

l  DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)

l  DispatcherServlet响应用户

3.SpringMVC的优点:

1.      可以支持各种视图技术,而不仅仅局限于JSP;

2.      与Spring框架集成(如IoC容器、AOP等);

3.      清晰的角色分配:前端控制器(dispatcherServlet) , 请求到处理器映射(handlerMapping), 处理器适配器(HandlerAdapter), 视图解析器(ViewResolver)。

4.      支持各种请求资源的映射策略。

 

4.注解原理

注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类。我们通过反射获取注解时,返回的是Java运行时生成的动态代理对象。通过代理对象调用自定义注解的方法,会最终调用AnnotationInvocationHandler的invoke方法。该方法会从memberValues这个Map中索引出对应的值。而memberValues的来源是Java常量池。

 

5.SpringMVC和struts2的区别有哪些?

1.      SpringMVC的入口是一个servlet即前端控制器(DispatchServlet),而struts2入口是一个filter过虑器(StrutsPrepareAndExecuteFilter)。

2.      SpringMVC是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。

3.      Struts采用值栈存储请求和响应的数据,通过OGNL存取数据,SpringMVC通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。

 

6.SpringMVC怎么样设定重定向和转发的?

1.      转发:在返回值前面加"forward:",譬如"forward:user.do?name=method4"

2.      重定向:在返回值前面加"redirect:",譬如"redirect:http://www.baidu.com"

 

7.SpringMVC怎么和AJAX相互调用的?

通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象。

 

具体步骤如下 :

1.      加入Jackson.jar

2.      在配置文件中配置json的映射

3.      在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解

4.       

8.如何解决POST请求中文乱码问题,GET的又如何处理呢?

(1)解决post请求乱码问题:

在web.xml中配置一个CharacterEncodingFilter过滤器,设置成utf-8;

    <filter>

        <filter-name>CharacterEncodingFilter</filter-name>

        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

        <init-param>

            <param-name>encoding</param-name>

            <param-value>utf-8</param-value>

        </init-param>

    </filter>

    <filter-mapping>

        <filter-name>CharacterEncodingFilter</filter-name>

        <url-pattern> padding-top: 3px; padding-bottom: 1px; padding-left: 20px; padding-right: 20px; }

张小弟之家

本文链接:
文章标题:

本站文章除注明转载/出处外,均为原创,若要转载请务必注明出处。转载后请将转载链接通过邮件告知我站,谢谢合作。本站邮箱:admin@only4.work

尊重他人劳动成果,共创和谐网络环境。点击版权声明查看本站相关条款。

    发表评论:

    搜索
    本文二维码
    标签列表
    站点信息
    • 文章总数:507
    • 页面总数:20
    • 分类总数:92
    • 标签总数:207
    • 评论总数:60
    • 浏览总数:219202

    | | |
    | |  Z-Blog PHP