数据结构与算法相关

原子类

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

算法解题技巧

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