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

【kafka系列】日志存储设计 消息写入、读取

目录

日志存储设计

1. 日志存储的目录结构

2. 日志内容格式设计

3. 日志索引设计

4. 设计优势

消息写入流程

示例

流程图

消息读取流程

示例

关键设计细节

流程图


日志存储设计

Kafka的日志存储是其高吞吐、持久化能力的核心设计,其结构包含目录组织消息格式索引设计三部分。


1. 日志存储的目录结构
  • 分区目录:每个Topic分区对应一个目录,命名格式为<topic>-<partition>,例如orders-0
  • Segment文件:每个分区目录下包含多个日志段(Segment),每个段由两个文件组成:
    • .log文件:存储实际消息(如00000000000000000000.log),文件名基于基准位移(Base Offset),即该段第一条消息的Offset。
    • .index文件:稀疏索引文件(如00000000000000000000.index),记录Offset到物理位置的映射。
  • 活跃段(Active Segment):当前正在写入的Segment,文件名格式为<nextOffset>.log,例如新段的第一条消息Offset为100,则文件名为00000000000000000100.log

源码关键类

  • Log:管理分区的所有Segment(ConcurrentNavigableMap<Long, LogSegment>)。
  • LogSegment:封装单个Segment的.log和.index文件操作。

2. 日志内容格式设计

Kafka消息以**批次(RecordBatch)**为单位存储,每个批次包含多条消息,减少I/O开销。单条消息格式如下:

RecordBatch Header:Base Offset (int64)Length (int32)Partition Leader Epoch (int32)Magic (int8)CRC (int32)Attributes (int16)Last Offset Delta (int32)First Timestamp (int64)Max Timestamp (int64)Producer ID (int64)Producer Epoch (int16)Base Sequence (int32)Records Count (int32)Record (多条):Length (varint)Attributes (int8)Timestamp Delta (varint)Offset Delta (varint)Key (varint bytes)Value (varint bytes)Headers (varint array)

特点

  • 紧凑二进制格式:通过变长类型(varint)和位移差值(Delta)压缩空间。
  • 批量写入:多个Record打包成RecordBatch,减少网络和磁盘I/O。
  • 幂等与事务支持:通过Producer IDEpochSequence字段实现。

3. 日志索引设计
  • 稀疏索引(Sparse Index):.index文件不记录每条消息的Offset,而是每隔一定消息量(如4KB)记录一个索引项。
  • 索引项结构:每个索引项占8字节,包含两个字段:
    • Relative Offset:相对于基准位移的差值(4字节)。
    • Physical Position:对应.log文件中的物理位置(4字节)。

索引查询流程(源码见OffsetIndex类):

  1. 根据目标Offset,通过二分查找找到最近的索引项。
  2. 从.log文件的对应位置开始顺序扫描,直到找到目标消息。

4. 设计优势
  • 高效查询:稀疏索引+顺序扫描平衡了索引大小与查询速度。
  • 快速扩容:Segment文件按基准Offset分割,易于清理旧数据和扩展新文件。
  • 高吞吐:批量写入、页缓存、零拷贝等技术最大化磁盘和网络效率。

通过这种设计,Kafka在保证消息持久化的同时,实现了百万级TPS的吞吐能力。


消息写入流程

示例

生产者发送一条消息{"order_id": 1001}到Topic orders的Partition 0。

写入流程

  1. 选择分区:根据Partitioner确定消息写入orders-0
  2. 追加到活跃段
    • Broker将消息封装为RecordBatch,追加到当前活跃段(如00000000000000001000.log)。
    • 更新对应的索引文件00000000000000001000.index(每隔4KB或一定时间写入索引项)。
  1. 刷盘策略:根据log.flush.interval.messageslog.flush.interval.ms决定何时将数据从页缓存刷到磁盘。

源码关键方法

  • Log.append():处理消息追加。
  • LogSegment.append():写入.log文件并更新索引。

流程图


消息读取流程

示例

消费者请求读取Offset为1005的消息。

1. 消费者发送FetchRequest:请求包含目标Topic、Partition和Offset(例如Offset=1005)。
2. Broker验证Offset有效性

  • 检查Offset是否在LogStartOffset(日志起始位移)和HighWatermark(已提交消息的最大位移)之间。
  • 若Offset无效(如小于LogStartOffset或大于HighWatermark),返回错误OFFSET_OUT_OF_RANGE
  1. 定位Segment文件
    • Broker根据Offset值,在分区的Log对象中通过二分查找找到对应的LogSegment
    • 具体逻辑:在LogSegments(一个有序的ConcurrentNavigableMap)中调用floorEntry(Offset),找到基准Offset ≤ 目标Offset的Segment。
    • 示例:Offset=1005 → 找到基准Offset=1000的Segment(文件00000000000000001000.log)。
  1. 加载索引文件
    • 打开对应Segment的.index文件(稀疏索引),通过内存映射(MappedByteBuffer)加载到内存。
  1. 解析Offset并查询索引
    • 计算相对Offset目标Offset - 基准Offset(如1005 - 1000 = 5)。
    • .index文件中二分查找最接近且≤相对Offset的索引项。
    • 示例:索引项可能为[4 → 4096](相对Offset=4,对应.log文件的物理位置4096字节)。
  1. 定位消息物理位置
    • 根据索引项中的物理位置(4096),从.log文件的该位置开始顺序扫描
    • 逐条解析消息头中的Offset,直到找到目标Offset=1005的消息。
  1. 操作系统缓存与文件缓存
    • 页缓存(Page Cache):Kafka依赖操作系统的页缓存机制,.log.index文件会被缓存到内存,后续读取直接从内存访问,避免磁盘I/O。
    • 内存映射(Memory-Mapped Files):索引文件通过MappedByteBuffer映射到内存,加速索引查询。
  1. 返回消息数据
    • 将找到的消息数据封装为FetchResponse返回给消费者,消息内容可能直接从页缓存中读取(零拷贝优化)

关键设计细节

1. Offset解析与索引查询

  • 相对Offset计算
    索引文件中存储的是相对于Segment基准Offset的差值(如基准Offset=1000,索引项中的相对Offset=5 → 实际Offset=1005)。
  • 稀疏索引优化
    索引文件仅记录部分Offset(如每隔4KB),通过二分查找快速定位到近似位置,再顺序扫描少量数据。

2. 文件定位与缓存机制

  • Segment文件定位
    LogSegments使用ConcurrentNavigableMap维护所有Segment,floorEntry(Offset)方法通过跳表(Skip List)快速查找。
  • 操作系统缓存
    • 页缓存:Kafka的.log文件读写完全依赖操作系统的页缓存,消息读取时直接从内存访问,避免磁盘寻址。
    • 内存映射文件:.index文件通过FileChannel.map()映射到内存,索引查询几乎无磁盘I/O。

3. 顺序扫描优化

  • 批量读取:从.log文件的物理位置开始,按块(如8KB)读取数据,减少小文件I/O次数。
  • 零拷贝(Zero-Copy)
    消息数据通过FileChannel.transferTo()直接从页缓存发送到网络Socket,无需经过用户态(源码见FileRecords.writeTo())。

流程图


 


相关文章:

【kafka系列】日志存储设计 消息写入、读取

目录 日志存储设计 1. 日志存储的目录结构 2. 日志内容格式设计 3. 日志索引设计 4. 设计优势 消息写入流程 示例 流程图 消息读取流程 示例 关键设计细节 流程图 日志存储设计 Kafka的日志存储是其高吞吐、持久化能力的核心设计&#xff0c;其结构包含目录组织、…...

Python实现语音识别详细教程【2025】最新教程

文章目录 前言一、环境搭建1. 下载 Python2. 安装 Python3 使用 pip 安装必要的库 二、使用 SpeechRecognition 库进行语音识别1.识别本地音频文件2.实时语音识别3. 使用其他语音识别引擎 注意事项 前言 以下是一份较为完整的 Python 语音识别教程&#xff0c;涵盖环境搭建、使…...

【一文读懂】HTTP与Websocket协议

HTTP协议 概述 HTTP (Hypertext Transfer Protocol)&#xff0c;即超文本传输协议&#xff0c;是一种用于在客户端和服务器之间传输超文本&#xff08;例如网页、图片、音频、视频等&#xff09;的通信协议。它是万维网&#xff08;WWW&#xff09;的基础&#xff0c;负责在浏…...

SpringBoot+微信小程序+数据可视化的宠物到家喂宠服务(程序+论文+讲解+安装+调试+售后等)

感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望帮助更多的人。 系统介绍 在经济高速发展、物质生活极大丰富的当下&#xff0c;人们的精神需求愈发凸显&#xff0…...

Windows逆向工程入门之堆栈结构与信息获取

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 1. 堆栈结构基础 堆栈的主要操作&#xff1a; 2. 代码功能解析 2.1 加载 ntdll.dll 2.2 获取 NtQueryInformationThread 函数指针 2.3 调用 NtQueryInformationThread 获取线程信息…...

springboot项目如何部署到tomcat中

1、使用springboot内部嵌入的tomcat 可以改一些tomcat的参数 2、可以把springboot项目打包为war包&#xff0c;然后部署到tomcat中去 Spring Boot 默认使用嵌入式 Tomcat 作为其 Web 容器&#xff0c;这使得 Spring Boot 应用可以作为一个独立的 JAR 文件运行。这种嵌入式服务…...

C语言之easyX

目录 概要 easyX整体架构 图形绘制 画布宽高 圆形 图片的贴图 加载图像 游戏框架 概要 easyX是一个轻量级的图形库&#xff0c;用于在Windows平台上进行简单的2D图形绘制。它提供了一组简单易用的函数&#xff0c;可以方便地绘制基本的图形元素&#xff0c;如线条、矩形、圆形…...

es6箭头函数和普通函数的区别

在JavaScript中&#xff0c;函数是执行特定任务的代码块。函数可以被定义并且随后被调用。JavaScript中有两种主要的函数定义方式&#xff1a;普通函数声明和箭头函数表达式。下面是这两种函数的定义方式及其区别和使用场景&#xff1a; 普通函数声明 普通函数可以通过函数声明…...

DeepSeek R1 32B 本地部署实战

#DeepSeek# DeepSeek是一款基于人工智能的智能助手&#xff0c;专为提升工作效率和信息获取能力而设计。它结合了自然语言处理、机器学习和大数据技术&#xff0c;能够快速理解用户需求并提供精准的答案或解决方案。 DeepSeek的核心功能 智能问答 DeepSeek可以回答各种问题&…...

八、SPI读写XT25数据

8.1 SPI 简介 SPI&#xff08;Serial Peripheral Interface&#xff0c;串行外设接口&#xff09;是一种同步串行通信协议&#xff0c;广泛用于嵌入式系统中连接微控制器与外围设备&#xff0c;如传感器、存储器、显示屏等。 主要特点 1. 全双工通信&#xff1a;支持同时发送…...

AIP-145 范围

编号145原文链接AIP-145: Ranges状态批准创建日期2020-05-28更新日期2020-05-28 服务通常需要表示具体值或连续值的范围。这些范围的含义存在诸多差异&#xff0c;也存在许多数据类型&#xff1a;整数、浮点数、时间戳等&#xff08;在此仅举几例&#xff09;。根据所讨论范围…...

(学习总结24)Linux 基本命令2

Linux 基本命令2 操作文件或目录命令更改文件或目录访问权限命令 chmod修改文件的所有者和所属组命令 chown修改文件或目录的所属组命令 chgrp更改文件或目录的属性命令 chattr创建文件和目录时的默认权限掩码命令 umask判断文件类型命令 file显示文件或文件系统状态命令 stat树…...

WPF-数据转换器

一、单值转换器 1.不传参数 转换器 当Value值大于100时返回红色 public class DataConverter : IValueConverter{/// <summary>/// 表示从源到目标数据转换/// </summary>/// <param name"value">数据源的值</param>/// <param name&q…...

STM32 I2C通信协议说明

目录 背景 I2C协议 数据的有效性 I2C通信开始和停止条件 I2C数据传输 发送 响应 正常情况&#xff1a; 异常情况&#xff1a; 主机结束接收 写寄存器的标准流程 读寄存器的标准流程 仲裁机制 时钟同步 SDA线的仲裁 程序 背景 对单片机的三大通信中的I2C通信进…...

网络工程师 (42)IP地址

一、定义与功能 IP地址是IP协议提供的一种统一的地址格式&#xff0c;它为互联网上的每一个网络和每一台主机分配一个逻辑地址&#xff0c;以此来屏蔽物理地址的差异。这种地址分配方式确保了用户在连网的计算机上操作时&#xff0c;能够高效且方便地从众多计算机中选出自己所需…...

Deepseek实用万能提问模板

一&#xff0c;背景需求约束条件 背景:提供与问题相关的时间、地点、人物、事件等信息&#xff0c;帮助 DeepSeek 更好地理解问题的情境。 需求:清晰明确地阐述你希望 DeepSeek完成的任务或提供的信息。 约束条件:可根据具体情况&#xff0c;对回答的范围、格式、字数等进行…...

强化学习笔记7——DDPG到TD3

前提&#xff1a;基于TD 的方法多少都会有高估问题&#xff0c;即Q值偏大。原因两个&#xff1a;一、TD目标是真实动作的高估。 二&#xff1a;自举法高估。 DDPG 属于AC方法&#xff1a;异策略&#xff0c;适合连续动作空间&#xff0c;因为他的策略网络直接输出的动作&#…...

传统混合专家模型MoE架构详解以及python示例(DeepSeek-V3之基础)

我们已经了解到DeepSeek-V3的框架结构基于三大核心技术构建:多头潜在注意力(MLA)、DeepSeekMoE架构和多token预测(MTP)。而DeepSeekMoE架构的底层模型采用了混合专家模型(Mixture of Experts,MoE)架构。所以我们先了解一下传统混合专家模型MoE架构。 一、传统混合专家模…...

开源协议深度解析:理解MIT、GPL、Apache等常见许可证

目录 前言1. MIT协议&#xff1a;自由而宽松的开源许可1.1 MIT协议的主要特点1.2 MIT协议的适用场景 2. GPL协议&#xff1a;自由软件的捍卫者2.1 GPL协议的核心理念2.2 GPL协议的适用场景 3. Apache License 2.0&#xff1a;开源与专利保护的平衡3.1 Apache License 2.0的主要…...

三维重建(十二)——3D先验的使用

文章目录 零、最近感受和前言一、使用能够快速得到重建初始化的方法1.1 Colmap(多视角)1.2 深度估计(单视角)二、已知形状模板2.1 人脸2.2 人体2.3 动物三、刚性与非刚性约束(变形约束)3.1 刚性变形3.2 非刚性变形四、统计(深度学习)先验——从大量(3D)数据中提取信息…...

Java项目《苍穹外卖》BUG修复记录

一、订单详情地址显示为null 原因&#xff1a;查看订单详情接口中&#xff0c;未设置收货地址信息&#xff0c;故地址返回为null。 解决方案&#xff1a; 1、OrderServiceImpl中创建一个私有方法专门获取订单收货地址 /*** 获取订单收获地址* param addressBookId* return*/…...

DockerDesktop更改默认的磁盘镜像地存储位置

DockerDesktop更改默认的磁盘镜像地存储位置 文章目录 DockerDesktop更改默认的磁盘镜像地存储位置1. 默认存储位置2. 新建一个目录3. 将磁盘镜像存储位置改为新建的目录下 1. 默认存储位置 2. 新建一个目录 如&#xff1a;D:\DiskImagelocationData 3. 将磁盘镜像存储位置改为…...

阿里云视频点播,基于thinkphp8上传视频

前端参考官方示例(jQuery版) <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>阿里云 JavaScript上传SDK Demo (使用jquery)</title><script src"__STATIC__/jquery.min.js"></script><sc…...

C# windowForms 的DataGridView控件的使用

C# Windows Forms DataGridView 控件使用详解 DataGridView 是 Windows Forms 中用于显示和编辑表格数据的核心控件。它支持高度自定义的列类型、数据绑定、事件处理和丰富的样式配置。以下是其详细使用方法。 目录 基础使用 数据绑定 列类型与自定义...

【NLP 22、语言模型 language model】

有时候我也想听听&#xff0c;我在你心里&#xff0c;是什么样子 —— 25.1.12 一、什么是语言模型 语言是灵活的&#xff0c;也是有规律的 了解一门语言的人可以判断一句话是否“合理” 通俗来讲&#xff0c;语言模型用来评价一句话(句子可以看作是字的组合)是否“合理”或…...

vtkCamera类的Dolly函数作用及相机拉近拉远

录 1. 预备知识 1.1.相机焦点 2. vtkCamera类的Dolly函数作用 3. 附加说明 1. 预备知识 要理解vtkCamera类的Dolly函数作用,就必须先了解vtkCamera类表示的相机的各种属性。  VTK是用vtkCamera类来表示三维渲染场景中的相机。vtkCamera负责把三维场景投影到二维平面,如…...

2025 N1CTF crypto 复现

近一个月都没有学习了&#xff0c;一些比赛也没有打&#xff0c;很惭愧自己还是处在刚放假时的水平啊&#xff0c;马上开学了&#xff0c;抓紧做一些训练来康复。 CheckIn import os from Crypto.Util.number import * from secret import FLAGp, q getPrime(512), getPrime…...

大模型开发实战篇5:多模态--文生图模型API

大模型文生图是一种基于人工智能大模型的技术&#xff0c;能够将自然语言文本描述转化为对应的图像。目前非常火的AI大模型赛道&#xff0c;有很多公司在此赛道竞争。详情可看这篇文章。 今天我们来看下如何调用WebAPI来实现文生图功能。我们一般都会将OpenAI的接口&#xff0…...

Jvascript网页设计案例:通过js实现一款密码强度检测,适用于等保测评整改

本文目录 前言功能预览样式特点总结&#xff1a;1. 整体视觉风格2. 密码输入框设计3. 强度指示条4. 结果文本与原因说明 功能特点总结&#xff1a;1. 密码强度检测2. 实时反馈机制3. 详细原因说明4. 视觉提示5. 交互体验优化 密码强度检测逻辑Html代码Javascript代码 前言 能满…...

Macos机器hosts文件便捷修改工具——SwitchHosts

文章目录 SwitchHosts软件下载地址操作添加方案切换方案管理方案快捷键 检测 SwitchHosts SwitchHosts 是一款 Mac 平台上的免费软件&#xff0c;它可以方便地管理和切换 hosts 文件&#xff0c;支持多种 hosts 文件格式。 软件下载地址 SwitchHosts 操作 添加方案 添加 …...

vLLM专题(四)-故障排除

本文件概述了一些您可以考虑的故障排除策略。如果您认为发现了一个 bug,请首先搜索现有的问题,看看是否已经有人报告。如果没有,请提交一个新问题,并尽可能提供相关的详细信息。 注意 一旦您调试完问题,请记得关闭任何已定义的调试环境变量,或者简单地启动一个新 shell,…...

搜广推校招面经十七

滴滴 花小猪 一、算法题1—最小覆盖字串&#xff08;hot100_字串_困难&#xff09; 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空字符串 “” 。 ## form collection import Counter …...

滚动弹幕案例

滚动弹幕案例 一、需求 1.页面上漂浮字体大小不一、颜色不一&#xff0c;从左向右滚动的弹幕&#xff1b; 2.底部中间有一个发送功能&#xff0c;可以发送新的弹幕&#xff1b; 3.底部的发送部分可以向下收起和弹出。 二、html <div class"container"><…...

Typora导出word文件详细安装教程

在 Typora 中&#xff0c;部分文件格式&#xff08;包括 docx、odt、rtf、epub、LaTeX 和 wiki&#xff09;的导入和导出功能由第三方软件 Pandoc 提供支持。这些功能需要安装 Pandoc (≥ v2.0)。 一、安装Pandoc 下载地址&#xff1a;通过网盘分享的文件&#xff1a;pandoc 链…...

从短片到长片:王琦携《Mountain》续作迈向新高度

在王琦(Qi Wang)的带领下,广受关注的短片《Mountain》迎来了成长篇续作《Rite of the Mountain》。这一全新长片不仅是她从短片迈向长篇叙事的重要一步,更是一次大胆的艺术挑战。作为制片人的她,将继续以敏锐的视觉风格和深刻的叙事洞察,拓展《Mountain》所触及的情感深度,并构…...

spring boot 对接aws 的S3 服务,实现上传和查询

1.aws S3介绍 AWS S3&#xff08;Amazon Simple Storage Service&#xff09;是亚马逊提供的一种对象存储服务&#xff0c;旨在提供可扩展、高可用性和安全的数据存储解决方案。以下是AWS S3的一些主要特点和功能&#xff1a; 1.1. 对象存储 对象存储模型&#xff1a;S3使用…...

考研操作系统-----外存文件

目录 内存映射文件 ​编辑 文件管理初始&#xff1a; ​编辑 文件的逻辑结构 文件目录 ​编辑 ​编辑 文件的物理结构&#xff08;文件分配方式&#xff09; 文件存储空间管理 文件的基本操作 文件共享 ​编辑​编辑 文件保护&#xff1a; ​编辑 文件系统的全局结构…...

国内外网络安全政策动态(2025年1月)

▶︎ 1.国家互联网信息办公室发布《个人信息出境个人信息保护认证办法&#xff08;征求意见稿&#xff09;》 1月3日&#xff0c;国家互联网信息办公室发布《个人信息出境个人信息保护认证办法&#xff08;征求意见稿&#xff09;》。根据《意见稿》&#xff0c;个人信息出境个…...

跟着 Lua 5.1 官方参考文档学习 Lua (1)

文章目录 1 – Introduction2 – The Language2.1 – Lexical Conventions2.2 – Values and Types2.2.1 – Coercion 1 – Introduction Lua is an extension programming language designed to support general procedural programming with data description facilities. I…...

计算机性能与网络体系结构探讨 —— 基于《计算机网络》谢希仁第八版

(꒪ꇴ꒪ )&#xff0c;Hello我是祐言QAQ我的博客主页&#xff1a;C/C语言&#xff0c;数据结构&#xff0c;Linux基础&#xff0c;ARM开发板&#xff0c;网络编程等领域UP&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff0c;让我们成为一个强大的攻城狮&#xff0…...

matlab欠驱动船舶模型预测控制

1、内容简介 matlab135-欠驱动船舶模型预测控制 可以交流、咨询、答疑 2、内容说明 略 针对在风 、 浪 、 流时变干扰下欠驱动水面船舶的轨迹跟踪控制问题 &#xff0c; 设计了一种基于模型 预测控制的轨迹跟踪控制器 &#xff0e; 考虑到欠驱动船舶在没有横向驱动力情况下…...

【MySQL常见疑难杂症】常见文件及其所存储的信息

1、MySQL配置文件的读取顺序 &#xff08;非Win&#xff09;/etc/my.cnf、/etc/mysql/my.cnf、/usr/local/mysql/etc/my.cnf、&#xff5e;/.my.cnf 可以通过命令查看MySQL读取配置文件的顺序 [roothadoop01 ~]# mysql --help |grep /etc/my.cnf /etc/my.cnf /etc/mysql/my.c…...

【LeetCode】3.无重复字符的最长字串

目录 题目算法解法解法一 暴力枚举 哈希表&#xff08;判断字符是否重复出现&#xff09; &#xff08;O( n 2 n^{2} n2)&#xff09;解法二 滑动窗口 哈希表&#xff08;判断字符是否重复出现&#xff09; 代码 题目 题目链接&#xff1a;LeetCode-3题 给定一个字符串 s &a…...

李宏毅机器学习笔记:【6.Optimization、Adaptive Learning Rate】

Optimization 1.Adaptive Learning Rate2.不同的参数需要不同的学习率3.Root Mean Square4.RMSProp5.Adam6.learning rate scheduling7.warm up总结 critical point不一定是你在训练一个network时候遇到的最大的障碍。 1.Adaptive Learning Rate 也就是我们要给每个参数不同的…...

计算机组成原理—— 外围设备(十三)

记住&#xff0c;伟大的成就往往诞生于无数次尝试和失败之后。每一次跌倒&#xff0c;都是为了让你学会如何更加坚定地站立&#xff1b;每一次迷茫&#xff0c;都是为了让你找到内心真正的方向。即使前路漫漫&#xff0c;即使困难重重&#xff0c;心中的火焰也不应熄灭。它代表…...

React简介

React简介 A Brief Introduction to React By JacksonML 1. 关于React React是一个知名的Web框架。众所周知&#xff0c;jQuery, Angular, Vue等框架都曾闪亮登场&#xff0c;并且&#xff0c;都仍然在全球市场占有一席之地。React这个颇有担当的新锐&#xff0c;也进入到我…...

Linux-C/C++《七、字符串处理》(字符串输入/输出、C 库中提供的字符串处理函数、正则表达式等)

字符串处理在几乎所有的编程语言中都是一个绕不开的话题&#xff0c;在一些高级语言当中&#xff0c;对字符串的处理支 持度更是完善&#xff0c;譬如 C、 C# 、 Python 等。若在 C 语言中想要对字符串进行相关的处理&#xff0c;譬如将两个字符串进行拼接、字符串查找、两个…...

哈希动态规划dp_5

一.哈希 哈希&#xff08;Hashing&#xff09;是计算机科学中一种非常重要的技术&#xff0c;用于将输入的数据映射到固定大小的值&#xff08;哈希值&#xff09;上。哈希算法和哈希数据结构广泛应用于各种领域&#xff0c;包括数据查找、加密、缓存、数据库索引等。我们来详…...

电商分布式场景中如何保证数据库与缓存的一致性?实战方案与Java代码详解

文章目录 一、缓存一致性问题的本质写后读不一致&#xff1a;更新数据库后&#xff0c;缓存未及时失效并发读写竞争&#xff1a;多个线程同时修改同一数据缓存与数据库事务不同步&#xff1a;部分成功导致数据错乱 二、5大核心解决方案与代码实现方案1&#xff1a;延迟双删策略…...

DeepSeek-R1 大模型本地部署指南

文章目录 一、系统要求硬件要求软件环境 二、部署流程1. 环境准备2. 模型获取3. 推理代码配置4. 启动推理服务 三、优化方案1. 显存优化技术2. 性能加速方案 四、部署验证健康检查脚本预期输出特征 五、常见问题解决1. CUDA内存不足2. 分词器警告处理3. 多GPU部署 六、安全合规…...