【秋招必備】Spring MVC面試題(2021最新版)


前言

小編分享的這份Java后端開發面試總結包含了JavaOOP、Java集合容器、Java異常、並發編程、Java反射、Java序列化、JVM、Redis、Spring MVC、MyBatis、MySQL數據庫、消息中間件MQ、Dubbo、Linux、ZooKeeper、 分布式&數據結構與算法等26個專題技術點,都是小編在各個大廠總結出來的面試真題,已經有很多粉絲靠這份PDF拿下眾多大廠的offer,今天在這里總結分享給到大家!【已完結】

完整版Java面試題地址:2021最新面試題合集集錦

序號 專題 內容 鏈接
1 中間件 【秋招必備】Java中間件面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/14851355.html
2 微服務 【秋招必備】Java微服務面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/14893883.html
3 並發編程 【秋招必備】Java並發編程面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/14893914.html
4 Java基礎 【秋招必備】Java基礎知識面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/14968925.html
5 Spring Boot 【秋招必備】Spring Boot面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/14968927.html
6 Redis 【秋招必備】Redis面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/14968935.html
7 Spring MVC 【秋招必備】Spring MVC面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/14977235.html
8 Spring Cloud 【秋招必備】Spring Cloud面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/14977264.html
9 MySQL優化 【秋招必備】MySQL優化面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/14977264.html
10 JVM 【秋招必備】JVM性能調優面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/14981629.html
11 Linux 【秋招必備】Linux面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/15004102.html
12 Mybatis 【秋招必備】Mybatis面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/15004110.html
13 網絡編程 【秋招必備】TCP,UDP,Socket,Http網絡編程面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/15012942.html
14 設計模式 【秋招必備】設計模式面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/15012953.html
15 大數據 【秋招必備】大數據面試題100道(2021最新版) https://www.cnblogs.com/QLCZ/p/15012984.html
16 Tomcat 【秋招必備】Tomcat面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/15017627.html
17 多線程 【秋招必備】多線程面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/15017638.html
18 Nginx 【秋招必備】Nginx_BIO_NIO_AIO面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/15032145.html
19 memcache 【秋招必備】memcache面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/15032231.html
20 java異常 【秋招必備】java異常面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/15035951.html
21 Java虛擬機 【秋招必備】Java虛擬機面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/15036517.html
22 Java集合 【秋招必備】Java集合面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/15041523.html
23 Git常用命令 【秋招必備】Git常用命令(2021最新版) https://www.cnblogs.com/QLCZ/p/15041786.html
24 Elasticsearch 【秋招必備】Elasticsearch面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/15044301.html
25 Dubbo 【秋招必備】Dubbo面試題(2021最新版) https://www.cnblogs.com/QLCZ/p/15044434.html

一.概述

1、什么是Spring MVC?簡單介紹下你對Spring MVC的理解?

Spring MVC是一個基於Java的實現了MVC設計模式的請求驅動類型的輕量級Web框架,通過把模型-視圖-控制器分離,將web層進行職責解耦,把復雜的web應用分成邏輯清晰的幾部分,簡化開發,減少出錯,方便組內開發人員之間的配合。

2、Spring MVC的優點

(1)可以支持各種視圖技術,而不僅僅局限於JSP;

(2)與Spring框架集成(如IoC容器、AOP等);

(3)清晰的角色分配:前端控制器(dispatcherServlet) , 請求到處理器映射(handlerMapping), 處理器適配器(HandlerAdapter), 視圖解析器(ViewResolver)。

(4) 支持各種請求資源的映射策略。

二.核心組件

3、Spring MVC的主要組件?

(1)前端控制器 DispatcherServlet(不需要程序員開發)

作用:接收請求、響應結果,相當於轉發器,有了DispatcherServlet 就減少了其它組件之間的耦合度。

(2)處理器映射器HandlerMapping(不需要程序員開發)

作用:根據請求的URL來查找Handler

(3)處理器適配器HandlerAdapter

注意:在編寫Handler的時候要按照HandlerAdapter要求的規則去編寫,這樣適配器HandlerAdapter才可以正確的去執行Handler。

(4)處理器Handler(需要程序員開發)

(5)視圖解析器 ViewResolver(不需要程序員開發)

作用:進行視圖的解析,根據視圖邏輯名解析成真正的視圖(view)

(6)視圖View(需要程序員開發jsp)

View是一個接口, 它的實現類支持不同的視圖類型(jsp,freemarker,pdf等等)

4、什么是DispatcherServlet?

Spring的MVC框架是圍繞DispatcherServlet來設計的,它用來處理所有的HTTP請求和響應。

5、什么是Spring MVC框架的控制器?

控制器提供一個訪問應用程序的行為,此行為通常通過服務接口實現。控制器解析用戶輸入並將其轉換為一個由視圖呈現給用戶的模型。Spring用一個非常抽象的方式實現了一個控制層,允許用戶創建多種用途的控制器。

6、Spring MVC的控制器是不是單例模式,如果是,有什么問題,怎么解決?

答:是單例模式,所以在多線程訪問的時候有線程安全問題,不要用同步,會影響性能的,解決方案是在控制器里面不能寫字段。

三.工作原理

7、請描述Spring MVC的工作流程?描述一下 DispatcherServlet 的工作流程?

(1)用戶發送請求至前端控制器DispatcherServlet;

(2) DispatcherServlet收到請求后,調用HandlerMapping處理器映射器,請求獲取Handle;

(3)處理器映射器根據請求url找到具體的處理器,生成處理器對象及處理器攔截器(如果有則生成)一並返回給DispatcherServlet;

(4)DispatcherServlet 調用 HandlerAdapter處理器適配器;

(5)HandlerAdapter 經過適配調用 具體處理器(Handler,也叫后端控制器);

(6)Handler執行完成返回ModelAndView;

(7)HandlerAdapter將Handler執行結果ModelAndView返回給DispatcherServlet;

(8)DispatcherServlet將ModelAndView傳給ViewResolver視圖解析器進行解析;

(9)ViewResolver解析后返回具體View;

(10)DispatcherServlet對View進行渲染視圖(即將模型數據填充至視圖中)

(11)DispatcherServlet響應用戶。

四.MVC框架

8、MVC是什么?MVC設計模式的好處有哪些

五.常用注解

9、注解原理是什么?

  • 注解本質是一個繼承了Annotation的特殊接口,其具體實現類是Java運行時生成的動態代理類。我們通過反射獲取注解時,返回的是Java運行時生成的動態代理對象。通過代理對象調用自定義注 解的方法,會最終調用AnnotationInvocationHandler的invoke方法。該方法會從memberValues這個Map中索引出對應的值。而memberValues的來源是Java常量池。

10、Spring MVC常用的注解有哪些?

  • @RequestMapping:用於處理請求 url 映射的注解,可用於類或方法上。用於類上,則表示類中的所有響應請求的方法都是以該地址作為父路徑。
  • @RequestBody:注解實現接收http請求的json數據,將json轉換為java對象。
  • @ResponseBody:注解實現將conreoller方法返回對象轉化為json對象響應給客戶。
  • @Conntroller:控制器的注解,表示是表現層,不能用用別的注解代替

11、SpingMvc中的控制器的注解一般用哪個,有沒有別的注解可以替代?

  • 答:一般用@Controller注解,也可以使用@RestController,@RestController注解相當於@ResponseBody + @Controller,表示是表現層,除此之外,一般不用別的注解代替

12、@Controller注解的作用?

13、@RequestMapping注解的作用?

14、@ResponseBody注解的作用?

  • 作用: 該注解用於將Controller的方法返回的對象,通過適當的HttpMessageConverter轉換為指定格式后,寫入到Response對象的body數據區。
  • 使用時機:返回的數據不是html標簽的頁面,而是其他某種格式的數據時(如json、xml等)使用;

15、@PathVariable和@RequestParam的區別:

  • 請求路徑上有個id的變量值,可以通過@PathVariable來獲取 @RequestMapping(value =“/page/{id}”, method = RequestMethod.GET)
  • @RequestParam用來獲得靜態的URL請求入參 spring注解時action里用到。

六.其他

16、Spring MVC與Struts2區別:

17、Spring MVC怎么樣設定重定向和轉發的?

18、Spring MVC怎么和AJAX相互調用的?

19、如何解決POST請求中文亂碼問題,GET的又如何處理呢?

20、Spring MVC的異常處理?

  • 答:可以將異常拋給Spring框架,由Spring框架來處理;我們只需要配置簡單的異常處理器,在異常處理器中添視圖頁面即可。

21、如果在攔截請求中,我想攔截get方式提交的方法,怎么配置

  • 答:可以在@RequestMapping注解里面加上method=RequestMethod.GET

22、怎樣在方法里面得到Request,或者Session?

  • 答:直接在方法的形參中聲明request,Spring MVC就自動把request對象傳入。

23、如果想在攔截的方法里面得到從前台傳入的參數,怎么得到?

  • 答:直接在形參里面聲明這個參數就可以,但必須名字和傳過來的參數一樣。

24、如果前台有很多個參數傳入,並且這些參數都是一個對象的,那么怎么樣快速得到這個對象?

  • 答:直接在方法中聲明這個對象,Spring MVC就自動會把屬性賦值到這個對象里面。

25、Spring MVC中函數的返回值是什么?

  • 答:返回值可以有很多類型,有String, ModelAndView。ModelAndView類把視圖和數據都合並的一起的,但一般用String比較好

26、Spring MVC用什么對象從后台向前台傳遞數據的?

  • 答:通過ModelMap對象,可以在這個對象里面調用put方法,把對象加到里面,前台就可以通過el表達式拿到。

27、怎么樣把ModelMap里面的數據放入Session里面?

  • 答:可以在類上面加上@SessionAttributes注解,里面包含的字符串就是要放入session里面的key。

28、Spring MVC里面攔截器是怎么寫的?

  • 有兩種寫法,一種是實現HandlerInterceptor接口,另外一種是繼承適配器類,接着在接口方法當中,實現處理邏輯;然后在Spring MVC的配置文件中配置攔截器即可:
<!-- 配置Spring MVC的攔截器 -->
<mvc:interceptors>
<!-- 配置一個攔截器的Bean就可以了 默認是對所有請求都攔截 -->
<bean id="myInterceptor" class="com.zwp.action.MyHandlerInterceptor">
</bean>
<!-- 只針對部分請求攔截 -->
<mvc:interceptor>
<mvc:mapping path="/modelMap.do" />
<bean class="com.zwp.action.MyHandlerInterceptorAdapter" />
</mvc:interceptor>
</mvc:interceptors>

29、介紹一下 WebApplicationContext:

  • WebApplicationContext 繼承了ApplicationContext 並增加了一些WEB應用必備的特有功能,它不同於一般的ApplicationContext ,因為它能處理主題,並找到被關聯的servlet。

最后

篇幅有限,其他內容就不在這里一一展示了,整理不易,歡迎大家一起交流。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM