Java魔法类:Unsafe应用解析 - 美团技术团队
高性能队列——Disruptor - 美团技术团队
1.使用disruptor高性能内存队列实现一个分布式id服务: 采用数组的连续内存实现
通过填充cache line的手法是为了防止False Sharing(伪共享)
2.服务接口url鉴权,
不同的用户对应自身可访问的url集合
多个用户对应一个服务,使用hash表结构存储<用户id, 用户可访问的url集合>
用户可访问的url集合采用字符串前缀树存储, 子节点列表是用有序数组存储(基本不会变动,动), 通过二分法快速查找,子节点不是用hash储存,hash set对于小数据量也不一定比有序数组效率高呢。毕竟hash set还要计算哈希值、处理冲突等。
3.服务限流
固定时间窗口限流算法: 10秒内只有100个请求可达
滑动时间窗口限流算法:使用循环队列 当有新的请求到来时,我们将与这个新请求的时间间隔超过 1s 的请求,从队列中删除。然后,我们再来看循环队列中是否有空闲位置。如果有,则把新请求存储在队列尾部(tail 指针所指的位置);如果没有,则说明这 1 秒内的请求次数已经超过了限流值 K,所以这个请求被拒绝服务。
4.堆,大小顶堆,添加堆顶元素,和删除都只需要logk复杂度, 类型java中的优先级队列 PriorityQueue
1.可用来做动态排名
2.实现一个高性能定时器,将每个任务的每次执行的时间点用小顶堆存储, 每次删除最近时间点的任务来执行,避免每秒循环判断每个任务是否到底时间点
5.lru缓存, 最近最少访问, 使用hash表<key, value> + 双向链表实现