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程式來執行