阿里軟件招JAVA工程師面試題

1.兩個對象值相同(x.equals(y)==true),但卻可有不一樣的hash code,這句話對不對?爲何? 程序員

答: 不對,有相同的hash code。 算法

2.GC是什麼?爲何要有GC? 編程

答: GC是垃圾收集器。Java 程序員不用擔憂內存管理,由於垃
圾收集器會自動進行管理。要請求垃圾收 
集,能夠調用下面的方法之一: 
System.gc() 
Runtime.getRuntime().gc() tomcat

3.請簡要描述一下J2EE應用中的class loader的層次結構? spa

答:以tomcat爲例子: code

Tomcat Server在啓動的時候將構造一個ClassLoader樹,以保證模塊的類庫是私有的
Tomcat Server的ClassLoader結構以下:
其中:
- Bootstrap - 載入JVM自帶的類和$JAVA_HOME/jre/lib/ext/*.jar
- System - 載入$CLASSPATH/*.class
- Common - 載入$CATALINA_HOME/common/...,它們對TOMCAT和全部的WEB APP均可見
- Catalina - 載入$CATALINA_HOME/server/...,它們僅對TOMCAT可見,對全部的WEB APP都不可見
- Shared - 載入$CATALINA_HOME/shared/...,它們僅對全部WEB APP可見,對TOMCAT不可見(也沒必要見)
- WebApp? - 載入ContextBase?/WEB-INF/...,它們僅對該WEB APP可見 server



4."組合優於繼承",是否贊成這句話,並闡述你的觀點。 對象

答: 繼承和組合均可以實現代碼的重用(Reuse),爲何組合要優於繼承呢?
回想SimUDuck這個例子,很有感觸,開始Joe的方案是用繼承,代碼改動簡單,能夠實現現有狀況下的某些需求(大部分鴨子都是正常的,但有一小部分 是失敗的,好比RubberDuck);仔細思考繼承:經過繼承,子類可以得到與父類相同的功能和屬性,父類擁有了某種功能,子類就有了;可是若是子類需 要新的功能,直接在父類裏面增長新的功能,那麼會致使全部的子類同時擁有這種功能,這其實是將類的功能與類牢牢的耦合在一塊兒,是一種緊密耦合系統,因爲 關係至關密切,致使改動一處而動全身,實際上不利於代碼的重用。而組合剛好相反,她把類的各項功能分割開,互不干涉。一個類的功能,其實是各類子功能的 組合,好比鴨子的功能就是飛行功能和發出叫聲功能的組合,不管是何種鴨子,都是這樣。同時究竟是怎樣飛行,怎樣叫,又能夠經過面向接口的編程實現多態。因 此這個組合的系統(Duck)很容易在加入新的成員,好比加入ModelDuck,加入RocketDuck,只須要實現新的相應的飛行和叫的功能類(實 現功能接口)。很明顯,組合所產生的代碼便於維護,易於擴展,是真正的Flexible Design。 繼承

6.請說下Template模式與Strategy模式的異同點。 接口

答:Template method適用域可能更小一點,靈活性也差一點。若是子類也能夠訂製這些子步驟的順序,那就不適合使用Template。使用策略模式,則沒有那麼多的限制,甚至經常沒有子步驟。不過實現者須要知道整個算法的流程,同時也可能暴露過多的行爲,從而可能形成使用者誤用的可能。

相關文章
相關標籤/搜索