Spring与MVC面试题
生活随笔
收集整理的這篇文章主要介紹了
Spring与MVC面试题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Spring/Spring MVC
1. Spring是什么,好處有哪些,為什么要使用?
Spring是一個輕量級的開源的JAVAEE框架
好處:方便解耦簡化開發,Aop編程支持,方便程序測試和進行事務操作,可以整合其他框架,降低Api開發難度
有以上的優點可以解決企業應用開發的復雜性
2. 解釋一下什么是 AOP?
面向切面:在不改變原有方法的定義與使用,原程序的流程,開源改變原有方法的功能(增加功能)
底層原理:動態代理
3. 解釋一下什么是 IOC?
控制反轉(依賴注入):將創建對象的控制權交給Spring(容器)管理
實現:反射
IOC和di的區別:ioc可以理解為目的,di為手段。Ioc將對象創建權(new對象)反轉給容器,di依賴ioc容器在對象創建的過程中,將對象依賴的屬性通過配置進行注入。
底層原理:xml解析,工廠模式,反射
4. Spring有幾種IOC容器,區別是什么?
BeanFactory:負責讀取bean配置文檔,管理bean的加載,實例化,維護bean之間的依賴關系,負責bean的生命周期
加載配置文件時候不對創建對象,在獲取對象(使用)才會創建對象
ApplicationContext:是BeanFactory的子接口,除了上述功能外還提供了更完整的框架功能:國際化,資源訪問,事件傳遞
加載配置文件時就會把配置文件對象進行創建
實現類
5. Spring 有哪些主要模塊?
6. 什么是SpringBean,有幾種類型Bean?
是spring Ioc容器管理的對象,由IOC容器管理來實例化、配置、裝配和管理,基于用戶提供給容器的配置元數據(注入方式)配置
有二種類型bean
普通bean:在配置文件中定義bean類型就是返回類型
工程bean:在配置文件中定義bean類型可以和返回類型不一樣
7. Spring Ioc的注入方式?
基于xml配置:set注入,構造器注入
基于注解方式:注解方式注入
8.Spring可以注入null和屬性值包含特殊符號么?
可以
9.Spring 中的內部Bean和外部Bean是什么?
外部bean用ref屬性放入bean標簽的id值
內部bean:當有一個學生bean和班級bean的時候,班級bean是學生bean的一個屬性,可以在學生bean標簽內使用property標簽嵌套班級bean標簽
10.Spring 中如何注入java集合?
注入屬性值如下圖
注入對象時如下圖
使用bean標簽設置集合對象屬性值,在注入集合中使用list標簽內用ref標簽獲取對象bean
11. Spring 支持幾種 Bean 的作用域?
五種
默認Singleto:單例模式 Prototype 多例 Request 每個請求 session 會話周期
Global-session 全局session 后面3個基于applicationcontext下有效
12.Spring 中的 Bean 是線程安全的嗎?
不是
13.Spring Bean 的生命周期?
實例化bean對象-屬性賦值-處理Aware接口(當有使用的時候)-初始化-銷毀
14. 什么是Spring自動裝配,Spring 自動裝配 Bean 有哪些方式,怎么使用?
根據指定裝配規則,Spring自動將匹配的屬性值注入
常用 byName根據bean的名稱 id屬性 byType根據類型 bean的class屬性
在bean標簽里使用autowire屬性 使用byName…
局限性:重寫,不能裝配簡單數據類型,模糊特性
15. Spring Bean的注解有哪些?
@Component @Repository @Service @Controller
16. Spring Aop的專業術語
連接點:類里可以被增強的方法,這些方法稱為連接點
關注點:在應用模塊中實現以解決特定業務問題的方法
橫切關注點:貫穿整個應用程序的關注點 像事務管理,權限,日志
切入點:實際被真正增強的方法,稱為切入點
引入:引入允許在已存在類中增加的新的方法和屬性
通知(增強):實際增強的邏輯部分稱為通知(增強)
目標對象:被通知對象
通知類型:前置通知,后置通知,環繞通知,異常通知,最終通知
切面:動作,把通知應用到切入點的過程
代理:通知(增強后)后創建的對象
切點表達式:Aop切點表達式:execution(* com.dao.hibimpl.*.*(..))
第一個*代表所有的返回值類型
第二個*代表所有的類
第三個*代表類所有方法
最后一個..代表所有的參數。
AspectJ
17. jdbc template是什么?怎么使用
Spring框架對jdbc的封裝,使用jdbctemplate方便對數據庫操作
引入jar包,在spring配置文件配置數據庫連接池,配置jdbctemplate對象注入DataSource
18. Spring 支持事務的管理方式?
編程式事務管理(靈活,難維護)和聲明式事務管理(業務和事務管理分離,通過注解或xml配置管理方便)
聲明式事務管理底層使用aop原理
19. Spring 事務傳播行為是什么,有幾種?
多事務方法調用的時候對數據庫進行變化操作的管理
有七種
20. Spring 事務的隔離級別?
與mysql事務一樣
21. Spring 事務實現方式有哪些?
xml配置:用aop:config聲明要進行事務增強的切面,用tx:advice聲明具體方法的事務屬性,及應用到的事務管理器,此方法的優勢比較明顯,使用比較方便,但是缺點是不容易理解,配置容易失誤
注解:使用@transactional注解配置聲明事務,配置比較方便,程序員只要在service層代碼設置即可實現。缺點就是后期調整很煩
22. 說一下 Spring 的事務隔離?
說幾個讀的問題,隔離級別,怎么解決
23. 說一下 Spring MVC 運行流程?
發送請求到前端控制器,前端控制器請求處理器映射器尋找handler,處理器映射器找到后返回,前端控制器在調用處理器適配器執行handler,執行完后向前端控制器返回modelandview,前端控制器請求視圖解析器進行視圖解析,解析完成后返回view給前端控制器,前端控制器進行視圖渲染并向用戶響應結果
24. Spring MVC 有哪些組件?
前端控制器 DispatcherServlet
作用:接收請求、響應結果,相當于轉發器
處理器映射器HandlerMapping
作用:根據請求的URL來查找Handler
處理器適配器HandlerAdapter
執行處理器
處理器Handler
封裝的controller
視圖解析器 ViewResolver
根據視圖邏輯名解析成真正的視圖
視圖View
View是一個接口, 它的實現類支持不同的視圖類型
25.Spring MVC 常用注解?
@RequestBody:注解實現接收http請求的json數據,將json轉換為java對象。
@ResponseBody:注解實現將conreoller方法返回對象轉化為json對象響應給客戶。
@RestController:相當于@controller+@ResponseBody
@RequestMapping:用于處理請求 url 映射的注解,可用于類或方法上。
具有六個屬性valuemethodconsumesproducesparamsheaders的作用
Value:指定請求的實際地址,指定的地址可以是URI Template 模式;
Method:指定請求的method類型,GET、POST、PUT、DELETE等;
Consumes:指定處理請求的提交內容類型(Content-Type),例如application/json, text/html;
produces:指定返回的內容類型,僅當request請求頭中的(Accept)類型中包含該指定類型才返回;
params:指定request中必須包含某些參數值是,才讓該方法處理。
Headers:指定request中必須包含某些指定的header值,才能讓該方法處理請求
26.SpringMvc中函數的返回值是什么?
返回值可以有很多類型,有String, ModelAndView。ModelAndView類把視圖和數據都合并的一起的,但一般用String比較好。
27. SpringMvc用什么對象從后臺向前臺傳遞數據的?
通過request、Model、Map、ModelAndView對象,把要傳遞的值添加到對象里面,前臺就可以通過el表達式拿到。
28.如果想在攔截的方法里面得到從前臺傳入的參數,怎么得到?
1、直接在形參里面聲明這個參數就可以,但必須名字和傳過來的參數一樣。
2、使用@RequestParam注解的方式獲取,注意設置的別名需要與表單傳值的名稱一致。
3、使用POJO對象綁定請求參數值,注意對象中屬性與表單元素的名稱一致。
29.如果前臺有很多個參數傳入,并且這些參數都是一個對象的,那么怎么樣快速得到這個對象?
直接在方法中聲明這個對象,SpringMvc就自動會把屬性賦值到這個對象里面。
30.SpringMVC怎么樣設定重定向和轉發的?
(1)轉發:在返回值前面加"forward:",比如"forward:user.go?name=1"
(2)重定向:在返回值前面加"redirect:",比如"redirect:user.go"
31.SpringMvc怎么和AJAX相互調用的?
導入jackon jar包,在控制器配置json映射,在方法上使用@ResponseBody注解
32.Spring mvc @PathVariable怎么用?
在@RequestMapping中請求路徑,將需要傳遞的參數用{}括起來,傳參用注解設置別名,別名需要和url中的參數名稱一致
33.Spring MVC里面攔截器是怎么寫的
實現HandlerInterceptor接口,
然后在Spring MVC的配置文件中配置攔截器
34.請說明filter(過濾器)和inteceptor(攔截器)的區別?
1、攔截器是基于java的反射,過濾器是基于java的函數回調
2、攔截器不依賴于servlet容器,而過濾器依賴于servlet容器
3、攔截器只對action請求起作用,過濾器對所有的請求起作用
4、攔截器可以訪問action上下文,值棧里的對象,而過濾器不能訪問
5、在action生命周期中,攔截器可以被多次調用,過濾器只能在servlet初始化時調用一次
6、攔截器可以獲取IOC容器中的各個bean,過濾器不行,在攔截器中注入一個service可以調用邏輯業務
35. SpringMVC異常處理?
異常處理二種方式
使用MVC提供的簡單異常處理器 SimpleMappingExceptionResolver
第一步: value跳轉頁面 key 異常名
自定義異常設置
實現Spring的異常處理接口HanlerExceptionResolver自定義自己的異常處理器
①創建異常處理器實現HanlerExceptionResolver
②配置異常處理器
③編寫異常頁面
④測試異常跳轉
配置自定義異常處理器路徑
36.@Autowired 與@Resource的作用是什么有什么區別?
他們二個都是用來裝配bean的,都可以寫在字段上或者setter上
區別:
Autowired是Spring提供的,@Resource是java2EE提供的
@Autowired默認按照類型來注入,按照名稱注入需要與修飾符連用
@Resource二種類型都支持,默認按照名稱注入,找不到就按照類型找
37.MVC的控制器是不是單例模式,如果是,有什么問題,怎么解決?
是單例模式,多線程訪問的時候有線程安全問題,不要用同步,會影響性能,解決方案是在控制器里面不能寫字段。
38.SSM 三大框架各個原理,相互之間怎樣的關系?
(1).Springmvc框架主要處理用戶請求和響應處理后的結果,
如:提供處理用戶提交的數據和數據類型轉換以及在前臺顯示用戶數據;
(2).Spring框架主要提供依賴注入,是的各層的對象之間關聯關系解耦,
并且在Spring框架提供更大的事務支持。
(3).Mybatis框架提供對象的持久化操作,就是面向對象的方式往數據庫里面進行增刪改查。
通過MyBatis框架提供的適配包Mybatis-spring-1.3.0實現與spring的整合.
39. 說一說MVC模式
MVC (Model-View-Controller)模式,即模型-試圖-控制器模式,
其核心思想是將整個程序代碼分成相對獨立而又能協同工作的3個組成部分,具體的功能如下:
模型(Model): 業務邏輯層。實現具體的業務邏輯、狀態管理的功能。
視圖(View):表示層。與用戶實現交互的頁面,通常實現數據的輸入和輸出功能。
控制器(Controller):控制層。起到控制整個業務流程的作用,實現View層跟Model層的協同工作。
總結
以上是生活随笔為你收集整理的Spring与MVC面试题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android之系统架构
- 下一篇: gpg加解密软件学习