1. 程式人生 > >常見的面試題(1)

常見的面試題(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可以讓等待鎖的執行緒相應中斷;

而synchronized不行,使用synchronized時,等待的執行緒會一直等待下去,不能夠響應中斷

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。