zoukankan      html  css  js  c++  java
  • Spring简答题

    1:请解释下Spring框架中的IoC?

     Spring中的 org.springframework.beans 包和 org.springframework.context包构成了Spring框架IoC容器的基础。BeanFactory 接口提供了一个先进的配置机制,使得任何类型的对象的配置成为可能。ApplicationContex接口对BeanFactory(是一个子接口)进行了扩展,在BeanFactory的基础上添加了其他功能,比如与Spring的AOP更容易集成,也提供了处理message resource的机制(用于国际化)、事件传播以及应用层的特别配置,比如针对Web应用的WebApplicationContext。

    org.springframework.beans.factory.BeanFactory 是Spring IoC容器的具体实现,用来包装和管理前面提到的各种bean。BeanFactory接口是Spring IoC 容器的核心接口。

    ---------------------------------------------------------------------------------------------------------------------------------

    2:BeanFactory和ApplicationContext有什么区别?

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

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

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

    ---------------------------------------------------------------------------------------------------------------------------------

    3:IOC有什么优点?

    IOC或依赖注入减少了应用程序的代码量。它使得应用程序的测试很简单,因为在单元测试中不再需要单例或JNDI查找机制。简单的实现以及较少的干扰机制使得松耦合得以实现。IOC容器支持勤性单例及延迟加载服务

    ---------------------------------------------------------------------------------------------------------------------------------

    4:Spring应用程序看起来像什么?

    一个定义功能的接口

    实现包括属性,setter和getter方法,功能等Spring AOP 、Spring的XML配置文件

    使用该功能的客户端编程

    ---------------------------------------------------------------------------------------------------------------------------------

    5:Spring中的依赖注入是什么?

    依赖注入作为控制反转(IOC)的一个层面,可以有多种解释方式。在这个概念中,你不用创建对象而只需要描述如何创建它们。你不必通过代码直接的将组件和         服务连接在一起,而是通过配置文件说明哪些组件需要什么服务。之后IOC容器负责衔接。

    ---------------------------------------------------------------------------------------------------------------------------------

    6:如何向Spring 容器提供配置元数据?

    有三种方式向Spring 容器提供元数据:

    XML配置文件

    基于注解配置

    基于Java的配置

    ---------------------------------------------------------------------------------------------------------------------------------

    7:如何定义bean的作用域?

    在Spring中创建一个bean的时候,我们可以声明它的作用域。只需要在bean定义的时候通过’scope’属性定义即可。例如,当Spring需要产生每次一个新的bean实例时,应该声明bean的scope属性为prototype。如果每次你希望Spring返回一个实例,应该声明bean的scope属性为singleton。

    ---------------------------------------------------------------------------------------------------------------------------------

    8:sprinmvc工作原理?:

    1.spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。

    2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.

    3.DispatcherServlet请请求提交到目标Controller

    4.Controller进行业务逻辑处理后,会返回一个ModelAndView

    5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象

    6.视图对象负责渲染返回给客户端。

    ---------------------------------------------------------------------------------------------------------------------------------

    9:什么是Spring MVC框架的控制器?

    控制器提供对应用程序行为的访问,通常通过服务接口实现。控制器解析用户的输入,并将其转换为一个由视图呈现给用户的模型。Spring 通过一种极其抽象的方式实现控制器,它允许用户创建多种类型的控制器

    ---------------------------------------------------------------------------------------------------------------------------------

    10:什么是@Qualifier 注解?

    当有多个相同类型的bean而只有其中的一个需要自动装配时,将@Qualifier 注解和@Autowire 注解结合使用消除这种混淆,指明需要装配的bean。

    ---------------------------------------------------------------------------------------------------------------------------------

    11:怎样开启注解装配?

    注解装配在默认情况下是不开启的,为了使用注解装配,我们必须在Spring配置文件中配置 <context:annotation-config/>元素。

    ---------------------------------------------------------------------------------------------------------------------------------

    12:自动装配有哪些局限性 ?

    重写: 你仍需用 <constructor-arg>和 <property> 配置来定义依赖,意味着总要重写自动装配。

    基本数据类型:你不能自动装配简单的属性,如基本数据类型,String字符串,和类。

    模糊特性:自动装配不如显式装配精确,如果有可能,建议使用显式装配。

    ---------------------------------------------------------------------------------------------------------------------------------

    13:依赖注入有几种方式?

    set注入

    构造器注入

    自动装配

    ---------------------------------------------------------------------------------------------------------------------------------

    14:AOP的底层实现?

    使用JDK动态代理

    ---------------------------------------------------------------------------------------------------------------------------------

    15:请说明一下AOP中需要的最基本的三个类:

    目标类 切面类 代理类

    ---------------------------------------------------------------------------------------------------------------------------------

    16:写出spring中的注解及其含义(至少6个)

    @Component 标识一个受Spring管理的组件

    @Respository标识持久层

    @Service 标识服务层

    @Controller 标识控制层

    @Autowired  它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作

    @Qualifier 指定注入 Bean 的名称

    ---------------------------------------------------------------------------------------------------------------------------------

    17:请说一下SpringMVC的执行流程?

    1.spring mvc将所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责对请求 进行真正的处理工作。

    2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.

    3.DispatcherServlet请请求提交到目标Controller

    4.Controller进行业务逻辑处理后,会返回一个ModelAndView

    5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象

    6.视图对象负责渲染返回给客户端。

    ---------------------------------------------------------------------------------------------------------------------------------

    18:讲下SpringMvc和Struts1,Struts2的比较的优势?

    性能上Struts1>SpringMvc>Struts2 开发速度上SpringMvc和Struts2差不多,比Struts1要高

    ---------------------------------------------------------------------------------------------------------------------------------

    19:怎么样在方法里面得到Request,或者Session

    直接在方法的形参中声明request,SpringMvc就自动把request对象传入

    ---------------------------------------------------------------------------------------------------------------------------------

    20:SpringMVC怎么样设定重定向和转发的

    在返回值前面加"forward:"就可以让结果转发,譬如"forward:user.do?name=method4" 在返回值前面加"redirect:"就可以让返回值重定向,譬如"redirect:http://www.baidu.com"

    ---------------------------------------------------------------------------------------------------------------------------------

    21:什么是Spring的MVC框架?

    Spring 配备构建Web 应用的全功能MVC框架。Spring可以很便捷地和其他MVC框架集成,如Struts,Spring 的MVC框架用控制反转把业务对象和控制逻辑清晰地隔离。它也允许以声明的方式把请求参数和业务对象绑定。

    ---------------------------------------------------------------------------------------------------------------------------------

    22:DispatcherServlet的作用?

    Spring的MVC框架是围绕DispatcherServlet来设计的,它用来处理所有的HTTP请求和响应。

    ---------------------------------------------------------------------------------------------------------------------------------

    23:WebApplicationContext是干什么的?

     WebApplicationContext 继承了ApplicationContext 并增加了一些WEB应用必备的特有功能,它不同于一般的ApplicationContext ,因为它能处理主题,并找到被关联的servlet。

    ---------------------------------------------------------------------------------------------------------------------------------

    24:什么是Spring MVC框架的控制器?

    控制器提供一个访问应用程序的行为,此行为通常通过服务接口实现。控制器解析用户输入并将其转换为一个由视图呈现给用户的模型。Spring用一个非常抽象的方式实现了一个控制层,允许用户创建多种用途的控制器。

    ---------------------------------------------------------------------------------------------------------------------------------

    25:Spring 框架中都用到了哪些设计模式?

    代理模式—在AOP和remoting中被用的比较多。

    单例模式—在spring配置文件中定义的bean默认为单例模式。

    模板方法—用来解决代码重复的问题。

    比如. RestTemplate, JmsTemplate, JpaTemplate。

    前端控制器—Srping提供了DispatcherServlet来对请求进行分发。

    视图帮助(View Helper )—Spring提供了一系列的JSP标签,高效宏来辅助将分散的代码整合在视图里。

    依赖注入—贯穿于BeanFactory / ApplicationContext接口的核心理念。

    工厂模式—BeanFactory用来创建对象的实例。

    ---------------------------------------------------------------------------------------------------------------------------------

    26:MVC是三层开发结构,这三个字母按顺序分别代表

    Model、View、Controller

    ---------------------------------------------------------------------------------------------------------------------------------

    27:请简述什么是MVC模式?

    1、是一种开发软件工程的设计模式。

    2、M即Model,模型,定义数据模型和业务模型,通常由javabean实现;

    V即View,视图,定义与客户端进行交互的界面,通常由jsp,freemarker实现;

    C即Controller,控制器,接收客户端请求并调用模型和视图处理请求,通常由servlet实现。

    ---------------------------------------------------------------------------------------------------------------------------------

    28:请写出SpringMVC中的web.xml文件关于核心控制器的配置内容。[提示:DispatcherServlet]

    答:如下所示:

      <servlet>

       <servlet-name>dispatcher</servlet-name>

       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

       <init-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>classpath:spring-*.xml</param-value>

       </init-param>

       <load-on-startup>1</load-on-startup>

      </servlet>

      <servlet-mapping>

       <servlet-name>dispatcher</servlet-name>

       <url-pattern>*.action</url-pattern>

      </servlet-mapping>

    ---------------------------------------------------------------------------------------------------------------------------------

    29:请简单描述SpringMVC框架的执行流程,要求条理清晰。

    答:(1)客户端在提交请求后,服务器接收请求并转交给springmvc项目中的前端控制器DispatcherServlet;

    (2)DispatcherServlet根据映射把请求转发给后端处理器Handler,Handler调用模型进行相应的处理;

    (3)Handler处理器把处理后的结果封装到模型和视图对象[ModelAndView]中并返回到DispatcherServlet;

    (4)DispatcherServlet再根据映射找到指定的视图jsp并对返回数据进行渲染;

    (5)视图jsp把经过渲染之后的数据返回到DispatcherServlet;

    (6)DispatcherServlet把最终的结果页面数据返回给客户端。

    ---------------------------------------------------------------------------------------------------------------------------------

    30:如何理解ORM概念?请简单描述。

    ORM解决的主要问题是对象关系的映射。域模型和关系模型分别是建立在概念模型的基础上的。域模型是面向对象的,而关系模型是面向关系的。一般情况下,一个持久化类和一个表对应,类的每个实例对应表中的一条记录,类的每个属性对应表的每个字段。

    ---------------------------------------------------------------------------------------------------------------------------------

    31:ORM技术的特点是什么?

    答:1.提高了开发效率。由于ORM可以自动对Entity对象与数据库中的Table进行字段与属性的映射,所以我们实际可能已经不需要一个专用的、庞大的数据访问层。

    1. ORM提供了对数据库的映射,不用sql直接编码,能够像操作对象一样从数据库获取数据。

    ---------------------------------------------------------------------------------------------------------------------------------

    32:在使用MyBatis的mapper方式时应注意哪些问题?

    答:

    (1)mapper映射与接口必须是相同的主文件名

    (2)mapper映射与接口必须在相同的包中

    (3)mapper映射中的命名空间属性[namespace]的值必须是mapper接口的全限定名称

    (4)mapper映射中的操作元素的标识属性[id]的值必须是mapper接口中相应方法的名称

    (5)如果需要输入参数,则mapper映射中的操作元素的parameterType属性的值必须是mapper接口中相应方法的形参类型的全称

    (6)如果存在返回值参数,则mapper映射中的操作元素的resultType属性的值必须是mapper接口中相应方法的返回值类型的全称

    ---------------------------------------------------------------------------------------------------------------------------------

    33:简述在使用测试框架JUnit时常用的注解有哪些并说明各自的作用?

    答:

    @Test(expected,timeout):定义测试用例,expected属性指定期望抛出的异常,timeout属性指定执行限定的时间,

    单位是毫秒

    @Before:定义在每个测试用例执行之前所执行的方法

    @After:定义在每个测试用例执行之后所执行的方法

    @BeforeClass:定义在所有测试用例执行之前所执行的静态方法

    @AfterClass:定义在所有测试用例执行之后所执行的静态方法

    ---------------------------------------------------------------------------------------------------------------------------------

    34:MyBatis编程步骤是什么样的?

    ① 创建SqlSessionFactory

    ② 通过SqlSessionFactory创建SqlSession

    ③ 通过sqlsession执行数据库操作

    ④ 调用session.commit()提交事务

    ⑤ 调用session.close()关闭会话

    ---------------------------------------------------------------------------------------------------------------------------------

    35:Mybatis中如何执行批处理?

    使用BatchExecutor完成批处理

    ---------------------------------------------------------------------------------------------------------------------------------

    36:请简述Mybatis的工作流程 ?

    (1) 加载配置并初始化

    (2) 接收调用请求

    (3) 处理操作请求 触发条件:API 接口层传递请求过来

    (4)返回处理结果将最终的处理结果返回。

    ---------------------------------------------------------------------------------------------------------------------------------

    37:请说明工作日志文件log4j.properties的内容应该如何编写? log4j.rootLogger=debug,stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.conversionPattern=%d %p %c %m%n

    ---------------------------------------------------------------------------------------------------------------------------------

    38:当实体类中的属性名和表中的字段名不一样如何解决?

    通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致

    <select id=”selectorder” parametertype=”int” resultetype=”me.gacl.domain.order”>

    select order_id id, order_no orderno ,order_price price form orders where order_id=#{id};

    </select>

    ---------------------------------------------------------------------------------------------------------------------------------

    39:Mybatis连接查询怎么实现?

    使用@Results({

      @Result(column="关联查询的字段",property="对象",one = @One(select="完全限定名.方法名"))

     })

    ---------------------------------------------------------------------------------------------------------------------------------

    40:mybatis-spring整合的时候 需要在Spring配置哪个bean?

    SqlsessionfactoryBean

    ---------------------------------------------------------------------------------------------------------------------------------

    41:MyBatis(IBatis)的好处是什么

    ibatis把sql语句从Java源程序中独立出来, 放在单独的XML文件中编写,给程序的维护带来了很大便利。 ibatis封装了底层JDBC API的调用细节,并能自动将结果集转换成Java Bean对象, 大大简化了Java数据库编程的重复工作。 因为Ibatis需要程序员自己去编写sql语句, 程序员可以结合数据库自身的特点灵活控制sql语句, 因此能够实现比hibernate等全自动orm框架更高的查询效率,能够完成复杂查询

    ---------------------------------------------------------------------------------------------------------------------------------

    42:请写出4个动态SQL的元素?

    if choose where set

    ---------------------------------------------------------------------------------------------------------------------------------

    43:请说出动态SQL的作用:

    动态SQL元素和使用JSTL或其他类型基于XML的文本处理器相似

    Mybatis采用功能强大的OGNL表达式来完成

    ---------------------------------------------------------------------------------------------------------------------------------

    44:Mybatis动态sql是做什么的?简述一下动态sql的执行原理?

    Mybatis动态sql可以让我们在Xml映射文件内以标签的形式编写sql,完成逻辑判断和动态拼接sql的功能,其执行原理为,使用OGNL从sql参数对象中计算表达式的值,根据表达式的值动态拼接sql,以此来完成动态sql的功能。

    ---------------------------------------------------------------------------------------------------------------------------------

    45:在实现分页技术时,通常需要设置哪些变量来说明与分页逻辑有关的参数?

    答:当前页码;每页记录数;总记录数;总页数;当前页面数据。

    ---------------------------------------------------------------------------------------------------------------------------------

    46:在实现分页时至少需要获取哪些数据?

    答:当前页码,当前页,总记录数,总页数,当前数据

    ---------------------------------------------------------------------------------------------------------------------------------

    47:请简要说明ResultMap标签中的各个属性的意义是什么?

    答:(1)id属性 ,resultMap标签的标识。

    (2)type属性 ,返回值的全限定类名,或类型别名。

    (3)autoMapping属性 ,值范围true(默认值)|false, 设置是否启动自动映射功能,自动映射功能就是自动查找与字段名小写同名的属性名,并调用setter方法。而设置为false后,则需要在`resultMap`内明确注明映射关系才会调用对应的setter方法。

    ---------------------------------------------------------------------------------------------------------------------------------

    48:在通过mybatis解决多个对象之间的关系时要使用关系映射,那么请简要描述当前我校的学生与班级的对应关系是什么?

    答:从单向来看,一个学生只属于一个班级,这是单向一对一的关系;一个班级可以包含多个学生,这是单向一对多的关系。从双向来看,是双向一对多或双向多对一的关系。

    ---------------------------------------------------------------------------------------------------------------------------------

    49:请简要说明在mybatis中的#{}与${}两者的区别是什么?

    答:(1)在传递字符串参数时如果是做为全部参数则使用#{},如果是做为部份参数,即包含在单引号中时使用${};(2)如果参数是字段名称或数据库中的关键字时采用${}即可解决问题。

    ---------------------------------------------------------------------------------------------------------------------------------

    50:请简要说明Spring框架与MyBatis框架在整合时需要配置的主要步骤是什么?

    答:(1)配置数据源BasicDataSource;

    (2)配置会话工厂SqlSessionFactoryBean;

    (3)配置映射器的扫描器MapperScannerConfigurer。

    ---------------------------------------------------------------------------------------------------------------------------------

    51:请简要说明Spring框架与SpringMVC框架在整合时需要配置的主要步骤是什么?

    答:(1)指定控制器层所在的java包位置;

    (2)启用MVC注解功能;

    (3)通过InternalResourceViewResolver设置逻辑视图的前缀和后缀;

    (4)创建并注册类型转换器ConversionServiceFactoryBean;

    (5)注册CommonsMultipartResolver开启上传文件功能;

    (6)配置SimpleMappingExceptionResolver启用异常处理功能

    ---------------------------------------------------------------------------------------------------------------------------------

    52:请简要说明Spring框架管理业务层时需要配置的主要步骤是什么?

    答:(1)指定业务层所在的java包位置;

    (2)配置事务管理器DataSourceTransactionManager;

    (3)启用事务功能或添加相应的事务注解@Transactional。

    ---------------------------------------------------------------------------------------------------------------------------------

    53:如何设置Maven 的编译级别?

    <build> 

        <plugins> 

            <plugin> 

                <groupId>org.apache.maven.plugins</groupId> 

                <artifactId>maven-compiler-plugin</artifactId> 

                <version>2.0.2</version> 

                <configuration> 

                    <source>1.8</source> 

                    <target>1.8</target> 

                </configuration> 

            </plugin> 

        </plugins> 

    </build> 重要!!!!

    ---------------------------------------------------------------------------------------------------------------------------------

    54:Maven 是什么?

    Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。

    ---------------------------------------------------------------------------------------------------------------------------------

    55:安装Nexus的时候注意什么?

    1.安装命令是Install

    2.开启管理员权限的CMD

    ---------------------------------------------------------------------------------------------------------------------------------

    56:maven相比其他传统项目的几大好处?

    1. maven统一管理包;2.对应用包的升级方便;3.开发项目不依赖与开发工具;4.集成编译,测试,打包,发布,部署,等一条龙服务;5.拥有各种插件

    ---------------------------------------------------------------------------------------------------------------------------------

    57:请简要说明springmvc中的视图解析器InternalResourceViewResolver中常用的三个属性的作用?

    答:(1);viewClass属性指明视图类型;

    (2)prefix属性指明视图路径前缀;

    (3)suffix属性指明视图路径后缀。

    ---------------------------------------------------------------------------------------------------------------------------------

    58:手写两种单例模式

    public class Singleton { 

        private static Singleton instance = new Singleton(); 

        private Singleton (){} 

        public static Singleton getInstance() { 

        return instance; 

        } 

    public class Singleton { 

        private static Singleton instance; 

        private Singleton (){} 

        public static Singleton getInstance() { 

        if (instance == null) { 

            instance = new Singleton(); 

        } 

        return instance; 

        } 

    }  ---------------------------------------------------------------------------------------------------------------------------------

    59:如何在web.xml中设置编码?

    <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>/*</url-pattern>

    </filter-mapping>

    ---------------------------------------------------------------------------------------------------------------------------------

  • 相关阅读:
    [翻译] GoogleMaterialDesignIcons
    [翻译] InstagramPhotoPicker
    UIButton的resizableImageWithCapInsets使用解析
    [翻译] RAReorderableLayout
    [翻译] ZLSwipeableView
    【转】php利用mkdir创建多级目录
    【转】用 PHP 内置函数 file_put_contents 写入文件
    【转】PHP 之 CURL 模拟登陆并获取数据
    【转】php curl 伪造IP来源的实例代码
    【转】POP3、SMTP和IMAP之间的区别和联系
  • 原文地址:https://www.cnblogs.com/iscurry/p/11865354.html
Copyright © 2011-2022 走看看