JAVA面試題集模板.doc_第1頁
JAVA面試題集模板.doc_第2頁
JAVA面試題集模板.doc_第3頁
JAVA面試題集模板.doc_第4頁
JAVA面試題集模板.doc_第5頁
已閱讀5頁,還剩76頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

JAVA面試題集JAVA面試題集 基礎知識:1.C+或Java中的異常處理機制的簡單原理和應用。 當JAVA程序違反了JAVA的語義規則時,JAVA虛擬機就會將發生的錯誤表示為一個異常。違反語義規則包括2種情況。一種是JAVA類庫內置的語義檢查。例如數組下標越界,會引發IndexOutOfBoundsException;訪問null的對象時會引發NullPointerException。另一種情況就是JAVA允許程序員擴展這種語義檢查,程序員可以創建自己的異常,并自由選擇在何時用throw關鍵字引發異常。所有的異常都是java.lang.Thowable的子類。2. Java的接口和C+的虛類的相同和不同處。 由于Java不支持多繼承,而有可能某個類或對象要使用分別在幾個類或對象里面的方法或屬性,現有的單繼承機制就不能滿足要求。與繼承相比,接口有更高的靈活性,因為接口中沒有任何實現代碼。當一個類實現了接口以后,該類要實現接口里面所有的方法和屬性,并且接口里面的屬性在默認狀態下面都是public static,所有方法默認情況下是public.一個類可以實現多個接口。3. 垃圾回收的優點和原理。并考慮2種回收機制。 Java語言中一個顯著的特點就是引入了垃圾回收機制,使c+程序員最頭疼的內存管理的問題迎刃而解,它使得Java程序員在編寫程序的時候不再需要考慮內存管理。由于有個垃圾回收機制,Java中的對象不再有作用域的概念,只有對象的引用才有作用域。垃圾回收可以有效的防止內存泄露,有效的使用可以使用的內存。垃圾回收器通常是作為一個單獨的低級別的線程運行,不可預知的情況下對內存堆中已經死亡的或者長時間沒有使用的對象進行清楚和回收,程序員不能實時的調用垃圾回收器對某個對象或所有對象進行垃圾回收?;厥諜C制有分代復制垃圾回收和標記垃圾回收,增量垃圾回收。4. 請說出你所知道的線程同步的方法。 wait():使一個線程處于等待狀態,并且釋放所持有的對象的lock。sleep():使一個正在運行的線程處于睡眠狀態,是一個靜態方法,調用此方法要捕捉InterruptedException異常。notify():喚醒一個處于等待狀態的線程,注意的是在調用此方法的時候,并不能確切的喚醒某一個等待狀態的線程,而是由JVM確定喚醒哪個線程,而且不是按優先級。Allnotity():喚醒所有處入等待狀態的線程,注意并不是給所有喚醒線程一個對象的鎖,而是讓它們競爭。5. 請講一講析構函數和虛函數的用法和作用。6. Error與Exception有什么區別?Error表示系統級的錯誤和程序不必處理的異常,Exception表示需要捕捉或者需要程序進行處理的異常。7. 在java中一個類被聲明為final類型,表示了什么意思? 表示該類不能被繼承,是頂級類。8. 描述一下你最常用的編程風格。 9. heap和stack有什么區別。 棧是一種線形集合,其添加和刪除元素的操作應在同一段完成。棧按照后進先出的方式進行處理。堆是棧的一個組成元素10. 如果系統要使用超大整數(超過long長度范圍),請你設計一個數據結構來存儲這種超大型數字以及設計一種算法來實現超大整數加法運算)。public class BigInt()int ArrOne = new ArrOne1000;String intString=;public int Arr(String s)intString = s;for(int i=0;i 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? Gotojava中的保留字,現在沒有在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、繼承時候類的執行順序問題,一般都是選擇題,問你將會打印出什么? 答:父類: 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 4、內部類的實現方式? 答:示例代碼如下: package test; public class OuterClass private class InterClass public InterClass() 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 再一個例題: public class OuterClass private double d1 = 1.0; /insert code here You need to insert an inner class declaration at line 3. Which two inner class declarations are valid?(Choose two.) A. class InnerOne public static double methoda() return d1; B. public class InnerOne static double methoda() return d1; C. private class InnerOne double methoda() return d1; D. static class InnerOne protected double methoda() return d1; E. abstract class InnerOne public abstract double methoda(); 說明如下: 一.靜態內部類可以有靜態成員,而非靜態內部類則不能有靜態成員。 故 A、B 錯 二.靜態內部類的非靜態成員可以訪問外部類的靜態變量,而不可訪問外部類的非靜態變量;return d1 出錯。 故 D 錯 三.非靜態內部類的非靜態成員可以訪問外部類的非靜態變量。 故 C 正確 四.答案為C、E 5、Java 的通信編程,編程題(或問答),用JAVA SOCKET編程,讀服務器幾個字符,再寫入本地顯示? 答:Server端程序: package test; import .*; import java.io.*; public class Server private ServerSocket ss; private Socket socket; private BufferedReader in; private PrintWriter out; public Server() try ss=new ServerSocket(10000); while(true) socket = ss.accept(); String RemoteIP = socket.getInetAddress().getHostAddress(); String RemotePort = :+socket.getLocalPort(); System.out.println(A client come in!IP:+RemoteIP+RemotePort); in = new BufferedReader(new InputStreamReader(socket.getInputStream(); String line = in.readLine(); System.out.println(Cleint send is : + line); out = new PrintWriter(socket.getOutputStream(),true); out.println(Your Message Received!); out.close(); in.close(); socket.close(); catch (IOException e) out.println(wrong); public static void main(String args) new Server(); ; Client端程序: package test; import java.io.*; import .*; public class Client Socket socket; BufferedReader in; PrintWriter out; public Client() try System.out.println(Try to Connect to :10000); socket = new Socket(,10000); System.out.println(The Server Connected!); System.out.println(Please enter some Character:); BufferedReader line = new BufferedReader(new InputStreamReader(System.in); out = new PrintWriter(socket.getOutputStream(),true); out.println(line.readLine(); in = new BufferedReader(new InputStreamReader(socket.getInputStream(); System.out.println(in.readLine(); out.close(); in.close(); socket.close(); catch(IOException e) out.println(Wrong); public static void main(String args) new Client(); ; 6、用JAVA實現一種排序,JAVA類實現序列化的方法(二種)? 如在COLLECTION框架中,實現比較要實現什么樣的接口? 答:用插入法進行排序代碼如下 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;inum ;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=(Integer)al.get(MaxSize-1).intValue() al.add(MaxSize,tempInt); MaxSize+; System.out.println(al.toString(); else for (int j=0;j=tempIValue() al.add(j,tempInt); MaxSize+; System.out.println(al.toString(); break; System.out.println(The ArrayList Sort After:); for(int i=0;ial.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 接口 7、編程:編寫一個截取字符串的函數,輸入為一個字符串和字節數,輸出為按字節截取的字符串。 但是要保證漢字不被截半個,如我ABC4,應該截為我AB,輸入我ABC漢DEF,6,應該輸出為我ABC而不是我ABC+漢的半個。 答:代碼如下: package test; class SplitString String SplitStr; int SplitByte; public SplitString(String str,int bytes) SplitStr=str; SplitByte=bytes; System.out.println(The String is:+SplitStr+;SplitBytes=+SplitByte); public void SplitIt() int loopCount; loopCount=(SplitStr.length()%SplitByte=0)?(SplitStr.length()/SplitByte):(SplitStr.length()/Split Byte+1); System.out.println(Will Split into +loopCount); for (int i=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 void main(String args) SplitString ss = new SplitString(test中dd文dsaf中男大3443n中國43中國人 0ewldfls=103,4); ss.SplitIt(); 8、JAVA多線程編程。 用JAVA寫一個多線程程序,如寫四個線程,二個加1,二個對一個變量減一,輸出。 希望大家補上,謝謝 9、STRING與STRINGBUFFER的區別。 答:STRING的長度是不可變的,STRINGBUFFER的長度是可變的。如果你對字符串中的內容經常進行操作,特別是內容要修改時,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法 Jsp方面 1、jsp有哪些內置對象?作用分別是什么? 答:JSP共有以下9種基本內置組件(可與ASP的6種內部組件相對應): request 用戶端請求,此請求會包含來自GET/POST請求的參數 response 網頁傳回用戶端的回應 pageContext 網頁的屬性是在這里管理 session 與請求有關的會話期 application servlet 正在執行的內容 out 用來傳送回應的輸出 config servlet的構架部件 page JSP網頁本身 exception 針對錯誤網頁,未捕捉的例外 2、jsp有哪些動作?作用分別是什么? 答:JSP共有以下6種基本動作 jsp:include:在頁面被請求的時候引入一個文件。 jsp:useBean:尋找或者實例化一個JavaBean。 jsp:setProperty:設置JavaBean的屬性。 jsp:getProperty:輸出某個JavaBean的屬性。 jsp:forward:把請求轉到一個新的頁面。 jsp:plugin:根據瀏覽器類型為Java插件生成OBJECT或EMBED標記 3、JSP中動態INCLUDE與靜態INCLUDE的區別? 答:動態INCLUDE用jsp:include動作實現 它總是會檢查所含文件中的變化,適合用于包含動態頁面,并且可以帶參數 靜態INCLUDE用include偽碼實現,定不會檢查所含文件的變化,適用于包含靜態頁面 4、兩種跳轉方式分別是什么?有什么區別? 答:有兩種,分別為: 前者頁面不會轉向include所指的頁面,只是顯示該頁的結果,主頁面還是原來的頁面。執行完后還會回來,相當于函數調用。并且可以帶參數.后者完全轉向新頁面,不會再回來。相當于go to 語句。 Servlet方面 1、說一說Servlet的生命周期? 答:servlet有良好的生存期的定義,包括加載和實例化、初始化、處理請求以及服務結束。這個生存期由javax.servlet.Servlet接口的init,service和destroy方法表達。 2、Servlet版本間(忘了問的是哪兩個版本了)的不同? 希望大家補上,謝謝 3、JAVA SERVLE

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論