kafka 的存储文件结构
Kafka 的存储文件结构是其高吞吐量和高效性能的关键部分。Kafka 的存储结构是围绕 日志(Log) 的设计展开的,而每个 Kafka 分区(Partition) 都会以日志文件的形式存储。Kafka 采用了顺序写入、分段存储和索引文件的机制,来确保高效的数据存储和读取。接下来,我们将详细介绍 Kafka 存储文件的组织结构和组成部分。
1. Kafka 存储目录结构
Kafka 的存储文件分布在每个 Broker 上,每个 Kafka Broker 都有一组数据目录(Log Directory)。这些目录包含了该 Broker 上的所有 Kafka topic 分区的数据。Kafka 中的存储结构主要由以下几个部分组成:
Kafka 存储路径结构:
/kafka├── logs├── topic_name│ ├── partition_0│ │ ├── 00000000000000000000.log│ │ ├── 00000000000000000000.index│ │ ├── 00000000000000000000.timeindex│ │ ├── 00000000000000000001.log│ │ └── 00000000000000000001.index│ └── partition_1│ ├── 00000000000000000000.log│ ├── 00000000000000000000.index│ ├── 00000000000000000000.timeindex│ └── 00000000000000000001.log└── topic_name2├── partition_0└── partition_1
2. Kafka 存储文件的主要组成部分
Kafka 通过将数据写入磁盘的方式来持久化消息数据,Kafka 的每个分区在物理磁盘上的存储通常包括以下几种文件类型:
1. .log 文件(消息日志文件)
- 每个分区的数据会存储在一个或多个
.log
文件中。 - 日志文件是 Kafka 存储消息的核心文件,它记录了消息的实际内容。Kafka 会将消息以追加的方式写入
.log
文件,并且这些文件按照时间顺序进行切分。消息在.log
文件中的存储是 不可修改的。 - 这些文件的大小是固定的,一旦某个
.log
文件达到一定大小(通常是 1GB),Kafka 会将新的消息写入新的.log
文件。
2. .index 文件(索引文件)
- 索引文件用于帮助 Kafka 快速定位日志文件中的消息位置。每个
.log
文件都有一个对应的.index
文件。 .index
文件记录了每条消息的偏移量(offset)和其在.log
文件中的物理位置。通过索引文件,Kafka 能够在不扫描整个日志文件的情况下,快速找到某个偏移量对应的消息位置。
3. .timeindex 文件(时间索引文件)
.timeindex
文件是为支持基于时间的高效查询而存在的。它记录了时间戳与消息偏移量之间的映射。- 对于 Kafka 来说,时间戳可以是消息的生产时间,消费者可以通过
timeindex
文件找到特定时间点的消息,避免了扫描整个日志文件,提高了时间相关查询的效率。
4. .log 文件的结构
- Kafka 中的每个日志文件是由一系列消息组成的,每条消息都有一个唯一的 偏移量(offset),它表示消息在日志中的位置。
- 每条消息不仅包含数据本身,还包括时间戳、消息头、偏移量等元数据。
3. Kafka 存储文件的工作原理
- Kafka 在写入消息时,首先将消息追加到当前的
.log
文件中。当文件大小达到配置的阈值时(通常是 1GB),Kafka 会创建一个新的.log
文件来存储新的消息。 - 顺序写入:Kafka 的存储结构设计中,所有的消息都按顺序追加写入文件。因为顺序写入能够最大化磁盘 I/O 性能,这也是 Kafka 高吞吐量的原因之一。
日志文件的生命周期:
- 写入阶段:Kafka 持续向
.log
文件中追加消息。这些消息首先通过Producer
写入,依赖 Kafka 的磁盘顺序写入来高效处理大量数据。 - 日志切分(Segment):一旦某个日志文件达到预定大小,Kafka 就会 切分日志文件,生成新的
.log
文件继续写入数据。每个新的日志文件(Segment)都会有一个新的 起始偏移量,确保消息的顺序性。 - 删除过期日志:Kafka 允许设置 消息保留策略,根据时间或大小删除过期的日志文件。Kafka 的日志清理机制有两种:
- 基于时间的清理:在一定时间内没有消费的日志会被删除。
- 基于大小的清理:根据磁盘占用的大小,删除较旧的日志。
4. 文件命名规范
- 日志文件命名:每个日志文件的名称是一个 递增的数字(例如
00000000000000000000.log
),这个数字代表了消息的偏移量。 - 索引文件命名:与
.log
文件对应的索引文件采用相同的前缀和编号,后缀为.index
(例如00000000000000000000.index
)。 - 时间索引文件命名:时间索引文件的命名与索引文件类似,后缀为
.timeindex
。
5. 日志清理与压缩(Log Compaction)
Kafka 支持两种日志清理模式:
- 删除日志(Log Deletion):当消息过期时,Kafka 会根据时间戳或磁盘空间来删除过期的日志文件。
- 日志压缩(Log Compaction):在这种模式下,Kafka 保留每个键的最新消息,删除旧的消息。适用于需要保持最新状态的应用场景(如用户信息或配置数据)。
稀疏索引
Kafka 的 索引文件(.index
文件) 和 时间索引文件(.timeindex
文件)都是采用 稀疏索引 的设计。
稀疏索引(Sparse Index)是指索引文件并不是对日志文件中的每一条消息都有索引,而是只对部分消息创建索引。这样做的好处是,可以减少索引的存储空间,并提高效率。与之相对的是 密集索引(Dense Index),即对日志文件中的每一条消息都有索引。
Kafka 中的索引结构
Kafka 中的索引是 稀疏的,每个分区的 .index
文件包含了日志文件中某些偏移量和消息位置的映射。具体来说:
- 日志文件和索引文件的关系:
- Kafka 的日志文件(
.log
)中存储的是实际的消息数据,每条消息都有一个唯一的偏移量(offset)。 - 为了提高查找效率,Kafka 会在 索引文件(
.index
)中存储部分消息的偏移量和它们在.log
文件中的位置。并不是每一条消息都会在索引文件中创建索引,而是按照一定的步长或间隔来做。
- Kafka 的日志文件(
- 稀疏索引的工作原理:
- 假设每 100 条消息创建一个索引条目,那么
.index
文件中就只会存储这些间隔位置的消息偏移量及其对应的文件位置。 - 当消费者需要查找某个特定偏移量的消息时,Kafka 会首先在索引文件中查找,并根据找到的偏移量,定位到
.log
文件中的具体位置。因为索引是稀疏的,查找过程需要扫描索引文件,但由于索引条目较少,扫描的成本通常是很低的。
- 假设每 100 条消息创建一个索引条目,那么
- 索引文件的组成:
- 每个索引文件由多个条目组成,每个条目包含两个主要部分:
- 消息的偏移量(Offset):该消息在分区内的唯一标识符。
- 消息在日志文件中的物理位置:该消息所在的
.log
文件中的偏移量,指示消息数据的具体位置。
- 每个索引文件由多个条目组成,每个条目包含两个主要部分:
- 为什么使用稀疏索引?
- 减少存储空间:如果对每条消息都创建索引,会极大增加存储的压力。稀疏索引通过只对部分消息进行索引,显著减少了索引的大小。
- 提高效率:在 Kafka 中,消息是按顺序写入的,顺序读取的效率很高。稀疏索引能够在保持良好性能的同时,减少内存和磁盘的占用。
- 性能优化:Kafka 的设计侧重于吞吐量和扩展性,稀疏索引帮助减少了不必要的索引存储负担,从而提升了整体的性能。
Kafka 时间索引文件的作用
Kafka 的时间索引文件的主要作用是为了 基于时间的消息查找。当你需要查询某个特定时间段内的消息时,Kafka 会通过时间索引来快速定位消息。这种设计对于按时间查询(例如根据消息的生产时间进行消费)非常有用。
为什么时间索引采用稀疏索引
与普通的偏移量索引(.index
文件)类似,时间索引文件的设计也是为了高效存储和快速查询,但因为时间索引文件不需要对每一条消息都进行索引,因此它也是 稀疏索引。每个时间索引文件包含的是某些时间戳和对应的消息偏移量之间的映射,并且这个映射并不是对每条消息都进行记录,而是只记录一部分关键的时间点。
时间索引文件的结构
- 记录时间戳和偏移量的映射:
- 时间索引文件中的每个条目包含两个主要部分:
- 时间戳:消息的时间戳,通常是生产者生产消息时的时间。
- 偏移量:该时间戳对应的消息在日志文件中的偏移量(即消息在
.log
文件中的位置)。
- 时间索引文件中的每个条目包含两个主要部分:
- 稀疏索引的设计:
- 并不是每一条消息都会在时间索引文件中进行索引,而是按照一定的时间间隔或某些关键时间点进行索引。例如,Kafka 可能每隔一段时间(如每秒、每分钟或每个消息块)就记录一个时间戳和对应的偏移量。
- 这种方式减少了时间索引文件的大小,因为它不需要为每一条消息都记录时间戳和偏移量,只记录特定的时间点(即 稀疏的时间戳)。
时间索引的使用场景
时间索引的设计对 基于时间的查询 特别有用。假设你想要消费某个特定时间点或时间范围内的消息,Kafka 可以通过时间索引快速定位到对应的消息偏移量,而不必扫描整个日志文件。
- 快速定位时间段的消息:假如你知道某个时间点范围内的消息,你可以通过时间索引文件找到对应的偏移量,然后直接读取
.log
文件中对应的消息。 - 按时间查询:消费者可以基于生产时间来消费消息,而不是仅仅依赖于消息的偏移量。通过时间索引,Kafka 能够更加高效地支持这类场景。
.timeindex 配合 .index 文件使用
.timeindex
文件 主要存储 时间戳和偏移量(offset) 的映射,它本身并不包含消息的实际内容,而是用于提供 基于时间戳的查询 能力。为了加速查询,**.timeindex
文件需要与 .index
文件 配合使用,因为 .timeindex
文件 只存储时间戳和偏移量的映射,而 .index
文件 存储偏移量和消息物理位置的映射。正是因为有了物理位置,才能加速查询,这也是 .index 文件存储偏移量和物理位置的原因。只存储偏移量也可以查找到消息,但是走的是全盘扫描,如果配合上物理位置,就可以走索引,加速查询。
.timeindex
文件的局限
- 不包含消息内容:
.timeindex
文件中只记录了 时间戳和偏移量 的映射关系。它的作用是帮助定位某个时间戳对应的偏移量,并不存储消息的实际内容。- 通过
.timeindex
文件,消费者可以根据时间戳找到相应的偏移量,但不能直接从.timeindex
文件中获取消息的内容。
- 需要与
.index
配合使用:.timeindex
文件只是提供了时间戳到偏移量的映射,但消费者要读取消息内容,仍然需要依赖.index
文件 来确定该偏移量所在的 物理位置。.index
文件通过存储 偏移量到日志文件字节位置 的映射,帮助消费者快速找到消息在日志文件中的物理位置。- 如果没有
.index
文件,即使找到了目标偏移量,消费者仍然需要顺序扫描日志文件来定位消息,这样就相当于“走过场”的全盘扫描,效率低下。
查询过程的优化
假设消费者需要根据某个 时间戳 来读取消息的内容,查询过程可以分为以下步骤:
- 通过
.timeindex
文件查找偏移量:- 消费者通过查询
.timeindex
文件,找到接近目标时间戳的偏移量。例如,timeindex
文件中可能存储了类似以下映射:时间戳 1625678410000 -> 偏移量 3500 时间戳 1625678520000 -> 偏移量 3600
- 通过这种方式,消费者能够高效地通过时间戳快速定位到目标的偏移量。
- 消费者通过查询
- 通过
.index
文件定位物理位置:- 一旦找到目标的 偏移量,消费者可以根据该偏移量去查找
.index
文件,进而定位消息在日志文件中的 物理位置(字节位置)。 .index
文件存储了偏移量到日志文件位置的映射,使得消费者可以直接跳转到目标位置,而不需要从头扫描整个日志文件。
- 一旦找到目标的 偏移量,消费者可以根据该偏移量去查找
- 读取消息内容:
- 最后,消费者直接读取该物理位置的消息内容,完成消费。
Kafka 消息的结构
Kafka 中的每条消息,通常包含以下几个部分:
- CRC(4 bytes)
- CRC(Cyclic Redundancy Check) 是用来校验消息数据完整性的一种技术。它用于确保消息在传输或存储过程中没有被篡改。
- 4 个字节用于存储该消息的 CRC 校验码。发送方计算消息内容(包括键、值、头部信息等)的 CRC 校验值,并将其附加到消息中,接收方在接收到消息后,使用相同的算法进行校验,确保消息的完整性。
- Metadata(通常包含消息的键、时间戳和其他元数据)
- Metadata 通常包括了消息的一些附加信息,比如:
- Key(可选):消息的键。消息的键用于决定消息发送到哪个分区(Kafka 中是通过键来做分区的),如果没有设置键,Kafka 会使用轮询等策略将消息分配到不同的分区。
- Timestamp(可选):消息的时间戳。这个时间戳通常是在生产者发送消息时生成的。
- Headers(可选):一些额外的自定义元数据(键值对),可以携带用户自定义的消息属性。
- Kafka 中 Metadata 的具体内容可能包括但不限于这些字段,具体取决于消息的构造和使用场景。
- Metadata 通常包括了消息的一些附加信息,比如:
- Payload(消息内容)
- Payload 是消息的实际数据内容,即生产者发送的消息的主体部分。它是应用程序传递的核心数据,通常是 JSON、Avro、Protobuf 等格式的序列化数据。
- 在 Kafka 消息的存储中,
Payload
可能并不局限于某种特定的数据格式,而是存储了一个 字节数组,消费者可以根据实际需求进行反序列化。
结构图(更详细版本)
根据上述分析,Kafka 消息结构大致如下:
+--------------------+------------------+---------------------------+
| CRC (4 bytes) | Metadata (varies) | Payload (message data) |
+--------------------+------------------+---------------------------+
- CRC(4 bytes) 用于数据校验。
- Metadata 包含键(Key)、时间戳、消息头等元数据。消息头部分可能是可选的,不同版本的 Kafka 在这部分的格式上也有些许差异。
- Payload 是消息的实际数据内容。
具体示例
假设我们有一个简单的消息,包含以下内容:
- Key:
userID
- Timestamp:
1625678410000
(表示某个时间点) - Payload:
{"event": "login", "user": "john_doe"}
Kafka 会按以下方式组织消息:
- CRC:计算整个消息内容的 CRC 校验码(包括 Key、Timestamp 和 Payload)。
- Metadata:会包含
Key
和Timestamp
,还有可能会有自定义的 Headers。 - Payload:是
{"event": "login", "user": "john_doe"}
,即消息的数据内容。
总结
- CRC 是用来校验消息是否被篡改。
- Metadata 包括消息的键(可选)、时间戳(可选)、头部信息(可选)等元数据。
- Payload 是消息的实际数据内容,通常是字节数据,可以根据应用需求进行序列化和反序列化。
总结
Kafka 的存储文件结构设计是其高吞吐量、高可靠性的关键。Kafka 的每个分区都对应一组 .log
文件、.index
文件和 .timeindex
文件,确保消息的顺序性和高效查询。每个分区的日志文件按顺序追加写入,采用了日志切分、索引和压缩等机制来保证存储效率和可扩展性。
- 日志(.log 文件):存储消息内容;
- 索引(.index 文件):帮助快速定位消息;
- 时间索引(.timeindex 文件):用于基于时间的查询;
- 清理策略:通过删除过期日志或日志压缩来管理存储空间。
这些文件和机制让 Kafka 能够处理大量的消息流,同时保证高效的读写和可靠性。
相关文章:
kafka 的存储文件结构
Kafka 的存储文件结构是其高吞吐量和高效性能的关键部分。Kafka 的存储结构是围绕 日志(Log) 的设计展开的,而每个 Kafka 分区(Partition) 都会以日志文件的形式存储。Kafka 采用了顺序写入、分段存储和索引文件的机制…...
FAISS原理深度剖析与LLM检索分割难题创新解决方案
一、FAISS核心技术解构:突破传统检索的次元壁 1.1 高维空间的降维艺术 FAISS(Facebook AI Similarity Search)通过独创的Product Quantization(乘积量化)技术,将高维向量空间切割为多个正交子空间。每个子…...
Windows操作系统安全配置(一)
1.操作系统和数据库系统管理用户身份标识应具有不易被冒用的特点,口令应有复杂度要求并定期更换 配置方法:运行“gpedit.msc”计算机配置->Windows设置->安全设置>帐户策略->密码策略: 密码必须符合复杂性要求->启用 密码长度最小值->…...
JavaScript promise实例——通过XHR获取省份列表
文章目录 需求和步骤代码示例效果 需求和步骤 代码示例 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><!-- 确保IE浏览器使用最新的渲染引擎 --><meta http-equiv"X-UA-Compatible" conten…...
【力扣hot100题】(065)搜索旋转排序数组
难点在于情况真的很多需要逐一判断,画个走向图再写判断条件就行了。 还有处理边界条件也比较麻烦。 class Solution { public:int search(vector<int>& nums, int target) {int left0;int rightnums.size()-1;while(left<right){int mid(leftright)/…...
毕设论文的分类号与UDC查询的网站
毕业论文分类号 中图分类号查询链接 找到自己的细分类,一个一个点就好,然后就找到了 毕业论文UDC UDC查询...
pyqt5实现多个窗口互相调用
使用以下代码可以实现多窗口之间的相互调用: import sys from PyQt5.QtWidgets import QApplication, QMainWindow import win0, win1, win2, win3 # 分别包含 Ui_win0 和 Ui_win1class Win0Window(QMainWindow, win0.Ui_win0):def __init__(self, x, parentNone)…...
Python基于Django的企业it资产管理系统(附源码,文档说明)
博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇dz…...
浅谈在HTTP中GET与POST的区别
从 HTTP 报文来看: GET请求方式将请求信息放在 URL 后面,请求信息和 URL 之间以 ?隔开,请求信息的格式为键值对,这种请求方式将请求信息直接暴露在 URL 中,安全性比较低。另外从报文结构上来看,…...
计算机视觉5——运动估计和光流估计
一、运动估计 (一)运动场(Motion Field) 定义与物理意义 运动场是三维场景中物体或相机运动在二维图像平面上的投影,表现为图像中每个像素点的运动速度矢量。其本质是场景点三维运动(平移、旋转、缩放等&a…...
8. RabbitMQ 消息队列 + 结合配合 Spring Boot 框架实现 “发布确认” 的功能
8. RabbitMQ 消息队列 结合配合 Spring Boot 框架实现 “发布确认” 的功能 文章目录 8. RabbitMQ 消息队列 结合配合 Spring Boot 框架实现 “发布确认” 的功能1. RabbitMQ 消息队列 结合配合 Spring Boot 框架实现 “发布确认” 的功能1.1 回退消息 2.备用交换机3. API说…...
铰链损失函数 Hinge Loss和Keras 实现
一、说明 在为了了解 Keras 深度学习框架的来龙去脉,本文介绍铰链损失函数,然后使用 Keras 实现它们以进行练习并了解它们的行为方式。在这篇博客中,您将首先找到两个损失函数的简要介绍,以确保您在我们继续实现它们之前直观地理解…...
【Tips】Cloudflare用户与网站之间的中介
Cloudflare是一家提供多种网络服务的公司,旨在帮助网站和应用程序提高性能、安全性和可靠性。它为全球网站、应用程序和网络提供一系列网络安全、性能优化和可靠性服务。Cloudflare 的核心使命是让互联网更加安全、快速和可靠。 以下是其主要服务介绍:…...
PDF 转图片,一行代码搞定!批量支持已上线!
大家好,我是程序员晚枫。今天我要给大家带来一个超实用的功能——popdf 现在支持 PDF 转图片了,而且还能批量操作!是不是很激动?别急,我来手把手教你玩转这个功能。 1. 一行代码搞定单文件转换 popdf 的核心就是简单暴…...
可以使用费曼学习法阅读重要的书籍
书本上画了很多线,回头看等于没画出任何重点。 不是所有的触动都是有效的。就像你曾经看过很多好文章,当时被触动得一塌糊涂,还把它们放进了收藏夹,但一段时间之后,你就再也记不起来了。如果让你在一本书上画出令自己…...
基于Flask的笔记本电脑数据可视化分析系统
【Flask】基于Flask的笔记本电脑数据可视化分析系统(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统采用Python语言进行编写,以Flask为后端框架,利用Echarts实现数…...
JavaScript基础--17-数组的常见方法
数组的方法清单 数组的类型相关 方法描述备注Array.isArray()判断是否为数组toString()将数组转换为字符串Array.from(arrayLike)将伪数组转化为真数组Array.of(value1, value2, value3)创建数组:将一系列值转换成数组 注意,获取数组的长度是用length…...
TDengine 从入门到精通(2万字长文)
第一章:走进 TDengine 的世界 TDengine 是个啥? 如果你首次接触 TDengine,心里可能满是疑惑:这究竟是个什么东西,能派上什么用场?简单来讲,TDengine 是一款开源、高性能且云原生的时序数据库&…...
ctfshow VIP题目限免(前10题)
目录 源码泄露 前台JS绕过 协议头信息泄露 robots后台泄露 phps源码泄露 源码压缩包泄露 版本控制泄露源码 版本控制泄露源码2 vim临时文件泄露 cookie泄露 源码泄露 根据题目提示是源代码泄露,右键查看页面源代码发现了 flag 前台JS绕过 发现右键无法使用了&…...
PyTorch中的各种损失函数的详细解析与通俗理解!
目录 1. 前言 2. 回归任务中的损失函数 2.1 L1损失(Mean Absolute Error, MAE) 2.2 平方损失(Mean Squared Error, MSE) 2.3 平滑L1损失(Smooth L1 Loss) 3. 分类任务中的损失函数 3.1 交叉熵损失&a…...
leetcode53-最大子数组和
leetcode 53 思路 本题使用贪心算法,核心在于对每一个元素进行遍历,在遍历过程里,持续更新当前的子数组和以及最大子数组和 假设 sum 是当前的子数组和,max 是到目前为止最大的子数组和遍历数组时,计算每个位置的当…...
解决Long类型前端精度丢失和正常传回后端问题
在 Java 后端开发中,可能会遇到前后端交互过程中 Long 类型精度丢失的问题。尤其是在 JavaScript 中,由于其 Number 类型是双精度浮点数,超过 16 位的 Long 类型值就会发生精度丢失。 问题背景 假设有如下实体类: public class…...
Green Coding规范:从循环语句到数据库查询的节能写法
本文系统化阐述绿色编码的工程实践方案,通过重构循环控制结构、优化集合操作范式、改进数据库访问模式三大技术路径,实现典型业务系统降低28.6%的CPU指令周期消耗。基于对JVM和SQL解释器的指令级分析,提出循环展开的黄金分割法则、位图索引加…...
Spring Boot整合Elasticsearch
摘要:本文手把手教你如何在Spring Boot项目中整合Elasticsearch(ES),并实现基本的CRUD与搜索操作。包含版本选择、配置、代码示例及常见问题解决。 一、环境准备 1.1 软件版本 Spring Boot: 3.xElasticsearch: 8.x(推…...
2025年渗透测试面试题总结- 某四字大厂面试复盘扩展 一面(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 某四字大厂面试复盘扩展 一面 一、Java内存马原理与查杀 二、冰蝎与哥斯拉原理对比(技术演…...
java基础自用笔记:文件、递归、常见的字符集、IO流
文件 递归 递归文件夹寻找某个文件,要先判断是否有权限进入文件夹(若无权限返回null)然后再判断文件数量是否不为0 常见的字符集 IO流 字节流 文件字节输入流 当读取到最后一个字节的时候,装在buffer[0]中,如果后面没…...
关于计算机网络的一些疑问
目录 1. HTTP/1.x 中的“队头阻塞”(Head-of-Line Blocking)问题解释什么是队头阻塞?其他相关概念: 2. HPACK 算法是什么?HPACK 的作用:HPACK 的特点:HPACK 提升性能的原因: 3. 如何…...
超大规模数据场景(思路)——面试高频算法题目
目录 用4KB内存寻找重复元素 从40个亿中产生不存在的整数【位】 如果只让用10MB空间存储? 初次遍历 二次遍历 用2GB内存在20亿个整数中查找出现次数最多的数【分块】 从亿万个URL中查找问题【分块 堆】 40亿个非负整数中找出现两次的数【位 不过多个位哈】 …...
高级:性能优化面试题深度剖析
一、引言 在Java应用开发中,性能优化是确保系统高效运行的关键。面试官通过相关问题,考察候选人对性能优化的理解和实践经验。本文将深入探讨Java应用性能优化的方法,包括JVM调优、数据库优化等,结合实际开发场景,帮助…...
【软件】在 macOS 上安装和配置 Apache HTTP 服务器
在 macOS 上安装 Apache HTTP 服务器的步骤: 1.安装 Apache HTTP 服务器 macOS 系统可能已经预装了 Apache HTTP 服务器。你可以通过终端检查它是否已经安装: httpd -v如果系统提示command not found,说明 Apache 未安装。你可以通过 Home…...
数据结构之链表
定义:在计算机科学中,链表是数据元素的线性集合,其每个元素都指向下一个元素,元素存储上并不连续。 链表分类:单向链表(每个元素知道下一个元素是谁)、双向链表(每个元素知道其上一…...
基于Python的懂车帝汽车数据爬虫分析与可视化系统
【Python】基于Python的懂车帝汽车数据爬虫分析与可视化系统 (完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 🚗🔥【视频简介】🔥🚗 大家好&…...
setInterval问题以及前端如何实现精确的倒计时
一、为什么setInterval不能实现 原因有两:1、js是单线程,基于事件循环执行其他任务(这里建议读者可以多去了解一下浏览器线程与事件循环相关知识) 2、setinterval是每隔delay时间,把逻辑放到任务队列中,而…...
Python爬虫教程010:使用scrapy爬取当当网数据并保存
文章目录 3.6 爬取当当网数据3.6.1 创建项目3.6.2 查找要爬取的数据对象3.6.3 保存数据3.6 爬取当当网数据 3.6.1 创建项目 【1、创建项目】: scrapy startproject scrapy_dangdang_095【2、创建爬虫文件】 cd scrapy_dangdang_095\scrapy_dangdang_095\spiders scrapy ge…...
达芬奇预设:复古16mm胶片质感老式电影放映机转场过渡+音效
达芬奇预设:复古16mm胶片质感老式电影放映机转场过渡音效 特征: DaVinci Resolve 宏 8 过渡 幻灯片投影仪效果 可在任何帧速率和分辨率下工作 教程包括 系统要求: 达芬奇 Resolve 18.0...
Spring MVC 的请求处理流程是怎样的?
Spring MVC 请求处理流程的大致可分为以下几个步骤: 1. 请求到达 DispatcherServlet: 所有请求首先到达 DispatcherServlet(前端控制器)。DispatcherServlet 是 Spring MVC 的核心,它负责接收请求,并将请求委派给其他…...
PyTorch 实现图像版多头注意力(Multi-Head Attention)和自注意力(Self-Attention)
本文提供一个适用于图像输入的多头注意力机制(Multi-Head Attention)PyTorch 实现,适用于 ViT、MAE 等视觉 Transformer 中的注意力计算。 模块说明 输入支持图像格式 (B, C, H, W)内部转换为序列 (B, N, C),其中 N H * W多头注…...
STM32单片机入门学习——第17节: [6-5] TIM输入捕获
写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做! 本文写于:2025.04.06 STM32开发板学习——第17节: [6-5] TIM输入捕获 前言开发板说明引用解答和科普一…...
P8819 [CSP-S 2022] 星战 Solution
Preface 不可以,总司令 的来源. Description 给定一张 n n n 点 m m m 边的有向图 G G G,有 q q q 次操作分四种: 1 u v:使边 u → v u\to v u→v 失活.2 u:使点 u u u 的所有入边失活.3 u v:使边…...
【spring02】Spring 管理 Bean-IOC,基于 XML 配置 bean
文章目录 🌍一. bean 创建顺序🌍二. bean 对象的单例和多例❄️1. 机制❄️2. 使用细节 🌍三. bean 的生命周期🌍四. 配置 bean 的后置处理器 【这个比较难】🌍五. 通过属性文件给 bean 注入值🌍六. 基于 X…...
Llama 4架构解析与本地部署指南:MoE模型在170亿参数下的效率突破
Meta最新发布的Llama 4系列标志着开源大语言模型(LLM)的重大演进,其采用的混合专家(MoE)架构尤为引人注目。 两大核心模型——Llama 4 Scout(170亿参数含16专家)和Llama 4 Maverick(170亿参数含128专家)——展现了Meta向高效能AI模型的战略转型,这些模型在挑战传统扩…...
`docker run --restart no,always,on-failure,unless-stopped`笔记250406
docker run --restart no,always,on-failure,unless-stopped 笔记250406 docker run --restart 用于配置容器的自动重启策略,当容器意外退出时,Docker 会根据策略自动重新启动容器。这是确保服务高可用的重要参数。 语法 docker run --restart <策略…...
stl的VS的string的内部实现,引用计数的写实拷贝,编码
本章目标 1.stl的vs的string的内部实现 2.引用计数的写实拷贝 3.编码 1.stl的string的内部实现 我们先来看一个例子 string s1; cout<<sizeof(s1)<<endl;我们知道类的内存管理也是遵循内存对齐的规则的. 我们假设当前机器的环境是32位的.string类的内部有三个成…...
Docker 从入门到进阶 (Win 环境) + Docker 常用命令
目录 引言 一、准备工作 1.1 系统要求 1.2 启用虚拟化 二、安装Docker 2.1 安装WSL 2 2.2 安装Docker Desktop 2.3检查是否安装成功 三、配置Docker 3.1 打开Docker配置中心 四、下载和管理Docker镜像 4.1 拉取镜像 4.2 查看已下载的镜像 4.3 运行容器 4.4 查看正…...
C# Winform 入门(12)之制作简单的倒计时
倒计时效果展示 控件展示 以下均是使用label来形成的 label 的 BorderStyle:Fixed3D ForeColor:Red Blackground:Black label 的属性 Name: txtyear txtmonth txtday txttime txtweek txtDays txtHour txtM…...
基于springboot+vue的漫画天堂网
开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…...
leetcode每日一题:最大整除子集
题目 368. 最大整除子集 给你一个由 无重复 正整数组成的集合 nums ,请你找出并返回其中最大的整除子集 answer ,子集中每一元素对 (answer[i], answer[j]) 都应当满足: answer[i] % answer[j] 0 ,或 answer[j] % answer[i] …...
【Unity】animator检测某state动画播放完毕方法
博主对动画系统很不熟,可能使用的方法比较曲折,但是我确实没找到更有效的方法了。 unity的这个animator在我看来简直有毛病啊,为什么那么难以获取某状态动画的信息呢??? 想要知道动画播完没有只有用norma…...
玄机-应急响应-webshell查杀
题目要求: 要求获取四个flag webshell查杀: 常见的webshell: PHP: eval(), system(), exec(), shell_exec(), passthru(), assert(), base64_decode() ASP: Execute(), Eval(), CreateObject() JSP: Runtime.getRuntime().exec() websh…...
小菜Go:Ubuntu下Go语言开发环境搭建
前置要求Ubuntu环境搭建 文章推荐 此处推荐一个比较好的文章,基本按部就班就欧克~ 安装虚拟机(VMware)保姆级教程(附安装包)_vmware虚拟机-CSDN博客 安装可能遇到的问题 虚拟机安装遇到的问题如:Exception…...