zoukankan      html  css  js  c++  java
  • Spring与MVC面试题

    Spring/Spring MVC

    1. Spring是什么,好处有哪些,为什么要使用?

    Spring是一个轻量级的开源的JAVAEE框架

    好处:方便解耦简化开发,Aop编程支持,方便程序测试和进行事务操作,可以整合其他框架,降低Api开发难度

    有以上的优点可以解决企业应用开发的复杂性

     

    2. 解释一下什么是 AOP?

    面向切面:在不改变原有方法的定义与使用,原程序的流程,开源改变原有方法的功能(增加功能)

    底层原理:动态代理

     

     

    3. 解释一下什么是 IOC?

    控制反转(依赖注入):将创建对象的控制权交给Spring(容器)管理

    实现:反射

    IOC和di的区别:ioc可以理解为目的,di为手段。Ioc将对象创建权(new对象)反转给容器,di依赖ioc容器在对象创建的过程中,将对象依赖的属性通过配置进行注入。

    底层原理:xml解析,工厂模式,反射

     

    4. Spring有几种IOC容器,区别是什么?

    BeanFactory:负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责bean的生命周期

    加载配置文件时候不对创建对象,在获取对象(使用)才会创建对象

    ApplicationContext:是BeanFactory的子接口,除了上述功能外还提供了更完整的框架功能:国际化,资源访问,事件传递

    加载配置文件时就会把配置文件对象进行创建

    实现类

     

     

     

    5. Spring 有哪些主要模块?

     

    6. 什么是SpringBean,有几种类型Bean?

    是spring Ioc容器管理的对象,由IOC容器管理来实例化、配置、装配和管理,基于用户提供给容器的配置元数据(注入方式)配置

    有二种类型bean

    普通bean:在配置文件中定义bean类型就是返回类型

    工程bean:在配置文件中定义bean类型可以和返回类型不一样

     

    7. Spring Ioc的注入方式?

    基于xml配置:set注入,构造器注入

    基于注解方式:注解方式注入

     

      

    8. Spring可以注入null和属性值包含特殊符号么?

    可以  

     

     

    9. Spring 中的内部Bean和外部Bean是什么?

    外部bean用ref属性放入bean标签的id值

     

    内部bean:当有一个学生bean和班级bean的时候,班级bean是学生bean的一个属性,可以在学生bean标签内使用property标签嵌套班级bean标签

     

     

    10. Spring 中如何注入java集合?

    注入属性值如下图

     

     

     

    注入对象时如下图

    使用bean标签设置集合对象属性值,在注入集合中使用list标签内用ref标签获取对象bean

     

    11. Spring 支持几种 Bean 的作用域?

    五种

    默认Singleto:单例模式 Prototype 多例 Request 每个请求 session 会话周期

    Global-session 全局session 后面3个基于applicationcontext下有效

     

     

     

    12. Spring 中的 Bean 是线程安全的吗?

    不是

     

    13. Spring Bean 的生命周期?

    实例化bean对象-属性赋值-处理Aware接口(当有使用的时候)-初始化-销毁

     

    14. 什么是Spring自动装配,Spring 自动装配 Bean 有哪些方式,怎么使用?

    根据指定装配规则,Spring自动将匹配的属性值注入

    常用 byName根据bean的名称 id属性 byType根据类型 bean的class属性

    在bean标签里使用autowire属性 使用byName…

    局限性:重写,不能装配简单数据类型,模糊特性

     

    15. Spring Bean的注解有哪些?

    @Component @Repository @Service @Controller

     

     

    16. Spring Aop的专业术语

    连接点:类里可以被增强的方法,这些方法称为连接点

    关注点:在应用模块中实现以解决特定业务问题的方法

    横切关注点:贯穿整个应用程序的关注点 像事务管理,权限,日志

    切入点:实际被真正增强的方法,称为切入点

    引入:引入允许在已存在类中增加的新的方法和属性

    通知(增强):实际增强的逻辑部分称为通知(增强)

    目标对象:被通知对象

    通知类型:前置通知,后置通知,环绕通知,异常通知,最终通知

    切面:动作,把通知应用到切入点的过程

    代理:通知(增强后)后创建的对象

    切点表达式:Aop切点表达式:execution(* com.dao.hibimpl.*.*(..))

      第一个*代表所有的返回值类型

         第二个*代表所有的类

         第三个*代表类所有方法

           最后一个..代表所有的参数。

     

    AspectJ

     

     

     

    17. jdbc template是什么?怎么使用

    Spring框架对jdbc的封装,使用jdbctemplate方便对数据库操作

    引入jar包,在spring配置文件配置数据库连接池,配置jdbctemplate对象注入DataSource

     

     

     

     

    18. Spring 支持事务的管理方式?

       编程式事务管理(灵活,难维护)和声明式事务管理(业务和事务管理分离,通过注解或xml配置管理方便)

    声明式事务管理底层使用aop原理

     

     

    19. Spring 事务传播行为是什么,有几种?

    多事务方法调用的时候对数据库进行变化操作的管理

    有七种

     

     

    20. Spring 事务的隔离级别?

    与mysql事务一样

     

     

     

    21. Spring 事务实现方式有哪些?

    xml配置:用aop:config声明要进行事务增强的切面,用tx:advice声明具体方法的事务属性,及应用到的事务管理器,此方法的优势比较明显,使用比较方便,但是缺点是不容易理解,配置容易失误

    注解:使用@transactional注解配置声明事务,配置比较方便,程序员只要在service层代码设置即可实现。缺点就是后期调整很烦

     

    22. 说一下 Spring 的事务隔离?

    说几个读的问题,隔离级别,怎么解决

     

    23. 说一下 Spring MVC 运行流程?

    发送请求到前端控制器,前端控制器请求处理器映射器寻找handler,处理器映射器找到后返回,前端控制器在调用处理器适配器执行handler,执行完后向前端控制器返回modelandview,前端控制器请求视图解析器进行视图解析,解析完成后返回view给前端控制器,前端控制器进行视图渲染并向用户响应结果

     

    24. Spring MVC 有哪些组件?

    前端控制器 DispatcherServlet

     

    作用:接收请求、响应结果,相当于转发器

     

    处理器映射器HandlerMapping

     

    作用:根据请求的URL来查找Handler

     

    处理器适配器HandlerAdapter

     

    执行处理器

     

    处理器Handler 

     

    封装的controller

     

    视图解析器 ViewResolver

     

    根据视图逻辑名解析成真正的视图

     

    视图View

     

    View是一个接口, 它的实现类支持不同的视图类型

     

    25. Spring MVC 常用注解?

    @RequestBody:注解实现接收http请求的json数据,将json转换为java对象。

     

    @ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。

     

    @RestController:相当于@controller+@ResponseBody

     

    @RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。

     

    具有六个属性valuemethodconsumesproducesparamsheaders的作用

     

    Value:指定请求的实际地址,指定的地址可以是URI Template 模式;

     

    Method:指定请求的method类型,GET、POST、PUT、DELETE等;

     

    Consumes:指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;

     

    produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

     

    params:指定request中必须包含某些参数值是,才让该方法处理。

     

    Headers:指定request中必须包含某些指定的header值,才能让该方法处理请求

     

    26. SpringMvc中函数的返回值是什么?

    返回值可以有很多类型,有String, ModelAndView。ModelAndView类把视图和数据都合并的一起的,但一般用String比较好。

    27. SpringMvc用什么对象从后台向前台传递数据的?

    通过request、Model、Map、ModelAndView对象,把要传递的值添加到对象里面,前台就可以通过el表达式拿到。

    28.如果想在拦截的方法里面得到从前台传入的参数,怎么得到?

    1、直接在形参里面声明这个参数就可以,但必须名字和传过来的参数一样。

    2、使用@RequestParam注解的方式获取,注意设置的别名需要与表单传值的名称一致。

    3、使用POJO对象绑定请求参数值,注意对象中属性与表单元素的名称一致。

    29.如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象?

    直接在方法中声明这个对象,SpringMvc就自动会把属性赋值到这个对象里面。

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

    (1)转发:在返回值前面加"forward:",比如"forward:user.go?name=1"

    (2)重定向:在返回值前面加"redirect:",比如"redirect:user.go"

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

    导入jackon jar包,在控制器配置json映射,在方法上使用@ResponseBody注解

    32.Spring mvc @PathVariable怎么用?

    在@RequestMapping中请求路径,将需要传递的参数用{}括起来,传参用注解设置别名,别名需要和url中的参数名称一致

    33.Spring MVC里面拦截器是怎么写的

    实现HandlerInterceptor接口,

    然后在Spring MVC的配置文件中配置拦截器

    34.请说明filter(过滤器)和inteceptor(拦截器)的区别?

    1、拦截器是基于java的反射,过滤器是基于java的函数回调

    2、拦截器不依赖于servlet容器,而过滤器依赖于servlet容器

    3、拦截器只对action请求起作用,过滤器对所有的请求起作用

    4、拦截器可以访问action上下文,值栈里的对象,而过滤器不能访问

    5、在action生命周期中,拦截器可以被多次调用,过滤器只能在servlet初始化时调用一次

    6、拦截器可以获取IOC容器中的各个bean,过滤器不行,在拦截器中注入一个service可以调用逻辑业务

    35. SpringMVC异常处理?

    异常处理二种方式

    使用MVC提供的简单异常处理器 SimpleMappingExceptionResolver

    第一步:    value跳转页面    key 异常名

    自定义异常设置

    实现Spring的异常处理接口HanlerExceptionResolver自定义自己的异常处理器

    ①创建异常处理器实现HanlerExceptionResolver

    ②配置异常处理器

    ③编写异常页面

    ④测试异常跳转

    配置自定义异常处理器路径

    36.@Autowired 与@Resource的作用是什么有什么区别?

    他们二个都是用来装配bean的,都可以写在字段上或者setter上

    区别:

    Autowired是Spring提供的,@Resource是java2EE提供的

    @Autowired默认按照类型来注入,按照名称注入需要与修饰符连用

    @Resource二种类型都支持,默认按照名称注入,找不到就按照类型找

    37.MVC的控制器是不是单例模式,如果是,有什么问题,怎么解决?

    是单例模式,多线程访问的时候有线程安全问题,不要用同步,会影响性能,解决方案是在控制器里面不能写字段。

    38.SSM 三大框架各个原理,相互之间怎样的关系?

    (1).Springmvc框架主要处理用户请求和响应处理后的结果,

    如:提供处理用户提交的数据和数据类型转换以及在前台显示用户数据;

    (2).Spring框架主要提供依赖注入,是的各层的对象之间关联关系解耦,

    并且在Spring框架提供更大的事务支持。

    (3).Mybatis框架提供对象的持久化操作,就是面向对象的方式往数据库里面进行增删改查。

    通过MyBatis框架提供的适配包Mybatis-spring-1.3.0实现与spring的整合.

    39. 说一说MVC模式

    MVC (Model-View-Controller)模式,即模型-试图-控制器模式,

    其核心思想是将整个程序代码分成相对独立而又能协同工作的3个组成部分,具体的功能如下:

    模型(Model): 业务逻辑层。实现具体的业务逻辑、状态管理的功能。

    视图(View):表示层。与用户实现交互的页面,通常实现数据的输入和输出功能。

    控制器(Controller):控制层。起到控制整个业务流程的作用,实现View层跟Model层的协同工作。

  • 相关阅读:
    TortoiseGit
    申请成功
    web.xml文件中配置ShallowEtagHeaderFilter需注意的问题
    消息队列调研
    二阶段提交
    ACID CAP BASE介绍
    SQL NULL Values
    HTTPS原理
    ID生成器详解
    如何变得更聪明
  • 原文地址:https://www.cnblogs.com/kmcl1314/p/14344438.html
Copyright © 2011-2022 走看看