前言
小編分享的這份Java后端開發面試總結包含了JavaOOP、Java集合容器、Java異常、並發編程、Java反射、Java序列化、JVM、Redis、Spring MVC、MyBatis、MySQL數據庫、消息中間件MQ、Dubbo、Linux、ZooKeeper、 分布式&數據結構與算法等26個專題技術點,都是小編在各個大廠總結出來的面試真題,已經有很多粉絲靠這份PDF拿下眾多大廠的offer,今天在這里總結分享給到大家!【已完結】
完整版Java面試題地址:2021最新面試題合集集錦。
一.概述
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。
最后
篇幅有限,其他內容就不在這里一一展示了,整理不易,歡迎大家一起交流。