大数据面试题 —— Zookeeper

目录

  • ZooKeeper 的定义
  • ZooKeeper 的特点
  • ZooKeeper 的应用场景
  • 你觉得Zookeeper比较重要的功能
  • ZooKeeper 的选举机制 ***
  • zookeeper主节点故障,如何重新选举?
  • ZooKeeper 的监听原理 ***
  • zookeeper集群的节点数为什么建议奇数台 ***
  • ZooKeeper 的部署方式有哪几种?集群中的角色有哪些?集群最少需要几台机器?规则是怎样的?
  • ZooKeeper 的常用命令
  • Zookeeper目录结构
  • 简述什么是CAP理论,zookeeper满足CAP的哪两个 ***
  • Paxos 算法 ***
  • ZAB协议/Zookeeper怎么保证一致性的 ***
  • ZooKeeper 使用的ZAB协议与Paxo算法的异同?
  • 分布式集群中为什么会有主节点
  • 节点挂掉的时候Zookeeper是如何发现的
  • Leader一旦选出,如何让集群中所有Follow获悉
  • Zookeeper下 服务器的工作状态有几种
  • Zookeeper提供了什么
  • ZooKeeper是否会自动进行日志清理?
  • 请说明 ZooKeeper 使用到的各个端口的作用?
  • zookeeper 负载均衡和 nginx 负载均衡区别
  • 什么是脑裂
  • ZooKeeper节点类型
  • 临时节点、永久节点用来作什么?
  • 能否为临时节点创建子节点
  • 是哪个进程在Zookeeper上注册临时节点
  • ZooKeeper对节点的watch监听是永久的吗
  • 客户端向服务端写数据流程
  • zookeeper 是如何实现分布式锁的
  • 当自己master连接不上Zookeeper,会怎么办
  • Zookeeper的数据存储在什么地方
  • 总结一下哪些地方用到了 zookeeper
  • Zookeeper实现HDFS的高可用,是怎么操作的?

ZooKeeper 的定义


总的来说,Zookeeper 是一个开源的分布式的,为分布式应用提供协调服务的 Apache 项目。

具体来说,Zookeeper是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生了变化,Zookeeper 就负责通知已经在 Zookeeper 上注册的那些观察者做出相应的反应。

Zookeeper = 文件系统 + 通知机制。

ZooKeeper 的特点


(1)Zookeeper是由一个领导者(Leader)和多个跟随者(Follower)组成的集群。

(2)集群中只要有半数以上节点存活,Zookeeper 集群就能正常服务。

(3)全局数据一致性:每个 Server 保存一份相同的数据副本,Client 无论连接到哪个 server,数据都是一致的。

(4)更新请求 顺序性 ,来自同一个 Client 的更新请求按其发送顺序依次执行。

(5)数据更新原子性,一次数据更新要么成功,要么失败(保证了数据一致性)。

(6)实时性,在一定时间范围内,Client 能读到最新数据。

ZooKeeper 的应用场景


(1)统一命名服务:在分布式环境下,经常需要对服务进行统一命名,便于识别,例如 ip 地址。

(2)统一配置管理:在一个集群中,要求所有节点的配置信息是一致的

(3)统一集群管理:在一个集群中,需要实时监控每个节点的状态变化

(4)负载均衡:在Zookeeper中记录每个服务器的访问次数,再次请求的时候,让访问次数最少得服务器去处理当前的请求。

你觉得Zookeeper比较重要的功能


ZooKeeper最重要的功能之一是提供分布式系统的协调和管理服务,它能够协调分布式系统中各个节点的状态,维护分布式系统的配置信息,帮助分布式系统实现同步和通信。

ZooKeeper 的选举机制 ***


选举机制总原则:集群中的每台机器都参与投票,通过交换选票信息得到每台机器的最终得票, 一旦出现得票数超过机器总数 一半以上 数量,当前机器即为 leader。

以一个简单的例子来说明整个选举的过程。

假设有五台服务器组成的 Zookeeper 集群,它们的 id 从 1-5,同时它们都是最新启动的,也就是没有历史数据,在存放数据量这一点上,都是一样的。假设这些服务器依序启动,来看看会发生什么。

在这里插入图片描述

(1)服务器 1 启动,发起一次选举。服务器 1 投自己一票。此时服务器 1 票数一票,不够半数以上(3票),选举无法完成,服务器 1 状态保持为LOOKING;

(2)服务器2启动,再发起一次选举。服务器 1 和 2 分别投自己一票并交换选票信息:此时服务器 1 发现服务器2的 ID 比自己目前投票推举的(服务器1)大,更改选票为推举服务器2。此时服务器 1 票数 0 票,服务器 2 票数 2 票,没有半数以上结果,选举无法完成,服务器1,2 状态保持 LOOKING;

(3)服务器 3 启动,发起一次选举。此时服务器 1 和 2 都会更改选票为服务器 3。此次投票结果:服务器1为0票,服务器2为0票,服务器 3 为 3 票。此时服务器 3 的票数已经超过半数,服务器 3 当选 Leader。服务器 1,2 更改状态为 FOLLOWING,服务器3更改状态为LEADING;

(4)服务器 4 启动,发现当前集群已经有 Leader,它自己自动成为 Follower;

(5)服务器5启动,同服务器 4一样。

zookeeper主节点故障,如何重新选举?


当集群中的leader挂掉,集群会重新选出一个leader,此时首先会比较每一台机器的epoch,epoch大的直接选举为leader,epoch若是相同就比较每一台机器的事务id(zxid),zxid 最大的被选为 leader。极端情况,zxid 都相等的情况,那么就会直接比较服务器id(myid、sid)。

在 Zookeeper 集群中,epoch 是用来标识 Zookeeper 集群中的逻辑时期(epoch)。每当选举出一个新的 Leader 时,Zookeeper 集群的 epoch 就会增加,以标识当前的 Leader 任期。

ZooKeeper 的监听原理 ***


(1)首先要有一个 main() 线程

(2)在 main() 线程中创建 ZooKeeper 客户端,这时就会创建两个线程,一个负责网络连接通信(connet),一个负责监听(listener)

(3)客户端通过 connet 线程将注册的监听事件发送给服务端

(4)在 ZooKeeper 的注册监听器列表中将注册的监听事件添加到列表中

(5)ZooKeeper 监听到有数据或路径的变化,就会将这个消息发送给 listener 线程

(6) 客户端 listener 线程内部调用 process() 方法做出相应处理

在这里插入图片描述

zookeeper集群的节点数为什么建议奇数台 ***


(1)因为 zookeeper 中只要有半数以上的机器正常工作,那么整个集群对外就是可用的。比如说如果有 2 个 zookeeper,那么只要 1 个死了 zookeeper 就不能用了,因为 1没有过半,那么 zookeeper 的死亡容忍度为 0,同理,如果有 3 个 zookeeper,如果死了 1个,还剩2个
正常,还是过半的,所以 zookeeper 的死亡容忍度为 1,我之前算过 4 个5 个 6 个等情况下的死亡容忍度,发现了一个规律,2n 和 2n-1 的容忍度是一样的,所以为了节约资源,就选择奇数台。

(2)防止因为集群脑裂造成集群用不了。比如有 4 个节点,脑裂为 2 个小集群,都为 2 个节点,这时候,不能满足半数以上的机器正常工作,因此集群就不可用了,那么当有 5 个节点的时候,脑裂为 2 个小集群,分别为2和 3,这时候 3 这个小集群仍然可以选举出 leader,因此集群还是可用的。

ZooKeeper 的部署方式有哪几种?集群中的角色有哪些?集群最少需要几台机器?规则是怎样的?


(1)部署方式

  • 单机模式:将Zookeeper运行在单台机器上,仅供学习和开发使用;
  • 集群模式:zookeeper运行在多台机器上,每台机器上都运行一个zookeeper实例;
  • 伪分布式模式:仍然只有一台物理机器,但是该机器运行了多个Zookeeper实例。

(2)zookeeper有三种角色:

  • 老大Leader(领导者)
  • 老二Follower (跟随者)
  • 老三Observer(观察者)。Observer 接受客户端连接,将写操作转给Leader,但Observer不参与投票(即不参加一致性协议的达成),只同步Leader节点的状态,Observer角色是为集群系统扩展而生的。Follower和Observer归类为Learner(学习者)

(3)集群最少需要机器数:3,集群规则为2N+1台,N>0

ZooKeeper 的常用命令


(1) ls:查看当前 znode 的子节点

(2)create:创建节点

(3)set:设置节点的值

(4) get:获取节点的值

(5) stat:查看节点的状态

(6) delete:删除节点

(7) deleteall:递归删除节点

Zookeeper目录结构


ZooKeeper的目录结构采用类似Unix文件系统的树形结构。ZooKeeper 目录结构由 ZNode 组成,每个ZNode 默认情况下最多可以存储 1MB 的数据。ZNode是ZooKeeper中的基本数据单元,可以用于存储配置信息、状态信息等。

ZooKeeper目录结构的根节点为/,所有的ZNode都是以根节点为基础进行构建的。每个ZNode的名称是唯一的,并且可以包含多个子节点,每个子节点都是一个独立的ZNode。ZNode可以是永久节点,也可以是临时节点。

在ZooKeeper目录结构中,常用的ZNode包括:

  • /zookeeper:ZooKeeper的内部节点,用于存储ZooKeeper的配置信息和状态信息。
  • /brokers:Kafka集群中所有的Broker信息存储在该节点下。
  • /controller:Kafka集群中Controller的状态信息存储在该节点下。
  • /consumers:Kafka中所有的消费者组信息存储在该节点下。
  • /config:Kafka集群的配置信息存储在该节点下。
  • /admin:Kafka中所有的管理员操作信息存储在该节点下。

简述什么是CAP理论,zookeeper满足CAP的哪两个 ***


分布式系统有三个指标:

  • Consistency(一致性)
    • 用户在访问分布式系统中的任意节点,得到的数据必须一致。

在这里插入图片描述

  • Availability(可用性)
    • 用户访问集群中任意的健康节点,必须能得到响应,而不是超时或拒绝。

在这里插入图片描述

  • Paratition tolerance(分区容错性)
    • 分区:因为网络故障或其他原因导致分布式系统中的部分节点与其他节点失去连接,形成独立的分区。
    • 容错:在集群出现分区时,整个系统也要持续对外提供服务。

分布式系统无法同时满足这三个指标,这个结论就是 CAP 理论。

在这里插入图片描述
Zookeeper 符合一致性、分区容错性。(CP

在这里插入图片描述

Paxos 算法 ***


Paxos 算法:一种基于消息传递且具有高度容错性的一致性算法。

Paxos 算法解决的问题:如何快速正确的在一个分布式系统中对某个数据的值达成一致,并且保证不论发生任何异常,都不会破坏整个系统的一致性。

在一个 Paxos 系统中,首先将所有的节点划分为Proposer(提议者)、Accepter(接受者)和 Learner(学习者)。(注意每个节点都可以身兼数职)

一个完整的 Paxos 算法流程分为三个阶段:

  • 准备阶段
    • Proposer 向多个 Accepter 发出 Propose 请求Promise(承诺)
    • Accepter 针对收到的Propose请求进行Promise(承诺)
  • 接受阶段
    • Proposer 收到多个Accepter的Promise(承诺)后,向Accepter发出Propose
    • Accepter 针对收到的Propose请求进行Accept处理
  • 学习阶段
    • Proposer将形成的决议发送给所有的 Learner

ZAB协议/Zookeeper怎么保证一致性的 ***


依赖了 ZAB 协议,ZAB 协议借鉴了 Paxos 算法,是专门为 ZooKeeper 设计的支持崩溃恢复的原子广播协议。Paxos 算法中采用多个Proposer 会存在竞争 Acceptor 的问题,ZooKeeper 设计为只有一个 Leader 负责处理外部的写事务请求,然后 Leader 将数据同步到其他 Follower 节点。即,ZooKeeper 只有一个 Leader 可以发起提议。

ZAB 协议包括两种基本的模式:消息广播(正常)、崩溃恢复(异常)。

这两个模式是相辅相成的,消息广播模式就是 Zookeeper 不出现任何问题,并且正常工作的模式,崩溃恢复看字面意思就是当 Zookeeper 出现故障时用于恢复的。

(1)消息广播

在这里插入图片描述

(2)崩溃恢复

在这里插入图片描述

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

ZooKeeper 使用的ZAB协议与Paxo算法的异同?


相同点:

  • 两者都存在一个类似于 Leader 进程的角色,由其负责协调多个 Follower 进程的运行
  • Leader 进程都会等待超过半数的 Follower 做出正确的反馈后,才会将一个提案进行提交
  • ZAB 协议中,每个 Proposal 中都包含一个 epoch 值来代表当前的 Leader 周期,Paxos 中名字为 Ballot

不同点:

ZAB(ZooKeeper Atomic Broadcast) 用来构建高可用的分布式数据主备系统(Zookeeper),Paxos 是用来构建分布式一致性状态机系统。而 Paxos 算法与 ZAB 协议不同的是,Paxos 算法的发起者可以是一个或多个。当集群中的 Acceptor 服务器中的大多数可以执行会话请求后,提议者服务器只负责发送提交指令,事务的执行实际发生在 Acceptor 服务器。这与 ZooKeeper 服务器上事务的执行发生在 Leader 服务器上不同。Paxos 算法在数据同步阶段,是多台 Acceptor 服务器作为数据源同步给集群中的多台 Learner 服务器,而 ZooKeeper 则是单台 Leader 服务器作为数据源同步给集群中的其他角色服务器。

注意:ZAB是在Paxos的基础上改进和演变过来的。

分布式集群中为什么会有主节点


在分布式环境中,有些业务逻辑只需要集群中的某一台机器进行执行,其他的机器可以共享这个结果,这样可以大大减少重复计算,提高性能,于是就需要主节点。

节点挂掉的时候Zookeeper是如何发现的


ZooKeeper提供了一种心跳机制,即每个节点都会定期向其他节点发送心跳消息,如果一个节点超过一定时间没有收到其他节点的心跳消息,就会判定这个节点已经下线了。

Leader一旦选出,如何让集群中所有Follow获悉


心跳机制

Zookeeper下 服务器的工作状态有几种


ZooKeeper 服务器有四种工作状态:

  • LOOKING:寻找 Leader 状态。当服务器处于该状态时,它会认为当前服务器没有 Leader,因此需要进入 Leader 选举状态。
  • FOLLOWING:跟随者状态。表明当前服务器角色是 Follower。
  • LEADING:领导者状态。表明当前服务器角色是 Leader。
  • OBSERVING:观察者状态。表明当前服务器角色是 Observer。

Zookeeper提供了什么


(1)文件系统
(2)通知机制

ZooKeeper是否会自动进行日志清理?


ZooKeeper 不会自动进行日志清理,需要运维人员进行日志清理

请说明 ZooKeeper 使用到的各个端口的作用?


(1)2888:Follower与Leader交换信息的端口

(2)3888:万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口

zookeeper 负载均衡和 nginx 负载均衡区别


zk的负载均衡是可以调控,nginx只是能调权重,其他需要可控的都需要自己写插件;但是nginx的吞吐量比zk大很多,应该说按业务选择用哪种方式。

什么是脑裂


脑裂通常会出现在集群环境中,当集群中出现故障(比如网络故障),分成了“两个集群”,这两个集群无法互相通信,此时就会让集群觉得Leader挂了,这时候就会出现两个Leader节点,这就是脑裂。

实际上Zookeeper集群中是不会出现脑裂问题的,而不会出现的原因就跟过半机制有关。有了过半机制,对于一个Zookeeper集群,要么没有Leader,要没只有1个Leader,这样就避免了脑裂问题。

ZooKeeper节点类型


(1)Znode有两种类型:

  • 短暂:客户端和服务器端断开连接后,创建的节点自己删除
  • 持久:客户端和服务器端断开连接后,创建的节点不删除

(2)Znode有四种形式的目录节点(默认是persistent )

  • 持久化目录节点:客户端与zookeeper断开连接后,该节点依旧存在
  • 持久化顺序编号目录节点: 客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号
  • 临时目录节点: 客户端与zookeeper断开连接后,该节点被删除
  • 临时顺序编号目录节点:客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号

临时节点、永久节点用来作什么?


临时节点常用于实现分布式锁等功能,而永久节点则用于存储一些配置信息、元数据等。

能否为临时节点创建子节点


ZooKeeper 中不能为临时节点创建子节点,如果需要创建子节点,应该将要创建子节点的节点创建为永久性节点

是哪个进程在Zookeeper上注册临时节点


一般情况下,是客户端进程通过ZooKeeper的API在zk上注册临时节点。客户端注册的临时节点在客户端连接断开后会自动删除。

ZooKeeper对节点的watch监听是永久的吗


不是,一个Watch事件是一个一次性的触发器,当被设置了Watch的数据发生了改变的时候,则服务器将这个改变发送给设置了Watch的客户端,以便通知它们。

为什么不是永久的,举个例子,如果服务端变动频繁,而监听的客户端很多情况下,每次变动都要通知到所有的客户端,这太消耗性能了。在实际应用中,很多情况下,我们的客户端不需要知道服务端的每一次变动,我只要最新的数据即可。

客户端向服务端写数据流程


可以分为两种情况,一是将写入请求直接发送给 leader ,一是将写入请求发给 follower(该情况也会将写入请求转发给 leader)。

在这里插入图片描述

在这里插入图片描述

(1)客户端会向ZK集群中的一台机器server1发送写数据的请求。

(2)server1接收到请求后,马上会通知leader 有写数据的请求来了

(3)leader拿到请求后,进行广播,让集群每一台机器都准备要写数据

(4)集群中的所有机机器接收到leader广播后都回应一下leader

(5) leader再次进行广播 开始写数据,其他机器接收到广播后也开始写数据

(6)数据成功写入后,回应leader,最后由leader来做整个事务提交

(7)当数据成功写入后,有最初和客户端发生连接的 server1 回应客户端数据写入成功。

zookeeper 是如何实现分布式锁的


在这里插入图片描述

(1)首先 zookeeper 集群接收到获取锁的请求时,就会在 locks 节点下创建一个临时顺序节点

(2)然后先对当前节点下的所有子节点进行排序,判断自己是不是最小的节点,如果是,就可以获取到锁,如果不是,就说明锁已被其他客户端获取,然后可以对前一个节点进行监听,等待客户端把自己创建的节点删除。

(3)获取到锁后,进行业务的处理,释放锁的时候删除该临时节点,然后后面的节点就会接收到通知。

当自己master连接不上Zookeeper,会怎么办


当一个Hadoop集群中的Active NameNode连接不上ZooKeeper时,它会尝试在一段时间内重新连接ZooKeeper。如果在此期间内,Active NameNode仍然无法连接到ZooKeeper,会直接转为standby。

Zookeeper的数据存储在什么地方


(1)内存中(DataTree、DataNode、ZKDatabase):ZooKeeper 会将一部分数据存储在内存中,以提高读取速度和性能。

(2)磁盘上的快照文件:ZooKeeper 会定期将内存中的数据持久化到磁盘上的快照文件中,以便在重启后恢复状态。

(2)事务日志:ZooKeeper 会将所有更新操作记录在事务日志中,以确保数据的持久性和一致性。

总结一下哪些地方用到了 zookeeper


(1)Hadoop HA:配置高可用

(2)HBase:保证master的高可用、RegionServer 的监控、元数据的入口以及集群配置的维护等工作。

(3)Kafka:controller的选举、broker 的注册、topic 的注册

Zookeeper实现HDFS的高可用,是怎么操作的?


在HDFS中实现高可用,需要使用Zookeeper来协调选举NameNode的过程。具体来说,我们需要启动两个NameNode,一个作为Active节点,一个作为Standby节点。同时,在Zookeeper上创建一个znode,作为一个lock的作用,来确保只有一个NameNode能够成为Active节点

在启动时,Active节点会尝试去Zookeeper上创建这个lock,如果成功,则表示它已经成为Active节点,否则它会监视这个lock的状态,一旦该节点被释放,它就会重新尝试去获得这个lock。同时,Standby节点也会监视这个lock的状态,一旦Active节点出现故障或宕机,它会尝试去获得这个lock,并成为Active节点。

当Active节点宕机时,Standby节点会检测到这个故障,然后会尝试去获取这个lock。在获取到这个lock之后,它会启动自己的NameNode服务,并且接管原来Active节点的工作。

在整个过程中,Zookeeper起到了协调的作用,它可以保证只有一个NameNode节点被选举为Active节点,保证了系统的高可用性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

牛客题霸-SQL进阶篇(刷题记录一)

本文基于前段时间学习总结的 MySQL 相关的查询语法,在牛客网找了相应的 MySQL 题目进行练习,以便加强对于 MySQL 查询语法的理解和应用。 由于涉及到的数据库表较多,因此本文不再展示,只提供 MySQL 代码与示例输出。 部分题目因…

C语言之我对结构体与联合体的认识

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话: 知不足而奋进,望远山而前行&am…

Huggingface 笔记:大模型(Gemma2B,Gemma 7B)部署+基本使用

1 部署 1.1 申请权限 在huggingface的gemma界面,点击“term”以申请gemma访问权限 https://huggingface.co/google/gemma-7b 然后接受条款 1.2 添加hugging对应的token 如果直接用gemma提供的代码,会出现如下问题: from transformers i…

基于Spring Boot的社区垃圾分类管理平台的设计与实现

摘 要 近些年来,随着科技的飞速发展,互联网的普及逐渐延伸到各行各业中,给人们生活带来了十分的便利,社区垃圾分类管理平台利用计算机网络实现信息化管理,使整个社区垃圾分类管理的发展和服务水平有显著提升。 本文拟…

WordPress自动生成原创文章插件

WordPress作为最受欢迎的内容管理系统之一,为博客和网站的搭建提供了便捷的解决方案。而在内容创作方面,自动生成原创文章的插件为WordPress用户提供了更为高效的选项。 什么是WordPress自动生成原创文章插件? WordPress自动生成原创文章插件…

Rust 错误处理入门和进阶

Rust 错误处理入门和进阶 引用 Rust Book 的话,“错误是软件中不可避免的事实”。这篇文章讨论了如何处理它们。 在讨论 可恢复错误和 Result 类型之前,我们首先来谈谈 不可恢复错误 - 又名恐慌(panic)。 不可恢复错误 恐慌(panic)是程序可能抛出的异…

C++第七弹---类与对象(四)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、拷贝构造函数 1.1、概念 1.2、特征 2、运算符重载 2.1、等号运算符重载 总结 1、拷贝构造函数 1.1、概念 在现实生活中,可能…

学习Python,需要知道的经典案例

文章目录 一、Python简介二、Python经典案例1. 猜数字游戏2. 文本文件处理3. 网络爬虫4. 数据可视化5. 电子邮件发送6. 实现一个简单的Web服务器。 三、Python处理IP相关知识点1. 处理IP地址2. 网络编程(TCP/IP)3. 使用第三方库处理IP信息 四、相关链接 …

Java安全 反序列化(1) URLDNS链原理分析

Java安全 反序列化(1) URLDNS链原理分析 文章目录 Java安全 反序列化(1) URLDNS链原理分析前置知识应用分析payload1.新建HashMap类2.新建URL类3.获取URL 的 Class对象4.通过反射访问URL内部变量5.通过反射为URL中类赋值6.调用HashMap#put方法传入key和value7.再次通过反射为UR…

基于单片机的智能台灯设计1.42

摘 要 社会在发展,时代在进步,人们对生活质量需求更加膨胀,是否拥有高科技技术也最终决定着产品是否可以满足人们的欲望,只有性价比更高,才可以得到更好的青睐。现在的电子产品愈来愈多,龙蛇混杂&#xff…

vue使用element-ui 实现自定义分页

element-ui文档截图&#xff0c;plus大同小异。 可以通过插槽实现自定义的分页。在layout里面进行配置。 全部代码 //page.js export default {name:Cuspage,props:{total:Number,},data(){return {currentPage:1,pageSize:10,}}methods: {setslot (h) {return(<div cla…

tinyrenderer-Bresenham绘制直线算法

如何画线段 第一种尝试 求x&#xff0c;y起始点的差值&#xff0c;按平均间隔插入固定点数 起始点平均插入100个点&#xff1a; void line(int x0, int y0, int x1, int y1, TGAImage& image, TGAColor color) {for (float t 0.; t < 1.; t .01) {int x x0 (x1 -…

力扣每日一题 2024/3/19 好子数组的最大分数

题目描述 用例说明 思路讲解 好子数组的下标在i<k<j,即nums[k]必须在好子数组当中&#xff0c;将数组以k为分界点分为左右两半&#xff0c;左半left从k-1向左移动&#xff0c;右半right从k1开始出发向右移动。 当left大于等于分界点的值时左移一位&#xff0c;当right大…

tp8 mpdf 导出pdf

1. 安装mpdf composer require mpdf/mpdf 2. 然后 使用 use mpdf\Mpdf; 或者 require_once __DIR__ . /vendor/autoload.php; 官方文档 mPDF – mPDF 手册 文档里有很多东西 可以自己去研究 3. 编写代码 下载 (支持中文) $mpdf new Mpdf([mode > utf-8,"autoS…

CMeet系列技术生态沙龙---《探索未来:生成式AI赋能千行百业·杭州》

当前数字化浪潮下&#xff0c;生成式AI技术正成为推动产业升级、提升竞争力的关键力量。为深入探索未来AI技术的赋能作用&#xff0c;促进技术生态的繁荣与发展&#xff0c;CSDN-CMeet系列沙龙活动旨在搭建一个交流与探索的平台&#xff0c;通过分享前沿研究成果和应用案例&…

服务器数据恢复—光纤环境互斥不当导致存储VMFS卷损坏的数据恢复案例

服务器数据恢复环境&故障&#xff1a; 某公司的信息管理平台&#xff0c;通过3台虚拟机共享了一台存储设备供企业内部使用&#xff0c;存储设备中存放了公司内部重要的数据文件。 由于业务增长的需要&#xff0c;管理员又在这个存储网络上连接了一台Windows server服务器&a…

媒体邀约:推广方法

1.媒体邀约推广媒体邀约推广是一种通过与商务合作以增强曝光度和名气的营销手段。积极与商务合作&#xff0c;公司能将产品和服务推广给更大范围受众人群&#xff0c;以达到增加销量和市场占有率目地。 1.1 选择适合自己的新闻媒体选择适合自己的新闻媒体是媒体邀约推广的关键…

sqllab第35-45关通关笔记

35关知识点&#xff1a; 宽字节注入数值型注入错误注入 payload:id1andextractvalue(1,concat(0x7e,database(),0x7e))0--联合注入 payload:id0unionselect1,database(),version()-- 36关知识点&#xff1a; 字符型注入宽字节注入错误注入 payload:id1%df%27andextractvalue(…

Qt实现简单的五子棋程序

Qt五子棋小程序 Qt五子棋演示及源码链接登陆界面单机模式联机模式联网模式参考 Qt五子棋 参考大佬中国象棋程序&#xff0c;使用Qt实现了一个简单的五子棋小程序&#xff0c;包含了单机、联机以及联网三种模式&#xff1b;单机模式下实现了简易的AI&#xff1b;联机模式为PtoP…

由于找不到kvpvbsext64.dll,无法继续执行代码。解决办法,

kvpvbsext64.dll 是一个动态链接库文件&#xff0c;通常作为某个软件的一部分存在。具体来说&#xff0c;它可能为某个程序的特定功能提供支持&#xff0c;在软件运行时被调用和使用。因此&#xff0c;当出现与该文件相关的错误时&#xff0c;可能会影响到相应软件的正常运行。…