当前位置: 首页 > article >正文

Java 面经之 Kafka

[1]. Kafka的文件存储机制?

Kafka中的消息以主题(topic)进行分类,每个主题可以分成一个或多个分区(partition)。topic是逻辑上的概念,partition 是物理上的概念。

向topic发布消息的客户端是producer,从topic订阅消息的客户端是consumer。采取分片和索引机制将一个partition分为多个segment,一个segment对应“.index”和“.log”两个文件。“.index”文件存储当前文件的索引范围,“.log”文件存储真正的数据。

可以很容易地扩展到处理更大规模的数据集,支持高吞吐量的消息生产和消费。

[2]. ISR机制?

同步副本集(In-Sync Replicas)是指一组与Leader同步的副本集合。

Kafka会定期检查每个Follower是否与Leader保持同步。如果某个Follower在一定时间内没有与Leader保持同步,则该Follower会被移出ISR。如果当前的Leader失效,Kafka会从ISR中选举一个新的Leader以保证数据的一致性完整性

[3]. Kafka集群数量是怎么考量的?

Kafka的集群数量通常需要按照实际业务需求来确定。

根据经验公式:
kafka_broker_nums=2*(峰值生产速度()*2/100)+1,Kafka的集群数量主要是看生产者端消息的峰值生产速度,确保集群具有一定的冗余能力以应对单点故障。

[4]. TCP/IP网络体系结构说下?

TCP/IP协议网络体系结构由应用层传输层网络层数据链路层四个层次组成。

其中,应用层将OSI七层模型中的应用层、表示层、会话层合并在了一起,是TCP/IP体系结构的顶层,负责提供网络服务和应用程序之间的接口。

传输层主要为两个主机中的进程之间的通信提供通用的数据传输服务。

网络层负责为分组交换网上的不同主机提供通信服务,将数据从源主机传输到目标主机,通过路由器实现不同网络之间的通信。

网络接口层包含了OSI七层模型中的数据链路层和物理层,是TCP/IP协议的最底层,通过网络媒介传输数据,负责网络接口与硬件设备之间的联系。

[5]. 手撕:找出10亿整数中出现次数最多的topN

import java.util.*;
import java.util.Map.Entry;

public class num_topN {

    public static void main(String[] args) {
        int n = 10;  // 定义需要找出出现次数最多的前N个数字
        int[] numbers = new int[1000000000];  // 创建一个大小为10亿的整数数组

        Random rand = new Random();
        for (int i = 0; i < numbers.length; i++) {
            numbers[i] = rand.nextInt(100000);  // 生成范围在0到99999之间的随机数
        }

        Map<integer, integer> frequencyMap = new HashMap&lt;&gt;();
        for (int num : numbers) {
            frequencyMap.put(num, frequencyMap.getOrDefault(num, 0) + 1);  // 统计每个数字的出现次数
        }

        PriorityQueue<entry<integer, integer>&gt; minHeap = new PriorityQueue&lt;&gt;(
                Comparator.comparingInt(Entry::getValue)  // 使用最小堆,按出现次数排序
        );

        for (Entry<integer, integer> entry : frequencyMap.entrySet()) {
            minHeap.offer(entry);  // 将每个元素添加到堆中
            if (minHeap.size() &gt; n) {
                minHeap.poll();  // 保持堆的大小不超过N
            }
        }

        System.out.println("出现次数最多的前" + n + "个数字:");
        while (!minHeap.isEmpty()) {
            Entry<integer, integer> entry = minHeap.poll();  // 从堆中取出元素
            System.out.println("数字 " + entry.getKey() + " 出现了 " + entry.getValue() + " 次");  // 打印结果
        }
    }
}


http://www.kler.cn/a/445659.html

相关文章:

  • 进程与线程以及如何查看
  • 不会心理描写,神态描写怎么办?
  • go-zero(十四)实践:缓存一致性保证、缓存击穿、缓存穿透与缓存雪崩解决方案
  • 提炼关键词的力量:AI驱动下的SEO优化策略
  • 【C语言】库函数常见的陷阱与缺陷(一):字符串处理函数[3]--strlen
  • SpringBoot项目Jar包使用systemctl运行
  • MATLAB常用颜色RGB汇总
  • 低空无人机产教融合技术详解
  • docker启动nginx并部署前端
  • 打通全网SEO优化:提高百度、B站、抖音等平台搜索排名
  • 英伟达 - 笔记
  • 分布式系统架构4:容错设计模式
  • [element-ui] e-image 和e-table一起使用显示问题
  • 在 Unity 6 中使用APV为您的世界创建全局照明的新方法(二)
  • 【Linux系统编程】:信号(1)——前置知识,了解信号
  • BigBlueButton视频会议 vs 钉钉视频会议系统的详细对比
  • Ubuntu 20.04 卸载和安装 MySQL8.0
  • 项目实操:windows批处理拉取git库和处理目录、文件
  • [CSP-S 2024] 超速检测 题解
  • 思科CCNA认证都学什么考什么?
  • TCP三次握手,四次挥手
  • 八大设计模式
  • Vue.js实例开发-创建页面用户可以在输入框中输入文本,点击按钮后,页面上会显示一个欢迎消息
  • Certimate:简化 SSL 证书管理的开源工具
  • [python SQLAlchemy数据库操作入门]-12.直接执行 SQL 语句处理股票数据
  • 图书馆管理系统(四)基于jquery、ajax--完结篇