2015年11月 面試題總結



hibernate一級緩存和二級緩存的區別

答:主要的不同是它們的作用範圍不同。 一級緩存是session級別的。 也就是只有在同一個session裏緩存才起作用。
而二級緩存是sessionFactory級別的。 其緩存對同一個sessionFactory生產出來的session都有效。


spring中AOP實現日誌的方法

答:這種方式實現起來非常簡單,只要配置一下配置文件就可以了。可是這種方式會攔截下所有的對action的每個操作。

使得效率比較低。不過想做詳細日誌這個方法還是非常好的。

public classs MyLog{  
03.            //在類裏面寫方法,方法名詩可以任意的。此處我用標準的before和after來表示  
04.           public void before(){  
05.                     System.out.println("被攔截方法調用之前調用此方法,輸出此語句");  
06.           }  
07.           public void after(){  
08.                       System.out.println("被攔截方法調用之後調用此方法,輸出此語句");  
09.           }  
10. }  
11.

<bean id="testLog" class="chen.hui.log.MyLog"></bean> <!--將日誌類注入到bean中。-->  
02.   
03. <aop:config>  
04.    <aop:aspect id="b" ref="testLog"><!--調用日誌類-->  
05.    	  <aop:pointcut id="log" expression="execution(* chen.hui.log.*.*(..))"/><!--配置在log包下所有的類在調用之前都會被攔截-->  
06.    	  <aop:before pointcut-ref="log" method="before"/><!--在log包下面所有的類的所有方法被調用之前都調用MyLog中的before方法-->  
07.    	  <aop:after pointcut-ref="log" method="after"/>><!--在log包下面所有的類的所有方法被調用之前都調用MyLog中的after方法-->  
09.    </aop:aspect>  
10.   
11. </aop:config>  

AOP常用場景:

Spring提供了對AOP技術的良好封裝, AOP稱爲面向切面編程,就是系統中有很多各不相干的類的方法,在這些衆多方法中要加入某種系統功能的代碼,例如,加入日誌,加入權限判斷,加入異常處理,這種應用稱爲AOP。實現AOP功能採用的是代理技術,客戶端程序不再調用目標,而調用代理類,代理類與目標類對外具有相同的方法聲明,有兩種方式可以實現相同的方法聲明,一是實現相同的接口,二是作爲目標的子類在,JDK中採用Proxy類產生動態代理的方式爲某個接口生成實現類,如果要爲某個類生成子類,則可以用CGLI B。在生成的代理類的方法中加入系統功能和調用目標類的相應方法,系統功能的代理以Advice對象進行提供,顯然要創建出代理對象,至少需要目標類和Advice類。spring提供了這種支持,只需要在spring配置文件中配置這兩個元素即可實現代理和aop功能,


<bean id=”proxy” type=”org.spring.framework.aop.ProxyBeanFactory”>

       <property name=”target”ref=””></property>

       <property name=”advisor”ref=””></property>

 

</bean>


spring事務隔離級別

併發事務所導致的問題可以分爲以下三類:

① 髒讀:髒讀發生在一個事務讀取了另一個事務改寫但尚未提交的數據時。如果改寫在稍後被回滾了,那麼第一個事務獲取的數據就是無效的。

② 不可重複讀:不可重複讀發生在一個事務執行相同的查詢兩次或兩次以上,但是每次都得到不同的數據時。這通常是因爲另一個併發事務在兩次查詢期間更新了數據

③ 幻讀:幻讀與不可重複讀類似。它發生在一個事務(T1)讀取了幾行數據,接着另一個併發事務(T2)插入了一些數據時。在隨後的查詢中,第一個事務(T1)就會發現多了一些原本不存在的記錄

PROPAGATION_MANDATORY 表示該方法必須在事務中運行,如果當前事務不存在,則會拋出一個異常
PROPAGATION_NESTED 表示如果當前已經存在一個事務,那麼該方法將會在嵌套事務中運行。嵌套的事務可以獨立於當前事務進行單獨地提交或回滾。如果當前事務不存在,那麼其行爲與PROPAGATION_REQUIRED一樣。注意各廠商對這種傳播行爲的支持是有所差異的。可以參考資源管理器的文檔來確認它們是否支持嵌套事務
PROPAGATION_NEVER 表示當前方法不應該運行在事務上下文中。如果當前正有一個事務在運行,則會拋出異常
PROPAGATION_NOT_SUPPORTED 表示該方法不應該運行在事務中。如果存在當前事務,在該方法運行期間,當前事務將被掛起。如果使用JTATransactionManager的話,則需要訪問TransactionManager
PROPAGATION_REQUIRED 表示當前方法必須運行在事務中。如果當前事務存在,方法將會在該事務中運行。否則,會啓動一個新的事務
PROPAGATION_REQUIRED_NEW 表示當前方法必須運行在它自己的事務中。一個新的事務將被啓動。如果存在當前事務,在該方法執行期間,當前事務會被掛起。如果使用JTATransactionManager的話,則需要訪問TransactionManager
PROPAGATION_SUPPORTS 表示當前方法不需要事務上下文,但是如果存在當前事務的話,那麼該方法會在這個事務中運行


常見異常:
算術異常類:ArithmeticExecption  
空指針異常類:NullPointerException  
類型強制轉換異常:ClassCastException  
數組負下標異常:NegativeArrayException  
數組下標越界異常:ArrayIndexOutOfBoundsException  
違背安全原則異常:SecturityException  
文件已結束異常:EOFException  

文件未找到異常:FileNotFoundException


常見運行時異常:

NullPointerException

ArrayIndexOutOfBoundsException

ClassCastException


JAVA會發生內存泄漏嗎,爲什麼,什麼情況下會發生內存泄漏

會發生。長生命週期的對象持有短生命週期對象的引用就很可能發生內存泄露,儘管短生命週期對象已經不再需要,但是因爲長生命週期對象持有它的引用而導致不能被回收,這就是java中內存泄露的發生場景。

例如,緩存系統,我們加載了一個對象放在緩存中(例如放在一個全局map對象中),然後一直不再使用它,這個對象一直被緩存引用,但卻不再被使用。


常見設計模式:

創建型(工廠、工廠方法、抽象工廠、單例)

結構型(包裝、適配器,組合,代理)

行爲(觀察者,模版,策略)

Factory(工廠模式),     Builder(建造模式),      Factory Method(工廠方法模式),

Prototype(原始模型模式),Singleton(單例模式),   Facade(門面模式),

Adapter(適配器模式),   Bridge(橋樑模式),       Composite(合成模式),

Decorator(裝飾模式),   Flyweight(享元模式),    Proxy(代理模式),

Command(命令模式),     Interpreter(解釋器模式), Visitor(訪問者模式),

Iterator(迭代子模式),  Mediator(調停者模式),   Memento(備忘錄模式),

Observer(觀察者模式),  State(狀態模式),        Strategy(策略模式),

Template Method(模板方法模式), Chain Of Responsibleity(責任鏈模式)

工廠模式:工廠模式是一種經常被使用到的模式,根據工廠模式實現的類可以根據提供的數據生成一組類中某一個類的實例,

通常這一組類有一個公共的抽象父類並且實現了相同的方法,但是這些方法針對不同的數據進行了不同的操作。

首先需要定義一個基類,該類的子類通過不同的方法實現了基類中的方法。然後需要定義一個工廠類,

工廠類可以根據條件生成不同的子類實例。當得到子類的實例後,開發人員可以調用基類中的方法而不必考慮到底返回的是哪一個子類的實例。


倒序九九乘法表

public static void main(String[] args) {
		for(int i = 9; i >= 0; i--) {
			for(int j = i; j > 0; j--) {
				System.out.print(i+"*"+j+"="+i*j+" ");
			}
			System.out.println();
		}
	}


談談對Servlet過濾器的理解:

過濾器是一種小型的、可插入的web組件。用來攔截servlet容器的請求和響應過程,以便查看、提取客戶端之間正在交換的數據。過濾器通常是封裝了一些web組件,

這些功能很重要,但對於處理客戶端請求或發送響應來說不是決定性的。典型的應用包括記錄請求和響應的數據、管理和會話屬性等。


簡述Servlet監聽器:

Servlet規範中定義的一種特殊的組件,用來監聽Servlet容器產生的事件並進行相應的處理。


JVM組成:



JVM由方法區、虛擬機棧、方法棧、堆、程序計數器組成

方法區:用於存儲虛擬機加載的類信息、常量、靜態變量是各個線程共享的內存區域。

虛擬機棧:當java方法執行的時候,都會創建一個棧幀用於存儲局部變量。每個方法被調用到執行完的過程,舊對應這一個棧幀在虛擬機入棧到出棧的過程,生命週期與線程相同,是線程私有的。

方法棧:與虛擬機棧區別是執行java方法服務,而本地方法棧則是爲native方法服務

堆:在啓動時創建,該內存區域存放了對象實例及數組

程序計數器:作用是當前線程鎖執行的字節嗎行號指示器,通過改變計數器的值來選取下一條需要執行的動作。


什麼是JSP:

JSP技術是以Java語言作爲腳本語言的,JSP網頁爲整個服務器端的Java庫單元提供了一個接口來服務於HTTP的應用程序。JSP被JSP編譯器編譯成Java Servlets。一個JSP編譯器可以把JSP編譯成JAVA代碼寫的servlet然後再由JAVA編譯器來編譯成機器碼,也可以直接編譯成二進制碼。

發佈了51 篇原創文章 · 獲贊 41 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章