博客记录-day157-力扣+Kafka,高并发

111 阅读3分钟

一、力扣

1、对角线遍历

498. 对角线遍历

image.png

class Solution {
    public int[] findDiagonalOrder(int[][] mat) {
        int m = mat.length;          
        int n = mat[0].length;       
        int[] res = new int[m * n]; 
        int pos = 0;                
        
        // 遍历所有对角线,总共有 m + n - 1 条对角线
        for (int i = 0; i < m + n - 1; i++) {
            if (i % 2 == 1) {        // 奇数层:从下往上遍历(右上到左下)
                // 计算当前对角线的起始坐标
                int x = (i < n) ? 0 : i - n + 1; // 起始行:若i小于列数则从第0行开始,否则从i-n+1行
                int y = (i < n) ? i : n - 1;     // 起始列:若i小于列数则从第i列开始,否则从最后一列开始
                
                // 沿对角线向上遍历,直到越界
                while (x < m && y >= 0) {
                    res[pos++] = mat[x][y];
                    x++;  // 向下移动一行
                    y--;  // 向左移动一列
                }
            } else {                   // 偶数层:从上往下遍历(左下到右上)
                // 计算当前对角线的起始坐标
                int x = (i < m) ? i : m - 1;     // 起始行:若i小于行数则从第i行开始,否则从最后一行开始
                int y = (i < m) ? 0 : i - m + 1; // 起始列:若i小于行数则从第0列开始,否则从i-m+1列开始
                
                // 沿对角线向下遍历,直到越界
                while (x >= 0 && y < n) {
                    res[pos++] = mat[x][y];
                    x--;  // 向上移动一行
                    y++;  // 向右移动一列
                }
            }
        }
        return res;
    }
}

2、二叉树的完全性检验

958. 二叉树的完全性检验

image.png

class Solution {
    public boolean isCompleteTree(TreeNode root) {
        // 创建一个双端队列用于层序遍历
        Deque<TreeNode> deque = new LinkedList<>();
        deque.offer(root);
        // 标记是否遇到了空节点
        boolean flag = true;
        while (!deque.isEmpty()) {
            // 从队列尾部取出一个节点
            TreeNode node = deque.poll();
            if (node == null) {
                // 如果遇到空节点,则设置标志为false
                flag = false;
            } else {
                // 如果在非空节点前出现了空节点,则树不是完全二叉树
                if (!flag) {
                    return false;
                }
                // 将当前节点的左右子节点加入队列头部
                deque.offer(node.left);
                deque.offer(node.right);
            }
        }
        // 如果遍历完成没有发现违规情况,则树是完全二叉树
        return true;
    }
}

二、语雀-Kafka

1、✅Kafka 几种选举过程简单介绍一下?

image.png

image.png

2、为什么Kafka没办法100%保证消息不丢失?

✅为什么Kafka没办法100%保证消息不丢失?

image.png

image.png

3、Kafka 消息的发送过程简单介绍一下?

✅Kafka 消息的发送过程简单介绍一下?

image.png

image.png

4、Kafka 高水位了解过吗?为什么 Kafka 需要 Leader Epoch

✅Kafka 高水位了解过吗?为什么 Kafka 需要 Leader Epoch?

image.png

5、Kafka 为什么有 Topic 还要用 Partition?

✅Kafka 为什么有 Topic 还要用 Partition?

image.png

6、介绍一下Kafka的ISR机制?

✅介绍一下Kafka的ISR机制?

image.png

7、Kafka 中的Offset是什么?

✅Kafka 中的Offset是什么?

image.png

image.png

8、Kafka为什么依赖Zookeeper,有什么用

✅Kafka为什么依赖Zookeeper,有什么用?

image.png

image.png

image.png

三、语雀-高并发

1、如何设计一个能够支持高并发的系统?

✅如何设计一个能够支持高并发的系统?

image.png

image.png

image.png

2、什么是服务降级?

✅什么是服务降级?

image.png

image.png

3、什么是熔断?

✅什么是熔断?

image.png

image.png

4、什么是预热?它有何作用?

✅什么是预热?它有何作用?

image.png

5、什么是限流?常见的限流算法有哪些?

✅什么是限流?常见的限流算法有哪些?

image.png

6、什么是自适应限流?

✅什么是自适应限流?

image.png

7、什么是滑动窗口限流?

✅什么是滑动窗口限流?

image.png

image.png

8、漏桶和令牌桶有啥区别?

✅漏桶和令牌桶有啥区别?

image.png

1. 漏桶算法

image.png

2. 令牌桶算法

image.png

image.png