數據結構與算法相關

原子類

Hbase:Hbase中HLog使用AtomicLong作爲日誌序列號,因爲一個RS的多個region會併發寫入HLog,使用AtomicLong保證線程安全。
Kafka:生產者消息分發Partition—如果消息有key,使用key的哈希值與分區個數取模;如果沒有key,使用AtomicInteger累加的counter與分區個數取模獲取要發送的分區。(負載均衡)

典型數據結構

二叉查找樹:左<中<右,二分查找思想
紅黑樹:二叉查找樹的升級,實現自平衡
:一個二叉樹,樹跟爲最小值,支持常數取最小值(或最大值)

特殊數據結構

Mysql中InnoDB的索引:B+樹
Hbase的讀寫:LSM樹
Redis的有序集合:跳躍表
BitSet:位域,多應用在桶排序中

第三方

  • nginx的請求轉發算法(從負載均衡角度思考):輪詢;權重輪詢;hash(對IP或URL)
  • redis故障轉移的選舉主節點算法:raft

算法

  • LRU:最近最久未使用,把把最久沒有被訪問到的數據淘汰,對特殊情況要加以隔離避免使用,比如Mysql的全表掃描
JDK8中的排序:
  • 集合sort方法–Arrays.sort():
    默認Tim排序,可修改配置使用普通歸併排序
    https://www.jianshu.com/p/892ebd063ad9
  • 排序類:DualPivotQuicksort(優化的快排)
    從它名字可以看出:經典快排裏有一個pivot概念,用來分隔大數和小數的 – 這個pivot把數組分成兩份。那麼Dual-Pivot其實是用兩個Pivot把數組分成三份。那爲什麼這就快了呢?其實Dual-Pivot快排元素比較次數比經典快排要多。(理應該慢猜對)
    在硬件層面,CPU性能提升的速度超過內存帶寬。假如這種不均衡持續發展,有一天CPU速度再增長也不會讓程序變得更快,因爲CPU始終在等待內存傳輸數據,這就是傳說中內存牆(Memory Wall)。
    25年前Dual-Pivot快排可能真比經典快排慢,但25年後雖然算法還是以前的那個算法,計算機已不是以前的計算機了。在現在計算機裏Dual-Pivot算法更快!
    掃描元素個數反應CPU與內存的數據流量大小。因爲內存比較慢,統計這個參數就把內存因素考慮進去了,因此也就比元素比較次數更能體現性能指標。平均測試,Dual-Pivot快排比經典快排節省12%的元素掃描,從實驗看節省了10%的時間。
    https://www.jianshu.com/p/2c6f79e8ce6e

算法解題技巧

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