針對Java程式設計師的20個Spring MVC訪談問題

Tybyq發表於2018-11-16

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章