java面试spring_针对Java程序员的二十大Spring REST面试问题答案
java面試spring
大家好,過去兩周來,我一直在與Spring教程共享一些REST,今天,我將向申請Web開發人員角色的Java開發人員共享一些常見的Spring和REST采訪問題。 由于Spring Framework是用于開發Java Web應用程序和RESTful Web Services的最受歡迎的標準框架,因此任何資深Java開發人員都應該對Spring核心和Spring MVC有所了解,但是如果職位描述中提到REST和Web Services,您還需要了解如何使用Spring Framework開發RESTful Web服務。 從Spring 3.1開始,該框架進行了很多增強,以支持RESTFul API即開即用的許多功能,例如
通過僅檢測類路徑中的相關庫(例如Jackson和JAXB), HTTPMessageConverter可以將HTTP響應轉換為JSON或XML 。
Spring還為RESTful Web服務提供了自定義的注釋,例如@ RestController ,它可以使Controller知道REST,因此您不需要執行每個REST API所需的常規工作,例如將響應轉換為JSON。
對于在現實世界中開發和保護RESTful Web服務也必須具備對Spring Security的全面了解。 由于沒有安全性就無法使生活成為平凡的REST API,因此對安全性基礎知識(例如HTTP基本身份驗證 ,摘要身份驗證,OAuth和JWT)的充分了解非常重要。
20 Spring REST Web服務面試問題
這是有關在Spring Framework中使用REST Web服務的幾個常見問題。
REST代表什么? (回答)
REST代表REpresentational State Transfer,它使用HTTP協議將數據從客戶端發送到服務器,例如,可以使用JSON或XML將服務器中的書交付給客戶端。
什么是資源? (回答)
資源是REST體系結構中數據的表示方式。 通過將實體公開為資源,它允許客戶端使用HTTP方法(例如GET , POST ,
放入 ,刪除等
什么是安全的REST操作? (回答)
REST API使用HTTP方法執行操作。 某些不會在服務器上修改資源的HTTP操作被稱為安全操作,例如GET和HEAD。 另一方面, PUT ,POST和DELETE是不安全的,因為它們會修改服務器上的資源。
什么是冪等運算? 冪等為什么重要? ( 回答 )
無論您使用多少次,都有一些HTTP方法(例如GET)會產生相同的響應,例如,將多個GET請求發送到相同的URI將導致相同的響應而沒有任何副作用,因此被稱為等冪。
另一方面,POST不是冪等的,因為如果您發送多個POST請求,它將導致在服務器上創建多個資源,但是如果您使用它來更新資源,則PUT也是冪等的。
甚至,多個PUT請求更新服務器上的資源也會得到相同的最終結果。
REST是否可擴展和/或可互操作? (回答)
是的,REST是可伸縮且可互操作的。 它沒有要求在客戶端或服務器端選擇特定的技術。 您可以使用Java,C ++,Python或JavaScript創建RESTful Web服務并在客戶端使用它們。 我建議您讀一本有關REST API的好書,例如RESTful Web服務,以了解有關REST的更多信息。
RestTemplate的優點是什么? ( 回答 )
RestTemplate類是Spring框架中Template方法模式的實現。 與其他流行的模板類(例如JdbcTemplate或JmsTempalte ,它還簡化了與客戶端RESTful Web服務的交互。 您可以使用它很容易地使用RESTful Web Servicer,如本示例所示。
REST使用哪種HTTP方法? ( 回答 )
REST可以使用任何HTTP方法,但是最受歡迎的方法是GET用于檢索資源,POST用于創建資源,PUt用于更新資源以及DELETE用于從服務器中刪除資源。
Spring REST中的HttpMessageConverter是什么? (回答)
HttpMessageConverter是一個Strategy接口 ,它指定可以在HTTP請求和響應之間進行轉換的轉換器。 Spring REST使用此接口將HTTP響應轉換為各種格式,例如JSON或XML。
每個HttpMessageConverter實現都有一個或多個與之關聯的MIME類型。 Spring使用“ Accept”標頭來確定客戶端期望的內容類型。
然后它將嘗試找到一個注冊的HTTPMessageConverter ,它能夠處理該特定的內容類型,并使用它在將響應發送到客戶端之前將其轉換為該格式。
如何創建HttpMessageConverter的自定義實現以支持新型的請求/響應? (回答)
您只需要創建AbstractHttpMessageConverter的實現,并使用WebMvcConfigurerAdapter#extendMessageConverters()方法將其注冊,并生成新的請求/響應類型。
REST通常是無狀態的嗎? ( 回答 )
是的,REST API應該是無狀態的,因為它基于同樣無狀態的HTTP。 REST API中的請求應包含其處理所需的所有詳細信息,即它不應依賴于上一個或下一個請求或服務器端維護的某些數據,例如會話。 REST規范對使其成為無狀態設置了約束,因此在設計REST API時應牢記這一點。
@RequestMapping注釋有什么作用? ( 回答 )
@RequestMapping批注用于將Web請求映射到Spring Controller方法。 您可以基于HTTP方法(例如GET和POST)以及其他各種參數來映射請求。 例如,如果您正在使用Spring開發RESTful Web Service,則可以使用Produces和consumers屬性以及媒體類型注釋來指示此方法僅用于產生或使用JSON,如下所示:
@RequestMapping (method = RequestMethod.POST, consumes="application/json") public Book save(@RequestBody Book aBook) {return bookRepository.save(aBook); }您可以類似地創建其他處理程序方法以生成JSON或XML。
@Controller是構造型嗎? @RestController是構造型嗎? ( 回答 )
是的, @Controller @RestController和@RestController都是@RestController型。 @Controller實際上是Spring的@Component型注釋的一種特殊形式。 這意味著在容器的組件掃描過程中,Spring容器也會自動檢測帶有@Controller注釋的類。
并且, @RestController是用于RESTful Web服務的@Controller的特殊化。 它不僅結合了@ResponseBody和@Controller注釋,而且還為您的控制器類賦予了更多含義,以清楚地表明它處理RESTful請求。
Spring框架也可以使用此注釋來提供一些將來與REST API開發相關的更有用的功能。
@Controller和@RestController什么@RestController ? ( 回答 )
正如我在較早的文章中所討論的, @Controller @RestControlle和@RestControlle r之間有很多區別(請參閱答案),但最重要的是,使用@RestController可以自動獲得@ResponseBody批注,這意味著您無需單獨進行批注。您的帶有@ResponseBody批注的處理程序方法。 這使得使用Spring可以更輕松地開發RESTful Web服務。 你可以在這里看到學習
在Spring MVC中何時需要@ResponseBody注釋? ( 回答 )
可以在方法上放置@ResponseBody批注,以指示應將返回類型直接寫到HTTP響應主體(而不是放置在Model中或解釋為視圖名稱)。
例如:
@RequestMapping(path = "/hello", method = RequestMethod.PUT) @ResponseBody public String helloWorld() {return "Hello World"; }另外,您也可以使用@RestController注釋代替@Controller注釋。 這將消除使用@ResponseBody的需要,因為如上一個答案中所述,它自動帶有@RestController批注。
在Spring MVC中, @PathVariable有什么作用? 為什么它在帶有Spring的REST中有用? ( 回答 )
這是Spring MVC的有用注釋之一,它使您可以從URI(如查詢參數)讀取值。 在使用Spring創建RESTful Web服務的情況下,這特別有用,因為在REST中,資源標識符是URI的一部分。通常會向有經驗的Spring MVC開發人員(例如4至6年的經驗)提出這個問題。
例如,如果要提取101 ID,則在URL http://myapp.com/books/101 ,可以使用Spring MVC的@PathVariable注釋。
成功的DELETE語句的HTTP狀態返回碼是什么? ( 回答 )
成功刪除后,REST API應該返回什么狀態代碼沒有嚴格的規則,即它可以返回200 Ok或204 No Content。 通常,如果DELETE操作成功并且響應主體為空,則返回204。如果DELETE請求成功并且響應主體為非空,則返回200
CRUD是什么意思? (回答)
CRUD是創建,讀取,更新和刪除的縮寫。 在REST API中,POST用于創建資源,GET用于讀取資源,
PUT用于更新資源,而DELETE用于從服務器刪除資源。這是另一級初學者水平的Spring MVC問題,適用于1-3年的經驗豐富的程序員
您在哪里需要@EnableWebMVC? (回答)
使用Java配置而不是XML配置Spring MVC時,需要@EnableWebMvc注釋才能啟用Spring MVC。 它等效<mvc: annotation-driven>in XML配置中的<mvc: annotation-driven>in 。
它支持使用@RequestMapping將傳入請求映射到處理程序方法的@RequestMapping @Controller-annotated類。
在Spring MVC中何時需要@ResponseStatus批注? ( 回答 )
一個3到5年經驗豐富的Spring開發人員的好問題。 在Spring MVC和REST中的錯誤處理期間,需要@ResponseStatus批注。 通常,當在服務器端引發錯誤或異常時,Web服務器將返回一個覆蓋的HTTP狀態代碼500 –內部服務器錯誤。
這可能適用于人類用戶,但不適用于REST客戶端。 如果找不到資源,則需要向他們發送正確的狀態代碼,例如404。 在這里可以使用@ResponseStatus批注,該批注允許您在自定義Exception的情況下發送自定義HTTP狀態代碼以及正確的錯誤消息。
為了使用它,您可以創建自定義異常,并使用@ResponseStatus批注以及正確的HTTP狀態代碼和原因對其進行批注。
當從控制器的處理程序方法中拋出此類異常并且未在其他任何地方處理此類異常時,帶有已設置的正確HTTP狀態代碼的適當HTTP響應將發送到客戶端。
例如,如果您正在為提供書籍信息的庫編寫RESTful Web服務,則可以使用@ResponseStatus創建異常,當找不到書籍而不是內部服務器錯誤(500)時,該異常返回HTTP響應代碼404,如圖所示下面:
@ResponseStatus(value=HttpStatus.NOT_FOUND, reason="No such Book") // 404public class BookNotFoundException extends RuntimeException {// ...}如果從任何處理程序方法引發此異常,則將以“ No such Book”為原因的HTTP錯誤代碼404返回給客戶端。
REST安全嗎? 您可以采取什么措施來保護它? ( 回答 )
這個問題通常是由經驗豐富的Java程序員提出的,例如2到5年的REST和Spring經驗。 安全性是廣義的術語,它可以表示通過加密或使用身份驗證和授權提供的訪問限制來提供消息的安全性。 REST通常不安全,但是您可以使用Spring安全性來保護它。
至少您可以通過在Spring安全配置文件中使用HTTP來啟用HTTP基本認證。 同樣,如果基礎服務器支持HTTPS,則可以使用HTTPS公開REST API。
REST是否可以與傳輸層安全性(TLS)一起使用? ( 回答 )
TLS或傳輸層安全性用于客戶端和服務器之間的安全通信。 它是SSL(安全套接字層)的后繼者。 由于HTTPS可以同時使用SSL和TLS,因此REST也可以使用TLS。
實際上,REST談到了有關安全性的所有內容,這取決于實現此要求的服務器。 如果服務器支持SSL,則可以使用HTTP和HTTPS訪問相同的RESTful Web服務。
如果您使用的是Tomcat,則可以在此處了解更多有關如何在Tomcat中啟用SSL的信息。
您是否需要在類路徑中使用Spring MVC來開發RESTful Web服務? ( 回答 )
經常向在Spring擁有1到2年經驗的Java程序員提出這個問題。 簡短的答案是,是的,您需要Java應用程序的類路徑中的Spring MVC才能使用Spring框架開發RESTful Web服務。 它實際上是Spring MVC中提供所有有用的注解如@RestController , @ResponseCode , @ResponseBody , @RequestBody和@PathVariable ,因此必須用彈簧mvc.jar或在你的pom.xml適當的Maven項
這就是針對初學者和經驗豐富的Java JEE開發人員的一些常見的Spring REST Interview問題 。 如果您要獲得Spring認證,這些問題對于提高您對Spring REST的知識也非常有用。 如果您從Spring認證的角度需要更多問題,可以在David Mayer的Core Spring Simulator上找到有關此主題的很多問題,它是目前通過Spring認證的最佳模擬器之一。
您可能喜歡的其他Spring教程和資源
- 5個免費課程,用于學習Core Spring和Spring Boot
- Spring MVC框架如何工作?
- Spring Security中的基本身份驗證如何工作?
- Spring中DispatcherServlet的作用是什么?
- Spring中@ Service,@ Controller和@Component之間有什么區別
- Baeldung的REST with Spring認證課程
感謝您閱讀本文,如果您喜歡本文,請與您的朋友和同事分享。 如果您有任何未在此列表中回答的問題,請發表評論,我會盡力為您找到答案。
翻譯自: https://www.javacodegeeks.com/2018/02/top-20-spring-rest-interview-questions-answers-java-programmers.html
java面試spring
總結
以上是生活随笔為你收集整理的java面试spring_针对Java程序员的二十大Spring REST面试问题答案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 示例_功能Java示例 第3部
- 下一篇: 亚马逊投资Anthropic40亿美元