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

zookeeper从入门到精通

一、入门基础

1.1 什么是 ZooKeeper

ZooKeeper 是一个开源的分布式协调服务,由雅虎创建,后成为 Apache 的顶级项目。它为分布式应用提供了高效、可靠的协调服务,例如统一命名服务、配置管理、分布式锁、集群管理等。ZooKeeper 的数据模型类似文件系统,以树形结构存储数据,每个节点称为 Znode,每个 Znode 可以存储数据和子节点。

1.2 安装与启动

  1. 下载 ZooKeeper:从 Apache ZooKeeper 官网(Apache ZooKeeper)下载合适的版本。
  2. 解压文件:将下载的压缩包解压到指定目录,例如/usr/local/zookeeper
  3. 配置文件:在conf目录下,复制zoo_sample.cfgzoo.cfg,并根据需求进行配置。以下是常见且详细的参数配置说明:

properties

# 基本时间单元,以毫秒为单位
# 用于心跳检测,同时也是会话超时时间的基本衡量单位,默认2000毫秒
tickTime=2000  # 数据存储目录,用于存放内存数据库快照以及事务日志等数据
dataDir=/var/lib/zookeeper  # 事务日志目录,若未设置,默认使用 dataDir 目录
# 分离事务日志和快照数据存储,有助于提高I/O性能
# dataLogDir=/var/lib/zookeeper/logs  # 客户端连接端口,客户端通过此端口与ZooKeeper服务器建立连接
clientPort=2181  # 最大客户端连接数,0表示不限制,建议根据服务器资源设置合理值
# 例如,设置为100,表示最多允许100个客户端同时连接
maxClientCnxns=100  # 服务器之间通信的端口,用于数据同步和选举等
# 每个节点都需要通过此端口与其他节点进行通信
initLimit=5  # 这个参数指定了在leader和follower之间进行心跳检测时,
# follower可以滞后leader的最大tickTime数量。
# 例如,如果 syncLimit 设置为 2,tickTime 为 2000 毫秒,
# 那么 follower 与 leader 之间的时间差超过 4000 毫秒,follower 可能会被认为是“失联”状态
syncLimit=2  # 集群中服务器的配置,格式为 server.id=host:port:port
# 第一个port(2888)用于节点间通信,ZooKeeper 集群中的节点通过这个端口进行数据同步、
# 状态信息交换以及日常的心跳检测等操作。例如,Leader 节点会通过此端口将事务日志同步给 Follower 节点,
# 确保集群中各个节点的数据一致性。
# 第二个port(3888)用于选举。当集群中需要进行 Leader 选举时,各个节点会通过这个端口
# 交换选举相关的信息,如节点的 ID、ZXID(事务 ID)等,从而确定新的 Leader 节点。
# 例如,以下配置表示三个节点的集群
server.1=192.168.1.10:2888:3888
server.2=192.168.1.11:2888:3888
server.3=192.168.1.12:2888:3888# 动态配置文件路径,用于配置动态更新集群成员等信息
# autopurge.snapRetainCount 和 autopurge.purgeInterval 两个参数用于自动清理事务日志和快照文件
# autopurge.snapRetainCount 表示保留的快照文件数量,默认保留3个
autopurge.snapRetainCount=3  # autopurge.purgeInterval 表示清理频率,单位为小时,设置为0表示禁用自动清理
# 例如,设置为1,表示每小时清理一次
autopurge.purgeInterval=1  # 用于启用四字命令(如 ruok、stat 等)的白名单,限制可以执行这些命令的IP地址
# 例如,设置为 192.168.1.0/24,表示允许 192.168.1.0 网段内的IP访问四字命令
4lw.commands.whitelist=ruok,stat,......# 配置观察者(Observer)节点,格式与 server 类似,但端口号使用不同规则
# observer 不参与选举,仅用于提高读性能,适合读多写少的场景
# server.4=192.168.1.13:2888:3888:observer# 用于配置是否允许客户端连接到未完成初始化的服务器
# 默认值为 yes,设置为 no 时,客户端只能连接到已完全初始化的服务器
allowServingUnstableInternals=true# ZooKeeper 服务器可以配置为在启动时等待特定的条件,
# 例如等待网络稳定或其他依赖服务启动。这个参数用于指定等待策略的实现类
# waitingForSafeStartup=org.apache.zookeeper.server.quorum.WaitForAllServersSafeStartup# 启用 SSL 连接,配置相关的 SSL 上下文工厂类等参数
# ssl.keyStore.location=/path/to/keystore
# ssl.keyStore.password=password
# ssl.trustStore.location=/path/to/truststore
# ssl.trustStore.password=password
# ssl.clientAuth=need

  1. 启动 ZooKeeper:在bin目录下执行zkServer.sh start启动 ZooKeeper 服务,执行zkServer.sh status查看服务状态。

1.3 基本概念

  1. Znode:ZooKeeper 数据模型的节点,有四种类型:
    • 持久节点(PERSISTENT):节点创建后一直存在,直到主动删除。
    • 持久顺序节点(PERSISTENT_SEQUENTIAL):在持久节点的基础上,节点名称后会追加一个单调递增的序号。
    • 临时节点(EPHEMERAL):客户端会话结束时,节点自动删除。
    • 临时顺序节点(EPHEMERAL_SEQUENTIAL):结合临时节点和顺序节点的特性。
  2. 会话(Session):客户端与 ZooKeeper 服务器建立的连接。会话有超时时间,通过心跳机制保持连接。
  3. Watcher(监听器):客户端可以在读取数据时设置 Watcher,当数据或子节点变化时,ZooKeeper 会通知客户端。

二、进阶应用

2.1 统一命名服务

在分布式系统中,不同的服务实例需要一个唯一的标识。ZooKeeper 可以通过创建顺序节点来实现统一命名服务。例如,一个分布式文件系统,每个文件块可以在 ZooKeeper 上创建一个顺序节点,节点名称作为文件块的唯一标识。

2.2 配置管理

将应用的配置信息存储在 ZooKeeper 的 Znode 上。当配置发生变化时,ZooKeeper 通过 Watcher 通知所有监听该 Znode 的客户端,客户端重新读取配置信息。这样可以实现集中式的配置管理,避免在每个应用实例上手动修改配置。

2.3 分布式锁

  1. 排他锁:利用 ZooKeeper 的临时节点和 Watcher 机制实现。客户端尝试创建一个临时节点,如果创建成功,则获取到锁;如果创建失败,说明锁已被其他客户端获取,客户端通过 Watcher 监听该节点的删除事件,当锁释放时,重新尝试获取锁。
  2. 共享锁:可以通过创建临时顺序节点实现。客户端创建一个临时顺序节点,获取所有子节点列表,判断自己的节点序号是否最小。如果是最小,则获取到共享锁;否则,监听前一个节点的删除事件,当轮到自己时获取锁。

2.4 集群管理

  1. 选举 Leader:在 ZooKeeper 集群中,通过 ZAB(ZooKeeper Atomic Broadcast)协议进行 Leader 选举。每个节点在启动时都会参与选举,通过比较节点 ID、ZXID(事务 ID)等信息,选出一个节点作为 Leader,其他节点作为 Follower。
  2. 节点动态上下线:利用临时节点实现。当一个服务节点启动时,在 ZooKeeper 上创建一个临时节点,其他节点通过监听该节点的变化来感知新节点的加入;当服务节点关闭时,临时节点自动删除,其他节点可以感知到节点下线。

三、高级特性与优化

3.1 读写性能优化

  1. 读性能优化:ZooKeeper 的读操作可以在 Follower 节点上执行,通过配置合理的 Follower 数量,可以提高读性能。同时,可以启用本地缓存,减少对 ZooKeeper 服务器的读请求。
  2. 写性能优化:ZooKeeper 的写操作需要 Leader 节点进行广播,通过合理配置 tickTime、syncLimit 等参数,可以优化写性能。此外,批量操作可以减少网络开销,提高写性能。

3.2 高可用性与容错

  1. 集群搭建:为了提高 ZooKeeper 的可用性,需要搭建多节点集群。一般建议集群节点数量为奇数个,因为在选举 Leader 时,需要超过半数的节点同意才能选出 Leader。例如,3 个节点的集群可以容忍 1 个节点故障,5 个节点的集群可以容忍 2 个节点故障。
  2. 故障恢复:当 ZooKeeper 集群中的节点发生故障时,集群会自动进行 Leader 选举,重新恢复服务。Follower 节点在故障恢复后,会从 Leader 节点同步数据,保证数据的一致性。

3.3 安全机制

  1. 身份认证:ZooKeeper 支持多种身份认证方式,如 Digest、SASL 等。Digest 认证通过用户名和密码进行认证,SASL 认证支持更强大的安全机制,如 Kerberos 认证。
  2. 访问控制:通过 ACL(Access Control List)来控制对 Znode 的访问。ACL 可以设置不同用户或用户组对 Znode 的读、写、创建、删除等权限。

四、ZooKeeper 集群部署方式

4.1 伪集群部署(适用于开发与测试环境)

  1. 准备工作:确保服务器上安装了 Java 环境,且有足够的可用端口。
  2. 复制配置文件:在解压后的 ZooKeeper 目录下,复制zoo.cfg为多个不同的配置文件,例如zoo1.cfgzoo2.cfgzoo3.cfg
  3. 修改配置文件
    • dataDir:为每个配置文件指定不同的数据目录,如dataDir=/var/lib/zookeeper1dataDir=/var/lib/zookeeper2dataDir=/var/lib/zookeeper3
    • clientPort:指定不同的客户端连接端口,如clientPort=2181clientPort=2182clientPort=2183
    • 添加集群配置:在每个配置文件中添加以下内容,指定集群中的其他节点:

properties

server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890

这里server.X中的X为节点编号,127.0.0.1是服务器 IP 地址,2888等第一个端口用于节点间通信,3888等第二个端口用于选举。
4. 创建 myid 文件:在每个dataDir指定的目录下,创建一个名为myid的文件,并在文件中写入对应的节点编号(如在/var/lib/zookeeper1目录下的myid文件中写入1)。
5. 启动节点:分别使用不同的配置文件启动每个 ZooKeeper 节点,例如:

zkServer.sh start zoo1.cfg
zkServer.sh start zoo2.cfg
zkServer.sh start zoo3.cfg

4.2 真实集群部署(适用于生产环境)

  1. 规划服务器:确定集群节点数量,建议为奇数个,如 3 个或 5 个。准备相应数量的服务器,确保它们之间网络畅通,且安装了 Java 环境。
  2. 配置文件:在每台服务器的 ZooKeeper 目录下的conf目录中,修改zoo.cfg文件。
    • dataDir:设置数据存储目录,如dataDir=/var/lib/zookeeper
    • clientPort:设置客户端连接端口,通常保持默认的 2181。
    • 添加集群配置:根据集群中的节点信息,添加如下配置。例如,对于一个 3 节点的集群,节点 1 的 IP 为192.168.1.10,节点 2 的 IP 为192.168.1.11,节点 3 的 IP 为192.168.1.12,则在每个节点的zoo.cfg中添加:

properties

server.1=192.168.1.10:2888:3888
server.2=192.168.1.11:2888:3888
server.3=192.168.1.12:2888:3888

  1. 创建 myid 文件:在每台服务器的dataDir目录下,创建myid文件,并写入对应的节点编号(如在节点 1 的/var/lib/zookeeper目录下的myid文件中写入1)。
  2. 启动集群:在每台服务器上,使用zkServer.sh start命令启动 ZooKeeper 服务。启动后,可以通过zkServer.sh status命令查看每个节点的角色(Leader 或 Follower)。

五、实践案例

5.1 分布式任务调度

假设有一个分布式任务调度系统,需要在多个节点上分配任务并监控任务执行状态。可以利用 ZooKeeper 的临时节点和 Watcher 机制实现:

  1. 任务分配:任务调度中心在 ZooKeeper 上创建一个持久节点作为任务根节点,每个任务在根节点下创建一个持久顺序节点。工作节点启动时,在任务根节点下创建一个临时节点,通过获取任务根节点下的子节点列表,判断自己是否有任务需要执行。
  2. 任务监控:工作节点在执行任务时,更新任务节点的状态信息。任务调度中心通过监听任务节点的变化,实时监控任务执行状态。

5.2 分布式缓存一致性

在分布式缓存系统中,需要保证缓存数据的一致性。可以利用 ZooKeeper 的配置管理和 Watcher 机制实现:

  1. 缓存配置管理:将缓存的配置信息(如缓存过期时间、缓存大小等)存储在 ZooKeeper 的 Znode 上。缓存节点启动时,读取配置信息并应用。
  2. 缓存数据更新:当缓存数据发生变化时,更新 ZooKeeper 上的 Znode。其他缓存节点通过监听该 Znode 的变化,同步更新本地缓存数据,保证缓存一致性。

相关文章:

zookeeper从入门到精通

一、入门基础 1.1 什么是 ZooKeeper ZooKeeper 是一个开源的分布式协调服务,由雅虎创建,后成为 Apache 的顶级项目。它为分布式应用提供了高效、可靠的协调服务,例如统一命名服务、配置管理、分布式锁、集群管理等。ZooKeeper 的数据模型类…...

2.2 添加注释

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 注释是为了方便理解代码含义而添加的简短的解释性说明。在编译时,编辑器不会将注释加入最终生成的文件中,不…...

具有快慢思考的语言调节机器人操作

24年1月来自华东师范大学、美的集团和上海大学的论文“Language-Conditioned Robotic Manipulation with Fast and Slow Thinking”。 语言调节机器人操作,旨在将自然语言指令转化为可执行动作,从简单的“拾取和放置”到需要意图识别和视觉推理的任务。…...

美颜相机1.0

项目开发步骤 1 界面开发 美颜相机界面构成: 标题 尺寸 关闭方式 位置 可视化 2 创建主函数调用界面方法 3 添加两个面板 一个是按钮面板一个是图片面板 用JPanel 4 添加按钮到按钮面吧【注意:此时要用初始化按钮面板的方法initBtnPanel 并且将按钮添…...

Css3重点知识讲解

选择器 优先级: id 选择器 > 类选择器 > 标签选择器 类选择器: .myClass {color: blue; }id 选择器(全局唯一): #myId {color: green; }标签选择器: p {color: red; }层次选择器: /…...

[Web 安全] Web 安全攻防 - 学习手册

关联专栏:[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01:Web 安全攻防 —— 信息收集篇 Web 信息收集 — 手动收集域名信息 Web 信息收集 — 手动收集 IP 信息 Web 信息收集 — 端口服务信息收集 Web 信息收集 — 自动化信息收集 — ShuiZe 水泽 We…...

nextjs的记录一些小东西

1. 格式化时间&#xff1a;使用date-fns库 npm install date-fns 在组建中创建date.js import { parseISO, format } from date-fnsexport default function Date({ dateString }) {const date parseISO(dateString)return <time dateTime{dateString}>{format(date,…...

故障诊断 | PID搜索算法优化CatBoost故障诊断(MatlabPython)

目录 效果一览文章概述故障诊断 | PID搜索算法优化CatBoost故障诊断(Matlab&Python)PID搜索算法优化CatBoost故障诊断PID搜索算法优化CatBoost故障诊断一、引言1.1、研究背景与意义1.2、研究现状1.3、研究目的与内容二、CatBoost算法概述2.1、CatBoost算法原理2.2、CatBo…...

探索关键领域的AI工具:机器学习、深度学习、计算机视觉与自然语言处理

引言 在人工智能(AI)迅猛发展的今天&#xff0c;机器学习(ML)、深度学习(DL)、计算机视觉(CV)和自然语言处理(NLP)已经成为解决复杂问题的关键技术。无论是自动驾驶车辆的视觉识别&#xff0c;还是智能助手的对话理解&#xff0c;这些技术都在改变着世界。本文将介绍在各个领域…...

使用 DeepSeek 生成流程图、甘特图与思维导图:结合 Typora 和 XMind 的高效工作流

在现代工作与学习中&#xff0c;可视化工具如流程图、甘特图和思维导图能够极大地提升信息整理与表达的效率。本文将详细介绍如何使用 DeepSeek 生成 Mermaid 文本&#xff0c;结合 Typora 快速生成流程图和甘特图&#xff0c;并通过 Markdown 格式生成思维导图&#xff0c;最终…...

11、集合框架

一、简介 Java集合框架位于java.util包中 Collection是Set和List的父类&#xff0c;Collections是工具类&#xff0c;提供了对集合进行排序、遍历等多种算法的实现。 ArrayList: 有序(放进去顺序和拿出来顺序一致)&#xff0c;可重复 HashSet: 无序(放进去顺序和拿出来顺序不…...

从入门到精通Rust:资源库整理

今天给大家分享一些优质的Rust语言学习资源&#xff0c;适合不同水平的学习者。前三个官方资源是我Rust语言的启蒙老师&#xff0c;非常平易近人。 官方资源 The Rust Programming Language (The Book) 链接: https://doc.rust-lang.org/book/ 简介: 官方权威指南&#xff0c…...

Spring Boot 项目启动命令大全:参数详解与高阶用法

Spring Boot 项目启动命令大全&#xff1a;参数详解与高阶用法 一、基础启动命令 默认启动命令 java -jar xxx.jar适用场景&#xff1a;开发环境快速启动&#xff0c;使用默认配置&#xff08;端口 8080&#xff0c;内存由 JVM 自动分配&#xff09;。 指定 JVM 内存参数 java…...

c++day4

作业 #include <iostream> #include <cstring> #include <cstdlib> #include <unistd.h> #include <sstream> #include <vector> #include <memory>using namespace std; class S{ private:int a;int b; public:S(i…...

应对LLM应用中的AI幻觉,如何通过Token对数概率预测LLM的可靠性

应对LLM应用中的AI幻觉 如何通过Token对数概率预测LLM的可靠性 内容&#xff1a; 1. 相关机器学习&#xff08;ML&#xff09;概念回顾&#xff08;精准度/召回率&#xff0c;LLM直觉&#xff09; 2. 使用序列对数概率度量作为LLM信心 3. 通过案例研究结果过滤低质量LLM输出…...

Openwrt路由器操作系统

一、什么是 OpenWrt&#xff1f; OpenWrt 是一个基于 Linux 的开源操作系统&#xff0c;主要设计用于嵌入式设备&#xff0c;尤其是路由器。与其说是传统的路由器固件&#xff0c;不如说它是一个路由器操作系统。 传统的路由器固件通常由路由器厂商开发&#xff0c;功能相对固…...

基于SpringBoot的“流浪动物救助系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“流浪动物救助系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 局部E-R图 系统首页界面 系统…...

Ansible 学习笔记

这里写自定义目录标题 基本架构文件结构安装查看版本 Ansible 配置相关文件主机清单写法 基本架构 Ansible 是基于Python实现的&#xff0c;默认使用22端口&#xff0c; 文件结构 安装 查看用什么语言写的用一下命令 查看版本 Ansible 配置相关文件 主机清单写法...

(六)趣学设计模式 之 代理模式!

目录 一、啥是代理模式&#xff1f;二、为什么要用代理模式&#xff1f;三、代理模式的实现方式1. 静态代理2. JDK动态代理3. CGLIB动态代理 四、三种代理的对比五、代理模式的优缺点六、代理模式的应用场景七、总结 &#x1f31f;我的其他文章也讲解的比较有趣&#x1f601;&a…...

【CSS】HTML元素布局基础总结

HTML默认布局和元素显示 CSS 元素显示 { HTML 默认布局&#xff1a; 流式布局 { 从左到右&#xff0c;从上到下 随页面宽度变化动态排列元素 文档流&#xff1a;整个 H T M L 文档的流式布局 HTML 元素分为 { 块级元素 &#xff1a;默认占满一行 行内元素 &#xff1a;在行内最…...

【JavaScript】什么是JavaScript?以及常见的概念

作为 JavaScript 初学者&#xff0c;想要更好地理解这门语言&#xff0c;需要从核心概念、实践练习和项目实战三个方面入手。下面是详细的学习路线和方法&#xff0c;帮助你系统性地掌握 JavaScript。 一、理解 JavaScript 的核心概念 JavaScript 是一门动态、弱类型的编程语言…...

为什么要将PDF转换为CSV?CSV是Excel吗?

在企业和数据管理的日常工作中&#xff0c;PDF文件和CSV文件承担着各自的任务。PDF通常用于传输和展示静态的文档&#xff0c;而CSV因其简洁、易操作的特性&#xff0c;广泛应用于数据存储和交换。如果需要从PDF中提取、分析或处理数据&#xff0c;转换为CSV格式可能是一个高效…...

P1038 [NOIP 2003 提高组] 神经网络

题目描述 在兰兰的模型中&#xff0c;神经网络就是一张有向图&#xff0c;图中的节点称为神经元&#xff0c;而且两个神经元之间至多有一条边相连&#xff0c;下图是一个神经元的例子&#xff1a; 神经元&#xff08;编号为 i&#xff09; 图中&#xff0c;X1​∼X3​ 是信息…...

TypeScript 类型断言的适用场景及代码示例

类型断言的适用场景及代码示例 适用场景 类型断言就像是你很确定某个东西是什么&#xff0c;然后直接告诉 TypeScript 编译器“相信我&#xff0c;它就是这个类型”。以下是几种常见的适用场景&#xff1a; 从 any 类型恢复具体类型&#xff1a;当你使用 any 类型时&#xf…...

Docker 容器

Docker 是一种开源的容器化平台&#xff0c;可以让开发人员将应用程序及其依赖项打包到一个可移植的容器中&#xff0c;然后部署到任何支持 Docker 的环境中。Docker 的基本概念包括以下几点&#xff1a; 1. **容器(Container)**&#xff1a;容器是一个独立、轻量级的运行环境…...

Spark(3)vi的基本使用

一.打开与创建文件 二.三种模式 三. 光标操作 四.复制粘贴 一.打开与创建文件 它是linux的内置命令&#xff0c;所以还是以命令的方式来运行。 命令的格式是&#xff1a;Vi /路径/文件名。要注意如下两种情况&#xff1a; 1.如果这个文件不存在&#xff0c;此时就是新建文…...

element-ui的组件使用

1. 安装 Element UI&#xff08;在文件夹最上面输入cmd进入dos窗口&#xff0c;然后输入安装指令 npm install element-ui --save&#xff09; 2.在main.js文件全局引入(main.js文件负责 全局注册 )&#xff0c;在该文件注册的所有组件在其他文件都能直接调用&#xff0c;一般…...

Starlink卫星动力学系统仿真建模第九讲-滑模(SMC)控制算法原理简介及卫星控制应用

滑模控制&#xff08;Sliding Mode Control&#xff09;算法详解 一、基本原理 滑模控制&#xff08;Sliding Mode Control, SMC&#xff09;是一种变结构控制方法&#xff0c;通过设计一个滑模面&#xff08;Sliding Surface&#xff09;&#xff0c;迫使系统状态在有限时间内…...

《深度剖析Linux 系统 Shell 核心用法与原理_666》

1. 管道符的用法 查找当前目录下所有txt文件并统计行数 # 使用管道符将ls命令的结果传递给wc命令进行行数统计 ls *.txt | wc -l 在/etc目录下查找包含"network"的文件并统计数量 # 使用find命令查找文件&#xff0c;并通过grep查找包含特定字符串的文件&#xf…...

51单片机学习之旅——定时器

打开软件 1与其它等于其它&#xff0c;0与其它等于0 1或其它等于1&#xff0c;0或其它等于其它 TMODTMOD&0xF0;//0xF01111 0000进行与操作&#xff0c;高四位保持&#xff0c;低四位清零&#xff0c;高四位定时器1&#xff0c;低四位定时器0 TMODTMOD|0x01;//0x010000 0…...

超详细介绍map(multimap)的使用

map类的介绍 map的声明如下&#xff0c;Key是map底层关键字的类型&#xff0c;T是map底层value的类型。set默认要求Key支持小于比较&#xff0c;如果不支持或者需要的情况下我们可以自行传入仿函数&#xff0c;map底层存储数据的内存是从空间申请来的。一般情况下&#xff0c;我…...

原生稀疏注意力NSA 替换transformer 注意力进行文本生成训练

DeepSeek-R1这篇文章&#xff0c;聚焦范围更加小&#xff0c;R1的重点在于提出了一个文本生成的训练策略和蒸馏策略&#xff0c;这篇文章则是提出了一个注意力机制NSA&#xff0c;主要解决的是长序列做注意力时带来的效率问题。通篇文章看下来&#xff0c;它的实际意义可能比较…...

读书笔记:《百年孤独》

《百年孤独》加西亚.马尔克斯 著 范晔 译 读出了阅读障碍。 记不得书中的人&#xff0c;记不得书中的事&#xff0c;更不知何为孤独&#xff0c;只记得马孔多&#xff0c;这个陌生的地方&#xff0c;还有那个猪尾巴婴儿。 百年&#xff1a;故事跨越了百年 孤独&#…...

TVS管学习记录

文章目录 前言一、TVS是什么&#xff1f;二、TVS关键参数1.反向截至电压**实际意义** 2.钳位电压**定义与作用****选择依据** **4. 实际应用示例****场景&#xff1a;通信端口的ESD保护** 3.反向截至电压和钳位电压的关联和区别**. 小结** 三、实际应用电路举例总结 前言 TVS管…...

网络安全系统概述 网络安全系统分为几级

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 5级 网络信息系统安全等级保护分为五级&#xff0c;一级防护水平最低&#xff0c;最高等保为五级。分别是用户自主保护级、系统审计保护级、安全标记保护级、结构…...

基于 DeepSeek LLM 本地知识库搭建开源方案(AnythingLLM、Cherry、Ragflow、Dify)认知

写在前面 博文内容涉及 基于 Deepseek LLM 的本地知识库搭建使用 ollama 部署 Deepseek-R1 LLM知识库能力通过 Ragflow、Dify 、AnythingLLM、Cherry 提供理解不足小伙伴帮忙指正 &#x1f603;,生活加油 我站在人潮中央&#xff0c;思考这日日重复的生活。我突然想&#xff0c…...

Apache Flink架构深度解析:任务调度、算子数据同步与TaskSlot资源管理机制

Apache Flink是一个分布式流处理框架&#xff0c;其核心架构设计围绕有界与无界数据流的统一处理能力展开。以下从任务分配、算子数据同步、TaskManager与JobManager的TaskSlot机制三个维度展开详细分析&#xff1a; 一、任务分配机制 Flink的任务分配基于并行度&#xff08;P…...

Linux 常见命令全解析

一、文件操作命令 1. ls ls是列出目录内容的命令。简单输入ls&#xff0c;会展示当前目录下的文件和目录列表。想要获取更详细的信息&#xff0c;比如文件权限、所有者、大小、修改时间等&#xff0c;使用ls -l。若要显示所有文件&#xff0c;包括以点&#xff08;.&#xff…...

k8s集群部署

集群结构 角色IPmaster192.168.35.135node1192.168.35.136node2192.168.35.137 部署 #需在三台主机上操作 //关闭防火墙 [rootmaster ~]# systemctl disable --now firewalld//关闭selinux [rootmaster ~]# sed -i s/enforcing/disabled/ /etc/selinux/config//关闭swap分区…...

springboot005学生心理咨询评估系统(源码+数据库+文档)

源码地址&#xff1a;学生心理咨询评估系统 文章目录 1.项目简介2.部分数据库结构与测试用例3.系统功能结构4.包含的文件列表&#xff08;含论文&#xff09;后台运行截图 1.项目简介 ​ 使用旧方法对学生心理咨询评估信息进行系统化管理已经不再让人们信赖了&#xff0c;把现…...

LeetCode37

LeetCode37 目录 题目描述示例思路分析代码段代码逐行讲解复杂度分析总结的知识点整合总结...

2025年02月24日Github流行趋势

项目名称&#xff1a;mastra 项目地址url&#xff1a;https://github.com/mastra-ai/mastra 项目语言&#xff1a;TypeScript 历史star数&#xff1a;5735 今日star数&#xff1a;1140 项目维护者&#xff1a;adeleke5140, abhiaiyer91, TheIsrael1, adeniyii, Joshuafolorunsh…...

Spring Boot 中的日志管理

一、日志框架选择 1. 主流框架对比 框架特点Spring Boot 默认支持Logback- 性能优异&#xff0c;Spring Boot 默认集成- 支持自动热更新配置文件✅ (默认)Log4j2- 异步日志性能更强- 支持插件扩展- 防范漏洞能力更好❌ (需手动配置)JUL (JDK自带)- 无需额外依赖- 功能简单&am…...

后端之JPA(EntityGraph+JsonView)

不同表之间的级联操作或者说关联查询是很多业务场景都会用到的。 对于这种需求最朴素的方法自然是手动写关联表&#xff0c;然后对被关联的表也是手动插入数据。但是手写容易最后写成一堆shit代码&#xff0c;而且修改起来也是非常麻烦的。 学会使用现成的工具还是非常有利的…...

点击修改按钮图片显示有问题

问题可能出在表单数据的初始化上。在 ave-form.vue 中&#xff0c;我们需要处理一下从后端返回的图片数据&#xff0c;因为它们可能是 JSON 字符串格式。 vue:src/views/tools/fake-strategy/components/ave-form.vue// ... existing code ...Watch(value)watchValue(v: any) …...

Linux第一个小程序-进度条 (linux第七课)

目录 知识补充: 随机数的使用,先用srand(time(NULL))种时间种子 函数指针 模拟进度条代码 知识补充: \r只是回车 \r\n是回车加换行,其中\n带有强制换行的功能 如果只使用\r ,还需要刷新缓冲区(fflush(stdout)) %2d是左对齐 %-2d是右对齐 %.1lf是小数点后保留一位 随机数的使…...

iOS指纹归因详解

iOS 指纹归因&#xff08;Fingerprint Attribution&#xff09;详解 1. 指纹归因的概念 指纹归因&#xff08;Fingerprint Attribution&#xff09;是一种无 ID 归因&#xff08;ID-less Attribution&#xff09;技术&#xff0c;主要用于广告跟踪、用户识别或流量分析。它基…...

【Erdas实验教程】009:非监督分类及分类后评价

文章目录 一、分类过程二、分类评价ERDAS 的 ISODATA 算法是基于最小光谱距离来进行的非监督分类,聚类过程始于任意聚类平均值或一个已有分类模板的平均值;聚类每重复一次,聚类的平均值就更新一次,新聚类的均值再用于下次聚类循环。这个过程不断重复,直到最大的循环次数已…...

DeepSeek+Kimi生成高质量PPT

DeepSeek与Kimi生成PPT全流程解析 一、工具分工原理 DeepSeek核心作用&#xff1a;生成结构化PPT大纲&#xff08;擅长逻辑构建与内容优化&#xff09;Kimi核心作用&#xff1a;将文本转换为视觉化PPT&#xff08;提供模板库与排版引擎&#xff09; 二、操作步骤详解 1. 通…...

conda 基本命令

1、查询当前所有的环境 conda env list 2、创建虚拟环境 conda create -n 环境名 [pythonpython版本号] 其中[pythonpython版本号]可以不写 conda create -n test python3.12 我们输入conda env list看到我们的环境创建成功了&#xff0c;但是发现他是创建在我们默认的C盘的…...