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

2024-04-30 13:08

本文主要是介绍针对Java程序员的20个Spring MVC访谈问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

祝你的面试好运!

这篇关于针对Java程序员的20个Spring MVC访谈问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/948948

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu