👍 👍 👍 推荐一个在线搜课程的神器,“课程搜”:https://www.kcsou.com/s_架构师/
推荐: 《Java技术书籍大全》 - awesome-java-books
从初级开发者到资深架构师,看这些书就够了
- 数据结构
- 常用算法
- 并发
- 操作系统
- 设计模式
- 运维 & 统计 & 技术支持
- 中间件
- 网络
- 数据库
- 搜索引擎
- 性能
- 大数据
- 安全
- 常用开源框架
- 分布式设计
- 设计思想 & 开发模式
- 项目管理
- 通用业务术语
- 技术趋势
- 政策、法规
- 架构师素质
- 团队管理
- 资讯
- 技术资源
(Toc generated by simple-php-github-toc )
-
- 非阻塞队列:ConcurrentLinkedQueue(无界线程安全),采用CAS机制(compareAndSwapObject原子操作)。
- 阻塞队列:ArrayBlockingQueue(有界)、LinkedBlockingQueue(无界)、DelayQueue、PriorityBlockingQueue,采用锁机制;使用 ReentrantLock 锁。
- 《java数据结构与算法之栈(Stack)设计与实现》
- 《Java Stack 类》
- 《java stack的详细实现分析》
- Stack 是线程安全的。
- 内部使用数组保存数据,不够时翻倍。
每个节点最多有两个叶子节点。
- 《完全二叉树》
- 叶节点只能出现在最下层和次下层,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树。
左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
二叉查找树(Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉树(sorted binary tree)。
- 《最容易懂得红黑树》
- 添加阶段后,左旋或者右旋从而再次达到平衡。
- 《浅谈算法和数据结构: 九 平衡查找树之红黑树》
MySQL是基于B+树聚集索引组织表
- 《B-树,B+树,B*树详解》
- 《B-树,B+树与B*树的优缺点比较》
- B+树的叶子节点链表结构相比于 B-树便于扫库,和范围检索。
LSM(Log-Structured Merge-Trees)和 B+ 树相比,是牺牲了部分读的性能来换取写的性能(通过批量写入),实现读写之间的平衡。 Hbase、LevelDB、Tair(Long DB)、nessDB 采用 LSM 树的结构。LSM可以快速建立索引。
-
- B+ 树读性能好,但由于需要有序结构,当key比较分散时,磁盘寻道频繁,造成写性能较差。
- LSM 是将一个大树拆分成N棵小树,先写到内存(无寻道问题,性能高),在内存中构建一颗有序小树(有序树),随着小树越来越大,内存的小树会flush到磁盘上。当读时,由于不知道数据在哪棵小树上,因此必须遍历(二分查找)所有的小树,但在每颗小树内部数据是有序的。
-
《LSM树(Log-Structured Merge Tree)存储引擎》
- 极端的说,基于LSM树实现的HBase的写性能比MySQL高了一个数量级,读性能低了一个数量级。
- 优化方式:Bloom filter 替代二分查找;compact 小数位大树,提高查询性能。
- Hbase 中,内存中达到一定阈值后,整体flush到磁盘上、形成一个文件(B+数),HDFS不支持update操作,所以Hbase做整体flush而不是merge update。flush到磁盘上的小树,定期会合并成一个大树。
经常用于大规模数据的排重检查。