首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

操作系统常见面试题总结

(6)共享内存 Shared memory:多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据的更新。这种方式需要依靠某种同步操作,如互斥锁和信号量等。...1、死锁的四个必要条件: (1)互斥条件:一个资源每次只能被一个进程使用。此时若有其他进程请求该资源,则请求进程只能等待。...(3)动态分区分配: 该分区方法不预先划分内存划,而是在进程装入内存时,根据进程的大小动态地建立分区,并使分区的大小正好适合进程的需要,因此分区的大小和数目是可变的。...然后再按照作业的大小,从该分区中划出一块内存分配给请求者。 该算法倾向于使用内存中低地址部分的空闲分区,在高地址部分的空闲分区非常少被利用,从而保留了高地址部分的大空闲区。...在磁盘上定位某个物理记录需要知道其柱面号、磁头号以及扇区号。定位物理记录时,磁头到达指定扇区的时间称为查找时间, 选择磁头号并旋转至指定扇区的时间称为 搜索延迟。

67220

05 Confluent_Kafka权威指南 第五章: kafka内部实现原理

每个broker都有一个唯一的表示符,该标识符可以在broker配置的文件中设置,也可以自动生成。每次broker启动的时候,它都会通过创建一个临时节点,在zookeeper中使用其ID注册自己。...在客户端发送一个请求,broker等待,直到有足够数量的数据并返回数据,然后客户端再继续发送下一次请求获取更多的数据。...kafka的broker写入一个分区时,如果达到了段的限制,我们将关闭文件并开始一个新的分区。...如果你选择的存储一个星期的数据并每天滚动一个新的段,你将看到我们将滚动一个新段,同时删除最老的段,因为大多数时候,分区将有7个段。...它将保留这个特殊的消息(墓碑)一段可配置的时间。在此期间,消费者能够看到此消息并知道该值被删除。因此如果消费者将数据从kafka复制到数据库,它将看到墓碑消息,并且知道将用户从数据库中删除。

77330
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    你都知道那些Kafka副本机制?

    如果副本不满足上面条件的话,就会被从 ISR 列表中移除,直到满足条件才会被再次加入。...这是针对当首领副本挂掉且 ISR 中没有其他可用副本时,是否允许某个不完全同步的副本成为首领副本,这可能会导致数据丢失或者数据不一致,在某些对数据一致性要求较高的场景 (如金融领域),这可能无法容忍的,...由于不同分区的领导副本可能在不同的 broker 上,如果某个 broker 收到了一个分区请求,但是该分区的领导副本并不在该 broker 上,那么它就会向客户端返回一个 Not a Leader for...四、物理存储 4.1 分区分配 在创建主题时,Kafka 会首先决定如何在 broker 间分配分区副本,它遵循以下原则: 在所有 broker 上均匀地分配分区副本; 确保分区的每个副本分布在不同的...如果按照默认值保留数据一周,而且每天使用一个新片段,那么你就会看到,在每天使用一个新片段的同时会删除一个最老的片段,所以大部分时间该分区会有 7 个片段存在。

    72410

    30分钟全面解析-SQL事务+隔离级别+阻塞+死锁

    ,SQL Server通常会自动回滚事务; 4.少数不太严重的错误不会引发事务的自动回滚,如主键冲突、锁超时等; 5.可以使用错误处理来捕获第4点提到的错误,并采取某种操作,如把错误记录在日志中,再回滚事务...1.在将数据修改写入到磁盘上数据库的数据分区之前会把这些修改写入到磁盘上数据库的事务日志中,把提交指令记录到磁盘的事务日志中以后,及时数据修改还没有应用到磁盘的数据分区,也可以认为事务时持久化的。...c.排他锁和其他任何类型的锁在多事务中不能在同一阶段作用于同一个资源。     如:当前事务获得了某个资源的排他锁,则其他事务不能获得该资源的任何其他类型的锁。...3.排他锁和共享锁的兼容性 (1)如果数据正在由一个事务进行修改,则其他事务既不能修改该数据,也不能读取(至少默认不能)该数据,直到第一个事务完成。...(2)阻塞进程在不断地运行,所以在代码中看到的最后一个操作不一定是导致问题的语句。在本例中最后一条执行语句是导致阻塞的语句。

    1.9K50

    Local index or Global index?

    where status :"SYS_B_4" and ID = :1 and rownum = :"SYS_B_5"; 其中T_EXP_OP_RECORD_CONTAINER 表是一个在...才能判断记录是否存在,因为有rownum=1 谓词条件,最好的情况是扫描local index的第一个分支就找到了结果,不再继续扫描下去;最差的情况是扫描到local index的最后一个分支才找到结果...但是,因为该表非常庞大(表和索引占用的空间达到T级),需要定期删除(转移)历史分区,只保留最近一年的数据,如果创建的是global index,删除历史分区后,需要对global index进行重建,维护时间窗口很难完成...针对快递业务的特点,老虎刘给出的建议是: 1、仍使用local index,重建表,减少分区数量:按天分区改为按月分区,不要子分区; 2、因为很少有用户会查询1个月以上的快递单,该表只保留最近2个月分区数据...不需要删除历史分区数据的分区表,可以创建global index(如基础数据表);需要定期删除历史分区的分区表,最好是创建local index,如果遇到分区字段无法成为查询条件时,建议尽量减少分区数,

    1.4K20

    ​kafka概述 01 0.10之后的kafka版本有哪些有意思的feature?【kafka技术图谱 150】

    该策略是一种全新的策略,能够显著地降低给消息指定分区过程中的延时。 使用Sticky Partitioner有助于改进消息批处理,减少延迟,并减少broker的负载。...在静态成员挂掉这段时间,broker会一直为该消费者保存状态(offset),直到超时或静态成员重新连接。 2.4.0 允许使用者从最近的副本(非leader)中获取。...该提案旨在更改Connect框架,以使其在处理Connector中的记录时能够自动处理错误。默认情况下,连接将在发生错误时立即失败,这是以前的连接行为。因此,必须明确启用所有新行为。...- 对于版本1-3,一旦达到到期时间戳记,则无论组状态如何,都会从偏移缓存中删除偏移(在下一次清理期间)。...在静态成员挂掉这段时间,broker会一直为该消费者保存状态(offset),直到超时或静态成员重新连接。

    99640

    Shenandoah GC算法

    支持的特性: 解释器 C1屏障 C2屏障 引用 JNI临界区域 System.gc() 策略 Shenandoah GC策略 策略 GC触发的条件 GC选择回收分区的条件 static 当内存可用达到一定的國值之后...,将启动GC 在进行GC时,只选择垃圾超过一定阈值的分区 passive 直到发生OOM,直接启动FGC 在进行GC时,只选择垃圾超过一定阈值的分区,并且分区在转移后仍然能保留一定的预留空间 aggressive...当内存可用达到一定的阈值之后,或从上次GC到现在已经使用的内存超过一定阈值后,或根据使用的内存预测可用的内存不足以支撑到下一次GC时,将启动GC 在进行GC时,只选择垃圾超过一定阈值的分区,并且分区在转移后仍然能保留一定的预留空间...compact 当内存可用达到一定的阈值之后,或从上次GC到现在已经使用的内存超过一定阈值后,将启动GC 在进行GC时,只选择垃圾超过一定阈值的分区,并且分区在转移后仍然能保留一定的预留空间。...在该阶段是并发执行的,但是只有一个并发工作线程执行预清理 再标记:在该阶段要做3件事:终止标记、计算回收集、转移根集合直接的引用对象。

    8210

    重磅 | 十年来扩展PostgreSQL的一些经验和教训

    这些记录的写入频率非常高-每次打开应用程序时,我们都会在上次看到该订阅者时进行更新。...为此,您最多可以创建30个分区,每个分区都将保留一个特定的日期范围。实施保留策略时,使用简单DROP TABLE的方法从数据库中删除单个分区表,而不是尝试从整个表中进行有针对性的删除。...但是,有一个主要警告。目标数据库上的解码过程是单线程的。如果数据库上的写负载足够高,它将使解码过程不堪重负,并导致延迟增加,直到达到某个限制(通常是可用磁盘空间)为止。...该XID用于跟踪行版本,并确定特定事务可以看到哪些行版本。如果您每秒要处理成千上万的事务,那么很快就可以达到XID最大值。如果要绕开XID计数器,那么过去的事务似乎就在将来,这将导致数据损坏。...较新的PostgreSQL版本提供了强大的支持,可以使用其内置的分区功能来拆分表。使用内置支持的一个优势是,您可以查询一个逻辑表并获取结果,或者在多个基础表之间拆分数据。

    1.6K20

    JVM G1(Garbage-First Garbage Collector)收集器全过程剖析

    通过候选老年代分区总数与混合周期最大总次数,确定每次包含到CSet的最小分区数量; 根据堆废物百分比,当收集达到参数时,不再启动新的混合收集。...事实上,当达到IHOP阈值时,G1并不会立即发起并发标记周期,而是等待下一次年轻代收集,利用年轻代收集的STW时间段,完成初始标记,这种方式称为借道(Piggybacking)。...在并行执行的任务中,如果某个任务过重,会导致其他线程在等待某项任务的处理,需要对这些地方进行优化。...释放分区 Free CSet:回收CSet分区的所有空间,并加入到空闲分区中。 其他活动 Other:GC中可能还会经历其他耗时很小的活动,如修复JNI句柄等。...G1会先等待下一次年轻代收集,然后在该收集阶段中,确定下次混合收集的CSet(Choose CSet)。

    1.4K10

    构建下一代万亿级云原生消息架构:Apache Pulsar 在 vivo 的探索与实践

    每一个 Topic 分区在一段时间内只创建一个 Ledger 维护分区写入的 Entry 的数据归属。...一个 Topic 分区在一段时间内写入的数据只被一个活跃 Ledger 管理,待该 Ledger 达到翻转条件后才会关闭 Ledger 并重新计算,创建新 Ledger 继续写入。 图 7....在 Pulsar 中,在满足 Ledger 最小翻转时间以及以下条件之一后触发 Ledger 翻转: 已达到 Ledger 最大翻转时间; 已达到 Ledger 的最大 Entry 数量; 已达到 Ledger...Ledger 只有在翻转后才会创建新的 Ledger,Ledger 过大会导致某段时间内写入某个磁盘的数据过多,产生磁盘存储不均衡的问题;针对 Ledger 为对象的一些操作也会受到影响,产生无法及时卸载数据到二级存储...在 ① 中,两个列表都处于初始化状态并可用;在 ② 中,某个可用分区阻塞一段时间后可以等待一段时间;若不可用就移动到不可用列表中,如 ③ 所示;当分区可用比例达到阈值再挪回可用列表,如 ④ 所示。

    71710

    Provenance存储库原理

    每次为FlowFile发生事件(创建,分叉,克隆,修改FlowFile等)时,都会创建一个新的Provenance事件。这个出处事件是流文件的快照,因为它看起来就是在那个时间点存在的流。...该快照将不会更改,直到过期。根据“nifi.properties”文件中的指定,Provenance存储库将在完成后的一段时间内保留所有这些来源事件。...这意味着新创建的Provenance事件将开始写入由16个日志文件组成的新组,并且原始文件将被处理以进行长期存储。首先,将经过滚动的日志合并到一个文件中。...一个单独的线程负责处理出处日志的删除。管理员可以设置两个条件来控制出处日志的删除,即可以占用的最大磁盘空间量和日志的最大保留期限。...我们能够跨多个磁盘分区对索引本身进行分条。 当多个线程正在更新特定索引时,对该索引的访问非常慢。这样,我们就可以避免在不需要时触摸该索引。 存储Lucene索引的目录的文件名是创建索引的时间戳。

    98220

    如何优化开放数据湖仓一体的性能

    它涉及根据特定列(通常是通常查询的字段)或条件(如日期、地理区域或类别)将数据划分为更小、更易于管理的块或分区。分区通过将需要读取的数据限制为仅相关分区,有助于减少查询期间扫描的数据量。...图 2:将较小大小的文件合并为较大的文件的压缩过程 Apache Hudi 架构的一个关键设计特征是其避免创建小文件的内置能力。...• Small File Size:一个阈值,低于该阈值时,将考虑对文件进行压缩/文件大小调整。 • Insert Split Size:插入期间数据拆分的大小。...Hudi 使用压缩一词来描述不同的过程[3]:将日志文件(存储在 Avro 中)与现有基本文件(存储在 Parquet 中)合并,以创建新的更新基本文件(也存储在 Parquet 中)。...然后,新的更新将转到新的更改日志文件,直到下一次 Hudi 压缩操作。 作为文件大小的 Hudi 实施示例,在上图中 Hudi 使用的最大文件大小为 120 MB,小文件大小为 100 MB。

    10410

    详解 JVM Garbage First(G1) 垃圾收集器

    其中,应用线程可以独占一个本地缓冲区(TLAB)来创建的对象,而大部分都会落入Eden区域(巨型对象或分配失败除外),因此TLAB的分区属于Eden空间;而每次垃圾收集时,每个GC线程同样可以独占一个本地缓冲区...通过候选老年代分区总数与混合周期最大总次数,确定每次包含到CSet的最小分区数量;根据堆废物百分比,当收集达到参数时,不再启动新的混合收集。...在初始标记暂停中,分区的NTAMS都被设置到分区顶部Top,初始标记是并发执行,直到所有的分区处理完。...根分区扫描必须在下一次年轻代垃圾收集启动前完成(并发标记的过程中,可能会被若干次年轻代垃圾收集打断),因为每次GC会产生新的存活对象集合。...释放分区 Free CSet:回收CSet分区的所有空间,并加入到空闲分区中。 其他活动 Other:GC中可能还会经历其他耗时很小的活动,如修复JNI句柄等。

    19.1K67

    kafka全面解析(一)

    JoinGroupRequest请求,每次组协调器处理完JoinGroupRequest时都会检测DelayJoin是否满足了完成执行条件 DelayedJoin响应方法的实现是调用GroupCoordnator...到此,控制器实例化过程结束,当一个代理启动就会创建一个kafkaController实例并启动,在启动kafakcontroller时,先注册一个用于监听zookeeper回话超时的监听器,sessionExpirationListener...在kafka中,每个主题之间互相独立,每个主题在逻辑上由一个或多个分区构成,分区树可以在创建主题的时候创建,也可以在主题创建后在修改,但只能增加一个主题的分区数,而不能减少分区数, 存储结构上分区的每个副本在逻辑上对应一个...集合不为空,即消息与主题和分区映射关系不能为空,客户端本次请求需要有数据写入 至少要对一个分区的消息追加成功 若满足创建延迟操作的条件,则创建一个delayedProduce对象并交由delayedProducePurgatory...副本数据同步过程 生产者在发布消息到某个partition时,先通过zookeeper找到该分区的leader,然后生产者将该消息发送到该分区的leader. leader会将消息写到log,每个follower

    73520

    如何将功能测试用例转为自动化脚本?

    现在,如何在自动化世界中写同样的东西?考虑QTP。您可以选择使用程序化语句启动浏览器,也可以使用“记录并运行设置”来设置属性。正确设置这些属性非常关键。...使用自动化脚本中的同步或wait语句来等待直到所需的状态变成真。 注意: 当对多个数据集运行相同的代码时,您将要确保将AUT返回到下一次迭代开始之前的状态。...可能包括进入一个新页面,一个可见的特定分区,一个可编辑的编辑框等。更改AUT状态步骤:这些步骤将导致您的AUT发生更改。 组合:顾名思义,这是上述两种类型的组合。以指示为例,启用该指示将激活某个区段。...在上述测试案例中,仅存在类型1和2步骤。 类型1:测试步骤2和3 类型2:测试步骤1和4 使用任何工具创建自动化脚本的条件是花一些时间分析该工具以及AUT。尝试看看他们如何相互影响。...执行此语句时,您将不需要V&V。这是因为有一个后续语句,并且该语句可以运行;这意味着成功之前的那个。但是,如果您格外勤奋,可以在此处添加一个。 步骤6和8:评论 步骤9和11:。条件语句。

    37030

    Kafka消费者组

    这里的实例可以是一个单独的进程,也可以是同 一进程下的线程。在实际场景中,使用进程更为常见一些。 Group ID是一个字符串,在一个Kafka集群中,它标识唯一的一个Consumer Group。...*c”))就表明该Group订阅所有以字母t开头、字母c结尾的主题。在Consumer Group的运行过程中,你新创建了一个满足这样条件的主题,那么该Group就会发生Rebalance。...所有Broker在启动时,都会创建和开启相应的Coordinator组件。Kafka为某个Consumer Group确定Coordinator所在的Broker的算法有2个步骤。...在默认情况下,每次Rebalance时,之前的分配方案都不会被保留。...所谓的有粘性,是指每次Rebalance时,该策略会尽可能地保留之前的分配方案,尽量实现分区分配的最小变动。

    1.9K41

    多图详解kafka生产者消息发送过程

    元信息都会有自己的自动更新逻辑, 详细请看Kafka的客户端发起元信息更新请求 相关的Producer配置有: 属性描述默认metadata.max.age.ms即使我们没有看到任何分区领导层更改以主动发现任何新代理或分区...如果提供,每台主机的退避将在每次连续连接失败时呈指数增长,直至达到此最大值。在计算回退增加后,添加 20% 的随机抖动以避免连接风暴。...如果一个主题在这么多毫秒内没有被访问过,它就会从缓存中删除。并且下一次对其的访问将强制执行元数据获取请求。...该Batch能否发送判断条件如下 如果该Batch满了或者Batch所在的Deque数量>1(数量大于1说明第一个Batch肯定就满了) 则满足发送条件 如果消息累加器中内存用完了,有线程阻塞等待写入消息累加器...这里要注意的是,是调用flush()这一时刻的所有未发送的Batch都需满足发送条件,后面新增的Batch不属于这一范畴 该Batch的创建时间>linger.ms的时间 获取可发送请求的服务端

    1.8K30

    详解 JVM Garbage First(G1) 垃圾收集器

    其中,应用线程可以独占一个本地缓冲区(TLAB)来创建的对象,而大部分都会落入Eden区域(巨型对象或分配失败除外),因此TLAB的分区属于Eden空间;而每次垃圾收集时,每个GC线程同样可以独占一个本地缓冲区...通过候选老年代分区总数与混合周期最大总次数,确定每次包含到CSet的最小分区数量;根据堆废物百分比,当收集达到参数时,不再启动新的混合收集。...在初始标记暂停中,分区的NTAMS都被设置到分区顶部Top,初始标记是并发执行,直到所有的分区处理完。...根分区扫描必须在下一次年轻代垃圾收集启动前完成(并发标记的过程中,可能会被若干次年轻代垃圾收集打断),因为每次GC会产生新的存活对象集合。...释放分区 Free CSet:回收CSet分区的所有空间,并加入到空闲分区中。 其他活动 Other:GC中可能还会经历其他耗时很小的活动,如修复JNI句柄等。

    81310

    Kafka最基础使用

    针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息。...为了消费消息,订阅者需要提前订阅该角色主题,并保持在线运行; 4、Kafka Apache Kafka是一个分布式流平台。...的消息的序号 默认Kafka将offset存储在ZooKeeper中 在一个分区中,消息是有顺序的方式存储着,每个在分区的消费都是有一个递增的id。...轮训分区 默认的策略,也是使用最多的策略,可以最大限度保证所有消息平均分配到一个分区 如果在生产消息时,key为null,则使用轮询算法均衡地分配分区 随机策略(不用) 随机策略,每次都随机地将消息分配到每个分区...按key分配策略 按key分配策略,有可能会出现「数据倾斜」,例如:某个key包含了大量的数据,因为key值一样,所有所有的数据将都分配到一个分区中,造成该分区的消息数量远大于其他的分区。

    32250

    java 相关总结

    SynchronousQueue 类似一个信号量通道, 生产者与消费者都要彼此等待对方,其中一个接收到互补条件时,两者出队列,否则阻塞,直到条件匹配为止。...当调用一个方法时,将创建一个新frame, 并在控制转移到新方法时成为当前frame。 在方法返回时,当前frame将其方法调用的结果(如果有的话)传回前一帧。...某个对象被引用,则找出该对象在region中的位置,并计算区间,然后 找到 cardTable的偏移量,设置为1 -XX:ParGCCardsPerStrideChunk=4096,设置每个线程每次扫描的...如果broker下线,控制器就会收到通知,并获取该broker中的主题分区信息,从中获取leader分区的信息以及分区的复制节点 然后,选举出新的leader分区,并发送通知给复制节点,复制节点会重定向到新的...从而,不用将消息保存在内存,直接从文件到网络缓冲区,减少复制数据的代价 删除键:发送一个包含 NULL 值的键,kafka 清理线程会删除该键的历史数据,并保留null值键 一段时间。

    63021
    领券