一起走进动物园管理员——ZooKeeper

最新推荐文章于 2025-02-20 08:30:00 发布
转载 最新推荐文章于 2025-02-20 08:30:00 发布 · 554 阅读
· 0
· 0
文章标签:

#Zookeeper入门 #集群管理 #Zookeeper选举 #Zookeeper监听 #java访问Zookeeper

大数据 专栏收录该内容
4 篇文章
订阅专栏
本文深入介绍了Apache ZooKeeper的原理及应用,涵盖其基本概念、安装配置、客户端操作及集群搭建等内容。通过实例展示了配置管理、集群管理和负载均衡的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:汤小洋
来源:http://blog.51cto.com/12402007/2331203

一、ZooKeeper简介

1. ZooKeeper是什么

​ Apache ZooKeeper是一个开源的分布式服务框架,为分布式应用提供协调服务,用来解决分布式应用中的数据管理问题,如:配置管理、域名服务、分布式同步、集群管理等
官网 https://zookeeper.apache.org/

一起走进动物园管理员——ZooKeeper

2. ZooKeeper组成

​ 主要包括两部分:文件系统、通知机制

2.1 文件系统

​ ZooKeeper维护一个类似Linux文件系统的数据结构,用于存储数据

  • 数据模型结构是一种树形结构,由许多节点构成
  • 每个节点叫做ZNode(ZooKeeper Node)
  • 每个节点对应一个唯一路径,通过该路径来标识节点,如 /app1/p_2
  • 每个节点只能存储大约1M的数据

一起走进动物园管理员——ZooKeeper

​ 节点类型有四种:

  • 持久化目录节点 persistent

    客户端与服务器断开连接,该节点仍然存在

  • 持久化顺序编号目录节点 persistent_sequential

    客户端与服务器断开连接,该节点仍然存在,此时节点会被顺序编号,如:000001、000002.....

  • 临时目录节点 ephemeral

    客户端与服务器断开连接,该节点会被删除

  • 临时顺序编号目录节点 ephemeral_sequential

    客户端与服务器断开连接,该节点会被删除,此时节点会被顺序编号,如:000001、000002.....

2.2 通知机制

​ ZooKeeper是一个基于观察者模式设计的分布式服务管理框架

  1. ZooKeeper负责管理和维护项目的公共数据,并授受观察者的注册(订阅)
  2. 一旦这些数据发生变化,ZooKeeper就会通知已注册的观察者
  3. 此时观察者就可以做出相应的反应

​ 简单来说,客户端注册监听它关心的目录节点,当目录节点发生变化时,ZooKeeper会通知客户端

​ ZooKeeper是一个订阅中心(注册中心)

3. 应用场景

3.1 配置管理

​ 场景:集群环境、服务器的许多配置都是相同的,如:数据库连接信息,当需要修改这些配置时必须同时修改每台服务器,很麻烦

​ 解决:把这些配置全部放到ZooKeeper上,保存在ZooKeeper的某个目录节点中,然后所有的应用程序(客户端)对这个目录节点进行监视Watch,一旦配置信息发生变化,ZooKeeper会通知每个客户端,然后从ZooKeeper获取新的配置信息,并应用到系统中。

一起走进动物园管理员——ZooKeeper

3.2 集群管理

​ 场景:集群环境下,如何知道有多少台机器在工作?是否有机器退出或加入?需要选举一个总管master,让总管来管理集群

​ 解决:在父目录GroupMembers下为所有机器创建临时目录节点,然后监听父目录节点的子节点变化,一旦有机器挂掉,该机器与ZooKeeper的连接断开,其所创建的临时目录节点被删除,所有其他机器都会收到通知。当有新机器加入时也是同样的道理。

​ 选举master:为所有机器创建临时顺序编号目录节点,给每台机器编号,然后每次选取编号最小的机器作为master

一起走进动物园管理员——ZooKeeper

3.3 负载均衡

​ ZooKeeper本身是不提供负载均衡策略的,需要自己实现,所以准确的说,是在负载均衡中使用ZooKeeper来做集群的协调(也称为软负载均衡)

​ 实现思路:

  1. 将ZooKeeper作为服务的注册中心,所有服务器在启动时向注册中心登陆自己能够提供的服务
  2. 服务的调用者到注册中心获取能够提供所需要服务的服务器列表,然后自己根据负载均衡算法,从中选取一台服务器进行连接
  3. 当服务器列表发生变化时,如:某台服务器宕机下线,或新机器加入,ZooKeeper会自动通知调用者重新获取服务列表

​ 实际上利用了ZooKeeper的特性,将ZooKeeper用为服务的注册和变更通知中心

一起走进动物园管理员——ZooKeeper

二、ZooKeeper安装

1. 安装

​ ZooKeeper一般都运行在Linux平台

​ 步骤:

  1. 解压zookeeper-3.4.13.tar.gz

    cd ~/software
    tar -zxf zookeeper-3.4.13.tar.gz
  2. 配置

    # 创建存放数据文件的目录
    cd zookeeper-3.4.13/
    mkdir data
    # 创建配置文件
    cd conf
    cp zoo_sample.cfg zoo.cfg  # 默认使用的是zoo.cfg,名称固定
    # 修改配置文件
    vi zoo.cfg
    dataDir=../data  # 指定数据存放目录

    一起走进动物园管理员——ZooKeeper

  3. 启动zookeeper

    cd bin
    ./zkServer.sh start | stop | status | restart  # 启动|停止|查看状态|重启

    一起走进动物园管理员——ZooKeeper

  4. 客户端连接zookeeper

    ./zkCli.sh  # 启动客户端,默认连接本机的2181端口
    或
    ./zkCli.sh -server 服务器地址:端口 # 连接指定主机、指定端口的zookeeper
    quit  # 退出客户端

2. 配置文件

配置项含义说明
tickTime=2000心跳时间维持心跳的时间间隔,单位是毫秒<br>在zookeeper中所有的时间都是以这个时间为基础单元,进行整数倍配置
initLimit=10初始通信时限用于zookeeper集群,此时有多台zookeeper服务器,其中一个为Leader,其他都为Follower
syncLimit=5同步通信时限在运行时Leader通过心跳检测与Follower进行通信,如果超过syncLimit*tickTime时间还未收到响应,则认为该Follower已经宕机
dataDir=../data存储数据的目录数据文件也称为snapshot快照文件
clientPort=2181端口号默认为2181
maxClientCnxns=60单个客户端的最大连接数限制默认为60,可以设置为0,表示没有限制
autopurge.snapRetainCount=3保留文件的数量默认3个
autopurge.purgeInterval=1自动清理快照文件和事务日志的频率默认为0,表示不开启自动清理,单位是小时
dataLogDir=存储日志的目录未指定时日志文件也存放在dataDir中,为了性能最大化,一般建议把dataDir和dataLogDir分别放到不同的磁盘上

一起走进动物园管理员——ZooKeeper

三、客户端操作

1. 常用命令

命令作用说明
help查看帮助查看所有操作命令
ls 节点路径查看指定节点下的内容
ls2 节点路径查看指定节点的详细信息查看所有子节点和当前节点的状态
create 节点路径 内容创建普通节点如果内容中有空格,则需要使用对双引号引起来
get 节点路径获取节点中的值
create -e 节点路径 内容创建临时节点当连接断开后,节点会被自动删除
create -s 节点路径 内容创建顺序编号节点即带序号的节点
delete 节点路径删除节点只能删除空节点,即不能有子节点
rmr 节点路径递归删除节点remove recursion
stat 节点路径查看节点状态
set 节点路径 新值修改节点内容

2. 详解

​ 查看指定节点的详细信息: ls2 /
一起走进动物园管理员——ZooKeeper

# 子节点名称数组
[zookeeper]

-----------节点的状态信息,也称为stat结构体-------------------

创建该znode的事务的zxid(ZooKeeper Transaction ID)

事务ID是ZooKeeper为每次更新操作/事务操作分配一个全局唯一的id,表示zxid,值越小,表示越先执行

cZxid = 0x0 # 0x0表示十六进制数0

创建时间

ctime = Thu Jan 01 08:00:00 CST 1970

最后一次更新的zxid

mZxid = 0x0

最后一次更新的时间

mtime = Thu Jan 01 08:00:00 CST 1970

最后更新的子节点的zxid

pZxid = 0x0

子节点的变化号,表示子节点被修改的次数,-1表示从未被修改过

cversion = -1

当前节点的变化号,0表示从未被修改过

dataVersion = 0

访问控制列表的变化号 access control list

aclVersion = 0

如果临时节点,表示当前节点的拥有者的sessionId

如果不是临时节点,则值为0

ephemeralOwner = 0x0

数据长度

dataLength = 0

子节点数据

numChildren = 1

​ 顺序编号节点:

  • 顺序编号会紧跟在节点名称后面,节点最终名称为:节点名+序号,如/test0000000005
  • 顺序编号是一个递增的计数器
  • 顺序编号是由父节点维护,从已有的子节点个数开始(包括临时节点和被删除的节点)
  • 如果子节点为空,则从0000000000开始,依次递增1
  • 在分布式系统中,顺序编号可以被用于为所有的事件进行全局排序,这样客户端就可以根据序号推断事件的顺序

四、ZooKeeper集群

1. 配置集群

​ 步骤:

  1. 准备多台ZooKeeper服务器

  2. 配置ZooKeeper服务器

    在每台服务器的conf/zoo.cfg文件中添加如下内容:

    server.20=192.168.4.20:2888:3888
    server.21=192.168.4.21:2888:3888
    server.22=192.168.4.22:2888:3888

    格式:server.A=B:C:D

    • A表示这台服务器的编号ID,是一个数字
    • B表示服务器的IP地址或域名
    • C表示这台服务器与集群中的Leader交换信息时使用的端口
    • D表示执行选举Leader服务器时互相通信的端口
  3. 创建myid配置文件

    在集群环境下,需要在dataDir目录中创建一个名为myid的文件,文件内容是当前服务器的编号ID,即上面配置的A

    cd data
    echo A的值 > myid

    ZooKeeper启动时会读取这个文件,将里面的数字与zoo.cfg中配置的server.A进行比较,从而判断这台服务器是哪个

  4. 测试集群环境

    启动所有ZooKeeper服务器,查看状态

    此时在某台服务器上执行更新操作时,其他服务器也会同步

2. 集群特性

  • 一个ZooKeeper集群中,有一个领导者Leader和多个跟随者Follower
  • Leader负责进行投票的发起和决议,更新系统状态
  • Follower用于接收客户端的请求并向客户端返回结果,在选举Leader过程中参与投票
  • 半数机制:集群中只要有半数以上节点存活,集群就能够正常工作,所以一般集群中的服务器个数都为奇数
  • 全局数据一致:集群中每台服务器保存一份相同的数据副本,不论客户端连接到哪个服务器,数据都是一致的
  • 更新请求顺序执行:来自同一个客户端的更新请求,按其发送顺序依次执行
  • 数据更新的原子性:一次数据更新,要么成功,要么失败
  • 实时性:在一定的时间范围内,客户端能读取到最新数据

3. 选举机制

​ ZooKeeper在提供服务时会自动选举一个节点服务器作为Leader,其他都是Follower

一起走进动物园管理员——ZooKeeper

​ 选举流程:

  1. Server1启动,给自己投票,然后发送投票信息,由于其它服务器都还没启动,所以它发现的消息收不到任何反馈,此时Server1为Looking状态
  2. Server2启动,给自己投票,同时与Server1通信交换选举结果,由于Server2的id值较大,所以Server2胜出,但由于投票数没有过半,此时Server1和Server2都为Looking状态
  3. Server3启动,给自己投票,同时与Server1和Server2通信交换选举结果,由于Server3的id值较大,所以Server3胜出,此时票数已经过半,所以Server3为Leader,Server1和Server2为Follower
  4. Server4启动,给自己投票,同时与Server1、Server2、Server3通信交换选举结果,尽管Server4的id较大,但由于集群中已经存在Leader,所以Server4只能为Follower
  5. Server5启动,同Server4类似,只能为Follower

​ 总结:

  • 每个服务器在启动时都会选择自己,然后将投票信息发送出去
  • 服务器编号ID越大,在选择算法中的权重越大
  • 投票数必须过半,才能选出Leader
  • 谁是Leader:启动顺序的前集群数/2+1个服务器中,id值最大的会成为Leader

4. 监听机制

4.1 监听节点值的变化
# 在集群的A服务器,监听某个节点值的变化
get /yyy watch

# 在集群的B服务器,修改对应节点的值
set /yyy myyyy

# 此时A服务器会收到事件NodeDataChanged
WATCHER::
WatchedEvent state:SyncConnected type:NodeDataChanged path:/yyy

监听Watch事件是一个一次性的触发器,当数据改变时只会触发一次,如果以后这个数据再发生改变,则不会再次触发

4.2 监听节点的子节点变化
# 在集群的A服务器,监听某个节点的子节点的变化 
ls /yyy watch

# 在集群的B服务器,创建/修改/删除对应节点的子节点
create /yyy/hello hello

# 此时A服务器会收到事件NodeChildrenChanged
WATCHER::
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/yyy

五、Java访问ZooKeeper

Java操作Zookeeper很简单,只需要添加ZooKeeper客户端的依赖即可,可以进行节点信息的获取、管理等。

​ 步骤:

  1. 添加jar包

    <!--ZooKeeper客户端-->
    <dependency>
       <groupId>org.apache.zookeeper</groupId>
       <artifactId>zookeeper</artifactId>
       <version>3.4.13</version>
    </dependency>
  2. 操作

    public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
       //获取ZooKeeper的连接,即创建ZooKeeper的客户端
       String connectString = "127.0.0.1:2181";  //服务器地址
       int sessionTimeout = 3000; //超时时间,单位为毫秒
       Watcher watcher = new MyWatcher();
       ZooKeeper zkClient = new ZooKeeper(connectString, sessionTimeout, watcher);
      Thread.sleep(2000);
       System.out.println(zkClient.getState());
       /**
            * 操作ZooKeeper
            */
       //查看指定节点下的内容
       List<String> children = zkClient.getChildren("/", true);//第二个参数表示是否监视该节点
       System.out.println(children);
       //创建节点,OPEN_ACL_UNSAFE表示acl权限列表为完全开放,PERSISTENT表示节点类型为持久化节点
       zkClient.create("/world", "世界".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
    //获取节点的数据(节点的值和节点状态Stat)
       byte[] data = zkClient.getData("/world", true, null);
       System.out.println(new String(data));
       Stat stat = new Stat();
       byte[] data = zkClient.getData("/hello", true, stat);
       byte[] data = zkClient.getData("/hello", new DataWatcher(), stat);
       System.out.println(new String(data));
       System.out.println(stat);
       System.out.println(stat.getCtime());
       System.out.println(stat.getVersion());
       System.out.println(stat.getDataLength());
    //修改节点的数据
       // zkClient.setData("/hello","aaa".getBytes(),stat.getVersion()); //第三个参数表示当前节点的数据版本,一般先获取数据stat,然后指定数据版本
       zkClient.setData("/hello", "bbb".getBytes(), -1);  //也可以设置为-1,表示不检测版本
     //删除节点
       zkClient.delete("/hello", -1);
    //判断节点是否存在
       System.out.println(zkClient.exists("/hello",false));  //存在时返回节点状态,不存在则返回null
    //休眠
       Thread.sleep(1000000);
    //关闭连接
       zkClient.close();
    }
确定要放弃本次机会?
福利倒计时
: :

立减 ¥

普通VIP年卡可用
立即使用
Empyan
关注 关注
  • 0
    点赞
  • 踩
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
  • 分享
    复制链接
    分享到 QQ
    分享到新浪微博
    扫一扫
  • 举报
    举报
专栏目录
Java 面试——Zookeeper
程序猿进阶
07-26 1312
无论是服务端还是客户端,一旦一个 Watcher被触发,Zookeeper都会将其从相应的存储中移除。这样的设计有效的减轻了服务端的压力,不然对于更新非常频繁的节点,服务端会不断的向客户端发送事件通知,无论对于网络还是服务端的压力都非常大。
大数据—Zookeeper集群入门及使用
qq_73181349的博客
04-19 1110
史上最牛B的ZK汇总,集群配置、集群角色、工作机制、选举机制、数据模型、集群操作、应用场景、CAP理论、ZAB协议、Paxos算法、Watcher
参与评论 您还未登录,请先 登录 后发表或查看评论
写了一个动物园的管理系统,请大家多多指教
08-23
学C++时候留的一个较麻烦的作业,做起来还有点费劲,希望大家多多指教吧
大数据——Zookeeper(理论篇)
qq_40395687的博客
02-16 496
1.1 概述 Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。 Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应,从而实现集群中类似Master/Sla...
动物园园长 zookeeper
world6的博客
03-27 892
zookeeper是一个开源的分布式协调服务中间件zookeeper能做什么?数据的发布/订阅(配置中心:disconf) 、 负载均衡(dubbo利用了zookeeper机制实现负载均衡) 、命名服务、 master选举(kafka、hadoop、hbase)、分布式队列、分布式锁zookeeper的特性:顺序一致性:从同一个客户端发起的事务请求,最终会严格按照顺序被应用到zookeeper中原...
zookeeper:动物园管理者
qq_43668119的博客
05-03 370
1.zookeeper = 文件系统+监听通知机制 文件系统:在zookeeper中的文件系统是一个小型的,存储所有节点都关心的内容的树形文件系统,每个树的节点都叫做znode。随着数据的逻辑不断增加,这棵树的节点会越来越多。 数据的形式:key——value key:是数据节点的名称 value:是节点中存储的数据。 2.监听通知机制: 监听所有节点上需要监听的数据,如果某个节点数据发生了变化,...
java面试——zookeeper面试专题.zip
09-26
《Java面试——Zookeeper面试专题》 Zookeeper是Apache Hadoop项目下的一个分布式协调服务,它为分布式应用程序提供了高效且可靠的分布式同步、配置管理以及命名服务。在Java面试中,Zookeeper是一个重要的考察点,...
SpringCloud——Zookeeper(注册中心)
09-26
SpringCloud为Zookeeper提供了一个名为`spring-cloud-starter-zookeeper`的启动器,允许开发者轻松地将Zookeeper集成到SpringBoot应用中。首先,我们需要在项目中引入依赖: ```xml <groupId>org.springframework...
zoo.cfg——ZooKeeper 单机环境配置(win)
12-29
windows版本 zookeeper配置说明,修改路径后可直接使用
动物园(Zookeeper)里有什么?
Bazingaea的博客
04-26 875
1.zookeeper定义 ZooKeeper 是一个开源的,分布式应用程序协调服务。 可以用于:数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等场景。 怎么理解分布式应用程序协调服务呢?很久很久以前一个开放服务访问的人不多,所有的模块功能都在一个单体应用中,部署在一台服务器上,各个模块之间在本机通信很方便,但随着访问量和业务复杂度的提升,需要把应用切分成多个模块,分别将他们部署到不同的服务器,称之为分布式服务。这个时候这个模块在不同机器上的通信
阿里架构之旅(三)——动物园管理者zookeeper
追梦
03-07 4945
今天我们来说一下zookeeper,它翻译为中文的意思是:动物园管理者,可是这跟我们的架构有什么关系呢?接着看。之前我们谈到了dubbo,在dubbo解析中,我们提到了一种注册服务的机制,但是当时并不知道那是个什么东东,今天我们就来揭晓答案。 今天我们介绍了一下zookeeper,知道了它是一个文件系统+通知机制,这也就使它可以作为dubbo的一个服务注册机制来管理分布式服务。
Zookeeper(动物园管理员)详解
shouhan
03-28 5354
简介 ZooKeeper 是一个开源的分布式协调服务,由雅虎创建,是 Google Chubby 的开源实现。分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。 Zookeeper特性 顺序一致性(从同一个客户端发起的事务请求,最终将会严格按照其发起顺序被应用到zookeeper中)...
【ZooKeeper】zookeeper源码5-ZKDatabase冷启动恢复
一梦
11-01 591
zookeeper源码-ZKDatabase冷启动恢复
zookeeper源码(05)数据存储
xuguofeng2016的博客
01-09 1291
详细分析一下zookeeper的数据存储
zookeeper从入门到精通
最新发布
weixin_44821805的博客
02-20 1869
ZooKeeper 是一个开源的分布式协调服务,由雅虎创建,后成为 Apache 的顶级项目。它为分布式应用提供了高效、可靠的协调服务,例如统一命名服务、配置管理、分布式锁、集群管理等。ZooKeeper 的数据模型类似文件系统,以树形结构存储数据,每个节点称为 Znode,每个 Znode 可以存储数据和子节点。
Zookeeper(动物园管理员)为什么需要他?分布式协调系统
请叫我大师兄
09-17 925
需求推动事物的前进,所有相关技术都是在某些需求的驱动下才孕育而出,而且不断的为了满足需求,不得不进一步加强完善,上来就说zookeeper是啥,作用是啥,干了什么,是开源的分布式应用协调系统”blabla,到底什么是分布式协调,为什么分布式就需要协调。不懂,也不见得好理解、好记忆,还是从需求分析来了解他的由来和作用,了解这个过程,在自己后期设计实现产品的时候,也会想的多一点。 为什么需要 Zookeeper 举个例子,来说明说明需求驱动技术不断升级完善加强。 一个团队里面,需要一个leader,lead
Hadoop -- ZooKeeper
Cool_Pepsi的博客
03-07 618
1. 什么是ZooKeeper? ZooKeeper 就是动物园管理员,他是用来管 hadoop(大象)、Hive(蜜蜂)等的管理员。 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Hadoop、Hbase、kafka、dubbo等重要组件。 ZooKeeper是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。ZooKeepe...
简易的动物园管理系统
热门推荐
FBB360JAVA的博客
02-05 1万+
动物园管理 有猫,鸭子,鱼等动物,他们有一个共同的父类–Animal,共同的属性是动物的名字,父类中有一个抽象方法。 2个接口,一个是获得腿的条数,一个是Swim。 一个管理类,用来进行增删改查操作。 一个测试类,调用管理类中的方法,有一个完整的界面。 Animal类 package zoo; public abstract class Animal {
动物园管理员:Zookeeper核心概念与应用
由于提供的信息中【标题】和【描述】均相同且内容为“动物园管理员”,同时【标签】为空,【压缩包子文件的文件名称列表】为“zookeeper-main”,因此,我们需从文件名称中推断相关知识点。在IT行业中,"zookeeper-...
Empyan

博客等级

码龄10年
24
原创
13
点赞
18
收藏
6
粉丝
关注
私信

热门文章

  • 工厂模式及在项目中的应用 22553
  • 软件工程中重要的思想:至上而下 自下而上 3051
  • Hadoop入门·从零搭建hadoop集群 2748
  • 实现JSP分页方法一:手写 1561
  • Socket网络编程及其通信原理 1536

分类专栏

  • jsp
    4篇
  • mybatis
  • 算法
    3篇
  • 数据结构
    3篇
  • java
    8篇
  • 设计模式
    3篇
  • 多线程
    2篇
  • Spring
  • MVC
    1篇
  • struts2.0
  • 大数据
    4篇
  • redis
    1篇

展开全部 收起

上一篇:
HBase原理
下一篇:
5分钟入门Zookeeper集群配置

最新评论

  • 多线程编程总结

    优快云-Ada助手: Java 中的多态是什么?有什么应用场景?

  • 工厂模式及在项目中的应用

    夜君清诺: 谢谢分享

  • 工厂模式及在项目中的应用

    夜君清诺: 图画的非常到位

大家在看

  • 金融科技降本秘诀:Agentic AI+提示工程让债券评级效率升70% 287
  • Microsoft 365中的Message Encryption (Basic)功能深度解析
  • 鸿蒙实战项目教学关键信息整理
  • R 语言科研绘图第 67 期 --- 箱线图-显著性 426
  • 如何搭建一个属于自己的 Qwen 大模型 2179

最新文章

  • 重构·改善既有程序的设计总结(代码重构技巧)
  • 多线程编程总结二(包含并发容器和线程池)
  • Netty基础简介
2020年1篇
2019年9篇
2017年7篇
2016年10篇

目录

展开全部

收起

目录

展开全部

收起

上一篇:
HBase原理
下一篇:
5分钟入门Zookeeper集群配置

分类专栏

  • jsp
    4篇
  • mybatis
  • 算法
    3篇
  • 数据结构
    3篇
  • java
    8篇
  • 设计模式
    3篇
  • 多线程
    2篇
  • Spring
  • MVC
    1篇
  • struts2.0
  • 大数据
    4篇
  • redis
    1篇

展开全部 收起

目录

评论
被折叠的  条评论 为什么被折叠? 到【灌水乐园】发言
查看更多评论
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值