1. 程式人生 > >Java常見面試題(基礎)

Java常見面試題(基礎)

明天夏天準備去面試一下關於人工智慧或者軟體開發的暑期實習生,所以 提前準備一下,在網上看到一些很好的面試題,所以轉載方便日後觀看。


轉自此處  

 

                    JAVA常見面試題

 

1》:Java中的異常處理機制的簡單原理和應用

簡單原理:每當產生異常之後,如果沒有程式進行相應的處理,則程式出現中斷的現象,那麼,此時實際上一旦產生一個異常之後,JVM會丟擲一個異常類的例項物件,如果此時使用了try語句進行捕獲,則可以進行異常處理,如果沒有的話,則交給JVM進行處理,當try語句捕獲到了異常之後,會與catch中的異常類進行匹配,如果匹配成功,則使用此catch語句進行處理。

       應用:簡單的引用,就是在所有有throws關鍵字的地方加入try…catch

如果按照一個標準做法的話,try、catch、finally、throw、throws關鍵字應該一起使用。

 

2》:垃圾回收的優點和原理。並考慮兩種回收機制。

優點和原理:將無用的物件空間進行釋放。

兩種回收:自動回收,手工呼叫System.gc()方法。呼叫System.gc()方法實際上相當於呼叫了RunTime.getRumTime().gc()方法。

 

3》:Error和Exception有什麼區別?

Error:表示是由JVM進行處理的,是JVM出錯。

Exception:是可以由程式進行處理的。使用try…catch進行處理.

 

4》:談談final,finally,finallize的區別.

Final是定義常量、方法、和類的,宣告的方法不能被覆寫、宣告的類不能被繼承。

Finally是異常的統一出口。

Finallize是垃圾回收前的收尾工作。是Object物件定義的。

 

5》:Anonymous Inner Class(匿名內部類)是否可以extends(繼承)其他類,是否可以implements(實現)Interface(介面)

允許繼承或實現,因為匿名內部類就是在抽象類和介面的基礎上發展起來的。

 

6》:Static Nested Class和Inner Class的不同。

使用static宣告的內部類就是外部類,可以通過外部類.內部類直接訪問。

普通的內部類是不能被外部所直接訪問的。需要通過外部類例項再找到內部類例項。

 

7》:HashMap和HashTable的區別

|-HashMap:是jdk1.2之後推出的,是新的類。

                   採用非同步處理方式,效能較高,但並非執行緒安全。

                   允許設定為null

|-HashTable:是Jdk1.0之後推出的,是舊的類

                   採用同步處理方式,效能較低,但是屬於執行緒安全。

                   不允許設定null,否則將出現NullPointException

 

8》:什麼時候用assert?

Jdk1.4之後增加的新關鍵字---assert,表示斷言,即程式執行到某個地方之後肯定是預計好的。

一般程式中很少使用assert

要想使用斷言,則必須使用-ea引數。

 

9》:GC是什麼?為什麼要有GC?

GC:垃圾收集

使用GC可以進行垃圾空間的釋放操作.

 

10》:String s = new String(“xyz”);建立了幾個String Object?

產生了兩個例項化物件,一個是匿名物件“xyz”,另外一個是通過關鍵字new例項化的。

 

11》:sleep()和wait()方法有什麼區別?

Sleep()是Thread定義的方法,表示執行緒的休眠,會自動喚醒。

Wait()是Object裡的方法,需要手工呼叫notify()或notifyAll()方法。

 

12》:Java中有沒有goto?

Goto屬於保留的關鍵字,Java中存在goto,只是無法使用。

 

13》:陣列中有沒有length()這個方法?String中有沒有length()這個方法?

陣列中存在length這個屬性,String中存在length()這個方法.

 

14》:Overload和Override的區別。Overload的方法是否可以改變返回值的型別?

Overload過載:在一個類中定義的若干方法。

                       所有的方法名稱相同,但是引數的個數或型別不同。

Override覆寫:在繼承的關係中                                                   

子類定義了與父類相同的方法,引數個數或型別最好完全一樣。注意訪問許可權不能更加嚴格。

Overload過載的時候不是靠返回值型別區分的,而是靠引數。

 

15》:Set裡的元素是不能重複的,那麼用什麼方法來區分重複與否呢?是用==還是equals()?他們有何區別?

依靠hashCode()和equals()兩個方法完成,==屬於地址比較,而equals()屬於內容比較。使用的是equals()方法。

 

16》:列舉出一些常見的runtime Exception。

NumberFormatException、ArrayOutIndexOfBoundException、NullPointerException、ClassCastException

 

17》:abstract Class和interface有什麼區別?

抽象類:1:由抽象方法和常量,變數、全域性常量、構造方法、普通方法組成。

              2:使用abstract宣告。

3:子類要通過extends繼承抽象類,子類如果不是抽象類,則必須覆寫抽象類 的全部抽象方法。

4:存在單繼承侷限,一個子類只能繼承一個抽象類。

5:抽象類可以實現若干個介面

介面:1:全部由抽象方法和全域性常量組成。

              2:使用interface宣告。

              3:子類通過implements實現介面,子類如果不是抽象類,則必須覆寫抽象類中的全部抽象方法。

              4:不存在單繼承侷限,一個子類可以同時實現多個介面。

              5:介面不能繼承一個抽象類,但是允許繼承多個介面。

 

18》:啟動一個執行緒是用run()還是start()?

       使用start()方法,因為要通知JVM進行PCU資源分配。

 

19》:try{}裡有一個return語句,那麼緊跟在try後的finally{}裡的code會不會被執行,什麼時候被執行,在return前還是後?

會執行,在return之前執行,只要是finally{}的程式碼永遠會被執行。

 

20》:寫一個singleton出來。

核心就是構造方法私有化。

Public class Singleton{

       Private static final Singleton sin =  new Singleton();

       Private Singleton(){};    //將構造方法私有化

       Public static Singleton getInstance() {

              Return sin;

       }

}

在Java中有Runtime類、Class類屬於單例設計。

 

21》:編一段程式碼,實現在控制檯裡輸入一組數字後,排序在控制檯裡輸出。

假設數字中間使用“ ”進行分隔,既然可以排序,則可以

Public void queueIntArray() {

BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));

       System.out.println("請輸入一組資料");

       String str = buf.readLine();

       Set<Integer> set = new TreeSet<Integer>();

       String[] s = str.split(" ");    //進行拆分

       for(String t : s) {

           set.add(Integer.parseInt(t));

       }

       System.out.println("排序之後的結果是:");

       for(Iterator<Integer> it = set.iterator(); it.hasNext();) {

           System.out.print(it.next() + "\t");

       }

}

 

22》:列出某資料夾下的所有檔案。

遞迴方法的呼叫

public static void main(String[] args) {

       File file = new File("D:" + File.separator + "sse3.2");

       fun(file);

    }

   

    public static void fun(File file) {

       if(file.isDirectory()) {

           File[] f = file.listFiles();

           if(f != null) {

              for(int i = 0; i < f.length; i ++) {

                  fun(f[i]);

              }

           }

       } else {

           System.out.println(file);

       }

    }

 

23》:char型變數中能不能儲存一箇中文漢字?為什麼?

可以存放,因為使用的是unicode編碼.

 

24》:多執行緒有幾中實現方法?都是什麼?同步有幾種實現方式?都是什麼?

多執行緒:兩種實現方式。繼承Thread類,實現Runnable介面。

    1:Thread類是Runnable介面的子類。

    2:使用Runnable介面可以實現資源共享的目的。

    3:所有執行緒操作都必須通過Thread類的start()方法啟動。

同步:兩種實現方式:

    1:同步程式碼塊:Synchronized(this){}

    2:同步方法

 

25》:float型float f = 3.4是否正確?

    不正確,因為預設情況下3.4是double型別的資料。

 

26》:String與StringBuffer的區別是什麼?

    String不可以修改,String允許修改。

 

27》:Class.forName的作用?為什麼要用。

    Class.forName屬於向容器中加入驅動程式,例如:JDBC中的使用。

 

28》:int和Integer有什麼別?

    Int是基本資料型別,Integer是包裝類

    在JDK1.5之後,可以實現自動裝箱及拆箱的操作

29》:用最有效的方法算出2乘以8等於幾?

    使用移位操作:2<<3

 

30》:請說出類集框架的完整結構。

    1:類集框架最大的介面:Collection、Map、Iterator

    2:Collection存放單值

       List:允許有重複內容

           ArrayList:非同步處理,新的操作類,非執行緒安全

           Vector:同步處理:舊的操作類,執行緒安全,支援Enumeration

       Set:不允許有重複內容,靠hashCode()和equals()進行重複的驗證。

           HashSet:無序排列

           TreeSet:有序排列,按Comparable排序

    3:Map:存放-對值

           HashMap:新的類,非同步處理,非執行緒安全,允許有null

           HashTable:新的類,同步處理,非執行緒安全,不允許有null

              Properties:屬性操作類

           TreeMap:有序排列,按key排序,根據Compariable制定排序規則。

    4:Iterator:

           迭代輸出,依靠Collection介面的iterator方法輸出,是新的輸出標準

    5:Enumeration:舊的輸出。

 

31:是否允許繼承String類。

    不允許,因為使用了final宣告。

 

32:String、Stringbuffer、Stringbuilder的區別是什麼?

string不可變的字串

stringbuilder可變的字串,非執行緒安全的

stringbuffer 可變的字串,執行緒安全的

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                    Java Web常見面試題

1:JSP有哪些內建物件?作用分別是什麼?

一共有9個內建物件。

PageContext              javax.servlet.jsp.PageContext

Request                  javax.servlet.http.HttpServletRequest

Response                 javax.servlet.http.HttpServletResponse

Session                  javax.servlet.http.HttpSession

Application              javax.servlet.ServletContext    àthis.getServletContext()

Config                   javax.servlet.ServletConfig

Exception                java.lang.Throwable

Page                     java.lang.Object

Out                      javax.servlet.jsp.JspWriter

作用:

    1:pageConext     表示頁容器                ->EL、標籤、上傳

    2:request        伺服器端取得客戶端的資訊     :頭資訊、Cookie、請求引數

    3:response       伺服器端迴應給客戶端的資訊   :Cookie、重定向

    4:session        表示每一個使用者,使用者驗證登陸上

    5:applcation     表示整個伺服器, getRealPath()

    6:config         取得初始化引數,初始化引數 web.xml中配置。

    7:exception      表示的是錯誤頁的處理操作

    8:page           如同this一樣,表示的是整個jsp頁面。

    9:out            輸出,但是儘量使用表示式輸出。

 

2》:JSP有哪些動作?作用分別是什麼?

所謂的動作實質上指的是標籤指令。

<jsp:include>:包含

<jsp:forward>:跳轉

<jsp:useBean>:使用userBean

<jsp:setProperty>:設定屬性,通過反射呼叫方法。

<jsp:getProperty>:取得屬性。

<jsp:plugin>:插入Applet程式的程式碼

 

3》:JSP中動態include與靜態include的區別?

動態include:<jsp:include>,如果包含的是動態頁面,則先編譯再處理。

靜態include:<%@ include%>,直接將內容先包含後處理。

 

4》:兩種跳轉的方式分別是什麼?有什麼區別?

伺服器端跳轉:<jsp:forward>,跳轉之後位址列不變,可以傳遞request屬性,實際上是對RequestDispatcher介面的封裝。

客戶端跳轉:response.sendRedirect(),跳轉之後位址列變化。

 

5》:請總結一下WEB開發中的會話跟蹤實現。

1、session,也是最常用的一種

2、cookie

3、地址重寫

4、隱藏域

 

6》:在WEB開發中需要處理HTML標記時,應該做什麼樣的處理,要篩選哪些字元(<,>,&,、)。

因為以上的標記都屬於HTML範疇的內容,所以必須進行轉義操作:&lt,&gt,&quot,&apos,&amp;

 

7》:說明JSP中errorPage的作用,應用範圍。

    表示錯誤頁的操作,在一般的站點中,只要有一個程式出現了錯誤,就是產生了異常,則可以統一跳轉到一個頁面上進行顯示。那麼這種操作就屬於錯誤性的處理,但是簡單的錯誤頁基本上都是在JSP的開發中使用的。

    要想進行錯誤頁的設定,需要滿足以下兩個條件:

    1:在錯誤能夠處理的頁上的page指令中,增加:isErrorPage=“true”,表示處理錯誤。

    2:在每一個頁面制定errorpage,指向isErrorPage為true的頁面。

如果現在希望配置一種全域性的錯誤處理的話,則可以在web.xml中進行配置。

<error-page>

    <error-code>404</error-code>

    <location>/errors.jsp</location>

</error-page>

<error-page>

    <error-code>java.lang.NullPointerException</error-code>

    <location>/errors.jsp</location>

</error-page>

一旦出現錯誤之後,會自動跳轉到指定的頁面中,但是這種跳轉,永遠是屬於伺服器端的跳轉。

 

8》:寫一段JDBC連線Oracle的程式,並實現資料查詢。

A:步驟

    1:定義一系列的全域性常量:驅動程式,連線地址,使用者名稱,密碼。

    2:載入驅動程式

    3:連線資料庫

    4:操作資料庫:更新或查詢

    5:關閉資料庫

B:

Public static final String DRIVER = “oracle.jdbc.driver.OracleDriver”

Public static final String URL= “jdbc:oracle:thin:@localhost:1052:MLDN”

Public static final String USER = “zhj”;

Public static final String PWD = “zhj”;

    Collection conn = null;

    PreparedStatement pst = null;

    ResultSet rs = null;

    String sql = “select name from emp”;

    Class.forName(DRIVER);

Pst = conn.preparedStatement(sql);

Rs = pst.executeQuery();

While(rs.next()){

    Int empNo = rs.getInt(1);

    String eName = rs.getString(2);

}

Rs.close();

Pst.close();

Conn.close();

 

9》:簡述JSP中是如何實現分頁操作的。

真分頁:效能較高,是基於資料庫的操作。是從資料庫中取出部分資料進行顯示,所以效能很高,但是可一移植性低.

假分頁:效能較低,是將全部的結果查詢出來,之後依靠分頁演算法,只顯示部分資料。因為使用的是通用的語法,所以可移植性很高。

真分頁的原理:

1:定義一系列的變數:currentPage、lineSize、並通過查詢求出allRecords和計算出pageSize。 PageSize= (allRecord + lineSize – 1) / lineSize;

2:之後資料庫查詢語句中根據lineSize和currentPage進行資料的查詢。          Oracle中使用rownum,mysql中使用limit()

3:之後通過表單不斷的修改currentPage和lineSize就可以實現分頁顯示。

 

10》:介紹在JSP中如何使用JavaBean?

JavaBean的格式要求:必須有包、public class 宣告、屬性封裝、無參構造、setter、getter方法。

Import語句匯入或者通過<jsp:useBean>

 

11》:說一說servlet的生命週期

1:初始化:正常一次:對應init方法,有兩個init方法,其中一個是有ServletConfig物件,此方法存在,則無參不呼叫。正常情況下在第一次使用servlet的時候進行初始化操作,也可以配置 web.xml中在容器啟動的時候初始化。<load-on-startup>

2:服務:服務多次,所有的服務都由service方法分配,主要有doGet方法和doPost方法,分別處理doGet和doPost請求。

3:銷燬:正常一次,呼叫destory方法,如果servlet長時間不使用也會自動銷燬。

 

12》:servlet的forward()和redirect()的區別。

Forward是RequestDispatcher介面定義的,而redirect方法是response定義的。一個是伺服器跳轉,另一個是客戶端跳轉。

 

13》:MVC的各個部分都有哪些技術來實現,如何實現。

MVC:model、view、colltroller

    |-Model:javabean:業務處理,資料處理。

    |-view:顯示的jsp,最好不存在任何的scriptlet,可以使用標籤消除。

   |-Controller:控制,接收View傳遞的內容和呼叫的Javabean,並根據javabean的處理結果進行跳轉。

實現原理:所有的jsp將內容提交給servlet,servlet接受這些內容並呼叫相應的javabean進行業務及資料的處理,一般javabean有專人負責開發,完成業務的操作流程,而servlet呼叫的只是介面,並根據這些介面的操作結果將內容交給JSP進行顯示。

 

14》:簡述國際化的實現原理

Local、屬性檔案,ResourceBoundle

國際化程式的實現,是根據本機的作業系統的語言型別,選擇不同的屬性檔案,所有程式的基本程式碼一樣。但是現實檔案不一樣。所以將內容作為屬性檔案出現之後,可以只顯示屬性檔案中的文字。

 

15》:描述JSP和Servlet的區別,共同點,各自應用的範圍。

先有servlet,再有jsp,servlet是java中嵌入HTML程式碼,而JSP是HTML中嵌入Java程式碼。

共同點:JSP可以完成的功能,Servlet都可以完成,但是對於過濾器,監聽器只能由servlet完成。

應用範圍:JSP用於顯示,而Servlet用於控制。

 

16》:簡述web.xml的應用。

屬於部署描述符,在整個Java中只要是容器都會存在部署描述符,此部署描述符可以控制整個WEB中各個元件的執行程式碼,也可以配置整個容器的狀態:<error-page><welcome-file-list><servlet><session-timeout>

<listener><filter>等等