Mycat核心教程--ZooKeeper集群搭建【三】

Mycat核心教程--ZooKeeper集群搭建

  • 八、 ZooKeeper集群搭建
    • 8.1.ZooKeeper简介
    • 8.2.数据复制的好处
    • 8.3.Zookeeper设计目的
    • 8.4.zookeeper集群包括3种角色
      • 8.4.1.Leader角色
      • 8.4.2.Follower 角色
      • 8.4.3.Observer 角色
    • 8.5.zookeeper集群工作流程
    • 8.6.zookeeper集群节点数量为奇数,建议至少3个节点
    • 8.7.ZooKeeper 集群搭建
      • 8.7.1.下载ZooKeeper安装包并解压
      • 8.7.2.进入ZooKeeper解压后的配置目录(conf),复制配置文件并改名为zoo.cfg
      • 8.7.3.修改zookeeper数据文件存放目录
      • 8.7.4.修改zoo.cfg 配置文件内容为
      • 8.7.5.创建ServerID标识
      • 8.7.6.添加到环境变量
      • 8.7.7.ZooKeeper启动命令
      • 8.7.8.ZooKeeper服务端口为2181,查看服务已经启动
      • 8.7.9.注意:Starting zookeeper … FAILED TO START
      • 8.7.10.Address unresolved
    • 8.8.Zookeeper集群查看【host129为leader】
    • 8.9.模拟集群故障--【host130为leader】
    • 8.10.Zookeeper客户端验证
    • 8.11.zkCli客户端支持操作命令
  • endl

八、 ZooKeeper集群搭建

ZooKeeper官网下载地址:https://zookeeper.apache.org/releases.html

apache下载:https://downloads.apache.org/

在这里插入图片描述

8.1.ZooKeeper简介

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。

ZooKeeper是一个分布式数据一致性的解决方案,分布式应用可以基于它实现发布订阅、负载均衡、命名服务、协调通知、集群管理、master选举、分布式锁和分布式队列的特性

8.2.数据复制的好处

  • 容错:一个节点出错,不至于让整个集群无法提供服务

  • 扩展性:通过增加服务器节点能提高 ZooKeeper 系统的负载能力,把负载分布到多个节点上

  • 高性能:客户端可访问本地 ZooKeeper 节点或者访问就近的节点,依次提高用户的访问速度

8.3.Zookeeper设计目的

Zookeeper的设计目的是提供高性能(简单的数据模型),高可用(构建集群),顺序一致性(严格顺序访问)的分布式协调服务,保证数据一致性。

    1. 最终一致性:client不论连接到哪个Server,展示给它都是同一个视图,这是zookeeper最重要的性能。
    1. 可靠性:具有简单、健壮、良好的性能,如果消息被到一台服务器接受,那么它将被所有的服务器接受。
    1. 实时性:Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。但由于网络延时等原因,Zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口。
    1. 等待无关(wait-free):慢的或者失效的client不得干预快速的client的请求,使得每个client都能有效的等待。
    1. 原子性:更新只能成功或者失败,没有中间状态。
    1. 顺序性:包括全局有序和偏序两种:全局有序是指如果在一台服务器上消息a在消息b前发布,则在所有Server上消息a都将在消息b前被发布;偏序是指如果一个消息b在消息a后被同一个发送者发布,a必将排在b前面。

8.4.zookeeper集群包括3种角色

zookeeper集群包括3种角色:leader(核心)、follower、observer

8.4.1.Leader角色

Leader是整个 zookeeper 集群的核心,Leader 主要有三个功能:

  • 集群异常时从快照和日志中恢复数据
  • 维持与 Learner 的心跳,接收 Learner 请求并判断 Learner 的请求消息类型
  • 根据不同的消息类型,进行不同的处理。
    Learner 的消息类型主要有:
  • PING 消息:指Learner 的心跳信息
  • REQUEST 消息:Follower 发送的提议信息,包括读写请求和同步请求
  • ACK 消息:Follower 对提议的回复,超过半数的 Follower 通过,则 commit 该提议
  • REVALIDATE 消息:用来延长 Session 有效时间

在这里插入图片描述

8.4.2.Follower 角色

在Zookeeper集群内部,Follower 主要有四个功能:

  • 向 Leader 发送请求(PING 消息、REQUEST 消息、ACK 消息、REVALIDATE 消息);
  • 接收 Leader 消息并进行处理;
  • 接收 Client 的请求,如果为写请求,则转发给 Leader进行投票;
  • 返回 Client 结果。

Leader 的消息有:

  • PING 消息: 心跳消息;
  • PROPOSAL 消息:Leader 发起的提案,要求 Follower 投票;
  • COMMIT 消息:服务器端最新一次提案的信息;
  • UPTODATE 消息:表明同步完成;
  • REVALIDATE 消息:根据 Leader 的 REVALIDATE 结果,关闭待 revalidate 的 session 还是允许其接受消息;
  • SYNC 消息:返回 SYNC 结果到客户端,这个消息最初由客户端发起,用来强制得到最新的更新。

在这里插入图片描述

8.4.3.Observer 角色

  • Observer 是 zookeeper3.3 开始引入的一个全新的服务器角色,观察者角色。
  • 观察 zookeeper 集群中的最新状态变化并将这些状态变化同步到 observer 服务器上。
  • Observer 流程和 Follower 的唯一不同的地方就是 Observer 不会参加 Leader 发起的投票,也不会被选举为 Leader。

8.5.zookeeper集群工作流程

zookeeper集群只能有一个leader节点,由所有follower选举产生,只有leader节点才有权利发起修改数据的操作,而follower节点即使接收到了客户端发起的修改操作,也要将其转交给leader来处理,leader接收到修改数据的请求后,会向所有follower广播一条消息,让他们执行某项操作,follower 执行完后,便会向 leader 回复执行完毕。当 leader 收到半数以上的 follower 的确认消息,便会判定该操作执行完毕,然后向所有 follower 广播该操作已经生效。

8.6.zookeeper集群节点数量为奇数,建议至少3个节点

如果要搭建一个能够允许N台机器down掉的集群,那么就要部署2*N+1台服务器构成的 zookeeper 集群

8.7.ZooKeeper 集群搭建

确保关闭防火墙
机器名称IP服务器角色环境要求
host128192.168.147.128zk节点1CentOS7.9 + zk 3.8.3+JDK1.8
host129192.168.147.129zk节点2CentOS7.9 + zk 3.8.3+JDK1.8
host130192.168.147.130zk节点3CentOS7.9 + zk 3.8.3+JDK1.8

8.7.1.下载ZooKeeper安装包并解压

apache下载:https://downloads.apache.org/

ZooKeeper官网下载地址:https://zookeeper.apache.org/releases.html

cd /opt/wget https://downloads.apache.org/zookeeper/zookeeper-3.8.3/apache-zookeeper-3.8.3-bin.tar.gztar -xzvf apache-zookeeper-3.8.3-bin.tar.gz -C /usr/local/src

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

8.7.2.进入ZooKeeper解压后的配置目录(conf),复制配置文件并改名为zoo.cfg

# 更名
cd /usr/local/src
mv apache-zookeeper-3.8.3-bin zookeepercd /usr/local/src/zookeeper/confcp /usr/local/src/zookeeper/conf/zoo_sample.cfg /usr/local/src/zookeeper/conf/zoo.cfg

8.7.3.修改zookeeper数据文件存放目录

dataDir=/data/zookeeper

8.7.4.修改zoo.cfg 配置文件内容为

vi /usr/local/src/zookeeper/conf/zoo.cfg
# tickTime这个时间是作为zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔为2ms,也就是说每隔tickTime时间就会发送一个心跳。
tickTime=2000# initLimit这个配置项是用来配置zookeeper接受客户端
# (这里所说的客户端不是用户连接zookeeper服务器的客户端,而是zookeeper服务器集群中连接到leader的follower 服务器)
# 初始化连接时最长能忍受多少个心跳时间间隔数。当初始化连接时间超过该值,则表示连接失败。
# 当已经超过10个心跳的时间(也就是tickTime)长度后 zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。
# 对于从节点最初连接到主节点时的超时时间,单位为tick值的倍数。总的时间长度就是 10*2000。即20ms
initLimit=10# syncLimit这个配置项标识leader与follower之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime的时间长度
# 如果follower在设置时间内不能与leader通信,那么此follower将会被丢弃。
# 对于主节点与从节点进行同步操作时的超时时间,单位为tick值的倍数。总的时间长度就是5*2000。即10ms
syncLimit=5# dataDir就是zookeeper保存数据库数据快照的位置,默认情况下zookeeper将写数据的日志文件也保存在这个目录里
# 注意:不能使用 /tmp 路径,会被定期清除。使用专用的存储设备能够大大提高系统的性能
# dataDir=/tmp/zookeeper
dataLogDir=/opt/zookeeper/logs
# 数据文件存放目录
dataDir=/opt/zookeeper/data# clientPort这个端口就是客户端连接Zookeeper服务器的端口,Zookeeper会监听这个端口接受客户端的访问请求
clientPort=2181# 客户端最大链接数
maxClientCnxns=60# zookeeper在运行过程中会生成快照数据,默认不会自动清理,会持续占用硬盘空间
# 保存3个快照,即3个日志文件
autopurge.snapRetainCount=3
# 间隔1个小时执行一次清理
autopurge.purgeInterval=1# server.A=B:C:D
# 其中A是一个数字,表示这个是第几号服务器
# B是这个服务器的IP地址
# C第一个端口用来集群成员的信息交换,表示这个服务器与集群中的leader服务器交换信息的端口
# D是在leader挂掉时专门用来进行选举leader选举所用的端口
# 服务器=运行主机:心跳端口:选举端口
# zk集群
# 3888后面位置不能有空格,否则Address unresolved: 192.168.147.128:3888
server.1=192.168.147.128:2888:3888
server.2=192.168.147.129:2888:3888
server.3=192.168.147.130:2888:3888
#创建相关目录,三台节点都需要
mkdir -p /opt/zookeeper/{logs,data}# 赋予权限
chmod 777 /opt/zookeeper/{logs,data}

8.7.5.创建ServerID标识

# 在三台服务器的主配置文件 zoo.cfg 中指定的 dataDir 目录下 新建myid文件,并写入对应的server.num 中的num数字
# 如:在192.168.147.128上将server.11写入myid
# 如:在192.168.147.129上将server.22写入myid
# 数据文件存放目录 dataDir=/opt/zookeeper/dataecho 1 >/opt/zookeeper/data/myidcat /opt/zookeeper/data/myid

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

8.7.6.添加到环境变量

vim /etc/profile
# zookeeper
export ZK_HOME=/usr/local/src/zookeeper
export PATH=$PATH:$ZK_HOME/bin
# 输入下面命令让设置的环境变量生效
source /etc/profile

8.7.7.ZooKeeper启动命令

zkServer.sh start
zkServer.sh status
zkServer.sh stop
zkServer.sh restart
#以打印日志方式启动
zkServer.sh start-foreground# jps 是 Java Process Status Tool 的简称,它的作用是为了列出所有正在运行中的 Java 虚拟机进程
# 每一个 Java 程序在启动的时候都会为之创建一个Jvm 实例,通过jps可以查看这些进程的相关信息
# jps是Jdk提供的一个工具,它安装在 JAVA_HOME/bin下jps

在这里插入图片描述

8.7.8.ZooKeeper服务端口为2181,查看服务已经启动

ps -aux | grep zookeepernetstat -ant | grep 2181

在这里插入图片描述

8.7.9.注意:Starting zookeeper … FAILED TO START

zookeeper版本只要 >= 3.5.5 版本启动时启动错误提示“Starting zookeeper … FAILED TO START”

问题原因:下载了错误的版本文件,Zookeeper 从3.5.5后开始拆分为两个版本,而且他们的结构还很类似。

标准版本(Apache ZooKeeper x.y.z )下载的文件名为:`apache-zookeeper-x.y.z-bin.tar.gz``
源码版本(Apache ZooKeeper x.y.z Source Release)下载的文件名为:apache-zookeeper-x.y.z.tar.gz
在安装时下载标准版本安装使用即可正常使用

8.7.10.Address unresolved

# 查看日志
cat /usr/local/src/zookeeper/logs/zookeeper-root-server-host128.out
[root@host128 conf]# zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/src/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... FAILED TO START[root@host128 logs]# cat zookeeper-root-server-host128.out 
2024-02-26 21:01:09,066 [myid:] - INFO  [main:o.a.z.s.q.QuorumPeerConfig@177] - Reading configuration from: /usr/local/src/zookeeper/bin/../conf/zoo.cfg
2024-02-26 21:01:09,075 [myid:] - INFO  [main:o.a.z.s.q.QuorumPeerConfig@440] - clientPortAddress is 0.0.0.0:2181
2024-02-26 21:01:09,076 [myid:] - INFO  [main:o.a.z.s.q.QuorumPeerConfig@444] - secureClientPort is not set
2024-02-26 21:01:09,076 [myid:] - INFO  [main:o.a.z.s.q.QuorumPeerConfig@460] - observerMasterPort is not set
2024-02-26 21:01:09,076 [myid:] - INFO  [main:o.a.z.s.q.QuorumPeerConfig@477] - metricsProvider.className is org.apache.zookeeper.metrics.impl.DefaultMetricsProvider
2024-02-26 21:01:09,086 [myid:] - ERROR [main:o.a.z.s.q.QuorumPeerMain@99] - Invalid config, exiting abnormally
org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Address unresolved: 192.168.147.128:3888  at org.apache.zookeeper.server.quorum.QuorumPeer$QuorumServer.initializeWithAddressString(QuorumPeer.java:359)at org.apache.zookeeper.server.quorum.QuorumPeer$QuorumServer.<init>(QuorumPeer.java:280)at org.apache.zookeeper.server.quorum.QuorumPeer$QuorumServer.<init>(QuorumPeer.java:275)at org.apache.zookeeper.server.quorum.flexible.QuorumMaj.<init>(QuorumMaj.java:96)at org.apache.zookeeper.server.quorum.QuorumPeerConfig.createQuorumVerifier(QuorumPeerConfig.java:654)at org.apache.zookeeper.server.quorum.QuorumPeerConfig.createQuorumVerifier(QuorumPeerConfig.java:640)at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseDynamicConfig(QuorumPeerConfig.java:685)at org.apache.zookeeper.server.quorum.QuorumPeerConfig.setupQuorumPeerConfig(QuorumPeerConfig.java:659)at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:487)at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:194)at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:125)at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:91)
Invalid config, exiting abnormally
2024-02-26 21:01:09,086 [myid:] - INFO  [main:o.a.z.a.ZKAuditProvider@42] - ZooKeeper audit is disabled.
2024-02-26 21:01:09,087 [myid:] - ERROR [main:o.a.z.u.ServiceUtils@48] - Exiting JVM with code 2

在这里插入图片描述

8.8.Zookeeper集群查看【host129为leader】

zkServer.sh start
zkServer.sh status
ifconfig ens33
机器名称IP服务器角色
host128192.168.147.128follower
host129192.168.147.129leader
host130192.168.147.130follower

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.9.模拟集群故障–【host130为leader】

zkServer.sh stopzkServer.sh status

在这里插入图片描述
在这里插入图片描述

8.10.Zookeeper客户端验证

Zookeeper自带客户端工具 zkCli.sh,可以实现连接服务、数据增删改查等功能

zkCli.sh -server 192.168.147.128:2181zkCli.sh -server 192.168.147.130:2181

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

8.11.zkCli客户端支持操作命令

[zk: 192.168.147.128:2181(CONNECTED) 0] help
ZooKeeper -server host:port -client-configuration properties-file cmd argsaddWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVEaddauth scheme authclose config [-c] [-w] [-s]connect host:portcreate [-s] [-e] [-c] [-t ttl] path [data] [acl]delete [-v version] pathdeleteall path [-b batch size]delquota [-n|-b|-N|-B] pathget [-s] [-w] pathgetAcl [-s] pathgetAllChildrenNumber pathgetEphemerals pathhistory listquota pathls [-s] [-w] [-R] pathprintwatches on|offquit reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]redo cmdnoremovewatches path [-c|-d|-a] [-l]set [-s] [-v version] path datasetAcl [-s] [-v version] [-R] path aclsetquota -n|-b|-N|-B val pathstat [-w] pathsync pathversion whoami 
Command not found: Command not found help

endl

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2812312.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

如何选择适合的工具,将由图片合成的PDF转为Excel?

在数字化时代&#xff0c;PDF文件已经成为我们日常工作中不可或缺的一部分。然而&#xff0c;有时候我们需要将这些PDF文件中的图片转换成Excel格式&#xff0c;以便进行进一步的数据分析和处理。这时&#xff0c;选择一款适合的由图片组成的PDF转Excel工具就显得尤为重要。本文…

mysql order by布尔盲注

什么是order by 在MySQL支持使用ORDER BY语句对查询结果集进行排序处理&#xff0c;使用ORDER BY语句不仅支持对单列数据的排序&#xff0c;还支持对数据表中多列数据的排序。语法格式如下 select * from 表名 order by 列名(或者数字) asc&#xff1b;升序(默认升序) selec…

东莞IBM服务器维修之IBM x3630 M4阵列恢复

记录东莞某抖音电商公司送修一台IBM SYSTEM X3630 M4文档服务器RAID6故障导致数据丢失的恢复案例 时间&#xff1a;2024年02月20日&#xff0c; 服务器品牌&#xff1a;IBM System x3630 M4&#xff0c;阵列卡用的是DELL PERC H730P 服务器用途和用户位置&#xff1a;某抖音电…

深度学习目标检测】二十、基于深度学习的雾天行人车辆检测系统-含数据集、GUI和源码(python,yolov8)

雾天车辆行人检测在多种场景中扮演着至关重要的角色。以下是其作用的几个主要方面&#xff1a; 安全性提升&#xff1a;雾天能见度低&#xff0c;视线受阻&#xff0c;这使得驾驶者和行人在道路上的感知能力大大降低。通过车辆行人检测技术&#xff0c;可以在雾天条件下及时发现…

GEE数据集——全球 30 米不透水表面动态数据集 (GISD30)

全球 30 米不透水表面动态数据集 (GISD30) 全球 30 米不透水表面动态数据集 (GISD30) 为了解 1985 年至 2020 年全球不断变化的不透水表面景观提供了宝贵的资源。该数据集在城市可持续发展、人为碳排放评估和全球生态环境建模等领域具有深远的科学意义和实际应用价值。GISD30 是…

高数考研 -- 公式总结(更新中)

1. 两个重要极限 (1) lim ⁡ x → 0 sin ⁡ x x 1 \lim _{x \rightarrow 0} \frac{\sin x}{x}1 limx→0​xsinx​1, 推广形式 lim ⁡ f ( x ) → 0 sin ⁡ f ( x ) f ( x ) 1 \lim _{f(x) \rightarrow 0} \frac{\sin f(x)}{f(x)}1 limf(x)→0​f(x)sinf(x)​1. (2) lim ⁡…

ABAP 发送带EXCEL邮件

前言 没啥特殊需求&#xff0c;就是有个库龄报表用户想整邮件发送 实现 用的最简单的XLS文件作为excel附件发送出去 观察XLS文件的纯文本格式&#xff0c;每列之间用TAB制表符分隔&#xff0c;每行之间用回车符分隔 思路也比较明确&#xff0c;在SAP中实现这种格式&#xf…

命名元组(python)

命名元组与元组的差异&#xff0c;命名元组和字典&#xff0c;哪个效率更高。 (笔记模板由python脚本于2024年02月26日 12:31:36创建&#xff0c;本篇笔记适合熟悉python元组和字典的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ F…

面试redis篇-13Redis为什么那么快

Redis是纯内存操作,执行速度非常快采用单线程,避免不必要的上下文切换可竞争条件,多线程还要考虑线程安全问题使用I/O多路复用模型,非阻塞IOI/O多路复用模型 Redis是纯内存操作,执行速度非常快,它的性能瓶颈是网络延迟而不是执行速度, I/O多路复用模型主要就是实现了高效…

Lua速成(2)

一、流程控制 Lua 编程语言流程控制语句通过程序设定一个或多个条件语句来设定。在条件为 true 时执行指定程序代码&#xff0c;在条件为 false 时执行其他指定代码。 控制结构的条件表达式结果可以是任何值&#xff0c;Lua认为false和nil为假&#xff0c;true和非nil为真。 …

C++ list详解以及模拟实现

目录 1.list的使用 1.1list的定义 1.2list的使用 1.3list iterator使用 1.4list capacity 1.5list element access 1.6list增删查改 2.list迭代器失效问题 3.list的模拟实现 1.list的使用 1.1list的定义 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容…

探索便捷办公新选择:ONLYOFFICE 桌面编辑器

目录 引言 1. ONLYOFFICE 桌面编辑器简介 2. 功能特点 2.1 多格式支持 2.2 实时协作编辑 2.3 兼容性与格式保持 2.4 丰富的编辑功能 3. 使用方法 3.1 下载安装 3.2 打开文档 3.3 编辑文档 3.4 保存和共享 4. 注意事项 4.1 版本更新 4.2 网络连接 4.3 安全性 5.…

matlab 方向向量约束的PCA快速粗配准

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的GPT爬虫。 一、算法原理 该方法由本人原创,目前尚未见有相关论文用到。具体原理看代码即可。 二、代码实现 clc;clear; %% ------…

rtthread stm32h743的使用(一)新工程建立

我们要在rtthread studio 开发环境中建立stm32h743xih6芯片的工程。我们使用一块stm32h743及fpga的核心板完成相关实验&#xff0c;核心板如图&#xff1a; 1.打开rtthread studio填写芯片型号及调试口&#xff0c;我们的调试串口为USART1_PA9,PA10。 2.编译新工程并且下载 …

C++:类与对象(2)

创作不易&#xff0c;感谢三连&#xff01; 一、六大默认成员函数 C为了弥补C语言的不足&#xff0c;设置了6个默认成员函数 二、构造函数 2.1 概念 在我们学习数据结构的时候&#xff0c;我们总是要在使用一个对象前进行初始化&#xff0c;这似乎已经成为了一件无法改变的…

ConvNeXt V2:用MAE训练CNN

论文名称&#xff1a;ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders 发表时间&#xff1a;CVPR2023 code链接&#xff1a;代码 作者及组织: Sanghyun Woo&#xff0c;Shoubhik Debnath来自KAIST和Meta AI。 前言 ConvNextV2是借助MAE的思想来训练…

JSP实现数据传递与保存(一)

一、Web开发步骤 1.1两类模式 后端——————前端 先有前端&#xff0c;前端用的时候直接调用 后端已实现注册接口&#xff0c;接口名为doRegister.jsp 前端此时&#xff1a; 前端的form表单中的action提交地址就只能填doRegister.jsp&#xff0c;即&#xff1a; <f…

C++面试宝典第32题:零钱兑换

题目 给定不同面额的硬币coins和一个总金额amount,编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,则返回-1。说明:你可以认为每种硬币的数量是无限的。 示例1: 输入:coins = [1, 2, 5], amount = 11 输出:3 解释:11 = …

如何学习Arduino单片机

&#xff08;本文为简单介绍&#xff0c;内容源于网络&#xff09; 学习Arduino相关的网址和开源社区&#xff1a; Arduino官方文档: Arduino - HomeArduino Forum: Arduino ForumArduino Playground: Arduino Playground - HomePageGitHub: GitHub: Let’s build from here …