大鵬終極總結JAVA(2)

一。Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其它類,是否可以implements(實現)interface(接口)?
可以繼承其他類或完成其他接口,在swing編程中常用此方式。

 

二。什麼時候用assert。
1.4新增關鍵字(語法),用於測試boolean表達式狀態,可用於調試程序。
使用方法 assert <boolean表達式>,表示如果表達式爲真(true),則下面的語句執行,否則拋出AssertionError。
另外的使用方式assert < boolean表達式>:<other表達式>,表示如果表達式爲真,後面的表達式忽略,否則後面表達式的值用於AssertionError的構建參數。
注意編譯時要增加-source 1.4 參數,否則報錯。]運行時要增加 –ea參數,否則assert行被忽略

 


三。Set裏的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==還是equals()? 它們有何區別?
Set裏的元素是不能重複的,那麼用iterator()方法來區分重複與否。equals()是判讀兩個Set是否相等。
equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,爲的是當兩個分離的對象的內容和類型相配的話,返回真值。
0


四。abstract class和interface有什麼區別?
聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要創建一個體現某些基本行爲的類,併爲該類聲明方法,但不能在該類中實現該類的情況。不能創建abstract 類的實例。然而可以創建一個變量,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類爲它們父類中的所有抽象方法提供實現,否則它們也是抽象類爲。取而代之,在子類中實現該方法。知道其行爲的其它類可以在類中實現這些方法。
接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過實現這樣的接口而獲得。接口中的所有方法都是抽象的,沒有一個有程序體。接口只可以定義static final成員變量。接口的實現與子類相似,除了該實現類不能從接口定義中繼承行爲。當類實現特殊接口時,它定義(即將程序體給予)所有這種接口的方法。然後,它可以在實現了該接口的類的任何對象上調用接口的方法。由於有抽象類,它允許使用接口名作爲引用變量的類型。通常的動態聯編將生效。引用可以轉換到接口類型或從接口類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了接口。

 

 

五。當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法?
不能,一個對象的一個synchronized方法只能由一個線程訪問。

 

六。try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的code會不會被執行,什麼時候被執行,在return前還是後?
會執行,在return前執行。

 

七。兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對?
不對,有相同的hash code。

 

八。當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裏到底是值傳遞還是引用傳遞?
是值傳遞。Java 編程語言只由值傳遞參數。當一個對象實例作爲一個參數被傳遞到方法中時,參數的值就是對該對象的引用。對象的內容可以在被調用的方法中改變,但對象的引用是永遠不會改變的。---------------------------125


九。編程題: 寫一個Singleton出來。
     Singleton模式主要作用是保證在Java應用程序中,一個類Class只有一個實例存在。
一般Singleton模式通常有幾種種形式:
第一種形式: 定義一個類,它的構造函數爲private的,它有一個static的private的該類變量,在類初始化時實例話,通過一個public的getInstance方法獲取對它的引用,繼而調用其中的方法。
public class Singleton {
  private Singleton(){}
  //在自己內部定義自己一個實例,是不是很奇怪?
  //注意這是private 只供內部調用
  private static Singleton instance = new Singleton();
  //這裏提供了一個供外部訪問本class的靜態方法,可以直接訪問  
  public static Singleton getInstance() {
    return instance;   
   }
}
第二種形式:
public class Singleton {
  private static Singleton instance = null;
  public static synchronized Singleton getInstance() {
  //這個方法比上面有所改進,不用每次都進行生成對象,只是第一次     
  //使用時生成實例,提高了效率!
  if (instance==null)
    instance=new Singleton();
return instance;   }
}
其他形式:
定義一個類,它的構造函數爲private的,所有方法爲static的。
一般認爲第一種形式要更加安全些

一。用你的語言表達對下列概念的理解:
什麼是對象?什麼是類?對象是靠什麼進行交互的?什麼是接口?
類之間有哪些種關係?並舉例說明?
你認爲面向對象程序設計語言最顯著的特徵是哪三個?
請解釋什麼是對象的封裝?封裝的好處有哪些?
請解釋什麼是對象的繼承?試舉幾個繼承的好處?簡單介紹你在以前工作中使用繼承的一個案例。畫出〔本科生、教授、研究生、學生、人、自學者〕之間的繼承關係。
請解釋什麼是對象的多態性?並舉例說明多態性?你在以前工作中使用過嗎?簡單介紹是如何使用的?

這是常見的面試題,強調的是用你自己的語言來描述,不是千篇一律的標準答案。強調的是你對面向對象的基本概念的理解。
建議你通過一個例子來講解類與對象的概念。例如:(你自己和人類之間的關係)
你自己是具體的,人類是抽象的。對象靠方法調用(消息傳遞)進行交互。

接口,只定義了抽象的方法。需要在實現類中實現接口中抽象的方法。
Is和Has關係。
Is 就是繼承關係
Has就是聚合,依賴關係。

 

二。請用Java語言編寫一段程序代碼,實現如下功能:
從命令行接收字符串作爲參數,並排序輸出這些字符串。例如:接收順序是b c a,則輸出順序是a b c,按照ASCII順序來排序。

解答:
思路:把接受到的字符串轉化成字符數組,然後可以調用java.util.Arrays中已經有的排序方法進行排序,輸出結果。


一。JAVA SERVLET API中forward() 與sendRedirect()的區別?

forward()方法可以使用原來的對象,而且速度較快。地址欄不變化。只能在本機內的頁面間跳轉。
redirect()方法不可以使用原來的對象,而且速度較慢。地址欄變化。可以跳轉到任何頁面和機器。
前者僅是容器中控制權的轉向,在客戶端瀏覽器地址欄中不會顯示出轉向後的地址;
後者則是完全的跳轉,瀏覽器將會得到跳轉的地址,並重新發送請求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉後的鏈接地址。
所以,前者更加高效,在前者可以滿足需要時,儘量使用forward()方法,並且,這樣也有助於隱藏實際的鏈接。在有些情況下,比如,需要跳轉到一個其它服務器上的資源,則必須使用sendRedirect()方法。

 

二。STRUTS的應用(如STRUTS架構)

Struts框架的處理流程清楚的體現了MVC系統的特點, Struts Controller ActionServlet處理客戶請求,利用配置的ActionMapping對象把請求映射到Action處理器對象進行處理。Action處理對象訪問ActionForm中的數據,處理和響應客戶請求,它還調用後臺的Bean組件,這些組件封裝了具體的業務邏輯。Action處理器對象根據處理結果通知Controller,Controller進行下一步的處理。
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屬性、國際化的提示和消息。

 

三。MVC的各個部分都有那些技術來實現?如何實現?

MVC是Model-View-Controller的簡寫。"Model" 代表的是應用的業務邏輯(通過JavaBean,EJB組件實現), "View" 是應用的表示面(由JSP頁面產生),"Controller" 是提供應用的處理過程控制(一般是一個Servlet),通過這種設計模型把應用邏輯,處理過程和顯示邏輯分成不同的組件實現。這些組件可以進行交互和重用。


四。jsp有哪些內置對象?作用分別是什麼?

JSP共有以下9種基本內置組件
request 用戶端請求,此請求會包含來自GET/POST請求的參數
response 網頁傳回用戶端的迴應
pageContext 網頁的屬性是在這裏管理
session 與請求有關的會話期
application servlet 正在執行的內容
out 用來傳送回應的輸出
config servlet的構架部件
page JSP網頁本身
exception 針對錯誤網頁,未捕捉的例外

 

五。jsp有哪些動作?作用分別是什麼?

JSP共有以下6種基本動作
jsp:include:在頁面被請求的時候引入一個文件。
jsp:useBean:尋找或者實例化一個JavaBean。
jsp:setProperty:設置JavaBean的屬性。
jsp:getProperty:輸出某個JavaBean的屬性。
jsp:forward:把請求轉到一個新的頁面。
jsp:plugin:根據瀏覽器類型爲Java插件生成OBJECT或EMBED標記

 

六。JSP中動態INCLUDE與靜態INCLUDE的區別?

動態INCLUDE用jsp:include動作實現<jsp:include page="included.jsp" flush="true" />它總是會檢查所含文件中的變化,適合用於包含動態頁面,並且可以帶參數。
靜態INCLUDE用include僞碼實現,定不會檢查所含文件的變化,適用於包含靜態頁面<%@ include file="included.htm" %>

 

七。說一說Servlet的生命週期?

servlet有良好的生存期的定義,包括加載和實例化、初始化、處理請求以及服務結束。這個生存期由javax.servlet.Servlet接口的init,service和destroy方法表達。

 

八。你使用的servlet和jsp的版本?

Servlet的基本架構
public class ServletName extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
}
}

 

一。J2EE是什麼?

J2EE是Sun公司提出的多層(multi-diered),分佈式(distributed),基於組件(component-base)的企業級應用模型(enterpriese application model).在這樣的一個應用系統中,可按照功能劃分爲不同的組件,這些組件又可在不同計算機上,並且處於相應的層次(tier)中。所屬層次包括客戶層(clietn tier)組件,web層和組件,Business層和組件,企業信息系統(EIS)層。

 

二。EJB的種類

Session Bean , Entity Bean, Message-Driven Bean

 

三。ORACLE的分頁解決方法。

Oracle有幾種索引?分別是什麼?
三種,B_Tree 索引, 位圖索引,函數索引。最常使用的是B_tree索引。

在一個企業級的項目開發設計過程中,在數據庫操作部分,圍繞產品數據庫移植出現分歧:
1)  A認爲,考慮性能及開發人員角色分工,應充分利用目前使用的Oracle數據庫提供的功能,大量使用oracle提供的一些特性,如嵌套表、存儲過程,觸發器,job等。
2)  B認爲,由於後期需要提供面向SQLServer的版本,最好不要使用Oracle專有的一些數據庫特性,而應儘量使用通用的SQL語句操作,象存儲過程,觸發器、嵌套表等oracle特有的,或與其它數據庫不相同的東西,是不能使用的。

高流量情況下的網站新聞發佈(內容管理)系統設計
高流量下的應用系統,通常併發量都非常大,以雲港新聞爲例,馬加爵事件期間,news服務器併發經常維持在2000個併發以上(apache進程)。因此,系統設計應儘量減少對數據庫的檢索請求,特別是開銷巨大的全表掃描操作。

在系統設計時,採用“生成靜態頁面”技術,完成信息發佈後,將每條新聞,讀入美工設計的模板生成一個html文件,這樣一來,用戶訪問這條新聞,就直接讀取服務器上的這個文件,而不再去進行數據庫檢索。同時,爲避免單一目錄下文件過多造成文件系統的負擔,文件的存放,按“<年>/月/日/<文件名>.html”的格式存放。

 

四。EJB與JAVA BEAN的區別?
EJB與JAVA BEAN是SUN的不同組件規範,EJB是在容器中運行的,分步式的,而JAVA BEAN主要是一種可利用的組件,主要在客戶端UI表現上。
JAVABEAN是一種普通的組件,EJB是一種分佈式的組件;
 
Java Bean 是可複用的組件,對Java Bean並沒有嚴格的規範,理論上講,任何一個Java類都可以是一個Bean。但通常情況下,由於Java Bean是被容器所創建(如Tomcat)的,所以Java Bean應具有一個無參的構造器,另外,通常Java Bean還要實現Serializable接口用於實現Bean的持久性。Java Bean實際上相當於微軟COM模型中的本地進程內COM組件,它是不能被跨進程訪問的。Enterprise Java Bean 相當於DCOM,即分佈式組件。它是基於Java的遠程方法調用(RMI)技術的,所以EJB可以被遠程訪問(跨進程、跨計算機)。但EJB必須被佈署在諸如Webspere、WebLogic這樣的容器中,EJB客戶從不直接訪問真正的EJB組件,而是通過其容器訪問。EJB容器是EJB組件的代理,EJB組件由容器所創建和管理。客戶通過容器來訪問真正的EJB組件。

 

五。EJB的基本架構
答:一個EJB包括三個部分:
Remote Interface 接口的代碼
package Beans;
import javax.ejb.EJBObject;
import java.rmi.RemoteException;
public interface Add extends EJBObject
{
//some method declare
}
Home Interface 接口的代碼
package Beans;
import java.rmi.RemoteException;
import jaax.ejb.CreateException;
import javax.ejb.EJBHome;
public interface AddHome extends EJBHome
{
//some method declare
}
EJB類的代碼
package Beans;
import java.rmi.RemoteException;
import javax.ejb.SessionBean;
import javx.ejb.SessionContext;
public class AddBean Implements SessionBean
{
//some method declare
}


(1) Main method calling a non-static method. (illegal)
   在main(String[] args)方法內調用一個非靜態方法。(非法)


(2) Methods with the same name as the constructor(s). (這種題常有)
   與Constructor(s)有相同名字的方法。 Constructor不是關鍵字
另:
class A{
A(){ //是構造函數 }
void A(){ //不是構造函數,只是個普通函數(方法) }
}

 

(3) Local inner classes trying to access non-final vars. (illegal)
   內部類嘗試訪問非final變量(非法)

 

(4) instanceOf is not same as instanceof.
   instanceOf 不是 instanceof。

 

(5) Private constructors. (legal)
   私有 的Constructor。 (合法)

 


(6) System.exit() in try-catch-finally blocks. (finally 不會執行)
    System.exit()在try-catch-final塊中的退出語句。 (finally不會執行)
    另:有return語句的時候finally在return前執行

 

(7) main() can be declared final. (OK)
    main()方法 可以聲明爲 final.

(8) -0.0 == 0.0 is true.
   

(9) A class without abstract methods can still be declared abstract
    沒有 抽象方法的類,仍然可以定義爲抽象類。

 

(10) Map does not implement Collection.
    Map 並不實現 Collection.


(11) Dictionary is a class, not an interface.
    Dictionary 是一個類,不是接口。


(12) Collection is an Interface where as Collections is a helper class. (這題我倒沒見過,但還真容易看混)
    Collection是一個接口,但 Collections卻是一個輔助類。

 

(13) Class declarations can come in any order.
     (也就是說: class Child extends Parents{}
                class Parents{}
      這種順序是可以的.)
    可以以任何順序申明類。

 

(14) Strings are initialized to null, not empty string.
    String 是被初始化爲 null,不是空字符。

 


(15) "continue" must be in a loop(for, do, while). It cannot appear in case constructs.
    “continue”已經要在一個循環裏(如for,do,while),它不能在case語句中出現。


(16) A constructor can throw any exception.
    一個Constructor可以拋出任何異常。


(17) All comparisons involving NaN and a non-Nan would always result false. (對大多數朋友來說這可是個盲點噢)
    所有關於 NaN(Not a Number) 和 non-NaN 的比較,都返回false.
    這條很重要。

 

(18) integer (and long ) operations / and % can throw ArithmeticException while float / and % will never, even in case of division by zero.
    integer和long 操作 /和% 的話, 會拋出ArithmeticException,
     但是 float形不會,即使是除以0。

 

(19) == gives compiler error if the operands are cast-incompatible.
    ==會產生編譯錯誤,如果兩邊 不兼容的話。


(20) You can never cast objects of sibling classes( sharing the same parent ), even with an explicit cast.
     你永遠不可能 轉化具有同一個超類的類的對象,即使是刻意轉化。(請提意見)

例:
class A
class sonA extends A
class daughterA extens A
對這種情況:
sonA 和 daughterA 之間不能相互轉化。
即:sonA son = (sonA) daughterA();是非法的。
而:sonA son = (sonA) A();是合法的。
A father = (A) sonA()和A father =sonA()也是合法的


(21) .equals returns false if the object types are different.It does not raise a compiler error.
    equals() 返回 false 如果對象類型不同,但不產生 編譯錯誤。


(22) File class has NO methods to deal with the contents of the file.(also the existing directory)
    File類沒有 任何 處理文件內容的方法。(當然,存在的目錄也一樣)
 
(23) InputStream and OutputStream are abstract classes, while DataInput and DataOutput are interfaces.
    InputStream 和 OutputStream 是 抽象類,
     但是 DataInput 和 DataOutput是 接口。


(24)if 和while後面的表達式結果只能是邏輯型的
如if(1),while(0)都是非法的

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章