JAVA面試題集


 

基礎知識:html

1.C++或Java中的異常處理機制的簡單原理和應用。java

當JAVA程序違反了JAVA的語義規則時,JAVA虛擬機就會將發生的錯誤表示爲一個異常。違反語義規則包括2種狀況。一種是JAVA類庫內置的語義檢查。例如數組下標越界,會引起IndexOutOfBoundsException;訪問null的對象時會引起NullPointerException。另外一種狀況就是JAVA容許程序員擴展這種語義檢查,程序員能夠建立本身的異常,並自由選擇在什麼時候用throw關鍵字引起異常。全部的異常都是java.lang.Thowable的子類。c++

2. Java的接口和C++的虛類的相同和不一樣處。程序員

因爲Java不支持多繼承,而有可能某個類或對象要使用分別在幾個類或對象裏面的方法或屬性,現有的單繼承機制就不能知足要求。與繼承相比,接口有更高的靈活性,由於接口中沒有任何實現代碼。當一個類實現了接口之後,該類要實現接口裏面全部的方法和屬性,而且接口裏面的屬性在默認狀態下面都是public static,全部方法默認狀況下是public.一個類能夠實現多個接口。web

3. 垃圾回收的優勢和原理。並考慮2種回收機制。面試

Java語言中一個顯著的特色就是引入了垃圾回收機制,使c++程序員最頭疼的內存管理的問題迎刃而解,它使得Java程序員在編寫程序的時候再也不須要考慮內存管理。因爲有個垃圾回收機制,Java中的對象再也不有"做用域"的概念,只有對象的引用纔有"做用域"。垃圾回收能夠有效的防止內存泄露,有效的使用可使用的內存。垃圾回收器一般是做爲一個單獨的低級別的線程運行,不可預知的狀況下對內存堆中已經死亡的或者長時間沒有使用的對象進行清楚和回收,程序員不能實時的調用垃圾回收器對某個對象或全部對象進行垃圾回收。回收機制有分代複製垃圾回收和標記垃圾回收,增量垃圾回收。算法

4. 請說出你所知道的線程同步的方法。sql

wait():使一個線程處於等待狀態,而且釋放所持有的對象的lock。數據庫

sleep():使一個正在運行的線程處於睡眠狀態,是一個靜態方法,調用此方法要捕捉InterruptedException異常。編程

notify():喚醒一個處於等待狀態的線程,注意的是在調用此方法的時候,並不能確切的喚醒某一個等待狀態的線程,而是由JVM肯定喚醒哪一個線程,並且不是按優先級。

Allnotity():喚醒全部處入等待狀態的線程,注意並非給全部喚醒線程一個對象的鎖,而是讓它們競爭。

5. 請講一講析構函數和虛函數的用法和做用。

6. Error與Exception有什麼區別?

Error表示系統級的錯誤和程序沒必要處理的異常,

Exception表示須要捕捉或者須要程序進行處理的異常。

7. 在java中一個類被聲明爲final類型,表示了什麼意思?

表示該類不能被繼承,是頂級類。

8. 描述一下你最經常使用的編程風格。

9. heap和stack有什麼區別。

棧是一種線形集合,其添加和刪除元素的操做應在同一段完成。棧按照後進先出的方式進行處理。

堆是棧的一個組成元素

10. 若是系統要使用超大整數(超過long長度範圍),請你設計一個數據結構來存儲這種超大型數字以及設計一種算法來實現超大整數加法運算)。

public classBigInt()

{

int[] ArrOne = newArrOne[1000];

StringintString="";

public int[]Arr(String s)

{

intString = s;

for(inti=0;i<ArrOne.leght;i++)

{

11. 若是要設計一個圖形系統,請你設計基本的圖形元件(Point,Line,Rectangle,Triangle)的簡單實現

12,談談final, finally, finalize的區別。

  final—修飾符(關鍵字)若是一個類被聲明爲final,意味着它不能再派生出新的子類,不能做爲父類被繼承。所以一個類不能既被聲明爲 abstract的,又被聲明爲final的。將變量或方法聲明爲final,能夠保證它們在使用中不被改變。被聲明爲final的變量必須在聲明時給定初值,而在之後的引用中只能讀取,不可修改。被聲明爲final的方法也一樣只能使用,不能重載。

  finally—再異常處理時提供finally 塊來執行任何清除操做。若是拋出一個異常,那麼相匹配的 catch 子句就會執行,而後控制就會進入 finally 塊(若是有的話)。

  finalize—方法名。Java 技術容許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去以前作必要的清理工做。這個方法是由垃圾收集器在肯定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的,所以全部的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其餘清理工做。finalize() 方法是在垃圾收集器刪除對象以前對這個對象調用的。

13,Anonymous Inner Class (匿名內部類) 是否能夠extends(繼承)其它類,是否能夠implements(實現)interface(接口)?

  匿名的內部類是沒有名字的內部類。不能extends(繼承) 其它類,但一個內部類能夠做爲一個接口,由另外一個內部類實現。

 

14,Static Nested Class 和 InnerClass的不一樣,說得越多越好(面試題有的很籠統)。

  Nested Class (通常是C++的說法),Inner Class (通常是JAVA的說法)。Java內部類與C++嵌套類最大的不一樣就在因而否有指向外部的引用上。具體可見http://www.frontfree.net/articles/services/view.asp?id=704&page=1

  注: 靜態內部類(Inner Class)意味着1建立一個static內部類的對象,不須要一個外部類對象,2不能從一個static內部類的一個對象訪問一個外部類對象

第四,&和&&的區別。

  &是位運算符。&&是布爾邏輯運算符。

15,HashMap和Hashtable的區別。

 

  都屬於Map接口的類,實現了將唯一鍵映射到特定的值上。

 

  HashMap 類沒有分類或者排序。它容許一個 null 鍵和多個 null 值。

  Hashtable 相似於 HashMap,可是不容許 null 鍵和 null 值。它也比HashMap 慢,由於它是同步的。

16,Collection 和Collections的區別。

  Collections是個java.util下的類,它包含有各類有關集合操做的靜態方法。

  Collection是個java.util下的接口,它是各類集合結構的父接口。

17,何時用assert。

  斷言是一個包含布爾表達式的語句,在執行這個語句時假定該表達式爲 true。若是表達式計算爲false,那麼系統會報告一個 Assertionerror。它用於調試目的:

assert(a > 0);// throws an Assertionerror if a <= 0

斷言能夠有兩種形式:

assert Expression1;

assert Expression1: Expression2 ;

  Expression1 應該老是產生一個布爾值。

  Expression2 能夠是得出一個值的任意表達式。這個值用於生成顯示更多調試信息的 String 消息。

  斷言在默認狀況下是禁用的。要在編譯時啓用斷言,須要使用 source 1.4 標記:

  javac -source 1.4 Test.java

  要在運行時啓用斷言,可以使用 -enableassertions 或者 -ea 標記。

  要在運行時選擇禁用斷言,可以使用 -da 或者-disableassertions 標記。

  要系統類中啓用斷言,可以使用 -esa 或者 -dsa 標記。還能夠在包的基礎上啓用或者禁用斷言。

  能夠在預計正常狀況下不會到達的任何位置上放置斷言。斷言能夠用於驗證傳遞給私有方法的參數。不過,斷言不該該用於驗證傳遞給公有方法的參數,由於無論是否啓用了斷言,公有方法都必須檢查其參數。不過,既能夠在公有方法中,也能夠在非公有方法中利用斷言測試後置條件。另外,斷言不該該以任何方式改變程序的狀態。

18,GC是什麼? 爲何要有GC? (基礎)。

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

System.gc()

Runtime.getRuntime().gc()

19,String s = new String("xyz");建立了幾個String Object?

  兩個對象,一個是"xyx",一個是指向"xyx"的引用對象s。

20,Math.round(11.5)等於多少?Math.round(-11.5)等於多少?

  Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;

21,short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?

  short s1 = 1; s1 = s1 + 1;有錯,s1是short型,s1+1是int型,不能顯式轉化爲short型。可修改成s1 =(short)(s1 + 1) 。short s1 =1; s1 += 1正確。

22,sleep() 和 wait() 有什麼區別? 搞線程的最愛

  sleep()方法是使線程中止一段時間的方法。在sleep 時間間隔期滿後,線程不必定當即恢復執行。這是由於在那個時刻,其它線程可能正在運行並且沒有被調度爲放棄執行,除非(a)"醒來"的線程具備更高的優先級 (b)正在運行的線程由於其它緣由而阻塞。

  wait()是線程交互時,若是線程對一個同步對象x 發出一個wait()調用,該線程會暫停執行,被調對象進入等待狀態,直到被喚醒或等待時間到。

23,Java有沒有goto?

  Goto—java中的保留字,如今沒有在java中使用。

 

24,數組有沒有length()這個方法?String有沒有length()這個方法?

  數組沒有length()這個方法,有length的屬性。

  String有有length()這個方法。

25,Overload和Override的區別。Overloaded的方法是否能夠改變返回值的類型?

  方法的重寫Overriding和重載Overloading是Java多態性的不一樣表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。若是在子類中定義某方法與其父類有相同的名稱和參數,咱們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被"屏蔽"了。若是在一個類中定義了多個同名的方法,它們或有不一樣的參數個數或有不一樣的參數類型,則稱爲方法的重載(Overloading)。Overloaded的方法是能夠改變返回值的類型。

26,Set裏的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==仍是equals()? 它們有何區別?

  Set裏的元素是不能重複的,那麼用iterator()方法來區分重複與否。equals()是判讀兩個Set是否相等。

  equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,爲的是當兩個分離的對象的內容和類型相配的話,返回真值。

27,給我一個你最多見到的runtime exception。

ArithmeticException,ArrayStoreException, BufferOverflowException, BufferUnderflowException,CannotRedoException, CannotUndoException, ClassCastException, CMMException,ConcurrentModificationException, DOMException, EmptyStackException,IllegalArgumentException, IllegalMonitorStateException,IllegalPathStateException, IllegalStateException,

ImagingOpException,IndexOutOfBoundsException, MissingResourceException,NegativeArraySizeException, NoSuchElementException, NullPointerException,ProfileDataException, ProviderException, RasterFORMatException,SecurityException, SystemException, UndeclaredThrowableException,UnmodifiableSetException, UnsupportedOperationException

28,error和exception有什麼區別?

  error 表示恢復不是不可能但很困難的狀況下的一種嚴重問題。好比說內存溢出。不可能期望程序能處理這樣的狀況。

  exception 表示一種設計或實現問題。也就是說,它表示若是程序運行正常,從不會發生的狀況。

29,List, Set, Map是否繼承自Collection接口?

List,Set是

Map不是

30,abstract class和interface有什麼區別?

  聲明方法的存在而不去實現它的類被叫作抽象類(abstract class),它用於要建立一個體現某些基本行爲的類,併爲該類聲明方法,但不能在該類中實現該類的狀況。不能建立abstract 類的實例。然而能夠建立一個變量,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類爲它們父類中的全部抽象方法提供實現,不然它們也是抽象類爲。取而代之,在子類中實現該方法。知道其行爲的其它類能夠在類中實現這些方法。

  接口(interface)是抽象類的變體。在接口中,全部方法都是抽象的。多繼承性可經過實現這樣的接口而得到。接口中的全部方法都是抽象的,沒有一個有程序體。接口只能夠定義static final成員變量。接口的實現與子類類似,除了該實現類不能從接口定義中繼承行爲。當類實現特殊接口時,它定義(即將程序體給予)全部這種接口的方法。而後,它能夠在實現了該接口的類的任何對象上調用接口的方法。因爲有抽象類,它容許使用接口名做爲引用變量的類型。一般的動態聯編將生效。引用能夠轉換到接口類型或從接口類型轉換,instanceof 運算符能夠用來決定某對象的類是否實現了接口。

 

 

31,abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?

  都不能

32,接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)?

  接口能夠繼承接口。抽象類能夠實現(implements)接口,抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數。

33,啓動一個線程是用run()仍是start()?

  啓動一個線程是調用start()方法,使線程所表明的虛擬處理機處於可運行狀態,這意味着它能夠由JVM調度並執行。這並不意味着線程就會當即運行。run()方法能夠產生必須退出的標誌來中止一個線程。

34,構造器Constructor是否可被override?

  構造器Constructor不能被繼承,所以不能重寫Overriding,但能夠被重載Overloading。

35,是否能夠繼承String類?

  String類是final類故不能夠繼承。

36,當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法?

  不能,一個對象的一個synchronized方法只能由一個線程訪問。

37,try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的code會不會被執行,何時被執行,在return前仍是後?

  會執行,在return前執行。

38,編程題: 用最有效率的方法算出2乘以8等於幾?

  有C背景的程序員特別喜歡問這種問題。

  2 << 3

39,兩個對象值相同(x.equals(y) == true),但卻可有不一樣的hashcode,這句話對不對?

  不對,有相同的hash code。

40,當一個對象被看成參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裏究竟是值傳遞仍是引用傳遞?

  是值傳遞。Java 編程語言只由值傳遞參數。當一個對象實例做爲一個參數被傳遞到方法中時,參數的值就是對該對象的引用。對象的內容能夠在被調用的方法中改變,但對象的引用是永遠不會改變的。

41,swtich是否能做用在byte上,是否能做用在long上,是否能做用在String上?

  switch(expr1)中,expr1是一個整數表達式。所以傳遞給 switch 和 case 語句的參數應該是 int、 short、 char 或者 byte。long,string 都不能做用於swtich。

42,編程題: 寫一個Singleton出來。

  Singleton模式主要做用是保證在Java應用程序中,一個類Class只有一個實例存在。

  通常Singleton模式一般有幾種種形式:

  第一種形式:定義一個類,它的構造函數爲private的,它有一個static的private的該類變量,在類初始化時實例話,經過一個public的getInstance方法獲取對它的引用,繼而調用其中的方法。

public classSingleton {

  private Singleton(){}

  //在本身內部定義本身一個實例,是否是很奇怪?

  //注意這是private只供內部調用

  private static Singleton instance = newSingleton();

  //這裏提供了一個供外部訪問本class的靜態方法,能夠直接訪問  

  public static Singleton getInstance() {

    return instance;   

   }

}

 

  第二種形式:

public classSingleton {

  private static Singleton instance = null;

  public static synchronized SingletongetInstance() {

  //這個方法比上面有所改進,不用每次都進行生成對象,只是第一次     

  //使用時生成實例,提升了效率!

  if (instance==null)

    instance=newSingleton();

return instance;   }

}

其餘形式:

  定義一個類,它的構造函數爲private的,全部方法爲static的。

  通常認爲第一種形式要更加安全些

  Hashtable和HashMap

  Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現

  HashMap容許將null做爲一個entry的key或者value,而Hashtable不容許

  還有就是,HashMap把Hashtable的contains方法去掉了,改爲containsvalue和containsKey。由於contains方法容易讓人引發誤解。

  最大的不一樣是,Hashtable的方法是Synchronize的,而HashMap不是,在

多個線程訪問Hashtable時,不須要本身爲它的方法實現同步,而HashMap

就必須爲之提供外同步。

Hashtable和HashMap採用的hash/rehash算法都大概同樣,因此性能不會有很大的差別。

43.描述一下JVM加載class文件的原理機制?

44.試舉例說明一個典型的垃圾回收算法?

45.請用java寫二叉樹算法,實現添加數據造成二叉樹功能,並以先序的方式打印出來.

46.請寫一個java程序實現線程鏈接池功能?

47.給定一個C語言函數,要求實如今java類中進行調用。

4八、編一段代碼,實如今控制檯輸入一組數字後,排序後在控制檯輸出;

4九、列出某文件夾下的全部文件;

50、調用系統命令實現刪除文件的操做;

5一、實現從文件中一次讀出一個字符的操做;

5二、列出一些控制流程的方法;

5三、多線程有哪些狀態?

5四、編寫了一個服務器端的程序實如今客戶端輸入字符而後在控制檯上顯示,直到輸入"END"爲止,讓你寫出客戶端的程序;

5五、做用域public,private,protected,以及不寫時的區別

答:區別以下:

做用域 當前類 同一package 子孫類 其餘package

public √√√√

protected √√√×

friendly √√××

private √×××

不寫時默認爲friendly

5六、ArrayList和Vector的區別,HashMap和Hashtable的區別

答:就ArrayList與Vector主要從二方面來講.

一.同步性:Vector是線程安全的,也就是說是同步的,而ArrayList是線程序不安全的,不是同步的

二.數據增加:當須要增加時,Vector默認增加爲原來一培,而ArrayList倒是原來的一半

就HashMap與HashTable主要從三方面來講。

一.歷史緣由:Hashtable是基於陳舊的Dictionary類的,HashMap是Java 1.2引進的Map接口的一個實現

二.同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的

三.值:只有HashMap可讓你將空值做爲一個表的條目的key或value

5七、char型變量中能不能存貯一箇中文漢字?爲何?

答:是可以定義成爲一箇中文的,由於java中以unicode編碼,一個char佔16個字節,因此放一箇中文是沒問題的

5八、多線程有幾種實現方法,都是什麼?同步有幾種實現方法,都是什麼?

答:多線程有兩種實現方法,分別是繼承Thread類與實現Runnable接口

同步的實現方面有兩種,分別是synchronized,wait與notify

5九、垃圾回收機制,如何優化程序?

但願你們補上,謝謝

60、float型float f=3.4是否正確?

答:不正確。精度不許確,應該用強制類型轉換,以下所示:float f=(float)3.4

6一、介紹JAVA中的Collection FrameWork(包括如何寫本身的數據結構)?

答:Collection FrameWork以下:

Collection

├List

│├LinkedList

│├ArrayList

│└Vector

│ └Stack

└Set

Map

├Hashtable

├HashMap

└WeakHashMap

Collection是最基本的集合接口,一個Collection表明一組Object,即Collection的元素(Elements)

Map提供key到value的映射

6二、Java中異常處理機制,事件機制?

十一、JAVA中的多形與繼承?

但願你們補上,謝謝

6三、抽象類與接口?

答:抽象類與接口都用於抽象,可是抽象類(JAVA中)能夠有本身的部分實現,而接口則徹底是一個標識(同時有多重繼承的功能)。

編程題:

1.如今輸入n個數字,以逗號,分開;

而後可選擇升或者降序排序;

按提交鍵就在另外一頁面顯示

  按什麼 排序,結果爲,  ,

提供reset

答案(1)  public static String[]splitStringByComma(String source){

           if(source==null||source.trim().equals(""))

                   return null;

           StringTokenizer commaToker =  new StringTokenizer(source,",");

           String[] result = newString[commaToker.countTokens()];

           int i=0;

           while(commaToker.hasMoreTokens()){

                   result[i] =commaToker.nextToken();

                   i++;

           }

           return result;

  }

循環遍歷String數組

Integer.parseInt(Strings)變成int類型

組成int數組

Arrays.sort(int[]a),

a數組升序

降序能夠從尾部開始輸出

 

2.金額轉換,阿拉伯數字的金額轉換成中國傳統的形式如:

(¥1011)->(一千零一拾一元整)輸出。

三、繼承時候類的執行順序問題,通常都是選擇題,問你將會打印出什麼?

答:父類:

package test;

public classFatherClass

{

publicFatherClass()

{

System.out.println("FatherClassCreate");

}

}

子類:

package test;

importtest.FatherClass;

public classChildClass extends FatherClass

{

publicChildClass()

{

System.out.println("ChildClassCreate");

}

public static voidmain(String[] args)

{

FatherClass fc =new FatherClass();

ChildClass cc =new ChildClass();

}

}

輸出結果:

C:>javatest.ChildClass

FatherClass Create

FatherClass Create

ChildClass Create

 

四、內部類的實現方式?

答:示例代碼以下:

package test;

public classOuterClass

{

private class InterClass

{

publicInterClass()

{

System.out.println("InterClassCreate");

}

}

publicOuterClass()

{

InterClass ic =new InterClass();

System.out.println("OuterClassCreate");

}

public static voidmain(String[] args)

{

OuterClass oc =new OuterClass();

}

}

輸出結果:

C:>javatest/OuterClass

InterClass Create

OuterClass Create

再一個例題:

public classOuterClass {

private double d1= 1.0;

//insert code here

}

You need to insertan inner class declaration at line 3. Which two inner class declarations are

 

valid?(Choosetwo.)

A. class InnerOne{

public staticdouble methoda() {return d1;}

}

B. public classInnerOne{

static doublemethoda() {return d1;}

}

C. private classInnerOne{

double methoda(){return d1;}

}

D. static classInnerOne{

protected doublemethoda() {return d1;}

}

E. abstract classInnerOne{

public abstractdouble methoda();

}

說明以下:

一.靜態內部類能夠有靜態成員,而非靜態內部類則不能有靜態成員。 故 A、B 錯

二.靜態內部類的非靜態成員能夠訪問外部類的靜態變量,而不可訪問外部類的非靜態變量;return d1 出錯。

 

故 D 錯

三.非靜態內部類的非靜態成員能夠訪問外部類的非靜態變量。 故 C 正確

四.答案爲C、E

 

 

五、Java 的通訊編程,編程題(或問答),用JAVA SOCKET編程,讀服務器幾個字符,再寫入本地顯示?

答:Server端程序:

package test;

import java.net.*;

import java.io.*;

public classServer

{

privateServerSocket ss;

private Socketsocket;

privateBufferedReader in;

privatePrintWriter out;

public Server()

{

try

{

ss=newServerSocket(10000);

while(true)

{

socket =ss.accept();

String RemoteIP =socket.getInetAddress().getHostAddress();

String RemotePort= ":"+socket.getLocalPort();

System.out.println("Aclient come in!IP:"+RemoteIP+RemotePort);

in = newBufferedReader(new

 

InputStreamReader(socket.getInputStream()));

String line =in.readLine();

System.out.println("Cleintsend is :" + line);

out = newPrintWriter(socket.getOutputStream(),true);

out.println("YourMessage Received!");

out.close();

in.close();

socket.close();

}

}catch(IOException e)

{

out.println("wrong");

}

}

public static voidmain(String[] args)

{

new Server();

}

};

Client端程序:

package test;

import java.io.*;

import java.net.*;

 

public classClient

{

Socket socket;

BufferedReader in;

PrintWriter out;

public Client()

{

try

{

System.out.println("Tryto Connect to 127.0.0.1:10000");

socket = newSocket("127.0.0.1",10000);

System.out.println("TheServer Connected!");

System.out.println("Pleaseenter some Character:");

BufferedReaderline = new BufferedReader(new

 

InputStreamReader(System.in));

out = newPrintWriter(socket.getOutputStream(),true);

out.println(line.readLine());

in = newBufferedReader(new InputStreamReader(socket.getInputStream()));

System.out.println(in.readLine());

out.close();

in.close();

socket.close();

}catch(IOExceptione)

{

out.println("Wrong");

}

}

public static voidmain(String[] args)

{

new Client();

}

};

六、用JAVA實現一種排序,JAVA類實現序列化的方法(二種)? 如在COLLECTION框架中,實現比較要實現什麼樣的接口?

答:用插入法進行排序代碼以下

package test;

importjava.util.*;

class InsertSort

{

ArrayList al;

publicInsertSort(int num,int mod)

{

al = newArrayList(num);

Random rand = newRandom();

System.out.println("TheArrayList Sort Before:");

for (inti=0;i<num ;i++ )

{

al.add(newInteger(Math.abs(rand.nextInt()) % mod + 1));

System.out.println("al["+i+"]="+al.get(i));

}

}

public voidSortIt()

{

Integer tempInt;

int MaxSize=1;

for(inti=1;i<al.size();i++)

{

tempInt =(Integer)al.remove(i);

if(tempInt.intValue()>=((Integer)al.get(MaxSize-1)).intValue())

{

al.add(MaxSize,tempInt);

MaxSize++;

System.out.println(al.toString());

} else {

for (int j=0;j<MaxSize;j++ )

{

if

 

(((Integer)al.get(j)).intValue()>=tempInt.intValue())

{

al.add(j,tempInt);

MaxSize++;

System.out.println(al.toString());

break;

}

}

}

}

System.out.println("TheArrayList Sort After:");

for(inti=0;i<al.size();i++)

{

System.out.println("al["+i+"]="+al.get(i));

}

}

public static voidmain(String[] args)

{

InsertSort is =new InsertSort(10,100);

is.SortIt();

}

}

JAVA類實現序例化的方法是實現java.io.Serializable接口

Collection框架中實現比較要實現Comparable 接口和Comparator 接口

七、編程:編寫一個截取字符串的函數,輸入爲一個字符串和字節數,輸出爲按字節截取的字符串。 可是要保證漢字不被截半個,如"我ABC"4,應該截爲"我AB",輸入"我ABC漢DEF",6,應該輸出爲"我ABC"而不是"我ABC+漢的半個"。

答:代碼以下:

package test;

 

class SplitString

{

String SplitStr;

int SplitByte;

publicSplitString(String str,int bytes)

{

SplitStr=str;

SplitByte=bytes;

System.out.println("TheString is:′"+SplitStr+"′;SplitBytes="+SplitByte);

}

public voidSplitIt()

{

int loopCount;

loopCount=(SplitStr.length()%SplitByte==0)?(SplitStr.length()/SplitByte):(SplitStr.length()/Split

Byte+1);

System.out.println("WillSplit into "+loopCount);

for (inti=1;i<=loopCount ;i++ )

{

if (i==loopCount){

System.out.println(SplitStr.substring((i-1)*SplitByte,SplitStr.length()));

} else {

System.out.println(SplitStr.substring((i-1)*SplitByte,(i*SplitByte)));

}

}

}

public static voidmain(String[] args)

{

SplitString ss =new SplitString("test中dd文dsaf中男大3443n中國43中國人

 

0ewldfls=103",4);

ss.SplitIt();

}

}

八、JAVA多線程編程。 用JAVA寫一個多線程程序,如寫四個線程,二個加1,二個對一個變量減一,輸出。

但願你們補上,謝謝

九、STRING與STRINGBUFFER的區別。

答:STRING的長度是不可變的,STRINGBUFFER的長度是可變的。若是你對字符串中的內容常常進行操做,特別是內容要修改時,那麼使用StringBuffer,若是最後須要String,那麼使用StringBuffer的toString()方法

Jsp方面

一、jsp有哪些內置對象?做用分別是什麼?

答:JSP共有如下9種基本內置組件(可與ASP的6種內部組件相對應):

 request 用戶端請求,此請求會包含來自GET/POST請求的參數

response 網頁傳回用戶端的迴應

pageContext 網頁的屬性是在這裏管理

session 與請求有關的會話期

applicationservlet 正在執行的內容

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:includepage="included.jsp" flush="true" />它老是會檢查所含文件中的變化,適合用於包含動態頁面,而且能夠帶參數

靜態INCLUDE用include僞碼實現,定不會檢查所含文件的變化,適用於包含靜態頁面

<%@ includefile="included.htm" %>

四、兩種跳轉方式分別是什麼?有什麼區別?

答:有兩種,分別爲:

<jsp:includepage="included.jsp" flush="true">

<jsp:forwardpage= "nextpage.jsp"/>

前者頁面不會轉向include所指的頁面,只是顯示該頁的結果,主頁面仍是原來的頁面。執行完後還會回來,至關於函數調用。而且能夠帶參數.後者徹底轉向新頁面,不會再回來。至關於go to 語句。

Servlet方面

一、說一說Servlet的生命週期?

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

二、Servlet版本間(忘了問的是哪兩個版本了)的不一樣?

但願你們補上,謝謝

三、JAVA SERVLET API中forward() 與redirect()的區別?

答:前者僅是容器中控制權的轉向,在客戶端瀏覽器地址欄中不會顯示出轉向後的地址;後者則是徹底的跳轉,瀏覽器將會獲得跳轉的地址,並從新發送請求連接。這樣,從瀏覽器的地址欄中能夠看到跳轉後的連接地址。因此,前者更加高效,在前者能夠知足須要時,儘可能使用forward()方法,而且,這樣也有助於隱藏實際的連接。在有些狀況下,好比,須要跳轉到一個其它服務器上的資源,則必須使用sendRedirect()方法。

四、Servlet的基本架構

public classServletName extends HttpServlet {

public voiddoPost(HttpServletRequest request, HttpServletResponse response) throws

ServletException,IOException {

}

public voiddoGet(HttpServletRequest request, HttpServletResponse response) throws

ServletException,IOException {

}

}

 

Jdbc、Jdo方面

一、可能會讓你寫一段Jdbc連Oracle的程序,並實現數據查詢.

答:程序以下:

package hello.ant;

import java.sql.*;

public class jdbc

{

StringdbUrl="jdbc:oracle:thin:@127.0.0.1:1521:orcl";

StringtheUser="admin";

StringthePw="manager";

Connection c=null;

Statement conn;

ResultSet rs=null;

public jdbc()

{

try{

Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();

c =DriverManager.getConnection(dbUrl,theUser,thePw);

conn=c.createStatement();

}catch(Exceptione){

e.printStackTrace();

}

}

public booleanexecuteUpdate(String sql)

{

try

{

conn.executeUpdate(sql);

return true;

}

catch(SQLException e)

{

e.printStackTrace();

return false;

}

}

public ResultSetexecuteQuery(String sql)

{

rs=null;

try

{

rs=conn.executeQuery(sql);

}

catch(SQLException e)

{

e.printStackTrace();

}

return rs;

}

public voidclose()

{

try

{

conn.close();

c.close();

}

catch (Exceptione)

{

e.printStackTrace();

}

}

public static voidmain(String[] args)

{

ResultSet rs;

jdbc conn = newjdbc();

rs=conn.executeQuery("select* from test");

try{

while (rs.next())

{

System.out.println(rs.getString("id"));

System.out.println(rs.getString("name"));

}

}catch(Exceptione)

{

e.printStackTrace();

}

}

}

二、Class.forName的做用?爲何要用?

答:調用該訪問返回一個以字符串指定類名的類的對象。

三、Jdo是什麼?

答:JDO是Java對象持久化的新的規範,爲java data object的簡稱,也是一個用於存取某種數據倉庫中的對象的標準化API。JDO提供了透明的對象存儲,所以對開發人員來講,存儲數據對象徹底不須要額外的代碼(如JDBC API的使用)。這些繁瑣的例行工做已經轉移到JDO產品提供商身上,使開發人員解脫出來,從而集中時間和精力在業務邏輯上。另外,JDO很靈活,由於它能夠在任何數據底層上運行。JDBC只是面向關係數據庫(RDBMS)JDO更通用,提供到任何數據底層的存儲功能,好比關係數據庫、文件、XML以及對象數據庫(ODBMS)等等,使得應用可移植性更強。

四、在ORACLE大數據量下的分頁解決方法。通常用截取ID方法,還有是三層嵌套方法。

答:一種分頁方法

<%

int i=1;

int numPages=14;

String pages =request.getParameter("page") ;

int currentPage =1;

currentPage=(pages==null)?(1):{Integer.parseInt(pages)}

sql = "selectcount(*) from tables";

ResultSet rs =DBLink.executeQuery(sql) ;

while(rs.next()) i= rs.getInt(1) ;

intintPageCount=1;

intPageCount=(i%numPages==0)?(i/numPages):(i/numPages+1);

int nextPage ;

int upPage;

nextPage =currentPage+1;

if(nextPage>=intPageCount) nextPage=intPageCount;

upPage =currentPage-1;

if (upPage<=1)upPage=1;

rs.close();

sql="select *from tables";

rs=DBLink.executeQuery(sql);

i=0;

while((i<numPages*(currentPage-1))&&rs.next()){i++;}

%>

//輸出內容

//輸出翻頁鏈接

合計:<%=currentPage%>/<%=intPageCount%><ahref="List.jsp?page=1">第一頁</a><a

 

href="List.jsp?page=<%=upPage%>">上一頁</a>

<%

for(intj=1;j<=intPageCount;j++){

if(currentPage!=j){

%>

<ahref="list.jsp?page=<%=j%>">[<%=j%>]</a>

<%

}else{

out.println(j);

}

}

%>

<ahref="List.jsp?page=<%=nextPage%>">下一頁</a><a href="List.jsp?page=<%=intPageCount%>">最後頁

 

</a>

Xml方面

一、xml有哪些解析技術?區別是什麼?

答:有DOM,SAX,STAX等

DOM:處理大型文件時其性能降低的很是厲害。這個問題是由DOM的樹結構所形成的,這種結構佔用的內存較多,並且DOM必須在解析文件以前把整個文檔裝入內存,適合對XML的隨機訪問SAX:不現於DOM,SAX是事件驅動型的XML解析方式。它順序讀取XML文件,不須要一次所有裝載整個文件。當遇到像文件開頭,文檔結束,或者標籤開頭與標籤結束時,它會觸發一個事件,用戶經過在其回調事件中寫入處理代碼來處理XML文件,適合對XML的順序訪問

STAX:Streaming APIfor XML (StAX)

二、你在項目中用到了xml技術的哪些方面?如何實現的?

答:用到了數據存貯,信息配置兩方面。在作數據交換平臺時,將不能數據源的數據組裝成XML文件,而後將XML文件壓縮打包加密後經過網絡傳送給接收者,接收解密與解壓縮後再同XML文件中還原相關信息進行處理。在作軟件配置時,利用XML能夠很方便的進行,軟件的各類配置參數都存貯在XML文件中。

三、用jdom解析xml文件時如何解決中文問題?如何解析?

答:看以下代碼,用編碼方式加以解決

package test;

import java.io.*;

public classDOMTest

{

private StringinFile = "c:\people.xml";

private StringoutFile = "c:\people.xml";

public static voidmain(String args[])

{

new DOMTest();

}

public DOMTest()

{

try

{

javax.xml.parsers.DocumentBuilderbuilder =

javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder();

org.w3c.dom.Documentdoc = builder.newDocument();

org.w3c.dom.Elementroot = doc.createElement("老師");

org.w3c.dom.Elementwang = doc.createElement("王");

org.w3c.dom.Elementliu = doc.createElement("劉");

wang.appendChild(doc.createTextNode("我是王老師"));

root.appendChild(wang);

doc.appendChild(root);

javax.xml.transform.Transformertransformer =

javax.xml.transform.TransformerFactory.newInstance().newTransformer();

transformer.setOutputProperty(javax.xml.transform.OutputKeys.ENCODING,"gb2312");

transformer.setOutputProperty(javax.xml.transform.OutputKeys.INDENT,"yes");

 

 

transformer.transform(newjavax.xml.transform.dom.DOMSource(doc),

new

 

javax.xml.transform.stream.StreamResult(outFile));

}

catch (Exceptione)

{

System.out.println(e.getMessage());

}

}

}

四、編程用JAVA解析XML的方式.

答:用SAX方式解析XML,XML文件以下:

<?xmlversion="1.0" encoding="gb2312"?>

<person>

<name>王小明</name>

<college>信息學院</college>

<telephone>6258113</telephone>

<notes>男,1955年生,博士,95年調入海南大學</notes>

</person>

事件回調類SAXHandler.java

import java.io.*;

importjava.util.Hashtable;

importorg.xml.sax.*;

public classSAXHandler extends HandlerBase

{

private Hashtabletable = new Hashtable();

private StringcurrentElement = null;

private StringcurrentValue = null;

public voidsetTable(Hashtable table)

{

this.table =table;

}

public HashtablegetTable()

{

return table;

}

public voidstartElement(String tag, AttributeList attrs)

throwsSAXException

{

currentElement =tag;

}

public voidcharacters(char[] ch, int start, int length)

throwsSAXException

{

currentValue = newString(ch, start, length);

}

public void endElement(Stringname) throws SAXException

{

if(currentElement.equals(name))

table.put(currentElement,currentValue);

}

}

JSP內容顯示源碼,SaxXml.jsp:

<HTML>

<HEAD>

<TITLE>剖析XML文件people.xml</TITLE>

</HEAD>

<BODY>

<%@ pageerrorPage="ErrPage.jsp"

contentType="text/html;charset=GB2312"%>

<%@ pageimport="java.io.*" %>

<%@ pageimport="java.util.Hashtable" %>

<%@ pageimport="org.w3c.dom.*" %>

<%@ pageimport="org.xml.sax.*" %>

<%@ pageimport="javax.xml.parsers.SAXParserFactory" %>

<%@ pageimport="javax.xml.parsers.SAXParser" %>

<%@ pageimport="SAXHandler" %>

<%

File file = newFile("c:\people.xml");

FileReader reader= new FileReader(file);

Parser parser;

SAXParserFactoryspf = SAXParserFactory.newInstance();

SAXParser sp =spf.newSAXParser();

SAXHandler handler= new SAXHandler();

sp.parse(newInputSource(reader), handler);

HashtablehashTable = handler.getTable();

out.println("<TABLEBORDER=2><CAPTION>教師信息表</CAPTION>");

out.println("<TR><TD>姓名</TD>" + "<TD>" +

(String)hashTable.get(newString("name")) + "</TD></TR>");

out.println("<TR><TD>學院</TD>" + "<TD>" +

(String)hashTable.get(newString("college"))+"</TD></TR>");

out.println("<TR><TD>電話</TD>" + "<TD>" +

(String)hashTable.get(newString("telephone")) + "</TD></TR>");

out.println("<TR><TD>備註</TD>" + "<TD>" +

(String)hashTable.get(newString("notes")) + "</TD></TR>");

out.println("</TABLE>");

%>

</BODY>

</HTML>

EJB方面

一、EJB2.0有哪些內容?分別用在什麼場合?EJB2.0和EJB1.1的區別?

答:規範內容包括Bean提供者,應用程序裝配者,EJB容器,EJB配置工具,EJB服務提供者,系統管理員。這裏面,EJB容器是EJB之因此可以運行的核心。EJB容器管理着EJB的建立,撤消,激活,去活,與數據庫的鏈接等等重要的核心工做。JSP,Servlet,EJB,JNDI,JDBC,JMS.....

二、EJB與JAVA BEAN的區別?

答:Java Bean 是可複用的組件,對JavaBean並無嚴格的規範,理論上講,任何一個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;

importjavax.ejb.EJBObject;

importjava.rmi.RemoteException;

public interfaceAdd extends EJBObject

{

//some methoddeclare

}

Home Interface 接口的代碼

package Beans;

importjava.rmi.RemoteException;

importjaax.ejb.CreateException;

importjavax.ejb.EJBHome;

public interfaceAddHome extends EJBHome

{

//some methoddeclare

}

EJB類的代碼

package Beans;

importjava.rmi.RemoteException;

importjavax.ejb.SessionBean;

importjavx.ejb.SessionContext;

public classAddBean Implements SessionBean

{

//some methoddeclare

}

 

J2EE,MVC方面

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

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

二、應用服務器與WEB SERVER的區別?

但願你們補上,謝謝

三、J2EE是什麼?

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

四、WEB SERVICE名詞解釋。JSWDL開發包的介紹。JAXP、JAXM的解釋。SOAP、UDDI,WSDL解釋。

答:Web Service描述語言WSDL

SOAP即簡單對象訪問協議(Simple Object Access Protocol),它是用於交換XML編碼信息的輕量級協議。

UDDI 的目的是爲電子商務創建標準;UDDI是一套基於Web的、分佈式的、爲WebService提供的、信息註冊中心的實現標準規範,同時也包含一組使企業能將自身提供的Web Service註冊,以使別的企業可以發現的訪問協議的實現標準。

五、BS與CS的聯繫與區別。

但願你們補上,謝謝

六、STRUTS的應用(如STRUTS架構)

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

一.包含一個controllerservlet,能將用戶的請求發送到相應的Action對象。

二.JSP自由tag庫,而且在controller servlet中提供關聯支持,幫助開發員建立交互式表單應用。

三.提供了一系列實用對象:XML處理、經過Java reflection APIs自動處理JavaBeans屬性、國際化的提示和消息。

設計模式方面

一、開發中都用到了那些設計模式?用在什麼場合?

答:每一個模式都描述了一個在咱們的環境中不斷出現的問題,而後描述了該問題的解決方案的核心。經過這種方式,你能夠無數次地使用那些已有的解決方案,無需在重複相同的工做。主要用到了MVC的設計模式。用來開發JSP/Servlet或者J2EE的相關應用。簡單工廠模式等。

二、UML方面

答:標準建模語言UML。用例圖,靜態圖(包括類圖、對象圖和包圖),行爲圖,交互圖(順序圖,合做圖),實現圖,

JavaScript方面

一、如何校驗數字型?

varre=/^d{1,8}$|.d{1,2}$/;

var str=document.form1.all(i).value;

varr=str.match(re);

if (r==null)

{

sign=-4;

break;

}

else{

document.form1.all(i).value=parseFloat(str);

}

CORBA方面

一、CORBA是什麼?用途是什麼?

答:CORBA 標準是公共對象請求代理結構(CommonObject Request Broker Architecture),由對象管理組織(Object Management Group,縮寫爲 OMG)標準化。它的組成是接口定義語言(IDL), 語言綁定(binding:也譯爲聯編)和容許應用程序間互操做的協議。 其目的爲:

用不一樣的程序設計語言書寫

在不一樣的進程中運行

爲不一樣的操做系統開發

LINUX方面

一、LINUX下線程,GDI類的解釋。

答:LINUX實現的就是基於核心輕量級進程的"一對一"線程模型,一個線程實體對應一個核心輕量級進程,而線程之間的管理在覈外函數庫中實現。

GDI類爲圖像設備編程接口類庫。

JAVA華爲面試題

JAVA方面

1 面向對象的特徵有哪些方面  

2 String是最基本的數據類型嗎?

3 int 和 Integer 有什麼區別

4 String 和StringBuffer的區別

5運行時異常與通常異常有何異同?

異常表示程序運行過程當中可能出現的非正常狀態,運行時異常表示虛擬機的一般操做中可能遇到的異常,是一種常見運行錯誤。java編譯器要求方法必須聲明拋出可能發生的非運行時異常,可是並不要求必須聲明拋出未被捕獲的運行時異常。

6 說出一些經常使用的類,包,接口,請各舉5個

7 說出ArrayList,Vector, LinkedList的存儲性能和特性

ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增長和插入元素,它們都容許直接按序號索引元素,可是插入元素要涉及數組元素移動等內存操做,因此索引數據快而插入數據慢,Vector因爲使用了synchronized方法(線程安全),一般性能上較ArrayList差,而LinkedList使用雙向鏈表實現存儲,按序號索引數據須要進行前向或後向遍歷,可是插入數據時只須要記錄本項的先後項便可,因此插入速度較快。

8設計4個線程,其中兩個線程每次對j增長1,另外兩個線程對j每次減小1。寫出程序。

如下程序使用內部類實現線程,對j增減的時候沒有考慮順序問題。

public classThreadTest1{

         private int j;

         public static void main(Stringargs[]){

                  ThreadTest1 tt=newThreadTest1();

                   Inc inc=tt.new Inc();

                   Dec dec=tt.new Dec();

                   for(int i=0;i<2;i++){

                            Thread t=newThread(inc);

                            t.start();

                            t=new Thread(dec);

                            t.start();

                   }

         }

         private synchronized void inc(){

                   j++;

                 System.out.println(Thread.currentThread().getName()+"-inc:"+j);

         }

         private synchronized void dec(){

                   j--;

                 System.out.println(Thread.currentThread().getName()+"-dec:"+j);

         }

        

         class Inc implements Runnable{

                   public void run(){

                            for(inti=0;i<100;i++){

                                     inc();

                            }

                   }

         }

         class Dec implements Runnable{

                   public void run(){

                            for(inti=0;i<100;i++){

                                     dec();

                            }

                   }

         }

}

9.   JSP的內置對象及方法。

request request表示HttpServletRequest對象。它包含了有關瀏覽器請求的信息,而且提供了幾個用於獲取cookie, header, 和session數據的有用的方法。

 

response response表示HttpServletResponse對象,並提供了幾個用於設置送回 瀏覽器的響應的方法(如cookies,頭信息等)

 

out out 對象是javax.jsp.JspWriter的一個實例,並提供了幾個方法使你能用於向瀏覽器回送輸出結果。

 

pageContextpageContext表示一個javax.servlet.jsp.PageContext對象。它是用於方便存取各類範圍的名字空間、servlet相關的對象的API,而且包裝了通用的servlet相關功能的方法。

 

session session表示一個請求的javax.servlet.http.HttpSession對象。Session能夠存貯用戶的狀態信息

 

applicationapplicaton 表示一個javax.servle.ServletContext對象。這有助於查找有關servlet引擎和servlet環境的信息

 

config config表示一個javax.servlet.ServletConfig對象。該對象用於存取servlet實例的初始化參數。

 

page page表示從該頁面產生的一個servlet實例

10.用socket通信寫出客戶端和服務器端的通信,要求客戶發送數據後可以回顯相同的數據。

參見課程中socket通信例子。

11說出Servlet的生命週期,並說出Servlet和CGI的區別。

Servlet被服務器實例化後,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doXXX方法(doGet,doPost)等,當服務器決定將實例銷燬的時候調用其destroy方法。

與cgi的區別在於servlet處於服務器進程中,它經過多線程方式運行其service方法,一個實例能夠服務於多個請求,而且其實例通常不會銷燬,而CGI對每一個請求都產生新的進程,服務完成後就銷燬,因此效率上低於servlet。

12.EJB是基於哪些技術實現的?並說出SessionBean和EntityBean的區別,StatefulBean和StatelessBean的區別。

 

13.EJB包括(SessionBean,EntityBean)說出他們的生命週期,及如何管理事務的?

 

14.說出數據鏈接池的工做機制是什麼?

 

15同步和異步有和異同,在什麼狀況下分別使用他們?舉例說明。

 

16應用服務器有那些?

 

17你所知道的集合類都有哪些?主要方法?

 

18給你一個:驅動程序A,數據源名稱爲B,用戶名稱爲C,密碼爲D,數據庫表爲T,請用JDBC檢索出表T的全部數據。

 

19.說出在JSP頁面裏是怎麼分頁的?

頁面須要保存如下參數:

總行數:根據sql語句獲得總行數

每頁顯示行數:設定值

當前頁數:請求參數

頁面根據當前頁數和每頁行數計算出當前頁第一行行數,定位結果集到此行,對結果集取出每頁顯示行數的行便可。

 

 

數據庫方面:

 

1.          存儲過程和函數的區別

存儲過程是用戶定義的一系列sql語句的集合,涉及特定表或其它對象的任務,用戶能夠調用存儲過程,而函數一般是數據庫已定義的方法,它接收參數並返回某種類型的值而且不涉及特定用戶表。

2.          事務是什麼?

事務是做爲一個邏輯單元執行的一系列操做,一個邏輯工做單元必須有四個屬性,稱爲 ACID(原子性、一致性、隔離性和持久性)屬性,只有這樣才能成爲一個事務:

原子性

事務必須是原子工做單元;對於其數據修改,要麼全都執行,要麼全都不執行。

一致性

事務在完成時,必須使全部的數據都保持一致狀態。在相關數據庫中,全部規則都必須應用於事務的修改,以保持全部數據的完整性。事務結束時,全部的內部數據結構(如 B 樹索引或雙向鏈表)都必須是正確的。

隔離性

由併發事務所做的修改必須與任何其它併發事務所做的修改隔離。事務查看數據時數據所處的狀態,要麼是另外一併發事務修改它以前的狀態,要麼是另外一事務修改它以後的狀態,事務不會查看中間狀態的數據。這稱爲可串行性,由於它可以從新裝載起始數據,而且重播一系列事務,以使數據結束時的狀態與原始事務執行的狀態相同。

持久性

事務完成以後,它對於系統的影響是永久性的。該修改即便出現系統故障也將一直保持。

 

3.          遊標的做用?如何知道遊標已經到了最後?

遊標用於定位結果集的行,經過判斷全局變量@@FETCH_STATUS能夠判斷是否到了最後,一般此變量不等於0表示出錯或到了最後。

4.          觸發器分爲事前觸發和過後觸發,這兩種觸發有和區別。語句級觸發和行級觸發有何區別。

事前觸發器運行於觸發事件發生以前,而過後觸發器運行於觸發事件發生以後。一般事前觸發器能夠獲取事件以前和新的字段值。

語句級觸發器能夠在語句執行前或後執行,而行級觸發在觸發器所影響的每一行觸發一次。

 

 

中遠面試題

   一、面向對象的三個基本特徵

   二、方法重載和方法重寫的概念和區別

   三、接口和內部類、抽象類的特性

   四、文件讀寫的基本類

   **五、串行化的注意事項以及如何實現串行化

   六、線程的基本概念、線程的基本狀態以及狀態之間的關係

   七、線程的同步、如何實現線程的同步

   八、幾種經常使用的數據結構及內部實現原理。

   九、Socket通訊(TCP、UDP區別及Java實現方式)

  **十、Java的事件委託機制和垃圾回收機制

  十一、JDBC調用數據庫的基本步驟

  **十二、解析XML文件的幾種方式和區別

  1三、Java四種基本權限的定義

  1四、Java的國際化

 

2、JSP

 

   一、至少要能說出7個隱含對象以及他們的區別

  ** 二、forward 和redirect的區別

   三、JSP的經常使用指令

 

3、servlet

 

   一、什麼狀況下調用doGet()和doPost()?

   二、servlet的init()方法和service()方法的區別

   三、servlet的生命週期

   四、如何現實servlet的單線程模式

   五、servlet的配置

   六、四種會話跟蹤技術

 

4、EJB

 

   **一、EJB容器提供的服務

         主要提供聲明週期管理、代碼產生、持續性管理、安全、事務管理、鎖和併發行管理等服務。

   二、EJB的角色和三個對象

         EJB角色主要包括Bean開發者應用組裝者 部署者 系統管理員 EJB容器提供者 EJB服務器提供者

         三個對象是Remote(Local)接口、Home(LocalHome)接口,Bean類

   二、EJB的幾種類型

         會話(Session)Bean ,實體(Entity)Bean 消息驅動的(Message Driven)Bean

         會話Bean又可分爲有狀態(Stateful)和無狀態(Stateless)兩種

         實體Bean可分爲Bean管理的持續性(BMP)和容器管理的持續性(CMP)兩種

   三、bean 實例的生命週期

         對於StatelessSession Bean、Entity Bean、MessageDriven Bean通常存在緩衝池管理,而對於Entity Bean和StatefullSession Bean存在Cache管理,一般包含建立實例,設置上下文、建立EJB Object(create)、業務方法調用、remove等過程,對於存在緩衝池管理的Bean,在create以後實例並不從內存清除,而是採用緩衝池調度機制不斷重用實例,而對於存在Cache管理的Bean則經過激活和去激活機制保持Bean的狀態並限制內存中實例數量。

   四、激活機制

         以StatefullSession Bean 爲例:其Cache大小決定了內存中能夠同時存在的Bean實例的數量,根據MRU或NRU算法,實例在激活和去激活狀態之間遷移,激活機制是當客戶端調用某個EJB實例業務方法時,若是對應EJBObject發現本身沒有綁定對應的Bean實例則從其去激活Bean存儲中(經過序列化機制存儲實例)回覆(激活)此實例。狀態變遷前會調用對應的ejbActive和ejbPassivate方法。

   五、remote接口和home接口主要做用

         remote接口定義了業務方法,用於EJB客戶端調用業務方法

         home接口是EJB工廠用於建立和移除查找EJB實例

   六、客服端調用EJB對象的幾個基本步驟

1、  設置JNDI服務工廠以及JNDI服務地址系統屬性

2、  查找Home接口

3、  從Home接口調用Create方法建立Remote接口

4、  經過Remote接口調用其業務方法

 

5、數據庫

 

   一、存儲過程的編寫

   二、基本的SQL語句

 

6、weblogic

 

一、   如何給weblogic指定大小的內存?

在啓動Weblogic的腳本中(位於所在Domian對應服務器目錄下的startServerName),增長setMEM_ARGS=-Xms32m -Xmx200m,能夠調整最小內存爲32M,最大200M

二、   如何設定的weblogic的熱啓動模式(開發模式)與產品發佈模式?

能夠在管理控制檯中修改對應服務器的啓動模式爲開發或產品模式之一。或者修改服務的啓動文件或者commenv文件,增長setPRODUCTION_MODE=true。

三、   如何啓動時不需輸入用戶名與密碼?

修改服務啓動文件,增長 WLS_USER和WLS_PW項。也能夠在boot.properties文件中增長加密過的用戶名和密碼.

四、   在weblogic管理制臺中對一個應用域(或者說是一個網站,Domain)進行jms及ejb或鏈接池等相關信息進行配置後,實際保存在什麼文件中?

保存在此Domain的config.xml文件中,它是服務器的核心配置文件。

五、   說說weblogic中一個Domain的缺省目錄結構?好比要將一個簡單的helloWorld.jsp放入何目錄下,然的在瀏覽器上就可打入http://主機:端口號//helloword.jsp就能夠看到運行結果了?又好比這其中用到了一個本身寫的javaBean該如何辦?

Domain目錄\服務器目錄\applications,將應用目錄放在此目錄下將能夠做爲應用訪問,若是是Web應用,應用目錄須要知足Web應用目錄要求,jsp文件能夠直接放在應用目錄中,Javabean須要放在應用目錄的WEB-INF目錄的classes目錄中,設置服務器的缺省應用將能夠實如今瀏覽器上無需輸入應用名。

六、   如何查看在weblogic中已經發布的EJB?

可使用管理控制檯,在它的Deployment中能夠查看全部已發佈的EJB

七、   如何在weblogic中進行ssl配置與客戶端的認證配置或說說j2ee(標準)進行ssl的配置

缺省安裝中使用DemoIdentity.jks和DemoTrust.jks KeyStore實現SSL,須要配置服務器使用EnableSSL,配置其端口,在產品模式下須要從CA獲取私有密鑰和數字證書,建立identity和trust keystore,裝載得到的密鑰和數字證書。能夠配置此SSL鏈接是單向仍是雙向的。

   八、在weblogic中發佈ejb需涉及到哪些配置文件

不一樣類型的EJB涉及的配置文件不一樣,都涉及到的配置文件包括ejb-jar.xml,weblogic-ejb-jar.xmlCMP實體Bean通常還須要weblogic-cmp-rdbms-jar.xml

   九、EJB需直接實現它的業務接口或Home接口嗎,請簡述理由.

遠程接口和Home接口不須要直接實現,他們的實現代碼是由服務器產生的,程序運行中對應實現類會做爲對應接口類型的實例被使用。

  十、說說在weblogic中開發消息Bean時的persistent與non-persisten的差異

persistent方式的MDB能夠保證消息傳遞的可靠性,也就是若是EJB容器出現問題而JMS服務器依然會將消息在此MDB可用的時候發送過來,而non-persistent方式的消息將被丟棄。

  十一、說說你所熟悉或據說過的j2ee中的幾種經常使用模式?及對設計模式的一些見解

       Session Facade Pattern:使用SessionBean訪問EntityBean

Message FacadePattern:實現異步調用

EJB CommandPattern:使用Command JavaBeans取代SessionBean,實現輕量級訪問

Data TransferObject Factory:經過DTO Factory簡化EntityBean數據提供特性

Generic AttributeAccess:經過AttibuteAccess接口簡化EntityBean數據提供特性

Business Interface:經過遠程(本地)接口和Bean類實現相同接口規範業務邏輯一致性

EJB架構的設計好壞將直接影響系統的性能、可擴展性、可維護性、組件可重用性及開發效率。項目越複雜,項目隊伍越龐大則越能體現良好設計的重要性

相關文章
相關標籤/搜索