針對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很認真,那麼這就是您應該檢視的課程。
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基礎知識的更多資訊。
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
控制器內部
註釋
。
一些流行的是:
-
串
-
空虛
-
檢視
-
ModelAndView(Class)
-
型號(介面)
-
地圖
-
HttpEntity <?>或ResponseEntity <?>
-
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 。
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- @程式設計師鄒欣 訪談問題有獎徵集(圖靈訪談)程式設計師圖靈
- 《Java程式設計師修煉之道》作者Ben Evans訪談問題有獎徵集(圖靈訪談)Java程式設計師圖靈
- 談談對程式設計師的管理程式設計師
- 好程式設計師Java培訓分享20個Java程式設計師基礎題程式設計師Java
- 談談對程式設計師的培養程式設計師
- 國外程式設計師訪談:獨立程式設計師的一週程式設計師
- 讀《程式設計大師訪談錄》程式設計
- 再談談這個沉重的話題--程式設計師的出路程式設計師
- 看看一個老程式設計師是如何手寫Spring MVC的!程式設計師SpringMVC
- 程式設計師需要自問的 10 個問題程式設計師
- 《Java 8函數語言程式設計》作者Richard Warburton訪談問題有獎徵集(圖靈訪談)Java函數程式設計圖靈
- 好程式設計師Java教程分享面試中Spring的技術問題程式設計師Java面試Spring
- 程式設計師調程式碼訪談:Russ Cox程式設計師
- 程式設計師調程式碼訪談:James Hague程式設計師
- 程式設計師調程式碼訪談:Brent Simmons程式設計師
- Java程式設計師面試常見問題Java程式設計師面試
- 程式設計師訪談(一):學無止境程式設計師
- Java程式設計師面試時應注意的三個經典問題!Java程式設計師面試
- Susan Lammers:與程式設計大師們的對話(圖靈訪談)程式設計圖靈
- 針對Spring MVC的Interceptor記憶體馬SpringMVC記憶體
- 一個Java程式設計師對2011年的回顧Java程式設計師
- 也談談程式設計師職業規劃的幾個問題:我的一些故事程式設計師
- 面對一個Bug,高手程式設計師是如何解決問題的?程式設計師
- 國外程式設計師訪談:Dropbox 女程式設計師 Leah Culver程式設計師
- 程式設計師解決問題的 60 個策略程式設計師
- 程式設計師解決問題的60個策略程式設計師
- 15個IT程式設計師必須思考的問題程式設計師
- 程式設計師世界常見的6個問題程式設計師
- 國外程式設計師訪談:學無止境程式設計師
- 程式設計大師訪談人物——比爾·蓋茨程式設計
- 好程式設計師Java教程分享Java中String型別的10個問題程式設計師Java型別
- [英]Susan Lammers:與程式設計大師們的對話(圖靈訪談)程式設計圖靈
- 談談程式設計師程式設計師
- Java程式設計師,你的簡歷到底問題在哪?Java程式設計師
- 好程式設計師分享:Java面試題常見問題程式設計師Java面試題
- 《Erlang程式設計(第2版)》作者Joe Armstrong訪談問題有獎徵集(圖靈訪談)程式設計圖靈
- 程式設計師如何提一個好問題程式設計師
- 信念、思考、行動-談談程式設計師返回家鄉的創業問題程式設計師創業