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

Zookeeper下载、安装配置

一、基础配置

使用zookeeper 需要提前配置安装好zookeeper的环境

端口

  • 默认的2888端
    默认的 2888端口‌主要用于Leader和Follower之间的通信。在ZooKeeper集群中,这个端口用于数据同步、服务器初始化以及会话管理等方面的通信。
  • 默认的3888
    3888端口‌则是在选举Leader时使用的通信端口。当集群中的Leader服务器发生故障时,这个端口用于服务器之间的通信,以便重新进行选举,选出一个新的Leader。
  • 默认的 2181
    此外,ZooKeeper还使用2181端口作为客户端连接端口,用于监听客户端连接请求。而ZooKeeper集群中的每个服务器还会监听一个特定的端口(通常是5800到5900之间的端口)以便与其他服务器进行通信,这些端口用于心跳包和请求信息的交换‌

下载

https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.7.2/apache-zookeeper-3.7.2-bin.tar.gz

安装

Zookeeper安装
ZooKeeper有不同的运行环境,包括:单机环境、集群环境和集群伪分布环境。

这里,我们将分别介绍不同环境下如何安装ZooKeeper服务,并简单介绍它们的区别与联系。

单机版安装

解压zookeeper安装包(本人重命名为zookeeper,并移动到/usr/local路径下),此处只有解压命令

tar -zxvf zookeeper-3.4.5.tar.gz

进入到zookeeper文件夹下,并创建data和logs文件夹(一般解压后都有data文件夹)

[root@localhost zookeeper]# cd /usr/local/zookeeper/
[root@localhost zookeeper]# mkdir -p  logs  data

在conf目录下修改zoo.cfg文件(如果没有此文件,则自己新建该文件),修改为如下内容:

tickTime=2000
dataDir=/usr/myapp/zookeeper-3.4.5/data
dataLogDir=/usr/myapp/zookeeper-3.4.5/logs
clientPort=2181

进入bin目录,启动、停止、重启分和查看当前节点状态

[root@localhost bin]# ./zkServer.sh start
[root@localhost bin]# ./zkServer.sh stop
[root@localhost bin]# ./zkServer.sh restart
[root@localhost bin]# ./zkServer.sh status

zookeeper配置详情

参数名默认描述
clientPort2181客户端连接server的端口,即对外服务端口,一般设置为2181吧。
dataDir存储快照文件snapshot的目录。默认情况下,事务日志也会存储在这里。建议同时配置参数dataLogDir, 事务日志的写性能直接影响zk性能。
tickTime2000Zookeeper的时间单元。Zookeeper中所有时间都是以这个时间单元的整数倍去配置的。例如,session的最小超时时间是2*tickTime。(单位:毫秒)
dataLogDir事务日志写入该配置指定的目录,而不是“ dataDir ”所指定的目录。这将允许使用一个专用的日志设备并且帮助我们避免日志和快照之间的竞争
globalOutstandingLimit1,000最大请求堆积数。默认是1000。Zookeeper运行过程中,尽管Server没有空闲来处理更多的客户端请求了,但是还是允许客户端将请求提交到服务器上来,以提高吞吐性能。当然,为了防止Server内存溢出,这个请求堆积数还是需要限制下的。
preAllocSize64M预先开辟磁盘空间,用于后续写入事务日志。默认是64M,每个事务日志大小就是64M。如果ZK的快照频率较大的话,建议适当减小这个参数。
snapCount100,000每进行snapCount次事务日志输出后,触发一次快照, 此时,Zookeeper会生成一个snapshot.文件,同时创建一个新的事务日志文件log.。默认是100,000.
traceFile用于记录所有请求的log,一般调试过程中可以使用,但是生产环境不建议使用,会严重影响性能。
maxClientCnxns最大并发客户端数,用于防止DOS的,默认值是10,设置为0是不加限制
clientPortAddress / maxSessionTimeout对于多网卡的机器,可以为每个IP指定不同的监听端口。默认情况是所有IP都监听 clientPort 指定的端口
minSessionTimeoutSession超时时间限制,如果客户端设置的超时时间不在这个范围,那么会被强制设置为最大或最小时间。默认的Session超时时间是在2 * tickTime ~ 20 * tickTime 这个范围
fsync.warningthresholdms1000事务日志输出时,如果调用fsync方法超过指定的超时时间,那么会在日志中输出警告信息。默认是1000ms。
autopurge.snapRetainCount参数指定了需要保留的事务日志和快照文件的数目。默认是保留3个。和autopurge.purgeInterval搭配使用
autopurge.purgeInterval在3.4.0及之后版本,Zookeeper提供了自动清理事务日志和快照文件的功能,这个参数指定了清理频率,单位是小时,需要配置一个1或更大的整数,默认是0,表示不开启自动清理功能
syncEnabledObserver写入日志和生成快照,这样可以减少Observer的恢复时间。默认为true。

集群安装

Zookeeper集群中只要有过半的节点是正常的情况下,那么整个集群对外就是可用的。正是基于这个特性,要将 ZK 集群的节点数量要为奇数(2n+1),如 3、5、7 个节点)较为合适。

解压zookeeper安装包(本人重命名为zookeeper,并移动到/usr/local路径下),此处只有解压命令

3.1 配置服务器:在每台服务器上解压Zookeeper压缩包并创建配置文件。
3.2 配置myid:在每个Zookeeper服务器的配置文件制定的dataDir目录下创建一个名为myid的文件,里面写上这台服务器的ID

在/usr/local/zookeeper/data目录下创建myid文件,在不同服务器上写入不同的ID:

在 server.1 上

echo 1 > myid 

在每台服务器的dataDir目录下创建myid文件,并在对应的服务器上写入它的ID(例如,在zoo1.example.com上写入1,在zoo2.example.com上写入2,以此类推)

3.3 配置zoo.cfg:设置服务器列表,选举协议和数据持久化路径等。
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/var/lib/zookeeper/data
dataLogDir=/var/lib/zookeeper/logs
clientPort=2181server.1=zoo1.example.com:2888:3888
server.2=zoo2.example.com:2888:3888
server.3=zoo3.example.com:2888:3888
  • 如果是在单台机器模拟
    单台机器模拟zookeeper集群的时候需要每个zookeeper 实例中,clientPort 设置成不同的端口号如2181,2182,2183。同时需要在客户端中zoo.cfg配置文件中配置如下server
    配置如下
server.1=172.17.4.55:1888:5888
server.2=172.17.4.55:2888:6888
server.3=172.17.4.55:3888:7888

①、tickTime:基本事件单元,这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,每隔tickTime时间就会发送一个心跳;最小 的session过期时间为2倍tickTime

②、dataDir:存储内存中数据库快照的位置,除非另有说明,否则指向数据库更新的事务日志。注意:应该谨慎的选择日志存放的位置,使用专用的日志存储设备能够大大提高系统的性能,如果将日志存储在比较繁忙的存储设备上,那么将会很大程度上影像系统性能。

③、client:监听客户端连接的端口。

④、initLimit:允许follower连接并同步到Leader的初始化连接时间,以tickTime为单位。当初始化连接时间超过该值,则表示连接失败。

⑤、syncLimit:表示Leader与Follower之间发送消息时,请求和应答时间长度。如果follower在设置时间内不能与leader通信,那么此follower将会被丢弃。

⑥、server.A=B:C:D A:其中 A 是一个数字,表示这个是服务器的编号; B:是这个服务器的 ip 地址; C:Zookeeper服务器之间的通信端口; D:Leader选举的端口。 我们需要修改的第一个是 dataDir ,在指定的位置处创建好目录。 第二个需要新增的是 server.A=B:C:D 配置,其中 A 对应下面我们即将介绍的myid 文件。B是集群的各个IP地址,C:D 是端口配置。

3.4 环境变量配置

如果只配合kafka使用的话,最好配置zookeeper的环境变量。

在搭建ZooKeeper集群的过程中,配置环境变量是一个重要的步骤。这包括设置ZK_HOME变量以及PATH变量配置,以便系统能够快速找到ZooKeeper的可执行文件。通过添加适当的路径到环境变量中,可以简化后续的操作,提高工作效率。具体来说,这涉及到将ZooKeeper的安装路径添加到系统的PATH环境变量中,以及可能的话,设置一个指向ZooKeeper安装目录的ZK_HOME变量,这样可以在命令行中直接调用ZooKeeper的相关命令和脚本,而无需指定完整的路径‌1。

此外,配置环境变量还有助于在集群中的不同服务器之间同步和共享ZooKeeper的配置信息,确保所有服务器都能够正确地识别和访问ZooKeeper服务。这对于保持集群的一致性和稳定性至关重要。因此,在搭建ZooKeeper集群时,配置环境变量是一个不可或缺的步骤,它简化了管理,提高了系统的可维护性,并有助于确保集群的顺利运行‌

# 我们要确保有ZooKeeper环境,之前已经安装过了。最好确认一下你的ZooKeeper环境是正确的。
vim /etc/profile

检查你的环境变量是否配置完毕,我这里是 3台云服务器都配置好了。

# zookeeper
export ZOOKEEPER_HOME=/opt/servers/apache-zookeeper-3.8.4-bin
export PATH=$PATH:$ZOOKEEPER_HOME/bin

记得刷新环境变量

source /etc/profile
zookeeper有关配置信息集群选项
参数名默认描述
electionAlg之前的版本中, 这个参数配置是允许我们选择leader选举算法,但是由于在以后的版本中,只有“FastLeaderElection ”算法可用,所以这个参数目前看来没有用了。
initLimit10Observer和Follower启动时,从Leader同步最新数据时,Leader允许initLimit * tickTime的时间内完成。如果同步的数据量很大,可以相应的把这个值设置的大一些。
leaderServesyes默 认情况下,Leader是会接受客户端连接,并提供正常的读写服务。但是,如果你想让Leader专注于集群中机器的协调,那么可以将这个参数设置为 no,这样一来,会大大提高写操作的性能。一般机器数比较多的情况下可以设置为no,让Leader不接受客户端的连接。默认为yes
server.x=[hostname]:nnnnn[:nnnnn]“x”是一个数字,与每个服务器的myid文件中的id是一样的。hostname是服务器的hostname,右边配置两个端口,第一个端口用于Follower和Leader之间的数据同步和其它通信,第二个端口用于Leader选举过程中投票通信。
syncLimit表示Follower和Observer与Leader交互时的最大等待时间,只不过是在与leader同步完毕之后,进入正常请求转发或ping等消息交互时的超时时间。
group.x=nnnnn[:nnnnn]“x”是一个数字,与每个服务器的myid文件中的id是一样的。对机器分组,后面的参数是myid文件中的ID
weight.x=nnnnn“x”是一个数字,与每个服务器的myid文件中的id是一样的。机器的权重设置,后面的参数是权重值
cnxTimeout5s选举过程中打开一次连接的超时时间,默认是5s
standaloneEnabled当设置为false时,服务器在复制模式下启动

注意: zookeeper的启动日志在/bin目录下的zookeeper.out文件 在启动第一个节点后,查看日志信息会看到如下异常:

java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:579) at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:368) at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:402) at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:840) at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:762) 2016-07-30 17:13:16,032 [myid:1] - INFO [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:FastLeaderElection@849] - Notification time out: 51200`

这是正常的,因为配置文件中配置了此节点是属于集群中的一个节点,zookeeper集群只有在过半的节点是正常的情况下,此节点才会正常,它是一直在检测集群其他两个节点的启动的情况。 那在我们启动第二个节点之后,我们会看到原先启动的第一个节点不会在报错,因为这时候已经有过半的节点是正常的了。

  • 开启observer
    在ZooKeeper中,observer默认是不开启的,需要手动开启 在zoo.cfg中添加如下属性:
peerType=observer

在要配置为观察者的主机后添加观察者标记。例如:

server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2888:3888
server.3=127.0.0.1:2888:3888:observer #表示将该节点设置为观察者

observer不投票不选举,所以observer的存活与否不影响这个集群的服务。
例如:一共25个节点,其中1个leader和6个follower,剩余18个都是observer。那么即使所有的observer全部宕机,ZooKeeper依然对外提供服务,但是如果4个follower宕机,即使所有的observer都存活,这个ZooKeeper也不对外提供服务 在ZooKeeper中过半性考虑的是leader和follower,而不包括observer==

Docker下安装单机Zookeeper

拉取镜像

以下命令默认是拉取最新版本 zookeeper:latest

docker pull zookeeper

注: 若要拉取指定版本如3.7,则可以执行命令 docker pull zookeeper:3.7

宿主机创建data目录

创建/home/zookeeper/data目录,执行以下命令:

mkdir -p /home/zookeeper/data

启动容器

启动命令:

docker run -e TZ="Asia/Shanghai" \
-p 2181:2181 \
-v /home/zookeeper/data:/data \
--name zookeeper \
-d zookeeper

命令说明:

-e TZ=“Asia/Shanghai” # 指定上海时区
-p 2181:2181 # 对端口进行映射,将本地2181端口映射到容器内部2181端口
–name # 配置容器名称
-v # 将本地目录(文件)挂载到容器指定目录
-d # 表示容器一直在后台运行

测试zk

执行zk命令行客户端连接zk

docker run -it --rm \
--link zookeeper:zookeeper \
zookeeper zkCli.sh -server zookeeper

常见指令

  • 服务器端指令
指令说明
sh zkServer.sh start启动服务器端
sh zkServer.sh stop停止服务器端
sh zkServer.sh restart重启服务器端
sh zkServer.sh status查看服务器端的状态
sh zkCli.sh启动客户端
  • 客户端指令
命令解释
help帮助命令
quit 退出客户端
ls /查看根路径下的节点
create /log ‘manage log servers’在根节点下创建一个子节点log
creat -e /node2 ‘’在根节点下创建临时节点node2,客户端关闭后会删除
create -s /video ‘’在根节点下创建一个顺序节点/video000000X
creare -e -s /node4 ‘’创建一个临时顺序节点/node4000000X,客户端关闭后删除
get /video查看video节点的数据以及节点信息
delete /log删除根节点下的子节点log要求被删除的节点下没有子节点
rmr /video递归删除
set /video ‘videos’修改节点数据
  • 常用四字命令

可以通过命令:echo stat|nc 127.0.0.1 2181 来查看哪个节点被选择作为follower或者leader
使用echo ruok|nc 127.0.0.1 2181 测试是否启动了该Server,若回复imok表示已经启动。
echo dump| nc 127.0.0.1 2181 ,列出未经处理的会话和临时节点。
echo kill | nc 127.0.0.1 2181 ,关掉server
echo conf | nc 127.0.0.1 2181 ,输出相关服务配置的详细信息。
echo cons | nc 127.0.0.1 2181 ,列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息。
echo envi |nc 127.0.0.1 2181 ,输出关于服务环境的详细信息(区别于 conf 命令)。
echo reqs | nc 127.0.0.1 2181 ,列出未经处理的请求。
echo wchs | nc 127.0.0.1 2181 ,列出服务器 watch 的详细信息。
echo wchc | nc 127.0.0.1 2181 ,通过 session 列出服务器 watch 的详细信息,它的输出是一个与 watch 相关的会话的列表。
echo wchp | nc 127.0.0.1 2181 ,通过路径列出服务器 watch 的详细信息。它输出一个与 session 相关的路径。

文档

Apache ZooKeeper r3.5.6中文文档
https://www.docs4dev.com/docs/zh/zookeeper/r3.5.6/reference/
Apache ZooKeeper 官网:https://zookeeper.apache.org/

相关文章:

Zookeeper下载、安装配置

一、基础配置 使用zookeeper 需要提前配置安装好zookeeper的环境 端口 默认的2888端 默认的 2888端口‌主要用于Leader和Follower之间的通信。在ZooKeeper集群中,这个端口用于数据同步、服务器初始化以及会话管理等方面的通信。默认的3888 3888端口‌则是在选举L…...

【代码记录】多线程示例代码

用多线程处理多gpu模型输入的时候写的,感觉复用性会很不错,用以记录和分享 import threading def multithreadhelper(workfn,alldata:list,number:int):# workfn takes only one argument: a example of alldata# data preparationdef chunk_data(data,…...

【数据结构】什么是平衡二叉搜索树(AVL Tree)?

🦄个人主页:修修修也 🎏所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 📌AVL树的概念 📌AVL树的操作 🎏AVL树的插入操作 ↩️右单旋 ↩️↪️右左双旋 ↪️↩️左右双旋 ↪️左单旋 🎏AVL树的删…...

ip的类型有多少种?我想做大数据需要使用哪一种

IP地址主要分为两种类型: IPv4(Internet Protocol version 4): 由32位二进制数组成,通常以四个十进制数表示(例如:192.168.1.1)。每个十进制数的范围是0到255。IPv4地址的总数量约为…...

位运算(6)_只出现一次的数字 II

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 位运算(6)_只出现一次的数字 II 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 …...

C#的Socket编程细节

目录 Socket中的Accept 步骤1:创建并绑定服务端套接字 步骤2:接受连接请求 步骤3:与客户端通信 步骤4:关闭套接字 注意事项 Socket中的Connected 使用Connected属性 客户端检查连接状态 服务端检查连接状态 注意事项 S…...

python三局两胜游戏

分为以下步骤实现这个功能 1、猜拳 2、机器产生数值 3、人去猜数字,定义剪刀石头布 4、控制机器产生,123程序运行的时候可能会出现一点玄学问题,就是,提示n1这一行不符合pep8然后报错,不用管,运行就可以&am…...

java:brew安装rabbitmq以及简单示例

什么是消息队列mq 可以看我之前写的这篇 消息队列MQ rabbitmq简介 RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在…...

基于单片机跑步机控制系统设计

** 文章目录 前言概要功能设计设计思路 软件设计效果图 程序文章目录 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对…...

【架构】efk日志监控

文章目录 一、EFK组件及其功能二、EFK日志监控的工作流程三、EFK日志监控的优势四、EFK日志监控的应用场景 推荐阅读 EFK日志监控是一种高效的日志管理解决方案,由Elasticsearch、Fluentd(或Logstash)和Kibana三个开源工具组成。以下是对EFK日…...

亚信安全发布第34期《勒索家族和勒索事件监控报告》

本周态势快速感知 本周全球共监测到勒索事件91起,近三周勒索事件数量较为稳定。从整体上看,Ransomhub是影响最严重的勒索家族;Play和ElDorado恶意家族也是两个活动频繁的恶意家族,需要注意防范。本周,土耳其公司巴克皮…...

如何在实际应用中使用回溯算法解决问题?

如何在实际应用中使用回溯算法解决问题? 回溯算法是一种强大的问题解决方法,它通过尝试不同的选择并在遇到不可行的情况时回退,以找到满足特定条件的解决方案。在实际应用中,回溯算法可以用于解决各种复杂的问题。本文将介绍如何在实际应用中使用回溯算法,并通过一些案例…...

9. 正则表达式

编程工具和技术是以一种混乱、进化的方式生存和传播的。获胜的并不总是最好或最杰出的工具,而是那些在合适的利基市场中发挥足够好的功能,或者恰好与另一项成功的技术相结合的工具。 在本章中,我将讨论这样一种工具--正则表达式。正则表达式是…...

初始C++模板

1.泛型编程 1.1什么事泛型编程 在学习C语言时,我们时常会有这样的烦恼: 在针对每一种不同的类型变量进行函数传参或者是运算处理时,我们总是编写不同的函数或者是进行不同的处理,才能达到目的,这时,我们…...

建投数据自主研发相关系统获得欧拉操作系统及华为鲲鹏技术认证书

近日,经欧拉生态创新中心和华为技术有限公司测评,建投数据自主研发的投资项目管理系统、全面风险管理信息系统、商业不动产业务系统,完成了基于欧拉操作系统openEuler 22.03、华为鲲鹏Kunpeng 920(Taisha 200)的兼容性…...

node启动websocket保持后台一直运行

在 Node.js 中启动一个 WebSocket 服务器并使其在后台持续运行,你可以使用几种方法。下面是一种常见的方法,通过创建一个简单的 WebSocket 服务器并使用 node 命令直接运行它,同时确保它在后台运行。 1. 创建 WebSocket 服务器 首先&#x…...

CSS画出三角形的做法

引言: 在网页中,会有三角形的出现,我们脑海里会有很多想法,如何去实现他们,我来提供一种比较好玩的做法。 方法: 我们实现一个三角形,当然可以使用精灵图、或者iconfont的做法,这…...

web开发(1)-基础

这是对b站课程的总结,后续可能会继续更 01 前后端分离介绍_哔哩哔哩_bilibili01 前后端分离介绍是Web应用开发-后端基础-基于Springboot框架的第1集视频,该合集共计29集,视频收藏或关注UP主,及时了解更多相关视频内容。https://w…...

python程序操作Windows系统中的软件如word等(是否可以成功操作待验证)

一、python打开word软件 在 Python 中可以使用python-docx库来操作 Word 文档,但如果你的需求是直接打开 Word 软件,你可以使用os模块和subprocess模块来实现。以下是示例代码: import os import subprocessdef open_word():word_path rC:…...

人工智能发展历程

发展历程 人工智能的发展可以追溯到20世纪30年代,当时数理逻辑的形式化和智能可计算思想开始构建计算与智能的关联概念。1943年,美国神经科学家麦卡洛克和逻辑学家皮茨共同研制成功了世界上首个人工神经网络模型——MP模型,这为现代人工智能…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

day36-多路IO复用

一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...

写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里

写一个shell脚本&#xff0c;把局域网内&#xff0c;把能ping通的IP和不能ping通的IP分类&#xff0c;并保存到两个文本文件里 脚本1 #!/bin/bash #定义变量 ip10.1.1 #循环去ping主机的IP for ((i1;i<10;i)) doping -c1 $ip.$i &>/dev/null[ $? -eq 0 ] &&am…...

npm install 相关命令

npm install 相关命令 基本安装命令 # 安装 package.json 中列出的所有依赖 npm install npm i # 简写形式# 安装特定包 npm install <package-name># 安装特定版本 npm install <package-name><version>依赖类型选项 # 安装为生产依赖&#xff08;默认&…...