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 測試當前線程是否已經是中斷狀態,但不清除狀態標誌。

      

    

 

        

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