JAVA基礎知識複習(一)

1.String str="i"與 String str=new String("i")一樣嗎?

不一樣,前一個是先去常量池中去找看看有沒有“i”如果有的話,直接引用,否則就是在常量池中新建一個對象;

後一種,是直接在JVM的堆內存中去新建一個對象。

常量池,在JDK1.6之前是放在JVM的方法區中,JDK1.7後放到的堆內存中了

2.普通類和抽象類有什麼區別?

普通類不能有抽象方法,抽象類可以有抽象方法。

普通類可以直接實例化,抽象類不能直接實例化。

3.抽象類能使用 final 修飾嗎?

不能,如果用了final的話抽象類就不能被繼承了,而這與抽象類的設計初衷相違背了。

final修飾在變量上說明該變量不能被修改,修飾在方法中說明該方法不能被覆寫。

4.JAVA中容器有哪些?

 

preview

5.HashMap 和 Hashtable 有什麼區別?

HashMap是線程不安全的,而HashTable是線程安全,底層使用synchronized實現

HashMap性能比HashTable要好

6.ArrayList,linkedList,Vector

ArrayList:底層使用數組實現的,線程不安全,隨機訪問效率高,增刪效率不高因爲需要移動數據

LinkedList:底層使用雙向鏈表實現,隨機訪問效率不高,需要一個節點一個節點的查找過去,增刪效率高因爲只需要修改前後相關節點的指針指向就行了

Vector:線程安全的數組型集合

7.sleep() 和 wait() 有什麼區別?

sleep():Thread類的靜態方法,不會釋放鎖,一定時間後自動喚醒

wait():Object的方法,會釋放鎖,需要notify(),notifyAll()喚醒

8.如何創建線程池?

1.ExecutorService newExecutorService = Executors.newCachedThreadPool();//可緩存線程池

2.Executors.newFixedThreadPool (3);//定長線程池

3.Executors.newScheduledThreadPool //定長線程池,支持週期性任務的執行

4.Executors.newSingleThreadExecutor //單線程線程池,池中就一個線程,保證任務的執行順序是按指定優先級執行

以上線程池由於內部默認使用的是 無界隊列,高併發的情況下可能出現OOM

推薦做法,使用有界隊列來構造線程池。:ThreadPoolExecutor poolExecutor=new ThreadPoolExecutor(4,10,5,TimeUnit.SECONDS,new LinkedBlockingQueue<Runnable>(10));

9.深拷貝和淺拷貝區別是什麼?

淺拷貝只是複製了對象的引用,而深拷貝是把對象以及值都複製了,修改原有對象不會對該對象有影響。

 

 

 

 

 

 

 

 

 

 

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