1. 程式人生 > >java面試題(三)spring部分

java面試題(三)spring部分

1、簡單說下spring的工作流程?

使用者向伺服器發出請求,請求被spring前端控制器 DispatcherServlet 捕獲。

DispatcherServlet對請求url進行解析,呼叫HandleMapping獲得該Handle配置的所有相關物件。

DispatcherServlet根據獲得的Handle,選擇一個合適的HandleAdapter

提前Request中的模型資料填充Handle入參,開始執行Handle(controller)

Handler執行完畢後向DispatcherServlet返回一個ModelAndView物件

根據返回的ModelAndView選擇一個合適的ViewResolver返回給DispatcherServlet

ViewResolver根據Model和View來渲染檢視

 將渲染結果返回給客戶端

2、簡單說一下mybatis和hibernate的區別?

都是orm資料庫框架,mybatis是半自動的,hibernate是全自動的;

hibernate資料庫移植性遠大於mybatis;

hibernate具有完整的日誌系統,mybatis則欠缺一些 ;

mybatis相比hibernate關注更多的細節;

sql直接優化上,mybatis要比hibernate方便很多;

3、解釋一下IOC(IOC控制反轉,也可稱依賴倒置。)?

首先,先用文字語言講一下,然後再用白話文解釋;

所謂依賴,就是如果A要呼叫B的方法,則A依賴於B,因為A用到了B則A依賴B,如果不倒置的話,因為A必須要有B

才能呼叫B,就是如果不倒置那麼A必須主動去獲取B的例項  B  b = new B();這是不倒置,倒置的話就是不用主動去

獲取B,而是其它人自動將B送上門來;

通俗點用白話文舉例就是:假如你要去超市買水,那麼你要到小賣部去,告訴他們你要水,他們給你水,這本沒太大問題;

但是,如果超市很遠,你要考慮怎麼去超市,超市有沒有水,是否需要開車去等等因素,結果買一瓶水還要依賴車子或者

還有其他的很多工具,問題就變的很複雜了;怎麼解決呢?

解決方法也很簡單:超市提供送貨上門的服務,凡是超市的會員都可以享受送貨上門的服務;;

這樣你就只需要考慮兩件事:註冊超市會員;告訴超市你需要水,這樣就方便很多;

4、解釋一下AOP 面向切面?

面向切面程式設計的目標就是分離關注點,什麼為關注點,你要做的事,這就是關注點。假如你是一個富二代,

每天衣來伸手飯來張口,整天只想著玩就行了,每天睜開眼就只想著吃完飯趕快去玩(這是必須做的事),

但是在玩之前,你需要穿衣服,疊被子,刷牙洗臉,做飯吃飯等等事情,這都是你的關注點,但是你只想

吃飯然後玩,那怎麼辦呢?於是你把這些事情都交給別人去幹,管家A給你穿衣服疊被子,管家B給你刷牙洗臉,

管家C給你做飯,然後你吃飯然後去玩,這就是你一天的正事,等你回來之後又有一系列的管家幫你做事,

這樣一天就過去了。

AOP的好處就是你只關係你的正事就行,其他的別人給你做,比如某一天你不想刷牙洗臉了,把管家B解僱就行了,

有天你想帶錢出去玩,再找一個管家D幫你拿錢,這就是AOP,大家各司其職,靈活組合,達到一種可配置,可插拔的

程式結構。

從Spring的角度看,AOP的最大好處就是提供了事務管理的能力,事務管理就是一個關注點,你的正事就是訪問資料庫,

而你不想管事務,所以,在你訪問資料庫之前,自動幫你開啟事務,訪問結束後自動幫你提交/回滾事務;

5、cookie和session的區別?

區別:

cookie資料放在瀏覽器上,session資料放在伺服器上;

cookie不是很安全,別人可以分析存放在本地的cookie,考慮到安全應該用session;

session會在一定時間內儲存在伺服器上,當訪問增多,會佔用伺服器效能,考慮減輕伺服器效能方面,應使用cookie

單個cookie存放資料不能超過4k,很多瀏覽器都限制一個站點最多存放20個cookie; 

聯絡:session是通過cookie工作的;

6、jsp和servlet的區別?

簡單的說jsp和servlet主要有兩方面的不同:

編譯:jsp修改後可以立馬看到效果,不需要編譯。而servlet需要編譯

轉換:jsp是動態網頁開發技術,是執行在伺服器的指令碼語言。而servlet是web伺服器端程式設計技術。

所以jsp執行時就是轉換成servlet,也就是java程式來執行