穿越Flink的时间隧道:解锁实时数据之窗,掌握流处理之巅
目录
Flink中的时间和窗口
1时间语义
1.1Flink中的时间语义
1.1.1处理时间
1.1.2事件时间
1.2那种时间语义更重要
2 水位线
2.1 事件时间和窗口
2.2 什么是水位线
2.3 如何生成水位线
2.3.1使用WatermarkGenerator
2.3.2使用SourceFunction
2.4 水位线的传递
2.5 水位线的总结
2.5.1水位线的作用如下
2.5.2水位线的特性包括
3 窗口
3.1 窗口的概念
3.2 窗口的分类
①时间窗口
②计数窗口
③会话窗口
④全局窗口
3.3 窗口API概述
3.4 窗口分配器
3.5 窗口函数
3.6 测试水位线和窗口的使用
3.7 其他API
3.8 窗口的生命周期
①创建阶段
②加载阶段
③显示阶段
④激活阶段
⑤失去焦点阶段
⑥关闭阶段
⑦销毁阶段
4 迟到数据的处理
4.1 设置水位线延迟时间
①基于时间窗口的水位线延迟
②基于数据量的水位线延迟
③动态调整水位线延迟
4.2 允许窗口处理迟到数据
Flink中的时间和窗口
1时间语义
1.1Flink中的时间语义
我们重新梳理一下流式数据处理的过程。在事件发生之后,生成的数据被收集起来,首先进入分布式消息队列,然后被Flink系统中的Source算子读取消费,进而向下游的转换算子(窗口算子)传递,最终由窗口算子进行计算处理。
1.1.1处理时间:
处理时间是指执行相应操作的机器的系统时间。当流程序在处理 时间上运行时,所有基于时间的操作(如时间窗口)将使用运行各自
操作符的机器 的系统时间。处理时间是最简单的时间概念,不需要在流和机器之间进行协调。它 提供了最佳的性能和最低的延迟。
但是,在分布式和异步环境中,处理时间不提供 确定性,因为它容易受到记录到达系统的速度(例如从消息队列到达系统)以及系统内算子之间流动速度的影响。
1.1.2事件时间:
事件时间是每个独立事件在产生它的设备上发生的时间,通常在 进入Flink之前就已经嵌入在记录中,可以从每个记录中提取该事件时间戳。在事件时间中,数据产生的时间决定了数据处理的过程,而不是当前系统时间。事件时 间程序必须指定如何生成事件Watermarks,用来保证事件时间的有序性。
1.2那种时间语义更重要
在流处理中,事件时间和处理时间都是重要的时间语义,各有其适用场景和优势。
事件时间基于事件的物理时间或者逻辑时间,可以消除不同系统或数据源之间的时间同步问题,使数据处理结果更符合实际情况。使用事件时间,可以将不同源产生的数据按照实际的时间顺序进行整合,这对于很多应用场景是非常关键的,比如实时分析、实时告警等。
处理时间则是基于当前系统处理记录的时间,具有简单易用的特点,不需要关心数据源的时间戳问题,对于数据的处理速度较快。但是处理时间容易受到数据流速率、系统负载等因素的影响,可能会造成时间的延迟或偏移。
因此,具体选择哪种时间语义要根据实际需求和应用场景来决https://xinghuo.xfyun.cn/desk定。在一些需要精确时间排序和时间相关的聚合操作中,事件时间更为重要;而在一些实时性要求较高但不需要精确时间排序的场景中,处理时间可能更加适合。
2 水位线
2.1 事件时间和窗口
事件时间和窗口在流处理中具有重要的作用。事件时间是指每个独立事件在其设备上发生的时间,通常在进入Flink之前就已经嵌入到消息中,并且可以从每条消息中提取出来。事件时间程序必须指定如何生成水印,以保持事件时间的有序性。
窗口是Flink中的一类算子,用于将许多事件按照时间或其他特征分组,从而将每一组作为整体进行分析。窗口是DataStream的逻辑边界,常用的窗口有基于时间的窗口和计数窗口。在时间窗口中,数据按照时间进行分组,每个窗口内的数据可以在同一时间进行计算。计数窗口则根据元素的数量进行分组,分为滚动计数窗口和滑动计数窗口。
事件时间是指每个独立事件在产生它的设备上发生的时间,通常在进入Flink之前就已经嵌入在记录中,可以从每条记录中提取该事件时间戳。而窗口则是Flink中的一类算子,用于将许多事件按照时间或其他特征分组,从而将每一组作为整体进行分析。
在事件时间中,窗口的触发和结束是基于时间戳的,需要考虑到时间戳的排序和延迟问题,以保证计算结果的准确性。同时,事件时间语义和窗口也是相互影响的。在使用事件时间时,需要指定如何生成水印,以保持事件时间的有序性。而窗口的边界则可以看作是事件时间的逻辑边界,用于将事件数据分组进行分析。
2.2 什么是水位线
水位线是一种衡量事件时间进展的机制,用于处理实时数据中的乱序问题。它通常与窗口操作结合使用,以确保在窗口计算时能够正确处理乱序到达的数据。
水位线本质上是一个时间戳,用于指示当前的事件时间进展。在数据流中加入一个时钟标记,记录当前的事件时间,这个标记可以直接广播到下游。当下游任务收到这个标记,就可以更新自己的时钟。
通过水位线,Flink可以在处理乱序数据时,避免无限期地等待延迟数据到达。当到达特定水位线时,Flink认为在那个时间点之前的数据已经全部到达,即使后面还有延迟到达的数据。这样可以触发窗口计算,确保所有并行子任务都能够及时更新事件时间并进行窗口计算。
2.3 如何生成水位线
2.3.1使用WatermarkGenerator:
WatermarkGenerator是Flink提供的用于生成水位线的接口。通过实现该接口,可以根据应用程序的需求自定义水位线的生成逻辑。例如,可以根据数据源的时间戳特性来生成相应的水位线。
2.3.2使用SourceFunction:
SourceFunction是Flink中的一种特殊类型的输入数据源,可以用于生成水位线。通过实现SourceFunction,可以自定义一个水位线生成器,根据特定的时间间隔或时间序列生成水位线。
总之无论使用哪种方法,生成的水位线都需要传递给Flink的WatermarkInput的SourceFunction。通过WatermarkInput,Flink可以检测到水位线的到达,并根据水位线更新事件时间戳,以确保乱序数据的正确处理。
2.4 水位线的传递
水位线是通过数据流进行传递的。当数据流经过Flink的算子时,水位线会随着数据一起传递给下游算子。下游算子接收到数据和对应的水位线后,会根据当前时钟和水位线的比较结果来决定如何处理数据。
对于每个并行子任务,水位线被用作时间基准,以确保数据按照时间顺序进行计算。通过维护一个时钟变量,每个并行子任务可以跟踪当前的时间戳,并根据水位线来更新自己的时钟。
在Flink中,水位线的传递是必要的,因为它可以帮助解决乱序数据处理问题。当数据在分布式系统中传输时,由于网络延迟、数据源延迟等原因,数据可能会乱序到达。通过使用水位线,Flink可以正确地处理这些乱序数据,确保数据的正确性和实时性。
2.5 水位线的总结
水位线是Flink流处理中保证结果正确性的核心机制,可以看作一条特殊的数据记录,它被插入到数据流中作为一个时间戳的标记点,用于衡量事件时间(Event Time)的进展。
2.5.1水位线的作用如下:
①作为衡量事件时间进展的标记,直接广播到下游。
②保证所有并行子任务都可以及时更新事件时间,进行窗口计算。
③在事件时间的流中,唯一的时间尺度。通过观察水位线的大小,可以知道 当前的时间进展。
④用于触发窗口的闭合以及定时器的触发。
水位线的产生基于数据的时间戳,从数据中提取时间戳作为水位线的时间戳。水位线的默认计算公式是“水位线 = 观察到的最大事件时间 - 最大延迟时间 - 1 毫秒”。在数据流开始之前,Flink会插入一个初始水位线,而在数据流结束时,Flink会插入一个终止水位线。
2.5.2水位线的特性包括:
①单调递增的时间戳,确保任务的事件时间时钟一直向前推进。
②可以周期性地生成,不一定在每个数据之后。
③在上下游任务之间传递时,巧妙地避免了分布式系统中没有统一时钟的问题。每个任务都以“处理完之前所有数据”为标准来确定自己的时钟,从而保证窗口处理的结果总是正确的。
3 窗口
3.1 窗口的概念
窗口是一种处理无界流数据的方式,将无限数据切割成有限的“数据块”进行处理。窗口是用来处理无界流的核心,可以很容易地想象成一个固定位置的“框”,数据源源不断地流过来,到某个时间点窗口该关闭了,就停止收集数据、触发计算并输出结果。
窗口的分类包括时间窗口、计数窗口、会话窗口和全局窗口等。其中,时间窗口是最常用的一种窗口,它支持滚动和滑动两种类型。滚动窗口是在固定时间生成一个窗口,例如每小时生成一个窗口;滑动窗口则是在滑动时间生成一个窗口,例如每5分钟生成一个窗口。
在Flink中,窗口是通过WindowedStream来定义的,WindowedStream是DataStream和KeyedStream的组合。通过将数据流划分成多个窗口,可以对每个窗口内的数据进行聚合、分析等操作。
3.2 窗口的分类
窗口的分类主要有以下几种:
①时间窗口:
时间窗口是以时间点来定义窗口的开始与结束,截取出的就是某一段时间的数据。时间窗口的时间范围都是左闭右开的原则,即[start,end)。
②计数窗口:
计数窗口基于元素的个数来截取数据,到达固定的个数时就触发计算并关闭窗口。计数窗口相比时间窗口更加简单,只需要指定窗口大小,就可以把数据分配到对应的窗口当中。
③会话窗口:
会话窗口由一系列事件组合一个指定事件长度的timeout间隔组成,即一段时间没有收到新数据就会生成新的窗口。会话窗口的特点是时间不对齐。
④全局窗口:
全局窗口是一个按照指定的数据条数生成一个Window,与时间无关。
此外,根据窗口分配数据的规则,时间窗口和计数窗口又可以分为滚动窗口和滑动窗口。
滚动窗口:
滑动窗口:
滚动窗口有固定的大小,是一种对数据进行“均匀切片”的划分方式,窗口之间没有重叠,也不会有间隔。滑动窗口滑动窗口是固定窗口的更广义的一种形式,滑动窗口由固定的窗口长度和滑动间隔组成,特点为窗口长度固定,可以有重叠。
3.3 窗口API概述
窗口API是Flink中用于处理无界流数据的重要工具,它提供了对窗口操作的封装和定义。
在Flink中,可以通过WindowedStream来定义窗口操作,它是DataStream和KeyedStream的组合。通过将数据流划分成多个窗口,可以对每个窗口内的数据进行聚合、分析等操作。
窗口API的调用包括以下几个步骤:
①定义窗口:使用WindowedStream来定义窗口操作,并指定窗口的类型、大小、滑动距离等参数。
②定义窗口函数:窗口函数是用于处理每个窗口内数据的函数,可以根据具体需求选择不同的窗口函数,如计数器、累加器等。
③触发窗口计算:根据需要选择合适的触发条件,如时间触发、计数触发等,来触发窗口计算。
④输出结果:将计算结果输出到目标系统中,如数据库、文件等。
3.4 窗口分配器
窗口分配器是Flink中用于分配窗口的组件,用于将数据流划分成多个窗口,以便对每个窗口内的数据进行处理和分析。
在Flink中,有两种常见的窗口分配器:时间窗口分配器和计数窗口分配器。时间窗口分配器基于时间戳来分配窗口,将数据流按照时间划分为不同的窗口。计数窗口分配器则基于元素的个数来分配窗口,将数据流按照固定的大小划分为不同的窗口。
3.5 窗口函数
窗口函数是Flink中用于处理窗口内数据的函数,可以对每个窗口内的数据进行聚合、分析等操作。
常见的窗口函数包括计数器、求和、平均值、最大值、最小值等,可以根据具体需求选择不同的窗口函数。
窗口函数的实现通常包括以下几个步骤:
①定义窗口函数:根据业务需求和数据特性,选择合适的窗口函数,并实现相应的计算逻辑。
②绑定窗口函数到窗口:将窗口函数绑定到具体的窗口上,以便在触发计算时能够调用该函数对窗口内的数据进行处理。
③触发计算:根据触发条件,触发窗口内的数据计算,并调用相应的窗口函数进行数据处理。
④输出结果:将计算结果输出到目标系统中,如数据库、文件等。
总之,窗口函数是Flink中处理无界流数据的重要工具,它可以根据具体需求选择不同的窗口函数,对每个窗口内的数据进行聚合、分析等操作。通过使用合适的窗口函数,可以更好地处理和分析无界流数据,为业务决策提供有力支持。
3.6 测试水位线和窗口的使用
要测试水位线和窗口的使用,可以按照以下步骤进行:
①准备数据源:创建一个数据源,用于生成模拟数据。可以使用随机数生成器或其他方式生成模拟数据,确保数据源能够按照时间戳顺序生成数据。
②创建Flink程序:使用Flink API编写程序,实现水位线和窗口操作。首先定义窗口分配器和窗口函数,然后使用WindowedStream将窗口操作应用到数据流上。
③定义水位线:根据数据源的时间戳特性,定义合适的水位线生成策略。可以使用WatermarkGenerator或SourceFunction生成水位线,并将其传递给下游任务。
④启动Flink程序:将编写好的Flink程序提交给Flink集群执行。确保Flink集群配置正确,能够接收和处理数据。
⑤观察结果:监控Flink程序的执行过程和结果。可以通过查看日志、监控界面或使用打印函数等方式输出结果,观察水位线和窗口操作是否正确执行,并验证计算结果的准确性。
⑥分析和优化:根据观察结果,分析水位线和窗口操作的使用是否符合预期,是否存在问题或瓶颈。根据分析结果进行优化,调整窗口大小、触发条件等参数,提高处理性能和准确性。
3.7 其他API
①DataStream API:DataStream API是Flink中最基本的API,用于处理无界数据流。它提供了丰富的操作符和函数,可以对数据进行各种转换、过滤、聚合等操作。
②KeyedStream API:KeyedStream API是DataStream API的子类,用于处理具有键值的数据流。它提供了基于键的聚合、窗口等操作,可以对具有相同键的数据进行分组、聚合等操作。
③ConnectedStream API:ConnectedStream API用于处理两个相关联的数据流,可以在这两个数据流之间进行关联、组合等操作。它能够将两个数据流中的数据关联起来,以便更好地分析和处理。
④Table API:Table API是Flink中用于处理结构化数据的API,它可以方便地将数据流转换成表格形式,并进行查询和计算。Table API基于SQL语言,支持各种SQL查询和聚合函数。
⑤SQL API:SQL API是Flink中用于处理结构化数据的另一种API,它支持标准的SQL查询和聚合函数。通过使用SQL API,开发人员可以方便地编写SQL查询语句来处理数据流。
3.8 窗口的生命周期
窗口的生命周期主要包括以下几个阶段:
①创建阶段:
当数据流进入Flink程序时,首先会通过PreCreateWindow函数进行预处理,然后通过OnGetMinMaxInfo函数获取每个数据项的最小和最大时间戳。接下来,会调用OnNcCreate函数进行窗口的创建。在这个阶段,窗口的资源还没有完全生成,例如窗口的句柄、图标、光标和背景等。
②加载阶段:
当窗口创建完成后,会进入加载阶段。在这个阶段,Flink会根据窗口的类型和配置,将窗口加载到内存中,并完成窗口的绘制和界面元素的初始化。这个阶段是自动完成的,开发人员通常不需要关心这个阶段的实现细节。
③显示阶段:
当窗口加载完成后,会进入显示阶段。在这个阶段,窗口会显示在屏幕上,并且可以进行各种用户交互操作,例如点击、拖拽等。
④激活阶段:
当用户激活某个窗口时,该窗口就会进入激活状态。在Flink中,窗口的激活状态是通过任务栏和系统菜单来管理的。当用户单击窗口的标题栏或在任务栏中选择该窗口时,系统会将焦点切换到该窗口并将其激活。
⑤失去焦点阶段:
当用户切换到其他窗口或最小化当前窗口时,当前窗口就会失去焦点并进入失去焦点状态。在Flink中,当窗口失去焦点时,会触发失去焦点事件。
⑥关闭阶段:
当用户单击窗口右上角的关闭按钮或在任务栏中选择关闭窗口时,会触发关闭事件。在这个阶段,Flink会执行一些清理操作,例如释放窗口占用的资源。
⑦销毁阶段:
当窗口被销毁时,会触发销毁事件。在这个阶段,窗口对象占用的内存空间会被系统回收。
4 迟到数据的处理
4.1 设置水位线延迟时间
设置水位线延迟时间是为了处理分布式网络传输导致的数据乱序问题。在网络传输中,由于各种原因,数据可能会乱序到达。设置合适的水位线延迟时间,可以确保数据的顺序正确,提高流处理的实时性。
具体设置水位线延迟时间的方法可能因不同的应用程序和数据处理需求而有所不同。一些常见的方法包括:
①基于时间窗口的水位线延迟:
根据时间窗口的大小,设置一个合适的时间延迟作为水位线。例如,如果使用小时时间窗口,可以将水位线延迟设置为几分钟到几秒钟,以确保大部分数据在窗口内到达。
②基于数据量的水位线延迟:
根据数据流的大小,设置一个合适的数据量作为水位线。例如,如果处理的数据量较大,可以将水位线延迟设置为几百毫秒到几秒,以确保大部分数据在触发计算前到达。
③动态调整水位线延迟:
根据实际的数据到达情况和计算结果,动态调整水位线延迟。这种方法需要对数据流进行实时监控和分析,以确定最优的水位线延迟时间。
4.2 允许窗口处理迟到数据
Flink的窗口允许设置延迟时间,允许继续处理迟到数据。当水位线已经到了窗口结束时间,默认窗口就会关闭,那么之后再来的数据就要被丢弃。但是,如果设置了延迟时间,窗口会保持开启状态,等待迟到的数据。每来一条数据,窗口就会再次计算,并将更新后的结果输出。这样就可以逐步修正计算结果,最终得到准确的统计值。
Flink还提供了多种窗口函数来处理迟到数据,如TUMBLE、HOP、OVER、CUMULATE等。这些窗口函数支持延迟时间设置,并且还支持在窗口接收到迟到数据时输出当前窗口的开始时间和结束时间。这可以帮助开发人员更好地了解和处理迟到数据,提高处理结果的准确性。
相关文章:

穿越Flink的时间隧道:解锁实时数据之窗,掌握流处理之巅
目录 Flink中的时间和窗口 1时间语义 1.1Flink中的时间语义 1.1.1处理时间 1.1.2事件时间 1.2那种时间语义更重要 2 水位线 2.1 事件时间和窗口 2.2 什么是水位线 2.3 如何生成水位线 2.3.1使用WatermarkGenerator 2.3.2使用SourceFunction 2.4 水位线的传递 2.5 水位…...

服务器与Ajax
1.初识Ajax Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。 术语ajax最早产生于2005年,Ajax表示Asynchronous JavaScript and XML(异步JavaScript和XML),但是它不是像HTML、JavaScript或CSS这样的一种“正式的”技…...

Electron项目架构方案心得
这里只记录FE的业务流程设计考虑和Electron的业务流程考虑。 一个electron客户端,理想的架构是,底层的能力支持完全由electron底层模块支持。关于electron底层模块的支持,不限于node packages 或者 dll 或者 rust实现的一些东东。而业务流程…...

Java中创建List接口、ArrayList类和LinkedList类的常用方法(一)
List接口 要了解List接口,就不得不说起Java的集合框架。 (该图来自菜鸟教程) Collection接口和Map接口 Java 集合框架主要包括两种类型的容器,集合Collection和图Map。 Collection接口代表了单列集合,它包含了一组…...

顶级开源社区开发者体验实践分享
实践一:开发者贡献指南 实践二:Dev Container Setup(bonus) 实践三:Good First Issues 实践三:Good Second Issues(bonus) 实践四:RFC 机制 实践五:完善 CI I…...

STM32之RTC实时时钟
一、实时时钟概述 1、实时时钟介绍 英文缩写:RTC。显示年、月、日、时、分、秒、星期,自动计算闰年,能够区分每个月的天数。 RTC特点:能从RTC获取到具体的日期时间,断掉后再开机时间仍然准确(需要纽扣电池ÿ…...

Java JVM 堆、栈、方法区详解
目录 1. 栈 2. 堆 3. 方法区 4. 本地方法栈 5. 程序计数器 首先来看一下JVM运行时数据区有哪些。 1. 栈 在介绍JVM栈之前,先了解一下 栈帧 概念。 栈帧:一个栈帧随着一个方法的调用开始而创建,这个方法调用完成而销毁。栈帧内存放者方…...

Oracle篇—分区表和分区索引的介绍和分类(第一篇,总共五篇)
☘️博主介绍☘️: ✨又是一天没白过,我是奈斯,DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux,也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注❣…...

Vue中的模式和环境变量
文章目录 一、介绍二、配置1、环境文件2、变量使用 三、读取环境文件 一、介绍 vue官网:https://cli.vuejs.org/zh/guide/mode-and-env.html模式是 Vue CLI 项目中一个重要的概念。默认情况下,一个 Vue CLI 项目有三个模式 开发环境:develop…...

用ChatGPT教学、科研!亚利桑那州立大学与OpenAI合作
亚利桑那州立大学(简称“ASU”)在官网宣布与OpenAI达成技术合作。从2024年2月份开始,为所有学生提供ChatGPT企业版访问权限,主要用于学习、课程作业和学术研究等。 为了帮助学生更好地学习ChatGPT和大语言模型产品,AS…...

问题解决:django模型查询报错,找不到数据库表
django项目,使用的postgresql数据库,建了多个模式,模型查询时一直默认查public的表 1. 问题: django.db.utils.ProgrammingError: relation "ip_management_app.table" does not exist 2. 代码: class …...

持续集成工具Jenkins的使用之安装篇(一)
Jenkins是一个基于Java开发的开源的一种持续集成工具,主要用于环境部署,监控重复性的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。要想使用它,你就必须的先安装,接下来我们就介绍下J…...

【JavaScript】面向后端快速学习 笔记
文章目录 JS是什么?一、JS导入二、数据类型 变量 运算符三、流程控制四、函数五、对象 与 JSON5.1 对象5.2 JSON5.3 常见对象1. 数组2. Boolean对象3. Date对象4. Math5. Number6. String 六、事件6.1 常用方法1. 鼠标事件2. 键盘事件3. 表单事件 6.2 事件的绑定**1…...

笨蛋学设计模式行为型模式-命令模式【19】
行为型模式-命令模式 8.6命令模式8.6.1概念8.6.2场景8.6.3优势 / 劣势8.6.4命令模式可分为8.6.5命令模式8.6.6实战8.6.6.1题目描述8.6.6.2输入描述8.6.6.3输出描述8.6.6.4代码 8.6.7总结 8.6命令模式 8.6.1概念 命令模式允许将请求封装成一个对象(命令对象,包含…...

windows用msvc编译opencv、opencv-python、opencv_contrib、cuda
如要用mingw编译opencv,参考我另外一篇文章https://blog.csdn.net/weixin_44733606/article/details/135741806。 如要用Ubuntu编译opencv,参考我另外一篇文章https://blog.csdn.net/weixin_44733606/article/details/131720128。 一、安装VS2022&…...

JVM实战篇:GC调优
目录 一.GC调优的核心指标 1.1吞吐量(Throughput) 1.2延迟(Latency) 1.3内存使用量 二.GC调优的方法 2.1监控工具 Jstat工具 VisualVm插件 Prometheus Grafana 2.2诊断原因 GC日志 GC Viewer GCeasy 2.3常见的GC模…...

C# 获取QQ会话聊天信息
目录 利用UIAutomation获取QQ会话聊天信息 效果 代码 目前遇到一个问题 其他解决办法 利用UIAutomation获取QQ会话聊天信息 效果 代码 AutomationElement window AutomationElement.FromHandle(get.WindowHwnd); AutomationElement QQMsgList window.FindFirst(Tr…...

Java中的内存溢出与内存泄漏深度解析
目录 引言 一. 内存溢出(Memory Overflow) 1.1 堆内存溢出 1.2 栈内存溢出 1.3 内存溢出的解决策略 1.3.1 优化对象的创建和销毁 1.3.2 调整堆内存大小 1.3.3 使用内存分析工具 1.3.4 避免创建过大的对象 1.3.5 定期清理不再使用的对象 二、…...
计算机网络安全——密码学入门
网络安全是指在网络领域、专业领域的网络安全包括在基础计算机网络基础设施中所做的规定,网络管理员采取的策略来保护网络及网络可访问资源免受未经授权的访问,以及对其有效性(或缺乏)的持续不断的监控和测量的结合。 1. 密码学的…...

go语言(八)---- map
map的声明方式有以下三种。 package mainimport "fmt"func main() {//第一种声明方式//声明map1是一个map类型,key是String,value是Stringvar myMap1 map[string] stringif myMap1 nil {fmt.Println("myMap1 是一个空map")}//在使…...

Flutter:跨平台移动应用开发的未来
Flutter:跨平台移动应用开发的未来 引言 Flutter的背景和概述 Flutter是由Google开发的一个开源UI工具包,用于构建漂亮、快速且高度可定制的移动应用程序。它于2017年首次发布,并迅速引起了开发者们的关注。Flutter采用了一种全新的方法来…...

二维码地址门牌管理系统:智慧城市新篇章
文章目录 前言一、轮播广告位:全面信息传达二、智能化管理:应对挑战三、安全保障:市民隐私优先四、广泛应用:助力城市建设 前言 随着科技的飞速发展,城市的智能化已成不可逆转的趋势。二维码地址门牌管理系统作为新一…...

学习JavaEE的日子 day14 继承,super(),this(),重写
Day14 1.继承的使用 理解:子类继承父类所有的属性和方法 使用场景:多个类似的类,有相同的属性和方法,就可以把相同属性和方法抽取到父类 优点:减少代码的冗余; 使类与类之间产生了关系(多态的前提) 缺点&a…...

一文梳理Windows自启动位置
不同版本的Windows开机自启动的位置略有出入,一般来说,Windows自启动的位置有:自启动文件夹、注册表子键、自动批处理文件、系统配置文件等。如果计算机感染了木马,很有可能就潜伏于其中!本文将说明这些常见的Windows开…...

【Java 设计模式】行为型之策略模式
文章目录 1. 定义2. 应用场景3. 代码实现结语 策略模式(Strategy Pattern)是一种行为型设计模式,定义了一系列算法,并将每个算法封装起来,使它们可以互相替换。策略模式允许客户端在运行时选择算法的具体实现ÿ…...

go实现判断20000数据范围内哪些是素数(只能被1和它本身整除的数),采用多协程和管道实现
实现一个并发程序,用于寻找 20000 以内的所有素数。使用了 Goroutines 和 Channels 来分发和处理任务,并通过 WaitGroup(实现为 exitChan)来同步 Goroutines 的退出。 一.GO代码 package mainimport ("fmt""time…...

GPT只是开始,Autonomous Agents即将到来
生成式AI虽然很早便已经引起了广泛关注,但直到ChatGPT的出现,许多公司的领导层才切身感受到了大语言模型(LLM)带来的深远影响。面临这种行业变革,诸多企业正争先恐后地加入到这场潮流中,但生成式AI的进步速…...

ubuntu source: not found
1、原因分析: shell 的解释器不是 bash,需把 shell 的解释器更改为 bash 2、ls -l /bin/sh 3、sudo dpkg-reconfigure dash 选择No 4、ls -l /bin/sh 5、reboot(此步必须持续,否则无效)...

Rancher部署k8s集群测试安装nginx(节点重新初始化方法,亲测)
目录 一、安装前准备工作计算机升级linux内核时间同步Hostname设置hosts设置关闭防火墙,selinux关闭swap安装docker 二、安装rancher部署rancher 三、安装k8s安装k8s集群易错点,重新初始化 四、安装kutectl五、测试安装nginx工作负载 一、安装前准备工作…...

SpringBoot结合thymeleaf的HTML页面不能跳转问题踩坑
问题描述:写了一个上传接口,controller不能跳转到thymeleaf的HTML页面“uploadsuccess”,试了好几个方法,都不起作用,后来发现是注解ResponseBody 的原因,把ResponseBody 去掉,问题解决,记录一下…...