java後端面試題彙總

本篇將持續更新。。。。。面試題總結html

    面試過程當中,遇到領導問你爲何離職時,必定要想好怎麼回答,不知道的能夠百度一下,我如今還在摸索階段,有想法的能夠留言探討,這個問題很重要!java

1. RESTful指的是什麼?

    目前最流行的一種互聯網軟件架構,資源在網絡中以某種表現形式進行狀態轉移(1)每個URI表明一種資源;(2)客戶端和服務器之間,傳遞這種資源的某種表現層;(3)客戶端經過四個HTTP動詞,對服務器端資源進行操做,實現"表現層狀態轉化"。(感受很晦澀難懂,我也不是很懂)面試

2. Object類中有哪些方法,請舉幾個例子。

    clone(), equals(), hashCode(), toString(), notify(), notifyAll(), wait(), finalize(), getClass()數據庫

3. StringBuilder和StringBuffer區別?

   StringBuilder是線程不安全的,而StringBuffer是線程安全的,因此速度上(也能夠理解爲性能上)StringBuilder > StringBuffer > String。String是不可變的,其餘兩個是可變的。StringBuffer不少方法都被synchronized修飾了,因此纔是線程安全的,可是這樣會時其速度變慢。緩存

4. List,Set的區別?

    List,Set都是繼承自Collection接口。List元素有序,set元素無序,重複放入元素會覆蓋以前的元素。安全

5. Set遍歷的方式有哪些?

    (1)Set<String> sets = new HashSet<String>();for (String element : sets) {}   (2)Set<String> sets = new HashSet<String>();Iterator<String> it = sets.iterator();while(it.hasNext()){String str = it.next()}服務器

6. Map遍歷的方式有哪些?

    Map<String, Integer> tempMap = new HashMap<String, Integer>();  (1)Iterator it = tempMap.entrySet().iterator();  while (it.hasNext()) {  Map.Entry entry = (Map.Entry) it.next();  Object key = entry.getKey();   Object value = entry.getValue();  }(2)for (Map.Entry<String, Integer> entry : tempMap.entrySet()) {String key = entry.getKey().toString();String value = entry.getValue().toString();  }(3) for (Object o : tempMap.keySet()) {  System.out.println("key=" + o + " value=" + tempMap.get(o));  }(4)for (Iterator i = tempMap.keySet().iterator(); i.hasNext();) {   Object obj = i.next();   System.out.println(obj);// 循環輸出key   System.out.println("key=" + obj + " value=" + tempMap.get(obj));    }網絡

    這裏主要記住entrySet和keySet,使用迭代器iterator。多線程

7. 什麼叫java的反射機制?

    在java運行環境中獲取類的屬性和方法,調用對象的任何一個方法。動態獲取類的信息,以及動態調用對象的方法就叫作java的反射機制。架構

8. 事務有哪些特性,稍微解釋一下?

    ACID,原子性(Atomicity):事務不可拆分,要麼都發生,要麼都不發生。一致(Consistency)性:事務必須使數據庫從一個一致性狀態變換到另一個一致性狀態。隔離性(Isolation):多個用戶訪問時,各個用戶之間的事務性互不干擾。持久性:事務一旦被提交,數據庫中的數據改變就是永久性的。

8. 獲取一個對象的方法

    A.class a.getclass() Class.forName()

9. ThreadLocal是幹嗎用的?

    ThreadLocal(線程變量副本),ThreadLocal爲每一個線程維護一個本地變量。而Synchronized實現內存共享,ThreadLocal採用空間換時間,它用於線程間的數據隔離,爲每個使用該變量的線程提供一個副本,每一個線程均可以獨立地改變本身的副本,而不會和其餘線程的副本衝突。

10. &和&&的區別?

    &運算符有兩種用法:(1)按位與;(2)邏輯與。&運算符是短路與運算。邏輯與跟短路與的差異是很是巨大的,雖然兩者都要求運算符左右兩端的布爾值都是true整個表達式的值纔是true。&&之因此稱爲短路運算是由於,若是&&左邊的表達式的值是false,右邊的表達式會被直接短路掉,不會進行運算。不少時候咱們可能都須要用&&而不是&。

11. byte的加減法?

    題目爲 byte a=1,b=2,ab;final byte c=3,d=4,cd;ab=a+b;cd=c+d;

    syso(ab);syso(cd);

    被final修飾的變量是常量,這裏的cd=c+d能夠當作是cd=7;在編譯時就已經變爲cd=7了.而b1和b2是byte類型,java中進行計算時候將他們提高爲int類型,再進行計算,b1+b2計算後已是int類型,賦值給b3,b3是byte類型,類型不匹配,編譯不會經過,須要進行強制轉換。Java中的byte,short,char進行計算時都會提高爲int類型。

12. 線程和進程有什麼區別?

    線程相關能夠訪問如下地址(https://www.cnblogs.com/bsjl/p/7693029.html).   線程是進程的子集,一個進程能夠有不少線程,每條線程並行執行不一樣的任務。不一樣的進程使用不一樣的內存空間,而全部的線程共享一片相同的內存空間。別把它和棧內存搞混,每一個線程都擁有單獨的棧內存用來存儲本地數據。

13.什麼是線程安全?Vector是一個線程安全類嗎?

    若是你的代碼所在的進程中有多個線程在同時運行,而這些線程可能會同時運行這段代碼。若是每次運行結果和單線程運行的結果是同樣的,並且其餘的變量的值也和預期的是同樣的,就是線程安全的。一個線程安全的計數器類的同一個實例對象在被多個線程使用的狀況下也不會出現計算失誤。很顯然你能夠將集合類分紅兩組,線程安全和非線程安全的。Vector 是用同步方法來實現線程安全的, 而和它類似的ArrayList不是線程安全的。

14.什麼是線程池? 爲何要使用它?

    建立線程要花費昂貴的資源和時間,若是任務來了才建立線程那麼響應時間會變長,並且一個進程能建立的線程數有限。爲了不這些問題,在程序啓動的時候就建立若干線程來響應處理,它們被稱爲線程池,裏面的線程叫工做線程。從JDK1.5開始,Java API提供了Executor框架讓你能夠建立不一樣的線程池。好比單線程池,每次處理一個任務;數目固定的線程池或者是緩存線程池(一個適合不少生存期短的任務的程序的可擴展線程池)。

15.Java多線程中調用wait() 和 sleep()方法有什麼不一樣?

    Java程序中wait 和 sleep都會形成某種形式的暫停,它們能夠知足不一樣的須要。wait()方法用於線程間通訊,若是等待條件爲真且其它線程被喚醒時它會釋放鎖,而sleep()方法僅僅釋放CPU資源或者讓當前線程中止執行一段時間,但不會釋放鎖

16.局部代碼塊,構造代碼塊,靜態代碼塊的區別?

    首先用代碼解釋一下:

public class Main {
    public static void main(String[] args) {
        B b =new B();
    }
}
class A{
    {
        System.out.println("構造代碼塊A");
    }
    static{
        System.out.println("靜態代碼塊A");
    }
    public A(){
        System.out.println("構造函數A");
    }
}
class B extends A{
    {
        System.out.println("構造代碼塊B");
    }
    static{
        System.out.println("靜態代碼塊B");
    }
    public B(){
        System.out.println("構造函數B");
    }
}
    輸出結果爲:

        靜態代碼塊A
        靜態代碼塊B
        構造代碼塊A
        構造函數A
        構造代碼塊B
        構造函數B

解釋: 1.局部代碼塊,又叫普通代碼塊。它是做用在方法中的代碼塊。做用:是控制局部變量的生命週期.
         2. 構造代碼塊,就是給全部對象進行初始化。每次建立對象他都會執行,構造代碼快是優於構造函數執行。構造代碼塊與構造函數的區別是:構造代碼塊是給全部對象進行統一初始化,而構造函數是給對應的對象初始化,由於構造函數是能夠多個的,運行哪一個構造函數就會創建什麼樣的對象,但不管創建哪一個對象,都會先執行相同的構造代碼塊。也就是說,構造代碼塊中定義的是不一樣對象共性的初始化內容。
         3.靜態代碼塊,是對類進行初始化,若一個類包含多個靜態代碼塊,那則是按照代碼執行順序執行。隨着類的加載而執行,並且只一次。優先於主函數執行。當類進入內存時,首先進行靜態代碼加載

17.使用線程的方式有哪些?

         1. 繼承Thread類。
         2. 實現Runabl接口   二者沒有很大的區別,java是單繼承,因此通常以第二種編寫線程爲佳。

18.調用線程的run方法和start方法的區別

         1. run方法執行不是異步執行的,而是同步執行的,此線程對象不交給線程規劃器規劃。
         2. start方法是通常啓動線程的方式,是異步執行的。執行start的順序不表明線程執行的順序

19.線程的interrupted和isInterrupted的區別

  1. interrupted 測試當前線程是否已是中斷狀態,執行後將狀態標誌清除爲false。          2. isInterrupted 測試當前線程是否已是中斷狀態,但不清除狀態標誌。

相關文章
相關標籤/搜索