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