快手面试题

快手快手一面

一致性哈希
LRU的实现
ConcurrentHashMap的实现,扩容,如果正在扩容,同时又有put()操作,会发生什么,获取大小的实现
Spring IOC实现原理
分布式锁的实现(zk)
针对某个接口进行限流处理,如何实现,可以借助Redis等

服务限流常用方法:

1、计数器方法

系统维护一个计数器,来一个请求就加1,请求处理完成就减1,当计数器大于指定的阈值,就拒绝新的请求。

2、队列方法

就是基于FIFO队列,所有请求都进入队列,后端程序从队列中取出待处理的请求依次处理。

3、令牌桶方法

首先还是要基于一个队列,请求放到队列里面。但除了队列以外,还要设置一个令牌桶,另外有一个脚本以持续恒定的速度往令牌桶里面放令牌,后端处理程序每处理一个请求就必须从桶里拿出一个令牌,如果令牌拿完了,那就不能处理请求了。我们可以控制脚本放令牌的速度来达到控制后端处理的速度,以实现动态流控。
算法1:给定一个函数,可以生成110000的随机数,请利用该函数生成165535的随机数
快手二面
Java基本数据类型,字节数
32位整型能表示的数据范围
double浮点型精度,是如何存储表示的

Redis持久化:AOF和RDB区别,适用场景

RDB异步刷盘,AOF同步刷盘
volatile保证的语义,JVM是如何实现volatile的,使用了哪些指令
happen-before原则,happen-before即先行发生,是Java内存模型中定义的两项操作之间的偏序关系,如果说操作A先行发生于操作B,其实就是说发生操作B之前,操作A产生的影响能被操作B观察到,“影响”包括修改了内存中的共享变量的值、发送了消息、调用了方法等。

算法1:在线编程,滑雪场问题,给定二维数组,数组里可能有重复的数字,每个元素表示相应跑道的高度,选手在给定位置开始向上、下、左、右运动,需要满足下一个位置的高度不高于当前高度,在二维数组查找最长的路径(备注:我的解法是动态规划,被面试官否定,表示数组里有重复值情况下动态规划无法解决)
算法2:在线编程,只使用JDK自带API,实现字符串转浮点型
Double.parseDouble(String s)

你可能感兴趣的:(快手面试题)