1. 程式人生 > >ssm面試題總結 spring springmvc面試題 理解spring

ssm面試題總結 spring springmvc面試題 理解spring

1.你如何理解Spring?

具體來說Spring是一個輕量級的容器,用於管理業務相關物件的。核心功能主要為:IOC,AOP,MVC。

IOD:控制反轉,將物件的建立過程交給容器,讓容器管理物件的生命週期如建立,初始化,銷燬等。

AOP:面向切面程式設計,對關注點進行模組化,通過對某一功能點進行程式設計,比如記錄日誌,有很多個類都需要記錄日誌的方法,則建立記錄日誌的代理方法,需要呼叫該功能是隻需要呼叫代理方法,這就是AOP。

MVC:SpringMvc,Spring提供的基於MVC模式設計的Web框架,如今比較流行的框架之一。

2.spring配置bean例項化有哪些方式?

    1)使用類構造器例項化(預設無引數)

<bean id="bean1" class="cn.itcast.spring.b_instance.Bean1"></bean>    2)使用靜態工廠方法例項化(簡單工廠模式)//下面這段配置的含義:呼叫Bean2Factory的getBean2方法得到bean2<bean id="bean2" class="cn.itcast.spring.b_instance.Bean2Factory" factory-method="getBean2"></bean>    3)使用例項工廠方法例項化(工廠方法模式)//先建立工廠例項bean3Facory,再通過工廠例項建立目標bean例項
<bean id="bean3Factory" class="cn.itcast.spring.b_instance.Bean3Factory"></bean><bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"></bean>

3.介紹一下Spring的事物管理

    事務就是對一系列的資料庫操作(比如插入多條資料)進行統一的提交或回滾操作,如果插入成功,那麼一起成功,如果中間有一條出現異常,那麼回滾之前的所有操作。這樣可以防止出現髒資料,防止資料庫資料出現問題。

開發中為了避免這種情況一般都會進行事務管理。Spring中也有自己的事務管理機制,一般是使用TransactionMananger進行管 理,可以通過Spring的注入來完成此功能。

Spring支援如下兩種方式的事務管理:

程式設計式事務管理:這意味著你可以通過程式設計的方式管理事務,這種方式帶來了很大的靈活性,但很難維護。

宣告式事務管理:這種方式意味著你可以將事務管理和業務程式碼分離。你只需要通過註解或者XML配置管理事務。

一般選擇宣告式事務管理,因為這種方式和應用程式的關聯較少。

4.Bean注入屬性有哪幾種方式?


5.講述SpringMVC工作流程


流程 
1、使用者傳送請求至前端控制器DispatcherServlet 
2
DispatcherServlet收到請求呼叫HandlerMapping處理器對映器。 
3、處理器對映器找到具體的處理器,生成處理器物件及處理器攔截器(如果有則生成)一併返回給DispatcherServlet 
4DispatcherServlet呼叫HandlerAdapter處理器介面卡 
5HandlerAdapter經過適配呼叫具體的處理器(Controller,也叫後端控制器) 
6Controller執行完成返回ModelAndView 
7
HandlerAdaptercontroller執行結果ModelAndView返回給DispatcherServlet 
8
DispatcherServletModelAndView傳給ViewReslover檢視解析器 
9ViewReslover解析後返回具體View 
10
DispatcherServlet根據View進行渲染檢視(即將模型資料填充至檢視中)。 
11DispatcherServlet
響應使用者

6.SpringMVC與Struts2的主要區別?

springmvc的入口是一個servlet即前端控制器,而struts2入口是一個filter過慮器。springmvc基於方法開發,傳遞引數是通過方法形參,可以設計為單例或多例(建議單例)struts2是基於類開發,傳遞引數是通過類的屬性,只能設計為多例。 
Struts採用值棧儲存請求和響應的資料,通過OGNL存取資料, springmvc通過引數解析器是將request物件內容進行解析成方法形參,將響應資料和頁面封裝成ModelAndView物件,最後又將模型資料通過request物件傳輸到頁面。 Jsp檢視解析器預設使用jstl
7.Spring中用到哪些設計模式?1.工廠模式(BeanFactory中)2.單例模式(Spring中預設bean為單例)3.介面卡模式(HandlerAdater)4.裝飾者模式5.代理模式(AOP中用到JDK動態代理)6.觀察者模式(listener的實現,例如ApplicationListener)7.策略模式(定義一系列的演算法,把它們一個個的封裝起來,並且使它們可以相互替換。在例項化物件時用到)8.模板模式(jdbcTemplate)
)

(1)Spring在SSM起什麼作用

Spring是一個輕量級框架,也是一個容器,Spring實質上講就是一個Bean工廠,主要用來管理Bean的生命週期和框架整合。有IOC控制反轉,DI依賴注入,控制反轉是把dao依賴注入到servic層,然後service層反轉給action層,Spring的頂層容器為BeanFactory,常用的ApplicationContext為它的子介面,實現了工廠模式,Spring還提供了AOP的支援,方便在切面級開發,
(2)怎麼樣理解IOC和DI
在使用Spring框架的過程中、一定會用到控制反轉、但是往往所需要的資源還需要其他資源的支援、個過程就需要依賴注入的支援
(3)Spring的事務,事務的作用。
程式設計式事務管理:這意味你通過程式設計的方式管理事務,給你帶來極大的靈活性,但是難維護。
宣告式事務管理:這意味著你可以將業務程式碼和事務管理分離,你只需用註解和XML配置來管理事務。
(3)Spring的IOC你在專案中是怎麼使用的?
IOC主要來解決物件之間的依賴問題,把所有的bean的依賴關係通過配置檔案或者註解關聯起來,降低了耦合度
(5)Spring的配置檔案有哪些內容?
開啟事務註解驅動
事務管理器
開啟註解功能,並配置掃描包
配置資料來源
配置SQL會話工廠、別名、對映檔案
不用編寫DAO層的實現類(代理模式)
(6)說下Spring的註解
@Controller
@Service
@Component
@RequestMapping
@Resource、@Autowired
@ResponseBody

@Transactional

(7)為什麼要用Spring
降低物件耦合度,讓程式碼更加清晰,提供一些常見的模版
(8)Spring DI的幾種方式
(1)構造器注入:通過構造方法初始化
<constructor-arg name="dao"</constructor-arg>
(2)setter注入:通過setter方法初始化注入
<property name="dao" ref="dao2"></property>

注意:在實際開發中常用setter注入。

(7)為什麼要用Spring
降低物件耦合度,讓程式碼更加清晰,提供一些常見的模版
(8)Spring DI的幾種方式
(1)構造器注入:通過構造方法初始化
<constructor-arg name="dao"</constructor-arg>
(2)setter注入:通過setter方法初始化注入
<property name="dao" ref="dao2"></property>
注意:在實際開發中常用setter注入。
(1)SpringMvc的控制器是不是單例模式,如果是,有什麼問題,怎麼解決
是單例模式,所以在多執行緒訪問的時候有執行緒安全問題,不要用同步,會影響效能的,解決方案是在控制器裡面不能寫欄位
(2)SpingMvc中的控制器的註解
@Controller 註解:該註解表明該類扮演控制器的角色,Spring不需要你繼承任何其他控制器基類或引用Servlet API。
(3)@RequestMapping註解用在類上面有什麼作用
該註解是用來對映一個URL到一個類或一個特定的方處理法上。
(4)我想在攔截的方法裡面得到從前臺傳入的引數,怎麼得到
直接在形參裡面宣告這個引數就可以,但必須名字和傳過來的引數一樣
(5)如果前臺有很多個引數傳入,並且這些引數都是一個物件的,那麼怎麼樣快速得到這個物件
直接在方法中宣告這個物件,SpringMvc就自動會把屬性賦值到這個物件裡面
(6)SpringMvc中函式的返回值是什麼
返回值可以有很多型別,有String, ModelAndView,List,Set等,一般用String比較好,如果是AJAX請求,返回的可以是一個集合
(7)SpringMvc怎麼處理返回值的
SpringMvc根據配置檔案中InternalResourceViewResolver(內部資源檢視解析器)的字首和字尾,用字首+返回值+字尾組成完整的返回值
(8)SpringMVC怎麼樣設定重定向和轉發的
在返回值前面加"forward:"就可以讓結果轉發,譬如"forward:user.do?name=method4" 在返回值前面加"redirect:"就可以讓返回值重定向,譬如"redirect:http://www.uu456.com"
(9)SpringMvc中有個類把檢視和資料都合併的一起的,叫什麼
ModelAndView
(10)怎麼樣把資料放入Session裡面
可以宣告一個request,或者session先拿到session,然後就可以放入資料,或者可以在類上面加上@SessionAttributes註解,裡面包含的字串就是要放入session裡面的key
(11)SpringMvc怎麼和AJAX相互呼叫的
通過Jackson框架就可以把Java裡面的物件直接轉化成js可以識別的Json物件 具體步驟如下 :
1.加入Jackson.jar
2.在配置檔案中配置json的對映
3.在接受Ajax方法裡面可以直接返回Object,List等,但方法前面要加上@ResponseBody註解
(12)當一個方法向AJAX返回物件,譬如Object,List等,需要做什麼處理
要加上@ResponseBody註解
(13)講下SpringMvc的執行流程
系統啟動的時候根據配置檔案建立spring的容器, 首先是傳送http請求到核心控制器DispatcherServlet,spring容器通過對映器去尋找業務控制器,
使用介面卡找到相應的業務類,在進業務類時進行資料封裝,在封裝前可能會涉及到型別轉換,執行完業務類後使用ModelAndView進行檢視轉發,
資料放在model中,用map傳遞資料進行頁面顯示。
(1)什麼是MyBatis的介面繫結,有什麼好處
介面對映就是在IBatis中任意定義介面,然後把接口裡面的方法和SQL語句繫結,我們直接呼叫介面方法就可以,這樣比起原來了SqlSession提供的方法我們可以有更加靈活的選擇和設定.
(2)什麼情況下用註解繫結,什麼情況下用xml繫結
當Sql語句比較簡單時候,用註解繫結,當SQL語句比較複雜時候,用xml繫結,一般用xml繫結的比較多
(3)如果要查詢的表名和返回的實體Bean物件不一致,那你是怎麼處理的?
在MyBatis裡面最主要最靈活的的一個對映物件的ResultMap,在它裡面可以對映鍵值對, 預設裡面有id節點,result節點,它可以對映表裡面的列名和物件裡面的欄位名. 並且在一對一,一對多的情況下結果集也一定要用ResultMap
(4)MyBatis在核心處理類叫什麼
MyBatis裡面的核心處理類叫做SqlSession
(5)講下MyBatis的快取
MyBatis的快取分為一級快取和二級快取,一級快取放在session裡面,預設就有,二級快取放在它的名稱空間裡,
預設是開啟的,使用二級快取屬性類需要實現Serializable序列化介面(可用來儲存物件的狀態),可在它的對映檔案中配置<cache/>
(6)MyBatis(IBatis)的好處是什麼
ibatis把sql語句從Java源程式中獨立出來,放在單獨的XML檔案中編寫,給程式的
維護帶來了很大便利。
ibatis封裝了底層JDBC API的呼叫細節,並能自動將結果集轉換成JavaBean物件,大大簡化了Java資料庫程式設計的重複工作。
因為Ibatis需要程式設計師自己去編寫sql語句,程式設計師可以結合資料庫自身的特點靈活控制sql語句,
因此能夠實現比hibernate等全自動orm框架更高的查詢效率,能夠完成複雜查詢。
(7)MyBatis怎麼配置一對多?
一對多的關係 :property: 指的是集合屬性的值, ofType:指的是集合中元素的型別
(8)MyBatis怎樣配置多對一?
多對一的關係:property: 指的是屬性的值, javaType:指的是屬性的型別