【大数据Spark】常见面试题(万字!建议收藏)

文章目录

  • 入门级
  • 中等难度
  • 中高级难度
  • 数据倾斜
    • 解决方法

入门级

  1. 什么是Apache Spark?它与传统的MapReduce有何不同?

    • Apache Spark是一个开源的分布式计算系统,它提供了高效的数据处理和分析能力。与传统的MapReduce相比,Spark具有更快的计算速度和更好的内存管理能力。Spark使用内存进行数据缓存和计算,而MapReduce则需要将中间结果写入磁盘,因此Spark在处理迭代算法和交互式查询时更具优势。
  2. 解释一下Spark的RDD(Resilient Distributed Dataset)是什么以及它的作用。

    • RDD是Spark中的基本数据抽象,它代表了一个不可变的、可分区的、可并行操作的数据集合。RDD可以从Hadoop的HDFS、HBase等数据源中创建,也可以通过其他RDD进行转换和操作。RDD的主要作用是提供了一种分布式内存抽象,使得数据可以高效地在集群中进行处理和计算。
  3. 请介绍一下Spark的核心组件及其功能。

    • Spark的核心组件包括Spark Core、Spark SQL、Spark Streaming、MLlib和GraphX。Spark Core提供了RDD的基本功能和API;Spark SQL支持SQL查询和DataFrame操作;Spark Streaming用于实时数据处理;MLlib提供了常用的机器学习算法;GraphX用于图数据处理。
  4. Spark中的DataFrame和RDD有什么区别?你更倾向于使用哪个?

    • DataFrame是Spark SQL中的一个抽象,它类似于关系型数据库中的表格,具有行和列的结构化数据。RDD是Spark的基本数据抽象,它是一个不可变的、可分区的数据集合。DataFrame提供了更丰富的高级操作和优化功能,适用于结构化数据的处理;而RDD更灵活,适用于需要更底层控制和自定义操作的场景。根据具体情况选择使用DataFrame或RDD。
  5. 请解释一下Spark的惰性求值(Lazy Evaluation)是什么以及它的优势。

    • Spark的惰性求值指的是在执行操作之前不会立即计算结果,而是等到需要结果时才进行计算。这种延迟计算的方式可以帮助Spark优化执行计划,合并操作,减少不必要的数据传输和计算开销,提高作业的性能和效率。
  6. 你如何在Spark中进行数据转换和操作?可以举例说明吗?

    • 在Spark中,可以使用RDD的转换操作(如map、filter、reduce等)或DataFrame的操作(如select、filter、groupBy等)来对数据进行转换和操作。例如,使用map操作对RDD中的每个元素进行映射,使用groupBy操作对DataFrame中的数据进行分组等。
  7. 什么是Spark的Shuffle操作?它在Spark作业中的性能影响是什么?

    • Spark的Shuffle操作指的是需要对数据进行重新分区或重新组合的操作,如reduceByKey、groupBy等。Shuffle操作会涉及数据的重新分发和网络传输,因此在Spark作业中性能影响较大。合理设计作业和减少Shuffle操作可以降低性能开销。
  8. 你了解Spark的机器学习库MLlib吗?它提供了哪些常用的机器学习算法?

    • MLlib是Spark中的机器学习库,提供了一系列常用的机器学习算法,包括分类、回归、聚类、推荐等。常用的算法包括线性回归、逻辑回归、决策树、随机森林、K均值聚类等。
  9. Spark Streaming和Structured Streaming有何不同?你更倾向于使用哪个?

    • Spark Streaming是Spark中用于实时数据处理的模块,基于微批处理的方式实现了流式计算;而Structured Streaming是Spark 2.0引入的新的流处理API,提供了更简单、更高级的流式处理接口,并且与批处理的API有着更高的一致性。根据需求和情况选择使用Spark Streaming或Structured Streaming。
  10. 请解释一下Spark的任务调度和执行流程。

    • Spark的任务调度和执行流程包括作业的划分、任务的调度和执行等步骤。首先,Spark将作业划分为多个阶段(Stage),每个阶段包含一组相互依赖的任务。然后,Spark根据数据依赖关系将任务进行调度,并将任务发送到集群中的执行器(Executor)上执行。最后,Spark根据任务的执行结果进行数据的汇总和整合,并返回给用户或下一个阶段继续执行。

中等难度

  1. 什么是Spark的广播变量(Broadcast Variables)?它们在Spark作业中的作用是什么?

    • 广播变量是Spark中的一种分布式共享变量,用于将较大的只读数据集广播到集群的所有节点上,以便在任务执行期间共享使用。它们在作业中的作用是减少数据的传输开销,提高作业的性能和效率。
  2. Spark中的累加器(Accumulators)是什么?它们如何在分布式环境下工作?

    • 累加器是Spark中的一种特殊变量,用于在分布式环境下进行可变的聚合操作,如计数、求和等。它们通过提供一个只能通过关联和交换操作更新的变量,确保在分布式环境下进行安全的并行计算。
  3. Spark中的内存管理机制是什么?它如何确保在内存中有效地管理数据?

    • Spark的内存管理机制主要包括内存分配、内存使用和内存释放三个方面。它通过对内存的动态分配和管理,以及通过使用内存和磁盘的混合存储模式,确保在内存中有效地管理和存储数据。
  4. 解释一下Spark中的作业调度器(Job Scheduler)和任务调度器(Task Scheduler)的区别及其作用。

    • Spark的作业调度器负责将用户提交的作业划分为多个阶段,并将这些阶段提交给任务调度器进行调度。而任务调度器负责将作业的各个阶段中的任务分配到集群中的执行器上执行。作业调度器和任务调度器的作用是协同工作,确保作业的有效执行。
  5. Spark中的容错机制是如何实现的?它们如何处理节点故障和任务失败?

    • Spark的容错机制主要通过RDD的不可变性和日志记录来实现。当节点故障或任务失败时,Spark可以根据RDD的依赖关系和日志记录进行任务的重播和数据的恢复,从而保证作业的正确执行。
  6. Spark的Shuffle过程中如何保证数据的局部性?它对作业的性能有何影响?

    • Spark的Shuffle过程中通过数据本地化策略和分区策略来保证数据的局部性,尽量减少数据的传输和网络开销。良好的数据局部性可以提高作业的性能和效率。
  7. 解释一下Spark的执行计划(Execution Plan)及其生成过程。

    • Spark的执行计划是指作业的执行过程和逻辑的计划表示,它由作业的DAG(有向无环图)和各个阶段的任务组成。生成执行计划的过程包括作业的解析、优化和物理执行计划生成等步骤。
  8. 在Spark作业中如何处理数据倾斜(Data Skew)的问题?可以举例说明吗?

    • 处理数据倾斜的方法包括使用合适的数据分区策略、使用合适的聚合操作、使用随机前缀进行数据重分布等。例如,在使用groupByKey操作时,可以使用combineByKey替代,或者使用自定义的分区器来均匀分配数据,从而减少数据倾斜。
  9. Spark的动态资源分配(Dynamic Resource Allocation)是如何工作的?它如何提高资源利用率?

    • Spark的动态资源分配通过根据作业的资源需求动态调整集群资源的分配,以提高资源利用率和作业的执行效率。它通过监控作业的执行情况和资源的使用情况,动态地调整资源的分配和释放。
  10. Spark中的数据持久化机制是如何工作的?它们如何影响作业的性能和容错性?

    • Spark中的数据持久化机制通过将RDD的计算结果缓存到内存或磁盘上,以便在后续的操作中重用,从而提高作业的性能。它们通过在内存和磁盘之间进行数据存储和管理,以及通过RDD的不可变性和依赖关系来保证数据的容错性。

文章目录

  • 入门级
  • 中等难度
  • 中高级难度
  • 数据倾斜
    • 解决方法

中高级难度

  1. 什么是Spark的执行器(Executors)?它们在Spark集群中的作用是什么?
  • Spark的执行器是运行在集群节点上的进程,负责执行Spark作业中的任务。它们的作用包括加载数据、执行任务、存储计算结果等。
  1. 解释一下Spark中的数据分区(Partition)及其作用。

    • 数据分区是指将数据集分割成多个部分,每个部分称为一个分区,以便并行处理和存储。数据分区可以提高作业的并行度和性能。
  2. Spark中的shuffle操作是什么?它的工作原理是什么?

    • Shuffle操作是指在Spark作业中进行数据重分布和重新组织的过程,包括数据的重新分区、数据的排序、数据的聚合等。它的工作原理是将数据按照指定的规则进行分组、排序和聚合,并将结果写入到临时文件中,以便后续的操作使用。
  3. Spark中的DataFrame和RDD有什么区别?它们各自适用于哪些场景?

    • DataFrame是一种分布式数据集,具有结构化的数据格式和API,支持SQL查询和DataFrame操作。而RDD(弹性分布式数据集)是一种更底层的抽象,表示分布式数据集的集合,可以通过编程方式进行操作。DataFrame适用于结构化数据和SQL操作,而RDD适用于更灵活的数据处理和操作。
  4. Spark中的优化技术有哪些?它们如何提高作业的性能?

    • Spark中的优化技术包括查询优化、数据本地化优化、Shuffle优化、内存管理优化等。这些优化技术可以通过改进执行计划、减少数据传输和网络开销、提高数据局部性等方式来提高作业的性能。
  5. 解释一下Spark中的延迟操作(Lazy Evaluation)及其优点。

    • Spark中的延迟操作是指在调用转换操作时并不立即执行,而是等待行动操作时才执行的特性。它的优点包括减少中间结果的存储和传输开销、提高作业的执行效率等。
  6. 什么是Spark的数据源(Data Source)API?它的作用是什么?

    • Spark的数据源API是用于读取和写入数据的统一接口,支持多种数据格式和存储系统,如HDFS、Hive、JDBC、Parquet等。它的作用是提供统一的数据访问接口,简化数据的读取和写入操作。
  7. 在Spark中如何处理大规模数据的性能问题?可以举例说明吗?

    • 处理大规模数据的性能问题可以采用分区和分布式计算、数据本地化和数据压缩等技术来提高作业的执行效率。例如,在处理大规模数据时,可以使用合适的分区策略和数据本地化策略来减少数据传输和网络开销,从而提高作业的性能。
  8. Spark中的动态分区(Dynamic Partition)是什么?它如何优化数据的存储和查询?

    • Spark中的动态分区是指根据数据的内容动态创建和管理分区的过程,以便优化数据的存储和查询。它可以根据数据的分布情况动态调整分区的数量和大小,从而提高数据的存储效率和查询性能。
  9. 如何在Spark作业中监控和调优内存使用?可以分享一些实践经验吗?

    • 在Spark作业中监控和调优内存使用可以通过监控作业的内存占用情况、调整内存分配参数、使用序列化和反序列化等方式来实现。例如,可以通过调整executor的内存分配参数和使用Kryo序列化来减少内存占用,从而提高作业的执行效率。

  1. 请解释一下Spark中的RDD lineage(血统)机制是什么?它的作用和原理是什么?
  • RDD lineage是指Spark中每个RDD都会记住其生成过程中所依赖的父RDD,形成一种有向无环图(DAG)。其作用是在RDD数据丢失时能够通过血统图重新计算数据,并支持容错和数据恢复。其原理是通过记录每个RDD的转换操作以及对应的父RDD,当需要重新计算丢失的数据时,可以根据血统图中的信息重新计算数据。
  1. 什么是Spark的广播变量(Broadcast Variables)?它们在Spark作业中的作用是什么?
  • Spark的广播变量是一种共享变量,可以将一个较大的只读数据集缓存在每个Executor的内存中,以便在执行任务时可以高效地访问。它们的作用是在Spark作业中减少数据的传输开销和复制开销,提高作业的执行效率。
  1. 在Spark中,什么是数据倾斜(Data Skew)?如何检测和解决数据倾斜问题?
  • 数据倾斜是指在数据处理过程中,某些数据分区的大小远远大于其他分区的情况,导致任务执行时间不均衡。可以通过监控作业的任务执行时间和数据分布情况来检测数据倾斜问题,而解决方法包括重新分区、使用随机前缀等方式来减少数据倾斜。
  1. 解释一下Spark中的checkpoint机制是什么?它的作用和使用场景是什么?
  • Spark中的checkpoint机制是指将RDD数据持久化到可靠的存储系统中,以便在作业失败时能够重新计算数据。其作用是提供容错机制,防止作业失败时数据丢失,并支持数据恢复。常见的使用场景包括迭代计算、长时间作业等需要持久化数据的情况。
  1. Spark中的任务调度器(Task Scheduler)是如何工作的?它的调度策略有哪些?
  • Spark中的任务调度器负责将作业划分成多个任务,并分配给集群中的Executor执行。其工作原理是根据作业的依赖关系和资源情况动态调度任务的执行顺序和位置。常见的调度策略包括FIFO、Fair Scheduler、Capacity Scheduler等。
  1. 什么是Spark的数据本地化(Data Locality)?它如何优化作业的性能?
  • Spark的数据本地化是指将计算任务分配给存储有相关数据的节点,以减少数据传输和网络开销。它通过将任务调度到数据所在的节点上执行,减少数据的远程读取和传输时间,从而提高作业的执行效率。
  1. 在Spark中,什么是窄依赖和宽依赖?它们之间有什么区别?
  • 窄依赖是指每个父RDD分区最多只被一个子RDD分区依赖的依赖关系,而宽依赖是指每个父RDD分区被多个子RDD分区依赖的依赖关系。窄依赖支持更高效的数据传输和计算,而宽依赖则会导致数据的重复计算和传输,降低作业的性能。
  1. 解释一下Spark中的累加器(Accumulators)是什么?它们的作用和使用方法是什么?
  • Spark中的累加器是一种分布式变量,用于在作业中对数据进行累加操作,如计数、求和等。其作用是在作业中对全局变量进行更新和累加,并可以在作业执行完后获取累加结果。使用方法包括定义累加器变量、在作业中更新累加器值、获取累加器结果等。
  1. 什么是Spark的动态资源分配(Dynamic Resource Allocation)?它如何优化集群资源的利用?
  • Spark的动态资源分配是指根据作业的需求动态分配和释放集群资源的过程,以提高资源的利用率和作业的执行效率。其通过监控作业的资源需求和集群的资源使用情况,动态调整Executor的数量和资源分配,从而优化集群资源的利用。
  1. 在Spark中,什么是RDD的持久化(Persistence)?它如何提高作业的性能?
  • RDD的持久化是指将RDD数据缓存到内存或磁盘中,以便在后续的操作中可以重用。其通过减少数据重复计算和读取的开销,提高作业的执行效率。常见的持久化级别包括MEMORY_ONLY、MEMORY_AND_DISK、MEMORY_ONLY_SER等。

文章目录

  • 入门级
  • 中等难度
  • 中高级难度
  • 数据倾斜
    • 解决方法

数据倾斜

数据倾斜是在数据处理过程中出现的一种情况,指某些数据分区的大小远远大于其他分区的情况,导致任务执行时间不均衡。数据倾斜可能由多种原因引起,下面详细介绍一下数据倾斜出现的原因和可能造成的后果:

数据倾斜出现的原因:

  1. 数据分布不均匀: 当数据集中存在某些大量重复的数据或者某些特定的数据量级远高于其他数据,就会导致数据分布不均匀,从而引发数据倾斜。
  2. 数据分区策略不合理: 如果数据分区策略不合理,例如Hash分区时关键字选择不当或者范围分区时数据分布不均匀,都可能导致数据倾斜。
  3. 数据处理操作不均衡: 在数据处理过程中,某些操作可能会导致数据倾斜,比如group by、join等操作,当部分数据量远大于其他数据时,就会引发数据倾斜。

数据倾斜可能造成的后果:

  1. 任务执行时间不均衡: 数据倾斜会导致部分任务的执行时间远远长于其他任务,从而降低作业的整体执行效率。
  2. 资源利用不均衡: 在数据倾斜的情况下,部分节点可能需要处理大量的数据,而其他节点可能处于空闲状态,导致资源利用不均衡。
  3. 容易引发性能问题: 数据倾斜会使得部分节点的负载远高于其他节点,容易引发节点宕机或者崩溃,进一步影响作业的稳定性和性能。

因此,对于数据倾斜问题,需要及时检测和解决,采取合理的数据分区策略、数据预处理、使用随机前缀等方式来减少数据倾斜,以提高作业的执行效率和稳定性。

解决方法

当面临数据倾斜问题时,可以采取一系列策略来解决,以下是一些常见且有效的方法:

  1. 重新分区: 可以尝试使用更合适的分区策略,如使用Hash分区替代默认的范围分区,或者根据数据的分布情况进行手动分区,从而使得数据分布更加均匀。
// 使用Hash分区进行重新分区
val rdd = originalRdd.repartition(numPartitions)
  1. 随机前缀: 对于导致数据倾斜的键值对,可以在进行聚合操作之前,给键值对的键添加随机前缀,以减少相同键值对被分到同一个分区的可能性,从而降低数据倾斜的发生。
// 对键值对添加随机前缀
val rdd = originalRdd.map(kv => (randomPrefix + kv._1, kv._2))
  1. 使用聚合操作替代join操作: 如果数据倾斜主要发生在join操作中,可以考虑使用聚合操作替代join操作,将数据预先聚合后再进行join操作,以减少倾斜可能性。
// 使用聚合操作替代join操作
val aggregatedRdd1 = rdd1.reduceByKey(...)
val aggregatedRdd2 = rdd2.reduceByKey(...)
val resultRdd = aggregatedRdd1.join(aggregatedRdd2)
  1. 增加分区数量: 增加RDD的分区数量可以降低每个分区的数据量,从而减轻数据倾斜的程度,提高作业的执行效率。
// 增加分区数量
val increasedPartitionsRdd = originalRdd.repartition(newNumPartitions)
  1. 过滤掉异常数据: 如果数据中存在一些异常数据导致了数据倾斜,可以通过过滤掉这些异常数据来减轻数据倾斜的程度。
// 过滤掉异常数据
val filteredRdd = originalRdd.filter(...)
  1. 使用自定义分区器: 如果默认的分区器无法有效地处理数据倾斜问题,可以自定义分区器来更好地控制数据的分布情况。
// 自定义分区器
class CustomPartitioner(numPartitions: Int) extends Partitioner {override def numPartitions: Int = numPartitionsoverride def getPartition(key: Any): Int = ???
}
val rdd = originalRdd.partitionBy(new CustomPartitioner(numPartitions))

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

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

相关文章

海光CPU:国产信创的“芯“动力解读

国产信创CPU-海光CPU CPU:信创根基,国之重器 国产CPU形成三大阵营:自主架构、x86及ARM。自主阵营中,龙芯和申威以LoongArch和SW-64为基石;ARM阵营由鲲鹏、飞腾主导,依托ARM授权研发处理器;x86阵…

红帽练习 之逻辑卷 pv lv gv

逻辑卷习题 1 在/dev/sdb 存储设备上创建物理设备分区 创建2个大小各为256MB的分区 并设置为linux lvm类型 使用first 和second 作为这些分区的名称 parted /dev/sdb mklabel gpt parted /dev/sdb primary mkpart first 1M 256M parted /dev/sdb set 1 …

【Linux|数据恢复】extundelete和ext4magic数据恢复工具使用

环境:Centos7.6_x86 一、extundelete工具 1、extundelete介绍 Extundelete 是一个数据恢复工具,用于从 ext3 或 ext4 分区中恢复删除文件。根据官网0.2.4版本介绍是支持ext4,但实际上使用发现ext4格式有些问题,会报以下错误&…

动态SQL IF语句

IF语句学习 第一种写法(标准) 我们先来看以下标准写法: select * from .. <where> <if test""> and ....... <if test""> and ....... <where> 我们用了一个where标签 , 内嵌if语句 第二种写法: 这是第二种写法:不用where标…

大降分!重邮计算机专硕复试线大降50分!重庆邮电计算机考研考情分析!

重庆邮电大学&#xff08;Chongqing University of Posts and Telecommunications&#xff09;简称重邮&#xff0c;坐落于中国重庆市主城区南山风景区内&#xff0c;是中华人民共和国工业和信息化部与重庆市人民政府共建的教学研究型大学&#xff0c;入选国家“中西部高校基础…

一篇文章搞懂Go语言切片底层原理(图文并茂+举例讲解)

1. 切片和数组的底层关系 Go语言切片的数据结构是一个结构体&#xff1a; type slice struct {array unsafe.Pointerlen intcap int }Go语言中切片的内部结构包含地址、大小和容量。将数组比喻成一个蛋糕&#xff0c;那么切片就是需要切的那一块&#xff0c;而那一块的的…

c++学生管理系统

想要实现的功能 1&#xff0c;可以增加学生的信息&#xff0c;包括&#xff08;姓名&#xff0c;学号,c成绩&#xff0c;高数成绩&#xff0c;英语成绩&#xff09; 2&#xff0c;可以删除学生信息 3&#xff0c;修改学生信息 4&#xff0c;显示所有学生信息 5&#xff0c…

支持AMD GPU的llm.c

anthonix/llm.c: LLM training in simple, raw C/HIP for AMD GPUs (github.com) llm.c for AMD devices This is a fork of Andrej Karpathys llm.c with support for AMD devices. 性能 在单个7900 XTX显卡上使用默认设置&#xff0c;目前的训练步骤耗时约为79毫秒&#x…

Docker的安装、启动和配置镜像加速

前言&#xff1a; Docker 分为 CE 和 EE 两大版本。CE 即社区版&#xff08;免费&#xff0c;支持周期 7 个月&#xff09;&#xff0c;EE 即企业版&#xff0c;强调安全&#xff0c;付费使用&#xff0c;支持周期 24 个月。 而企业部署一般都是采用Linux操作系统&#xff0c;而…

【软件设计师】2022年上半年真题解析

​​冯诺依曼计算机体系结构的基本特点是&#xff1a; A. 程序指令和数据都采用二进制表示 - 这是正确的&#xff0c;因为冯诺依曼架构下的计算机使用二进制形式来表示和处理所有信息&#xff0c;包括指令和数据。 B. 程序指令总是存储在主存中&#xff0c;而数据则存储在高速…

Java基础语法详解——入门学习教程

Java 基础 目录 一、数据类型 基本类型包装类型缓存池 二、String 概览不可变的好处String, StringBuffer and StringBuilder String Poolnew String(“abc”) 三、运算 参数传递float 与 double隐式类型转换switch 四、关键字 finalstatic 五、Object 通用方法 概览equals()ha…

深入解析 MongoDB Map-Reduce:强大数据聚合与分析的利器

Map-Reduce 是一种用于处理和生成大数据集的方法&#xff0c;MongoDB 支持 Map-Reduce 操作以执行复杂的数据聚合任务。Map-Reduce 操作由两个阶段组成&#xff1a;Map 阶段和 Reduce 阶段。 基本语法 在 MongoDB 中&#xff0c;可以使用 db.collection.mapReduce() 方法执行…

IsoBench:多模态基础模型性能的基准测试与优化

随着多模态基础模型的快速发展&#xff0c;如何准确评估这些模型在不同输入模态下的性能成为了一个重要课题。本文提出了IsoBench&#xff0c;一个基准数据集&#xff0c;旨在通过提供多种同构&#xff08;isomorphic&#xff09;表示形式的问题&#xff0c;来测试和评估多模态…

算法(十三)回溯算法---N皇后问题

文章目录 算法概念经典例子 - N皇后问题什么是N皇后问题&#xff1f;实现思路 算法概念 回溯算法是类似枚举的深度优先搜索尝试过程&#xff0c;主要是再搜索尝试中寻找问题的解&#xff0c;当发生不满足求解条件时&#xff0c;就会”回溯“返回&#xff08;也就是递归返回&am…

enum4linux一键查询SMB信息(KALI工具系列十六)

目录 1、KALI LINUX简介 2、enum4linux工具简介 3、在KALI中使用enum4linux 3.1 目标主机IP&#xff08;win&#xff09; ​编辑 3.2 KALI的IP 4、操作示例 4.1 运行工具 4.2 列出用户名 4.3 提取用户名 4.4 使用自定义RID范围 4.5 列出组 4.6 列出共享文件夹 4.7…

【笔记小记】掌握市场脉动:全营销解决方案的力量

前面虽然说了这个模型&#xff0c;而且是分章说的&#xff0c;那么在此以笔记小记的形式再说一下&#xff0c;企业面临的挑战与日俱增&#xff0c;消费者需求的多样化、技术的不断进步、全球化的深入以及社会责任的日益重要&#xff0c;这些因素共同塑造了市场的现状和未来&…

网络监听技术

网络监听技术 网络监听概述网络监听环境 流量劫持网络环境共享式网络监听原理交换式网络监听交换机的工作方式交换网络监听&#xff1a;交换机集线器交换网络监听&#xff1a;端口镜像交换网络监听&#xff1a;MAC洪泛交换网络监听&#xff1a;MAC洪泛交换网络监听&#xff1a;…

【Unix】消息类的格式与使用

本文给出一个MacOS操作系统中的消息类的使用过程示例&#xff08;结合gencat命令&#xff0c;<nl_types.h>头文件以及catopen,catgets,catclose3个函数&#xff09; 首先根据对应的操作系统&#xff0c;查看gencat命令 man gencat 可以详细看到其中对于输入文件&#x…

Typescript高级: 深入理解extends keyof语法

概述 在TypeScript中&#xff0c;extends关键字是类型系统中一个极其重要的组成部分它不仅用于类的继承&#xff0c;也是类型兼容性检查和泛型约束的关键机制特别是当它与keyof关键字结合&#xff0c;形成K extends keyof T的结构时它为类型系统带来了强大的灵活性和表达能力&…

动态SQL where, choose语句

where语句就一个<where>标签, 很简单, 不再过多赘述 接下来我们来看 choose语句的使用 其实choose语句就像java里的swith语句 , 如果语句前面的生效 , 后面的就不会生效了 可以定义查询的优先级