算法~清单

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>  + 双向链表实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值