ZooKeeper工作机制与应用场景
目录
- 1.1、概述
- 1.2、选举机制
- 1.2.1、选举触发条件
- 1.2.2、选举规则
- 1.2.3、选举过程详解
- 1.3、数据同步机制
- 1.3.1、正常同步
- 1.3.2、宕机同步
- 1.4、客户端常用命令
- 1.5、应用场景
- 1.5.1、配置管理
- 1.5.2、命令服务
- 1.5.3、分布式锁服务
- 1.5.4、集群管理
- 1.5.5、分布式ID
- 1.5.6、分布式协调/通知
- 1.5.7、心跳检测
1.1、概述
本文主要讲述ZooKeeper工作机制与应用场景,关于ZooKeeper的核心概念、主要特征等内容请参考构建分布式系统的一致性基石之ZooKeeper简介这篇博文。
1.2、选举机制
ZooKeeper的选举机制基于ZAB协议(ZooKeeper Atomic Broadcast),这是一种为分布式系统设计的原子广播协议。其核心目标是快速选举出Leader节点,并确保数据一致性。
1.2.1、选举触发条件
- 集群初始化时
所有节点启动时均为LOOKING状态,触发首次选举。 - 运行期间Leader故障时
Leader节点宕机或网络中断时,剩余节点重新选举。
1.2.2、选举规则
- ZXID(事务ID)优先
ZXID是64位整数,由epoch(任期)和counter(事务计数器)组成,数值越大表示数据越新,优先级更高。 - SID(服务器ID)次之
若ZXID相同,则SID(配置文件中的myid)较大的节点胜出。 - 过半原则
候选节点需获得超过半数投票(即N/2 +1)才能成为Leader。
1.2.3、选举过程详解
假设有五台服务器组成的Zookeeper集群,它们的id从1-5,在集群初次启动时是没有历史数据,数据操作的事务ID也不存在,其选举流程如下:
- 服务器1
服务器1启动,发起投票,投票格式为(Zxid,ServerID),投出的票为(0,1),此时服务器1票数一票,不够半数以上(3票),选举无法完成,服务器1状态保持为LOOKING。 - 服务器2
服务器2启动,发起投票,投出的票为(0,2),服务器1和2分别投自己一票并交换选票信息:此时服务器1发现服务器2的ServerID比自己目前投票推举的(服务器1)大,更改选票为推举服务器2。此时服务器1票数0票,服务器2票数2票,没有半数以上结果,选举无法完成,服务器1,2状态保持LOOKING。 - 服务器3
服务器3启动,发起投票,投出的票为(0,3),此时服务器1和服务器2发现服务器3的ServerID比自己目前投票推举的(服务器2)大,更改选票为推举服务器3。此次投票结果:服务器1为0票,服务器2为0票,服务器3为3票。此时服务器3的票数已经超过半数,服务器3当选Leader。服务器1,2更改状态为FOLLOWING,服务器3更改状态为LEADING。 - 服务器4
服务器4启动,发起投票。此时服务器1,2,3已经不是LOOKING状态,不会更改选票信息。交换选票信息结果:服务器3为3票,服务器4为1票。此时服务器4服从多数,更改选票信息为服务器3,并更改状态为FOLLOWING。 - 服务器5
服务器5启动,同服务器4启动过程类似。
Zookeeper集群的中每个服务器的数据都是一致的,除非网络波动极大,才会导致Zxid不一致,故而每个服务器的Zxid一致。如果真的遇到Zxid不一致,那么最大的Zxid的服务器会自动当选leader,如果相当则按照上述规则进行选举。
运行期间的Leader故障时,所有FOLLOWING节点切换为LOOKING状态。此时触发重新选举Leader的过程,假设服务器3宕机时,服务器1的Zxid为100,服务器2的Zxid为101,服务器4的Zxid为104,服务器5的Zxid为105其选举流程如下:
- 所有服务器给自己投票
此时服务器1、服务器2、服务器4、服务器5都为1票,服务器1、服务器2、服务器4、服务器5的状态都为LOOKING。 - 投票比较
服务器1发现服务器5的Zxid最大,更改选票为推举服务器5。服务器2发现服务器5的Zxid最大,更改选票为推举服务器5。服务器4发现服务器5的Zxid最大,更改选票为推举服务器5。 - 投票确认
服务器1为0票,服务器2为0票,服务器4为0票,服务器5为4票。此时服务器4的票数已经超过半数,服务器4当选Leader。服务器1,2、4更改状态为FOLLOWING,服务器5更改状态为LEADING。
1.3、数据同步机制
zookeeper 的数据同步是为了保证各节点中数据的一至性,同步时涉及两个流程:
- 一个是正常的客户端数据提交
- 一个是集群某个节点宕机在恢复后的数据同步
1.3.1、正常同步
当leader 接收客户端写请求,并同步给各个子节点的流程如下:
但实际情况要复杂的多,比如client 它并不知道哪个节点是leader 有可能写的请求会发给follower ,由follower在转发给leader进行同步处理,如下:
client向zk中的server发送写请求到达follower,follower则会将该写请求转发给leader,leader将请求事务以proposal形式分发给follower;
当follower收到收到leader的proposal时,根据接收的先后顺序处理proposal;
当Leader收到follower针对某个proposal过半的ack后,则发起事务提交,重新发起一个commit的proposal
follower收到commit的proposal后,记录事务提交,并把数据更新到内存数据库;
当写成功后,反馈给client。
1.3.2、宕机同步
在集群运行过程当中如果有一个follower节点宕机,由于宕机节点没过半,集群仍然能正常服务。当leader 收到新的客户端请求,此时无法同步给宕机的节点。造成数据不一至。为了解决这个问题,当节点启动时,第一件事情就是找当前的Leader,比对数据是否一至。不一至则开始同步,同步完成之后在进行对外提供服务。 如何比对Leader的数据版本呢,这里通过ZXID事务ID来确认。
ZXID是一个长度64位的数字,其中低32位是按照数字递增,任何数据的变更都会导致,低32位的数字简单加1。高32位是leader周期编号,每当选举出一个新的leader时,新的leader就从本地事物日志中取出ZXID,然后解析出高32位的周期编号,进行加1,再将低32位的全部设置为0。这样就保证了每次新选举的leader后,保证了ZXID的唯一性而且是保证递增的。
1.4、客户端常用命令
- 启动客户端
zkCli.sh - 查看帮助
help - 查看当前znode所包含的内容
ls / - 创建节点
create /hello 18 - 创建短暂znode
create -e /haha tom - 创建带序号znode
create -s /bigdata tom - 创建短暂带序号
create -e -s /bigdata tom - 查看此节点的详细信息
ls2 / - 获得节点值监听
get /hello watch - 监听路径
ls / watch - 修改znode数据
set /hello iiiii - 删除节点
delete /hello - 递归删除
rmr /delireba - 查看节点状态信息
stat /
1.5、应用场景
ZooKeeper 是一个高可用的分布式数据管理与协调框架。基于对 ZAB 算法的实现, 该框架能够很好地保证分布式环境中数据的一致性。也是基于这样的特性,使得ZooKeeper 成为了解决分布式一致性问题的利器,其具有以下几种典型的应用场景。
1.5.1、配置管理
zookeeper 提供了节点watch的功能,zookeeper 的 client(对外提供服务的 server)监控 zookeeper 上的节点(znode),当节点变动的时候,client 会收到变动事件和变动后的内容,基于 zookeeper 的这个特性,我们可以给服务器集群中的所有机器 (client)都注册 watch 事件,监控特定 znode,节点中存储部署代码的配置信息, 需要更新代码的时候,修改 znode 中的值,服务器集群中的每一台 server 都会收到代码更新事件,然后触发调用,更新目标代码。
现在有很多开源项目使用 Zookeeper 来维护配置,比如在 HBase 中,客户端就是连接一个 Zookeeper,获得必要的 HBase 集群的配置信息,然后才可以进一步操作。 还有在开源的消息队列 Kafka 中,也使用 Zookeeper 来维护 broker 的信息。其原理如下:
1.5.2、命令服务
命名服务也是分布式系统中比较常见的一类场景。在分布式系统中,通过使用命名服务,客户端应用能够根据指定名字来获取资源或服务的地址,提供者等信息。
注册一个持久节点/service/business/what,他下面的每个子节点都是一个可用服务 , 保 存 了 服 务 的 地 址 端 口 等 信 息 , 服 务 调 用 者 通 过 zookeeper 获 取 /service/business/what 所有子节点信息来得到可用的服务。
下面的节点都是临时节点,服务器启动的时候会过来注册一个临时节点,服务器挂掉之后或主动关闭之后,临时节点会自动移除,这样就可以保证使用者获取的 what 服务都是可用的,而且可以动态的扩容缩容。
1.5.3、分布式锁服务
一个集群是一个分布式系统,由多台服务器组成。为了提高并发度和可靠性,多台服务器上运行着同一种服务。当多个服务在运行时就需要协调各服务的进度,有时候需要保证当某个服务在进行某个操作时,其他的服务都不能进行该操作,即对该操作进行加锁,如果当前机器挂掉后,释放锁并fail over 到其他的机器继续执行该服务。
1.5.4、集群管理
一个集群有时会因为各种软硬件故障或者网络故障,出现某些服务器挂掉而被移除集群,而某些服务器加入到集群中的情况,zookeeper会将这些服务器加入/移出的情况通知给集群中的其他正常工作的服务器,以及时调整存储和计算等任务的分配和执行等。此外zookeeper还会对故障的服务器做出诊断并尝试修复。
1.5.5、分布式ID
在过去的单库单表型系统中,通常可以使用数据库字段自带的auto_increment属性来自动为每条记录生成一个唯一的ID。但是分库分表后,就无法在依靠数据库的auto_increment属性来唯一标识一条记录了。此时我们就可以用zookeeper在分布式环境下生成全局唯一ID。做法如下:每次要生成一个新id时,创建一个持久顺序节点,创建操作返回的节点序号,即为新id,然后把比自己节点小的删除即可。
1.5.6、分布式协调/通知
ZooKeeper 中特有 Watcher 注册与异步通知机制,能够很好的实现分布式环境下不同机器,甚至不同系统之间的通知与协调,从而实现对数据变更的实时处理。使用方法通常是不同的客户端都对 ZooKeeper 上同一个 ZNode 进行注册,监听ZNode 的变化(包括 ZNode 本身内容及子节点的),如果 ZNode 发生了变化,那么所有订阅的客户端都能够接收到相应的 Watcher 通知,并做出相应的处理。 ZooKeeper 的分布式协调/通知,是一种通用的分布式系统机器间的通信方式。
1.5.7、心跳检测
机器间的心跳检测机制是指在分布式环境中,不同机器(或进程)之间需要检测到彼此是否在正常运行,例如 A 机器需要知道 B 机器是否正常运行。在传统的开 发中,我们通常是通过主机直接是否可以相互 PING 通来判断,更复杂一点的话, 则会通过在机器之间建立长连接,通过 TCP 连接固有的心跳检测机制来实现上层 机器的心跳检测,这些都是非常常见的心跳检测方法。 基于 ZooKeeper 的临时节点的特性,可以让不同的进程都在 ZooKeeper 的一个指定节点下创建临时子节点,不同的进程直接可以根据这个临时子节点来判断对应 的进程是否存活。通过这种方式,检测和被检测系统直接并不需要直接相关联,而是通过 ZooKeeper 上的某个节点进行关联,大大减少了系统耦合。
相关文章:
ZooKeeper工作机制与应用场景
目录 1.1、概述1.2、选举机制1.2.1、选举触发条件1.2.2、选举规则1.2.3、选举过程详解 1.3、数据同步机制1.3.1、正常同步1.3.2、宕机同步 1.4、客户端常用命令1.5、应用场景1.5.1、配置管理1.5.2、命令服务1.5.3、分布式锁服务1.5.4、集群管理1.5.5、分布式ID1.5.6、分布式协调…...
VR制作软件用途(VR制作软件概述)
虚拟现实(VR)制作软件作为现代科技的瑰宝,正以独特的魅力重塑各行各业。 通过构建三维虚拟环境,这些软件提供了前所未有的沉浸式体验,还推动了技术革新与产业升级。本文将探讨VR制作软件的主要用途,并重点…...
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】电商数据分析案例-9.1 业务场景与数据准备
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 9.1 业务场景与数据准备9.1.1 业务场景描述核心业务目标业务挑战 9.1.2 数据来源与获取数据源构成数据获取方案 9.1.3 数据结构与字段说明核心数据表设计1. 订单事实表&…...
PyTorch 入门与核心概念详解:从基础到实战问题解决
PyTorch 入门与核心概念详解:从基础到实战问题解决 前言 用PyTorch 编写 Transformer 模型时遇到了多个错误,包括维度不匹配、NaN 损失、注意力权重未记录以及 OpenMP 库初始化等问题。 本文基于以上,对 PyTorch 的基本解释,并对…...
【办公类-99-05】20250508 D刊物JPG合并PDF便于打印
背景需求 委员让我打印2024年2025年4月的D刊杂志,A4彩打,单面。 有很多JPG,一个个JPG图片打开,实在太麻烦了。 我需要把多个jpg图片合并成成为一个PDF,按顺序排列打印。 deepseek写Python代码 代码展示 D刊jpg图片合…...
【C++】手搓一个STL风格的string容器
C string类的解析式高效实现 GitHub地址 有梦想的电信狗 1. 引言:字符串处理的复杂性 在C标准库中,string类作为最常用的容器之一,其内部实现复杂度远超表面认知。本文将通过一个简易仿照STL的string类的完整实现,揭示其设…...
无实体对话式社交机器人 拟人化印象形成机制:基于多模态交互与文化适配的拓展研究
《如何感知AI对话者:无实体对话式社交机器人拟人化对其印象形成效果影响机制的实验研究》解析 一、研究背景与核心问题 (一)技术背景与研究动机 随着生成式AI技术发展,以ChatGPT、文心一言为代表的无实体对话式社交机器人兴起,用户对其高度拟人化特征有显著需求,如扮演…...
存储器:DDR和独立显卡的GDDR有什么区别?
本文来简要对比DDR(Double Data Rate SDRAM)和GDDR(Graphics Double Data Rate SDRAM)的区别,重点说明它们在设计、性能和应用上的差异: 1. 设计目标与架构 DDR:通用型DRAM,设计为…...
viewDesign里的table内嵌套select动态添加表格行绑定内容丢失
问题 描述 viewDesign里的table内嵌套select,表格的行数是手动点击按钮添加的,添加第一行选择select的内容能正常展示,添加第二行第一行的select的内容消失 代码 <FormItem label"内饰颜色"><Tableclass"mt_10&q…...
vue v-html无法解析<
vue v-html无法解析字符串的小于号 方法一:可以替换成转义符 (实际还是会报错) let str 12345<445667 str.replaceAll(<, <)方法二:可以替换成中文小于号 let str 12345<445667 str.replaceAll(<, <)...
COLT_CMDB_linux_userInfo_20250508.sh修复历史脚本输出指标信息中userName与输出信息不一致问题
#!/bin/bash #IT_BEGIN #IT_TYPE3 #IT SYSTEM_LINUX_AGENTUSERDISCOVER|discovery.user[disc] #原型指标 #IT_RULE SYSTEM_LINUX_AGENTUSERGROUPID|groupId[{#USERNAME}] #IT_RULE SYSTEM_LINUX_AGENTUSERHOME|userHome[{#USERNAME}] #IT_RULE SYSTEM_LINUX_AGENTUSERNAME|user…...
A. Row GCD(gcd的基本性质)
Problem - 1458A - Codeforces 思路: 首先得知道gcd的两个基本性质: (1) gcd(a,b)gcd(a,|b-a|) (2) gcd(a,b,c)gcd(a,gcd(b,c)) 结合题目所给的a1bj,a2bj...... anbj 根据第一条性质得到: gcd(a1bj,a2bj)gcd(…...
k8s术语之Horizontal Pod Autoscaling
应用的资源使用率通常都有高峰和低谷的时候,如何削峰填谷,提高整体的整体资源利用率,让service中的Pod个数自动调整呢?Horizontal Pod Autoscaling:使pod水平自动缩放。这个Object也是最能体现kubernetes之于传统运维价值的地方&a…...
函数级重构:如何写出高可读性的方法?
1. 引言:为什么方法级别的重构如此重要? 在软件开发中,方法(函数)是程序逻辑的基本单元。一个高质量的方法不仅决定了程序是否能正常运行,更直接影响到: 代码的可读性:能否让其他开发者快速理解可维护性:未来修改是否容易出错可测试性:是否便于编写单元测试协作效率…...
手撕基于AMQP协议的简易消息队列-8(单元测试的编写)
在MQTest中编写模块的单元测试 在MQTest中编写makefile文件来编译客户端模块 all:Test_FileHelper Test_Exchange Test_Queue Test_Binding Test_Message Test_VirtualHost Test_Route Test_Consumer Test_Channel Test_Connection Test_VirtualHost:Test_VirtualHost.cpp ..…...
硬件选型:工控机的选择要素
在机器视觉应用中,工控机作为核心计算设备,承担着图像处理、数据分析和设备控制等多重任务。由于机器视觉常常在工业自动化、质量检测和精密控制中发挥重要作用,工控机的选型直接影响系统的性能和可靠性。 1. 应用场景与需求 机器视觉系统广…...
【芯片设计- RTL 数字逻辑设计入门 4.1 -- verilog 组合逻辑和时序逻辑延时比较】
文章目录 Overview时间线简单示意Overview 我们来详细分析下面这段 RTL Code , sbcs_sbbusy 为什么会比 sbcs_sbbusy_nx 慢一拍(晚一个时钟周期变化)。 assign sbcs_sbbusy_nx = set_sbcs_sbbusy;always @(posedge clk or negedge dmi_resetn) beginif (!dmi_resetn) begi…...
关于ubuntu下交叉编译arrch64下的gtsam报错问题,boost中boost_regex.so中连接libicui18n.so.55报错的问题
交叉编译gtsam时遇到的报错信息如下:gtsam需要连接boost, 解决办法: 1.重新编译boost可解决。 2.自己搞定生成一个libicui18n.so.55。 由于我们的boost是公用的,因此1不太可能(我试过重新编译完boost,在编译gtsam完…...
IoT平台和AIoT平台的区别
1. 什么是AIoT平台? AIoT(人工智能物联网,Artificial Intelligence of Things)平台 是 人工智能(AI) 与 物联网(IoT) 深度融合的技术框架,通过将AI算法嵌入物联网终端或…...
iOS 模块化开发流程
iOS模块化开发是一种将大型项目拆分为独立、可复用模块的开发模式,能够提升代码可维护性、团队协作效率和动态交付能力。以下是iOS模块化开发的核心流程与关键要点: 一、模块化设计阶段 业务解耦与模块划分 横向分层:基础层(网络、…...
云原生安全治理体系建设全解:挑战、框架与落地路径
📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:云原生环境下,安全治理正在被重构 在传统IT架构中,安全防护多依赖边界设备(如防火墙、WAF、堡垒机)进行集中式防护。然而,在云原生环境下,这种“边界式”安全模型正面临颠覆。 应用微服务化…...
如何在Vue-Cli中使用Element-UI和Echarts和swiper插件(低版本)
1st.Element-UI 1.1 安装 在终端输入 npm install element-ui 1.2 导入 在全局main.js中全局导入Element-UI: // 导入element-ui组件库 import ElementUI from element-ui; // 导入element-ui组件库的样式 import element-ui/lib/theme-chalk/index.css; // 注…...
[特殊字符]【实战教程】用大模型LLM查询Neo4j图数据库(附完整代码)
🌟 核心要点速览 ✅ 基于LangChain框架实现LLM查询Neo4j ✅ 使用Qwen2.5模型(实测Llama3.1查不出内容) ✅ 包含完整数据准备代码实现效果演示 ✅ GitHub/Gitee源码已同步(文末获取) 🛠️ 环境准备 1️⃣ 安装Neo4j图数据库 # Windows安装指南参考&…...
Qt获取CPU使用率及内存占用大小
Qt 获取 CPU 使用率及内存占用大小 文章目录 Qt 获取 CPU 使用率及内存占用大小一、简介二、关键函数2.1 获取当前运行程序pid2.2 通过pid获取运行时间2.3 通过pid获取内存大小 三、具体实现五、写在最后 一、简介 近期在使用软件的过程中发现一个有意思的东西。如下所示&a…...
算法解密:除自身以外数组的乘积问题详解
算法解密:除自身以外数组的乘积问题详解 一、引言 在算法的奇妙旅程中,我们时常会遇到一些看似简单却蕴含深刻智慧的问题,“除自身以外数组的乘积”就是其中之一。这个问题不仅考验我们对数组操作的熟练程度,还要求我们在特定的限制条件下(不能使用除法且时间复杂度为O(n…...
基于Kubernetes的Apache Pulsar云原生架构解析与集群部署指南(上)
#作者:闫乾苓 文章目录 概念和架构概述主要特点消息传递核心概念Pulsar 的消息模型Pulsar 的消息存储与分发Pulsar 的高级特性架构BrokerBookKeeperZooKeeper 概念和架构 概述 Pulsar 是一个多租户、高性能的服务器到服务器消息传递解决方案。Pulsar 最初由雅虎开…...
信创生态核心技术栈:数据库与中间件
🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C、C#等开发语言,熟悉Java常用开…...
CMU-15445(3)——PROJECT#1-BufferPoolManager-Task#1
PROJECT#1-BufferPoolManager 在完成了前面基础的PROJECT#0后,从本节开始才正式进入了CMU-15445的学习,最终目的是构建一个面向磁盘的数据库管理系统。 PROJECT#1 的主要任务是实现数据库管理系统的缓冲池管理器,缓冲池负责在主存缓冲区与持…...
《数据结构初阶》【链式二叉树】
《数据结构初阶》【链式二叉树】 前言:---------------树---------------什么是树?📌爱心❤小贴士:树与非树?树的基本术语有哪些?关于节点的一些定义:关于树的一些定义:关于森林的定…...
Oracle免费认证来袭
1、Oracle Cloud Infrastructure 2025 Foundations Associate” 🔗 考证地址:https://mylearn.oracle.com/ou/exam-unproctored/oracle-cloud-infrastructure-2025-foundations-associate-1z0-1085-25/148056/241954 2、Oracle Cloud Infrastructure 2…...
Vim 编辑器常用快捷键速查表
Vim 编辑器常用快捷键速查表 Vim 快捷键大全 **1. 基础操作****2. 光标移动****3. 编辑文本****4. 查找替换****5. 分屏操作****6. 可视化模式** **附:Vim 模式切换流程图** 1. 基础操作 快捷键功能说明i进入插入模式(光标前)a进入插入模式&…...
从父类到子类:C++ 继承的奇妙旅程(1)
前言: 在前文,小编讲述了C模板的进阶内容,下面我们就要结束C初阶的旅行,开始进入C进阶容的旅c程,今天旅程的第一站就是C三大特性之一——继承的旅程,各位扶好扶手,开始我们今天的C继承的奇妙旅程…...
HTML9:页面结构分析
页面结构分析 元素名描述header标题头部区域的内容(用于页面或页面中的一块区域)footer标记脚部区域的内容(用于整个页面或页面的一块区域)sectionWeb页面的一块独立区域article独立的文章内容aside相关的内容或应用(…...
LabVIEW超声波液位计检定
在工业生产、运输和存储等环节,液位计的应用十分广泛,其中超声波液位计作为非接触式液位测量设备备受青睐。然而,传统立式水槽式液位计检定装置存在受建筑高度影响、量程范围受限、流程耗时长等问题,无法满足大量程超声波液位计的…...
maven 安装 本地 jar
命令: mvn install:install-file -DgroupIdnet.pingfang.application -DartifactIdjna -Dversion5.1.0 -Dpackagingjar -DfileD:\maven\repository1\jna\5.1.0\jna-5.1.0.jarmvn:这是Maven的执行命令。 install:install-file:这是Maven插件目…...
leetcode 141. Linked List Cycle
题目描述: 代码: 用哈希表也可以解决,但真正考察的是用快慢指针法。 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Soluti…...
【Python】通过`Editable Install`模式详解,解决Python开发总是import出错的问题
摘要 田辛老师在很久以前,写过一篇关于Python的模块、包之间的内部关系的博客,叫做【Python】__init__.py 文件详解。 虽然我觉得这篇文章已经足够了, 但是还是有很多朋友碰到开发的过程中import包报错的问题。 今天, 田辛老师想…...
C 语言网络编程问题:E1696 无法打开 源 文件 “sys/socket.h“
#include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h>在 C 语言网络编程中,上述代码报如下错误 E1696 无法打开 源 文件 "sys/socket.h"E1696 无法打开 源 文件 "netinet/in.h" E1696 无法打开 源 文件…...
操作指南*
任务1: 环境搭建 1.1 创建Spring Boot项目 操作步骤: 使用IDEA创建项目: 打开IDEA → File → New → Project选择 Spring Initializr → 设置项目信息(Group、Artifact、Java版本)选择依赖:Spring Web、MySQL Drive…...
VRM Add-on for Blender 学习笔记
VRM Add-on for Blender 使用教程-CSDN博客 VRM Add-on for Blender 是 Blender 的一个官方插件,主要用于 导入和导出 VRM 格式的 3D 模型。VRM(Virtual Reality Model)是一种开放标准的 3D 人形角色模型格式,起源于日本…...
C++ 完美转发
C 完美转发逐步详解 1. 问题背景与核心目标 在 C 模板编程中,若直接将参数传递给其他函数,参数的 值类别(左值/右值)和 类型信息(如 const)可能会丢失。例如: template<typename T> voi…...
学习记录:DAY23
项目开发与学习记录:字段注入优化 前言 我总有一种什么大的要来了的危机感。还是尽快把项目做起来吧,现在全在弄底层的框架。这是一个两天的blog,前一天bug没修好,气到连blog都没写。 日程 5月7日 晚上7点:本来想玩…...
Linux 信号(下篇)
Linux 信号-CSDN博客(上篇) 前言:在我上一篇博客写到了信号产生的三种条件分别是键盘组合键、kill命令、系统调用接口; 接下来我要把信号产生剩余的两个条件介绍完毕并理解信号的保存,和信号从产生到保存到处理整个过…...
hadoop中的序列化和反序列化(1)
1. 什么是序列化和反序列化 序列化(Serialization) 是将对象的状态信息转换为可以存储或传输的格式的过程。序列化后的对象可以保存到文件中,或者通过网络传输。 反序列化(Deserialization) 是序列化的逆过程&#x…...
linux查java进程CPU高的原因
问题:linux查java进程CPU高的原因 解决:用jdk带的工具分析 被查的java最好也使用jdk启动 systemctl启动的注意要去掉PrivateTmptrue /opt/jdk1.8.0_441/bin/jps -l top -Hp 8156 printf "%x" 8533 /opt/jdk1.8.0_441/bin/jstack 8156 |…...
鸿蒙开发——3.ArkTS声明式开发:构建第一个ArkTS应用
鸿蒙开发——3.ArkTS声明式开发:构建第一个ArkTS应用 一、创建ArkTS工程二、ArkTS工程目录结构(Stage模型)三、构建第一个页面四、构建第二个页面五、实现页面之间的跳转六、模拟器运行 一、创建ArkTS工程 1、若首次打开DevEco Studio,请点击…...
vue3+ts的watch全解!
vue3中的watch只能监听以下四种数据: 1.ref定义的数据 2.reactive定义的数据 3.函数返回一个值(getter函数) 4.一个包含上述内容的数组 通常我们在使用watch的时候,通常会遇到以下几种情况: 情况一: …...
yarn的概述
1.Yarn的定义 2.Yarn的三大组件 3.Yarn的调度策略 1. YARN的定义 YARN(Yet Another Resource Negotiator) 是Hadoop生态系统中的一个资源管理框架,用于管理和调度集群中的计算资源。它允许多个应用程序在同一个集群上高效地运行,…...
C++初阶-string类4
目录 1.String operations 1.1string::c_str 1.2string::data 1.3string::copy 1.4string::find 1.5string::rfind 1.6string::find_first_of 1.7string::find_last_of 1.8string::find_first_not_of和string::find_last_not_of find_first_not_of 功能 典型用途 f…...
HarmonyOS NEXT深度解析:自研框架ArkUI-X的技术革命与跨平台实践
HarmonyOS NEXT~深度解析:自研框架ArkUI-X的技术革命与跨平台实践 引言:ArkUI-X的诞生背景与战略意义 在HarmonyOS NEXT全面摒弃AOSP代码的历史性转折点上,华为推出的ArkUI-X框架标志着国产操作系统研发进入深水区。根据华为202…...