ITPub博客

首页 > 应用开发 > Java > 针对Java程序员的20个Spring MVC访谈问题

针对Java程序员的20个Spring MVC访谈问题

原创 Java 作者:Tybyq 时间:2018-11-16 16:14:49 0 删除 编辑

Spring MVC框架是用于开发Web应用程序的最流行的Java框架之一。 如果您一直在使用Java并开发基于Web的应用程序,那么您很可能已经  在项目中 使用了   Spring MVC 在过去十年中,它已成为开发Java Web应用程序的事实框架。 Spring MVC基于经典的MVC(模型 - 视图 - 控制器)设计模式,但远不止于此。 它利用了Spring框架在 依赖注入   和   控制反转 方面的优势  l并促进松散耦合的体系结构,类似于Spring框架。 由于其极大的普及性和实用性,大多数Java开发角色需要对Spring和Spring MVC有很好的了解。

对具有Spring和Spring MVC知识和经验的优秀Java开发人员有很高的需求。 为这种求职面试做好准备的一种方法是寻找潜在的面试问题。

这些问题不仅可以帮助您准备面试,还可以帮助您更好地理解基本概念,并鼓励您了解更多 - 这就是为什么我总是在寻找好的Spring MVC面试问题。

最近,  当我遇到Pivotal的一些Spring认证指南时 ,我正在准备   Spring Core Professional认证 这些指南包含一些关于Spring MVC的有趣问题。

尽管下面提供的这些问题只是为了让您对Spring认证的教学大纲有所了解,但实际上我发现许多这样的问题已经在各种Spring求职面试中被问到了我自己和朋友。

根据我的几个朋友的要求,我想在这里分享这些问题的答案。 因此,如果您正在准备Spring认证或Java开发人员面试,您会发现Spring MVC面试问题列表对您的准备工作非常有用。

针对Java程序员的20个Spring MVC访谈问题

不用多说,这里是我从Java访谈中常见的一些常见问题的Spring MVC问题列表,特别是来自Web开发职位。

1. MVC是设计模式的缩写。 它代表什么,它背后的想法是什么?

答案:MVC是Model-View-Controller设计模式的缩写。 该模式基于关注点分离设计原理,该原理促进处理不同层的不同功能以及层之间的松散耦合。

在MVC模式中,模型包含由View和Controler帮助在请求处理和路由中呈现的数据。

两个模型都不知道View,或View不依赖于Model,这意味着相同的模型可以由不同的视图呈现,例如JSP或FreeMarker,或者甚至可以在RESTful Web服务的情况下编写为JSON或XML。 您可以在我最喜欢的课程 Spring Framework 5:Beginner to Guru中 了解有关MVC的更多信息   如果您对Spring很认真,那么这就是您应该查看的课程。

20年春季MVC面试问题和答案2至5年经验丰富

2.你是否需要在类路径中使用spring-mvc.jar,或者它是spring-core的一部分? 

spring-mvc.jar不是spring-core的一部分,这意味着如果要在Java项目中使用Spring MVC框架,则必须在应用程序的类路径中包含spring-mvc.jar。 在Java Web应用程序中,spring-mvc.jar通常放在/ WEB-INF / lib文件夹中。

3.  DispatcherServlet   它用于 什么   和用于什么?  回答

这   DispatcherServlet   是Front Controller设计模式的一个实现,它处理Spring MVC应用程序的所有传入Web请求。 前端控制器模式(请参阅   企业应用程序设计模式 )是Web应用程序中的常见模式,其作用是接收所有请求并将其路由到应用程序的不同组件以进行实际处理。

对于Spring MVC,   DispatcherServlet   路由Web请求Spring MVC控制器。

在Spring MVC中,   DispatcherServlet   用于查找正确的Controller来处理请求,它在处理程序映射的帮助下完成,例如   @RequestMapping   注释。

它还负责将逻辑视图名称委派   ViewResolver   给客户端,然后将呈现的响应发送到客户端。

4.是否   DispatcherServlet   通过应用程序上下文实例化?  回答

不,它   DispatcherServlet   是由像Tomcat或Jetty这样的Servlet容器实例化的。 您必须将其定义   DispatcherServlet   到web.xml文件中,如下所示。

您可以看到   load-on-startup   标记为1,这意味着   DispatcherServlet   在将Spring MVC应用程序部署到Tomcat或任何其他Servlet容器时会实例化。 在实例化期间,它会查找文件servlet-name-context.xml,然后初始化此文件中定义的bean。

5. Spring MVC中的根应用程序上下文是什么? 怎么装?  回答

在Spring MVC中,使用的上下文   ContextLoaderListener   称为“根”应用程序上下文,它属于整个应用程序,而初始化使用的上下文   DispatcherServlet   实际上是特定于该servlet的。

从技术上讲,Spring MVC允许   DispatcherServlet   在Spring MVC Web应用程序中使用多个,因此,多个上下文分别针对相应的servlet。 但是,可能存在相同的根上下文。 您可以进一步查看    关于Pluralsight的 Spring MVC 课程 简介, 以了解有关Spring基础知识的更多信息。

Spring MVC访谈问题与解答

6.  @Controller   用于 什么   注释? 如何在没有注释的情况下创建控制器?  回答

这   @Controller   是一个用于定义Controller的Spring MVC注释,但实际上,它只是一个刻板印象注释。 您甚至可以使用 @Controller   注释 创建一个控制器而无需   注释Spring MVC Controller类   @Component   请求映射到处理程序方法的实际工作是使用 @RequestMapping   注释 完成的  

7.   ContextLoaderListener   它是什么以及它做了什么?  (回答)

这   ContextLoaderListener   是一个有助于引导Spring MVC的监听器。 顾名思义,它会加载并创建   ApplicationContext   因此您不必编写显式代码来创建它。

应用程序上下文是Spring bean离开的地方。 对于Web应用程序,有一个名为的子类   WebAppliationContext

该   ContextLoaderListener   还关系的生命周期   ApplicationContext   到的生命周期    ServletContext 你可以   ServletContext   从   WebApplicationContext   使用   getServletContext()   方法中获得。

8.你打算在web.xml中做什么? 你把它放在哪里?

将   ContextLoaderListener  在web.xml中为收听配置,你把一个标签内,如下图所示:

< 听众>
< listener-class >
org.springframework.web.context.ContextLoaderListener
</ listener-class >
</ listener >


部署Spring MVC Web应用程序时,Servlet容器创建了一个 ContextLoaderListener   的实例,该实例   加载了Spring   WebApplicationContext 您还可以看到   Spring MVC的初学者   ,以了解更多有关   ContextLoaderListener   和   WebApplicationContext  与他们的Spring MVC中的作用。

春季访谈问题和答案

9.传入请求如何映射到控制器并映射到方法?  回答

有时,还会问这个问题:如何   DispatcherServlet   知道哪个Controller应该处理请求? 嗯,答案在于称为处理程序映射的东西。

Spring使用处理程序映射将控制器与请求相关联。 两个常用的处理程序映射是   BeanNameUrlHandlerMapping   和   SimpleUrlHandlerMapping

在   BeanNameUrlHandlerMapping ,当请求URL与bean的名称匹配时,bean定义中的类是将处理请求的控制器。

另一方面,   SimpleUrlHandlerMapping 映射更明确。 您可以指定URL的数量,并且每个URL可以与控制器显式关联。

如果您使用注释来配置Spring MVC,则应使用注释将   @RequestMapping   传入请求映射到控制器和处理程序方法。

您还可以 @RequestMapping  通过URI路径,查询参数,请求的HTTP方法以及请求中存在的HTTP标头来 配置   注释。

10.   @RequestParam   用于什么?  回答

这   @RequestParam   是一个Spring MVC注释,用于从Controller的处理程序方法中的URL中提取请求参数或查询参数,如下所示:

public  String  personDetail(@RequestParam(“id”)long  id){
  ....
  返回 “personDetails” ;
}


该   @RequestParam   注释还支持数据类型转换,例如,你可以在这里看到一个字符串转换为自动登录,但它也可以导致一个异常,如果查询参数不存在或类型不匹配的情况。 您还可以使用requried = false使参数可选,例如   @RequestParam   (value =“id”,required = false)

11.  @RequestParam   和   之间有什么区别   @PathVariable   ?  回答

尽管两者   @RequestParam   和   @PathVariable   注释都用于从URL中提取一些数据,但它们之间存在关键差异。

将   @RequestParam   用于提取查询参数后,例如什么“?”  在URL中,   @PathVariable   用于提取URI本身的一部分。 例如,如果给定的URL是http:// localhost:8080 / SpringMVC / books / 3232233 /?format = json,那么您可以使用 @RequestParam   注释和/ books / {id}使用    @PathVariable 访问查询参数“format”   ,哪个会给你3232233。

这是另一个例子   @PathVariable

@RequestMapping(“/ persons / {id}”)
public  String  personDetail(@PathVariable(“id”)long  id){...}


此代码可以从/ persons / 123中提取person id = 123。 它特别用于   RESTful Web服务,   因为它们的ID通常是URI或URL路径的一部分。


春天的问题和答案

12.控制器方法的一些有效返回类型是什么? 

Spring MVC中的控制器方法有许多返回类型,它们由 @RequestMapping   控制器内部 注释   一些流行的是:

  1. 空虚

  2. 视图

  3. ModelAndView(Class)

  4. 型号(接口)

  5. 地图

  6. HttpEntity <?>或ResponseEntity <?>

  7. HttpHeaders

您可以在 此处查看  Spring MVC控制器的有效返回类型的完整列表

每种返回类型都有其特定用途。 例如,如果您正在使用String,那么这意味着Controller将只返回视图名称,此视图名称将被解析   ViewResolver

如果您不想返回任何视图名称,请提及返回类型void。 如果要设置视图名称以及要发送对象,请将其   ModelAndView   用作返回类型。

13.什么是   View   支持不同类型的背后的想法是   View 什么?  回答

A   View   是Spring MVC应用程序中的一个接口,其实现负责呈现上下文和公开模型。 单个视图公开多个模型属性。 Spring MVC中的视图可以是bean。

它们很可能被a实例化为bean   ViewResolver 由于此接口是无状态的,因此视图实现应该是线程安全的。 通过使用   ViewResolver ,可以将视图的逻辑名称解析为不同类型的   View   实现,例如,   JstlView   用于显示FreeMarker和Velocity的JSP或其他视图实现。

如果您是Spring MVC的新手,并且不熟悉这些基础课程,那么我建议您通过加入其中一 门免费的Spring课程来 学习Spring  

Spring MVC访谈问题和解答2至5年经验丰富的Java程序员

14.  View   在渲染阶段, 如何 选择 正确的权利   ? 

右边   View   是由 ViewResolver   Spring MVC  选择的   当Controller返回逻辑视图名称时   DispatcherServlet ,它会查询   ViewResolver   以找到正确的名称    View

的   ViewResolver ,这取决于它的实施,解决了逻辑视图到物理资源,例如JSP页面或Freemarker模板。

例如,   InternalResourceViewResolver   是一个默认值   ViewResolver   ,它使用前缀和后缀将逻辑视图名称(例如“hello”)转换为“/WEB-INF/hello.jsp”。

15.什么是   Model ? 

Model   是用于封装数据或输出以进行渲染的引用。  Model  始终创建并传递给Spring MVC中的视图。 如果映射的控制器方法具有   Model   方法参数,则   model   Spring框架会自动将实例注入该方法。

注入模型上设置的任何属性都会被保留并传递给   View 以下是在Spring MVC中使用Model的示例:

public  String  personDetail(Model  model){
...
模特。addAttribute(“name”,“Joe”);
...
}


16.为什么你可以访问   model   你的   View 它从何而来? 

您需要访问   model   View中的视图才能呈现输出。 它   model   包含要呈现的数据。 该   Model   控制器随附,其处理他们的客户机请求并封装输出成   Model   对象。

17.会议范围的目的是什么?  回答

会话范围的目的是为HTTP会话创建bean的实例。 这意味着如果相同的bean在会话中作用域,则可以为多个请求提供服务。 您可以使用范围属性或 @Scope   Spring MVC应用程序中 注释 来定义Spring bean的范围  

18. Web上下文中的默认范围是什么?  回答

单例作用域是Spring bean的默认作用域,即使在Web上下文中也是如此。 其他三个Web上下文感知范围是请求,会话和全局会话,它们仅在Web应用程序感知 ApplicationContext   对象中 可用   请参阅   Spring Master Class - Beginner to Expert   以了解有关 ApplicationContext   Spring的 更多信息  

19.为什么控制器可测试工件? 

在Spring MVC中,控制器是可测试的工件,因为它们不直接与任何 View   技术 耦合   它们只返回一个逻辑   View   名称,可以轻松测试。

20.这有什么作用   InternalResourceViewResolver   ?  回答

在Spring MVC中,   ViewResolver   返回   View   基于逻辑视图名称(由控制器提供)和语言环境处理输出呈现。 这样,Controller不会耦合到特定的视图技术,例如JSP或FreeMarker。 它只返回逻辑视图名称。

InternalResourceViewResolver   ViewResolver  Spring MVC中配置 的默认值   ,   DispatcherServlet   使用它来查找正确的视图。  InternalResourceViewResolver   用于呈现JSPs(   JstlView )。

它将前缀和后缀配置为逻辑视图名称,然后生成特定JSP的路径,如下所示:

< bean  class = “org.springframework.web.servlet.view.InternalResourceViewResolver”  >
< property  name = “prefix”  value = “/ WEB-INF /”  />
< property  name = “suffix”  value = “。jsp”  />
</ bean >


因此,如果Controller返回“hello”作为逻辑视图名称,   InternalViewResolver   则返回/WEB-INF/hello.jsp,并将   DispatcherServlet   请求转发到此JSP页面进行渲染。

关于 常见问题的Spring MVC面试问题 ,现在都是如此   如果您知道这些问题的答案,那么您就拥有了Spring MVC框架及其不同组件的良好基础,例如   DispatcherServlet 处理程序映射,控制器   Views 和    Model

祝你的面试好运!


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31557424/viewspace-2220387/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-10-31

  • 博文量
    206
  • 访问量
    160019