目录

Flink 时间语义

时间的特性

Timestamp 和 Watermark 行为概览

Watermark 传播

ProcessFunction

Watermark 处理

Table API 中的时间

时间列和 Table 操作


Flink 的 API 大体上可以划分为三个层次:处于最底层的 ProcessFunction中间一层的 DataStream API最上层的 SQL/Table API这三层中的每一层都非常依赖于时间属性。时间在 Flink 中的地位如下图所示:

时间属性是流处理中最重要的一个方面,是流处理系统的基石之一,贯穿这三层 API。在 DataStream API 这一层中因为封装方面的原因,我们能够接触到时间的地方不是很多,所以我们将重点放在底层的ProcessFunction 和最上层的 SQL/Table API。

Flink 时间语义

不同的应用场景拥有不同的时间语义,Flink作为一个先进的分布式流处理引擎,它本身支持不同的时间语义。其核心是Processing Time(窗口时间即处理时间Event TimeRow Time,事件发生时间),这两类时间主要的不同点如下表所示:

Processing TimeEvent Time
真实世界的时间数据世界的时间
处理数据节点的本地时间记录携带的 Timestamp
处理简单处理复杂
结果不确定(无法重现)结果确定(可重现)

Processing Time 是来模拟我们真实世界的时间,其实就算是处理数据的节点本地时间也不一定是完完全全的真实世界的时间,所以说它是用来模拟真实世界的时间。而 Event Time 是数据世界的时间,即我们要处理的数据流世界里的时间。关于他们的获取方式,Process Time 是通过直接去调用本地机器的时间,而 Event Time 则是根据每一条处理记录所携带的时间戳来判定
这两种时间在 Flink 内部的处理以及用户的实际使用方面,难易程度都是不同的。相对而言的 Processing Time 处理起来更加的简单,而 Event Time 要更麻烦一些。而在使用 Processing Time 的时候,我们得到的处理结果(或者说流处理应用的内部状态)是不确定的。而因为在 Flink 内部对 Event Time 做了各种保障,使用 Event Time 的情况下,无论重放数据多少次,都能得到一个相对确定可重现的结果。

因此在判断应该使用 Processing Time 还是 Event Time 的时候,可以遵循一个原则:当你的应用遇到某些问题要从上一个checkpoint 或者 savepoint 进行重放,是不是希望结果完全相同如果希望结果完全相同,就只能用 Event Time;如果接受结果不同,则可以用 Processing Time。Processing Time 的一个常见的用途是,根据现实时间来统计整个系统的吞吐,比如要计算现实时间一个小时处理了多少条数据,这种情况只能使用 Processing Time。 

时间的特性

Processing Time:递增;
Event Time:一定程度的乱序;

时间的一个重要特性是:时间只能递增,不会来回穿越。 在使用时间的时候我们要充分利用这个特性。假设我们有这么一些记录,然后我们来分别看一下Processing Time 还有 Event Time 对于时间的处理。
【1】对于 Processing Time,因为我们是使用的是本地节点的时间(假设这个节点的时钟同步没有问题),我们每一次取到的 Processing Time 肯定都是递增的,递增就代表着有序,所以说我们相当于拿到的是一个有序的数据流。
【2】而在用 Event Time 的时候因为时间是绑定在每一条的记录上的,由于网络延迟、程序内部逻辑、或者其他一些分布式系统的原因,数据的时间可能会存在一定程度的乱序,比如下图的例子。在 Event Time 场景下,我们把每一个记录所包含的时间称作 Record Timestamp。如果 Record Timestamp 所得到的时间序列存在乱序,我们就需要去处理这种情况。

如果单条数据之间是乱序,我们就考虑对于整个序列进行更大程度的离散化。简单地讲,就是把数据按照一定的条数组成一些小批次,但这里的小批次并不是攒够多少条就要去处理,而是为了对他们进行时间上的划分。经过这种更高层次的离散化之后,我们会发现最右边方框里的时间就是一定会小于中间方框里的时间,中间框里的时间也一定会小于最左边方框里的时间。

这个时候我们在整个时间序列里插入一些类似于标志位的特殊的处理数据,这些特殊的处理数据叫做 watermark。一个watermark 本质上就是一个 timestamp数值,表示后到来的数据再也没有小于或等于这个时间watermark的了

Timestamp 和 Watermark 行为概览


接下来我们重点看一下 Event Time 里的 Record Timestamp简写成 timestamp)和 watermark 的一些基本信息。绝大多数的分布式流计算引擎对于数据都是进行了 DAG 图的抽象,它有自己的数据源,有处理算子,还有一些数据汇。数据在不同的逻辑算子之间进行流动。watermark timestamp 有自己的生命周期,主要分为 watermark 和 timestamp 的产生、他们在不同的节点之间的传播、以及在每一个节点上的处理

Timestamp 分配和 Watermark 生成Flink 支持两种 watermark 生成方式。第一种是在 SourceFunction 中产生,相当于把整个的 timestamp 分配和 watermark 生成的逻辑放在流处理应用的源头。我们可以在 SourceFunction 里面通过这两个方法产生 watermark:
【1】通过 collectWithTimestamp 方法发送一条数据,其中第一个参数就是我们要发送的数据,第二个参数就是这个数据所对应的时间戳;也可以调用 emitWatermark 去产生一条 watermark,表示接下来不会再有时间戳小于等于这个数值记录。
【2】另外,有时候我们不想在 SourceFunction里生成 timestamp或者 watermark,或者说使用的 SourceFunction本身不支持,我们还可以在使用 DataStreamAPI的时候指定,调用的 DataStream.assignTimestampsAndWatermarks这个方法,能够接收不同的 timestamp和 watermark的生成器。

总体上而言生成器可以分为两类:第一类是定期生成器;第二类是根据一些在流处理数据流中遇到的一些特殊记录生成的。

定期生成根据特殊记录生成
现实时间驱动数据驱动
没个一段时间调用生成方法分一次分配Timestamp都会调用生成的方法
实现AssignerWithPeriodicWatermarks实现 AssignerWithPunctuatedWatermarks

两者的区别主要有三个方面,首先定期生成是现实时间驱动的,这里的“定期生成”主要是指watermark(因为 timestamp 是每一条数据都需要有的),即定期会调用生成逻辑去产生一个 watermark。而根据特殊记录生成是数据驱动的,即是否生成 watermark 不是由现实时间来决定,而是当看到一些特殊的记录就表示接下来可能不会有符合条件的数据再发过来了,这个时候相当于每一次分配 Timestamp之后都会调用用户实现的 watermark 生成方法,用户需要在生成方法中去实现watermark 的生成逻辑。

在分配 timestamp 和生成 watermark 的过程中,虽然在 SourceFunction 和 DataStream 中都可以指定,但是还是建议生成的工作越靠近 DataSource 越好。这样会方便让程序逻辑里面更多的 operator 去判断某些数据是否乱序。Flink 内部提供了很好的机制去保证这些 timestamp watermark 被正确地传递到下游的节点。

Watermark 传播

具体的传播策略基本上遵循这三点:
【1】watermark 会以广播的形式在算子之间进行传播。比如说上游的算子连接了三个下游的任务,它会把自己当前的收到的 watermark 以广播的形式传到下游。

广播特点:主机之间“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无条件复制并转发,所有主机都可以接收到所有信息(不管你是否需要)

【2】如果在程序里面收到了一个 Long.MAX_VALUE 这个数值的 watermark,就表示对应的那一条流的一个部分不会再有数据发过来了,它相当于就是一个终止的标志。
【3】对于单流而言,这个策略比较好理解,而对于有多个输入的算子,watermark 的计算就有讲究了,一个原则是:单输入取其大,多输入取小


举个例子,上图蓝色代表一个算子的一个任务,然后它有三个输入,分别是 W1、W2、W3,这三个输入可以理解成任何输入,这三个输入可能是属于同一个流,也可能是属于不同的流。然后在计算 watermark 的时候,对于单个输入而言是取他们的最大值,因为我们都知道 watermark 应该遵循一个单调递增的一个原则。对于多输入,它要统计整个算子任务的 watermark 时,就会取这三个计算出来的watermark 的最小值。即一个多个输入的任务,它的 watermark 受制于最慢的那条输入流。这一点类似于木桶效应,整个木桶中装的水会受制于最矮的那块板。

watermark 在传播的时候有一个特点是,它的传播是幂等的。多次收到相同的watermark,甚至收到之前的 watermark 都不会对最后的数值产生影响,因为对于单个输入永远是取最大的,而对于整个任务永远是取一个最小的。同时我们可以注意到这种设计其实有一个局限,具体体现在它没有区分你这个输入是一条流多个 partition 还是来自于不同的逻辑上的流的 JOIN。对于同一个流的不同 partition,我们对他做这种强制的时钟同步是没有问题的,因为一开始就把一条流拆散成不同的部分,但每一个部分之间共享相同的时钟。但是如果算子的任务是在做类似于 JOIN 操作,那么要求两个输入的时钟强制同步其实没有什么道理的,因为完全有可能是把一条离现在时间很近的数据流和一个离当前时间很远的数据流进行 JOIN,这个时候对于快的那条流,因为它要等慢的那条流,所以说它可能就要在状态中去缓存非常多的数据,这对于整个集群来说是一个很大的性能开销。

ProcessFunction

在了解 watermark 的处理之前,先简单了解 ProcessFunction,因为 watermark在任务里的处理逻辑分为内部逻辑外部逻辑。外部逻辑其实就是通过 ProcessFunction来体现的,需要使用 Flink提供的时间相关的 API 的话就只能写在ProcessFunction 里。

ProcessFunction 和时间相关的功能主要有三点:
【1】根据你当前系统使用的时间语义不同,你可以去获取当前你正在处理这条记录的 Record Timestamp,或者当前的Processing Time
【2】它可以获取当前算子的时间,可以把它理解成当前的 watermark
【3】为了在 ProcessFunction 中去实现一些相对复杂的功能,允许注册一些 timer定时器)。比如说在 watermark 达到某一个时间点的时候就触发定时器,所有的这些回调逻辑也都是由用户来提供,涉及到如下三个方法,registerEventTimeTimerregisterProcessingTimeTimer onTimer。在 onTimer 方法中就需要去实现自己的回调逻辑,当条件满足时回调逻辑就
会被触发。

一个简单的应用是,我们在做一些时间相关的处理的时候可能需要缓存一部分数据但这些数据不能一直去缓存下去所以需要有一些过期的机制,我们可以通过 timer 去设定这么一个时间,指定某一些数据可能在将来的某一个时间点过期,从而把它从状态里删除掉。所有的这些和时间相关的逻辑在 Flink 内部都是由自己的Time Service(时间服务)完成的。

Watermark 处理

一个算子的实例在收到 watermark 的时候,首先要更新当前的算子时间,这样的话在 ProcessFunction 里方法查询这个算子时间的时候,就能获取到最新的时间。第二步它会遍历计时器队列,这个计时器队列就是我们刚刚说到的 timer,你可以同时注册很多 timer,Flink 会把这些 Timer 按照触发时间放到一个优先队列中。第三步 Flink 得到一个时间之后就会遍历计时器的队列,然后逐一触发用户的回调逻辑。通过这种方式,Flink 的某一个任务就会将当前的 watermark 发送到下游的其他任务实例上,从而完成整个 watermark 的传播,从而形成一个闭环。

Table API 中的时间

下面看一看 Table/SQL API 中的时间。为了让时间参与到Table/SQL 这一层的运算中,我们需提前把时间属性放到表的schema 中,这样的话我们才能够在 SQL语句或者 Table的逻辑表达式里面使用时间去完成需求。

Table 中指定时间列其实之前社区就怎么在 Table/SQL中去使用时间这个问题做过一定的讨论,是把获取当前Processing Time 的方法是作为一个特殊的 UDF,还是把这一个列物化到整个的 schema 里面,最终采用了后者。我们这里就分开来讲一讲 Processing Time 和 Event Time 在使用的时候怎么在 Table 中指定。

 从DataStream转化通过TableSource 转化
Processing TimetEnv.fromDataStream(stream,"f1,f2,f3.proctime")TableSource实现DefinedProctimeAttributes接口
Event Time原始 DataStream 必须有 timestamp 及 watermark数据中存在类型为 long或 timestamp的时间字段
tEnv.fromDataStream(stream,"f1,f2,f3.rowtime")
tEnv.fromDataStream(stream,"f1.rowtime,f2,f3")
TableSource实现DefinedProctimeAttributes接口

对于Processing Time,我们知道要得到一个Table对象(或者注册一个Table)有两种手段:
● 可以从一个 DataStream 转化成一个 Table
● 直接通过 TableSource 去生成这么一个 Table
对于第一种方法而言,我们只需要在你已有的这些列中(例子中 f1 和 f2 就是两个已有的列),在最后用“列名 .proctime”这种写法就可以把最后的这一列注册为一个 Processing Time,以后在写查询的时候就可以去直接使用这一列。如果 Table是通过 TableSource 生成的,就可以通过实现这一个 DefinedRowtimeAttributes接口,然后就会自动根据你提供的逻辑去生成对应的 Processing Time。
相对而言,在使用 EventTime时则有一个限制,因为EventTime不像 Processing Time那样是随拿随用。如果要从 DataStream去转化得到一个 Table,必须要提前保证原始的 DataStream里面已经存在了 RecordTimestamp 和 watermark。如果想通过TableSource 生成的,也一定要保证要接入的数据里面存在一个类型为 long 或者 timestamp 的时间字段。具体来说,如果要从 DataStream 去注册一个表,和 proctime 类似,只需要加上“列名 .rowtime”就可以。需要注意,如果要用 Processing Time,必须保证要新加的字段是整个 schema 中的最后一个字段,而 Event Time 的时候其实可以去替换某一个已有的列,然后 Flink 会自动的把这一列转化成需要的 rowtime 这个类型

如果是通过 TableSource 生成的,只需要实现 DefinedRowtimeAttributes 接口就可以了。需要说明的一点是,在 DataStream API 这一侧其实不支持同时存在多个 Event Time(rowtime),但是在 Table 这一层理论上可以同时存在多个rowtime。因为 DefinedRowtimeAttributes 接口的返回值是一个对于 rowtime 描述的 List,即其实可以同时存在多个 rowtime 列,在将来可能会进行一些其他的改进,或者基于去做一些相应的优化。

时间列和 Table 操作

指定完了时间列之后,当我们要真正去查询时就会涉及到一些具体的操作。这里我列举的这些操作都是和时间列紧密相关,或者说必须在这个时间列上才能进行的。比如说“Over 窗口聚合”和“Group by 窗口聚合”这两种窗口聚合,在写 SQL 提供参数的时候只能允许你在这个时间列上进行这种聚合。第三个就是时间窗口聚合,你在写条件的时候只支持对应的时间列。最后就是排序,我们知道在一个无尽的数据流上对数据做排序几乎是不可能的事情,但因为这个数据本身到来的顺序已经是按照时间属性来进行排序,所以说如果要对一个 DataStream 转化成 Table 进行排序的话,只能是按照时间列进行排序,当然同时也可以指定一些其他的列,但是时间列这个是必须的,并且必须放在第一位。

为什么说这些操作只能在时间列上进行?
因为我们有的时候可以把到来的数据流就看成是一张按照时间排列好的一张表,而我们任何对于表的操作,其实都是必须在对它进行一次顺序扫描的前提下完成的。大家都知道数据流的特性之一就是一过性,某一条数据处理过去之后,将来其实不太好去访问它。当然因为 Flink 中内部提供了一些状态机制,我们可以在一定程度上去弱化这个特性,但是最终还是不能超越的,限制状态不能太大。所有这些操作为什么只能在时间列上进行,因为这个时间列能够保证我们内部产生的状态不会无限的增长下去,这是一个最终的前提。

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

相关文章

  1. C++智能指针

    1. 智能指针的定义智能指针就是一个类,这个类的构造函数中传入一个普通指针,析构函数中释放传入的指针。智能指针的类都是栈上的对象,所以当函数(或程序)结束时会自动被释放。智能指针利用了RAII(资源获取即初始化)的技术,对普通指针进行封装,使得其行为像一个指针,但…...

    2024/4/9 0:38:56
  2. GitHub仓库验证问题:git push ERROR: You must verify your email address

    如果你不想每次push代码到GitHub仓库的时候总是被提示You must verify your email address你可以试试下面的方法 如果你是window系统 第一步:在git bash里(注意:xxx换成你的邮箱),然后一路回车 ssh-keygen -t rsa -C xxx第二步:到终端敲这个,输出的key就是你的ssh key c…...

    2024/4/12 1:35:52
  3. JavaSe 基础 - 第十章 封装

    JavaSe 基础 - 第十章 封装1、封装1.1、面向对象的三大特征:封装、继承、多态1.2、面向对象的首要特征:封装 。什么是封装?有什么用?2、封装的代码实现的两步传送门 1、封装 1.1、面向对象的三大特征:封装、继承、多态有了封装,才有继承,有了继承,才能说多态。 1.2、面…...

    2024/4/23 13:57:18
  4. BS模式与CS模式的区别

    BS模式(Browser Server) 简称:浏览器服务器 意思就是客户端可以通过浏览器就可以访问服务端 只要你的电脑上装有浏览器就可以访问 不过在美工方面BS不如CS,速度也不如CS快。 如京东,百度网页版本的,只要有浏览器就可以访问 只有当服务器升级你才需要升级。 CS模式(Clien…...

    2024/5/9 11:23:33
  5. Python统计list中特定元素的数量

    使用函数 [ ].count(object)例子 # 统计各类点的数量 for k, col in zip(unique_my_labels, colors):if k == -1:# Black used for noise.col = [0, 0, 0, 1]# 统计各类点的数量count=list(my_labels).count(k)print("label:{},count:{}".format(k,count))...

    2024/5/1 3:26:32
  6. H5+CSS3-----第二天

    表单案例: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><link …...

    2024/4/9 0:38:49
  7. 不同电脑之间共享键鼠:sharemouse

    场景 有一部笔记本(Win10)和一台台式机(Win10),一套蓝牙键鼠。 想要实现两台电脑共享鼠标键盘。 知道有Synergy这个软件,却不太好用(依赖bonjour)且开始收费,于是搜索有无免费易用的共享键鼠软件。 sharemouse 搜到了:sharemouse,使用有几个条件:至少两台电脑 每台电…...

    2024/5/9 10:36:27
  8. cmake 多目录管理

    1准备工作本实验主要在windows 下实现cmake 构建。下载安装camke 和 MinGW。通过命令 camke --version 和 mingw32-make --version(我的是32位计算机)来验证cmake 和 MinGW是否安装成功,如下图所示。如果不成功,很有可能是有关cmake或者 mingw没有设置到计算系统环境变量中…...

    2024/4/11 9:26:33
  9. java8 stream多字段排序

    List<类> list; 代表某集合//返回 对象集合以类属性一升序排序list.stream().sorted(Comparator.comparing(类::属性一));//返回 对象集合以类属性一降序排序 注意两种写法list.stream().sorted(Comparator.comparing(类::属性一).reversed());//先以属性一升序,结果进行…...

    2024/4/16 16:32:55
  10. Docker-修改镜像源

    linux下执行vim /etc/docker/daemon.json{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] }把下面的一个地址放进去后 在执行下面二条命令:wq #保存退出service docker restart #重启docker配置文件Docker中国区官方镜像网易 http://hub-mi…...

    2024/4/23 2:25:50
  11. CSS基础 盒子模型与案例

    目录一.块级标签:二.内联标签:三.盒子模型:1.边框:2.边距:3.margin妙用:4.背景颜色和图片:5.无序列表去掉前标识:6.超链接样式:四.案例: 一.块级标签:如果该标签需要独占一行,则称其为块级标签 h1 p ul li ol dl二.内联标签:如果该标签不会独占一行,则称其为内…...

    2024/5/7 23:12:32
  12. HCIE第五天总结

    一、WAN技术 1.广域网常见接口2.以太网接口接口的核心要素:带宽,距离,成本(造就了TCP/IP),功耗,密度,兼容 涉及问题:路由器有什么功能 路由器是一种什么样的设备 相比交换机 接口类型多 3.POS接口分信道 4.PPP/MPAddress全1原因:点到点不需要地址、二层也不需要地址…...

    2024/4/26 15:50:18
  13. 堆排序——c语言实现

    文章目录堆的概念堆的定义堆的判断堆的特性堆的构造自底向上构造自顶向下构造关于最大堆,最小堆堆排序堆排序的一般过程堆排序样例过程图解c语言代码 堆的概念 堆的定义 堆可以定义为一颗二叉树,树的节点包含键(每个节点一个键),并且满足下面两个条件:堆的形状要求是一颗…...

    2024/4/16 2:23:48
  14. 聊聊jvm几种垃圾收集器

    如果大家对java架构相关感兴趣,可以关注下面公众号,会持续更新java基础面试题, netty, spring boot,spring cloud等系列文章,一系列干货随时送达, 超神之路从此展开, BTAJ不再是梦想!1.Serial收集器(新生代) (1)单线程收集器 (2)采用复制算法,用于新生代垃圾回收 (3)垃…...

    2024/4/9 0:38:45
  15. 【Java】Junit单元测试

    Junit单元测试: 测试分类黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值。白盒测试:需要写代码的。关注程序具体的执行流程。案例 我们创建了一个计算器类,其中有加减法, package com.ahmu.yx.junit; /*** 减法*/ public class Calculator {/*** 加法** @p…...

    2024/4/27 14:47:42
  16. 异常处理

    一、为什么有异常在使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善尽美,在系统运行的时候仍然会出现很多靠代码不能规避的错误,比如:用户的输入格式,读取文件是否存在,网络是否保持畅通等。二、异常异常:在java中,将程序执行中发生不正常情况称为“异常…...

    2024/5/7 21:52:47
  17. LInux知识总结【CentOS7 适用于新手】

    学习完 linux ,我已经把所有的知识点结合整理。采用的版本是centos 7。 在博客中如果用到了其他版本已经全部标记出来了。第一章 开机、重启和用户登录注销 Linux 目录结构: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IyNNkhGu-1594911802847)…...

    2024/5/3 13:02:59
  18. 进程、线程、协程三者之间的联系与区别

    1、进程:进程,直观点说,保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己独立的地址空间,有自己的堆,上级挂靠单位是操作系统。操作系统会以进程为单位,分配系统资源(CPU时间片、内存等资源),进程是资源分配的最小单位。2、线程:线…...

    2024/4/28 23:20:31
  19. 笔记DHCP服务及相关操作

    DHCP服务DHCP的全称是动态主机配置协议,用来自动给客户机分配TCP/IP信息的网络协议。每个DHCP客户机都连接到中央位置的DHCP服务器,该服务包括IP地址、网关、DNS服务器信息的客户网络配置UDP 67:客户端向服务器发送请求UDP 68:服务器向客户端确认1、DHCP租约请求(四部曲)…...

    2024/4/14 13:48:51
  20. 前端能力中台化之路—Fusion Design 成长史(上)

    1.浅谈中台 在开始正文内容之前,先简单聊聊“中台”这个词。 首要要说的是“中台”这个词中台非常火,从去年下半年到现在,互联网届多家知名大公司都公布组织架构调整,纷纷表示要建立各种中台。 另一方面,“中台”这个词暂时还没有一个很学术很权威的定义。笔者在知网搜索“中台…...

    2024/4/27 8:10:07

最新文章

  1. TS流加扰的判断

    一般情况下&#xff0c;1套节目是否加扰 在SDT表中或者包头的加扰位2处判断。 1.SDT表的free_CA_mode0是未加密&#xff0c;1是加密&#xff1b;在SDT表中&#xff0c;只是一个规范&#xff08;如果节目加密了&#xff0c;应该让free_CA_mode1&#xff09;。实际上&#xff0c…...

    2024/5/9 16:22:54
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/7 10:36:02
  3. PCF8591(ADDA转换芯片)

    工具 1.Proteus 8 仿真器 2.keil 5 编辑器 原理图 讲解 PCF8591是一个单片集成、单独供电、低功耗、8-bit CMOS数据获取器件。PCF8591具有4个模拟输入、1个模拟输出和1个串行IC总线接口。PCF8591的3个地址引脚A0, A1和A2可用于硬件地址编程&#xff0c;允许在同个I2C总线上接…...

    2024/5/6 21:59:50
  4. Android Framework学习笔记(2)----系统启动

    Android系统的启动流程 启动过程中&#xff0c;用户可控部分是framework的init流程。init是系统中的第一个进程&#xff0c;其它进程都是它的子进程。 启动逻辑源码参照&#xff1a;system/core/init/main.cpp 关键调用顺序&#xff1a;main->FirstStageMain->SetupSel…...

    2024/5/9 8:36:36
  5. 设计模式:组合模式

    定义 组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式使得客户端可以统一对待单个对象和组合对象。 应用场景 组合模式适用于以下场景: 表达对象的部分-整体层次结构:当你想要表示对象的部分-整…...

    2024/5/7 11:56:24
  6. 416. 分割等和子集问题(动态规划)

    题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义&#xff1a;dp[i][j]表示当背包容量为j&#xff0c;用前i个物品是否正好可以将背包填满&#xff…...

    2024/5/8 19:32:33
  7. 【Java】ExcelWriter自适应宽度工具类(支持中文)

    工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

    2024/5/9 7:40:42
  8. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

    LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon&#xff0c;直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件&#xff0c;我们讨论Spring负载均衡以Spring Cloud2020之后版本为主&#xff0c;学习Spring Cloud LoadBalance&#xff0c;暂不讨论Ribbon…...

    2024/5/9 2:44:26
  9. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

    一、背景需求分析 在工业产业园、化工园或生产制造园区中&#xff0c;周界防范意义重大&#xff0c;对园区的安全起到重要的作用。常规的安防方式是采用人员巡查&#xff0c;人力投入成本大而且效率低。周界一旦被破坏或入侵&#xff0c;会影响园区人员和资产安全&#xff0c;…...

    2024/5/8 20:33:13
  10. VB.net WebBrowser网页元素抓取分析方法

    在用WebBrowser编程实现网页操作自动化时&#xff0c;常要分析网页Html&#xff0c;例如网页在加载数据时&#xff0c;常会显示“系统处理中&#xff0c;请稍候..”&#xff0c;我们需要在数据加载完成后才能继续下一步操作&#xff0c;如何抓取这个信息的网页html元素变化&…...

    2024/5/9 3:15:57
  11. 【Objective-C】Objective-C汇总

    方法定义 参考&#xff1a;https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

    2024/5/9 5:40:03
  12. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

    &#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…...

    2024/5/9 7:40:40
  13. 【ES6.0】- 扩展运算符(...)

    【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

    2024/5/8 20:58:56
  14. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

    文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕&#xff0c;各大品牌纷纷晒出优异的成绩单&#xff0c;摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称&#xff0c;在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁&#xff0c;多个平台数据都表现出极度异常…...

    2024/5/9 1:35:21
  15. Go语言常用命令详解(二)

    文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令&#xff0c;这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

    2024/5/9 4:12:16
  16. 用欧拉路径判断图同构推出reverse合法性:1116T4

    http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b&#xff0c;我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边&#xff0c; b b b 同理&#xff0c;则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

    2024/5/9 7:40:35
  17. 【NGINX--1】基础知识

    1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息&#xff0c;并安装一些有助于配置官方 NGINX 软件包仓库的软件包&#xff1a; apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

    2024/5/8 18:06:50
  18. Hive默认分割符、存储格式与数据压缩

    目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限&#xff08;ROW FORMAT&#xff09;配置标准HQL为&#xff1a; ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

    2024/5/9 7:40:34
  19. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

    文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中&#xff0c;传感器和控制器产生大量周…...

    2024/5/9 1:42:21
  20. --max-old-space-size=8192报错

    vue项目运行时&#xff0c;如果经常运行慢&#xff0c;崩溃停止服务&#xff0c;报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中&#xff0c;通过JavaScript使用内存时只能使用部分内存&#xff08;64位系统&…...

    2024/5/9 5:02:59
  21. 基于深度学习的恶意软件检测

    恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞&#xff0c;例如可以被劫持的合法软件&#xff08;例如浏览器或 Web 应用程序插件&#xff09;中的错误。 恶意软件渗透可能会造成灾难性的后果&#xff0c;包括数据被盗、勒索或网…...

    2024/5/9 4:31:45
  22. JS原型对象prototype

    让我简单的为大家介绍一下原型对象prototype吧&#xff01; 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定&#xff0c;每一个构造函数都有一个 prototype 属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象…...

    2024/5/8 12:44:41
  23. C++中只能有一个实例的单例类

    C中只能有一个实例的单例类 前面讨论的 President 类很不错&#xff0c;但存在一个缺陷&#xff1a;无法禁止通过实例化多个对象来创建多名总统&#xff1a; President One, Two, Three; 由于复制构造函数是私有的&#xff0c;其中每个对象都是不可复制的&#xff0c;但您的目…...

    2024/5/8 9:51:44
  24. python django 小程序图书借阅源码

    开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 用户端&#xff1a; 登录注册&#xff08;含授权登录&#xff09; 首页显示搜索图书&#xff0c;轮播图&#xff0…...

    2024/5/9 6:36:49
  25. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

    C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

    2024/5/9 4:33:29
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57