科技

Java實習生面試題(九)

發了這麼多篇java面試題,很多人都是默默收藏,都沒有點贊(不開森),好歹給我一點動力嘛,讓我堅持下去一直更新!

杭州Java

1、尾遞迴是怎樣的?與遞迴的比較?

答:尾遞迴,也即在尾部進行遞迴的一種遞迴形式,指的是在一次遞迴執行完畢,返回上一層之後,不在進行任何操作,也即在迴歸的過程中不做任何操作,且返回值不屬於表示式的一部分。

當編譯器檢測到一個函式呼叫是尾遞迴的時候,它就覆蓋當前的活動記錄而不是在棧中去建立一個新的。編譯器可以做到這點,因為遞迴呼叫是當前活躍期內最後一條待執行的語句,於是當這個呼叫返回時棧幀中並沒有其他事情可做,因此也就沒有儲存棧幀的必要了。通過覆蓋當前的棧幀而不是在其之上重新新增一個,這樣所使用的棧空間就大大縮減了,這使得實際的執行效率會變得更高。

2、代理模式的適用場景?

答:所謂代理模式,即為一個物件建立一個代理,以控制對這個物件的訪問。

使用代理的兩種場景:

控制訪問許可權,不同使用者對同一物件擁有不同的訪問許可權

某個客戶端不能直接操作到某個物件,卻又必須與其進行互動

3、Java的垃圾回收機制是怎樣的?回收的是什麼樣的物件?

答:Java垃圾回收器實現對堆記憶體資料的自動回收,無需程式設計師顯式地呼叫delete放啊。Java的垃圾自動回收機制有效地避免了因為程式設計師忘記釋放記憶體而造成的記憶體溢位錯誤。

Java使用被稱為垃圾收集器的技術來監視Java程式的執行,當物件不再被使用時,即不再被引用時,就會自動釋放物件所佔用的記憶體。Java使用一系列軟指標來跟蹤物件的各個引用,這些軟指標並不直接指向物件,而是指向物件的引用。通過軟指標,Java的垃圾收集器能夠以單獨的執行緒在後臺執行,並不時檢查每個物件的引用。

呼叫System的靜態方法gc可以執行垃圾收集器,但是並不能保證立即回收指定物件。(這就是建議回收,不能強迫回收。)

finalize方法可以終止一個物件來釋放資源,呼叫之後物件不再被引用,就會被回收。

4、bean 例項的生命週期?

答:對於Stateless Session Bean、Entity Bean、Message Driven Bean 一般存在緩衝池管理,而對於Entity Bean 和Statefull Session Bean 存在Cache管理,通常包含建立例項,設定上下文、建立EJB Object(create)、業務方法呼叫、remove 等過程,對於存在緩衝池管理的Bean,在create 之後例項並不從記憶體清除,而是採用緩衝池排程機制不斷重用例項,而對於存在Cache 管理的Bean 則通過啟用和去啟用機制保持Bean 的狀態並限制記憶體中例項數量。

5、 Struts的應用(如Struts架構)?

答:Struts 是採用Java Servlet/JavaServer Pages 技術開發Web 應用程式的開放原始碼的framework。採用Struts 能開發出基於MVC(Model-View-Controller)設計模式的應用構架。Struts 有如下的主要功能:

1)包含一個controller servlet,能將使用者的請求傳送到相應的Action 物件;

2)JSP 自由tag 庫,並且在controller servlet 中提供關聯支援,幫助開發人員建立互動式表單應用;

3)提供了一系列實用物件:XML 處理、通過Java reflection APIs 自動處理JavaBeans 屬性、國際化的提示和訊息。

未完待續……

Reference:科技日報

看更多!請加入我們的粉絲團

轉載請附文章網址

不可錯過的話題