JAVA后端面经总结——应用类


JAVA后端开发知识总结(持续更新…)


JAVA后端面经总结——应用类



一、方法总结

1.1 限流算法

  • 固定窗口(计数器):Redis的k-v,incr命令。常用于QPS限流和统计总访问量。
  • 滑动窗口:TCP思想(左右指针固定边界,point指针确定当前的流量)。将时间周期分为N个小周期,分别记录每个小周期内访问次数,并且根据时间滑动删除过期的小周期,即每过一个小周期,它会右移一个小格。
  • 漏桶(可以队列实现):
  • 令牌桶:可以较好地应对瞬时流量,流量也可以瞬时传输,面对突发流量可以应用。
  • 计数器的问题——临界值的并发

一秒只允许四个请求,前10ms两个请求,第二个10ms两个请求,此时按理,第三个10ms来的一个请求,要等这一秒结束。但是对于滚动的时间窗口,第五个请求在第一个10ms后,变成了第三个请求,可以执行了,怎么本质上解决?

  • 利用滑动窗口解决
  1. 有多个 IP 请求过来,如果某个 IP 超过了 10次调用/5秒,就限流。使用 MySQL/Redis 实现,使用内存来实现,分别给两个解决方案。
  • 内存实现:
    每个 IP 对应一个大小为 10 的循环队列,队列里面存储请求的时间。比如现在队列满了 10 个,第 11 个请求来了,就拿第 11 个请求的时间减去第一个请求的时间,如果小于等于 5 秒,就拒绝第 11 个请求,如果大于5秒,就删掉第一个请求,再把第11个请求加入循环队列。
    用个 HashMap 来存令牌,key 就是 ip,value 就是对应的令牌,每次放的时候就放所有 ip 的令牌,频率为 10次调用/5秒。
    滑动窗口,一个 ip 对应一个滑动窗口类
    一个 IP 对应一个令牌桶线程
  • Redis 实现:
    使用 zset 实现滑动窗口,key 是 ip,value 是请求次数,score 是时间,可以使用 zrangebyscore key startScore endScore 查看局部分数范围内的值,可以用来统计滑动窗口中的请求次数。
    直接redis incr命令:固定窗口。
  1. QQ在5分钟内接收几百万的登录请求,QQ用户好几亿,怎么保证每个用户在5分钟内只能登录一次,用内存实现

1.2 亿万级别数据的处理

  • 时间
  • Hash统计
  • 堆/快速/归并/桶排序
  • 堆(Heap):海量数据前n大,并且n比较小,堆可以放入内存
  • Trie树
  • 外排序
  • Bit-Map
  • Bloom Filter
  • 双层桶划分:第k大,中位数,不重复或重复的数字,只分不治
  • 数据库索引
  • 倒排索引(Inverted Index)
  • 空间
  • 分治
  • Hash映射:把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。
  • 外排序
  1. 所谓内排序就是可以在内存中完成的排序,比如快速排序,堆排序,归并排序等。
  2. 外部排序指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行多次数据交换
  3. 多路归并排序:将原文件分解成多个能够一次性装入内存的部分,分别把每一部分调入内存完成排序,然后,对已经排序的子文件进行归并排序。对于两两归并排序,磁盘IO太多,需要优化。
  4. 多路归并——堆:将每一个小文件的第一个数取出,即每一个小文件里的最小数,对这些数进行归并排序,将这些数里的最小数字写入大文件的第一行,此即整个大文件里的最小数字。继续前面的循环,直到所有小文件都遍历完成。
  1. 如何从一天的超过10G的记录IP地址的日志中,较快地找出登录次数最多的一个IP?
  • 分而治之/hash映射 + hash统计 + 堆/快速/归并/桶排序:先映射,后统计,最后排序。
  • 内存受限,只能把大文件化成(取模映射)小文件;
  • 采用常规的HashMap(ip,value)进行频率统计;
  • 统计完了之后,只需对n个进行排序(可采取堆排序),得到次数最多的IP。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值