騰訊面試題(1)--自測試

1、java中的幾種基本數據類型是什麼?各自佔用多少個字節?
1布爾1字符,4整形2浮點。12124848.
在這裏插入圖片描述

2、String類可以被繼承嗎?爲什麼?
String類是不能被繼承的,因爲有final關鍵字修飾。
在這裏插入圖片描述

3、String、StringBuffer、StringBuilder的區別
(有buffer的線程安全,但是速度慢,沒有buffer的線程不安全,但是速度快)
String:String的值是不可變的
StringBuffer:StringBuffer的值可變,線程安全,但是效率比StringBuilder低
StringBuilder:StringBuilder的值可變,線程不安全,但是效率比StringBuffer高

4、ArrayList和LinkedList有什麼區別?
1、ArrayList的底層是數組,LinkedList的底層是鏈表。
2、對於隨機訪問的get和set方法,ArrayList要優於linkedList,因爲LinkedList要移動指針
3、對於新增和刪除操作add和remove,linkedList比較佔優勢,因爲ArrayList要移動數據。

5、講講類的實例化順序
(靜態最先處理,其他的先父而後子)
1. 父類靜態成員和靜態初始化塊 ,按在代碼中出現的順序依次執行
2. 子類靜態成員和靜態初始化塊 ,按在代碼中出現的順序依次執行
3. 父類實例成員和實例初始化塊 ,按在代碼中出現的順序依次執行
4. 父類構造方法
5. 子類實例成員和實例初始化塊 ,按在代碼中出現的順序依次執行
6. 子類構造方法

6、用過哪些map類,都有什麼區別,hashmap是線程安全的嗎?併發下使用的map是什麼,他們內部原理分別是什麼,比如存儲方式,hashcode,擴容,默認容量等。

  • HashMap
    1、HashMap是一個用於存儲鍵值對的集合,每一個鍵值對底層是保存在數組當中的。
    2、HashMap在使用put的時候,是通過計算key的hash值,來決定鍵值對保存在數組的哪個位置。get的時候同樣也是通過hash的方式來獲取到數組的下標。
    3、HashMap的長度由於是有限的,所以如果put的時候出現index衝突的情況,是會使用鏈表的方式來進行存儲。
    4、HashMap默認的初始長度是16,之所以要定位16,是因爲hashMap底層的算法。即key映射到index的hash算法使用16是效率最高的。
    5、HahsMap自動擴容的前提:HashMap的大小,大於或等於總容量*0.75
    6、HashMap是線程不安全的,因爲當兩個線程同時對hashmap進行擴容的時候,鏈表可能出現環形。
    在這裏插入圖片描述

  • ConcurrentHashMap
    1、ConcurrentHashMap採用了鎖分段技術,該map中包含了多個segment對象,而每個segment對象就相當於一個hashMap對象。多線程對不同segment對象更新時,自然就可以是併發執行的,而對同一個segment執行時,會阻塞,所以能保證線程安全性

  • HashTable
    1、不允許記錄的鍵或值爲空
    2、支持線程的同步,即任一時刻只有一個線程能寫Hashtable,因此也導致了 Hashtable在寫入時會比較慢。

7、java8的concurrentHashMap爲什麼放棄了分段鎖?有什麼問題嗎?如果你來設計,你如何設計?
https://my.oschina.net/pingpangkuangmo/blog/817973

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