龙岩网站建设找哪家/seo刷关键词排名免费
目录
1. Zookeeper命令操作
1.1 Zookeeper 数据模型
1.2 Zookeeper服务端常用命令
1.3 Zookeeper客户端常用命令
1.3.1 基本CRUD
1.3.2 创建临时&顺序节点
2. Zookeeper JavaAPI操作
2.1 Curator介绍
2.2 引入Curator
2.3 建立连接
2.4 添加节点
2.5 修改节点
2.6 删除节点
2.7 Watch事件监听
2.7.1 zkCli客户端使用watch
2.7.2 curator客户端使用watch
1. Zookeeper命令操作
1.1 Zookeeper 数据模型
ZooKeeper 是一个树形目录服务,其数据模型和Unix的文件系统目录树很类似,拥有一个层次化结构。
Zookeeper这里面的每一个节点都被称为: ZNode,每个节点上都会保存自己的数据和节点信息。
节点可以拥有子节点,同时也允许少量(1MB)数据存储在该节点之下。
节点可以分为四大类:
-
PERSISTENT 持久化节点
-
EPHEMERAL 临时节点 :-e
-
PERSISTENT_SEQUENTIAL 持久化顺序节点 :-s
-
EPHEMERAL_SEQUENTIAL 临时顺序节点 :-es
1.2 Zookeeper服务端常用命令
•启动 ZooKeeper 服务
./zkServer.sh start
•查看 ZooKeeper 服务状态
./zkServer.sh status
•停止 ZooKeeper 服务
./zkServer.sh stop
•重启 ZooKeeper 服务
./zkServer.sh restart
1.3 Zookeeper客户端常用命令
1.3.1 基本CRUD
-
连接Zookeeper客户端
# 本地连接 zkCli.sh # 远程连接 zkCli.sh -server ip:2181
-
断开连接
quit
-
查看命令帮助
help
-
显示制定目录下节点
# ls 目录 ls /
-
创建节点
# create /节点path value [zk: localhost:2181(CONNECTED) 0] ls / [zookeeper] [zk: localhost:2181(CONNECTED) 1] create /app1 msb123 Created /app1 [zk: localhost:2181(CONNECTED) 2] ls / [app1, zookeeper] [zk: localhost:2181(CONNECTED) 3] create /app2 Created /app2 [zk: localhost:2181(CONNECTED) 4] ls / [app1, app2, zookeeper]
-
获取节点值
# get /节点path [zk: localhost:2181(CONNECTED) 15] get /app1 msb123 [zk: localhost:2181(CONNECTED) 16] get /app2 null
-
设置节点值
# set /节点path value [zk: localhost:2181(CONNECTED) 17] set /app2 msb456 [zk: localhost:2181(CONNECTED) 18] get /app2 msb456
-
删除单个节点
# delete /节点path [zk: localhost:2181(CONNECTED) 19] delete /app2 [zk: localhost:2181(CONNECTED) 20] get /app2 Node does not exist: /app2 [zk: localhost:2181(CONNECTED) 21] ls / [app1, zookeeper]
-
删除带有子节点的节点
# deleteall /节点path [zk: localhost:2181(CONNECTED) 22] create /app1 Node already exists: /app1 [zk: localhost:2181(CONNECTED) 23] create /app1/p1 Created /app1/p1 [zk: localhost:2181(CONNECTED) 24] create /app1/p2 Created /app1/p2 [zk: localhost:2181(CONNECTED) 25] delete /app1 Node not empty: /app1 [zk: localhost:2181(CONNECTED) 26] deleteall /app1 [zk: localhost:2181(CONNECTED) 27] ls / [zookeeper]
1.3.2 创建临时&顺序节点
-
创建临时节点 (-e)
-
临时节点是在会话结束后,自动被删除的
-
# create -e /节点path value [zk: localhost:2181(CONNECTED) 29] create -e /app1 msb123 Created /app1 [zk: localhost:2181(CONNECTED) 30] get /app1 msb123 [zk: localhost:2181(CONNECTED) 31] quit# 退出后再次连接,临时节点已经删除 [zk: localhost:2181(CONNECTED) 0] ls / [zookeeper]
-
创建顺序节点 (-s)
-
创建出的节点,根据先后顺序,会在节点之后带上一个数值,越后执行数值越大,适用于分布式锁的应用场景- 单调递增.
-
# create -s /节点path value [zk: localhost:2181(CONNECTED) 0] ls / [zookeeper] [zk: localhost:2181(CONNECTED) 1] create -s /app2 Created /app20000000003 [zk: localhost:2181(CONNECTED) 2] ls / [app20000000003, zookeeper] [zk: localhost:2181(CONNECTED) 3] create -s /app2 Created /app20000000004 [zk: localhost:2181(CONNECTED) 4] ls / [app20000000003, app20000000004, zookeeper] [zk: localhost:2181(CONNECTED) 5] create -s /app2 Created /app20000000005 [zk: localhost:2181(CONNECTED) 6] ls / [app20000000003, app20000000004, app20000000005, zookeeper]# 创建临时顺序节点 [zk: localhost:2181(CONNECTED) 7] create -es /app3 Created /app30000000006 [zk: localhost:2181(CONNECTED) 8] ls / [app20000000003, app20000000004, app20000000005, app30000000006, zookeeper] # 退出 [zk: localhost:2181(CONNECTED) 9] quit# 重新链接,临时顺序节点已经被删除 [zk: localhost:2181(CONNECTED) 0] ls / [app20000000003, app20000000004, app20000000005, zookeeper]
-
查询节点详细信息
# ls –s /节点path [zk: localhost:2181(CONNECTED) 5] ls / -s [app20000000003, app20000000004, app20000000005, zookeeper] cZxid = 0x0 ctime = Thu Jan 01 08:00:00 CST 1970 mZxid = 0x0 mtime = Thu Jan 01 08:00:00 CST 1970 pZxid = 0x14 cversion = 10 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 0 numChildren = 4
-
czxid:节点被创建的事务ID
-
ctime: 创建时间
-
mzxid: 最后一次被更新的事务ID
-
mtime: 修改时间
-
pzxid:子节点列表最后一次被更新的事务ID
-
cversion:子节点的版本号
-
dataversion:数据版本号
-
aclversion:权限版本号
-
ephemeralOwner:用于临时节点,代表临时节点的事务ID,如果为持久节点则为0
-
dataLength:节点存储的数据的长度
-
numChildren:当前节点的子节点个数
2. Zookeeper JavaAPI操作
2.1 Curator介绍
Curator是Netflix公司开源的一套zookeeper客户端框架,Curator是对Zookeeper支持最好的客户端框架。Curator封装了大部分Zookeeper的功能,比如Leader选举、分布式锁等,减少了技术人员在使用Zookeeper时的底层细节开发工作。
Curator框架主要解决了三类问题:
-
封装ZooKeeper Client与ZooKeeper Server之间的连接处理(提供连接重试机制等)。
-
提供了一套Fluent风格的API,并且在Java客户端原生API的基础上进行了增强(创捷多层节点、删除多层节点等)。
-
提供ZooKeeper各种应用场景(分布式锁、leader选举、共享计数器、分布式队列等)的抽象封装。
2.2 引入Curator
-
创建maven项目,引入依赖
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.mashibing</groupId><artifactId>zk-client1</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.10</version><scope>test</scope></dependency><!--curator--><dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>4.0.0</version></dependency><dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>4.0.0</version></dependency><!--日志--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.21</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.21</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build> </project>
2.3 建立连接
方式1
public class CuratorTest {/*** 建立连接*/@Testpublic void testConnect(){/*** String connectString 连接字符串。 zk地址和端口: "192.168.58.100:2181,192.168.58.101:2181"* int sessionTimeoutMs 会话超时时间 单位ms* int connectionTimeoutMs 连接超时时间 单位ms* RetryPolicy retryPolicy 重试策略*///1. 第一种方式//重试策略 baseSleepTimeMs 重试之间等待的初始时间,maxRetries 重试的最大次数RetryPolicy retryPolicy = new ExponentialBackoffRetry(3000,10);CuratorFramework client = CuratorFrameworkFactory.newClient("192.168.58.100:2181", 60 * 1000,15 * 1000, retryPolicy);//开启连接client.start();} }
重试策略
-
RetryNTimes: 重试没有次数限制
-
RetryOneTime:只重试没有次数限制,一般也不常用
-
ExponentialBackoffRetry: 只重试一次的重试策略
方式2
public class CuratorTest {private CuratorFramework client;/*** 建立连接*/@Testpublic void testConnect(){/*** String connectString 连接字符串。 zk地址和端口: "192.168.58.100:2181,192.168.58.101:2181"* int sessionTimeoutMs 会话超时时间 单位ms* int connectionTimeoutMs 连接超时时间 单位ms* RetryPolicy retryPolicy 重试策略*///1. 第一种方式//重试策略 baseSleepTimeMs 重试之间等待的初始时间,maxRetries 重试的最大次数RetryPolicy retryPolicy = new ExponentialBackoffRetry(3000,10);// client = CuratorFrameworkFactory.newClient("192.168.58.100:2181", 60 * 1000, // 15 * 1000, retryPolicy);//2. 第二种方式,建造者方式创建client = CuratorFrameworkFactory.builder().connectString("192.168.58.100:2181").sessionTimeoutMs(60*1000).connectionTimeoutMs(15 * 1000).retryPolicy(retryPolicy).namespace("mashibing") //根节点名称设置.build();//开启连接client.start();} }
2.4 添加节点
修改testConnect注解,@Before
/*** 建立连接*/@Beforepublic void testConnect()
创建节点:create 持久 临时 顺序 数据
public class CuratorTest {/*** 创建节点 create 持久 临时 顺序 数据*///1.创建节点@Testpublic void testCreate1() throws Exception {// 如果没有创建节点,没有指定数据,则默认将当前客户端的IP 作为数据存储String path = client.create().forPath("/app1");System.out.println(path);}@Afterpublic void close(){client.close();} }
//2.创建节点 带有数据@Testpublic void testCreate2() throws Exception {String path = client.create().forPath("/app2","hehe".getBytes());System.out.println(path);}
//3.设置节点类型 默认持久化@Testpublic void testCreate3() throws Exception {//设置临时节点String path = client.create().withMode(CreateMode.EPHEMERAL).forPath("/app3");System.out.println(path);}
由于是临时节点,需要打断点才能看到节点信息
//1.查询数据 getData @Test public void testGet1() throws Exception {byte[] data = client.getData().forPath("/app1");System.out.println(new String(data)); }//2.查询子节点 getChildren() @Test public void testGet2() throws Exception {List<String> path = client.getChildren().forPath("/");System.out.println(path); }//3.查询节点状态信息 @Test public void testGet3() throws Exception {Stat status = new Stat();System.out.println(status);//查询节点状态信息: ls -sclient.getData().storingStatIn(status).forPath("/app1");System.out.println(status); }
2.5 修改节点
//1. 基本数据修改@Testpublic void testSet() throws Exception {client.setData().forPath("/app1","hahaha".getBytes());}//根据版本修改(乐观锁)@Testpublic void testSetVersion() throws Exception {//查询版本Stat status = new Stat();//查询节点状态信息: ls -sclient.getData().storingStatIn(status).forPath("/app1");int version = status.getVersion();System.out.println(version); //2client.setData().withVersion(version).forPath("/app1","hehe".getBytes());}
2.6 删除节点
//1.删除单个节点@Testpublic void testDelete1() throws Exception {client.delete().forPath("/app4");}//删除带有子节点的节点@Testpublic void testDelete2() throws Exception {client.delete().deletingChildrenIfNeeded().forPath("/app4");}//必须删除成功(超时情况下,重试删除)@Testpublic void testDelete3() throws Exception {client.delete().guaranteed().forPath("/app2");}//回调 删除完成后执行@Testpublic void testDelete4() throws Exception {client.delete().guaranteed().inBackground((curatorFramework, curatorEvent) -> {System.out.println("我被删除了");System.out.println(curatorEvent);}).forPath("/app1");}
2.7 Watch事件监听
ZooKeeper 允许用户在指定节点上注册一些Watcher,并且在一些特定事件触发的时候,ZooKeeper 服务端会将事件通知到感兴趣的客户端上去,该机制是 ZooKeeper 实现分布式协调服务的重要特性。
ZooKeeper 中引入了Watcher机制来实现了发布/订阅功能能,能够让多个订阅者同时监听某一个对象,当一个对象自身状态变化时,会通知所有订阅者。
2.7.1 zkCli客户端使用watch
添加 -w 参数可实时监听节点与子节点的变化,并且实时收到通知。非常适用保障分布式情况下的数据一至性。
其使用方式如下
命令 | 描述 |
---|---|
ls -w path | 监听子节点的变化(增,删) [监听目录] |
get -w path | 监听节点数据的变化 |
stat -w path | 监听节点属性的变化 |
Zookeeper事件类型
-
NodeCreated: 节点创建
-
NodeDeleted: 节点删除
-
NodeDataChanged:节点数据变化
-
NodeChildrenChanged:子节点列表变化
-
DataWatchRemoved:节点监听被移除
-
ChildWatchRemoved:子节点监听被移除
1)get -w path 监听节点数据变化
-
会话1
-
会话2
-
再回到会话一
2) ls -w /path 监听子节点的变化(增,删) [监听目录]
-
会话1
-
会话2
-
切到【会话一】 观察输出的监听日志
当然了 delete 目录,也会发生变化
如果对节点数据内容,ls -w 是收不到通知的,只能通过 get -w来实现 。
这里,监听一点触发,就失效了,切记。
3) ls -R -w /path 例子二 循环递归的监听
2.7.2 curator客户端使用watch
ZooKeeper 原生支持通过注册Watcher来进行事件监听,但是其使用并不是特别方便需要开发人员自己反复注册Watcher,比较繁琐。
Curator引入了 Cache 来实现对 ZooKeeper 服务端事件的监听。
ZooKeeper提供了三种Watcher:
-
NodeCache : 只是监听某一个特定的节点
-
PathChildrenCache : 监控一个ZNode的子节点.
-
TreeCache : 可以监控整个树上的所有节点,类似于PathChildrenCache和NodeCache的组合
1)watch监听 NodeCache
public class CuratorWatchTest {/*** 演示 NodeCache : 给指定一个节点注册监听*/@Testpublic void testNodeCache() throws Exception {//1. 创建NodeCache对象NodeCache nodeCache = new NodeCache(client, "/app1"); //监听的是 /mashibing和其子目录app1//2. 注册监听nodeCache.getListenable().addListener(new NodeCacheListener() {@Overridepublic void nodeChanged() throws Exception {System.out.println("节点变化了。。。。。。");//获取修改节点后的数据byte[] data = nodeCache.getCurrentData().getData();System.out.println(new String(data));}});//3. 设置为true,开启监听nodeCache.start(true);while(true){}} }
2)watch监听 PathChildrenCache
/*** 演示 PathChildrenCache: 监听某个节点的所有子节点*/@Testpublic void testPathChildrenCache() throws Exception {//1.创建监听器对象 (第三个参数表示缓存每次节点更新后的数据)PathChildrenCache pathChildrenCache = new PathChildrenCache(client, "/app2", true);//2.绑定监听器pathChildrenCache.getListenable().addListener(new PathChildrenCacheListener() {@Overridepublic void childEvent(CuratorFramework curatorFramework, PathChildrenCacheEvent pathChildrenCacheEvent) throws Exception {System.out.println("子节点发生变化了。。。。。。");System.out.println(pathChildrenCacheEvent);if(PathChildrenCacheEvent.Type.CHILD_UPDATED == pathChildrenCacheEvent.getType()){//更新子节点System.out.println("子节点更新了!");//在一个getData中有很多数据,我们只拿data部分byte[] data = pathChildrenCacheEvent.getData().getData();System.out.println("更新后的值为:" + new String(data));}else if(PathChildrenCacheEvent.Type.CHILD_ADDED == pathChildrenCacheEvent.getType()){//添加子节点System.out.println("添加子节点!");String path = pathChildrenCacheEvent.getData().getPath();System.out.println("子节点路径为: " + path);}else if(PathChildrenCacheEvent.Type.CHILD_REMOVED == pathChildrenCacheEvent.getType()){//删除子节点System.out.println("删除了子节点");String path = pathChildrenCacheEvent.getData().getPath();System.out.println("子节点路径为: " + path);}}});//3. 开启pathChildrenCache.start();while(true){}}
事件对象信息分析
PathChildrenCacheEvent{type=CHILD_UPDATED, data=ChildData{path='/app2/m1', stat=164,166,1670114647087,1670114698259,1,0,0,0,3,0,164, data=[49, 50, 51]} }
3)watch监听 TreeCache
TreeCache相当于NodeCache(只监听当前结点)+ PathChildrenCache(只监听子结点)的结合版,即监听当前和子结点。
/*** 演示 TreeCache: 监听某个节点的所有子节点*/@Testpublic void testCache() throws Exception {//1.创建监听器对象TreeCache treeCache = new TreeCache(client, "/app2");//2.绑定监听器treeCache.getListenable().addListener(new TreeCacheListener() {@Overridepublic void childEvent(CuratorFramework curatorFramework, TreeCacheEvent treeCacheEvent) throws Exception {System.out.println("节点变化了");System.out.println(treeCacheEvent);if(TreeCacheEvent.Type.NODE_UPDATED == treeCacheEvent.getType()){//更新节点System.out.println("节点更新了!");//在一个getData中有很多数据,我们只拿data部分byte[] data = treeCacheEvent.getData().getData();System.out.println("更新后的值为:" + new String(data));}else if(TreeCacheEvent.Type.NODE_ADDED == treeCacheEvent.getType()){//添加子节点System.out.println("添加节点!");String path = treeCacheEvent.getData().getPath();System.out.println("子节点路径为: " + path);}else if(TreeCacheEvent.Type.NODE_REMOVED == treeCacheEvent.getType()){//删除子节点System.out.println("删除节点");String path = treeCacheEvent.getData().getPath();System.out.println("删除节点路径为: " + path);}}});//3. 开启treeCache.start();while(true){}}
相关文章:

第二节 zookeeper基础应用与实战
目录 1. Zookeeper命令操作 1.1 Zookeeper 数据模型 1.2 Zookeeper服务端常用命令 1.3 Zookeeper客户端常用命令 1.3.1 基本CRUD 1.3.2 创建临时&顺序节点 2. Zookeeper JavaAPI操作 2.1 Curator介绍 2.2 引入Curator 2.3 建立连接 2.4 添加节点 2.5 修改节点 …...

改变AI服务器:探索界面互连芯片技术的创新突破
根据TrendForce的数据,AI服务器的出货量约为130,000台,占全球服务器总出货量的约1%。随着微软、Meta、百度和字节跳动等主要制造商相继推出基于生成式AI的产品和服务,订单量显著增加。预测显示,在ChatGPT等应用的持续需求推动下&a…...

【P1506 拯救oibh总部】
拯救oibh总部 题目背景 oibh 总部突然被水淹没了!现在需要你的救援…… 题目描述 oibh 被突来的洪水淹没了,还好 oibh 总部有在某些重要的地方起一些围墙。用 * 号表示,而一个四面被围墙围住的区域洪水是进不去的。 oibh 总部内部也有许…...

应用层 HTTP协议(1)
回顾 前面我们说到了数据链路层,网络层IP协议,传输层的TCP/UDP协议一些知识点,现在让我们谈谈 应用层的HTTP协议的知识点. 这篇我们先从大局入手,仍然是对总体报文进行全局分析,再对细节报文进行拆解分析 版本 首先我们谈谈HTTP协议的版本 HTTP 0.9 (1991) HTTP 1.0 (1992 - 1…...

Linux学习笔记(centOS)—— 文件系统
目录 一、Linux中的文件 打开方式 二、目录结构 三、相关命令 切换目录命令 列出当前目录下的文件和目录命令 一、Linux中的文件 “万物皆文件。” 图1.1 所有文件 打开方式 图形化界面左上角的位置→计算机,打开以后就可以看到Linux全部的文件了…...

华视 CVR-100UC 身份证读取 html二次开发模板
python读卡:python读卡 最近小唐应要求要开发一个前端的身份证读卡界面,结果华视CVR-100UC 的读取界面是在是有点,而且怎么调试连官方最基本的启动程序都执行不了。CertReader.ocx 已成功,后面在问询一系列前辈之后,大…...

ubuntu彻底卸载cuda 重新安装cuda
sudo apt-get --purge remove "*cublas*" "*cufft*" "*curand*" \"*cusolver*" "*cusparse*" "*npp*" "*nvjpeg*" "cuda*" "nsight*" cuda10以上 cd /usr/local/cuda-xx.x/bin/ s…...

【Java】学习笔记:关于java.sql;
Connection conn null; Connection:这是一个 Java 接口,表示与数据库的连接。在这里,conn 是一个 Connection 类型的变量。 conn:这是变量的名称,可以根据需要进行更改。通常,conn 被用作表示数据库连接的…...

python web 框架Django学习笔记
2018年5月 python web 框架Django学习笔记 Django 架站的16堂课 MVC架构设计师大部分框架或大型程序项目中一种软件工程的架构模式,把程序或者项目分为三个主要组成部分,Model数据模型、View视图、Controller控制器。 命令及设置相关 创建数据库及中间…...

ubuntn20 搭建 redmine
安装数据库 更新包列表:sudo apt update 安装MySQL服务器:sudo apt install mysql-server 运行安全性脚本:MySQL服务器安装后,运行以下命令以加固安装:sudo mysql_secure_installation 这个脚本将引导您完成几个安全选…...

每日五道java面试题之java基础篇(三)
第一题. switch 是否能作⽤在 byte/long/String 上? Java5 以前 switch(expr)中,expr 只能是 byte、short、char、int。从 Java 5 开始,Java 中引⼊了枚举类型, expr 也可以是 enum 类型。从 Java 7 开始,expr 还可以…...

如何升级 gpt4?快速升级至ChatGPT Plus指南,爆火的“ChatGPT”到底是什么?
提到 ChatGPT。想必大家都有所耳闻。自从 2022 年上线以来,就受到国内外狂热的追捧和青睐,上线2个月,月活突破1个亿!!! 而且还在持续上涨中。因为有很多人都在使用 ChatGPT 。无论是各大头条、抖音等 App、…...

【实习】深信服防火墙网络安全生产实习
一、实习概况 1.1实习目的 1.掌握防火墙规则的作用2.掌握代理上网功能的作用3.掌握端口映射功能的作用 1.2实习任务 1.防火墙的WEB控制台 2.需要在防火墙上配置dnat …...

怎么把视频音乐提取成mp3?分享详细工具和方法!
在数字媒体时代,音乐已经成为我们生活中不可或缺的一部分。有时候,我们会在社交媒体、视频分享网站或在线视频平台上看到一些非常喜欢的视频音乐,想要将其保存为MP3格式以便随时随地聆听。那么,如何从视频中提取音乐并转换为MP3格…...

代码随想录算法训练营第44天 | 完全背包理论基础 518.零钱兑换II 377.组合总和 Ⅳ
完全背包理论基础 完全背包与01背包只相差在物品是无限取用的。因此和01背包相比第二层对背包容量的遍历应该是正序的,而且正因为这个正序,使得在纯完全背包问题中,背包容量和物品的遍历是可以倒过来的。 #include <bits/stdc.h> usi…...

深度解析与推荐:主流Web前端开发框架
一、引言 在信息化社会中,Web前端开发的重要性日益凸显。作为连接用户与后台服务的关键桥梁,前端界面不仅直接影响用户体验,更是企业品牌形象、产品价值传递的重要载体。随着互联网技术的飞速发展,用户对于网站和应用的交互性、响应速度以及视觉效果等方面的要求越来越高,…...

【React】如何使antd禁用状态的表单输入组件响应点击事件?
最近遇到一个需求,需要在<Input.textarea>组件中,设置属性disabled为true,使textarea响应点击事件,但直接绑定onClick并不会在禁用状态下被响应。 解决方法1 之后尝试了很多方法,比如设置csspointer-events:no…...

Apache Flink
前言 最近在学习室内融合定位服务架构,业务架构上,涵盖了数据采集、处理、状态管理、实时计算和告警等多个方面,但有些问题:这套系统中包含了大量的有状态计算,目前是通过自设计内存对象进行管理,并利用Re…...

SpringMVC速成(一)
文章目录 SpringMVC速成(一)1.SpringMVC概述2.SpringMVC入门案例2.1 需求分析2.2 案例制作步骤1:创建Maven项目步骤2:补全目录结构步骤3:导入jar包步骤4:创建配置类步骤5:创建Controller类步骤6:使用配置类替换web.xml步骤7:配置Tomcat环境步骤8:启动运行…...

通过nginx学习linux进程名的修改
目录 1. 缘起2. 背景知识3. 源码分析3.1 准备工作3.2 设置进程名字 1. 缘起 在运行nginx的时候,用ps查看nginx的进程信息,可能的输出如下: root 42169 3105 0 16:51 ? 00:00:00 nginx: master process ./objs/nginx root …...

【PyTorch】实现迁移学习框架DANN
文章目录 前言代码实现1、导入数据库关于torch.manual_seed(1)2、参数设置3、数据导入4、定义训练函数4.1 nn.CrossEntropyLoss()4.2 .detach()4.3 .size VS .shape4.4 .to(DEVICE)4.5 .max()4.6 optimizer.zero_grad()4.7 len(data...

thinkphp6入门(18)-- 中间件中除了handle函数,还可以有其它函数吗
在ThinkPHP 6的中间件中,除了 handle 方法外,还可以定义其他方法。这些额外的方法可以用于执行中间件中的不同逻辑,但是只有 handle 方法是中间件的入口点,其他方法则需要在 handle 方法中手动调用。 (图片来自https://www.cnblog…...

Java stream 流的基本使用
Java stream 的基本使用 package com.zhong.streamdemo.usestreamdemo;import jdk.jfr.DataAmount; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.util.ArrayList; import java.util.Comparator; import java.util.Li…...

C++面向对象 Part 2
文章目录 类六个默认存在的成员函数构造函数:析构函数:拷贝构造函数:拷贝构造详解及细节: 赋值运算符重载;取地址及const取地址操作符重载const修饰的含义: 类六个默认存在的成员函数 构造函数 析构函数 拷贝构造函数 赋值运算…...

海外云手机的核心优势
随着5G时代的到来,云计算产业正处于高速发展的时期,为海外云手机的问世创造了一个可信任的背景。在资源有限且需求不断增加的时代,将硬件设备集中在云端,降低个人用户的硬件消耗,同时提升性能,这一点单单就…...

CDN相关和HTTP代理
CDN相关和HTTP代理 参考: 《透视 HTTP 协议》——chrono 把这两个放在一起是因为容易搞混,我一开始总以为CDN就是HTTP代理,但是看了极客时间里透视HTTP协议的讲解,感觉又不仅于此,于是专门写下来。 先说结论…...

STM32的ADC电压采集
时间记录:2024/2/9 一、ADC相关知识点 (1)STM32的ADC时钟不要超过14MHz,不然结果的准确率将下降 (2)ADC分为规则组和注入组,规则组相当于正常运行的程序,注入组相当于中断可以打断…...

基于麻雀优化算法优化XGBoost参数的优化控制策略
目录 一、背景 二、算法流程图 三、附录 一、背景 为提高极端梯度提升(Extreme Gradient Boosting, XGBoost)集成算法在时间预测、信贷风险预测、工件参数预测、故障诊断预测等方面中的准确性,研究者提出了一种改进的麻雀算法(…...

Python爬虫——请求库安装
目录 1.打开Anaconda Prompt 创建环境2.安装resuests3.验证是否安装成功4.安装Selenium5.安装ChromeDriver5.1获取chrom的版本5.1.1点击浏览器右上三个点5.1.2点击设置5.1.3下拉菜单,点击最后关于Chrome,获得其版本 5.2 打开网址 [chromedriver](https:/…...

瑞芯微推理RKNN使用
参考资料 toolkit2 官网资料 野火实践指南 Ubuntu22.04实践 安装toolkit2 安装命令pip3 install -r xxx/packages/requirements_cp310-1.6.0.txt pip3 install xxx/packages/rknn_toolkit2-1.6.081f21f4d-cp310-cp310-linux_x86_64.whl注意加上 -i xxx 可能会造成下载tf-es…...