【1】流利说面经整理

server/2024/11/20 19:06:44/

[1].介绍一下CAP理论

CAP理论是指在分布式系统设计中,没有一种设计可以同时满足Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性)3个特性,最多只能同时满足三个特性中的两个。

一致性强调的是所有节点在同一时刻看到的数据必须是相同的;

可用性强调的是系统能够持续正常运行并对外提供服务;

分区容错性强调的是系统中任意信息的丢失或失败不会影响系统的继续运作。

kafka_producer_9">[2].kafka producer写入数据的过程

  • Producer通过ZooKeeper找partition对应的leader;
  • Producer将消息发送给该Leader;
  • Leader将消息写入本地log;
  • Followers从Leader pull消息,写入本地log后向Leader发送ACK;
  • Leader收到所有ISR中的Replication的ACK后,增加HW并向Producer发送ACK;

kafka_16">[3].kafka为什么使用拉取消息的机制?

简化了Kafka Broker的设计,Broker只需存储消息等待消费者拉取,无需主动推送消息

消费者可以根据自身处理能力和负载情况自主决定从broker拉取消息的频率和数量,能够有效控制消息的消费速度,可有效避免消息堆积消费压力过大的问题。

Kafka可以选择批量拉取消息,减少网络开销,提高吞吐量,还能灵活控制拉取间隔,实现实时或批量处理模式。

[4].手撕:Java实现LRU

哈希表+双向链表
java">class LRUCache {int capacity;Map<integer, listnode> map;MyQueue queue;public LRUCache(int initialCapacity) {// 初始化LRU缓存的容量this.capacity = initialCapacity;// 使用HashMap来存储缓存项,其中键为键,值为对应的值this.map = new HashMap&lt;&gt;();// 初始化一个MyQueue对象,用于记录缓存项的访问顺序// 保留初始化逻辑以设置MyQueue的初始状态// MyQueue将用于管理缓存项的访问顺序,以支持LRU(最近最少使用)策略this.queue = new MyQueue();}public int get(int key) {// 检查map中是否包含指定的keyif (!map.containsKey(key)) {// 如果不包含,则返回-1表示未找到return -1;}// 从map中获取与key对应的ListNode节点ListNode node = map.get(key);// 将获取到的节点移动到队列的尾部queue.moveToTail(node);// 返回节点的值return node.val;}public void put(int key, int value) {ListNode node;// 检查map中是否已经存在该keyif (map.containsKey(key)) {// 如果存在,获取对应的节点node = map.get(key);// 更新节点的值node.val = value;// 将节点移动到队列的尾部,表示最近被访问queue.moveToTail(node);} else {// 如果map已满,则移除队列头部的节点及其对应的键值对if (map.size() == capacity) {map.remove(queue.removeHead());}// 创建一个新的节点node = new ListNode(key, value);// 将新的键值对添加到map中map.put(key, node);// 将新节点添加到队列的尾部queue.addToTail(node);}}
}
class MyQueue{ListNode head;ListNode tail;public MyQueue() {// 创建一个新的头节点head = new ListNode();// 创建一个新的尾节点tail = new ListNode();// 将头节点的next指针指向尾节点,表示队列为空时,头尾节点直接相连head.next = tail;// 将尾节点的pre指针指向头节点,实现双向链表的闭合tail.pre = head;}public void addToTail(ListNode node) {// 设置新节点的前驱节点为原尾节点tail.pre.next = node;// 设置新节点的前驱节点为原尾节点的前驱节点node.pre = tail.pre;// 设置新节点的后继节点为原尾节点node.next = tail;// 更新原尾节点的前驱节点为新节点tail.pre = node;}public int removeHead() {// 如果队列中只有一个节点(头尾相连),则返回-1表示队列为空if (head.next == tail) {return -1;}// 获取待移除节点的键值int headKey = head.next.key;// 移除队列头部的节点removeNode(head.next);// 返回被移除节点的键值return headKey;}public void moveToTail(ListNode node) {// 从队列中移除指定节点removeNode(node);// 将指定节点添加到队列的尾部addToTail(node);}public void removeNode(ListNode node) {// 将当前节点的前一个节点的next指针指向当前节点的下一个节点// 这样,前一个节点就跳过了当前节点,直接指向了下一个节点node.pre.next = node.next;// 将当前节点的下一个节点的pre指针指向当前节点的前一个节点// 这样,下一个节点的前一个节点就变成了当前节点的前一个节点// 实现了当前节点从双向链表中被移除node.next.pre = node.pre;}
}class ListNode{int key;int val;ListNode pre;ListNode next;public ListNode(){}public ListNode(int key, int value){this.key = key;this.val = value;}
}

http://www.ppmy.cn/server/143523.html

相关文章

CH03_反射

第3章&#xff1a;反射 本章目标 掌握反射的原理 熟悉反射的基本运用 本章内容 反射是什么 C# 编译运行过程 首先我们在VS点击编译的时候&#xff0c;就会将C#源代码编译成程序集 程序集以可执行文件 (.exe) 或动态链接库文件 (.dll) 的形式实现 程序集中包含有Microsoft …

【鸿蒙开发】第十七章 Camera相机服务

目录 1 简介 2 开发模型 3 开发准备 4 相机开发&#xff08;ArkTS&#xff09; 4.1 设备输入 4.1.1 开发步骤 4.1.2 状态监听 4.2 会话管理 4.2.1 开发步骤 4.3 预览 4.3.1 开发步骤 4.3.2 状态监听 4.4 拍照 4.4.1 开发步骤 4.4.2 状态监听 4.5 录像 4.5.1 开…

【杂谈】无人机测绘技术知识

无人机测绘技术知识 随着科技技术的不断进步和低空经济的快速推进&#xff0c;无人机技术已经从最初的军事侦察、航拍娱乐&#xff0c;逐渐深入到各个行业领域&#xff0c;其中无人机测绘技术&#xff08;航空摄影测量&#xff09;更是凭借其高效、精准、灵活的特性&#xff0…

游戏引擎学习第15天

视频参考:https://www.bilibili.com/video/BV1mbUBY7E24 关于游戏中文件输入输出&#xff08;IO&#xff09;操作的讨论。主要分为两类&#xff1a; 只读资产的加载 这部分主要涉及游戏中用于展示和运行的只读资源&#xff0c;例如音乐、音效、美术资源&#xff08;如 3D 模型和…

django从入门到精通(五)——表单与模型

好的&#xff0c;下面将详细介绍 Django 的表单与模型&#xff0c;包括它们的定义、使用、如何在 Django Admin 中结合使用&#xff0c;以及相关的字段类型和验证机制。 Django 模型与表单 1. Django 模型 Django 模型是一个 Python 类&#xff0c;用于定义数据库中的数据结…

数据库管理-根据日期字段进行数据筛选更新数据

项目场景 数据插入、更新、查询 数据库中一张审计表格用来记录数据的操作包括数据的id&#xff0c;数据名称sjmc&#xff0c;数据状态sjzt&#xff0c;数据创建时间createtime&#xff0c;数据更新时间updatetime。 具体需求如下&#xff1a; 根据数据名称更新sjzt和update…

使用OpenUI智能生成专业级网页UI实现远程高效前端开发新手指南

文章目录 前言1. 本地部署Open UI1.1 安装Git、Python、pip1.2 安装Open UI 2. 本地访问Open UI3. 安装Cpolar内网穿透4. 实现公网访问Open UI5. 固定Open UI 公网地址 前言 今天给大家带来一篇非常实用的技术分享&#xff0c;介绍如何在Windows系统本地部署OpenUI&#xff0c…

linux从0到1——shell编程5

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…