1. 初识spark
背景:
作为一名开发人员,用内存处理数据是每天都在做的事情。内存处理数据最大的优势就是方便,快捷,可以很快得到结果,但是内存总是有瓶颈的,不管你运行代码的机器有多大的内存,总是有更大规模的数据需要处理,而且随着单个机器内存扩容,硬件成本会指数级上升。在当今互联网行业,数据快速膨胀的时代,分布式计算来处理数据是大势所趋。本文通过介绍的是大数据领域优秀框架spark ,打开分布式实时计算的大门
1. spark是什么
Spark是一种基于内存的快速、通用、可扩展的大数据分析引擎。以下是对Spark的详细介绍:
1.1 起源与发展
Spark最初于2009年诞生于加州大学伯克利分校AMPLab(AMP:Algorithms,Machines,People),作为伯克利大学的研究性项目。
2010年,Spark正式开源。
2013年6月,Spark成为Apache孵化项目。
2014年2月,Spark成为Apache顶级项目。
1.2 核心特点
- 高速性:Spark基于内存进行数据处理,大大减少了磁盘读写的开销,因此比传统的MapReduce作业快上几个数量级。同时,Spark实现了高效的DAG(有向无环图)执行引擎,可以高效地处理数据流。
- 易用性:Spark提供了丰富的API,支持多种编程语言(如Scala、Java、Python、R等),并且提供了丰富的高级功能(如SQL查询、机器学习和图计算),使得用户可以轻松地开发复杂的分布式应用程序。此外,Spark还支持交互式的Python和Scala的Shell,方便用户在这些Shell中使用Spark集群来验证解决问题的方法。
- 弹性:Spark提供了弹性的分布式数据集(Resilient Distributed Dataset,RDD)抽象,可以在内存中缓存数据,具有强容错性。当节点故障时,Spark可以自动恢复数据,保证作业的稳定执行。
- 通用性:Spark不仅支持批处理作业(如MapReduce),还支持交互式查询、流处理和机器学习等多种应用场景。这些不同类型的处理都可以在同一个应用中无缝使用,从而降低了开发和维护的人力成本以及部署平台的物力成本。
1.3 内置模块与组件
Spark包含了多个内置模块和组件,以满足不同场景下的数据处理需求:
- Spark Core:实现了Spark的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。同时,Spark Core中还包含了对RDD的API定义。
- Spark SQL:用于操作结构化数据的程序包。通过Spark SQL,用户可以使用SQL或者Apache Hive版本的SQL方言(HQL)来查询数据。Spark SQL支持多种数据源,如Hive表、Parquet以及JSON等。
- Spark Streaming:用于对实时数据进行流式计算的组件。它提供了用来操作数据流的API,并且与Spark Core中的RDD API高度对应。Spark Streaming使得用户可以快速开发流应用程序,并且具有强大的容错能力和集成性。
- Spark MLlib:提供常见的机器学习(ML)功能的程序库。包括分类、回归、聚类、协同过滤等算法,还提供了模型评估、数据导入等额外的支持功能。
- GraphX:用于图计算的组件。GraphX提供了丰富的图处理算法和工具,使得用户可以高效地处理和分析图数据。
1.4 应用场景与生态系统
Spark的应用场景非常广泛,包括但不限于推荐系统、交互式实时查询等。同时,Spark已经形成了一个丰富的生态圈,能够与其他多种框架和系统进行融合和扩展。这些框架和系统包括数据科学和机器学习框架(如scikit-learn、pandas、TensorFlow、PyTorch等)、SQL分析和BI工具(如Superset、Power BI、Looker等)、存储和基础设施(如Elasticsearch、MongoDB、Kafka等)。
综上所述,Spark作为一种基于内存的快速、通用、可扩展的大数据分析引擎,在大数据处理领域具有广泛的应用前景和重要的学术价值。
2. spark下载与入门
在前期,我会先下载spark并在本地单机运行spark,后期会搭建spark集群并将任务交给集群处理。关于版本问题,本文选择3.4.4 来演示
2.1 下载
- 访问spark官网 https://spark.apache.org/downloads.html
- 选择对应版本之后点击download下载,下载的是压缩包
- 本地解压压缩包
- 安装scala
2.2 spark中python 和 scala的shell
Spank 带有交互式的 shell,可以作即时数据分析。如果你使用过类似R、Python、Seala 所提供的 shell,或操作系统的 shell(例如 Bash 或者 Windows 中的命令提示符),你也会对Spark shell 感到很熟悉。
然而和其他 shell 工具不一样的是,在其他she 工具中你只能使用单机的硬盘和内存来操作数据,而Sparkshell 可用来与分布式存储在许多机器的内存或者硬盘上的数据进行交互,并且处理过程的分发由Spark自动控制完成。
由于Spark 能够在工作节点上把数据读取到内存中,所以许多分布式计算都可以在几秒钟之内完成,哪怕是那种在十几个节点上处理TB级别的数据的计算。这就使得一般需要在shell 中完成的那些交互式的即时探索性分析变得非常适合Spark。Spark提供Python 以及Scala的增强版shell,支持与集群的连接。
2.2.1 Scala Shell (spark-shell)
Scala 是 Spark 的原生语言,因此 Spark Shell 默认是基于 Scala 的。spark-shell
提供了一个预配置的环境,其中包含 Spark 上下文(SparkContext)和 SQL 上下文(SparkSession),使得用户可以立即开始使用 Spark。
2.2.1.1 启动 Scala Shell
在命令行中输入以下命令来启动 Scala Shell:
bin/spark-shell
启动后,你会看到一个类似 REPL(Read-Eval-Print Loop)的界面,可以开始输入 Scala 代码。
2.2.1.2 示例
val sc = spark.sparkContext
val data = sc.textFile("hdfs:///path/to/input.txt")
val words = data.flatMap(line => line.split(" "))
val wordCounts = words.map(word => (word, 1)).reduceByKey(_ + _)
wordCounts.collect().foreach(println)
2.2.2 Python Shell (pyspark)
PySpark 是 Spark 的 Python API,允许用户使用 Python 编写 Spark 应用程序。pyspark
shell 提供了一个与 Scala shell 类似的环境,但适用于 Python 开发者。
2.2.2.1 启动 Python Shell
在命令行中输入以下命令来启动 PySpark Shell:
bin/pyspark
启动后,你会看到一个 Python REPL 界面,并且 Spark 上下文(sc)和 SQL 上下文(spark)已经预先配置好了。
2.2.2.2 示例
from pyspark import SparkContext, SparkConfsc = SparkContext(appName="PythonWordCount")
data = sc.textFile("hdfs:///path/to/input.txt")
words = data.flatMap(lambda line: line.split(" "))
wordCounts = words.map(lambda word: (word, 1)).reduceByKey(lambda a, b: a + b)
wordCounts.collect()
2.2.3 注意事项
- 环境配置:确保你已经正确安装了 Spark,并且环境变量(如
SPARK_HOME
)已经配置好。 - 依赖管理:在 PySpark 中,你可能需要管理 Python 依赖,这通常通过
requirements.txt
文件或虚拟环境来实现。 - 性能差异:虽然 PySpark 提供了方便的开发体验,但在性能上,Scala 通常会比 Python 更快,因为 Scala 是静态类型语言,并且与 JVM 更紧密集成。
通过使用这些 shell,可以快速原型化和测试 Spark 应用程序,而无需编写完整的脚本或应用程序。
2.3 spark核心概念简介
2.3.1 RDD(弹性分布式数据集)
RDD是Spark的核心数据结构,代表一个不可变、可分区、可并行操作的元素集合。RDD具有如下特性:
- 弹性:RDD既可以在内存中存储并计算(优先使用内存),如果内存不够,可以溢出到磁盘上。
- 数据集:RDD是一个普通的Scala的不可变的集合。
- 分布式:一个完整的RDD数据集被拆分成多个部分,在不同的机器里面存储。被拆分成的部分称之为该RDD的分区(Partition),类似于HDFS中的一个文件被拆分成多个Block块存储。
RDD支持两种操作:
- 转换操作(Transformations):如map、filter、reduceByKey等,这些操作是惰性(Lazy)的,即从一个RDD转换生成另一个RDD的操作不会立即执行,而是等到有Actions操作时才会真正启动计算过程进行计算。
- 行动操作(Actions):如collect、count、saveAsTextFile等,这些操作会触发Spark启动计算并返回结果或把RDD数据写到存储系统中。
2.3.2 SparkContext
SparkContext是Spark的入口点,用于连接Spark集群,创建RDD并进行操作。它是Spark应用程序的上下文环境,控制应用的生命周期。
2.3.3 Cluster Manager(集群管理器)
Cluster Manager负责管理Spark集群的资源(如CPU核心、内存等)。在不同的部署模式下,Cluster Manager可以是Spark自带的(Standalone模式),也可以是YARN、Mesos等外部集群管理器。
2.3.4 Worker Node(工作节点)
Worker Node是执行作业任务的工作节点,是Spark计算能力的实际提供者。在Standalone模式中,Worker Node负责控制计算节点,启动Executor。
2.3.5 Driver
Driver是每个Spark应用程序的核心,负责启动并控制整个应用程序。它创建SparkContext,与Cluster Manager通信,管理资源申请、任务分配和监控。
2.3.6 Executor
Executor是在Worker Node上运行的进程,可以派生出多个线程来并行处理任务。每个Spark应用程序都拥有独立的一组Executors。
2.3.7 DAGScheduler和TaskScheduler
- DAGScheduler:负责将Spark作业分解成一到多个Stage,每个Stage根据RDD的Partition个数决定Task的个数,然后生成相应的Task Set放到TaskScheduler中。DAGScheduler可以看作是Spark的大脑,负责作业的划分和调度。
- TaskScheduler:负责将Task分发给Executor执行。
2.3.8 Stage和Task
- Stage:一个Spark作业一般包含一到多个Stage。Stage是根据RDD之间的依赖关系(宽依赖或窄依赖)来划分的。
- Task:一个Stage包含一到多个Task,通过多个Task实现并行运行的功能。Task的个数由RDD的Partition分区决定。
2.3.9 Actions触发计算
在Spark中,只有Actions操作才会触发计算。Actions操作会返回一个结果或把RDD数据写到存储系统中。常见的Actions操作包括collect、count、saveAsTextFile等。
综上所述,Spark的核心概念包括RDD、SparkContext、Cluster Manager、Worker Node、Driver、Executor、DAGScheduler、TaskScheduler、Stage、Task以及Actions触发计算等。这些概念共同构成了Spark的分布式计算框架,使得Spark能够高效地处理大规模数据。
2.3.10 简单交互
2.3.10.1 Spark作业执行交互图
Client|v
Driver (SparkContext)|+--- DAGScheduler (划分Stage)|+--- TaskScheduler (分发Task)|v
Cluster Manager (资源分配)|+--- Worker Node (控制计算节点)|vExecutor (执行任务)
2.3.10.2 交互流程说明
-
Client提交作业:
- 用户通过Client(如spark-submit命令)提交Spark作业。
-
Driver启动并管理作业:
- Driver是Spark作业的核心,负责启动并管理整个作业的执行。
- Driver创建SparkContext,它是Spark应用程序的上下文环境,用于连接Spark集群、创建RDD并进行操作。
- SparkContext内部包含DAGScheduler和TaskScheduler两个重要组件。
-
DAGScheduler划分Stage:
- DAGScheduler负责将Spark作业分解成一到多个Stage。
- 每个Stage根据RDD的Partition个数决定Task的个数。
- DAGScheduler生成相应的Task Set并放到TaskScheduler中等待调度。
-
TaskScheduler分发Task:
- TaskScheduler负责将Task分发给Executor执行。
- TaskScheduler与Cluster Manager通信,请求资源并分配Task。
-
Cluster Manager分配资源:
- Cluster Manager负责管理Spark集群的资源。
- 在不同的部署模式下,Cluster Manager可以是Spark自带的(Standalone模式),也可以是YARN、Mesos等外部集群管理器。
- Cluster Manager根据TaskScheduler的请求,为Spark作业分配资源(如CPU核心、内存等)。
-
Worker Node控制计算节点:
- Worker Node是执行作业任务的工作节点。
- 在Standalone模式中,Worker Node负责控制计算节点,启动Executor。
-
Executor执行任务:
- Executor是在Worker Node上运行的进程,可以派生出多个线程来并行处理任务。
- Executor接收TaskScheduler分发的Task,并执行相应的计算逻辑。
- Executor将计算结果返回给Driver(对于需要返回结果的Actions操作)。
2.3.10.3 数据流动
- 数据在RDD之间流动,通过转换操作(Transformations)生成新的RDD。
- 行动操作(Actions)触发计算,并将结果返回给用户或写入存储系统。
以上,如有错误,请不吝指正!
相关文章:
1. 初识spark
背景: 作为一名开发人员,用内存处理数据是每天都在做的事情。内存处理数据最大的优势就是方便,快捷,可以很快得到结果,但是内存总是有瓶颈的,不管你运行代码的机器有多大的内存,总是有更大规模…...
专业学习|一文了解并实操自适应大邻域搜索(讲解代码)
一、自适应大邻域搜索概念介绍 自适应大邻域搜索(Adaptive Large Neighborhood Search,ALNS)是一种用于解决组合优化问题的元启发式算法。以下是关于它的详细介绍: -自适应大领域搜索的核心思想是:破坏解、修复解、动…...
Redis --- 使用zset处理排行榜和计数问题
在处理计数业务时,我们一般会使用一个数据结构,既是集合又可以保证唯一性,所以我们会选择Redis中的set集合: 业务逻辑: 用户点击点赞按钮,需要再set集合内判断是否已点赞,未点赞则需要将点赞数1…...
排序算法——快速排序
代码仓库: 1037827920/AlgorithmZoo 快速排序 算法步骤 选择基准元素,从数组中选择一个元素作为基准,通常选择方式有: 第一个元素最后一个元素中间元素随机选择 分区操作,将数组元素根据基准分为两部分,…...
有用的sql链接
『SQL』常考面试题(2——窗口函数)_sql的窗口函数面试题-CSDN博客 史上最强sql计算用户次日留存率详解(通用版)及相关常用函数 -2020.06.10 - 知乎 (zhihu.com) 1280. 学生们参加各科测试的次数 - 力扣(LeetCode&…...
手写MVVM框架-构建虚拟dom树
MVVM的核心之一就是虚拟dom树,我们这一章节就先构建一个虚拟dom树 首先我们需要创建一个VNode的类 // 当前类的位置是src/vnode/index.js export default class VNode{constructor(tag, // 标签名称(英文大写)ele, // 对应真实节点children,…...
C++单例模式
单例模式是一种设计模式,它保证一个类只有一个对象。因此单例模式要私有化构造函数,禁用拷贝构造以及赋值重载。同时还要提供一个静态成员函数获取单例对象。 单例模式有两种实现方式:饿汉模式和懒汉模式 饿汉模式:创建静态单例…...
SQL入门到精通 理论+实战 -- 在 MySQL 中学习SQL语言
目录 一、环境准备 1、MySQL 8.0 和 Navicat 下载安装 2、准备好的表和数据文件: 二、SQL语言简述 1、数据库基础概念 2、什么是SQL 3、SQL的分类 4、SQL通用语法 三、DDL(Data Definition Language):数据定义语言 1、操…...
RabbitMQ 可靠性投递
文章目录 前言一、RabbitMQ自带机制1、生产者发送消息注意1.1、事务(Transactions)1.2、发布确认(Publisher Confirms)1.2.1、同步1.2.2、异步 2、消息路由机制2.1、使用备份交换机(Alternate Exchanges)2.…...
Java常见的技术场景面试题
一、单点登录这块怎么实现的? 单点登录概述 单点登录:Single Sign On(简称SSO),只需要登录一次,就可以访问所有信任的应用系统 在以前的时候,一般我们就单系统,所有的功能都在同一个系统上。…...
使用 Postman 进行 API 测试:从入门到精通
使用 Postman 进行 API 测试:从入门到精通 使用 Postman 进行 API 测试:从入门到精通一、什么是 API 测试?二、Postman 简介三、环境搭建四、API 测试流程1. 收集 API 文档2. 发送基本请求示例:发送 GET 请求示例代码(…...
用python实现进度条
前言 在Python中,可以使用多种方式实现进度条。以下是几种常见的进度条格式的实现方法: 1. 使用 tqdm 库 tqdm 是一个非常流行的库,可以轻松地在循环中显示进度条。 from tqdm import tqdm import time# 示例:简单的进度条 fo…...
android 自定义通话录音
在 Android 开发中,实现通话录音功能通常涉及到对系统通话的拦截和录音。由于通话录音涉及到用户隐私和安全性,Android 系统对此有严格的限制和要求。在 Android 10(API 级别 29)及以上版本中,直接访问通话录音功能变得…...
WebSocket——环境搭建与多环境配置
一、前言:为什么要使用多环境配置? 在开发过程中,我们通常会遇到多个不同的环境,比如开发环境(Dev)、测试环境(Test)、生产环境(Prod)等。每个环境的配置和需…...
【自动化办公】批量图片PDF自定义指定多个区域识别重命名,批量识别铁路货物运单区域内容改名,基于WPF和飞桨ocr深度学习模型的解决方案
项目背景介绍 铁路货运企业需要对物流单进行长期存档,以便后续查询和审计。不同的物流单可能包含不同的关键信息,通过自定义指定多个区域进行识别重命名,可以使存档的图片文件名具有统一的规范和明确的含义。比如,将包含货物运单…...
在线教程丨YOLO系列10年更新11个版本,最新模型在目标检测多项任务中达SOTA
YOLO (You Only Look Once) 是计算机视觉领域中最具影响力的实时目标检测算法之一,以其高精度与高效性深受业界青睐,广泛应用于自动驾驶、安防监控、医疗影像等领域。 该模型最早于 2015 年由华盛顿大学研究生 Joseph Redmon 发布,开创了将目…...
c++可变参数详解
目录 引言 库的基本功能 va_start 宏: va_arg 宏 va_end 宏 va_copy 宏 使用 处理可变参数代码 C11可变参数模板 基本概念 sizeof... 运算符 包扩展 引言 在C编程中,处理不确定数量的参数是一个常见的需求。为了支持这种需求,C标准库提供了 &…...
Ubuntu安装VMware17
安装 下载本文的附件,之后执行 sudo chmod x VMware-Workstation-Full-17.5.2-23775571.x86_64.bundle sudo ./VMware-Workstation-Full-17.5.2-23775571.x86_64.bundle安装注意事项: 跳过账户登录的办法:断开网络 可能出现的问题以及解决…...
在Debian 12上安装VNC服务器
不知道什么标题 可以看到这个文章是通过豆包从国外网站copy的,先这样写着好了,具体的我有时间再补充,基本内容都在这里了。 在Debian 12上安装VNC服务器 简介 VNC(Virtual Network Computing,虚拟网络计算…...
设计模式Python版 外观模式
文章目录 前言一、外观模式二、外观模式示例三、抽象外观类四、抽象外观类示例 前言 GOF设计模式分三大类: 创建型模式:关注对象的创建过程,包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式&am…...
Selenium 浏览器操作与使用技巧——详细解析(Java版)
目录 一、浏览器及窗口操作 二、键盘与鼠标操作 三、勾选复选框 四、多层框架/窗口定位 五、操作下拉框 六、上传文件操作 七、处理弹窗与 alert 八、处理动态元素 九、使用 Selenium 进行网站监控 前言 Selenium 是一款非常强大的 Web 自动化测试工具,能够…...
论文解读:《基于TinyML毫米波雷达的座舱检测、定位与分类》
摘要 本文提出了一种实时的座舱检测、定位和分类解决方案,采用毫米波(mmWave)雷达系统芯片(SoC),CapterahCAL60S344-AE,支持微型机器学习(TinyML)。提出了波束距离-多普勒…...
e2studio开发RA2E1(5)----GPIO输入检测
e2studio开发RA2E1.5--GPIO输入检测 概述视频教学样品申请硬件准备参考程序源码下载新建工程工程模板保存工程路径芯片配置工程模板选择时钟设置GPIO口配置按键口配置按键口&Led配置R_IOPORT_PortRead()函数原型R_IOPORT_PinRead()函数原型代码 概述 本篇文章主要介绍如何…...
数据结构:队列篇
图均为手绘,代码基于vs2022实现 系列文章目录 数据结构初探: 顺序表 数据结构初探:链表之单链表篇 数据结构初探:链表之双向链表篇 链表特别篇:链表经典算法问题 数据结构:栈篇 文章目录 系列文章目录前言一.队列的概念和结构1.1概念一、动态内存管理优势二、操作效率与安全性…...
idea中git的简单使用
提交,推送直接合并 合到哪个分支就到先切到哪个分支...
Java中的object类
1.Object类是什么? 🟪Object 是 Java 类库中的一个特殊类,也是所有类的父类(超类),位于类继承层次结构的顶端。也就是说,Java 允许把任何类型的对象赋给 Object 类型的变量。 🟦Java里面除了Object类,所有的…...
html2canvas绘制页面并生成图像 下载
1. 简介 html2canvas是一个开源的JavaScript库,它允许开发者在用户的浏览器中直接将HTML元素渲染为画布(Canvas),并生成图像。以下是对html2canvas的详细介绍: 2. 主要功能 html2canvas的主要功能是将网页中的HTML元…...
Certum OV企业型通配符SSL
随着网络攻击手段的不断演变,仅仅依靠HTTP协议已无法满足现代企业对数据安全的需求。SSL证书,特别是经过严格验证的组织验证型SSL证书,成为了保护网站数据传输安全、提升用户信任度的标配。 一、Certum OV企业型通配符SSL概述 Certum&#…...
2024年Web前端最新Java进阶(五十五)-Java Lambda表达式入门_eclipse lambda(1),面试必备
对象篇 模块化编程-自研模块加载器 开源分享:【大厂前端面试题解析核心总结学习笔记真实项目实战最新讲解视频】 Arrays.sort(players, sortByName); // 1.3 也可以采用如下形式: Arrays.sort(players, (String s1, String s2) -> (s1.compareTo(s2))); ??其…...
JVM 四虚拟机栈
虚拟机栈出现的背景 由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多…...
V103开发笔记1-20250113
2025-01-13 一、应用方向分析 应用项目: PCBFLY无人机项目(包括飞控和手持遥控器); 分析移植项目,应用外设资源包括: GPIO, PWM,USART,GPIO模拟I2C/SPI, ADC,DMA,USB等; 二、移植项目的基本…...
Page Assist - 本地Deepseek模型 Web UI 的安装和使用
Page Assist Page Assist是一个开源的Chrome扩展程序,为本地AI模型提供一个直观的交互界面。通过它可以在任何网页上打开侧边栏或Web UI,与自己的AI模型进行对话,获取智能辅助。这种设计不仅方便了用户随时调用AI的能力,还保护了…...
Cookie及Session---笔记
目录 Cookiecookie简介cookiesession的认证方式tpshop完整登录实现-cookie Sessionsession简介session自动管理cookietpshop完整登录实现-sessioncookie和session的区别获取响应结果指定内容 Cookie cookie简介 工程师针对HTTP协议是无连接无状态特性所设计的一种技术&#x…...
【Block总结】DASI,多维特征融合
论文信息 HCF-Net(Hierarchical Context Fusion Network)是一种新提出的深度学习模型,专门用于红外小目标检测。该论文于2024年3月16日发布,作者包括Shibiao Xu、ShuChen Zheng等,主要研究机构为北京邮电大学。该模型…...
LabVIEW的智能电源远程监控系统开发
在工业自动化与测试领域,电源设备的精准控制与远程管理是保障系统稳定运行的核心需求。传统电源管理依赖本地手动操作,存在响应滞后、参数调节效率低、无法实时监控等问题。通过集成工业物联网(IIoT)技术,实现电源设备…...
4.PPT:日月潭景点介绍【18】
目录 NO1、2、3、4 NO5、6、7、8 NO9、10、11、12 表居中或者水平/垂直居中单元格内容居中或者水平/垂直居中 NO1、2、3、4 新建一个空白演示文稿,命名为“PPT.pptx”(“.pptx”为扩展名)新建幻灯片 开始→版式“PPT_素材.doc…...
《迪拜AI展:探寻中东人工智能发展的璀璨新篇》
迪拜:AI 浪潮下的闪耀明珠 迪拜,这座位于阿拉伯半岛东部、波斯湾东南岸的城市,犹如一颗璀璨的明珠,在中东地区散发着独特的魅力。它是阿拉伯联合酋长国的第二大城市,也是迪拜酋长国的首府 ,凭借优越的地理位…...
axios如何利用promise无痛刷新token
目录 需求 需求解析 实现思路 方法一: 方法二: 两种方法对比 实现 封装axios基本骨架 instance.interceptors.response.use拦截实现 问题和优化 如何防止多次刷新token 同时发起两个或以上的请求时,其他接口如何重试 最后完整代…...
R语言 | 使用 ComplexHeatmap 绘制热图,分区并给对角线分区加黑边框
目的:画热图,分区,给对角线分区添加黑色边框 建议直接看0和4。 0. 准备数据 # 安装并加载必要的包 #install.packages("ComplexHeatmap") # 如果尚未安装 library(ComplexHeatmap)# 使用 iris 数据集 #data(iris)# 选择数值列&a…...
TensorFlow 简单的二分类神经网络的训练和应用流程
展示了一个简单的二分类神经网络的训练和应用流程。主要步骤包括: 1. 数据准备与预处理 2. 构建模型 3. 编译模型 4. 训练模型 5. 评估模型 6. 模型应用与部署 加载和应用已训练的模型 1. 数据准备与预处理 在本例中,数据准备是通过两个 Numpy 数…...
蓝桥杯备考:模拟算法之字符串展开
P1098 [NOIP 2007 提高组] 字符串的展开 - 洛谷 | 计算机科学教育新生态 #include <iostream> #include <cctype> #include <algorithm> using namespace std; int p1,p2,p3; string s,ret; void add(char left,char right) {string tmp;for(char ch left1;…...
[创业之路-282]:《产品开发管理-方法.流程.工具 》-1- 优秀研发体系的特征、IPD关注的4个关键要素、IPD体系的7个特点
目录 一、优秀研发体系的特征 二、IPD关注的4个关键要素 1. 组织管理 2. 市场管理 3. 流程管理 4. 产品管理 三、IPD体系的7个特点 1、产品开发是投资行为: 2、基于市场的产品研发: 3、平台化开发,大平台,小产品&#x…...
Node.js 与 PostgreSQL 集成:深入 pg 模块的应用与实践
title: Node.js 与 PostgreSQL 集成:深入 pg 模块的应用与实践 date: 2025/2/5 updated: 2025/2/5 author: cmdragon excerpt: 随着 JavaScript 在服务器端编程中的兴起,Node.js 已成为构建高性能网络应用程序的重要平台。PostgreSQL 则以其强大的特性以及对复杂数据结构的…...
【Uniapp-Vue3】从uniCloud中获取数据
需要先获取数据库对象: let db uniCloud.database(); 获取数据库中数据的方法: db.collection("数据表名称").get(); 所以就可以得到下面的这个模板: let 函数名 async () > { let res await db.collection("数据表名称…...
LeetCode 0090.子集 II:二进制枚举 / 回溯
【LetMeFly】90.子集 II:二进制枚举 / 回溯 力扣题目链接:https://leetcode.cn/problems/subsets-ii/ 给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的 子集(幂集)。 解集 不能 …...
Pytest+selenium UI自动化测试实战实例
今天来说说pytest吧,经过几周的时间学习,有收获也有疑惑,总之最后还是搞个小项目出来证明自己的努力不没有白费。 环境准备 1 确保您已经安装了python3.x 2 配置python3pycharmselenium2开发环境 3 安装pytest库pip install p…...
黑马点评 - 商铺类型缓存练习题(Redis List实现)
首先明确返回值是一个 List<ShopType> 类型那么我们修改此函数并在 TypeService 中声明 queryTypeList 方法,并在其实现类中实现此方法 GetMapping("list")public Result queryTypeList() {return typeService.queryTypeList();}实现此方法首先需要…...
C++ 创建和配置dll与lib库
C简明教程(13)创建和配置dll与lib库_怎样生成lib库和dll库-CSDN博客 C 动态库与静态库详解 一、为什么要引入库的概念 在 C 编程中,随着项目规模的不断扩大,代码量也会急剧增加。如果将所有代码都写在一个源文件中,…...
深度剖析 Veo2 工具:解锁 AI 视频创作新境界
在当下这个 AI 技术日新月异的时代,各种 AI 工具如雨后春笋般涌现,让人目不暇接。今天,我就来给大家好好说道说道谷歌旗下的 Veo2,这可是一款在 AI 视频创作领域相当有分量的工具。好多朋友都在问,Veo2 到底厉害在哪?好不好上手?能在哪些地方派上用场?别着急,今天我就…...
LabVIEW自定义测量参数怎么设置?
以下通过一个温度采集案例,说明在 LabVIEW 中设置自定义测量参数的具体方法: 案例背景 假设使用 NI USB-6009 数据采集卡 和 热电偶传感器 监测温度,需自定义以下参数: 采样率:1 kHz 输入量程:0~10 V&a…...