Hive 面试题(八)

1. 简述Hive的三种自定义函数是什么?实现步骤与流程?它们之间的区别?作用是什么 ?

Hive提供了三种类型的自定义函数(UDF):用户定义的标量函数(UDF)、用户定义的聚合函数(UDAF)、用户定义的表生成函数(UDTF)。以下是这三种函数的简述、实现步骤与流程,以及它们之间的区别和作用:

用户定义的标量函数(UDF):
  • 定义:UDF是最基本的自定义函数类型,它接受一个或多个输入参数,并返回一个单一的输出值。

  • 实现步骤

    1. 编写Java代码实现org.apache.hadoop.hive.ql.exec.UDF接口。
    2. 编译Java类并生成JAR文件。
    3. 将JAR文件放置到Hive的库目录下或通过ADD JAR命令加载。
    4. 使用CREATE FUNCTION语句注册UDF。
  • 作用:用于执行简单的数据转换,如字符串处理、日期格式化等。

用户定义的聚合函数(UDAF):
  • 定义:UDAF用于对一组数据进行聚合操作,并返回一个单一的聚合结果。

  • 实现步骤

    1. 编写Java代码实现org.apache.hadoop.hive.ql.udf.aggregation.UserDefinedAggregateFunction接口。
    2. 编译Java类并生成JAR文件。
    3. 将JAR文件放置到Hive的库目录下或通过ADD JAR命令加载。
    4. 使用CREATE AGGREGATE FUNCTION语句注册UDAF。
  • 作用:用于执行复杂的聚合操作,如自定义的统计分析、汇总计算等。

用户定义的表生成函数(UDTF):
  • 定义:UDTF可以接收零个或多个输入参数,并返回多条记录(即多列数据)。

  • 实现步骤

    1. 编写Java代码实现org.apache.hadoop.hive.ql.udf.UDTF接口。
    2. 编译Java类并生成JAR文件。
    3. 将JAR文件放置到Hive的库目录下或通过ADD JAR命令加载。
    4. 使用CREATE FUNCTION语句注册UDTF。
  • 作用:用于生成复杂的数据结构,如将一行数据转换为多行数据,或者进行数据的扩展和变换。

它们之间的区别:
  • 输入输出
    • UDF:接受一个或多个输入参数,返回单个输出。
    • UDAF:接受一组输入参数,返回单个聚合输出。
    • UDTF:接受零个或多个输入参数,返回多条记录。
  • 使用场景
    • UDF:适用于简单的数据转换。
    • UDAF:适用于执行聚合计算。
    • UDTF:适用于生成多条记录或复杂的数据变换。
  • 实现接口
    • UDF:实现org.apache.hadoop.hive.ql.exec.UDF接口。
    • UDAF:实现org.apache.hadoop.hive.ql.udf.aggregation.UserDefinedAggregateFunction接口。
    • UDTF:实现org.apache.hadoop.hive.ql.udf.UDTF接口。
实现流程示例(UDF):
  1. 定义UDF类
    public class MyUDF extends UDF {public String evaluate(String input) {// 实现逻辑return result;}
    }
    
  2. 编译和打包:将上述类编译并打包成JAR文件。
  3. 注册UDF
    ADD JAR /path/to/my-udf.jar;
    CREATE TEMPORARY FUNCTION my_udf AS 'path.to.MyUDF';
    

通过自定义这些函数,用户可以根据特定的业务逻辑和需求扩展Hive的功能,实现更加灵活和强大的数据处理。

2. 简述Hive的存储引擎和计算引擎 ?

Hive 的存储引擎和计算引擎是两个关键组件,它们共同工作以支持数据存储和处理。

存储引擎:

Hive 的存储引擎主要负责数据的存储和检索。它通常与 Hadoop 分布式文件系统(HDFS)或其他兼容的文件系统(如 Amazon S3、Azure Data Lake Storage 等)集成,以存储 Hive 表中的数据。

  1. 数据存储

    • Hive 表的数据以文件的形式存储在 HDFS 上。
    • 支持多种文件格式,包括文本文件、SequenceFile、ORC、Parquet、Avro 和 JSON 等。
  2. 表分区

    • Hive 支持将表数据分区存储,每个分区对应一个子目录。
  3. 桶存储

    • Hive 允许将表数据存储为桶(Bucket),以优化数据的分布和访问。
  4. 存储格式

    • 不同的存储格式对性能有不同的影响。例如,列式存储格式(如 ORC 和 Parquet)可以提供更好的压缩和查询性能。
  5. 外部表和内部表

    • Hive 支持内部表(Managed Table)和外部表(External Table),它们在数据管理行为上有所不同。
计算引擎:

Hive 的计算引擎负责执行 HiveQL 语句,处理数据查询和分析任务。

  1. MapReduce

    • 最初,Hive 使用 MapReduce 作为其主要的计算引擎,将 HiveQL 语句转换为 MapReduce 作业。
  2. Tez

    • Apache Tez 是一个比 MapReduce 更高效的计算引擎,它支持更复杂的数据处理任务和更好的性能。
  3. Spark

    • Apache Spark 是另一种计算引擎,它提供了内存计算能力,可以显著提高 Hive 查询的性能。
  4. 查询优化器

    • Hive 包含一个查询优化器,它负责优化查询计划,减少资源消耗和提高查询效率。
  5. 执行模式

    • Hive 支持本地模式(Local Mode)和分布式模式(Distributed Mode)。
  6. HiveServer2

    • HiveServer2 是 Hive 的服务组件,它提供了一个 JDBC 和 ODBC 接口,允许用户远程执行 Hive 查询。
  7. 动态分区

    • Hive 支持动态分区,可以在加载数据时自动创建分区。
  8. ACID 和事务

    • 从 Hive 0.14 开始,支持 ACID 事务和更新/删除操作。
  9. 向量化查询引擎

    • Hive 的向量化查询引擎可以并行处理多个列,提高查询性能。

通过这些存储和计算功能,Hive 能够高效地处理存储在 Hadoop 集群中的大规模数据集,并提供强大的数据分析能力。随着技术的发展,Hive 的存储和计算引擎也在不断地演进和优化。

3. 简述Hive的count的用法 ?

在Hive中,COUNT 是一个非常常用的聚合函数,用于计算行数或者非空值的数量。以下是 COUNT 函数的一些用法:

基本用法:
  • 计算总行数:无论列值是否为NULL,都会计算在内。

    SELECT COUNT(*)
    FROM table_name;
    
  • 计算某个列非空值的数量:只计算列中非NULL的值。

    SELECT COUNT(column_name)
    FROM table_name;
    
组合用法:
  • 与WHERE子句结合:计算满足特定条件的行数。

    SELECT COUNT(*)
    FROM table_name
    WHERE condition;
    
  • 与DISTINCT结合:计算某个列或多个列中不同值的总数。

    SELECT COUNT(DISTINCT column_name)
    FROM table_name;
    
特殊用法:
  • COUNT与HLL列结合:Hive支持使用HyperLogLog算法的HLL数据类型进行近似的COUNT DISTINCT计算,适用于处理非常大的数据集。

    SELECT COUNT(hll_column)
    FROM table_name;
    
  • COUNT配合GROUP BY:在分组的基础上计算每个组的行数或非空值数量。

    SELECT group_by_column, COUNT(*)
    FROM table_name
    GROUP BY group_by_column;
    
注意事项:
  • COUNT(*) 包括了所有的行,不论字段值是否为NULL。
  • COUNT(column_name) 只计算列中非NULL的值。
  • COUNT 函数在处理大型数据集时可能会消耗较多资源,特别是当数据未分区或未优化存储时。

COUNT 是数据分析中的基础操作,能够提供数据集大小的快速概览,是数据仓库和商业智能应用中的常用函数。

4. 简述Hive的union和union all的区别 ?

在 Hive 中,UNIONUNION ALL 是两种不同的集合操作,它们用于合并两个或多个查询选择的结果集。以下是 UNIONUNION ALL 的主要区别:

  1. 结果集去重

    • UNION:在合并结果集时,UNION 会自动去除重复的行,确保结果集中的每一行都是唯一的。
    • UNION ALL:与 UNION 不同,UNION ALL 不会去除重复的行。它会将所有查询选择的结果合并在一起,包括完全相同的行。
  2. 性能

    • UNION:因为需要去重,UNION 操作通常涉及额外的排序和去重步骤,这可能会增加查询的执行时间。
    • UNION ALL:由于不需要去重,UNION ALL 通常执行得更快,因为它只是简单地将两个结果集合并在一起。
  3. 使用场景

    • UNION:当你需要合并多个查询的结果,并且希望结果集中不包含重复行时,应该使用 UNION
    • UNION ALL:如果你确定合并的结果集中不会有重复行,或者即使有重复行也不需要去除,那么使用 UNION ALL 更为高效。
  4. 查询示例

    -- 使用 UNION
    SELECT column1, column2 FROM table1
    UNION
    SELECT column1, column2 FROM table2;-- 使用 UNION ALL
    SELECT column1, column2 FROM table1
    UNION ALL
    SELECT column1, column2 FROM table2;
    
  5. 注意

    • 在 Hive 中,使用 UNIONUNION ALL 时,所有查询选择的列数和类型必须相同。
    • UNION ALL 操作符在 Hive 中可能不会总是比 UNION 更快,因为 Hive 的执行计划可能会因为数据分布和查询优化而有所不同。

总的来说,选择 UNION 还是 UNION ALL 取决于你是否需要去除结果集中的重复行以及对查询性能的要求。如果去重是必需的,使用 UNION;如果性能是关键考虑,并且可以保证没有重复行,使用 UNION ALL

5. 简述Hive Join 的原理与机制 ?

Hive中的Join操作是处理数据时常见的步骤,用于将两个或多个表中满足特定条件的数据进行合并。以下是Hive Join的原理与机制:

原理:
  1. 基于MapReduce

    • Hive的Join操作通常转换为MapReduce作业。在Map阶段,数据被处理并产生键值对;在Reduce阶段,具有相同键的值被聚合。
  2. 数据分发

    • 在MapReduce模型中,Join操作涉及将数据从多个表分发到不同的Map任务中进行处理。
  3. 键匹配

    • Join操作基于匹配的键(Join键)将来自不同表的记录组合在一起。这些键可以是表中的一个或多个列。
  4. Shuffle阶段

    • 在Map任务完成后,Hive需要将数据根据Join键进行洗牌(Shuffle),以确保相同键的数据发送到同一个Reducer。
机制:
  1. Map端Join

    • 对于小表,Hive可以在Map端执行Join,即通过将小表的全部数据加载到内存中,然后与大表的每个记录进行比较来实现Join。
  2. Reduce端Join

    • 当Join操作的数据量较大时,Hive会在Reduce端执行Join。Map任务输出的键值对在Shuffle阶段被传输到Reducer,Reducer负责将具有相同Join键的数据聚合。
  3. Broadcast Join

    • 如果Join操作的一方是小表,Hive可以采用广播Join,将小表的数据广播到每个Map任务中,从而在Map端完成Join。
  4. Skew Join

    • 当Join键的分布极不均匀时(数据倾斜),Hive可以使用Skew Join优化,通过增加Reducer的数量来处理数据倾斜问题。
  5. MapJoin

    • 在某些情况下,Hive可以使用MapJoin,即在Map阶段完成Join操作,不涉及Reduce阶段。
  6. Bucketed Join

    • 如果两个表都进行了Bucketing,并且Join键与Bucket列匹配,Hive可以在Map端执行高效的Bucketed Join。
  7. Partitioned Join

    • 当两个表都进行了Partitioning,并且Join操作涉及的列在分区键中,Hive可以在Map端执行Partitioned Join。
性能优化:
  • 合理设计Join键:选择分布均匀的列作为Join键,避免数据倾斜。
  • 使用合适的Join类型:根据数据大小和特性选择合适的Join类型(如Map端Join、Reduce端Join、Broadcast Join)。
  • 表分区和Bucketing:对表进行分区和Bucketing,可以提高Join性能。
注意事项:
  • 大表和小表:在执行Join操作时,应考虑表的大小,因为小表可以放入内存中,而大表可能需要更多的MapReduce资源。
  • 资源配置:合理配置Map和Reduce的资源,如内存和CPU,以避免性能瓶颈。

Hive的Join操作是数据处理的关键部分,通过理解Join的原理和机制,可以更好地优化查询性能和资源利用率。

6. 简述Hive如何优化join操作 ?

Hive 中的 JOIN 操作是数据处理中最常见的操作之一,也是影响查询性能的关键因素。以下是一些 Hive 优化 JOIN 操作的策略:

  1. 使用合适的 Join 类型

    • Map Join:当一个表足够小,可以放入内存时,可以使用 Map Join 来避免 Shuffle 阶段。
    • Bucketed Map Join:如果两个表都是分桶的,并且 JOIN 键与分桶键匹配,可以使用 Bucketed Map Join 来提高性能。
  2. 优化表的存储格式

    • 使用列式存储格式,如 ORC 或 Parquet,这些格式支持更高效的数据压缩和编码,减少 I/O 开销。
  3. 分桶(Bucketing)

    • 对表进行分桶,特别是 JOIN 操作涉及的表,可以提高 JOIN 的效率,因为 Hive 可以仅将匹配的桶进行 JOIN。
  4. 分区(Partitioning)

    • 使用分区来减少需要扫描的数据量,尤其是在 JOIN 操作中,只扫描匹配分区的数据。
  5. 合理设置 Reducer 数量

    • 通过设置 mapreduce.job.reduces 参数来控制 Reducer 的数量,避免过多的 Reducer 导致资源竞争。
  6. 避免数据倾斜

    • 识别并处理数据倾斜问题,比如通过调整数据分布或使用 Skew Join 来解决。
  7. 使用索引

    • 为经常用于 JOIN 条件的列创建索引,加快 JOIN 速度。
  8. 广播小表

    • 如果一个表远小于另一个表,可以使用广播变量或调整 hive.auto.convert.join 设置来自动广播小表。
  9. 排序优化

    • 对于大型表,使用 CLUSTER BYSORT BY 预先对数据进行排序,可以减少 JOIN 操作中的比较次数。
  10. 选择正确的 JOIN 顺序

    • 根据表的大小和 JOIN 类型,选择最佳的 JOIN 顺序来减少数据的移动和处理。
  11. 使用 MapReduce 参数调优

    • 调整 MapReduce 作业的配置参数,如内存分配,来优化 JOIN 性能。
  12. 物化视图

    • 对于复杂的 JOIN 查询,可以考虑使用物化视图来存储中间结果。
  13. 使用 Tez 或 Spark

    • 如果可能,使用 Tez 或 Spark 作为 Hive 的执行引擎,它们通常比 MapReduce 更高效。
  14. 查询重写

    • 重写查询逻辑,避免不必要的笛卡尔乘积和复杂的 JOIN。
  15. 监控和调优

    • 使用 Hive 的监控和日志工具来分析 JOIN 性能,并根据分析结果进行调优。

通过这些策略,可以显著提高 Hive 中 JOIN 操作的性能,减少查询执行时间和资源消耗。在实际应用中,可能需要根据具体的数据特征和查询需求来选择最合适的优化策略。

7. 简述什么是Hive的map join ?

Hive 的 Map Join 是一种特殊的 Join 操作,它用于优化在 Join 过程中一个表(小表)可以完全加载进内存的情况。Map Join 的主要目的是减少数据在 Map 阶段和 Reduce 阶段之间的传输,从而提高查询性能。

工作原理:

在 Map Join 中,较小的表(称为“广播表”)会被分发到所有 Map 任务中,并加载到每个 Mapper 的内存里。然后,Mapper 可以直接与另一个较大的表(“主表”)进行 Join,而不需要通过网络传输数据。

优点:
  1. 减少网络传输:由于小表数据被广播到所有 Mapper,避免了在 Map 和 Reduce 阶段之间的 Shuffle 步骤。
  2. 提高性能:Map Join 可以显著减少作业执行时间,特别是在处理大规模数据集时。
  3. 减少资源使用:减少了对网络带宽和磁盘 I/O 的需求。
使用场景:

Map Join 最适用于以下情况:

  • 当 Join 操作涉及一个大表和一个小表时,小表可以完全加载到内存中。
  • 小表的大小可以通过 hive.auto.convert.join 配置参数或手动指定来进行 Map Join。
配置:

Hive 允许用户通过以下方式来启用 Map Join:

  • 自动检测:Hive 可以根据 hive.auto.convert.join 配置参数自动决定是否使用 Map Join。
  • 手动指定:用户可以在查询中使用 JOIN ... ON ... 时加上 MAPJOIN 关键字来手动指定使用 Map Join,例如:
    SELECT ...
    FROM big_table
    MAPJOIN small_table
    ON big_table.key = small_table.key;
    
注意事项:
  • 如果小表的大小超过了配置的阈值(由 hive.mapjoin.smalltable.filesize 指定),Hive 将不会使用 Map Join。
  • Map Join 仅在 Join 操作的两个表中至少有一个表是 Hive 表时有效。
  • 在某些情况下,Map Join 可能会导致内存溢出,尤其是在处理非常大的小表或在内存受限的环境中。

总的来说,Map Join 是 Hive 在处理大数据集时提供的一种有效的性能优化手段,通过减少数据传输来加快 Join 操作的速度。

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

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

相关文章

.NET MAUI 了解MVVM

MVVM 模式中有三个核心组件:模型、视图和视图模型。 每个组件的用途不同。 下图显示了这三个组件之间的关系。 视图 视图负责定义用户在屏幕上看到的结构、布局和外观。 理想情况下,每个视图在 XAML 中定义,代码隐藏有限,不包含业…

linux shell实现打印国际象棋棋盘

chess.sh #!/bin/bashfor i in {1..8} dofor j in {1..8}dosum$[ij]if [ $[sum%2] -eq 0 ];thenecho -ne "\033[46m \033[0m"elseecho -ne "\033[47m \033[0m"fidoneecho done验证:

微信小程序学习笔记(4)

文章目录 1、< template >< / template >2、样式导入i、wxmlii、wxss 3、flex布局i、容器属性ii、项目属性 1、< template >< / template > 模板可以重复调用 首先要定义一个模板&#xff1a; <template name"test"><view>{{…

深入了解Git:从数据模型到集成IDEA

Git是现代软件开发中不可或缺的版本控制工具。理解Git的数据模型、暂存区、命令行接口&#xff0c;并将其集成到IDE&#xff08;如IntelliJ IDEA&#xff09;&#xff0c;可以显著提升开发效率。本文将从底层开始&#xff0c;逐步深入Git的各个方面&#xff0c;并介绍如何将其集…

AbstractMap和SimpleEntry

一、AbstractMap 位置&#xff1a;在java.util包 二、SimpleEntry 1、概述 继承了Map中的内部接口Entry<K,V> SimpleEntry<K,V>不仅继承了Map.Entry<K,V>&#xff0c;还继承了序列化的接口 2、构造方法 方法说明SimpleEntry(K key,V value)通过键值对初…

RabbitMQ-工作模式(Publish模式Routing模式)

文章目录 发布/订阅&#xff08;Publish/Subscribe&#xff09;交换机临时队列绑定总体代码示例 路由&#xff08;Routing&#xff09;绑定直连交换机多重绑定发送日志订阅总体代码示例 更多相关内容可查看 发布/订阅&#xff08;Publish/Subscribe&#xff09; 构建一个简单的…

(delphi11最新学习资料) Object Pascal 学习笔记---第14章泛型第3节(接口引用 vs 泛型接口约束)

14.3.4 接口引用 vs 泛型接口约束 ​ 在上一个例子中&#xff0c;我定义了一个泛型类&#xff0c;可以与实现特定接口的任何对象一起使用。我也可以通过创建基于接口引用的标准&#xff08;非泛型&#xff09;类来获得类似的效果。实际上&#xff0c;我可以定义一个类&#xf…

前端构建工具总结

前端构建工具是前端开发中的重要组成部分&#xff0c;它们能够帮助开发者自动化地处理、优化和打包前端资源&#xff0c;提高开发效率和项目的可维护性。以下是对一些常用前端构建工具的总结&#xff1a; Webpack 功能&#xff1a;Webpack是一个强大的前端构建工具&#xff0c…

[EFI]ASUS Vivobook 16x M1603QA 电脑 Hackintosh 黑苹果efi引导文件

黑果魏叔提供硬件型号驱动情况 主板ASUS Vivobook 16x M1603QA 处理器AMD Ryzen 5 5600H已驱动 内存8GB DDR4 on board 8GB DDR4 SO-DIMM已驱动 硬盘SSD INTEL 512GB 670P M.2 SSDPEKNU512GZX1 PCIe 3.0 x4 NVMe已驱动 显卡AMD Radeon RX Vega 7已驱动 声卡瑞昱 AMD Hi…

vue antdesgin table 动态表头动态数据示例

以下是一个基于 Vue 和 Ant Design Vue 的示例&#xff0c;可以动态生成表格的表头和数据&#xff1a; <template><div><a-button click"addColumn">添加列</a-button><a-table :columns"columns" :dataSource"dataSource…

HC-05蓝牙模块配置连接和使用

文章目录 1. 前期准备 2. 进入AT模式 3. 电脑串口配置 4. 配置过程 5. 主从机蓝牙连接 6. 蓝牙模块HC-05和电脑连接 1. 前期准备 首先需要准备一个USB转TTL连接器&#xff0c;电脑安装一个串口助手&#xff0c;然后按照下面的连接方式将其相连。 VCCVCCGNDGNDRXDTXDTXD…

ICLR24大模型提示(8) | 退一步思考:在大型语言模型中通过抽象引发推理

【摘要】我们提出了一种简单的提示技术&#xff0c;即后退提示法&#xff0c;它使 LLM 能够进行抽象&#xff0c;从包含特定细节的实例中得出高级概念和第一原理。通过使用概念和原理来指导推理&#xff0c;LLM 显著提高了遵循正确推理路径解决问题的能力。我们使用 PaLM-2L、G…

Facebook企业户 | Facebook公共主页经营

Facebook作为社交媒体巨头&#xff0c;拥有庞大的用户基数&#xff0c;因此&#xff0c;有效经营公共主页是获取持续流量、提升客户信任度和粘性、促进产品或服务销售与转化的关键。要优化Facebook主页&#xff0c;关注以下几点&#xff1a; 1、参与度是关键指标&#xff1a;因…

Python YOLOv5 7.0 基于深度学习的口罩检测识别系统

目录 1&#xff0c;演示视频和资源下载 1.1 演示视频 1.2 资源下载 2&#xff0c;数据集 3&#xff0c;代码 3.1 带 PyQt5 UI 的检测程序&#xff0c;基于YOLOv5 7.0 3.1.1 根据训练结果进行检测 3.1.2 自动保存每张图片/每帧的检测结果 3.1.3 筛选查看每张图片/每帧检…

Linux---sudo命令

文章目录 目录 文章目录 一.sudo命令简介 二.sudo 命令的特点 三.sudo 相关文件 四.sudo 命令授权配置 一.sudo命令简介 sudo 命令全称“SuperUser Do”&#xff0c;是Linux系统中的一个命令能够使普通用户以超级用户身份去执行某些命令。 二.sudo 命令的特点 sudo能够授权…

HC05蓝牙模块与笔记本蓝牙连接

文章目录 1. 电脑和蓝牙模块连接 2. 串口软件调试 1. 电脑和蓝牙模块连接 HC05支持SPP协议&#xff0c;使用PC主机自带蓝牙&#xff0c;或者笔记本加蓝牙适配器。与HC05连接后&#xff0c;可在电脑端虚拟出串口&#xff0c;这样上位机软件就可以像操作串口一样与HC05通信。对…

Websocket前端与后端:深度探索与实战应用

Websocket前端与后端&#xff1a;深度探索与实战应用 在现代网络应用中&#xff0c;Websocket以其双向通信和实时交互的特性&#xff0c;逐渐成为前后端通信的优选方案。然而&#xff0c;对于许多开发者而言&#xff0c;Websocket的前后端实现仍然充满了困惑和挑战。本文将从四…

[ROS 系列学习教程] 建模与仿真 - 使用 Arbotix 控制机器人

ROS 系列学习教程(总目录) 本文目录 一、Arbotix 简介二、安装Arbotix三、配置Arbotix控制器四、配置launch启动文件五、数据交互接口六、在rviz中仿真控制机器人6.1 直接发topic控制6.2 使用键盘控制6.3 编写代码控制机器人移动 前面讲了机器人的建模&#xff0c;是静态的&…

二进制中1的个数-java

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、二进制中1的个数 二、算法思路 1.将一个整数转化成二进制形式 2.查询一个数的二进制数中的第k位是多少 3.lowbit(x)操作 三、代码如下 1.代码如下&…

合并两个有序的单链表

25计算机考研&#xff0c;数据结构知识点整理&#xff08;内容借鉴了王道408&#xff0b;数据结构教材&#xff09;&#xff0c;还会不断完善所整理的内容&#xff0c;后续的内容也会不断更新&#xff08;可以关注&#xff09;&#xff0c;若有错误和不足欢迎各位朋友指出! 目…