常見的面試題(1)
1.談談你對spring的理解?
答:我理解spring:它是一個提供新的管理機制來管理物件和業務,並且可以結合其他元件,降低耦合,提高程式碼複用的輕量級開源框架。
它通過控制控制反轉(ioc),依賴注入(di)機制將物件全部放在spring的IOC容器裡通過spring bean工廠建立和管理,這樣相當於把每個bean與bean之間的關係交給第三方容器管理;而這個容器就是spring。實現就是DI,通過依賴注入,建立Bean與Bean之間的聯絡,在spring裡描述它們之間的相互依賴關係。
Spring還提供了對AOP技術的良好封裝,AOP稱為面向切面程式設計,在這些眾多方法中要加入某種系統功能的程式碼,攔截器等,如加入日誌,事務,異常處理,這種應用稱為AOP。
2.spring的核心元件?
答:1.Bean元件 2.Context 3.Core
3.AOP的配置以及註解?IOC的注入?
答:1. 使用註解@Aspect來定義一個切面,在切面中定義切入點(@Pointcut),通知型別(@Before, @AfterReturning,@After,@AfterThrowing,@Around). 2. 開發需要被攔截的類。 3. 將切面配置到xml中,當然,我們也可以使用自動掃描Bean的方式。這樣的話,那就交由Spring AoP容器管理。
IOC注入分為三種:1.構造器注入2.get/set注入3.註解
4.事物的傳播性?如何配置事務?
答:7中,常用的是第一種,propagation_requierd:如果當前沒有事務,就新建一個事務,如果已存在一個事務中,加入到這個事務中,這是最常見的選擇。
利用AOP配置事務。
5.synchronized和lock的區別?
答:1)Lock是個介面,而synchronized是java關鍵字,synchronized是內建語言實現
2)synchronized在發生異常時,會自動釋放執行緒佔有的鎖,因此不會導致死鎖現象的發生;而Lock在發生異常時,如果沒有主動通過unlock()去釋放鎖,則很有可能造成死鎖現象,因此使用Lock時需要在finally塊中釋放鎖
3)Lock可以讓等待鎖的執行緒相應中斷;
4)通過Lock可以知道有沒有成功獲取鎖,而synchronized卻無法辦到
5)Lock可以提高多個執行緒讀操作的效率
在效能上來說,如果資源競爭不激烈的話,兩者的效能是差不多的;而當資源競爭非常激烈(即有大量執行緒同時競爭)時,Lock的效能要遠遠優於synchronized
6.多執行緒高併發時如何保證執行緒安全?
答:原子性(Synchronized, Lock)
有序性(Volatile,Synchronized, Lock)
可見性(Volatile,Synchronized,Lock)
7.spring springmvc的執行流程?
答:1.使用者傳送請求到DispatchServlet
2.DispatchServlet根據請求路徑查詢具體的Handler
3.HandlerMapping返回一個HandlerExcutionChain給DispatchServlet
HandlerExcutionChain:Handler和Interceptor集合
4.DispatchServlet呼叫HandlerAdapter介面卡
5.HandlerAdapter呼叫具體的Handler處理業務
6.Handler處理結束返回一個具體的ModelAndView給介面卡
ModelAndView:model-->資料模型,view-->檢視名稱
7.介面卡將ModelAndView給DispatchServlet
8.DispatchServlet把檢視名稱給ViewResolver檢視解析器
9.ViewResolver返回一個具體的檢視給DispatchServlet
10.渲染檢視
11.展示給使用者
8.struts執行流程?
答:(1)客戶端初始化一個指向Servlet容器(例如Tomcat)的請求 (客戶端提交一個HttpServletRequest請求。)
(2)請求被提交到一系列的過濾器(Filter)。FilterDispatcher是控制器的核心,就是MVC的Struts 2實現中控制層(Controller)的核心。
(3)FilterDispatcher詢問ActionMapper是否需要呼叫某個Action來處理這個(HttpServlet Request)請求,如果ActionMapper決定需要呼叫某個Action,FilterDispatcher則把請求的處理交給ActionProxy。
(4) ActionProxy通過Configuration Manager(struts.xml)詢問框架的配置檔案,找到需要呼叫的Action類。
(5)ActionProxy建立一個ActionInvocation例項,同時ActionInvocation通過代理模式呼叫Action。但在呼叫之前,ActionInvocation會根據配置載入Action相關的所有Interceptor(攔截器)。
(6)Action執行完畢後,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果result。