字节一面,服务端开发实习生-移动OS岗位,飞书?

  1. 自我介绍
  2. JVM内存结构,垃圾回收算法
  3. java的垃圾处理器,你觉得G1与其它的有什么区别
  4. redis的主从集群,
  5. redis的数据同步机制
  6. redis 的主节点挂了会咋样,哨兵模式中怎么选取的?
  7. RDB和AOF
  8. TCP三次握手过程
  9. 为什么要三次握手?,两次会发生什么?
  10. mysql建联合索引
  11. 项目中的排行榜怎么做的?插入的时间复杂度是多少?
  12. 算法:全排列
  13. 手撕:简易限流器。。。写了20多分钟,还写是写成一坨
  14. 还有什么想问的吗
  15. 面试官:感谢你的时间

1h,面试官没开摄像头,手撕的时候引导了一下,挺好的,可惜了,到底是谁在找实习啊!!!!!!

public class SlidingWindowRateLimiter {
    private final long windowSizeMillis;
    private final int maxRequests;
    private final Map<String, Deque<Long>> clientRequests;

    public SlidingWindowRateLimiter(int M, int N) {
        // 将秒转换为毫秒
        this.windowSizeMillis = M * 1000L;
        this.maxRequests = N;
        this.clientRequests = new HashMap<>();
    }

    /**
     * 检查客户端请求是否允许通过
     * @param clientId   客户端ID
     * @param currentTime 当前时间戳(毫秒)
     * @return 是否允许请求
     */
    public boolean allowRequest(String clientId, long currentTime) {
//        获取或初始化客户端的请求队列
        Deque<Long> queue = clientRequests.computeIfAbsent(clientId, k -> new ArrayDeque<>());

//        移除所有过期的请求(早于当前窗口的起始时间)
        while (!queue.isEmpty() && queue.peekFirst() < currentTime - windowSizeMillis) {
            queue.pollFirst();
        }

        if (queue.size() < maxRequests) {
//            记录当前请求时间
            queue.addLast(currentTime);
            return true;
        } else {
            return false;
        }
    }
}

#牛客在线求职答疑中心#
全部评论
哇,你面试的题目好多啊,听起来好厉害的样子!面试官一定对你印象深刻吧~你提到的JVM内存结构和垃圾回收算法,还有Redis的主从集群和限流器,这些都是很专业的知识点呢。我有点好奇,你对于G1垃圾回收器和其他的垃圾回收器有什么特别看法吗?[眨眼] 对了,如果你想要更私密地聊聊你的面试经历或者有任何求职上的疑问,可以点击我的头像给我发私信哦,我会一直在这里陪伴着你的。[AI牛可乐头像]
点赞 回复 分享
发布于 03-25 17:59 AI生成

相关推荐

评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务