面試經歷【數之聯】

set爲什麼沒法保證入序跟出序一致

有序與否分爲兩種情況討論;

其一:插入順序能否保證

           set底層採用hash算法計算後進行存儲,所以經過hash算法後無法保證計算結果跟插入順序一致,所以set無法保證插入順序

其二:自然順序能否保證

           set在特殊情況下可以保證自然順序一致(自然數插入),這是由於Integer對象的hashcode返還是其本身,所以恰好會按照升序排列;然後hashmap.hash(object)會進一步進行混淆(保證均勻,避免衝突)。JDK8以後得混淆程度比JDK7的低,在[0,2^32-1]的範圍內恰好還是自己,故此數字插入可以保證按大小輸出。

 

StringBuffer和StringBiulder性能差多少,能否都採用Stringbuffer進行編碼

首先區別異同:

相同處:

都繼承於 AbstractStringBuilder

底層都是用字符數組進行實現,字符串都是可變的

將大部分委託交給父類

初始容量都是16,擴容機制都是*2+2

不同處:

StringBuffer是線程安全的,StringBuilder是線程不安全的

StringBuffer是JDK1.0就有了,StringBuilder是JDK1.5以後加入的

StringBuffer比StringBuilder多了一個toStringCache的字段,用來在toString方法中進行緩存,重複調用toString時提升效率

在單線程環境下,StringBiulder性能優於StringBuffer

測試代碼:https://blog.csdn.net/kaka_buka/article/details/78296217

StringBuffer的花費時間大概是StringBiulder的2-3倍(隨字符串長度增加兩者性能趨近相同)

 

vi怎麼全局替換

單個替換:s/old/new/

全局替換:s/old/new/g

確認替換:s/old/new/gc(c:confirm)

 

idea怎麼連接服務器代碼進行聯調

參考文檔:https://blog.csdn.net/qq_40074764/article/details/79965268

 

Linux怎麼查找匹配文件個數

find / -name '**' | wc -l

 

hbase的get和scan有什麼區別

參考文檔:http://www.cnblogs.com/liupengpengg/p/9197157.html

 

memcached怎麼實現session共享

參考文檔:https://www.cnblogs.com/kevingrace/p/6398672.html

 

redis怎麼實現的hash存儲

參考文檔:https://www.cnblogs.com/ourroad/p/4891648.html

創建hash表(調用dictCreate函數)--->>> 添加元素

 

redis和memcached的區別

參考文檔:https://www.cnblogs.com/kevingrace/p/6398672.html

 

hashmap和hashtable的區別

基本區別:線程安全與否,初始大小,擴容機制,性能,能否null鍵值,迭代器機制(fast-fail與否)

 

hashmap爲什麼線程不安全

put方法,當hash衝突的時候,多線程同時進行節點添加,只能添加上一個,導致數據丟失

擴容安全,

1、當多線程觸發擴容時,從老數組複製數據到新數組,多線程同時添加的時候會導致數據丟失(同put)

2、由於擴容時需要複製數組,當其他線程已經完成數組複製後進行數據添加,但最後一個線程才完成數組複製,導致新添加的數據丟失

3、JDK1.7以前由於使用指針進行數據複製,可能會導致死循環(JDK1.8更新後不會出現死循環,但是會導致數據丟失(同put))

 

悲觀鎖和樂觀鎖的區別

悲觀鎖:悲觀的認爲每個線程都會修改數據,所以當一個線程持有的時候會加鎖,造成其他線程阻塞(關係型數據庫:行鎖,表鎖,讀鎖,寫鎖),synchronized,reentrantLock是悲觀鎖;

樂觀鎖:樂觀的認爲每個線程都不會修改數據,但在更新數據的時候會判斷在此期間是否有人已經更改了數據,可以使用版本號機制和CAS算法實現(CAS算法應避免ABA問題)。適用於讀操作多的應用,提升系統吞吐量。

 

 

 

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