来点八股文(五) 分布式和一致性

Raft

raft 会进入脑裂状态吗?描述下场景,怎么解决?
不会。raft通过选举安全性解决了这个问题:

  1. 一个任期内,follower 只会投票一次票,且先来先得;
  2. Candidate 存储的日志至少要和 follower 一样新;
  3. 只有获得超过半数投票才有机会成为 leader;

讲一下 raft 的 leader 选举流程
Leader 在任期内会周期性向其他 follower 节点发送心跳来维持地位。follower 如果发现心跳超时,就认为 leader 节点宕机或不存在。随机等待一定时间后,follower 会发起选举,变成 candidate,然后去竞选 leader。选举结果有三种情况:

  1. 获取超过半数投票,赢得选举
  • 当 Candidate 获得超过半数的投票时,化为 leader。会向其他节点发送请求,确认自己的 leader 地位,从而阻止新一轮的选举
  • 投票原则:当多个 Candidate 竞选 Leader 时:
    • 一个任期内,follower 只会投票一次票,且投票先来显得
    • Candidate 存储的日志至少要和 follower 一样新(安全性准则),否则拒绝投票;
  1. 投票未超过半数,选举失败
  • 当 Candidate 没有获得超过半数的投票时,说明多个 Candidate 竞争投票导致过于分散,或者出现了丢包现象。此时,认为当期任期选举失败,任期 TermId+1,然后发起新一轮选举;
  1. 收到其他 Leader 通信请求
  • 如果 Candidate 收到其他声称自己是 Leader 的请求的时候,通过任期 TermId 来判断是否处理;
  • 如果请求的任期 TermId 不小于 Candidate 当前任期 TermId,那么 Candidate 会承认该 Leader 的合法地位并转化为 Follower;
  • 否则,拒绝这次请求,并继续保持 Candidate;

如果主仲裁一致写入但是没有回复成功的时候挂了怎么办
加消息序列号,如果已经写入直接返回成功

时钟不准确问题
raft不依赖墙上时钟,而是使用逻辑日志解决

有多个 candidate 发起选举怎么解决?
选举时间设置为随机的150ms到300ms之间,为了尽量避免产生多个candidate的情况。
如果多个follower同时变为candidate,那么有可能出现票数<n/2+1的情况,导致选举失败,开始下一轮选举。

什么是幽灵复现问题?描述一下?raft会出现这些问题吗?raft如何解决?
第一种场景(raft不会出现,因为旧主的任期号和日志小于新主,不会被通过)

  1. 第一轮中A被选为Leader,写下了1-10号日志,其中1-5号日志形成了多数派,并且已给客户端应答,而对于6-10号日志,客户端超时未能得到应答。
  2. 第二轮,A宕机,B被选为Leader,由于B和C的最大的logID都是5,因此B不会去重确认6-10号日志,而是从6开始写新的日志,此时如果客户端来查询的话,是查询不到6-10号日志内容的,此后第二轮又写入了6-20号日志,但是只有6号和20号日志在多数派上持久化成功。
  3. 第三轮,A又被选为Leader,从多数派中可以得到最大logID为20,因此要将7-20号日志执行重确认,其中就包括了A上的7-10号日志,之后客户端再来查询的话,会发现上次查询不到的7-10号日志又像幽灵一样重新出现了。

第二种场景
image.png
(1)Round 1,A节点为leader,Log entry 5,6内容还没有commit,A节点发生宕机。这个时候client 是查询不到 Log entry 5,6里面的内容
(2)Round 2,B成为Leader, B中Log entry 3, 4内容复制到C中, 并且在B为主的期间内没有写入任何内容。
(3)Round 3,A 恢复并且B、C发生重启,A又重新选为leader, 那么Log entry 5, 6内容又被复制到B和C中,这个时候client再查询就查询到Log entry 5, 6 里面的内容了。
对于之前Term的未Committed数据,修复到多数节点,且在新的Term下至少有一条新的Log Entry被复制或修复到多数节点之后,才能认为之前未Committed的Log Entry转为Committed。

选举超时的设置一般多久,为什么这么设置?
随机的150ms到300ms

优化raft读请求
假如我在当前 Leader 上读时,其它节点已经选出了一个新的 Leader,并且写入了新的内容,而当前旧 Leader 暂时没有感知到这个变化,而是正常执行了读操作,显然读取到的也不是最新的内容。

  1. breatheart方案 同步一个空 LogEntry 以更新 commit index,等待半数breatheart,如果通过,commit index为最新
  2. **lease方案 lease时间为 **“发出心跳的时间点”+ election timeout, 这个时候的读是ok的

如何从从节点读取保证线性一致?
从节点在收到读请求时,向主节点“索要”当前时间的最新 commit index 即可,主节点收到这个“索要”请求后,只需执行 1-3 步便可得到这个 commit index。

对于对称网络分区问题如何优化?
pre vote 为了防止网络恢复后断连的分区导致新的选举发生,某个节点 election timeout 时,**不改变 term **,而是直接发送 RequestVote 请求,进行 Pre Vote
image.png

对于非对称网络分区问题如何优化?
同样,非对称分区也会出发follower选主,拒绝更新请求,解决方法是follower维护一个tick值,只有这个值小于当前时间-选举时间才会投票。(不是说选主就选主,而是根据心跳来决定)
image.png

Kafka

kafka集群架构
kafka的架构如下所示(消息在partiiton分区内部有序,不能保证全局有序)
image.png
image.png
每个 Segment 对应两个文件:“.index” 索引文件(包括timeindex和index)和 “.log” 数据文件。**同时kafka还会在内部维护偏移量的跳表,拿到偏移量后加载index二分查找。 **
image.png
zookeeper的作用如下:

  1. 在每个broker都会有一个topic的partition,kafka在这里会充当选主的作用
  2. 集群成员身份,kafka会保留brokers的身份列表
  3. ACL 线性一致的鉴权
  4. 保存topic信息

如何做kafka水平扩展?
可以扩展partition replica,也可以扩展broker节点,也可扩展partition

kafka怎么删除过期数据的?数据清理的过程是什么样的?

  1. 根据timeindex判断 kafka默认保留7天内的数据,对于超过7天的数据,会被清理掉,这里的清理逻辑主要根据timeindex时间索引文件里最大的时间来判断的,如果最大时间与当前时间差值超过7天,那么对应的数据段就会被清理掉。
  2. 根据日志文件大小判断 如果log文件(所有的数据段总和)大于我们设定的阈值,那么就会从第一个数据段开始清理,直至满足条件。对于日志起始偏移量,如果日志段的起始偏移量小于等于我们设定的阈值,那么对应的数据段就会被清理掉。

为什么使用kafaka?和其它的消息队列相比有什么优劣?
解耦、异步、削峰、保证消费
kafka和rocketmq的比较
高吞吐量的时候主要是RocketMQ和Kafka,RocketMQ在topic比较多的时候吞吐量不会受到影响。其它场景下kafaka的吞吐量更大。kafka是一个分区多个分段文件,当topic过多,分区的总量也会增加,kafka中存在过多的文件,当对消息刷盘时,就会出现文件竞争磁盘,出现性能的下降。
实效性在ms以内。kafka采用异步发送的机制,当发送一条消息时,消息并没有发送到broker而是缓存起来,然后直接向业务返回成功,当缓存的消息达到一定数量时再批量发送。此时减少了网络io,从而提高了消息发送的性能,但是如果消息发送者宕机,会导致消息丢失,业务出错,所以理论上kafka利用此机制提高了io性能却降低了可靠性。

ISR是什么?解决了什么问题?
ISR全称是 in-sync replica,它是一个集合列表,里面保存的是和Leader Parition节点数据最接近的Follower Partition
如果某个Follower Partition里面的数据落后Leader太多,就会被剔除ISR列表。
简单来说,ISR列表里面的节点,同步的数据一定是最新的,所以后续的Leader选举,只需要从ISR列表里面筛选就行了。
所以,我认为引入ISR这个方案的原因有两个

  1. 尽可能的保证数据同步的效率,因为同步效率不高的节点都会被踢出ISR列表。
  2. 避免数据的丢失,因为ISR里面的节点数据是和Leader副本最接近的。

Kafka的leader是如何选举的?
leader在每个topic都有一个。
在kafka中有这样几个概念:

  • AR:所有副本集合
  • ISR:所有符合选举条件的副本集合
  • OSR:落后太多或者挂掉的副本集合

AR = ISR + OSR,在正常情况下,AR应该是和ISR一样的,但是当某个Follower副本落后太多或者某个Follower副本节点挂掉了,那么它会被移出ISR放入OSR中,kafka的选举也比较简单,就是把ISR中的第一个副本选举成新的Leader节点。

Kafka 会产生消息丢失吗?如何保证可靠性?
image.png
producer -> broker ,broker->broker之间同步,以及broker->磁盘保证消息不丢失
**生产者 **保证消费端消息不丢失 必须使用手动提交offset。ACK = 1
**broker 刷盘和同步 **min.insync.replicas设置为至少写到n个ISR
消费者 手动offset

kafka生产数据时候的应答机制?
ACK = 0:生产者发送完数据,不用考虑数据是否已到达kafka服务器,然后紧接着就发下一条数据,这样,效率会非常高。但是存在一个问题:数据的丢失可能性比较大。
ACK = 1:生产者发送数据,是需要等待leader的应答,如果应答完成,才能发送下一条message,是不关心follower是否pull完成,是否接收成功的。这样,虽说性能会慢些,但是数据会比较安全。可但是,在leader保存完数据后,突然leader所在的broker down掉了,此时的follower还没来得及从leader那儿pull数据,那么这个数据就会丢失。
ACK = -1:可以理解为最耗时的选项。当生产者发送数据后,需要等待所有的副本的应答,包括leader+follower,这种方式是最安全的,但同时也是性能最差的。**

如何做消息去重?producer幂等足够了吗?

  1. 去重包括MySQL 去重、Redis 去重、假如场景量极大且允许误判,布隆过滤器也可以

消息处理过程如下:
image.png
做幂等如下(无论是手动提交还是自动提交必须做幂等):
通过Redis做前置处理,DB唯一索引做最终保证来实现幂等性的。

  1. kafka自带的producer幂等在producer重启或者跨topic和partition时是保证不了的

kafka是有序的吗?如何保证kafka消息读取的有序性?
kafka在partition中有序,partition之间无序。也就是顺序一致。
有序性可以指定partition投递和消费。

kafka中一个broker故障,会怎么办

  1. 通过注册zk的监听器实现的监听节点下线功能
  2. controller计算一个存活broker列表
  3. 更新broker的元数据,启动broker上的分区和副本;挂掉的broker执行offline操作

Kafka通过哪些机制实现了高吞吐量?

  1. 生产者异步、压缩、批量发送、批量拉取
  2. 网络模型I/O多路复用 Epoll
  3. pageCache(producer写和broker读过程) + sendfile
  4. 顺序I/O
  5. baseOffset 跳表

kafka多消费者模型怎么实现的?
多消费者模型通过设计一套offset来实现一个topic被多个消费者消费,
offset被保存在_consumer_offset这个topic中,其中key是group-topic-partition,value是offset

kafka重平衡怎么实现的?
触发条件:1. topic数量变化 2. broker数量变化 3. partition数量变化 4. consumer数量变化
消费者端处理的流程:1. 加入组 2. 等待consumer leader(第一个和coordinator通信的节点)分配

针对partition数过多的场景设计page cache

  1. 调大文件描述符范围
  2. 调整pdflush行为
// 当脏页大小达到这个参数设定的值时将触发刷磁盘操作
vm.dirty_background_bytes = 0
// 当脏页占总内存的比例达到这个参数设定的值时将触发刷磁盘操作
vm.dirty_background_ratio = 10
vm.dirty_bytes = 0
// 数据存在的时间超过这个值触发刷盘
vm.dirty_expire_centisecs = 3000
vm.dirty_ratio = 20

kafka异地多活怎么实现
MirrorMaker
image.png

kafka读写调优

  1. 磁盘 顺序写 ssd和hdd性能差不多,可以用机械硬盘节省成本
  2. JVM 调大堆内存
  3. broker 调整线程量
  4. 调整回收水位看有没有直接内存规整
  5. 生产者 主要调整发送缓冲区参数
  6. 消费者 主要是调整一次拉取的数据数量和大小

容错的种类:
At most once:最多交付一次,数据存在丢失的风险;
At least once:最少交付一次,数据存在重复的可能;
Exactly once:交付且仅交付一次,数据不重不漏。

一致性hash

哈希算法的问题在哪里?
哈希算法的基数改变,导致整体的映射关系改变引起节点的大量迁移。

如何解决一致性哈希的均匀性问题?
使用虚拟节点

分布式ID生成

分布式ID生成算法有哪一些

全局的线性一致模型

uuid

基于时间的UUID通过计算当前时间戳、随机数和机器MAC地址得到。由于在算法中使用了MAC地址,这个版本的UUID可以保证在全球范围的唯一性。

优点:
性能非常高:本地生成,没有网络消耗。

缺点:
1)不易于存储:UUID太长,16字节128位,通常以36长度的字符串表示,很多场景不适用;
2)信息不安全:基于MAC地址生成UUID的算法可能会造成MAC地址泄露,这个漏洞曾被用于寻找梅丽莎病毒的制作者位置。

snowflake

image.png

► 优点:

  • 1)毫秒数在高位,自增序列在低位,整个ID都是趋势递增的;
  • 2)不依赖数据库等第三方系统,以服务的方式部署,稳定性更高,生成ID的性能也是非常高的;
  • 3)可以根据自身业务特性分配bit位,非常灵活。

► 缺点:
强依赖机器时钟,如果机器上时钟回拨,会导致发号重复或者服务会处于不可用状态。

数据库自增id

leaf-segment方案
主库和从库半同步,双buffer优化
缺点是会暴露信息
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

leaf-snowflake

  1. 弱依赖zk,本机文件系统上缓存一个workerID文件
  2. 通过zk存储机器时间解决时间回拨问题

image.png

限流

我现在要做一个限流功能, 怎么做?
QPS和令牌桶算法

QPS 限流算法

QPS 限流算法通过限制单位时间内允许通过的请求数来限流。
优点

  • 计算简单,是否限流只跟请求数相关,放过的请求数是可预知的(令牌桶算法放过的请求数还依赖于流量是否均匀),比较符合用户直觉和预期。
  • 可以通过拉长限流周期来应对突发流量。如 1 秒限流 10 个,想要放过瞬间 20 个请求,可以把限流配置改成 3 秒限流 30 个。拉长限流周期会有一定风险,用户可以自主决定承担多少风险。

缺点

  • 没有很好的处理单位时间的边界。比如在前一秒的最后一毫秒和下一秒的第一毫秒都触发了最大的请求数,就看到在两毫秒内发生了两倍的 QPS。
  • 放过的请求不均匀。突发流量时,请求总在限流周期的前一部分放过。如 10 秒限 100 个,高流量时放过的请求总是在限流周期的第一秒。

令牌桶算法

令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。
优点

  • 放过的流量比较均匀,有利于保护系统。
  • 存量令牌能应对突发流量,很多时候,我们希望能放过脉冲流量。而对于持续的高流量,后面又能均匀地放过不超过限流值的请求数。

缺点

  • 存量令牌没有过期时间,突发流量时第一个周期会多放过一些请求,可解释性差。即在突发流量的第一个周期,默认最多会放过 2 倍限流值的请求数。
  • 实际限流数难以预知,跟请求数和流量分布有关。

存量桶系数

多余的令牌数量怎么设置?
令牌桶算法中,多余的令牌会放到桶里。这个桶的容量是有上限的,决定这个容量的就是存量桶系数,默认为 1.0,即默认存量桶的容量是 1.0 倍的限流值。推荐设置 0.6~1.5 之间。
存量桶系数的影响有两方面:

  • 突发流量第一个周期放过的请求数。如存量桶系数等于 0.6,第一个周期最多放过 1.6 倍限流值的请求数。
  • 影响误杀率。存量桶系数越大,越能容忍流量不均衡问题。误杀率:服务限流是对单机进行限流,线上场景经常会用单机限流模拟集群限流。由于机器之间的秒级流量不够均衡,所以很容易出现误限。例如两台服务器,总限流值 20,每台限流 10,某一秒两台服务器的流量分别是 5、15,这时其中一台就限流了 5 个请求。减小误杀率的两个办法:
    • 拉长限流周期。
    • 使用令牌桶算法,并且调出较好的存量桶系数

固定窗口的限流算法的问题?
两个相邻的0.5s无法控制限流。

CAS

你说的操作和事务视角的一致性-可用性模型是什么?可以介绍一下吗?
high available Transactions
它将可用性分为总可用、粘性可用、和没有完全可用性保障三种情况,
总可用在操作视角上包括:单调写、单调读、写跟随读;在事务视角上包括读已提交、读未提交
粘性可用在操作视角上包括写后读、因果一致
没用完全可用性保障在操作视角上包括:顺序一致、线性一致;在事务视角上包括可重复读、快照隔离、串形化

说一下为什么在总可用系统里面能够做到读已提交、读未提交、单调写、单调读和写跟随读
RC可以通过服务器仅仅给客户暴露已经提交的数据来实现。

负载均衡

  • 轮询(Round Robin):轮询策略按照顺序将每个新的请求分发给后端服务器,依次循环。这是一种最简单的负载均衡策略,适用于后端服务器的性能相近,且每个请求的处理时间大致相同的情况。
  • 随机选择(Random):随机选择策略随机选择一个后端服务器来处理每个新的请求。这种策略适用于后端服务器性能相似,且每个请求的处理时间相近的情况,但不保证请求的分发是均匀的。
  • 最少连接(Least Connections):最少连接策略将请求分发给当前连接数最少的后端服务器。这可以确保负载均衡在后端服务器的连接负载上均衡,但需要维护连接计数。
  • IP 哈希(IP Hash):IP 哈希策略使用客户端的 IP 地址来计算哈希值,然后将请求发送到与哈希值对应的后端服务器。这种策略可用于确保来自同一客户端的请求都被发送到同一台后端服务器,适用于需要会话保持的情况。
  • 加权轮询(Weighted Round Robin):加权轮询策略给每个后端服务器分配一个权重值,然后按照权重值比例来分发请求。这可以用来处理后端服务器性能不均衡的情况,将更多的请求分发给性能更高的服务器。
  • 加权随机选择(Weighted Random):加权随机选择策略与加权轮询类似,但是按照权重值来随机选择后端服务器。这也可以用来处理后端服务器性能不均衡的情况,但是分发更随机。
  • 最短响应时间(Least Response Time):最短响应时间策略会测量每个后端服务器的响应时间,并将请求发送到响应时间最短的服务器。这种策略可以确保客户端获得最快的响应,适用于要求低延迟的应用。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用uniapp 及socket.io做一个简单聊天app 4

界面如下&#xff1a; <template><view class"container"><input v-model"username" placeholder"用户名" /><input v-model"password" type"password" placeholder"密码" /><butto…

comfyUI-MuseTalk的参数设置

comfyUI-MuseTalk的参数设置 目录 comfyUI-MuseTalk的参数设置 一、ComfyUI-VideoHelperSuite 二、comfyUI-MuseV合成的参考视频 2.1、什么时候会用到MuseV&#xff1f; 2.2、MuseV特别消耗系统内存 2.2.1、测试图片序列的像素比 2.2.2、影响运动范围和生成结果的参数 …

Yarn:一个快速、可靠且安全的JavaScript包管理工具

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;还请三连支持一波哇ヾ(&#xff20;^∇^&#xff20;)ノ&#xff09; 目录 一、Yarn简介 二、Yarn的安装 1. 使用npm安装Yarn 2. 在macOS上…

基于Springboot的个人博客系统

文章目录 介绍访问地址一、功能展示1.前台首页归档相册留言关于我登陆注册 2.后台管理系统登陆页面首页文章管理相册管理写博客访客统计 介绍 基于Java&#xff08;Springboot&#xff09;可以用做毕业设计的个人博客系统&#xff0c;包括网站前台和后台管理系统两部分。网站前…

C++中const关键字的用法

C语言和C中const的不同 首先我们需要区分一下C语言中的const和C中的const&#xff0c;C语言中的const修饰的变量可以不初始化&#xff0c;但如果将一个变量定位为const类型还不初始化&#xff0c;那么之后就不能对这个变量直接赋值了。 如果我们使用C语言中的const定义的变量指…

c++ 21 指针

*像一把钥匙 通过钥匙去找内存空间 间接修改内存空间的值 不停的给指针赋值 等于不停的更改指针的指向 指针也是一种数据类型 指针做函数参数怎么看都不可以 指针也是一个数据类型 是指它指向空间的数据类习惯 作业 野指针 向null空间地址copy数据 不断改变指针指向 …

将本地微服务发布到docker镜像二:

上一篇文章我们介绍了如何将一个简单的springboot服务发布到docker镜像中&#xff0c;这一篇我们将介绍如何将一个复杂的微服务&#xff08;关联mysql、redis&#xff09;发布到docker镜像。 我们将使用以下两种不同的方式来实现此功能。 redis、mysql、springboot微服务分开…

Redis未授权访问漏洞 *

#安装redis apt-get install redis #redis链接 redis-cli -h 192.168.4.176 -p 6379 #redis常见命令 &#xff08;1&#xff09;查看信息&#xff1a;info &#xff08;2&#xff09;删除所有数据库内容&#xff1a;flushall &#xff08;3&#xff09;刷新数据库&#xff1a;f…

平衡二叉树 - 力扣(LeetCode) C语言

110. 平衡二叉树 - 力扣&#xff08;LeetCode&#xff09;&#xff08;点击前面链接即可查看题目&#xff09; 一、题目 给定一个二叉树&#xff0c;判断它是否是 平衡二叉树 是指该树所有节点的左右子树的深度相差不超过 1。 示例 1&#xff1a; 输入&#xff1a;root […

unity拖拽物品遇到的bug及解决思路

记录一下拖拽实现过程中遇到的bug RectTransform 专门用在UI中transform 判断点击是否在UI中 使用这个函数就可以判断点击的是否是UI面板&#xff0c;返回true表明在UI面板中 EventSystem.current.IsPointerOverGameObject()值得一提的是&#xff0c;如果发现了有UI穿透效…

【Material-UI】多选模式(Multiple values)与Autocomplete的高级用法解析

文章目录 一、多选模式的基本用法二、高级用法1. 固定选项&#xff08;Fixed options&#xff09;2. 复选框&#xff08;Checkboxes&#xff09;3. 限制标签显示数量&#xff08;Limit tags&#xff09; 三、性能优化与最佳实践1. 筛选已选项&#xff08;filterSelectedOptions…

乡村振兴建设顶层规划建设方案

数字乡村振兴平台顶层规划方案摘要 1. 政策背景与总体要求 政策背景&#xff1a;党的十九大明确提出实施乡村振兴战略&#xff0c;总体要求包括产业兴旺、生态宜居、乡风文明、治理有效和生活富裕。随后&#xff0c;中央一号文件、乡村振兴战略规划以及十四五规划和2035年远景…

C# 设计模式之装饰器模式

总目录 前言 装饰器模式的主要作用就是扩展一个类的功能&#xff0c;或给一个类添加多个变化的情况。学习面向对象的都知道&#xff0c;如果想单纯的给某个类增加一些功能&#xff0c;可以直接继承该类生成一个子类就可以。应对一些简单的业务场景继承也就够了&#xff0c;但是…

共享`pexlinux`数据文件的网络服务

实验环境准备&#xff1a; 1.红帽7主机 2.要全图形安装 3.配置网络为手动&#xff0c;配置网络可用 4.关闭vmware DHCP功能 一、kickstart自动安装脚本制作 1.安装图形化生成kickstart自动脚本安装工具 2.启动图形制作工具 3.图形配置脚本 这里使用的共享方式是http&#xff0…

2024靠这份软件测试面试题宝典已成功上岸,跳槽成功

上月很多朋友靠这份面试宝典拿到大厂的office&#xff0c;跳槽成功&#xff0c;面试找工作的小白和要跳槽进阶都很适合&#xff0c;没有一点准备怎么能上岸成功呢&#xff1f; 这份面试题宝库&#xff0c;包含了很多部分&#xff1a;测试理论&#xff0c;Linux基础&#xff0c…

每日OJ_牛客WY15 幸运的袋子

目录 牛客HJ62 查找输入整数二进制中1的个数 解析代码 牛客HJ62 查找输入整数二进制中1的个数 查找输入整数二进制中1的个数_牛客题霸_牛客网 解析代码 本题是计算一个数二进制表示中1的个数&#xff0c;通过&#xff08;n >> i) & 1可以获取第i位的二进制值&…

Linux中安装C#的.net,创建运行后端或控制台项目

安装脚本命令&#xff1a; 创建一个sh文件并将该文件更改权限运行 sudo apt update wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb sudo apt-get upd…

【文件系统】抽象磁盘的存储结构 CHS寻址法 | sector数组 | LAB数组

目录 1.为什么要抽象 2.逻辑抽象_版本1 2.1sector数组 ​2.2index转化CHS 3.逻辑抽象_版本2 3.1LBA数组 3.2LAB下标转化sector下标 文件其实就是在磁盘中占有几个扇区的问题❗文件是很多个sector的数组下标❗文件是有很多块构成的❗❗文件由很多扇区构成------>文件…

PXE+Kickstart自动化安装RHEL7.9

准备环境 1. 一台RHEL7.9主机 2. 开启主机图形 如果是7.9的主机是图形化界面了 就输入命令init 5 开启图形 如果主机一开始没装图形化界面&#xff0c;可以使用以下命令安装 # yum group install "Server with GUI" -y 3. 配置网络可用 4. 关闭VMware dhcp功…

音视频入门基础:WAV专题(5)——FFmpeg源码中解码WAV Header的实现

音视频入门基础&#xff1a;WAV专题系列文章&#xff1a; 音视频入门基础&#xff1a;WAV专题&#xff08;1&#xff09;——使用FFmpeg命令生成WAV音频文件 音视频入门基础&#xff1a;WAV专题&#xff08;2&#xff09;——WAV格式简介 音视频入门基础&#xff1a;WAV专题…