java 技術面試問題整理

1. Java 常用的類

String 字符串類

System 可得到系統信息

StringBuilder 字符串工具類

Thread 線程類

Math 與數學有關的工具類

ArrayList 底層用數組實現的集合

LinkedList 底層用鏈表實現的集合

HashMap 接口Map的一個實現類

HashSet 接口Set的一個實現類

Scanner 簡單文本掃描器

Calendar 日期類

Date 日期類

File 目錄或文件操作類

FileInputStream 輸入流

FileOutputStream 輸出流

PrintWriter 

BufferedInputStream 具有緩衝的輸入流

BufferedOutputStream 具有緩衝的輸出流

BufferedReader 從字符輸入流中讀取文本,緩衝各個字符,

2. java常見的運行時異常(Java常見的5個運行時異常)

    

    java運行時異常是可能在java虛擬機正常工作時拋出的異常

java提供了兩種異常機制,一種是運行時異常(RuntimException),一種是檢查式異常(checked exception)

檢查式異常:我們經常遇到的IO異常及sql異常就屬於檢查式異常。對於這種異常,Java編譯器要求我們必須對出現的這些異常進行catch,所以米娜對這種異常不管我們是否願意,只能自己去寫一堆catch來捕捉這些異常。

運行時異常:我們可以不處理。當出現這樣的異常是,總是由虛擬機接管。比如:我們從來沒有人去處理過NullPointerException異常,它就是運行時異常,並且這種異常還是最常見的異常之一。

RuntimException在java.lang包下,下面是有java虛擬機提供的運行時異常:

AnnotationTypeMismatchException, 

    ArithmeticException, 

    ArrayStoreException, 

     BufferOverflowException, 

     BufferUnderflowException, 

    CannotRedoException, 

    CannotUndoException, 

    ClassCastException, 

    CMMException, 

    ConcurrentModificationException, 

    DOMException, 

    EmptyStackException, 

    EnumConstantNotPresentException, 

    EventException, 

    IllegalArgumentException, 

    IllegalMonitorStateException, 

    IllegalPathStateException, 

    IllegalStateException, 

    ImagingOpException, 

    IncompleteAnnotationException, 

    IndexOutOfBoundsException, 

    JMRuntimeException, 

    LSException, 

    MalformedParameterizedTypeException, 

    MirroredTypeException, 

    MirroredTypesException, 

    MissingResourceException, 

    NegativeArraySizeException, 

    NoSuchElementException, 

    NoSuchMechanismException, 

    NullPointerException, 

    ProfileDataException, 

    ProviderException, 

    RasterFormatException, 

    RejectedExecutionException, 

    SecurityException, 

    SystemException, 

    TypeConstraintException, 

    TypeNotPresentException, 

    UndeclaredThrowableException, 

    UnknownAnnotationValueException, 

    UnknownElementException, 

    UnknownTypeException, 

    UnmodifiableSetException, 

    UnsupportedOperationException, 

    WebServiceException

 

常見的4種運行時異常:

1、ClassCastException(類轉換異常)

2、IndexOutOfBoundsException(數組越界)

3、NullPOinterException(空指針)

4、ArrayStoreException(數據存儲異常,操作數組時類型不一致)

5、BufferOverflowException(IO操作異常)

6、RasterFormatException(格式轉換錯誤)

7、UnknownTypeException

3. Spring依賴注入機制

    1、設值方法注入(SetterInjection)

通過類的setter方法完成依賴關係的設置

2、構造子注入(ConstructorInjection)

構造子注入,即通過構造函數完成依賴關係的設定

4. 接口和抽象類不同

    

    接口和抽象類的概念不一樣。接口是對動作的抽象,抽象類是對根源的抽象。

    抽象類表示的是,這個對象是什麼。接口表示的是,這個對象能做什麼。比如,男人,女人,這兩個類(如果是類的話……),他們的抽象類是人。說明,他們都是人。人可以吃東西,狗也可以吃東西,你可以把“吃東西”定義成一個接口,然後讓這些類去實現它.

    所以,在高級語言上,一個類只能繼承一個類(抽象類)(正如人不可能同時是生物和非生物),但是可以實現多個接口(吃飯接口、走路接口)。

    第一點. 接口是抽象類的變體,接口中所有的方法都是抽象的。而抽象類是聲明方法的存在而不去實現它的類。

    第二點. 接口可以多繼承,抽象類不行

    第三點. 接口定義方法,不能實現,而抽象類可以實現部分方法。

    第四點. 接口中基本數據類型爲static 而抽類象不是的。

    當你關注一個事物的本質的時候,用抽象類;當你關注一個操作的時候,用接口。

    

    抽象類的功能要遠超過接口,但是,定義抽象類的代價高。因爲高級語言來說(從實際設計上來說也是)每個類只能繼承一個類。在這個類中,你必須繼承或編寫出其所有子類的

    所有共性。雖然接口在功能上會弱化許多,但是它只是針對一個動作的描述。而且你可以在一個類中同時實現多個接口。在設計階段會降低難度的。

5. 線程如何實現 

    1、就是通過繼承Thread類的方式時,線程類就無法繼承其他的類來實現其他一些功能,實現接口的方式就沒有這中限制;

class MyThread extends Thread 

2.也是最重要的一點就是,通過實現Runnable接口的方式可以達到資源共享的效果。

class MyThread implements Runnable 

6. 線程的狀態 

    

線程的狀態轉換是線程控制的基礎。線程狀態總的可分爲五大狀態:分別是生、死、可運行、運行、等待/阻塞。用一個圖來描述如下:

 

1、新狀態:線程對象已經創建,還沒有在其上調用start()方法。

 

2、可運行狀態:當線程有資格運行,但調度程序還沒有把它選定爲運行線程時線程所處的狀態。當start()方法調用時,線程首先進入可運行狀態。在線程運行之後或者從阻塞、等待或睡眠狀態回來後,也返回到可運行狀態。

 

3、運行狀態:線程調度程序從可運行池中選擇一個線程作爲當前線程時線程所處的狀態。這也是線程進入運行狀態的唯一一種方式。

 

4、等待/阻塞/睡眠狀態:這是線程有資格運行時它所處的狀態。實際上這個三狀態組合爲一種,其共同點是:線程仍舊是活的,但是當前沒有條件運行。換句話說,它是可運行的,但是如果某件事件出現,他可能返回到可運行狀態。

 

5、死亡態:當線程的run()方法完成時就認爲它死去。這個線程對象也許是活的,但是,它已經不是一個單獨執行的線程。線程一旦死亡,就不能復生。 如果在一個死去的線程上調用start()方法,會拋出java.lang.IllegalThreadStateException異常。


    線程同步的方式包括:互斥鎖、讀寫鎖、條件變量、信號量和令牌。

互斥鎖和讀寫鎖: 提供對臨界資源的保護,當多線程試圖訪問臨界資源時,都必須通過獲取鎖的方式來訪問臨界資源。(臨界資源:是被多線程共享的資源)當讀寫線程獲取鎖的頻率 差別不大時,一般採用互斥鎖,如果讀線程訪問臨界資源的頻率大於寫線程,這個時候採用讀寫鎖較爲合適,讀寫鎖允許多個讀線程同時訪問臨界資源,讀寫線程必 須互斥訪問臨界資源。讀寫鎖的實現採用了互斥鎖,所以在讀寫次數差不多的情況下采用讀寫鎖性能沒有直接採用互斥鎖來的高。

條件變量:提供線程之間的一種通知機制,當某一條件滿足時,線程A可以通知阻塞在條件變量上的線程B,B所期望的條件已經滿足,可以解除在條件變量上的阻塞操作,繼續做其他事情。

信號量:提供對臨界資源的安全分配。如果存在多份臨界資源,在多個線程爭搶臨界資源的情況下,向線程提供安全分配臨界資源的方法。如果臨界資源的數量爲1,將退化爲鎖。

令牌:一種高級的線程同步的方法。它既提供鎖的安全訪問臨界資源的功能,又利用了條件變量使得線程爭奪臨界資源時是有序的。

7. Java的垃圾回收機制



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