java綜合面試題

2020-08-14 23:07:50

Java面試題整理
Java物件導向

  1. super()與this()的區別?
    This():當前類的物件,super父類別物件。 Super():在子類存取父類別的成員和行爲,必須受類繼承規則的約束 而this他代表當前物件,當然所有的資源都可以存取. 在建構函式中,如果第一行沒有寫super(),編譯器會自動插入.但是如果父類別沒有不帶參數的建構函式,或這個函數被私有化了(用private修飾).此時你必須加入對父類別的範例化構造.而this就沒有這個要求,因爲它本身就進行範例化的構造. 而在方法中super和this使用的方法就差不多了.只不過super 要考慮是否能存取其父類別的資源.

  2. 作用域public,protected,private,以及不寫時的區別?
    Public:不同包、同一包、類內都可用
    Private:類內
    Protected: 不同包的子類、同一包、類內都可用
    不寫時:同一包內、類內

  3. 程式設計輸出如下圖形。

* * * * * * * * * * * * * * * 
  • 程式碼如下:
public class Print { 
	public static void main(String[] args) { 
		for (int i = 0; i < 5; i++) { 
		for (int j = 5; j > i; j--) { 
			System.out.print("*");
		} 
		 System.out.println(); 
		} 
	} 
} 
  1. JAVA的事件委託機制 機製和垃圾回收機制 機製
    java 事件委託機制 機製的概念,一個源產生一個事件並將它送到一個或多個監聽器那裏。在這種方案中,監聽器簡單的等待,直到它收到一個事件。一旦事件被接受,監聽器將處理這個事件,然後返回。 垃圾回收機制 機製 垃圾收集是將分配給物件但不再使用的記憶體回收或釋放的過程。如果一個物件沒有指向它的參照或者其賦值爲null,則次物件適合進行垃圾回收
  2. 在JAVA中,如何跳出當前的多重巢狀回圈?
    用break; return 方法。
  3. 什麼是java序列化,如何實現java序列化?(寫一個範例)
    序列化: 處理物件流的機制 機製,所謂物件流也就是將物件的內容進行流化。可以對流化後的物件進行讀寫操作,也可將流化後的物件傳輸於網路之間。序列化是爲了解決在對物件流進行讀寫操作時所引發的問題。 序列化的實現: 將需要被序列化的類實現Serializable介面,該介面沒有需要實現的方法,implements Serializable只是爲了標註該物件是可被序列化的,然後使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(物件流)物件,接着,使用ObjectOutputStream物件的writeObject(Object obj)方法就可以將參數爲obj的物件寫出(即儲存其狀態),要恢復的話則用輸入流。
  4. 一個".java"原始檔中是否可以包括多個類(不是內部類)?有什麼限制?
    可以。如果這個類的修飾符是public,其類名與檔名必須相同。
  5. 排序都有哪幾種方法?請列舉。用JAVA實現一個快速排序?
    排序的方法有:插入排序(直接插入排序、希爾排序),交換排序(氣泡排序、快速排序),選擇排序(直接選擇排序、堆排序),歸併排序,分配排序(箱排序、基數排序) 快速排序的虛擬碼。
  6. Overload和Override的區別。Overloaded的方法是否可以改變返回值的型別?
    方法的 重寫Override,子類覆蓋父類別的方法,將子類傳與父類別的參照呼叫的還是子類的方法。 過載Overloading 一個類多個方法,名稱相同,參數個數型別不同。 兩者都是Java多型性的不同表現。 Overloaded的方法是可以改變返回值的型別。 1, public class Ctest() { Public static void main() { System.out.prinln(8+8+」88」+8+8); } } 168888
  7. Final類有什麼特點?
    屬性常數 方法不可以overridding 類不可以繼承
  8. 繼承時候類的執行順序問題,一般都是選擇題,問你將會列印出什麼?
    答:父類別: package test; public class FatherClass { public FatherClass() { System.out.println(「FatherClass Create」); } } 子類: package test; import test.FatherClass; public class ChildClass extends FatherClass
    { public ChildClass() { System.out.println(「ChildClass Create」); } public static void main(String[] args) { FatherClass fc = new FatherClass(); ChildClass cc = new ChildClass(); } } 輸出結果: C:>java test.ChildClass FatherClass Create FatherClass Create ChildClass Create
  9. 內部類的實現方式?
    答:範例程式碼如下: package test; public class OuterClass { private class InterClass { Public Interlass() { System.out.println(「InterClass Create」); } } public OuterClass() { InterClass ic = new InterClass(); System.out.println(「OuterClass Create」); } public static void main(String[] args) { OuterClass oc = new OuterClass(); } } 輸出結果: C:>java test/OuterClass InterClass Create
    OuterClass Create
  10. 用JAVA實現一種排序,JAVA類實現序列化的方法(二種)?
  11. 如在COLLECTION框架中,實現比較要實現什麼樣的介面?
  12. 用插入法進行排序程式碼如下
    package test; import java.util.*; class InsertSort { ArrayList al; public InsertSort(int num,int mod) { al = new ArrayList(num); Random rand = new Random(); System.out.println(「The ArrayList Sort Before:」); for (int i=0;i<num ;i++ ) { al.add(new Integer(Math.abs(rand.nextInt()) % mod + 1)); System.out.println(「al[」+i+"]="+al.get(i)); } } public void SortIt() { Integer tempInt; int MaxSize=1; for(int i=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(「The ArrayList Sort After:」); for(int i=0;i<al.size();i++) { System.out.println(「al[」+i+"]="+al.get(i)); } } public static void main(String[] args) { InsertSort is = new InsertSort(10,100); is.SortIt(); } }
    JAVA類實現序例化的方法是實現java.io.Serializable介面
    Collection框架中實現比較要實現Comparable 介面和 Comparator 介面
  13. 程式設計:編寫一個擷取字串的函數,輸入爲一個字串和位元組數,輸出爲按位元組擷取的字串。 但是要保證漢字不被截半個,如"我ABC"4,應該截爲"我AB",輸入"我ABC漢DEF",6,應該輸出爲"我ABC"而不是"我ABC+漢的半個"。
    答:程式碼如下: public static void split(String source,int num) throws Exception { int k=0; String temp=""; for (int i = 0; i <source.length(); i++) { byte[] b=(source.charAt(i)+"").getBytes(); k=k+b.length;
    if(k>num) { break; } temp=temp+source.charAt(i); } System.out.println(temp); }
    15、Java程式設計,列印昨天的當前時刻
    public class YesterdayCurrent{ public void main(String[] args){ Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, -1); System.out.println(cal.getTime()); } }
    16、檔案讀寫,實現一個計數器
    public int getNum(){ int i = -1; try{ String stri=""; BufferedReader in = new BufferedReader(new FileReader(f)); while((stri=in.readLine())!=null){ i = Integer.parseInt(stri.trim()); } in.close(); }catch(Exception e){ e.printStackTrace(); } return i; } public void setNum(){ int i = getNum(); i++; try{ PrintWriter out=new PrintWriter(new BufferedWriter(new FileWriter(f,false)));
    out.write(String.valueOf(i)); //可能是編碼的原因,如果直接寫入int的話,
    將出現java編碼和windows編碼的混亂,因此此處寫入的是String out.close() ; }catch(Exception e){ e.printStackTrace(); } }
    17、指出下面 下麪程式的執行結果。
    class A{ static{ System.out.print(「1」); } public A(){ System.out.print(「2」); } } class B extends A{ static{ System.out.print(「a」); } public B(){ System.out.print(「b」); } } public class Hello{ public static void main(String[] ars){ A ab = new B(); //執行到此處,結果: 1a2b ab = new B(); //執行到此處,結果: 1a2b2b } } 注:類的static 程式碼段,可以看作是類首次載入(被虛擬機器載入)執行的程式碼,而對於類的載入,首先要執行其基礎類別的構造,再執行其本身的構造
    18、抽象類和介面的區別?
    (1)介面可以被多重implements,抽象類只能被單一extends
    (2)介面只有定義,抽象類可以有定義和實現
    (3)介面的欄位定義預設爲:public static final, 抽象類欄位預設是"friendly"(本包可見) 當功能需要累積時用抽象類,不需要累積時用介面。
    19、什麼是類的返射機制 機製?
    通過類(Class物件),可以得出當前類的fields、method、construtor、interface、superClass、modified等,同是可以通過類範例化一個範例、設定屬性、喚醒方法。Spring中一切都是返射、struts、hibernate都是通過類的返射進行開發的。
    20、類的返射機制 機製中的包及核心類?
     java.lang.Class  java.lang.refrection.Method  java.lang.refrection.Field  java.lang.refrection.Constructor  java.lang.refrection.Modifier  java.lang.refrection.Interface
    21、得到Class的三個過程是什麼?
    物件.getClass() 類.class或Integer.type(int) Integer.class(java.lang.Integer) Class.forName();
    22、如何喚起類中的一個方法?
    產生一個Class陣列,說明方法的參數
    通過Class物件及方法參數得到Method 通過method.invoke(範例,參數值陣列)喚醒方法
    23、如何將數值型字元轉換爲數位(Integer,Double)?
    Integer.parseInt(「1234」) Double.parseDouble(「123.2」)
    24、如何將數位轉換爲字元?
    1+」」 1.0+」」
    25、如何去小數點前兩位,並四捨五入。
    double d=1256.22d;
    d=d/100; System.out.println(Math.round(d)100);
    26、如何取得年月日,小時分秒?
    Calendar c=Calendar.getInstance(); c.set(Calendar.YEAR,2004); c.set(Calendar.MONTH,0); c.set(Calendar.DAY_OF_MONTH,31); System.out.println(c.get(Calendar.YEAR)+" 「+(c.get(Calendar.MONTH)+1)+」 「+c.get(Calendar.DAY_OF_MONTH));
    27、如何取得從1970年到現在的毫秒數
    Java.util.Date dat=new Date(); long now=dat.getTime();
    28、如何獲取某個日期是當月的最後一天?
    當前日期加一天,若當前日期與結果的月份不相同,就是最後一天。 取下一個月的第一天,下一個月的第一天-1 public static void main(String[] args) { Calendar c=Calendar.getInstance(); c.set(Calendar.YEAR,2004); c.set(Calendar.MONTH,0); c.set(Calendar.DAY_OF_MONTH,30); Calendar c1=(Calendar)c.clone(); System.out.println(c.get(Calendar.YEAR)+」 「+(c.get(Calendar.MONTH)+1)+」 「+c.get(Calendar.DAY_OF_MONTH)); c.add(Calendar.DAY_OF_MONTH,1); if(c.get(Calendar.MONTH)!=c1.get(Calendar.MONTH)) { System.out.println(「是最後一天」); } else {
    System.out.println(「不是取後一天」);
    } }
    29、如何格式化日期?
    Import java.text. SimpleDateFormat; SimpleDateFormat sdf=new SimpleDateFormat(「yyyy-MM-dd hh:mm:ss」); Date dat=new Date(); //把日期轉化爲字串 String str=sdf.format(dat); System.out.println(str); //將字串轉化爲日期 Java.util.Date d1=sdf.parse(「yyyy-mm-dd」);
    30、編碼轉換,怎樣實現將GB2312編碼的字串轉換爲ISO-8859-1編碼的字串。
    String a=new String(「中」.getBytes(「gb2312」),「iso-8859-1」);
    String a=new String(「中」.getBytes(「iso-8859-1」));
    32、String s = new String(「xyz」);建立了幾個String Object?
    New了一個,」XYZ」本來又是一個
    兩個
    33、float型float f=3.4是否正確?
     報錯,應當是float f=3.4f  如果是float f=3(整數)正確
    35、說出一些常用的類,包,介面,請各舉5個
    常用的類:BufferedReader BufferedWriter FileReader FileWirter String Integer 常用的包:java.lang java.awt java.io java.util java.sql javax.xml javax.sevlet javax.ejb. java.net javax.faces 常用的介面: List Map Document NodeList EjbObject EjbHome SessionBean EntityBean
    36、java中會存在記憶體漏失嗎,請簡單描述。
    會。如:int i,i2; return (i-i2); //when i爲足夠大的正數,i2爲足夠大的負數。結果會造成溢位,導致錯誤。
    37、java中實現多型的機制 機製是什麼?
    靜態的多型:方法名相同,參數個數或型別不相同。(overloading) 動態的多型: 子類覆蓋父類別的方法,將子類的範例傳與父類別的參照呼叫的是子類的方法 實現介面的範例傳與介面的參照呼叫的實現類的方法。
    38、垃圾回收器的基本原理是什麼?垃圾回收器可以馬上回收記憶體嗎?有什麼辦法主動通知虛擬機器進行垃圾回收?
    動態記憶體
    存放類範例 靜態記憶體 類本身 垃圾收集主要針對的是動態記憶體,一般當記憶體不夠用時會進行垃圾收集。 或通過System.gc()手動收集,但不保證一定執行。
    39、靜態變數和範例變數的區別?
    static i = 10; //常數 class A a; a.i =10;//可變 靜態方法可以呼叫靜態變數。 實現方法可以呼叫靜態變數、範例變數
    41、是否可以從一個static方法內部發出對非static方法的呼叫?
    不可以,如果其中包含物件的method();不能保證物件初始化.
    42、寫clone()方法時,通常都有一行程式碼,是什麼?
    Clone 有預設行爲,super.clone();他負責產生正確大小的空間,並逐位複製。
    43、JAVA語言如何進行例外處理,關鍵字:throws,throw,try,catch,finally分別代表什麼意義?在try塊中可以拋出異常嗎?
    Try:執行部分,產生異常
    Catch:捕捉異常 Finally:不管有沒有異常都執行 Throws:在方法宣告處宣告要拋出的異常,呼叫者必須對其進行處理。 Throw:拋出一個異常
    在try中可以拋出異常,一般與宣告的異常相同。
    自定義異常要繼承於Exception或Exception的子類
    45、氣泡排序法
    //相鄰兩個數比較,將最小或最大的放到後面,最後面數的不參與比較 public class BubbleSort { private static int al[] = new int[10]; public BubbleSort() { al[0]=2; al[1]=3; al[2]=23; al[3]=45; al[4]=1; al[5]=67; al[6]=23; al[7]=80; al[8]=35; al[9]=72; } public static void main(String[] args) { BubbleSort bs = new BubbleSort(); System.out.println(「排序前:」); display(al); for(int i=0;i<al.length;i++) { for (int j = 0; j < al.length-i-1; j++) { if(al[j]>al[j+1]) { swap(j,j+1); }
    } } System.out.println(); System.out.println(「排序後:」); display(al); } private static void display(int[] al2) { for (int i = 0; i < al2.length; i++) { System.out.print(al2[i]+」 "); } } private static void swap(int i, int j) { int temp = al[i]; al[i]= al[j]; al[j] = temp; } }
    46、String and StringBuffer的區別?
    String:長度給定不可變,當多個字串聯合時要先轉爲StringBuffer,再聯合,速度慢。 StringBuffer:長度可變,可以將多個字串值直接聯合,效率高
    47、用java程式碼編寫堆疊
    public class Stack { int[] data; int maxSize; int top; public Stack(int maxSize) { this.maxSize = maxSize; data = new int[maxSize]; top = -1; } /
    * * 依次加入數據 * @param data 要加入的數據 * @return 新增是否成功 / public boolean push(int data) { if(top+1== maxSize) {
    System.out.println(「棧已滿!」); return false; } this.data[++top] = data; return true; } /
    * * 從棧中取出數據 * @return 取出的數據 */ public int pop() throws Exception{ if(top==-1) { throw new Exception(「棧已空!」); } return this.data[top–]; } public static void main(String[] args) throws Exception { Stack stack=new Stack(1000); stack.push(1); stack.push(2); stack.push(3); stack.push(4); stack.push(5); while(stack.top>=0) { System.out.println(stack.pop()); } } }
    48、集合的作用是什麼?
    數據的傳送 增、刪、改、查、constainsAll,可以存放不同類型的物件。
    49、集合的通用方法有那些?通用方法是什麼?(操作)
    集合List 的遍歷方法有: Iterator: Enumeration For Get
    set Collection的通用方法有: Iterator() Add() Clear(); remove()
    50、說出ArrayList,Vector, LinkedList的儲存效能和特性HashMap和Hashtable的區別
    ArrayList Vector:以陣列的方式儲存,增、刪慢,查、改快
    ArrayList:執行緒不安全,速度快 Vector:執行緒安全,速度慢(synchoronized) LikedList: 以單鏈表的方式儲存,增、刪快,查、改慢 HashMap與Hashtable都實現的Map介面,HashTable執行緒安全,HashMap執行緒不安全。
    51、Collection 和 Collections的區別。
    Collection是集合的根介面,其下有set及list
    Collections是集合的演算法。
    52、Set裡的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==還是equals()? 它們有何區別?用contains來區分是否有重複的物件。還是都不用。
    在比較時先呼叫hashCode方法,如果不相同,證明不相等。 如果相同,再呼叫equals方法,如果equals方法相同,證明相等,不相同,證明不相等。 :主要用在基本數據型別及參照 Equals:主要是物件或物件參照的比較。 集閤中是否包含某一個元素用contains來判斷。
    53、List, Set, Map是否繼承自Collection介面?
    List,set繼承於Collection
    Map沒有繼承於Collection,其相對是獨立的。 屬於Collection型別的物件,可以通過建構函式將一個集合構造成另外一個集合。
    54、物件導向的特徵有哪些方面
    1.抽象: 找共性,將共有的屬性、方法放到父類別中 2.繼承: 子類繼承於父類別,具有父類別的所有屬性與方法,可以重用,也可以覆蓋。 3.封裝: 一個類包括多個屬性及方法。 4. 多型性: 動態: 靜態:
    55、String是最基本的數據型別嗎?
    基本數據型別包括byte、int、char、long、float、double、boolean和short。
    java.lang.String類是final型別的,因此不可以繼承這個類、不能修改這個類。爲了提高效率節省空間,我們應該用StringBuffer類
    56、int 和 Integer 有什麼區別?
    Int是基本數據型別,不是物件,佔一個記憶體空間,沒有方法。與其同類的有long,char,doble Integer是封裝類,具有方法及屬性。與其同類的有Long,Double.Float
    57、執行時異常與一般異常有何異同?
    執行時異常:java JVM拋出的異常,程式碼中不用處理。
    一般異常:使用者拋出的異常,如果用throws 宣告瞭,呼叫這個方法的程式碼必須對其處理。
    58、&和&&的區別?
    &:與: 左邊若爲false右邊還執行。 &&:短路與,左邊若爲false右邊不執行。
    59、final, finally, finalize的區別?
    final 用於宣告屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。 finally是例外處理語句結構的一部分,表示總是執行。 finalize是Object類的一個方法,在垃圾收集器執行的時候會呼叫被回收物件的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉檔案等。 算符可以用來決定某物件的類是否實現了介面。
    62、heap和stack有什麼區別?
    棧是一種線形集合,其新增和刪除元素的操作應在同一段完成。棧按照後進先出的方式進行處理。 堆是棧的一個組成元素
    63、Static Nested Class 和 Inner Class的不同?
    Static Nested Class是被宣告爲靜態(static)的內部類,它可以不依賴於外部類範例被範例化。而通常的內部類需要在外部類範例化後才能 纔能範例化。
    64、什麼時候用assert?
    assertion (斷言)在軟件開發中是一種常用的偵錯方式,很多開發語言中都支援這種機制 機製。在實現中,assertion就是在程式中的一條語句,它對一個 boolean表達式進行檢查,一個正確程式必須保證這個boolean表達式的值爲true;如果該值爲false,說明程式已經處於不正確的狀態下,系統將給出警告或退出。一般來說,assertion用於保證程式最基本、關鍵的正確性。assertion檢查通常在開發和測試時開啓。爲了提高效能,在軟體發佈後,assertion檢查通常是關閉的。
    65、GC是什麼? 爲什麼要有GC?
    GC是垃圾收集的意思(Gabage Collection),記憶體處理是程式設計人員容易出現問題的地方,忘記或者錯誤的記憶體回收會導致程式或系統的不穩定甚至崩潰,Java提供的GC功能可以自動監測物件是否超過作用域從而達到自動回收記憶體的目的,Java語言沒有提供釋放已分配記憶體的顯示操作方法。
    66、short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?
    short s1 = 1; s1 = s1 + 1; (s1+1運算結果是int型,需要強制轉換型別) short s1 = 1; s1 += 1;(可以正確編譯)
    67、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
    Math.round(11.5)12 Math.round(-11.5)-11 round方法返回與參數最接近的長整數,參數加1/2後求其floor.
    68、Java有沒有goto?
    java中的保留字,現在沒有在java中使用。
    69、給我一個你最常見到的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 一般異常: IOException FileNotFoundException SqlException
    70、介面是否可繼承介面? 抽象類是否可實現(implements)介面? 抽象類是否可繼承實體類(concrete class)?
    介面可以繼承介面。抽象類可以實現(implements)介面,抽象類是否可繼承實體類,但前提是實體類必須有明確的建構函式。任何抽象類都是實際類Object的子類。
    71、abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?
    都不能
    72、陣列有沒有length()這個方法? String有沒有length()這個方法?
    陣列沒有length()這個方法,有length這個屬性 String有length()這個方法.
    73、構造器Constructor是否可被override?
    構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被過載Overloading。
    74、是否可以繼承String類?
    String類是final類故不可以繼承。
    75、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
    switch(expr1)中,expr1是一個整數表達式。因此傳遞給 switch 和 case 語句的參數應該是 int、 short、 char 或者 byte。long,string 都不能作用於swtich。
    76、try {}裡有一個return語句,那麼緊跟在這個try後的finally {}裡的code會不會被執行,什麼時候被執行,在return前還是後?
    會執行,在return前執行。
    77、程式設計題: 用最有效率的方法算出2乘以8等於幾?
    2 << 3
    78、兩個物件值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對?
    對,有相同的hash code。
    79、當一個物件被當作參數傳遞到一個方法後,此方法可改變這個物件的屬性,並可返回變化後的結果,那麼這裏到底是值傳遞還是參照傳遞?
    是參照傳遞
    基本數據型別:值 物件: 參照
    80、四種對談跟蹤技術
    Cookie
    Session Hidden url 重寫
    81、程式設計題: 寫一個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的。 一般認爲第一種形式要更加安全些
    83、Java中的例外處理機制 機製的簡單原理和應用。
    原理
    有錯直接轉到例外處理部分或向上拋出。 應用: JAVA的異常就是錯誤,有兩種一種是執行時,編碼可以不用捕捉。一種是一般異常,如果throws宣告瞭,必須進行處理。
    84、垃圾回收的優點和原理。並考慮2種回收機制 機製。
    優點: 程式設計師不用管記憶體,jvm自動完成,開發方便。執行優先非常低,程式無法清楚範例什麼時候被消毁。
    85、描述一下JVM載入class檔案的原理機制 機製?
    JVM中類的裝載是由ClassLoader和它的子類來實現的,Java ClassLoader 是一個重要的Java執行時系統元件。它負責在執行時查詢和裝入類檔案的類。
    86、char型變數中能不能存貯一箇中文漢字?爲什麼?
    能夠定義成爲一箇中文的,因爲java中以unicode編碼,一個char佔16個位元組,所以放一箇中文是沒問題的
    88、寫一個程式,從檔案(c:\test.txt)中查出字串」mobnet」出現的次數?
    java基礎類庫(io流,集合類,執行緒,Socket,AWT,Swing,sql)
    1、java中有幾種型別的流?JDK爲每種型別的流提供了一些抽象類以供繼承,請說出他們分別是哪些類?
    位元組流,字元流。位元組流繼承於InputStream OutputStream,字元流繼承於Reader Writer。在java.io包中還有許多其他的流,低層流與調層流,高層流主要是爲了提高效能和使用方便。
    2、啓動一個執行緒是用run()還是start()?
    啓動一個執行緒是呼叫start()方法,啓動執行緒並呼叫run方法。
    3、執行緒的基本概念、執行緒的基本狀態以及狀態之間的關係
    執行緒是進程內的併發,沒有自已記憶體空間,共用進程的,執行緒間的通訊成本較低。 Java中的執行緒有四種狀態分別是:執行、就緒、掛起、結束。
    4、多執行緒有幾種實現方法,都是什麼?同步有幾種實現方法,都是什麼? 用什麼關鍵字修飾同步方法? stop()和suspend()方法爲何不推薦使用?
    Extends Thread
    Implements Runnable 同步 Public synchronized aa() { } Public void cc(object aa) { synchronized(aa) {
    } }
    用synchoronized修飾同步方法。
    答:多執行緒有兩種實現方法,分別是繼承Thread類與實現Runnable介面 同步的實現方面有兩種,分別是synchronized,wait與notify 反對使用stop(),是因爲它不安全。它會解除由執行緒獲取的所有鎖定,而且如果物件處於一種不連貫狀態,那麼其他執行緒能在那種狀態下檢查和修改它們。結果很難檢查出真正的問題所在。suspend()方法容易發生死鎖。呼叫suspend()的時候,目標執行緒會停下來,但卻仍然持有在這之前獲得的鎖定。此時,其他任何執行緒都不能存取鎖定的資源,除非被"掛起"的執行緒恢復執行。對任何執行緒來說,如果它們想恢復目標執行緒,同時又試圖使用任何一個鎖定的資源,就會造成死鎖。所以不應該使用suspend(),而應在自己的Thread類中置入一個標誌,指出線程應該活動還是掛起。若標誌指出線程應該掛起,便用wait()命其進入等待狀態。若標誌指出線程應當恢復,則用一個notify()重新啓動執行緒。
    5、集合框架有什麼?
    Collection Map List set HashMap ArrayList linkedList HashSet TreeSet
    12、設計4個執行緒,其中兩個執行緒每次對j增加1,另外兩個執行緒對j每次減少1。寫出程式
    public class TestThread { private int j; public synchronized void inc() { j++; System.out.println(Thread.currentThread().getName() + 「-inc:」 + j); } public synchronized void dec() { j–; System.out.println(Thread.currentThread().getName() + 「-dec:」 + j);
    } public static void main(String[] args) { TestThread t=new TestThread(); for (int i = 0; i < 2; i++) { Thread inc=new Thread(new Inc(t)); Thread dec=new Thread(new Dec(t)); inc.start(); dec.start(); } } } class Inc implements Runnable { private TestThread obj; public Inc(TestThread obj) { this.obj=obj; } public void run() { // for (int i = 0; i < 100; i++) // { this.obj.inc(); // } } } class Dec implements Runnable { private TestThread obj; public Dec(TestThread obj) { this.obj=obj; } public void run() { // for (int i = 0; i < 100; i++) // { this.obj.dec(); // } } }
    13、同步和非同步有和異同,在什麼情況下分別使用他們?舉例說明。
    同步:上一段程式碼沒的完成,下一段必須等到上一段程式碼完成後纔可以執行。如買票排隊 非同步:上一段程式碼沒的完成,下一段不必等到上一段程式碼完成就可以執行。如手機發送簡訊。
    14、sleep() 和 wait() 有什麼區別?
    Sleep是指休眠給定的時間,當這個時間達到之後,執行緒會再次醒來。 Wait是等待狀態,多長時間不清楚,由另一個執行緒將其喚醒。
    15、當一個執行緒進入一個物件的一個synchronized方法後,其它執行緒是否可進入此物件的其它方法?
    如只其它方法是同步方法,不可以進入。如果不是可以進入。
    17、輸入輸出流的理解:
    在java使用流的機制 機製進行數據的傳送,從檔案到記憶體是輸入流,從記憶體到檔案是輸出流,輸入流可以通過 read讀取,輸出流以write或print寫入,對於流可以是分爲高層流和低層流,低層以一個位元組或字元爲單位進行處理,高層流以一批數據爲單位進行處理。 FileInputStream(System.in)至InputSteamReader至BufferReader OutputSteam(System.out)至printStream FileReader至BufferedReader FileWriter 至 PrintWriter或bufferWriter 分類: 位元組(二進制) FileInputStream(低層輸入流) FileOutputStream(低層輸出流) PrintStream(高層流) System.out.println() 字元(一個char) FileReader FileWriter
    18、請寫一個程式的讀寫,要求用兩種方式一種是低層流另一種是高層流。
    import java.io.FileWriter; import java.io.InputStream; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.FileReader; public class Untitled1 { public static void writeFileChar() throws Exception { FileWriter f = new FileWriter(「c:\aa.txt」); InputStream is = System.in; int c = is.read(); while (((char) c) != ‘x’) { f.write©; c = is.read(); } f.close(); is.close(); } public static void writeFileString() throws Exception { FileWriter f = new FileWriter(「c:\aa.txt」); BufferedWriter bwr=new BufferedWriter(f); BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); String c = bf.readLine(); while (!c.equals(「stop」)) { bwr.write(c+"\r\n"); c = bf.readLine(); } bwr.close(); f.close(); bf.close(); } public static void readFileChar() throws Exception { FileReader f = new FileReader(「c:\aa.txt」); int c = f.read(); while (c!=-1) {
    System.out.print((char)c); c=f.read(); } f.close(); } public static void readFileString() throws Exception { BufferedReader bf = new BufferedReader(new FileReader(「c:\aa.txt」)); String c = bf.readLine(); while (c!=null) { System.out.println©; c=bf.readLine(); } bf.close(); } public static void main(String[] args) throws Exception { readFileString(); } }
    19、如何列出某個目錄下的所有檔案
    Import java.io.File; File f=new File(「C:\」); File[] f1=f.listFiles(); for(int i=0;i<f1.length;i++) { if(f1[i].isDirectory()) { System.out.println(「dirctory is」+f1[i].getName()); } else { System.out.println(「file is」+f1[i].getName()); } } }
  14. 如何列出某個目錄下的所有子目錄

public static void main(String[] args) throws Exception
{ getFile(new File(「C:\entityBean」),"\t"); } public static void getFile(File f,String sem) throws Exception { System.out.println(sem+f.getName()); File fl[]=f.listFiles(); if(fl.length>=1) { for(int i=0;i<fl.length;i++) { if(fl[i].isDirectory()) { getFile(fl[i],sem+"\t"); } } } }
2. 判斷一個檔案或目錄是否存在

File f=new File(「C:\entityBean」); if(f.exists()) { System.out.println(「exist」); } else { System.out.println(「not exist」); }
Socket
20、用socket通訊寫出用戶端和伺服器端的通訊,要求客戶發送數據後能夠回顯相同的數據?
public class ServerSocket_1 { public static void main(String[] args) throws Exception { ServerSocket ss = new ServerSocket(4001); Socket s = ss.accept(); BufferedReader br = new BufferedReader(new InputStreamReader(s. getInputStream()));
PrintStream ps=new PrintStream(s.getOutputStream()); String temp = br.readLine(); while (true) { System.out.println(「用戶端:」+temp); ps.println(temp); if (temp.equals(「stop」)) { break; } temp = br.readLine(); } br.close(); ps.close(); ss.close(); } } public class ClientSocket { public static void main(String[] args) throws Exception { Socket s = new Socket(「localhost」, 4001); PrintStream ps = new PrintStream(s.getOutputStream()); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedReader br_server = new BufferedReader(new InputStreamReader(s. getInputStream())); String temp = br.readLine(); while (true) { ps.println(temp); temp = br_server.readLine(); System.out.println(「伺服器的資訊:」 + temp); if (temp.equals(「stop」)) { break; } temp = br.readLine(); } s.close(); br.close(); br_server.close();
} }
23、介紹JAVA中的Collection FrameWork(包括如何寫自己的數據結構)?
答:Collection FrameWork如下: Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├HashMap └WeakHashMap Collection是最基本的集合介面,一個Collection代表一組Object,即Collection的元素(Elements) Map提供key到value的對映
24、請說出你所知道的執行緒同步的方法
HashTable中的put,get,remove
Vector的相關方法。
jdbc數據存取技術
1、JDBC如何做事務處理?
Con.setAutoCommit(false) Con.commit(); Con.rollback();
2、寫出幾個在Jdbc中常用的介面
preparedStatement,callableStatement,statement,Connection,ResultSet
3、簡述你對Statement,PreparedStatement,CallableStatement的理解
statement用於執行靜態 SQL 語句並返回它所生成結果的物件,在執行時確定sql。 PreparedStatement表示預編譯的 SQL 語句的物件。 SQL 語句被預編譯並且儲存在 PreparedStatement 物件中。然後可以使用此物件高效地多次執行該語句,可以傳參數,在得到PreparedStatement物件時確定sql. CallableStatement用於執行 SQL 儲存過程的介面。如果有輸出參數要註冊說明是輸出參數。
4、Java中存取數據庫的步驟?
1連線Oracle數據庫 Class.forName(「oracle.jdbc.driver.OracleDriver」); Connection con=DriverManager.openConnection(「jdbc:oracle:thin:@localhost:1521:DataBase 」,」 UserName」,」Password 」)

  1. 利用JDBC檢索出表中的數據

Class.forName(「」); Connection con=DriverManager.openConnection(「 」,」 」,」 」) preparedStatment ps=Con.preparedStatment(「select * from [table]」); ResultSet rs=ps.executeQuery(); While(rs.next) { Rs.getString(1) 或rs.getString(「欄位名」) }
5、JDBC中的核心類及其作用是什麼?
DriverManager
Class.forName(); DriverManager.openConnection(「」,」sa」,」」) Connection PreparedStatement(Statement) ResultSet rs=executeQuery() dql
While(rs.next())
{ } executeUpdate() dml ddl
6、執行儲存過程用那一個類,如何操作輸出參數?(操作)
CallableStatement c=con. prepareCall ("{call getCustomerName(?,?)}"); c.setString(1,「1」); c.registerOutParameter(2,java.sql.Types.VARCHAR); c.execute(); c.getString(2);
8、可能會讓你寫一段Jdbc連Oracle的程式.
Class.forName(「oracle.jdbc.driver.OracleDriver」); Connection con=DriverManager.getConnection(「jdbc:oracle:thin:@localhost:1521:accp」,「system」,「system」);
9、Class.forName的作用?爲什麼要用?
註冊一個數據庫驅動,將驅動載入到當前的JVM中。
10、Jdo是什麼?
JDO是Java物件持久化的新的規範,爲java data object的簡稱,也是一個用於存取某種數據倉庫中的物件的標準化API。JDO提供了透明的物件儲存,因此對開發人員來說,儲存數據物件完全不需要額外的程式碼(如JDBC API的使用)。這些繁瑣的例行工作已經轉移到JDO產品提供商身上,使開發人員解脫出來,從而集中時間和精力在業務邏輯上。另外,JDO很靈活,因爲它可以在任何數據底層上執行。JDBC只是面向關係數據庫(RDBMS)JDO更通用,提供到任何數據底層的儲存功能,比如關係數據庫、檔案、XML以及物件數據庫(ODBMS)等等,使得應用可移植性更強。(o/rMapping工具 集合處理)
11、在ORACLE大數據量下的分頁解決方法。一般用擷取ID方法,還有是三層巢狀方法
create or replace package myPack is type c_type is ref cursor;
procedure getPage(v_sql varchar2,pageSize number,pageIndex number,c out c_type); end; create or replace package body myPack is procedure getPage(v_sql varchar2,pageSize number,pageIndex number,c out c_type) is pageTotal int:=0; pageFirstRow int:=0; pageLastRow int:=0; rowTotal int:=0; begin execute immediate ‘select count(*) from (’||v_sql||’)’ into rowTotal; pageTotal:=ceil(rowTotal/pageSize); if(pageIndex<1) then raise_application_error(-20001,‘頁數不能小於1’); end if; if(pageIndex>pageTotal) then raise_application_error(-20001,‘頁數太大,不能讀取’); end if; pageFirstRow:=(pageIndex-1)pageIndex+1; pageLastRow:=pageFirstRow+pageSize; open c for ’ select * from ‘||v_sql||’ where rownum<’|| pageLastRow||‘minus select * from ‘||v_sql ||’ where rownum<’||pageFirstRow; end; end;
Web程式設計Jsp&Servlet技術
1、簡單說說tomcat的設定?
JAVA_HOME=JDK的根目錄
CATALINA_HOME=tomcat的根目錄 CATALINA-HOME\conf\server.xml:可以設定tomcat的埠,可以設定tomcat中下連線池。 CATALINA-HOME\common\lib:存放公用的類包
在My eclipse中如何設定tomcat 在eclipse中,選擇windows->preference->MyEclipse->ApplicationServer->Tomcat 選擇Tomcat 的安裝目錄,並選擇TomCat所需的jdk,選擇enable,確定即可。
2、JSP中動態INCLUDE與靜態INCLUDE的區別?
jsp:include:在執行時呼叫另一個頁面,變數是可以重複的。 <%@include file=」」%>:在轉譯時合在一起,會成爲同一個類,變數不可以重複。
3、forward和redirect的區別?
forward: 轉發,在下一個頁面中,request保留上一個頁面中的request的所有值 redirect: 跳轉,不傳遞request物件。
4、Servlet的體系結構是什麼?
Servlet
GenericServlet HttpServlet 自定義
5、如何實現一個自定義的servlet?
extends HttpServlet 並覆蓋doPost或doGet方法
在web.xml中進行部署
6、Servlet的生命週期是什麼?
Init
多次執行doGet或doPost destroy
7、jsp就是一個servlet是否正確?

8、請羅列jsp中的指令碼、指令及動作?
指令碼
<%%> <%=%> <%!%> <%----%>
指令
<%@page contentType=」text/html;charset=utf-8」 language=」java」 import=」」%> <%@include file=」」%> <%@taglib uri=」」 prefix=」」%> 動作: <jsp:useBean class=」」 id=」」 scope=」」> 在scope中如果沒有範例化一個物件,如果有直接用以前的。 <jsp:getProperty name=」」 property=」」> 向一個bean中設定屬性值
<jsp:forward > jsp頁的轉發
<jsp:include page=」」> 匯入一個jsp頁面
9、JSP的內建物件及方法
Request request表示HttpServletRequest物件。取用戶端表單域資訊及cookie, header, 和session response response表示HttpServletResponse物件,對用戶端的響應返迴文字、寫cookies。 out out 向用戶端列印html文字. pageContext :當前jsp頁面的上下文環境,可以得到session、request、application等內建物件,在自定義標籤中使用的很多。 session session表示一個請求的javax.servlet.http.HttpSession物件。Session一個使用者多個頁面共用同一變數。 application applicaton 表示一個javax.servle.ServletContext物件。存放容器級的變數。 config config表示一個javax.servlet.ServletConfig物件。該物件用於存取servlet範例的初始化參數。 page page表示從該頁面產生的一個servlet範例 exception:異常,當iserrorpage=true
10、說出在JSP頁面裡是怎麼分頁的?
頁面需要儲存以下參數:(數據庫的分頁及比較) 總行數:根據sql語句得到總行數 每頁顯示行數:設定值 當前頁數:請求參數
頁面根據當前頁數和每頁行數計算出當前頁第一行行數,定位結果集到此行,對
結果集取出每頁顯示行數的行即可。 數據庫: Sqlserver:
SELECT TOP 頁大小 *
FROM TestTable
WHERE (ID NOT IN
(SELECT TOP 頁大小
(頁數-1) id FROM 表 ORDER BY id))
ORDER BY ID
–pageSize=5 頁大小 --pageIndex=2 所要的頁 --如果有主鍵可以,沒以及鍵不行 select top 5 * from aa where a1 not in (select top 5 a1 from aa order by a1) order by a1; oracle: select * from ‘||v_sql||’ where rownum<’|| pageLastRow||‘minus select * from ‘||v_sql ||’ where rownum<’||pageFirstRow;
Session
先取出數據中的所有資訊封裝到物件並儲存在session中,轉發到jsp頁面做如下處理。

<% List l=(List)session.getAttribute(「as」); //一頁顯示多少行 int pageSize=3; //總頁數 int pageCount=0; int currentPage=1; if(l!=null && l.size()>0)
{ pageCount=(l.size()/pageSize)+(l.size()%pageSize==0?0:1); if(request.getParameter(「page」)!=null) { currentPage=Integer.parseInt(request.getParameter(「page」)); } if(currentPage<1) { currentPage=1; } if(currentPage>pageCount) { currentPage=pageCount; } for (int i = (currentPage-1)*pageSize; i <(currentPage-1)*pageSize+pageSize; i++) { if(i>=l.size()) { break; } Aa aa=(Aa)l.get(i); %> <% } } %>
a1 a2
<%=aa.getA1()%> <%=aa.getA2()%>

<% if(currentPage!=1) { %> 首頁   上一頁   <% } if(currentPage!=pageCount) { %> 下一頁   最後一頁   <% } %> 11、include的兩種實現方式的區別? <@include file>:在將jsp生成servlet類前將兩個檔案和在一起,生成一個java類,一起執行的。所以是一家子,當中的變數名不能重名。 :是兩個類,是一個呼叫關係,在執行時動態的呼叫,不是一家子,可以重複變數。 12、jsp頁面中兩種跳轉方式分別是什麼?有什麼區別? 轉發: 保留上次的request actionMapping.findForWard(「」); pageContext.forward(); request.getRequestDispacher(「a.jsp」).forward(request,response) 跳轉:不保留上次的request Response.setRedirect(「」) 13、描述JSP和Servlet的區別、共同點、各自應用的範圍 Jsp主要在於頁面的顯示動態生成頁面,可以與html標記一起使用,其還是要生成爲一個servlet。 Servlet:主要是控制的處理,如呼叫業務層,跳轉不同的jsp頁面。 Mvc: Jsp:v Servlet:c 14、在JSP中如何讀取用戶端的請求,如何確定某個Jsp檔案的真實路徑? Request.getparameter(「」) <%=application.getRealPath("aa.jsp") %> 15、描述Cookie和Session的作用,區別和各自的應用範圍,Session工作原理。 Cookie:主要用在儲存用戶端,其值在用戶端與伺服器端之間傳送,不安全,儲存的數據量有限。 Session:儲存在伺服器端,每一個session在伺服器端有一個sessionID作一個標識。儲存的數據量大,安全性高。佔用伺服器端的記憶體資源。 16、說明Jsp中errorPage的作用,應用範圍。 正常頁面中 %@page erropage=」error.jsp」% 錯誤頁面 <%@page iserrorpage=」true」%> 有一內建物件:exception 17、介紹在Jsp中如何使用JavaBeans <% New 類(); %> 19、簡單介紹JSP的標記庫 做一個標記處理類 extends TagSupport 通過tld說明標記處理的類的字首及後綴 在web.xml中說明tld檔案 在jsp頁面是參照tld<%@taglib uri=」」 prefix=」」%> 20、Servlet中的核心類有那些,各有什麼特點? ServletContext:容器,放置全域性變數 setAtribute() getAttribute() ServletConfig:一個servlet的設定 getInitParameter(」名稱」) HttpServletRequest:封裝的所有的請求 getParameterValue(」名稱」) getParameterValues(」稱」) getSession(); getAttribute(」 名稱」); getRequestDispatch(」a.jsp」).forward(request,response) HttpServletResponse:響應 getOut(); sendRedirect(」」) HttpSession:一個使用者多個頁面共用同一變數 setAttribute(」」,」」) 21、Servlet中重要的包有那些,有什麼區別? javax.servlet.*;javax.servlet.http.*; 22、說出Servlet的生命週期,並說出Servlet和CGI的區別? Servlet被伺服器範例化後,容器執行其init方法,請求到達時執行其service方法,service方法自動派遣執行與請求對應的doXXX方法(doGet,doPost)等,當伺服器決定將範例銷燬的時候呼叫其destroy方法。 與cgi的區別在於servlet處理伺服器進程中,它通過多執行緒方式執行其service方法,一個範例可以服務於多個請求,並且其範例一般不會銷燬,而CGI對每個請求都產生新的進程,服務完成後就銷燬,所以效率上低於servlet。 23、什麼情況下呼叫doGet()和doPost()? Jsp頁面中的form標籤裡的method屬性爲get時呼叫doGet(),爲post時呼叫doPost()。 25、如何現實servlet的單執行緒模式 在doGet及doPost方法前加入synchoronized JSP: <%@ page isThreadSafe="true"%> 27、Request物件的主要方法: setAttribute(String name,Object):設定名字爲name的request的參數值 getAttribute(String name):返回由name指定的屬性值 getAttributeNames():返回request物件所有屬性的名字集合,結果是一個列舉的範例 getCookies():返回用戶端的所有Cookie物件,結果是一個Cookie陣列 getCharacterEncoding():返回請求中的字元編碼方式 getContentLength():返回請求的Body的長度 範例 getInputStream():返回請求的輸入流,用於獲得請求中的數據 getMethod():獲得用戶端向伺服器端傳送數據的方法 getParameter(String name):獲得用戶端傳送給伺服器端的有name指定的參數值 getParameterNames():獲得用戶端傳送給伺服器端的所有參數的名字,結果是一個列舉的範例 getParameterValues(String name):獲得有name指定的參數的所有值 getProtocol():獲取用戶端向伺服器端傳送數據所依據的協定名稱 getQueryString():獲得查詢字串 getRequestURI():獲取發出請求字串的用戶端地址 getRemoteAddr():獲取用戶端的IP地址 getRemoteHost():獲取用戶端的名字 getSession([Boolean create]):返回和請求相關Session getServerName():獲取伺服器的名字 getServletPath():獲取用戶端所請求的指令碼檔案的路徑 getServerPort():獲取伺服器的埠號 removeAttribute(String name):刪除請求中的一個屬性 28、我們在web應用開發過程中經常遇到輸出某種編碼的字元,如iso8859-1等,如何輸出一個某種編碼的字串? Public String translate (String str) { String tempStr = ""; try { tempStr = new String(str.getBytes("ISO-8859-1"), "GBK"); tempStr = tempStr.trim(); } catch (Exception e) { System.err.println(e.getMessage()); } return tempStr; } 30、Servlet執行時一般實現哪幾個方法? public void init(ServletConfig config) public ServletConfig getServletConfig() public String getServletInfo() public void service(ServletRequest request,ServletResponse response) public void destroy() 5 Hibernate持久層技術 1、在myeclipse加入hibernate環境的全過程是什麼? Db-browers加入設定連線 新建工程 加入hibernate環境,指定*.hbm.xml及HibernateSessionFactory檔案所在的位置 2、hibernate的核心組態檔是什麼及其作用? Hibernate.cfg.xml:數據庫連線、指定相關的對映檔案 *.hbm.xml:具體的o/r mapping說明 3、hibernate的核心類是什麼,它們的相互關係是什麼?重要的方法是什麼? Configuration SessionFactory Session如下方法 Save load Update Delete Query q=CreateQuery(「from Customer where customerName=:customerName」) beginTransaction close Transaction Commit() 4、關聯: one-to-many inverse:主控方,外來鍵的關係有誰控制 inverse=false 是主控方,外來鍵是由它控制的 inverse=true 是被控方,外來鍵與它沒關係 要想實現主控方的控制必須將被控方作爲主控方的屬性 cascade:級聯 主表增從表增 主表修從表修 主表刪從表刪 lazy:延遲 lazy=false:一下將所有的內容取出,不延時(常用) lazy=true:取出部分內容,其餘內容動態去取 通過get可以取出對方的所有內容 5、hibernate中的one-to-many或many-to-one中常用的方式是什麼? 主控方在many這邊,不及連刪除 6、Criteria 的作用? Criteria c=session.createCriteria(Customer.class); //設定條件 c.add(Expression.ge(「欄位名」,」值物件」)) ge:>= gt:> le:<= lt:< eq:= //排序 c.addOrder(Order.asc(「欄位名」)) //分頁 c.setFirstResult(1)//從第2行開始提取 c.setMaxResults(5)//返回5行 7、DetachedCriteria的作用? 產生時不需要session DetachedCriteria dc= DetachedCriteria.forClass(Customer.class) Criteria c=Dc.getExecutableCriteria(session) 8、Query 1 個或多個屬性查詢: Query query=session.createQuery(」select customername,customerid from Customer」) List l=query.list(); For(int i=0;i

Node TextNode Element
Arr NodeList Document
5、如何將Dom物件寫入到檔案中?
TransformerFactory
Transformer通過如下方法進行處理 Transformer(DOMSource(Document d),ResultStream(OutputStream o))
6、用jdom解析xml檔案時如何解決中文問題?
類檔案是utf-8,xml檔案頭也應是utf-8 如<?xml version="1.0" encoding="UTF-8" ?>
7、XML文件定義有幾種形式?它們之間有何本質區別?解析XML文件有哪幾種方式?
a: 兩種形式 dtd schema, b: 本質區別:schema本身是xml的,可以被XML解析器解析(這也是從DTD上發展schema的根本目的), c:有DOM,SAX,STAX等 DOM:處理大型檔案時其效能下降的非常厲害。這個問題是由DOM的樹結構所造成的,這種結構佔用的記憶體較多,而且DOM必須在解析檔案之前把整個文件裝入記憶體,適合對XML的隨機存取 SAX:不現於DOM,SAX是事件驅動型的XML解析方式。它順序讀取XML檔案,不需要一次全部裝載整個檔案。當遇到像檔案開頭,文件結束,或者標籤開頭與標籤結束時,它會觸發一個事件,使用者通過在其回撥事件中寫入處理程式碼來處理XML檔案,適合對XML的順序存取 STAX:Streaming API for XML (StAX)
8、標準建模語言UML中的各種圖?
靜態圖 用例圖、類圖、物件圖、構件、部署, 動態圖(行爲圖) 活動圖,共同作業圖,狀態、時序
9、BS與CS的聯繫與區別。
C/S是Client/Server的縮寫。伺服器通常採用高效能的PC、工作站或小型機,並採用
大型數據庫系統,如Oracle、Sybase、Informix或 SQL Server。用戶端需要安裝專用的用戶端軟體。 B/S是Brower/Server的縮寫,客戶機上只要安裝一個瀏覽器(Browser),如Netscape Navigator或Internet Explorer,伺服器安裝Oracle、Sybase、Informix或 SQL Server等數據庫。在這種結構下,用戶介面完全通過WWW瀏覽器實現,一部分事務邏輯在前端實現,但是主要事務邏輯在伺服器端實現。瀏覽器通過Web Server 同數據庫進行數據互動。 C/S 與 B/S 區別: 1.硬體環境不同: C/S 一般建立在專用的網路上, 小範圍裡的網路環境, 區域網之間再通過專門伺服器提供連線和數據交換服務. B/S 建立在廣域網之上的, 不必是專門的網路硬體環境,例與電話上網, 租用裝置. 資訊自己管理. 有比C/S更強的適應範圍, 一般只要有操作系統和瀏覽器就行 2.對安全要求不同 C/S 一般面向相對固定的使用者羣, 對資訊保安的控制能力很強. 一般高度機密的資訊系統採用C/S 結構適宜. 可以通過B/S發佈部分可公開資訊. B/S 建立在廣域網之上, 對安全的控制能力相對弱, 可能面向不可知的使用者。 3.對程式架構不同 C/S 程式可以更加註 加注重流程, 可以對許可權多層次校驗, 對系統執行速度可以較少考慮. B/S 對安全以及存取速度的多重的考慮, 建立在需要更加優化的基礎之上. 比C/S有更高的要求 B/S結構的程式架構是發展的趨勢, 從MS的.Net系列的BizTalk 2000 Exchange 2000等, 全面支援網路的構件搭建的系統. SUN 和IBM推的JavaBean 構件技術等,使 B/S更加成熟. 4.軟體重用不同 C/S 程式可以不可避免的整體性考慮, 構件的重用性不如在B/S要求下的構件的重用性好. B/S 對的多重結構,要求構件相對獨立的功能. 能夠相對較好的重用.就入買來的餐桌可以再利用,而不是做在牆上的石頭桌子 5.系統維護不同 C/S 程式由於整體性, 必須整體考察, 處理出現的問題以及系統升級. 升級難. 可能是再做一個全新的系統 B/S 構件組成,方面構件個別的更換,實現系統的無縫升級. 系統維護開銷減到最小.使用者從網上自己下載安裝就可以實現升級. 6.處理問題不同 C/S 程式可以處理使用者面固定, 並且在相同區域, 安全要求高需求, 與操作系統相關. 應該都是相同的系統 B/S 建立在廣域網上, 面向不同的使用者羣, 分散地域, 這是C/S無法作到的. 與操作系統平臺關係最小. 7.使用者介面不同
C/S 多是建立的Window平臺上,表現方法有限,對程式設計師普遍要求較高
B/S 建立在瀏覽器上, 有更加豐富和生動的表現方式與使用者交流. 並且大部分難度減低,減低開發成本. 8.資訊流不同
C/S 程式一般是典型的中央集權的機械式處理, 互動性相對低
B/S 資訊流向可變化, B-B B-C B-G等資訊、流向的變化, 更像交易中心。
10、Uml的概念是什麼?主要的工具是什麼
Uml:統一建模語言
工具:Rational Rose
11、Uml的概念中的九大圖形是什麼?最重的三個圖是什麼?各有什麼特點?
類圖 繼承 關聯:(1…n n…1 n…n) 依賴 實現介面 聚集 組成 類圖的生命週期(開發的所有階段都使用) 總體設計 詳細設計 開發:以類圖進行開發 測試 Use-case圖 關係 用例與用例 包含(include):必須呼叫 擴充套件(extends):可以呼叫也可以不呼叫 角色與角色的關係 泛化 用例與角色的關係: 用例與角色:通知 角色與用例:呼叫 元素 用例 角色 系統邊界 Use-case圖的生命週期 需求 整體設計 測試(單元測試、整合測試、系統測試、使用者驗收) 時序 元素 橫座標:物件 縱座標: 時間
作用 找類 找方法 驗證系統的正確 生命週期 詳細設計 活動(流程圖) 作用 分析業務 構件圖 作用:說明元件與元件之間的關係,依賴關係 部署 作用:說明安裝軟體的主機之間的關係,系統執行時的效能的主要影響者。 共同作業 物件與物件之間的呼叫共同作業。 狀態 一個物件狀態在不同的動作下的變化。 物件 說明物件
13、在類圖中如何找類?
找名詞