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

Spark常见面试题-部分待更新

1. 简述hadoop 和 spark 的不同点(为什么spark更快)
Hadoop是一个分布式管理、存储、计算的生态系统,包括HDFS(分布式文件系统)、MapReduce(计算引擎)和YARN(资源调度器)。Hadoop的作业称为Job,每个Job包含多个Map Task和Reduce Task,这些Task在各自的进程中运行,当Task结束时,进程也会随之结束‌
Spark是一个基于内存计算的框架,使用RDD(弹性分布式数据集)进行数据处理。Spark的任务称为Application,一个Application包含多个Job,每个Job可以进一步划分为多个Stage,每个Stage包含多个Task。Spark的Task可以在内存中执行,避免了频繁的磁盘读写操作,从而提高了处理速度‌
Hadoop使用MapReduce模型进行数据处理,数据需要在磁盘上进行读写操作,这导致了较高的I/O开销,从而影响了处理速度‌
Spark采用内存计算技术,数据存储在内存中,减少了磁盘I/O操作,显著提高了处理速度。Spark的处理速度通常是Hadoop的10到100倍‌

2. 谈谈你对RDD的理解
弹性分布式数据集(Resilient Distributed Dataset, RDD)是Apache Spark中的核心概念,它是一个容错的、并行的数据结构,可以让开发者以弹性的方式进行数据计算。

RDD具有以下特性:
分布式:RDD的数据可以分布在集群中的不同节点上。
弹性:RDD在执行过程中可以根据需要重新分布数据集。
不可变:RDD是只读的,要改变RDD,只能创建新的RDD。
缓存:可以把RDD缓存起来,在计算中再次使用。
容错:RDD的每个阶段都会进行校验和,如果在计算过程中有数据丢失,可以通过父RDD重建。
3. 简述spark的shuffle过程
Shuffle 过程本质上都是将 Map 端获得的数据使用分区器进行划分,并将数据发送给对应的 Reducer 的过程。

前一个stage的ShuffleMapTask进行shuffle write,把数据存储在blockManager上面,并且把数据元信息上报到dirver的mapOutTarck组件中,下一个stage根据数据位置源信息,进行shuffle read,拉取上一个stage的输出数据
1、基于哈希的shuffle操作:基于哈希的shuffle操作的原理在于将Mapper(stage)生成的中间数据,按照Reduce的数量(Reduce任务的数量取决于当前stage的RDD的分区数量)进行切分。切分成多个bucket,每个bucket对应一个文件。当reduce任务运行时,会根据任务的编号和所依赖的mapper编号远程或者从本地取得相应的bucket作为reduce任务的输入数据进行处理()

2、基于排序的shuffle操作: 基于哈希的shuffle操作会产生很多文件,这对文件系统来说是一个非诚大的负担,而且在总数据量不大而文件特别多的情况下,随机读写会严重降低I/O性能。大量文件的带来的问题还包括缓存。缓存所占用的内存过多是一笔很大的开销。每个shuffle map task只会产生一个索引文件,以及这个文件的索引,其中索引中 记载着,这个文件的那些数据是被下游的那些reduce task(stage)任务使用()

4. spark的作业运行流程是怎么样的
Spark应用程序以进程集合为单位在分布式集群上运行,通过driver程序的main方法创建的SparkContext对象与集群交互。

1、Spark通过SparkContext向Cluster manager(资源管理器)申请所需执行的资源(cpu、内存等)
2、Cluster manager分配应用程序执行需要的资源,在Worker节点上创建Executor
3、SparkContext 将程序代码(jar包或者python文件)和Task任务发送给Executor执行,并收集结果给Driver。

5 spark driver的作用,以及client模式和cluster模式的区别
drive 主要负责管理整个集群的作业任务调度;executor是一个jvm进程,专门用于计算的节点
client模式下,driver运行在客户端;cluster模式下,driver运行在yarn集群。
6. 你知道Application、Job、Stage、Task他们之间的关系吗
1、一个应用程序对应多个job,一个job会有多个stage阶段,一个stage会有多个task
2、一个应用程序中有多少个行动算子就会创建多少个job作业;一个job作业中一个宽依赖会划分一个stage阶段;同一个stage阶段中最后一个算子有多少个分区这个stage就有多少个task,因为窄依赖每个分区任务是并行执行的,没有必要每个算子的一个分区启动一个task任务。如图所示阶段2最后一个map算子是对应5个分区,reducebykey是3个分区,总共是8个task任务。
3、当一个rdd的数据需要打乱重组然后分配到下一个rdd时就产生shuffle阶段,宽依赖就是以shuffle进行划分的。

7. Spark常见的算子介绍一下(10个以上)
Transformation算子
Transformation算子用于转换RDD,生成新的RDD,但不会立即执行计算。它们通常用于中间数据处理。

‌map‌:对RDD中的每个元素应用一个函数,返回一个新的RDD。
‌flatMap‌:将函数应用于RDD中的每个元素,并将结果扁平化成一个新的RDD。与map的区别在于flatMap可以处理集合类型的元素。
‌filter‌:过滤RDD,保留满足条件的元素,返回一个新的RDD。
‌union‌:合并两个或多个RDDs。
‌groupBy‌:根据给定的函数将元素分组,返回一个键值对RDD。
‌sortBy‌:根据给定的函数对RDD进行排序,返回一个新的有序RDD。
‌repartition‌:重新分区RDD,可以增加或减少分区数。
‌coalesce‌:减少RDD的分区数,主要用于优化性能。
Action算子
Action算子用于触发计算,并返回一个值或执行某些操作,但不返回新的RDD。

‌count‌:统计RDD中的元素个数。
‌collect‌:将RDD中的元素收集到Driver,并返回一个数组。
‌first‌:返回RDD中的第一个元素。
‌take‌:返回RDD中的前n个元素。
‌reduce‌:对RDD中的元素进行聚合操作。
‌saveAsTextFile‌:将RDD保存为文本文件。
‌foreach‌:对RDD中的每个元素应用一个函数,通常用于调试或数据导出。
8. 简述map和mapPartitions的区别
map算子‌:对RDD中的每个元素进行操作,每次传入一个元素到定义的函数中,返回处理后的元素。map算子的主要目的是将数据源中的数据进行转换和改变,不会减少或增多数据‌
‌mapPartitions算子‌:对RDD中的每个分区进行操作,每次传入一个分区的迭代器到定义的函数中,返回处理后的迭代器。mapPartitions算子可以增加或减少数据,因为它处理的是一批数据而不是单个元素‌
9. 你知道重分区的相关算子吗
repartition(numPartitions: Int): RDD[T]:这个算子会导致一个大的shuffle操作,它会根据一个hashpartitioner的方式来重新分区数据。
coalesce(numPartitions: Int, shuffle: Boolean = false): RDD[T]:这个算子用来减少RDD的分区数量,如果shuffle设置为false,那么只有当新的分区数大于原来的分区数的时候,这个操作才会减少计算资源。如果shuffle设置为true,那么这个操作会进行shuffle,不论新的分区数是否大于原来的分区数。
10. spark目前支持哪几种分区策略
‌HashPartitioner‌:采用哈希的方式对<Key,Value>键值对数据进行分区。其数据分区规则为partitionId = Key.hashCode % numPartitions,其中partitionId代表该Key对应的键值对数据应当分配到的Partition标识,Key.hashCode表示该Key的哈希值,numPartitions表示包含的Partition个数‌
‌RangePartitioner‌:将一定范围的数据映射到一个分区中。这种分区策略适用于需要对数据进行范围查询的场景‌
‌CustomPartitioner‌:用户可以根据具体需求自定义分区器,以满足特定的分区要求‌

11.简述groupByKey和reduceByKey的区别
‌reduceByKey‌:这是一个转换操作,它对具有相同键的元素执行一个聚合函数(reduce函数)。具体而言,它按键将元素进行分组,然后对每个组内的值进行合并操作,通常包括对相同键的所有值进行某种累积、求和或其他聚合操作。例如,rdd.reduceByKey(lambda x,y: x + y)会将相同的键的值累加起来‌
‌groupByKey‌:这也是一个转换操作,但它根据键对RDD中的元素进行分组,但不执行任何聚合操作。它只是将具有相同键的元素放在一个组中,形成一个包含键和其对应值的迭代器。例如,rdd.groupByKey()会将相同的键的值放在一起,但不进行任何聚合操作‌

  • 简述reduceByKey、foldByKey、aggregateByKey、combineByKey 的区别

13. 宽依赖和窄依赖之间的区别
窄依赖(Narrow Dependency)
窄依赖指的是父RDD的一个分区最多只被子RDD的一个分区所使用。这种依赖关系的特点是:
‌高效性‌:由于每个父RDD的分区只需传输给一个子RDD的分区,不存在数据混洗(shuffle)的过程,因此执行效率较高。
‌应用场景‌:常见的操作包括map、filter、union等,这些操作通常不会引起数据的重新组织。‌
宽依赖(Wide Dependency)
宽依赖指的是父RDD的一个分区被多个子RDD的分区所使用。这种依赖关系的特点是:
‌性能损失‌:由于需要重新组织和传输数据,宽依赖会导致性能损失,因为它需要进行全局的数据重新排序和传输,这在处理大规模数据集时尤为昂贵。
‌应用场景‌:常见的操作包括groupByKey、reduceByKey、sortByKey等,这些操作通常会引起数据的shuffle。‌

14. spark为什么需要RDD持久化,持久化的方式有哪几种,他们之间的区别是什么
Spark中的RDD(弹性分布式数据集)是懒加载的,只有在遇到行动算子(如collect、count等)时才会从头开始计算。如果同一个RDD被多次使用,每次都需要重新计算,这会显著增加计算开销。为了避免这种情况,可以将RDD持久化到内存或磁盘中,以便在后续操作中直接使用持久化的数据,从而避免重复计算,提高计算效率‌

  • cache‌

这是persist的一种简化方式,作用是将RDD缓存到内存中,以便后续快速访问。cache操作是懒执行的,即执行action算子时才会触发‌

  • ‌persist‌

提供了不同的存储级别,包括仅磁盘、仅内存、内存或磁盘、内存或磁盘+副本数、序列化后存入内存或磁盘等。用户可以根据不同的应用场景进行选择‌

  • ‌checkpoint‌

将数据永久保存,用于减少长血缘关系带来的容错成本。checkpoint不仅保存了数据,还保存了计算该数据的算子操作。当需要恢复数据时,可以通过这些操作重新计算,而不仅仅是依赖于原始数据。checkpoint在作业完成后仍然保留,可以用于后续的计算任务‌
在这里插入图片描述
15. 简述spark的容错机制

  • stage输出失败的时候,上层调度器DAGScheduler会进行重试
  • 计算过程中,某个task失败,底层调度器会进行重试。
  • 计算过程中,如果部分计算结果丢失,可以根据窄依赖和宽依赖的血统重新恢复计算。
  • 如果血统非常长,可以对中间结果做检查点,写入磁盘中,如果后续计算结果丢失,那么就从检查点的RDD开始重新计算

16. 除了RDD,你还了解spark的其他数据结构吗
算子以外的代码都是在Driver端执行,算子里面的代码都是在Executor端执行。
了解累加器和广播变量两种数据结构。
累加器就是分布式共享只写变量,简单说一下它的原理:累加器用来把Executor端变量信息聚合到Driver端。在Driver程序中定义的变量,在Executor端的每个Task都会得到这个变量的一份新的副本,每个task更新这些副本的值后,传回Driver端进行合并。
广播变量就是分布式共享只读变量,简单说一下它的原理:用来高效分发较大的对象。向所有工作节点发送一个较大的只读值,以供一个或多个spark操作使用。

17. spark调优

18. 谈一谈RDD,DataFrame,DataSet的区别
RDD 提供了低级别的控制和灵活性,但性能通常较低。DataFrame 提供了结构化的数据处理和优化,但缺乏类型安全。Dataset 结合了两者的优点,提供了类型安全和高级操作,但在 PySpark 中,主要使用 DataFrame API。

  • RDD

不可变性:RDD 一旦创建,其内容不能更改。所有的转换操作都会生成一个新的 RDD。
分布式计算:RDD 以分布式方式存储在集群的多个节点上,并支持并行计算。
容错性:RDD 通过追踪其生成过程的血统信息(lineage)实现容错。如果某个分区的数据丢失,可以通过重新计算恢复数据。
操作:RDD 提供了两种操作:转换(如 map、filter、flatMap)和行动(如 collect、count、reduce)。

  • DataFrame
    结构化数据:DataFrame 有明确的列和数据类型,类似于关系型数据库中的表。
    优化:通过 Catalyst 优化器进行查询优化,并支持 Tungsten 执行引擎以提高性能。
    操作:支持 SQL 查询、DataFrame 操作(如 select、filter、join、groupBy)。
  • Dataset
    类型安全:在编译时检查数据类型错误,提供类型安全的操作。
    高层次 API:提供类似于 DataFrame 的高级操作,同时保留类型安全的特性。
    操作:支持类型安全的操作(如 map、flatMap、filter),并且可以通过 DataFrame API 进行操作。

在这里插入图片描述

19. Hive on Spark与SparkSql的区别
‌Spark SQL‌:主要用于结构化数据处理和对Spark数据执行类SQL的查询。它通过SQL解析引擎解析SQL语句,最终转换为Spark RDD的方式去执行。Spark SQL的目的是为懂得数据库管理系统(DBMS)但不熟悉Spark的用户准备的‌

‌Hive on Spark‌:Hive作为数据仓库,负责一部分的解析和优化计算,而Spark作为Hive的底层执行引擎之一,负责一部分的计算。Hive on Spark结合了Hive的SQL处理能力和Spark的计算性能,提供了高效的数据处理能力‌

20. sparksql的三种join实现

  • Broadcast Join
    将大小有限的维度表的全部数据分发到每个节点上,供事实表使用。executor存储维度表的全部数据,一定程度上牺牲了空间,换取shuffle操作大量的耗时,这在SparkSQL中称作 Broadcast Join。
  • Shuffle Hash Join
    当表比较大时,采用 broadcast join 会对driver端和executor端造成较大的压力,可以通过分区的形式将大批量的数据划分成n份较小的数据集进行并行计算利用key相同必然分区相同的这个原理,Spark SQL将较大表的 join 分而治之,先将表划分成 n 个分区,再对两个表中相对应分区的数据分别进行 Hash Join,这样即在一定程度上减少了driver广播一侧表的压力,也减少了executor端取整张被广播表的内存消耗。
  • Sort Merge Join (大表对大表)

上面介绍的两种实现对于一定大小的表表适用,但当两个表都非常大时,显然无论用哪种都会对计算内存造成很大压力。这是因为join 时两者采取的都是 hash join,
首先将两张表按照 join keys 进行了重新shuffle,保证 join keys值相同的记录会被分在相应的分区。分区后对每个分区内的数据进行排序,排序后再对相应的分区内的记录进行连接。因为两个序列都是有序的,从头遍历,碰到 key 相同的就输出,如果不同,左边小就继续取左边,反之取右边。可以看出,无论分区有多大,Sort Merge Join 都不用把某一侧的数据全部加载到内存中,而是即用即丢,从而大大提升了大数量下 sql join 的稳定性。

  • 简单介绍下sparkstreaming

  • 你知道sparkstreaming的背压机制吗

  • SparkStreaming有哪几种方式消费Kafka中的数据,它们之间的区别是什么

相关文章:

Spark常见面试题-部分待更新

1. 简述hadoop 和 spark 的不同点&#xff08;为什么spark更快&#xff09; Hadoop是一个分布式管理、存储、计算的生态系统&#xff0c;包括HDFS&#xff08;分布式文件系统&#xff09;、MapReduce&#xff08;计算引擎&#xff09;和YARN&#xff08;资源调度器&#xff09;…...

Android BitmapShader实现狙击瞄具十字交叉线准星,Kotlin

Android BitmapShader实现狙击瞄具十字交叉线准星&#xff0c;Kotlin <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.…...

linux通过web向mac远程传输字符串,mac收到后在终端中直接打印。

要通过Web从Linux向Mac远程传输字符串&#xff0c;并在Mac的终端中直接打印&#xff0c;可以使用以下方法。这里假设Linux作为服务器&#xff0c;Mac作为客户端。 方法 1&#xff1a;使用Python的HTTP服务器 在Linux上启动一个简单的HTTP服务器&#xff0c;Mac通过curl获取字符…...

海云安开发者安全智能助手D10荣膺 “ AI标杆产品 ” 称号,首席科学家齐大伟博士入选2024年度 “ 十大杰出青年 ”

2024年12月27日&#xff0c;粤港澳大湾区AI领袖峰会在深圳成功举办&#xff0c;大会表彰了在人工智能技术创新、应用实践和产业发展等方面取得优异成绩的企业和个人&#xff0c;深圳海云安网络安全技术有限公司开发者安全智能助手D10荣膺“AI标杆产品”称号。同时&#xff0c;公…...

Spring Boot + Apache POI 实现 Excel 导出:BOM物料清单生成器(支持中文文件名、样式美化、数据合并)

目录 引言 Apache POI操作Excel的实用技巧 1.合并单元格操作 2.设置单元格样式 1. 创建样式对象 2. 设置边框 3. 设置底色 4. 设置对齐方式 5. 设置字体样式 6.设置自动换行 7. 应用样式到单元格 3. 定位和操作指定单元格 4.实现标签-值的形式 5.列宽设置 1. 设…...

ReactiveSwift 简单使用

记录 ReactiveSwift 简单使用 导入 ReactiveSwift 库创建 TestViewModel 文件 enum JKTypeType: Int {case cloudcase devicecase weater }// 通过监听属性变化 class TestViewModel: NSObject {lazy var recordType: Property<JKTypeType> {return Property(recordTy…...

CSS 的基础知识及应用

前言 CSS&#xff08;层叠样式表&#xff09;是网页设计和开发中不可或缺的一部分。它用于描述网页的视觉表现&#xff0c;使页面不仅实现功能&#xff0c;还能提供吸引人的用户体验。本文将介绍 CSS 的基本概念、语法、选择器及其在提升网页美观性方面的重要性。 什么是 CSS&…...

【Web】2025西湖论剑·中国杭州网络安全安全技能大赛题解(全)

目录 Rank-l Rank-U sqli or not Rank-l username存在报错回显&#xff0c;发现可以打SSTI 本地起一个服务&#xff0c;折半查找fuzz黑名单&#xff0c;不断扔给fenjing去迭代改payload from flask import Flask, request, render_template_stringapp Flask(__name__)app…...

能源物联网数据采集设备 串口服务器功能参数介绍

摘要 ​随着物联网技术的快速发展&#xff0c;各种传统设备的联网需求愈发迫切。串口服务器作为一种桥接传统串口设备与现代网络的关键设备&#xff0c;在工业控制、智能电网、交通运输等域发挥了重要作用。本文以APort100串口服务器为例&#xff0c;探讨串口服务器在现代物联…...

在线json格式化工具

在线json格式化工具,包括中文和英文版本,无需登录&#xff0c;无需费用&#xff0c;用完就走。 官网地址&#xff1a; https://json.openai2025.com 效果如下&#xff1a;...

OSPF的LSA的学习研究

OSPF常见1、2、3、4、5、7类LSA的研究 1、拓扑如图&#xff0c;按照地址表配置&#xff0c;激活OSPF划分相关区域并宣告相关网段 2、1类LSA&#xff0c;每台运行了OSPF的路由器都会产生&#xff0c;描述了路由器的直连接口状况和cost 可以看到R1产生了一条router lsa&#xff0…...

1166 Summit (25)

A summit (峰会) is a meeting of heads of state or government. Arranging the rest areas for the summit is not a simple job. The ideal arrangement of one area is to invite those heads so that everyone is a direct friend of everyone. Now given a set of tenta…...

AUTOSAR从入门到精通-【自动驾驶】高精地图(四)

目录 前言 现状概述 算法原理 高精地图的构成 A.基础地图层 B.几何地图层 C.语义地图层 D.道路连接层 E.先验地图层 F.实时地图数据 高精地图的构建及维护 移动建图系统 高精地图维护 A.地图变换检测 B.地图数据更新 3. 众包建图 3.1 众包建图的优劣势 3.2 众包起源:M…...

MySQL8数据库全攻略:版本特性、下载、安装、卸载与管理工具详解

大家好&#xff0c;我是袁庭新。 MySQL作为企业项目中的主流数据库&#xff0c;其5.x和8.x版本尤为常用。本文将详细介绍MySQL 8.x的特性、下载、安装、服务管理、卸载及管理工具&#xff0c;旨在帮助用户更好地掌握和使用MySQL数据库。 1.MySQL版本及下载 企业项目中使用的…...

网络安全---CMS指纹信息实战

CMS简介 CMS&#xff08;Content Management System&#xff09;指的是内容管理系统&#xff0c;如WordPress、Joomla等。CMS系统非常常见&#xff0c;几乎所有大型网站都使用CMS来管理其网站的内容。由于常见CMS的漏洞较多&#xff0c;因此黑客将不断尝试利用这些漏洞攻击CMS…...

基于C#实现对象序列化的3种方案

大家好&#xff01;我是付工。 在上位机开发过程中&#xff0c;我们可能经常要实现一个数据对象的持久化&#xff0c;将对象保存到具体的文件中&#xff0c;今天给大家介绍常用的3种方案&#xff0c;大家根据实际情况&#xff0c;选择适合的方案。 一、准备工作 在介绍这4种…...

蓝桥杯真题 - 公因数匹配 - 题解

题目链接&#xff1a;https://www.lanqiao.cn/problems/3525/learning/ 个人评价&#xff1a;难度 2 星&#xff08;满星&#xff1a;5&#xff09; 前置知识&#xff1a;调和级数 整体思路 题目描述不严谨&#xff0c;没说在无解的情况下要输出什么&#xff08;比如 n n n …...

使用 Java 实现基于 DFA 算法的敏感词检测

使用 Java 实现基于 DFA 算法的敏感词检测 1. 引言 敏感词检测在内容审核、信息过滤等领域有着广泛的应用。本文将介绍如何使用 DFA&#xff08;Deterministic Finite Automaton&#xff0c;确定有限状态自动机&#xff09; 算法&#xff0c;在 Java 中实现高效的敏感词检测。…...

Jenkins-Pipeline简述

一. 什么是Jenkins pipeline&#xff1a; pipeline在jenkins中是一套插件&#xff0c;主要功能在于&#xff0c;将原本独立运行于单个或者多个节点的任务连接起来&#xff0c;实现单个任务难以完成的复杂发布流程。Pipeline的实现方式是一套Groovy DSL&#xff0c;任何发布流程…...

Linux操作命令之云计算基础命令

一、图形化界面/文本模式 ctrlaltF2-6 图形切换到文本 ctrlalt 鼠标跳出虚拟机 ctrlaltF1 文本切换到图形 shift ctrl "" 扩大 ctrl "-" 缩小 shift ctrl "n" 新终端 shift ctrl "t" 新标签 alt 1,…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...