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

【大数据】NiFi 的基本使用

NiFi 的基本使用

  • 1.NiFi 的安装与使用
    • 1.1 NiFi 的安装
    • 1.2 各目录及主要文件
  • 2.NiFi 的页面使用
    • 2.1 主页面介绍
    • 2.2 面板介绍
  • 3.NiFi 的工作方式
    • 3.1 基本方式
    • 3.2 选择处理器
    • 3.3 组件状态
    • 3.4 组件的配置
      • 3.4.1 SETTINGS(通用配置)
      • 3.4.2 SCHEDULING(处理器调度)
      • 3.4.3 COMMENTS(备注区)
      • 3.4.4 PROPERITIES(属性区)
    • 3.5 队列管道操作
      • 3.5.1 管道的来源
      • 3.5.2 手动清空管道
      • 3.5.3 查看数据
      • 3.5.4 设置超时清空
      • 3.5.5 删除
    • 3.6 NiFi 的迁移
      • 3.6.1 局部备份迁移
      • 3.6.2 整体备份迁移

1.NiFi 的安装与使用

1.1 NiFi 的安装

首先说一下 NiFi 的安装,这里 NiFi 可以支持 Windows 版和 Linux,只需要去官网 http://nifi.apache.org/,根据自己需要的版本,选择下载,然后安装解压就行。

在这里插入图片描述
在这里插入图片描述

1.2 各目录及主要文件

解压安装以后的 NiFi 目录如下:
在这里插入图片描述
基本的,bin 目录下放置了整个系统的控制脚本,lib 目录下放置的 NiFi 自带的一个个 nar 程序包(其实就是 NiFi 内置的一个个组件)和它本身的程序所需要的加载编译等等的底层包,state 是运行期间的一些数据,docswork 是 NiFi 的一些官方文档和学习样例。

conf 目录下放置的是 NiFi 的配置文件,这里详细说一下:
在这里插入图片描述
作为我们基本的使用,这里只需要注意两个文件就好,关于其他的配置,有兴趣的可以去 NiFi 官网查看,首先是 nifi-properties 文件,这个文件基本就是整个 NiFi 的配置中心,里面包含很多的基本配置,例如 启动端口内存分配 等等,第二个就是 flow.xml.gz,这个文件主要是你整个 NiFi 使用的全记录,解释的通俗点,如果你遇到了这么一个问题 “我在一台机器上部署了一个 NiFi,并且进行了一段时间的使用,建立了很多流程和功能,这时候,需要换到别的机器的 NiFi 上进行开发”,你建立那些肯定不能挨个再在新环境上来一遍啊,这时候只需要把这个 flow.xml.gz 替换到新机器的 NiFi 环境里,重启新环境的 NiFi 就可以了。

logs 目录里放的是 NiFi 运行后的主要的日志。这里运行后会有三个日志, 分别是:

  • nifi-app.log:整个应用的运行日志。
  • nifi-bootstrap.log:底层类加载一系列的日志。
  • nifi-user.log:就简单理解为用户的访问操作日志吧。

2.NiFi 的页面使用

NiFi 默认启动端口是 8080 8080 8080,使用 Windows 下就 bin 目录下双击 run-nifi.bat,Linux 下就在 bin 目录下,执行 ./nifi.sh start

2.1 主页面介绍

在这里插入图片描述

进入主页面以后,它整体就是一个画布的形式,最上方是个公共导航栏,左侧那个 Navigate 没啥用,不用在意,就是一个全局视角,下面的 Operate 是组件控制面板,可以进行单个组件的控制,也可以选中一片组件进行统一的启动,停止等等。

2.2 面板介绍

首先:

在这里插入图片描述
刚刚已经把 NiFi 的整个页面理解为一个工作台,最上方就是个导航栏了,从最上面开始,这里的导航栏分为两部分,上半部分是提供给我们工作的,下半部分是对整个 NiFi 环境下的一个监控信息。这里简单介绍一下:

图标
解释说明
在这里插入图片描述导航栏中的这个菜单,我们可以理解为处理器(Processor)商城,用鼠标单击拖出到画布上,便会出现处理器(Processor)菜单。
在这里插入图片描述导航栏中这个菜单,我叫它为组,什么叫组呢,当你拉了很多处理器(Processor),形成了一个完整的流程的时候,我们可以单独把这块划分成一个整体了,这时候就要用组把它包裹起来。
在这里插入图片描述有了组以后,组和组之间可能也需要联通、通信,这时候就可以用入口和出口,把它们放在组内。
在这里插入图片描述这个组件需要配合 Operate 中的上传使用,主要是用来迁移模板的,这块后续会专门抽章节讲一下。
在这里插入图片描述这一组件,是集群 NiFi 进行数据通信的时候用的。
在这里插入图片描述这一组件,就是个便签,用来写个备注呀啥的。
在这里插入图片描述这一组件就是个漏斗,主要作用就是把四散的数据可以汇集在一起。

3.NiFi 的工作方式

3.1 基本方式

NiFi 其实就是一个 数据接入、处理、清洗、分发的系统,它的工作方式就是将数据看作水管中的水,它是顺着某个流程管道流动,在这中间,可以在任意节点处堵截这个“水流”,并对它进行改造,然后放回管道继续向下流去。

这里的节点,其实就是 NiFi 的 Processor,你叫它处理器也可以,叫他组件也好,它就是一个黑盒小模块,不同的模块有不同的功能。

然后,节点和节点直接的通道,在 NiFi 里叫 Relationship,我把它称之为 管道,就像水管一样,它本身的意义就是充当水管,把上节点处理完的水传下去。

在 NiFi 中,都是一个个的流程(处理器 + 管道),形成一个数据的处理通路。

在这里插入图片描述
像这个例子,GetFile 组件负责从一个文件里读取数据,然后把读到的数据通过管道传到 ExecuteScript 组件(这个组件支持用脚本代码处理数据),经过 ExecuteScript 之后,流向 PutFile 组件(将数据写入到指定文件中)。

基本流程就是:选则一个处理器配置该组件至可运行状态关联下一组件建立管道

3.2 选择处理器

在这里插入图片描述
通过 “组件商城” 图标进行处理器的选择,处理器是最常用的组件,因为它负责数据的流入、流出、路由和操作。有许多不同类型的处理器。实际上,这是 NiFi 中非常常见的扩展点,这意味着许多供应商可能会实现自己的处理器来执行其所需的任何功能。将处理器拖动到画布上时,会向用户显示一个对话框:

在这里插入图片描述
这里可以通过处理器的包、处理器的属性、处理器的名称等维度进行组件的筛选、选择。选中后,双击则可拖拉至画布中。

3.3 组件状态

在这里插入图片描述

  • 状态:显示处理器的当前状态。以下指标是可能的:
图标状态
解释
在这里插入图片描述正在运行处理器当前正在运行。
在这里插入图片描述已停止处理器有效并已启用但未运行。
在这里插入图片描述无效处理器已启用但当前无效且无法启动。将鼠标悬停在此图标上将提供工具提示,指示处理器无效的原因。一般情况下是需要我们完成必须的配置。
在这里插入图片描述已禁用处理器未运行,在启用之前无法启动。此状态不表示处理器是否有效。
  • 名称:这是处理器的用户定义名称。默认情况下组件的名称与它的 Type 相同。在示例中,此值为 ExecuteGroovyScript,是一个专门用于执行 Groovy 脚本的组件。
  • 任务:此处理器当前正在执行的任务数。此数字受处理器配置对话框的计划选项卡中的并发任务设置的约束。在这里,我们可以看到处理器当前正在执行一项任务。如果 NiFi 实例是集群的,则此值表示当前正在集群中的所有节点上执行的任务数。
  • 实时日志:这里是用于监控当前处理器状态的,当处理器内部出现问题,一般会在此处显示错误日志。
  • 数据流入流出看板:这里主要是展示处理数据过程中数据的流入流出情况,NiFi 默认是 5 5 5 分钟更新一次页面上的看板情况,当然用户也可以在画布空白处,鼠标右键选择刷新,以达到实时查看的效果。
    • In:处理器从其传入处理器的队列中提取的数据量。此值表示为 count / size,其中 count 是从队列中提取的 FlowFiles 的数量,size 是这些 FlowFiles 内容的总大小。
    • Read/Write:处理器从磁盘读取并写入磁盘的 FlowFile 内容的总大小。这提供了有关此处理器所需的 I/O 性能的有用信息。某些处理器可能只读取数据而不写入任何内容,而某些处理器不会读取数据但只会写入数据。其他可能既不会读取也不会写入数据,而某些处理器会读取和写入数据。
    • Out:处理器已传输到其出站连接的数据量。这不包括处理器自行删除的 FlowFiles,也不包括路由到自动终止的连接的 FlowFiles。与上面的 In 指标一样,此值表示为 count / size,其中 count 是已转移到出站 Connections 的 FlowFiles 的数量,size 是这些 FlowFiles 内容的总大小。
    • Tasks/Time:此处理器在过去 5 分钟内被触发运行的次数,以及执行这些任务所花费的时间。时间格式为 hour : minute : second。请注意,所花费的时间可能超过五分钟,因为许多任务可以并行执行。例如,如果处理器计划运行 60 个并发任务,并且每个任务都需要一秒钟才能完成,则所有 60 个任务可能会在一秒钟内完成。但是,在这种情况下,我们会看到时间指标显示它需要 60 秒,而不是 1 秒。

3.4 组件的配置

NiFi 的处理器,一般都有四个标签页,分别是 SETTINGSSCHEDULINGPROPERITIESCOMMENTS

除了 PROPERITIES 之外,另外三个几乎是通用的,这里主要说一下这三个实用的。

3.4.1 SETTINGS(通用配置)

在这里插入图片描述
基本的 Name 这里就不说了,就是用户自定义的名称,IdTypeBundle 这三个是这个处理器组件所属的代码包等基本信息,这里也不过多介绍,Enable 这个选项,就是控制组件由启用到禁用 状态的切换。

最右边包含自动终止关系(Automatically Terminate Relationships)部分。此处列出了处理器定义的每个关系及其描述。为了使处理器被视为有效且能够运行,处理器定义的每个关系必须连接到下游组件或自动终止。我们可以通过选中它,例如图中选中 Failure 一样,来表示我们弃用这个输出,也就是不需要它指向下一个组件,这样这个处理器就变成只有一个对外输出数据的 Relationship 了。

接下来是两个用于配置 Penalty DurationYield Duration 的对话框。在处理一条数据(FlowFile)的正常过程中,可能发生事件,该事件指示处理器此时不能处理数据但是数据可以在稍后进行处理。在发生这种情况时,处理器可以选择 Penalize FlowFile。这将阻止 FlowFile 在一段时间内被处理。例如,如果处理器要将数据推送到远程服务,但远程服务已经有一个与处理器指定的文件名同名的文件,则处理器可能会惩罚 FlowFile。Penalty Duration 允许 DFM 指定 FlowFile 应该受到多长时间的惩罚,默认值为 30 30 30 seconds,(简单理解为推后一段时间再处理),类似的处理器可以确定存在某种情况,处理器没法进行处理数据。例如,如果处理器要将数据推送到远程服务并且该服务没有响应。这样的话处理器应该 Yield,这将阻止处理器运行一段时间。通过设置 Yield Duration 来指定该时间段。默认值为 1 1 1 second。

最下方 Bulletin Level 可以简单的理解为组件的日志输出等级的选择,有选择地进行日志等级输出。

3.4.2 SCHEDULING(处理器调度)

在这里插入图片描述
这一标签页,代表的就是如何驱动处理器,或者说处理器的运作方式:

第一个配置选项是调度策略(Scheduling Strategy)。调度有三种可能的选项:

  • Timer driven:这是默认模式。处理器将定期运行。即多久运行一次,运行处理器的时间间隔由 Run Schedule 选项定义(当 Run Schedule 为 0 时,则代表瞬时执行)。
  • Event driven:选择此模式时,将由一个事件触发处理器运行,当 FlowFiles 进入连接此处理器的 Connections 时,将产生这个事件。此模式目前被认为是实验性的,并非所有处理器都支持。选择此模式时,Run Schedule 选项不可配置。此外,只有此模式下 Concurrent Tasks 选项可以设置为 0。这种情况,线程数仅受管理员配置的事件驱动线程池的大小限制。
  • CRON 驱动:这是定时执行模式,即通过 cron 表达式,进行定时运行的控制。

下面的配置就是 线程的分配Concurrent Tasks):这可以控制处理器将使用的线程数。换句话说,它控制此处理器应同时处理多少个 FlowFiles。增加此值通常会使处理器在相同的时间内处理更多数据。但是,它是通过使用其他处理器无法使用的系统资源来实现此目的。这基本上提供了处理器的相对权重 - 应该将多少系统资源分配给此处理器而不是其他处理器。该字段适用于大多数处理器。但是,某些类型的处理器只能使用单个任务进行调度。

关于 Execution,执行设置用于确定处理器将被调度执行的节点。选择 All Nodes 将导致在集群中的每个节点上调度此处理器。选择 Primary Node 将导致此处理器仅在主节点上进行调度。一般单节点的情况下,我们都使用 Primary Node

Run Duration 选项卡的右侧包含一个用于选择运行持续时间的滑块。这可以控制处理器每次触发时应安排运行的时间。在滑块的左侧,标记为 Lower latency较低延迟),而右侧标记为 Higher throughput较高吞吐量)。处理器完成运行后,必须更新存储库才能将 FlowFiles 传输到下一个 Connection。更新存储库的成本很高,因此在更新存储库之前可以立即完成的工作量越多,处理器可以处理的工作量就越多(吞吐量越高)。这意味着在上一批数据处理更新此存储库之前,Processor 是无法开始处理接下来的 FlowFiles。结果是,延迟时间会更长(从开始到结束处理 FlowFile 所需的时间会更长)。因此,滑块提供了一个频谱,DFM 可以从中选择支持较低延迟或较高吞吐量。

3.4.3 COMMENTS(备注区)

这块把它称之为 “备注区”,即用来为用户提供一个区域,以包含适用于此组件的任何注释。

3.4.4 PROPERITIES(属性区)

这一标签页差别较大,一般不同的组件所需要的配置各不相同,具体如果想了解对应组件的属性配置可以参考官网文档。

✅ http://nifi.apache.org/docs.html

3.5 队列管道操作

在这里插入图片描述
对于队列管道,它即是数据从一个处理器流向另一个处理器的中间队列,最多的用处就是用来监控数据是否正常流通,以及在开发使用过程中,可能调试定位问题等需要查看一下管道的数据,这里主要从 管道的来源手动清空查看数据设置超时清空删除 来描述一下对于管道队列

3.5.1 管道的来源

管道的建立十分简单,两个组件进行一下拖拉连线即可,管道建立后,就需要选择前置处理器选用哪个 Relationship 输出的数据作为管道的源头,也就是上面配置项那里的 Relationship。

3.5.2 手动清空管道

管道内的数据承载是有限的,有些时候(阻塞或者需要删除组件)需要进行手动清空管道的数据,操作方式是:选中管道,右键会出现:

在这里插入图片描述

3.5.3 查看数据

查看管道中的数据可以选中管道,右键后的 List queue 选项。

在这里插入图片描述

3.5.4 设置超时清空

当有些组件处理速度过慢,导致阻塞(允许数据丢失的情况下),我们不能挨个进行手动的清空,这时候可以在管道的右键 configure 选项中进入管道的配置页面。
在这里插入图片描述
FlowFile Expiration 进行超时自动清空的设置,默认为 0 是不做自动清空。

3.5.5 删除

一般删除处理器之前,是需要断开所有与其关联的管道,即删除管道,删除时如果管道中有数据,需要手动制空后,选择 Delete。

3.6 NiFi 的迁移

使用 NiFi 的过程中,当进行了一系列的开发,想要对绘制的各种流程图,以及其中的配置、代码进行备份或者迁移的时候,NiFi 本身提供了很友好的迁移方式。

3.6.1 局部备份迁移

如果仅对部分流程进行备份,可以对选中的区域,使用 在这里插入图片描述 进行创建模板,在另一 NiFi 中,使用 在这里插入图片描述 上传模板,选择 在这里插入图片描述 样例进行复原。

3.6.2 整体备份迁移

当整个 NiFi 的全景图需要进行备份或者迁移的时候,可以对 NiFi 安装目录下的 /conf/flow.xml.gz 文件进行复制和替换,然后重启被替换的 NiFi,即可以还原 NiFi 之前的流程和模板。

:未进行认证设置的 NiFi 的 flow.xml.gz 是无法直接在配置了认证权限的 NiFi 上使用的!

相关文章:

【大数据】NiFi 的基本使用

NiFi 的基本使用 1.NiFi 的安装与使用1.1 NiFi 的安装1.2 各目录及主要文件 2.NiFi 的页面使用2.1 主页面介绍2.2 面板介绍 3.NiFi 的工作方式3.1 基本方式3.2 选择处理器3.3 组件状态3.4 组件的配置3.4.1 SETTINGS(通用配置)3.4.2 SCHEDULING&#xff0…...

5 分钟内搭建一个免费问答机器人:Milvus + LangChain

搭建一个好用、便宜又准确的问答机器人需要多长时间? 答案是 5 分钟。只需借助开源的 RAG 技术栈、LangChain 以及好用的向量数据库 Milvus。必须要强调的是,该问答机器人的成本很低,因为我们在召回、评估和开发迭代的过程中不需要调用大语言…...

WPF Border

在 WPF 中&#xff0c;Border 是一种常用的控件&#xff0c;用于给其他控件提供边框和背景效果。 要使用 Border 控件&#xff0c;您可以在 XAML 代码中添加以下代码&#xff1a; <Border BorderBrush"Black" BorderThickness"2" Background"Lig…...

基于博弈树的开源五子棋AI教程[4 静态棋盘评估]

引子 静态棋盘的评估是棋力的一个很重要的体现&#xff0c;一个优秀的基于博弈树搜索的AI往往有上千行工作量&#xff0c;本文没有做深入讨论&#xff0c;仅仅写了个引子用来抛砖引玉。 评估一般从两个角度入手&#xff0c;一个是子力&#xff0c;另一个是局势。 1 评估维度 …...

STL--排序与检索

题目 现有N个大理石&#xff0c;每个大理石上写了一个非负整数。首先把各数从小到大排序&#xff0c;然后回答Q个问题。每个问题是否有一个大理石写着某个整数x,如果是&#xff0c;还要回答哪个大理石写着x。排序后的大理石从左到右编写为1-N。&#xff08;样例中&#xff0c;…...

大数据处理与分析-Spark

导论 (基于Hadoop的MapReduce的优缺点&#xff09; MapReduce是一个分布式运算程序的编程框架&#xff0c;是用户开发“基于Hadoop的数据分析应用”的核心框架 MapReduce是一种用于处理大规模数据集的编程模型和计算框架。它将数据处理过程分为两个主要阶段&#xff1a;Map阶…...

虚拟机的下载、安装(模拟出服务器)

下载 vmware workstation&#xff08;收费的虚拟机&#xff09; 下载vbox 网址&#xff1a;Oracle VM VirtualBox&#xff08;免费的虚拟机&#xff09; 以下选择一个下载即可&#xff0c;建议下载vbox&#xff0c;因为是免费的。安装的时候默认下一步即可&#xff08;路径最好…...

K8S Pod Terminating/Unknown故障排查

一、pod异常出现现象 优雅终止周期(Graceful termination period): 当pod被删除时&#xff0c;会进入"Terminating"状态&#xff0c;等待容器优雅关闭。如果容器关闭所需时间超过默认期限(默认30秒)&#xff0c;则pod将保持在"Terminating"状态。 Finalize…...

labelme标注的json文件数据转成coco数据集格式(可处理目标框和实例分割)

这里主要是搬运一下能找到的 labelme标注的json文件数据转成coco数据集格式&#xff08;可处理目标框和实例分割&#xff09;的代码&#xff0c;以供需要时参考和提供相关帮助。 1、官方labelme实现 如下是labelme官方网址&#xff0c;提供了源代码&#xff0c;以及相关使用方…...

MySQL报错:1366 - Incorrect integer value: ‘xx‘ for column ‘xx‘ at row 1的解决方法

我在插入表数据时遇到了1366报错&#xff0c;报错内容&#xff1a;1366 - Incorrect integer value: Cindy for column name at row 1&#xff0c;下面我演示解决方法。 根据上图&#xff0c;原因是Cindy’对应的name字段数据类型不正确。我们在左侧找到该字段所在的grade_6表&…...

MySQL中MVCC的流程

参考文章一 参考文章二 当谈到数据库的并发控制时&#xff0c;多版本并发控制&#xff08;MVCC&#xff09;是一个重要的概念。MVCC 是一种用于实现数据库事务隔离性的技术&#xff0c;常见于像 PostgreSQL 和 Oracle 这样的数据库系统中。 MVCC 的核心思想是为每个数据行维护…...

朴素贝叶斯法_naive_Bayes

朴素贝叶斯法&#xff08;naive Bayes&#xff09;是基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的训练数据集&#xff0c;首先基于特征条件独立假设学习输入输出的联合概率分布&#xff1b;然后基于此模型&#xff0c;对给定的输入 x x x&#xff0c;利用贝叶斯定理…...

Windows下安装MongoDB实践总结

本文记录Windows环境下的MongoDB安装与使用总结。 【1】官网下载 官网下载地址&#xff1a;Download MongoDB Community Server | MongoDB 这里可以选择下载zip或者msi&#xff0c;zip是解压后自己配置&#xff0c;msi是傻瓜式一键安装。这里我们分别对比进行实践。 【2】ZI…...

华为云Stack 8.X 流量模型分析(二)

二、流量模型分析相关知识 1.vNIC ​ 虚拟网络接口卡(vNIC)是基于主机物理 NIC 的虚拟网络接口。每个主机可以有多个 NIC&#xff0c;每个 NIC 可以是多个 vNIC 的基础。 ​ 将 vNIC 附加到虚拟机时&#xff0c;Red Hat Virtualization Manager 会在虚拟机之间创建多个关联的…...

rk3588 之启动

目录 uboot版本配置修改编译 linux版本配置修改编译 启动sd卡启动制作spi 烧录 参考 uboot 版本 v2024.01-rc2 https://github.com/u-boot/u-boot https://github.com/rockchip-linux/rkbin 配置修改 使用这两个配置即可&#xff1a; orangepi-5-plus-rk3588_defconfig r…...

ARM GIC (五)gicv3架构-LPI

在gicv3中,引入了一种新的中断类型。message based interrupts,消息中断。 一、消息中断 外设,不在通过专用中断线,向gic发送中断,而是写gic的寄存器,来发送中断。 这样的一个好处是,可以减少中断线的个数。 为了支持消息中断,gicv3,增加了LPI,来支持消息中断。并且…...

sql-labs服务器结构

双层服务器结构 一个是tomcat的jsp服务器&#xff0c;一个是apache的php服务器&#xff0c;提供服务的是php服务器&#xff0c;只是tomcat向php服务器请求数据&#xff0c;php服务器返回数据给tomcat。 此处的29-32关都是这个结构&#xff0c;不是用docker拉取的镜像要搭建一下…...

【小沐学写作】Docsify制作在线电子书、技术文档(Docsify + Markdown + node)

文章目录 1、简介2、安装2.1 node2.2 docsify-cli 3、配置3.1 初始化3.2 预览效果3.3 加载对话框3.4 更多页面3.5 侧 栏3.6 自定义导航栏 结语 1、简介 https://docsify.js.org/#/?iddocsify 一个神奇的文档网站生成器。 简单轻巧没有静态构建的 html 文件多个主题 Docsify…...

电脑完全重装教程——原版系统镜像安装

注意事项 本教程会清除所有个人文件 请谨慎操作 请谨慎操作 请谨慎操作 前言 本教程是以系统安装U盘为介质进行系统重装操作&#xff0c;照着流程操作会清除整个硬盘里的文件&#xff0c;请考虑清楚哦&#xff5e; 有些小伙伴可能随便在百度上找个WinPE作为启动盘就直接…...

【智慧办公】如何让智能会议室的电子标签实现远程、批量更新信息?东胜物联网硬件网关让解决方案更具竞争力

近年来&#xff0c;为了减少办公耗能、节能环保、降本增效&#xff0c;越来越多的企业开始从传统的办公模式转向智慧办公。 以智能会议室为例&#xff0c;会议是企业业务中不可或缺的一部分&#xff0c;但在传统办公模式下&#xff0c;一来会议前行政人员需要提前准备会议材料…...

面向对象设计与分析40讲(16)静态工厂方法模式

前面我们介绍了简单工厂模式&#xff0c;在创建对象前&#xff0c;我们需要先创建工厂&#xff0c;然后再通过工厂去创建产品。 如果将工厂的创建方法static化&#xff0c;那么无需创建工厂即可通过静态方法直接调用的方式创建产品&#xff1a; // 工厂类&#xff0c;定义了静…...

【贪心】买卖股票的最佳时机含手续费

/** 贪心&#xff1a;每次选取更低的价格买入&#xff0c;遇到高于买入的价格就出售(此时不一定是最大收益)。* 使用buy表示买入股票的价格和手续费的和。遍历数组&#xff0c;如果后面的股票价格加上手续费* 小于buy&#xff0c;说明有更低的买入价格更新buy。如…...

Altium Designer入门到就业【目录】

&#x1f3e1;《AD目录》 欢迎大家来到《Altium Designer入门到就业》该专栏包括【电路设计篇】【PCB设计篇】【电路仿真篇】【PCB仿真篇】四个部分&#xff0c;以供大家参考。大家直接点击大纲中蓝色标题即可轻松传送。 【电路设计篇】 Altium Designer&#xff08;AD24&#…...

cmake 查看编译命令,以及在vscode中如何使用cmke

通过设置如下配置选项&#xff0c;可以生成compile_commands.json 文件&#xff0c;记录使用的编译命令 set(CMAKE_EXPORT_COMPILE_COMMANDS ON)获得现有模块列表 cmake --help-module-list查看命令文档 cmake --help-command find_file查看模块的详细信息 cmake --help-mo…...

玩转 Scrapy 框架 (一):Scrapy 框架介绍及使用入门

目录 一、Scrapy 框架介绍二、Scrapy 入门 一、Scrapy 框架介绍 简介&#xff1a; Scrapy 是一个基于 Python 开发的爬虫框架&#xff0c;可以说它是当前 Python 爬虫生态中最流行的爬虫框架&#xff0c;该框架提供了非常多爬虫的相关组件&#xff0c;架构清晰&#xff0c;可扩…...

node.js mongoose index(索引)

目录 简介 索引类型 单索引 复合索引 文本索引 简介 在 Mongoose 中&#xff0c;索引&#xff08;Index&#xff09;是一种用于提高查询性能的数据结构&#xff0c;它可以加速对数据库中文档的检索操作 索引类型 单索引、复合索引、文本索引、多键索引、哈希索引、地理…...

谷歌推大语言模型VideoPoet:文本图片皆可生成视频和音频

Google Research最近发布了一款名为VideoPoet的大型语言模型&#xff08;LLM&#xff09;&#xff0c;旨在解决当前视频生成领域的挑战。该领域近年来涌现出许多视频生成模型&#xff0c;但在生成连贯的大运动时仍存在瓶颈。现有领先模型要么生成较小的运动&#xff0c;要么在生…...

ES-mapping

类似数据库中的表结构定义&#xff0c;主要作用如下 定义Index下的字段名( Field Name) 定义字段的类型&#xff0c;比如数值型、字符串型、布尔型等定义倒排索引相关的配置&#xff0c;比如是否索引、记录 position 等 index_options 用于控制倒排索记录的内容&#xff0c;有如…...

Centos 7.9安装Oracle19c步骤亲测可用有视频

视频介绍了在虚拟机安装centos 7.9并安装数据库软件的全过程 视频链接&#xff1a;https://www.zhihu.com/zvideo/1721267375351996416 下面的文字描述是安装数据库的部分介绍 一.安装环境准备 链接&#xff1a;https://pan.baidu.com/s/1Ogn47UZQ2w7iiHAiVdWDSQ 提取码&am…...

.NET中的Swagger使用

目录 前言 一、Swagger是什么&#xff1f; 二、如何Swagger文档说明的信息 1.在AddSwaggerGen方法中写入文档信息 2.运行效果 二、文档UI界面标题、路由设置 1.在中间件UseSwaggerUI方法中配置 三、文档UI界面添加接口注释 1.在 .csproj中配置 2.在AddSwaggerGen方法中配置Incl…...

结构屈曲分析

结构屈曲分析主要用于判定结构受载后是否有失稳风险&#xff0c;作为工程应用&#xff0c;一般分为线性屈曲分析和非线性屈曲分析。 线性屈曲分析需要具备较多的前提条件&#xff0c;如载荷无偏心、材料无缺陷等&#xff0c;在实际工程应用中结构制作过程和加载方式很难达到线性…...

Flink 客户端操作命令及可视化工具

Flink提供了丰富的客户端操作来提交任务和与任务进行交互。下面主要从Flink命令行、Scala Shell、SQL Client、Restful API和 Web五个方面进行整理。 在Flink安装目录的bin目录下可以看到flink&#xff0c;start-scala-shell.sh和sql-client.sh等文件&#xff0c;这些都是客户…...

csrf自动化检测调研

https://github.com/pillarjs/understanding-csrf/blob/master/README_zh.md CSRF 攻击者在钓鱼站点&#xff0c;可以通过创建一个AJAX按钮或者表单来针对你的网站创建一个请求&#xff1a; <form action"https://my.site.com/me/something-destructive" metho…...

记录一个Python鼠标自动模块用法和selenium加载网页插件的设置

写爬虫&#xff0c;或者网页自动化&#xff0c;让程序自动完成一些重复性的枯燥的网页操作&#xff0c;是最常见的需求。能够解放双手&#xff0c;空出时间看看手机&#xff0c;或者学习别的东西&#xff0c;甚至还能帮朋友亲戚减轻工作量。 然而&#xff0c;网页自动化代码编写…...

【数据库系统概论】第3章-关系数据库标准语言SQL(1)

文章目录 3.1 SQL概述3.2 学生-课程数据库3.3 数据定义3.3.1 数据库定义3.3.2 模式的定义3.3.3 基本表的定义3.3.4 索引的建立与删除3.3.5 数据字典 3.1 SQL概述 动词 分类 三级模式 3.2 学生-课程数据库 3.3 数据定义 3.3.1 数据库定义 创建数据库 tips&#xff1a;[ ]表…...

【Python】基于flaskMVT架构与session实现博客前台登录登出功能

目录 一、MVT说明 1.Model层 2.View层 3.Template层 二、功能说明 三、代码框架展示 四、具体代码实现 models.py 登录界面前端代码 博客界面前端代码&#xff08;profile.html&#xff09; main.py 一、MVT说明 MVT架构是Model-View-Template的缩写&#xff0c;是…...

为什么有的开关电源需要加自举电容?

一、什么是自举电路&#xff1f; 1.1 自举的概念 首先&#xff0c;自举电路也叫升压电路&#xff0c;是利用自举升压二极管&#xff0c;自举升压电容等电子元件&#xff0c;使电容放电电压和电源电压叠加&#xff0c;从而使电压升高。有的电路升高的电压能达到数倍电源电压。…...

【MCAL】TC397+EB-treso之MCU配置实战 - 芯片时钟

本篇文章介绍了在TC397平台使用EB-treso对MCU驱动模块进行配置的实战过程&#xff0c;主要介绍了后续基本每个外设模块都要涉及的芯片时钟部分&#xff0c;帮助读者了解TC397芯片的时钟树结构&#xff0c;在后续计算配置不同外设模块诸如通信速率&#xff0c;定时器周期等&…...

高级人工智能之群体智能:蚁群算法

群体智能 鸟群&#xff1a; 鱼群&#xff1a; 1.基本介绍 蚁群算法&#xff08;Ant Colony Optimization, ACO&#xff09;是一种模拟自然界蚂蚁觅食行为的优化算法。它通常用于解决路径优化问题&#xff0c;如旅行商问题&#xff08;TSP&#xff09;。 蚁群算法的基本步骤…...

【SpringBoot应用篇】【AOP+注解】SpringBoot+SpEL表达式基于注解实现权限控制

【SpringBoot应用篇】【AOP注解】SpringBootSpEL表达式基于注解实现权限控制 Spring SpEL基本表达式类相关表达式表达式模板 SpEL表达式实现权限控制PreAuthAuthFunPreAuthAspectUserControllerSpelParserUtils Spring SpEL Spring 表达式语言 SpEL 是一种非常强大的表达式语言…...

Java研学-HTTP 协议

一 概述 1 概念和作用 概念&#xff1a;HTTP 是 HyperText Transfer Protocol (超文本传输协议)的简写&#xff0c;它是 TCP/IP 协议之上的一个应用层协议。简单理解就是 HTTP 协议底层是对 TCP/IP 协议的封装。   作用&#xff1a;用于规定浏览器和服务器之间数据传输的格式…...

差生文具多之(二): perf

栈回溯和符号解析是使用 perf 的两大阻力&#xff0c;本文以应用程序 fio 的观测为例子&#xff0c;提供一些处理它们的经验法则&#xff0c;希望帮助大家无痛使用 perf。 前言 系统级性能优化通常包括两个阶段&#xff1a;性能剖析和代码优化&#xff1a; 性能剖析的目标是寻…...

【SPI和API有什么区别】

✅什么是SPI&#xff0c;和API有什么区别 ✅典型解析&#x1f7e2;拓展知识仓&#x1f7e2;如何定义一个SPI&#x1f7e2;SPI的实现原理 ✅SPI的应用场景SpringDubbo ✅典型解析 Java 中区分 API和 SPI&#xff0c;通俗的进: API和 SPI 都是相对的概念&#xff0c;他们的差别只…...

Day67力扣打卡

打卡记录 美丽塔 II&#xff08;前缀和 单调栈&#xff09; 链接 class Solution:def maximumSumOfHeights(self, maxHeights: List[int]) -> int:n len(maxHeights)stack collections.deque()pre, suf [0] * n, [0] * nfor i in range(n):while stack and maxHeights…...

什么是网站监控?

网站监控是跟踪网站的可用性和性能&#xff0c;以最小化宕机时间&#xff0c;优化性能并确保顺畅的用户体验。维护网站正常运行对于任何企业来说都是至关重要的&#xff0c;因而对大多数业务来说&#xff0c;网站应用监控都是一个严峻的挑战。Applications Manager网站应用监控…...

游戏软件提示d3dcompiler_43.dll的五个解决方法,亲测靠谱

在使用电脑进行工作&#xff0c;玩游戏的时候&#xff0c;我们常常会遇到一些错误提示&#xff0c;其中之一就是“D3DCompiler_43.dll丢失”的提示。D3DCompiler_43.dll是一个非常重要的动态链接库文件。它是由DirectX SDK提供的&#xff0c;用于编译和优化DirectX着色器代码的…...

python使用opencv提取视频中的每一帧、最后一帧,并存储成图片

提取视频每一帧存储图片 最近在搞视频检测问题&#xff0c;在用到将视频分帧保存为图片时&#xff0c;图片可以保存&#xff0c;但是会出现(-215:Assertion failed) !_img.empty() in function cv::imwrite问题而不能正常运行&#xff0c;在检查代码、检查路径等措施均无果后&…...

说说对React refs 的理解?应用场景?

先了解&#xff0c;是什么&#xff1f; React 中的 Refs提供了一种方式&#xff0c;允许我们访问 DOM节点或在 render方法中创建的 React元素。 本质为ReactDOM.render()返回的组件实例&#xff0c;如果是渲染组件则返回的是组件实例&#xff0c;如果渲染dom则返回的是具体的do…...

Pytorch 读取t7文件

Pytorch 1.0以上可以使用&#xff1a; import torchfileth_path r"./path/xx.t7" data torchfile.load(th_path)print(data.shape)若data的尺寸为0&#xff0c;则将torch版本降为0.4.1&#xff0c;并使用以下函数&#xff1a; from torch.utils.serialization im…...

【YOLOV8预测篇】使用Ultralytics YOLO进行检测、分割、姿态估计和分类实践

目录 一 安装Ultralytics 二 使用预训练的YOLOv8n检测模型 三 使用预训练的YOLOv8n-seg分割模型 四 使用预训练的YOLOv8n-pose姿态模型 五 使用预训练的YOLOv8n-cls分类模型 <...