当前位置: 首页 > news >正文

大数据面试问答-Spark

1. Spark

1.1 Spark定位

"Apache Spark是一个基于内存的分布式计算框架,旨在解决Hadoop MapReduce在迭代计算和实时处理上的性能瓶颈。

1.2 核心架构

Spark架构中有三个关键角色:
Driver:解析代码生成DAG,协调任务调度(TaskScheduler)。
Executor:在Worker节点执行具体Task,通过BlockManager管理数据缓存。
Cluster Manager:支持Standalone/YARN/Kubernetes资源调度。

1.3 基础概念

1.3.1 RDD

RDD本质上是一个逻辑抽象,而非物理存储的实际数据。
RDD 不直接存储数据本身,而是通过四个核心元数据描述如何生成数据:

1.数据来源(数据块指针)
若从HDFS读取:记录文件路径、分块偏移量(如hdfs://data.log, [0-128MB])。
若从父RDD转换而来:记录依赖关系(如父RDD ID + map函数)。

2.依赖关系(Dependencies)
记录父RDD与当前RDD的依赖类型(宽/窄依赖),用于容错恢复和Stage划分。
示例:RDD2 = RDD1.filter(...).map(...) 的依赖链为 Narrow -> Narrow

3.计算函数(Compute Function)
定义从父RDD或外部数据生成当前RDD分区的逻辑(如map(func)中的func)。
惰性执行:函数不会立即执行,直到遇到Action操作触发计算。

4.分区策略(Partitioner)
决定数据在计算过程中的分布方式:
HashPartitioner:按Key哈希值分配(用于groupByKey)。
RangePartitioner:按Key范围分配(用于排序操作)。

1.3.1.1 RDD中的分区

分区的本质
分区(Partition) 是 RDD 的最小计算单元,表示数据在逻辑上的分块。
虽然 RDD 不存储实际数据,但它通过分区描述数据的分布方式(类似“目录”记录“文件”的位置)。

分区的来源
初始 RDD:从外部数据源(如 HDFS、本地文件)加载时,分区规则由数据源决定。
例如:HDFS 文件按 128MB 分块,每个块对应一个 RDD 分区。
转换后的 RDD:由父 RDD 的分区规则和转换算子类型决定。
窄依赖(如 map):子 RDD 分区与父 RDD 一一对应。
宽依赖(如 groupByKey):子 RDD 分区由 Shuffle 重新分配。

维度分区的核心作用
并行计算每个分区由一个 Task 处理,分区数决定并行度(如 100 个分区 → 100 个 Task)
数据本地性调度器优先将 Task 分配到数据所在节点(避免跨节点传输)
容错分区是容错的最小单元,丢失时只需重新计算该分区

1.3.2 宽窄依赖

窄依赖(Narrow Dependency)
父RDD的每个分区最多被一个子RDD分区依赖。(一对一
无需跨节点数据传输(数据局部性优化)。
容错成本低:若子分区数据丢失,只需重新计算对应的父分区。
示例操作:map、filter、union。

宽依赖(Wide Dependency / Shuffle Dependency)
父RDD的每个分区可能被多个子RDD分区依赖。(多对多
必须跨节点传输数据(Shuffle过程)。
容错成本高:若子分区数据丢失,需重新计算所有相关父分区。
示例操作:groupByKey、reduceByKey、join(非相同分区情况)。

维度窄依赖宽依赖
Stage划分允许合并到同一Stage(流水线执行)强制划分Stage边界(需等待Shuffle完成)
数据移动无Shuffle,本地计算优先需跨节点Shuffle,网络IO开销大
Stage划分可合并操作(如map+filter合并执行)需手动调优(如调整分区数或Partitioner)

1.3.3 算子

算子的定义
在 Spark 中,算子(Operator) 是指对 RDD 或 DataFrame 进行操作的函数。所有数据处理逻辑均通过算子组合实现,类似于烹饪中的“步骤”(如切菜、翻炒、调味)。
算子分为两类:
转换算子(Transformations):定义数据处理逻辑,生成新的 RDD(惰性执行,不立即计算)。比如mapfilter

# 转换算子链(无实际计算)
rdd = sc.textFile("data.txt") \.filter(lambda line: "error" in line) \  # 过滤错误日志.map(lambda line: line.split(",")[0])    # 提取第一列

宽窄依赖与算子对照表,只涉及转换算子,行动算子不涉及宽窄依赖

依赖类型转换算子含义及示例触发Shuffle?
窄依赖map(func)对每个元素应用函数,一对一转换。例:rdd.map(x => x*2)
窄依赖filter(func)过滤满足条件的元素。例:rdd.filter(x => x > 10)
窄依赖flatMap(func)一对多转换(输出为多个元素)。例:rdd.flatMap(x => x.split(" "))
窄依赖mapPartitions(func)对每个分区迭代处理(更高效)。例:rdd.mapPartitions(it => it.map(_*2))
窄依赖union(otherRDD)合并两个RDD,保留各自分区。例:rdd1.union(rdd2)
窄依赖glom()将每个分区的元素合并为一个数组。例:rdd.glom() → 得到分区数组的RDD
窄依赖mapValues(func)仅对键值对的Value进行转换(保留原Key的分区)。例:pairRdd.mapValues(_+1)
宽依赖groupByKey()按键分组,相同Key的值合并为迭代器。例:pairRdd.groupByKey()
宽依赖reduceByKey(func)按键聚合(本地预聚合减少Shuffle量)。例:pairRdd.reduceByKey(+)
宽依赖join(otherRDD)按键关联两个RDD(相同Key的值连接)。例:rdd1.join(rdd2)
宽依赖distinct()去重(内部用reduceByKey实现)。例:rdd.distinct()
宽依赖repartition(num)显式调整分区数(触发全量Shuffle)。例:rdd.repartition(100)
宽依赖sortByKey()按键排序(需全局Shuffle)。例:pairRdd.sortByKey()
宽依赖cogroup(otherRDD)对多个RDD按Key联合分组(类似SQL全外连接)。例:rdd1.cogroup(rdd2)
宽依赖intersection(otherRDD)求两个RDD的交集。例:rdd1.intersection(rdd2)
宽依赖subtractByKey(otherRDD)按Key差集(移除与另一RDD匹配的Key)。例:rdd1.subtractByKey(rdd2)

行动算子(Actions):触发实际计算并返回结果或持久化数据(立即执行)。比如collectcount

# 触发计算,返回结果
result = rdd.count()  # 统计过滤后的行数
print(result)
Action 算子功能描述
collect()将所有数据拉取到 Driver 内存
count()统计 RDD 元素总数
take(n)返回前 n 个元素
saveAsTextFile(path)将结果写入 HDFS/Local 文件系统
foreach(func)对每个元素应用函数(无返回值)
reduce(func)全局聚合所有元素(需可交换、可结合的聚合函数)
first()返回第一个元素
countByKey()统计每个 Key 的出现次数

Action 触发计算的全流程

用户编写Driver程序
定义RDD转换链
调用Action操作
DAGScheduler解析DAG
是否存在宽依赖?
划分Stage边界
合并为单个Stage
生成TaskSet并调度
Executor执行Task
结果返回Driver或写入存储
1.3.3.1 reduceByKey 与 groupByKey
算子功能描述输出示例(输入:[(“a”,1), (“a”,2), (“b”,3)])
groupByKey将相同 Key 的所有 Value 合并为一个 迭代器(Iterable)[(“a”, [1, 2]), (“b”, [3])]
reduceByKey对相同 Key 的 Value 按指定函数进行 聚合(如求和、求最大值),直接输出最终结果[(“a”, 3), (“b”, 3)](假设聚合函数为 lambda x,y: x + y)

groupByKey 的执行流程
Shuffle Write:将数据按 Key 分发到不同分区,所有 Value 直接传输。
Shuffle Read:每个节点拉取对应分区的数据,合并为迭代器。
输出:生成 (Key, Iterable[Value]) 形式的键值对。

reduceByKey 的执行流程
本地预聚合(Map-side Combine):
在 Map 任务所在节点,先对相同 Key 的 Value 进行局部聚合(如求和)。
Shuffle Write:仅传输 预聚合后的结果。
Shuffle Read:对预聚合结果进行全局聚合(如二次求和)。
输出:生成 (Key, AggregatedValue) 形式的键值对。

算子优势劣势适用场景
reduceByKeyShuffle 数据量小,内存占用低仅支持聚合操作求和、计数、极值计算
groupByKey保留所有 Value 的完整信息Shuffle 开销大,易引发 OOM需全量 Value 的非聚合操作

groupByKey 的 SQL 对应形式
Spark RDD 代码:

rdd.groupByKey().mapValues(list)  # 输出 (Key, [Value1, Value2, ...])

Spark SQL 代码:

SELECT key, COLLECT_LIST(value) AS values
FROM table
GROUP BY key;

reduceByKey 的 SQL 对应形式
Spark RDD 代码:

rdd.reduceByKey(lambda a, b: a + b)  # 输出 (Key, Sum_Value)

Spark SQL 代码:

SELECT key, SUM(value) AS total
FROM table
GROUP BY key;

1.3.4 DAGScheduler

定义:Spark 内部调度器,将逻辑 DAG 划分为物理执行的 Stage。
核心功能:
Stage 划分:以宽依赖(Shuffle)为边界切分 DAG。
任务调度:生成 TaskSet 提交给 TaskScheduler。
容错处理:重新提交失败的 Stage。

1.3.4.1 DAG(有向无环图)

定义:表示 RDD 转换操作的依赖关系图,无循环依赖。
作用:
优化执行顺序(如合并窄依赖操作)。
支持容错(通过血统重新计算丢失分区)。

textFile RDD
map RDD
filter RDD
reduceByKey RDD
Action

DAG 的节点是 RDD,边是 RDD 之间的 依赖关系(窄依赖或宽依赖)。
DAG 的构建逻辑:
每个转换操作生成新的 RDD,并记录其父 RDD。
Action 触发时,Spark 根据 RDD 的血统(Lineage)构建 DAG。

rdd1 = sc.textFile("data.txt")          # 初始 RDD
rdd2 = rdd1.map(lambda x: x.upper())    # 窄依赖
rdd3 = rdd2.filter(lambda x: "ERROR" in x)  # 窄依赖
rdd4 = rdd3.groupByKey()               # 宽依赖
rdd4.collect()                         # 触发 DAG 构建

对应的 DAG:

map
filter
groupByKey
rdd1
rdd2
rdd3
rdd4
1.3.4.2 Stage

定义:DAG 的物理执行单元,分为 ShuffleMapStage(Shuffle 数据准备)和 ResultStage(最终计算)。
划分规则:
窄依赖操作合并为同一 Stage。
宽依赖触发 Stage 分割。

Shuffle
map, filter
reduceByKey

划分 Stage 的核心作用
优化执行效率:
窄依赖操作合并为流水线(Pipeline):同一 Stage 内的连续窄依赖操作(如 map→filter)合并为单个 Task 执行,避免中间数据落盘。
宽依赖强制划分 Stage:确保 Shuffle 前所有数据准备完成,明确任务执行边界。
容错管理:
Stage 是容错的最小单元,失败时只需重算该 Stage 及其后续 Stage。

Stage 划分规则:
以宽依赖为边界,将 DAG 切分为多个 Stage。
窄依赖操作合并到同一 Stage。

Shuffle
Stage 1: map + filter
Stage 2: groupByKey

map filter 是窄依赖,合并为 Stage 1。
groupByKey 是宽依赖,触发 Stage 2。

Shuffle 发生的环节
在 Spark 中,Shuffle 是连接不同 Stage 的桥梁,通常发生在以下操作中:
宽依赖操作:如 groupByKeyreduceByKey等需要跨分区重新分配数据的操作。
当触发 Shuffle 时,Spark 会将当前 Stage 的 Task 划分为 Shuffle Write(数据写出)和 Shuffle Read(数据读取)两个阶段,分属不同 Stage 的上下游 Task 3。

1.3.5 Driver 程序

Driver 是用户编写的应用主逻辑:
用户必须自行编写 Driver 程序(如 Python/Scala/Java 代码),在其中定义数据处理流程(创建 RDD/DataFrame,调用转换和行动操作)。

# 用户编写的 Driver 程序(必须存在)
from pyspark import SparkContext
sc = SparkContext("local", "WordCount")
rdd = sc.textFile("hdfs://input.txt")
result = rdd.flatMap(lambda line: line.split(" ")) \.countByValue()  # Action 操作
print(result)

1.4 Spark计算流程

Executor
Task1
Task2
Task3
Executor 内存计算
Stage 1: 窄依赖任务 Pipeline 执行
Executor 内存计算
Executor 内存计算
Stage 2: 下游任务执行
Driver 程序
创建初始 RDD
定义转换操作链 map/filter/join
触发 Action 操作 collect/save
DAGScheduler 将 DAG 划分为 Stage
Shuffle 阶段: 宽依赖数据重组
结果返回 Driver 或写入存储

Spark与MapReduce对比

对比维度SparkMapReduce优劣分析
执行模型基于内存的DAG模型,多阶段流水线执行严格的Map-Shuffle-Reduce两阶段模型Spark减少中间数据落盘,MR依赖磁盘保证稳定性
容错机制基于RDD血缘关系(Lineage)重建丢失分区通过Task重试和HDFS副本机制Spark重建成本低,MR依赖数据冗余保障可靠性
延迟性能亚秒级到秒级(内存计算)分钟级(多轮磁盘IO)Spark适合交互式查询/实时处理,MR仅适合离线批处理
适用场景迭代计算(ML)、实时流处理、交互式分析超大规模离线批处理(TB/PB级)Spark覆盖场景更广,MR在单一超大Job场景仍有优势

2. SparkSQL

Spark SQL 是 Apache Spark 的模块之一,核心功能是 处理结构化数据,其设计目标是:统一 SQL 与代码:允许开发者混合使用 SQL 和 DataFrame API(Python/Scala/Java),打破 SQL 与编程语言的界限。
高性能查询:通过 Catalyst 优化器生成逻辑/物理执行计划,结合 Tungsten 引擎的二进制内存管理,提升执行效率。
多数据源支持:可对接 Hive、JSON、Parquet、JDBC 等数据源,甚至自定义数据源。

Spark Sql转换成程序执行的过程

RDD与DAG
物理执行
Catalyst优化器
转换为RDD操作链
基于宽依赖划分Stage
生成DAG
DAGScheduler调度Stage
Task分发到Executor
生成物理计划
Tungsten引擎代码生成
生成未解析逻辑计划
SQL 解析
元数据绑定
解析后的逻辑计划
逻辑优化
优化后的逻辑计划
输入 SQL 或 DataFrame 操作
集群执行并返回结果

3. Spark Streaming

3.1 核心定位

Spark Streaming 是 Spark 生态中用于实时流数据处理的模块,采用 微批处理(Micro-Batch) 模式,将流数据切分为小批次(如1秒~数分钟),以类似批处理的方式实现近实时(Near-Real-Time)计算。其核心优势是与 Spark 生态的无缝集成,复用批处理代码和资源调度能力。

3.2 离散化流DStream与结构化流Structured Streaming

数据抽象:DStream
离散化流(Discretized Stream, DStream):是 Spark Streaming 的基础抽象,表示一个连续的数据流,内部由一系列 RDD 组成,每个 RDD 对应一个时间窗口内的数据。

处理流程:
输入源:从 Kafka、Flume、Kinesis、TCP Socket 等读取数据。
批处理窗口:按用户定义的批次间隔(如5秒)将数据划分为微批次。
转换操作:对每个批次的 RDD 应用 map、reduce、join 等操作。
输出结果:将处理后的数据写入 HDFS、数据库或实时看板。

执行模型
Driver 节点:负责调度任务,生成 DStream 的 DAG 执行计划。
Worker 节点:执行具体的任务(Task),处理每个微批的 RDD。
容错机制:基于 RDD 的血缘(Lineage)机制,自动恢复丢失的分区数据。

Structured Streaming(结构化流)
核心抽象:将流数据视为无界的 DataFrame/Dataset,支持与静态数据相同的 SQL 操作。

处理模式:
微批处理(默认):类似传统 Spark Streaming。
连续处理(实验性):实现毫秒级延迟(Spark 2.3+)。

关键特性:
端到端 Exactly-Once 语义:通过与 Kafka 等源的协同,保证数据不丢不重。
事件时间与水位线:支持基于事件时间的窗口聚合,处理乱序数据。
状态管理:内置状态存储(StateStore),支持 mapGroupsWithState 等复杂状态操作。

相关文章:

大数据面试问答-Spark

1. Spark 1.1 Spark定位 "Apache Spark是一个基于内存的分布式计算框架,旨在解决Hadoop MapReduce在迭代计算和实时处理上的性能瓶颈。 1.2 核心架构 Spark架构中有三个关键角色: Driver:解析代码生成DAG,协调任务调度&a…...

UE5 设置父物体和解除父子关系(移除子物体)

文章目录 设置父物体解除父子关系 Acotor类似于untiy的objecttransfrom,可以用来进行父子操作 设置父物体 Actor attach to Actor节点 解除父子关系 Detach From Actor...

Git - 怎么把当前修改追加到前面某个commit中

怎么把当前修改追加到前面某个commit中 git log commit b7cb11b53388d410d07e3b3084c67274cee4cdad (HEAD -> hotfix/task-108344, origin_dbackup/hotfix/task-108344) Author: aaa <aaammm.com> Date: Thu Mar 27 15:08:32 2025 0800Fix #108344: add bbbcommit …...

【HFP】蓝牙 HFP 协议状态通知机制研究

目录 一、状态通知体系架构 1.1 核心功能矩阵 1.2 三层控制体系 1.3 角色分工 1.4 协议栈层级 二、核心AT命令解析 2.1 ATCMER&#xff1a;指示器状态报告控制 2.2 ATBIA&#xff1a;指示器激活控制 2.3 CIEV&#xff1a;未请求结果码 三、关键功能实现机制 3.1 注册…...

unity100天学习计划

以下是一个为期100天的Unity学习大纲,涵盖从零基础到独立开发完整游戏的全流程,结合理论、实践和项目实战,每天学习2-3小时: 第一阶段:基础奠基(Day 1-20) 目标:掌握Unity引擎基础与C#编程 Day 1-5:引擎入门 安装Unity Hub和Unity Editor(LTS版本)熟悉Unity界面:S…...

STM32电机库 电机控制特性

ST MC FW库提供FOC和六步法两种电机控制方式。这使得它能够驱动永磁同步电机 (PMSM) 和无刷直流电机 (BLDC)。FOC 更适合 PMSM,而六步法更适合 BLDC 电机。该固件可以驱动内嵌式PMSM 和标贴式PMSM。 ST Motor Control 固件库提供以下功能: FOC SVPWM 生成: 可配置的 PW…...

MySQL数据库 - 事务

事务 此笔记参考黑马教程&#xff0c;仅学习使用&#xff0c;如有侵权&#xff0c;联系必删 文章目录 事务1. 事务简介2. 事务操作2.1 事务操作 - 方式一2.2 方式二代码实现 3. 事务四大特性&#xff08;ACID&#xff09;4. 并发事务问题5. 事务隔离级别代码实现 总结 1. 事务…...

火山引擎旗下的产品

用户问的是火山引擎旗下的产品&#xff0c;我需要详细列出各个类别下的产品。首先&#xff0c;我得确认火山引擎有哪些主要业务领域&#xff0c;比如云计算、大数据、人工智能这些。然后&#xff0c;每个领域下具体有哪些产品呢&#xff1f;比如云计算方面可能有云服务器、容器…...

用 Python 从零构建异步回显服务器

简介 让我们从 0 开始&#xff0c;搭建一个异步服务输出服务器。 套接字 套接字&#xff08;socket&#xff09;&#xff0c;是不同计算机中实现通信的一种方式&#xff0c;你可以理解成一个接口&#xff0c;它会在客户端和服务端建立连接&#xff0c;一台发送数据&#xff…...

【3D文件】可爱小鹿3D建模,3D打印文件

【3D文件】可爱小鹿3D建模&#xff0c;3D打印文件 免费下载&#xff0c;下载链接&#xff1a; 3D文件可爱小鹿3D建模&#xff0c;可爱小鹿建模仿真&#xff0c;小鹿仿真设计&#xff0c;3D打印文件&#xff0c;免费下载资源-CSDN文库 资源下载&#xff1a; 3D文件可爱小鹿3D…...

RabbitMQ 优先级队列详解

本文是博主在记录使用 RabbitMQ 在执行业务时遇到的问题和解决办法&#xff0c;因此查阅了相关资料并做了以下记载&#xff0c;记录了优先级队列的机制和使用要点。 本文为长文&#xff0c;详细介绍了相关的知识&#xff0c;可作为学习资料看。 文章目录 一、优先级队列介绍1、…...

串口通信简述

一.串口的特点 1.全双工异步通信 全双工指通信双方可以同时进行数据的发送和接收操作。 异步通信是指通信双方不使用共同的时钟信号来同步数据传输&#xff0c;而是通过特殊的信号或约定来标识数据的开始和结束 2.数据字长度可编程&#xff08;8 位或 9 位&#xff09; 不…...

【2025年五一数学建模竞赛A题】完整思路和代码

1.问题背景与重述 2.解题思路分析 2.1 问题一的分析 问题一假设无人机以平行于水平面的方式飞行并投放物资&#xff0c;可以将物资的运动 类比成平抛运动&#xff0c;由于物资的重量较大&#xff0c;因此不能简单的看成质点&#xff0c;还要考虑物资 的重量。 2.1.1本题要求给…...

为了四季度的盈利,李斌的换人还在继续

李斌对蔚来和乐道人事调整还在继续。 4月10日&#xff0c;蔚来发布内部邮件宣布大量人事变动。 蔚来方面&#xff1a; 原用户关系&#xff08;UR&#xff09;负责人沈泓因个人原因将离开公司。 任命孙明担任用户关系&#xff08;UR&#xff09;负责人&#xff0c;向高级副总…...

Pytest 自动化测试框架详解

Pytest和Unittest测试框架的区别&#xff1f; 如何区分这两者&#xff0c;很简单unittest作为官方的测试框架&#xff0c;在测试方面更加基础&#xff0c;并且可以再次基础上进行二次开发&#xff0c;同时在用法上格式会更加复杂&#xff1b;而pytest框架作为第三方框架&#x…...

sqli-labs靶场 less 9

文章目录 sqli-labs靶场less 9 时间盲注 sqli-labs靶场 每道题都从以下模板讲解&#xff0c;并且每个步骤都有图片&#xff0c;清晰明了&#xff0c;便于复盘。 sql注入的基本步骤 注入点注入类型 字符型&#xff1a;判断闭合方式 &#xff08;‘、"、’、“”&#xf…...

奇趣点播系统测试报告

1.项目简介 本项目旨在搭建一个视频共享点播系统&#xff0c;服务器支持用户通过前端浏览器访问服务器&#xff0c;获取展示与观看和操作的界面&#xff0c;最终实现视频的上传以及观看和删改查等基础管理功能。让用户拥有良好的观看体验和分享视频的快捷方式&#xff0c;此外…...

空地机器人在复杂动态环境下,如何高效自主导航?

随着空陆两栖机器人(AGR)在应急救援和城市巡检等领域的应用范围不断扩大&#xff0c;其在复杂动态环境中实现自主导航的挑战也日益凸显。对此香港大学王俊铭基于阿木实验室P600无人机平台自主搭建了一整套空地两栖机器人&#xff0c;使用Prometheus开源框架完成算法的仿真验证与…...

01 - QEMU 初始化概览 - Init()

目录 1.初始化 - qemu_init() 1.1.基本设备 1.2.日志 1.3.模块信息 1.4.子系统 1.5.选项解析 - 阶段一 1.6.选项解析 - 阶段二 1.7.选项配置 1.8.Trace 1.9.主线程 1.10.CPU 时钟 1.11.其他设置 1.12.创建虚拟机 1.13.启动虚拟机 2.主线程 - qemu_main() 2.1.处…...

Vue3 使用ref

<button click"changeMsg">change</button> <div>{{ message }}</div>//接受一个内部值并返回一个响应式且可变的 ref 对象。ref 对象仅有一个 .value property&#xff0c;指向该内部值。 const message ref(hello world) const mum 1 co…...

React中 点击事件写法 的注意(this、箭头函数)

目录 ‌1、错误写法‌&#xff1a;onClick{this.acceptAlls()} ‌2、正确写法‌&#xff1a;onClick{this.acceptAlls}&#xff08;不带括号&#xff09; 总结 方案1&#xff1a;构造函数绑定 方案2&#xff1a;箭头函数包装方法&#xff08;更简洁&#xff09; 方案3&am…...

DeepSeek AI大模型:中国智能时代的“争气机“-AI生成

DeepSeek AI大模型&#xff1a;中国智能时代的"争气机" 当全球科技巨头在万亿参数竞赛中你追我赶时&#xff0c;一家中国公司悄然改写了游戏规则。DeepSeek AI最新发布的"探月"大模型不仅以中英双语能力打破技术壁垒&#xff0c;更用"动态脑区"设…...

Java老鼠迷宫(递归)---案例来自韩顺平老师讲Java

题目&#xff1a; 粉色圈圈是启动&#xff0c;红色方框是阻挡&#xff0c;蓝色五角星是出口&#xff0c;走到出口&#xff0c;老鼠winner 代码&#xff1a; public class test6 {public static void main(String[] args){//创建二维数组int[][] map new int[8][7];// 最外围都…...

Python大数据视频教程

概述 最新整理的Python大数据视频教程已出&#xff0c;需要学习的小伙伴抓紧了。 课程亮点&#xff1a; ❶ 编程基石&#xff1a;从Python基础到高阶函数式编程&#xff0c;用代码驯服数据 ❷ 数据魔法&#xff1a;SQL进阶ETL实战&#xff0c;Pandas玩转百万级数据分析 ❸ 分…...

Java工厂模式解析:灵活对象创建的实践指南

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 一、模式定义与分类 工厂模式&#xff08;Factory Pattern&#xff09;是创建型设计模式的核心成员之一&#xff0c;主要解决对象创建过程中的灵活性问题。根…...

PDF转换格式失败?原因及解决方法全解析

在日常工作中&#xff0c;我们经常会遇到将PDF转换为Word、Excel、PPT等格式的需求。有时候以为一键转换就能搞掂&#xff0c;没想到却转换失败。到底问题出在哪&#xff1f;别急&#xff0c;我们可以看看是否以下几个问题引起的&#xff0c;找到解决问题的关键&#xff01; 原…...

《轨道力学讲义》——第五讲:摄动理论基础

第五讲&#xff1a;摄动理论基础 引言 在实际的航天任务中&#xff0c;我们很少能够使用理想的二体问题来精确描述航天器的运动。地球的非球形性、大气阻力、太阳辐射压以及第三天体引力等各种因素都会对航天器轨道产生偏离理想轨道的影响。这些额外的力被称为"摄动力&q…...

【NLP】23.小结:选择60题

Question 1: What does the fixed lookup table in traditional NLP represent? A. A table of one‐hot vectors B. A table of pre‐trained dense word embeddings C. A dictionary of word definitions D. A table of n-gram counts Answer (中文): 答案选 B。传统NLP中“…...

C++核心机制-this 指针传递与内存布局分析

示例代码 #include<iostream> using namespace std;class A { public:int a;A() {printf("A:A()的this指针&#xff1a;%p!\n", this);}void funcA() {printf("A:funcA()的this指针&#xff1a;%p!\n", this);} };class B { public:int b;B() {prin…...

python asyncio 的基本使用

1、引言 asyncio 是 Python 标准库中的一个库&#xff0c;提供了对异步 I/O 、事件循环、协程和任务等异步编程模型的支持。 asyncio 文档 2、进程、线程、协程 线程 线程是操作系统调度的基本单位&#xff0c;同一个进程中的多个线程共享相同的内存空间。线程之间的切换由操…...

大模型中提到的分词器是什么

分词器在大模型中的核心解析 1. 分词器的定义与基本作用 分词器(Tokenizer)是自然语言处理(NLP)中的核心组件,负责将原始文本拆分为模型可处理的离散单元(称为Token)。其核心功能包括: 文本离散化:将连续字符序列转化为数字序列,作为模型的输入。语义单元提取:通过…...

Android中使用BuildConfig.DEBUG无法找到的解决方法

BuildConfig是Android构建工具自动生成的一个类&#xff0c;通常位于应用的包名下&#xff0c;包含一些构建相关的常量&#xff0c;比如DEBUG标志、应用ID、版本信息等。 遇到的问题可能有几种情况。首先&#xff0c;可能项目没有正确构建&#xff0c;导致BuildConfig没有被生…...

Python(14)Python内置函数完全指南:从基础使用到高阶技巧

目录 背景介绍一、内置函数全景分类1. 数据类型转换&#xff08;15个&#xff09;2. 数学运算&#xff08;12个&#xff09;3. 迭代处理&#xff08;9个&#xff09;4. 对象操作&#xff08;11个&#xff09;5. 输入输出&#xff08;4个&#xff09; 二、高阶函数应用场景1. en…...

echo命令,tail命令,反引号,重定向符

echo命令&#xff1a; 作用&#xff1a;在命令行中输出指定的内容&#xff0c;相当于print语句 语法&#xff1a;echo 指定的内容&#xff08;当内容包含空格和特殊字符的时候&#xff0c;语句很复杂的时候&#xff0c;最好用双引号括起来&#xff09; tail命令&#xff1a;…...

集成学习介绍

集成学习&#xff08;Ensemble Learning&#xff09;是一种机器学习范式&#xff0c;它通过组合多个模型的预测来提高整体模型的性能。单一模型可能在某些方面表现不佳或具有较高的偏差或方差&#xff0c;而集成方法能够通过结合多个模型的优点来克服这些问题&#xff0c;从而提…...

【CUDA】ubuntu环境下安装cuda

写在前面 软硬件匹配问题 &#xff1a;如老显卡安装ubuntu24, 会发现适合显卡的cuda不适合ubuntu24, 适合ubuntu24的cuda不适合显卡&#xff0c;因此安装ubuntu系统前&#xff0c;务必查明 &#xff1a;当前设备的显卡支持的cuda&#xff0c;支持哪些ubuntu版本 下面的三个问题…...

进程间通信-信号量

消息队列&#xff08;Message Queue&#xff09;是一种在不同组件或进程间进行异步通信的机制&#xff0c;它允许应用程序以松耦合的方式交换消息。消息队列就像一个缓冲区&#xff0c;发送者将消息放入队列&#xff0c;接收者从队列中取出消息进行处理。以下为你详细介绍消息队…...

Ubuntu 22.04安装MySQL : Qwen2.5 模型对话数据收集与微调教程

在Ubuntu 22.04安装MySQL的教程请点击下方链接进行参考: 点击这里获取MySQL安装教程 今天将为大家带来如何微调Qwen2.5模型并连接数据库进行对话的教程。快跟着小编一起试试吧~ ​ 1 大模型 Qwen2.5 微调步骤 1.1 从 github 仓库 克隆项目 克隆存储库:#拉取代码 git clo…...

L1-8 新年烟花

单位 杭州百腾教育科技有限公司 新年来临&#xff0c;许多地方会举行烟花庆典庆祝。小 C 也想参加庆典&#xff0c;但不幸的是跟他一个想法的人实在太多&#xff0c;活动场地全是人人人人人人人人人…… 活动场地可视作一个 NM 的矩阵&#xff0c;其中有一些格子是空的&#…...

OpenCV中的轮廓检测方法详解

文章目录 引言一、什么是轮廓&#xff1f;二、OpenCV中的轮廓检测基础1. 基本步骤2. findContours函数详解 三、轮廓检索模式四、轮廓近似方法五、轮廓特征分析1. 轮廓面积2. 轮廓周长/弧长3. 轮廓近似&#xff08;多边形拟合&#xff09;4. 凸包5. 边界矩形6. 最小闭合圆7. 拟…...

AIP-231 批量方法:Get

编号231原文链接AIP-231: Batch methods: Get状态批准创建日期2019-06-18更新日期2019-06-18 一些API允许用户获取一组特定资源在一个时间点&#xff08;例如使用读事务&#xff09;的状态。批量获取方法提供了这个功能。 指南 API 可以 按照以下模式支持批量获取&#xff1…...

人工智能基础-matplotlib基础

绘制图形 import numpy as np x np.linspace(0, 10, 100) y np.sin(x) import matplotlib as mpl import matplotlib.pyplot as plt plt.plot(x, y) plt.show()绘制多条曲线 siny y.copy() cosy np.cos(x) plt.plot(x, siny) plt.plot(x, cosy) plt.show()设置线条颜色 …...

qt运行时报段错误

标题&#xff1a; qt运行时报段错误&#xff0c;查看stack&#xff0c;显示&#xff1a; 原因 报错的cpp文件新包含一个头文件&#xff0c;这个头文件里的pack指令有问题&#xff0c;如下: 解决办法 修改为正确的pack指令。...

【Qt】Qt Creator开发基础:项目创建、界面解析与核心概念入门

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;QT 欢迎大家点赞收藏评论&#x1f60a; 目录 Qt Creator 新建项⽬认识 Qt Creator 界⾯项⽬⽂件解析Qt 编程注意事项认识对象模型&#xff08;对象树&#xff09;Qt 窗⼝坐标体系 Qt Creator 新…...

CAP应用

1.工作原理 CAP&#xff08;Consistent&#xff0c;Available&#xff0c;Partition - tolerant&#xff09;框架在.NET 中的工作原理。CAP 是一个用于.NET 的分布式事务解决方案&#xff0c;主要用于实现微服务架构中的数据一致性&#xff08;实现分布式事务的最终一致性&…...

典型操作系统内核架构

在典型操作系统架构&#xff08;如下图所示&#xff09;中&#xff0c;内核负责以安全、公平的方式为多个应用程序管理和共享硬件资源。 内核通过一组 API&#xff08;即系统调用&#xff09;向应用程序提供服务。这些 API 不同于常规库函数&#xff0c;因其是用户模式到内核模…...

AWS Redshift的使用场景及一些常见问题

Redshift 不是关系型数据库, 提供了Amazon Redshift Serverless 和 Amazon Redshift 都是构建于 Redshift 数仓引擎之上的&#xff0c;但它们适用的场景不同。Redshift和Dynamodb都可以存储数据, 分别怎么选择? 这里记录一些常见的问题和场景。 1. 如何选择用Amazon Redshift…...

**searchProperties 是什么,python中**是什么:解包字典的操作符

searchProperties 是什么,python中是什么:解包字典的操作符 在 Python 中,** 是用于解包字典的操作符,**searchProperties 是一个可变关键字参数。它允许函数接受任意数量的关键字参数,这些参数会被收集到一个字典中,字典的键是参数名,值是参数对应的值。 在 ButtonCon…...

.NET MCP 文档

MCP 概述 MCP&#xff08;Model Context Protocol&#xff09;是由 Anthropic 推出的一种开放协议&#xff0c;类似 AI 的 USB-C 扩展坞&#xff0c;用于在大模型和数据源之间建立安全的通信&#xff08;授权&#xff09;&#xff0c;让 AI 应用能够安全地访问和操作本地或远程…...

07软件测试需求分析案例-修改用户信息

修改用户信息是后台管理菜单的一个功能模块&#xff0c;只有admin才有修改权限。包括查询用户名进行显示用户相关信息&#xff0c;并且修改用户相关信息的功能。 1.1 通读文档 通读需求规格说明书是提取信息&#xff0c;提出问题&#xff0c;输出具有逻辑、规则、流程的业务…...