Flink吐血总结,学习与面试收藏这一篇就够了!!!

Flink保姆级教程,超详细,教学集成多个第三方工具(从入门到精通) Flink 允许你通过实现接口来创建自定义数据源。// 定义一个自定义数据源Thread.sleep(1000) // 模拟数据生成延迟// 创建执行环境// 添加自定义数据源// 打印数据流// 启动 Flink 作业以上示例展示了如何在 Scala 中使用 Flink DataStream API 来从不同的数据源获取数据。每个示例都包含了创建数据流的代码和对数据流进行操作的注释。这些示例可以作为构建更复杂 Flink 流处理作业的起点。 阅读详情

 

Flink 核心特点

批流一体

所有的数据都天然带有时间的概念,必然发生在某一个时间点。把事件按照时间顺序排列起来,就形成了一个事件流,也叫作数据流。「无界数据」是持续产生的数据,所以必须持续地处理无界数据流。「有界数据」,就是在一个确定的时间范围内的数据流,有开始有结束,一旦确定了就不会再改变。

可靠的容错能力

  • 集群级容错

    • 集群管理器集成(Hadoop YARN、Mesos或Kubernetes)

    • 高可用性设置(HA模式基于ApacheZooKeeper)

  • 应用级容错( Checkpoint)

    • 一致性(其本身支持Exactly-Once 语义)

    • 轻量级(检查点的执行异步和增量检查点)

  • 高吞吐、低延迟

运行时架构

运行时架构图

  • Flink 客户端

    • 提交Flink作业到Flink集群

    • Stream Graph 和 Job Graph构建

  • JobManager

    • 资源申请

    • 任务调度

    • 应用容错

  • TaskManager

    • 接收JobManager 分发的子任务,管理子任务

    • 任务处理(消费数据、处理数据)

Flink 应用

数据流

DataStream 体系

  1. DataStream(每个DataStream都有一个Transformation对象)

  2. DataStreamSource(DataStream的起点)

  3. DataStreamSink(DataStream的输出)

  4. KeyedStream(表示根据指定的Key记性分组的数据流)

  5. WindowdeStream & AllWindowedStream(根据key分组且基于WindowAssigner切分窗口的数据流)

  6. JoinedStreams & CoGroupedStreams

    1. JoinedStreams底层使用CoGroupedStreams来实现

    2. CoGrouped侧重的是Group,对数据进行分组,是对同一个key上的两组集合进行操作

    3. Join侧重的是数据对,对同一个key的每一对元素进行操作

  7. ConnectedStreams(表示两个数据流的组合)

  8. BroadcastStream & BroadcastConnectedStream(DataStream的广播行为)

  9. IterativeStream(包含IterativeStream的Dataflow是一个有向有环图)

  10. AsyncDataStream(在DataStream上使用异步函数的能力)

处理数据API

处理数据API

核心抽象

环境对象

 

数据流元素

 

  1. StreamRecord(数据流中的一条记录|事件)

    1. 数据的值本身

    2. 时间戳(可选)

  2. LatencyMarker(用来近似评估延迟)

    1. 周期性的在数据源算子中创造出来的时间戳

    2. 算子编号

    3. 数据源所在的Task编号

  3. Watemark(是一个时间戳,用来告诉算子所有时间早于等于Watermark的事件或记录都已经到达,不会再有比Watermark更早的记录,算子可以根据Watermark触发窗口的计算、清理资源等)

  4. StreamStatus(用来通知Task是否会继续接收到上游的记录或者Watermark)

    1. 空闲状态(IDLE)。

    2. 活动状态(ACTIVE)。

Flink 异步IO

原理

顺序输出模式(先收到的数据元素先输出,后续数据元素的异步函数调用无论是否先完成,都需要等待)

无序输出模式(先处理完的数据元素先输出,不保证消息顺序)

数据分区

  • ForwardPartitioner(用于在同一个OperatorChain中上下游算子之间的数据转发,实际上数据是直接传递给下游的)

  • ShufflePartitioner(随机将元素进行分区,可以确保下游的Task能够均匀地获得数据)

  • ReblancePartitioner(以Round-robin的方式为每个元素分配分区,确保下游的Task可以均匀地获得数据,避免数据倾斜)

  • RescalingPartitioner(用Round-robin选择下游的一个Task进行数据分区,如上游有2个Source,下游有6个Map,那么每个Source会分配3个固定的下游Map,不会向未分配给自己的分区写入数据)

  • BroadcastPartitioner(将该记录广播给所有分区)

  • KeyGroupStreamPartitioner(KeyedStream根据KeyGroup索引编号进行分区,该分区器不是提供给用户来用的)

窗口

实现原理

 

  • WindowAssigner(用来决定某个元素被分配到哪个/哪些窗口中去)

  • WindowTrigger(决定一个窗口何时能够呗计算或清除,每一个窗口都拥有一个属于自己的Trigger)

  • WindowEvictor(窗口数据的过滤器,可在Window Function 执行前或后,从Window中过滤元素)

    • CountEvictor:计数过滤器。在Window中保留指定数量的元素,并从窗口头部开始丢弃其余元素

    • DeltaEvictor:阈值过滤器。丢弃超过阈值的数据记录

    • TimeEvictor:时间过滤器。保留最新一段时间内的元素

Watermark (水印)

作用

用于处理乱序事件,而正确地处理乱序事件,通常用Watermark机制结合窗口来实现

DataStream Watermark 生成

  1. Source Function 中生成Watermark

  2. DataStream API 中生成Watermark

    1. AssingerWithPeriodicWatermarks (周期性的生成Watermark策略,不会针对每个事件都生成)

    2. AssingerWithPunctuatedWatermarks (对每个事件都尝试进行Watermark的生成,如果生成的结果是null 或Watermark小于之前的,则不会发往下游)

内存管理

自主内存管理

原因

  1. JVM内存管理的不足

    1. 有效数据密度低

    2. 垃圾回收(大数据场景下需要消耗大量的内存,更容易触发Full GC )

    3. OOM 问题影响稳定性

    4. 缓存未命中问题(Java对象在堆上存储时并不是连续的)

  2. 自主内存管理

    1. 堆上内存的使用、监控、调试简单,堆外内存出现问题后的诊断则较为复杂

    2. Flink有时需要分配短生命周期的MemorySegment,在堆外内存上分配比在堆上内存开销更高。

    3. 在Flink的测试中,部分操作在堆外内存上会比堆上内存慢

    4. 大内存(上百GB)JVM的启动需要很长时间,Full GC可以达到分钟级。使用堆外内存,可以将大量的数据保存在堆外,极大地减小堆内存,避免GC和内存溢出的问题。

    5. 高效的IO操作。堆外内存在写磁盘或网络传输时是zero-copy,而堆上内存则至少需要1次内存复制。

    6. 堆外内存是进程间共享的。也就是说,即使JVM进程崩溃也不会丢失数据。这可以用来做故障恢复(Flink暂时没有利用这项功能,不过未来很可能会去做)

    7. 堆外内存的优势

    8. 堆外内存的不足

内存模型

内存模型图

MemorySegment(内存段)

一个MemorySegment对应着一个32KB大小的内存块。这块内存既可以是堆上内存(Java的byte数组),也可以是堆外内存(基于Netty的DirectByteBuffer)

图解

结构

  • BYTE_ARRAY_BASE_OFFSET(二进制字节数组的起始索引)

  • LITTLE_ENDIAN(判断是否为Little Endian模式的字节存储顺序,若不是,就是Big Endian模式)

    • Big Endian:低地址存放最高有效字节(MSB)

    • Little Endian:低地址存放最低有效字节(LSB)X86机器

  • HeapMemory(如果MemeorySegment使用堆上内存,则表示一个堆上的字节数组(byte[]),如果MemorySegment使用堆外内存,则为null)

  • address(字节数组对应的相对地址)

  • addressLimit(标识地址结束位置)

  • size(内存段的字节数)

实现

  • HybirdMemorySegment:用来分配堆上和堆外内存和堆上内存,Flink 在实际使用中只使用了改方式。原因是当有多个实现时,JIT无法直接在编译时自动识别优化

  • HeapMemorySegment:用来分配堆上内存,实际没有实现

MemroyManager(内存管理器)

实际申请的是堆外内存,通过RocksDB的Block Cache和WriterBufferManager参数来限制,RocksDB使用的内存量

State(状态)

状态管理需要考虑的因素:

  1. 状态数据的存储和访问

  2. 状态数据的备份和恢复

  3. 状态数据的划分和动态扩容

  4. 状态数据的清理

分类

状态存储

  • MemoryStateBackend:纯内存,适用于验证、测试,不推荐生产环境

  • FsStateBackend:内存+文件,适用于长周期大规模的数据

  • RocksDBStateBackend:RocksDB,适用于长周期大规模的数据

重分布

  • ListState:并行度在改变的时候,会将并发上的每个List都取出,然后把这些List合并到一个新的List,根据元素的个数均匀分配给新的Task

  • UnionListState:把划分的方式交给用户去做,当改变并发的时候,会将原来的List拼接起来,然后不做划分,直接交给用户

  • BroadcastState:变并发的时候,把这些数据分发到新的Task即可

  • KeyState:Key-Group数量取决于最大并行度(MaxParallism)

作业提交

资源管理

关系图

Slot选择策略

  • LocationPreferenceSlotSelectionStrategy(位置优先的选择策略)

    • DefaultLocationPreferenceSlotSelectionStrategy(默认策略),该策略不考虑资源的均衡分配,会从满足条件的可用Slot集合选择第1个

    • EvenlySpreadOutLocationPreferenceSlotSelectionStrategy(均衡策略),该策略考虑资源的均衡分配,会从满足条件的可用Slot集合中选择剩余资源最多的Slot,尽量让各个TaskManager均衡地承担计算压力

  • PreviousAllocationSlotSelectionStrategy(已分配Slot优先的选择策略),如果当前没有空闲的已分配Slot,则仍然会使用位置优先的策略来分配和申请Slot

调度

  • SchedulerNG (调度器)

    • 作用

    • 实现

    1. DefaultScheduler(使用ScchedulerStrategy来实现)

    2. LegacyScheduler(实际使用了原来的ExecutionGraph的调度逻辑)

    1. 作业的生命周期管理(开始调度、挂起、取消)

    2. 作业执行资源的申请、分配、释放

    3. 作业状态的管理(发布过程中的状态变化、作业异常时的FailOver

    4. 作业的信息提供,对外提供作业的详细信息

  • SchedulingStrategy(调度策略)

    • 实现

    1. EagerSchelingStrategy(该调度策略用来执行流计算作业的调度)

    2. LazyFromSourceSchedulingStrategy(该调度策略用来执行批处理作业的调度)

    1. startScheduling:调度入口,触发调度器的调度行为

    2. restartTasks:重启执行失败的Task,一般是Task执行异常导致的

    3. onExecutionStateChange:当Execution的状态发生改变时

    4. onPartitionConsumable:当IntermediateResultParitititon中的数据可以消费时

  • ScheduleMode(调度模式)

    1. Eager调度(该模式适用于流计算。一次性申请需要所有的资源,如果资源不足,则作业启动失败。)

    2. Lazy_From_Sources分阶段调度(适用于批处理。从Source Task开始分阶段调度,申请资源的时候,一次性申请本阶段所需要的所有资源。上游Task执行完毕后开始调度执行下游的Task,读取上游的数据,执行本阶段的计算任务,执行完毕之后,调度后一个阶段的Task,依次进行调度,直到作业执行完成)

    3. Lazy_From_Sources_With_Batch_Slot_Request分阶段Slot重用调度(适用于批处理。与分阶段调度基本一样,区别在于该模式下使用批处理资源申请模式,可以在资源不足的情况下执行作业,但是需要确保在本阶段的作业执行中没有Shuffle行为)

关键组件

JobMaster

  1. 调度执行和管理(将JobGraph转化为ExecutionGraph,调度Task的执行,并处理Task的异常)

    • InputSplit 分配

    • 结果分区跟踪

    • 作业执行异常

  2. 作业Slot资源管理

  3. 检查点与保存点

  4. 监控运维相关

  5. 心跳管理

Task

结构

作业调度失败

失败异常分类

  • NonRecoverableError:不可恢复的错误。此类错误意味着即便是重启也无法恢复作业到正常状态,一旦发生此类错误,则作业执行失败,直接退出作业执行

  • PartitionDataMissingError:分区数据不可访问错误。下游Task无法读取上游Task产生的数据,需要重启上游的Task

  • EnvironmentError:环境的错误。这种错误需要在调度策略上进行改进,如使用黑名单机制,排除有问题的机器、服务,避免将失败的Task重新调度到这些机器上。

  • RecoverableError:可恢复的错误

容错

容错保证语义

  • At-Most-Once(最多一次)

  • At-Leat-Once(最少一次)

  • Exactly-Once(引擎内严格一次)

  • End-to-End Exaacly-Once (端到端严格一次)

保存点恢复

  1. 算子顺序的改变,如果对应的UID没变,则可以恢复,如果对应的UID变了则恢复失败。

  2. 作业中添加了新的算子,如果是无状态算子,没有影响,可以正常恢复,如果是有状态的算子,跟无状态的算子一样处理。

  3. 从作业中删除了一个有状态的算子,默认需要恢复保存点中所记录的所有算子的状态,如果删除了一个有状态的算子,从保存点恢复的时候被删除的OperatorID找不到,所以会报错,可以通过在命令中添加-allowNonRestoredState (short: -n)跳过无法恢复的算子。

  4. 添加和删除无状态的算子,如果手动设置了UID,则可以恢复,保存点中不记录无状态的算子,如果是自动分配的UID,那么有状态算子的UID可能会变(Flink使用一个单调递增的计数器生成UID,DAG改版,计数器极有可能会变),很有可能恢复失败。

  5. 恢复的时候调整并行度,Flink1.2.0及以上版本,如果没有使用作废的API,则没问题;1.2.0以下版本需要首先升级到1.2.0才可以。

端到端严格一次

前提条件

  • 数据源支持断点读取

  • 外部存储支持回滚机制或者满足幂等性

图解

 

实现

TwoPhaseCommitSinkFunction

  1. beginTransaction,开启一个事务,在临时目录中创建一个临时文件,之后写入数据到该文件中。此过程为不同的事务创建隔离,避免数据混淆。

  2. preCommit。预提交阶段。将缓存数据块写出到创建的临时文件,然后关闭该文件,确保不再写入新数据到该文件,同时开启一个新事务,执行属于下一个检查点的写入操作。

  3. commit。在提交阶段,以原子操作的方式将上一阶段的文件写入真正的文件目录下。如果提交失败,Flink应用会重启,并调用TwoPhaseCommitSinkFunction#recoverAndCommit方法尝试恢复并重新提交事务。

  4. abort。一旦终止事务,删除临时文件。

Flink SQL

关系图

FLINK API

DataStrem JOIN

Window JOIN

stream.join(otherStream)
    .where(<KeySelector>)
    .equalTo(<KeySelector>)
    .window(<WindowAssigner>)
    .apply(<JoinFunction>)

Tumbling Window Join

DataStream<Integer> orangeStream = ...
DataStream<Integer> greenStream = ...

orangeStream.join(greenStream)
    .where(<KeySelector>)
    .equalTo(<KeySelector>)
    .window(TumblingEventTimeWindows.of(Time.milliseconds(2)))
    .apply (new JoinFunction<Integer, Integer, String> (){
        @Override
        public String join(Integer first, Integer second) {
            return first + "," + second;
        }
    });

Sliding Window Join

DataStream<Integer> orangeStream = ...
DataStream<Integer> greenStream = ...

orangeStream.join(greenStream)
    .where(<KeySelector>)
    .equalTo(<KeySelector>)
    .window(SlidingEventTimeWindows.of(Time.milliseconds(2) /* size */, Time.milliseconds(1) /* slide */))
    .apply (new JoinFunction<Integer, Integer, String> (){
        @Override
        public String join(Integer first, Integer second) {
            return first + "," + second;
        }
    });

Session Window Join

DataStream<Integer> orangeStream = ...
DataStream<Integer> greenStream = ...

orangeStream.join(greenStream)
    .where(<KeySelector>)
    .equalTo(<KeySelector>)
    .window(EventTimeSessionWindows.withGap(Time.milliseconds(1)))
    .apply (new JoinFunction<Integer, Integer, String> (){
        @Override
        public String join(Integer first, Integer second) {
            return first + "," + second;
        }
    });


大数据左右手

技术如同手中的水有了生命似的,汇聚在了一起。作为大数据开发工作者,致力于大数据技术的学习与工作,分享大数据原理、架构、实时、离线、面试与总结,分享生活思考与读书见解。总有适合你的那一篇。

关注公众号!!!

和我联系吧,加群交流大数据知识,一起成长~~~

 

Flink真实面试经验 群里小伙伴的面试经验 富德保险 电话1面 30分钟: 1-自我介绍 2-介绍一下你最熟悉的项目? 3-你用Flink消费Kafka里面的数据做了什么处理? 4-Hive数仓的分层每层都做了一些什么操作? 5-对于报表展示这一块你对 Js Echarts 了解吗? 6-有这样一个场景: 你同时要用到流试过来的数据 和 数仓中的历史数据你知道怎么做的吗? 或者可不可以做到? 7-你对Spark了解吗? 说一下SparkStreaming 和 Flink的区别? 8-经过流试程序ETL的数据落地到了 MySQL 阅读详情

相关推荐

史上最全的大数据开发八股文【自己的吐血总结】

我本硕都是双非计算机专业,从研一下开始学习大数据开发的相关知识,从找实习到秋招,我投递过100+公司,拿到过10+的offer,包括滴滴、字节、蚂蚁、携程、蔚来、去哪儿等大厂(岗位都是大数据开发),现在已经签约蚂蚁。秋招一路走来,踩过不少坑,比如,刚开始学习大数据的时候,看见那么多的组件框架,不知道如何下手;还有在找工作的时候,不知道如何做好充分的准备等等问题。接下来我主要介绍 大数据开发的学习路线,以及八股文总结相关内容。

qq_42397330的博客 1万+

Flink学习——基本概述

apache flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行状态计算。

five小点心的博客 1611

吐血整理出来的大数据知识点,你掌握多少?

文章目录写在前面正片语言工具类Java实现线程的两种方式集合List集合ArrayListLinkedListSet集合HashSet二叉查找树TreeSetLinkedHashsetMap集合TreeMapHashTableJVM方法区:(被加载的信息,常量,静态变量编译后的代码等数据)虚拟机栈:(java方法服务,储存局部变量方法出口等)本地方法栈堆(对象实例创建,垃圾回收操作)程序计数器Java自带哪几种线程池?(4)HashMap和HashTable区别TreeSet和HashSet区别String

啊晨 2936

Flink 快速入门

本文详细介绍了Apache Flink的系统架构和核心概念,适合深入学习和理解Flink的开发者。文章以Standalone会话模式为例,详细解析了Flink的作业提交和执行流程,包括客户端、JobManager、TaskManager等组件的功能与交互。JobManager作为任务管理和调度的核心,包含JobMaster、资源管理器和分发器三个组件,分别负责作业管理、资源分配和任务分发。TaskManager则是实际执行任务的进程,负责数据流的具体计算。文章还介绍了如何在本地IDEA中运行Flink程序并

qq_45469225的博客 5447

大数据知识面试题-Flink(2022版)

Flink是一个面向流处理和批处理的分布式数据计算引擎,能够基于同一个Flink 运行,可以提供流处理和批处理两种类型的功能。 在 Flink 的世界观中,一切都是由流组成的,离线数据是有界的流;实时数据是一个没有界限的流:这就是所谓的有界流和无界流。Flink可以完全独立于Hadoop,在不依赖Hadoop组件下运行。但是做为大数据的基础设施,Hadoop体系是任何大数据框架都绕不过去的。Flink可以集成众多 Hadooop 组件,例如Yarn、Hbase、HDFS等等。例如,Flink可以和Yarn集

拉格朗日的学习笔记 5412

大数据治理技术架构设计同态加密(HE)+联邦学习(FL)数据质量检测工具集Flink实时处理点击流数据

大数据治理已从单纯的技术问题演变为企业战略能力。通过文中展示的技术方案与行业实践可见,只有将治理能力深度嵌入数据全生命周期,才能实现从“成本中心”到“价值引擎”的跨越。代码仓库参考数据质量检测工具集:https://github.com/dgov/dq-framework智能血缘解析引擎:https://gitlab.com/metadata-lab/lineage-ai学习教程(传送门)1、掌握JAVA入门到进阶知识(持续写作中……2、学会Oracle数据库用法(创作中……

王大师企业官方博客 2952

2021超全大数据面试宝典,吐血总结十万字,大数据面试收藏这一篇就够了

本文最新版已发布至公众号【五分钟学大数据】 获取此套面试题最新pdf版,请搜索公众号【五分钟学大数据】,对话框发送面试宝典 扫码获取最新PDF版: 版本 时间 描述 V1.0 2020-02-18 创建 V1.2 2020-06-17 新增 spark 、flink相关面试题 V1.3 ...

yuan_more的博客 1万+

我的二进制漏洞挖掘学习路线

漏洞挖掘也分好多方向:浏览器漏挖,虚拟化,iot,车联网,应用安全等。而且也要区分一下平台,Linux,Android,Windows,还有一些其他的系统。在基础知识拿捏以后,Windows下如OD,windbg,x64dbg。IDA,GDB要会并联调。然后需要了解一下漏洞的知识,漏洞利用的知识。可以从复现漏洞,CTF来学习,学习完之后就可以通过审计源码或者反汇编二进制程序来挖掘。然后就是练就行了,多关注一下最新安全消息,安全漏洞。

qq_36918532的博客 4944

Flink吐血总结,学习与面试收藏这一篇就够了

Flink Flink 核心特点 批流一体 所有的数据都天然带有时间的概念,必然发生在某一个时间点。把事件按照时间顺序排列起来,就形成了一个事件流,也叫作数据流。「无界数据」是持续产生的数据,所以必须持续地处理无界数据流。「有界数据」,就是在一个确定的时间范围内的数据流,有开始有结束,一旦确定了就不会再改变。 可靠的容错能力 集群级容错 集群管理器集成(Hadoop YARN、Mesos或Kubernetes) 高可用性设置(HA模式基于ApacheZooKeeper

m0_67322837的博客 318

微信好友恢复全攻略(2025年3月更新)

适用于仅被拉黑场景(成功率100%)针对7天内误删场景(成功率78%)

2301_77933942的博客 1万+

Matlab子图排版终极指南:从tight_subplot到tiledlayout的实战对比

本文深入对比Matlab中两大子图排版工具:社区经典函数tight_subplot与官方现代布局管理器tiledlayout。针对默认subplot产生的子图间距与边缘距离问题,详细解析两者的设计哲学、参数控制与实战应用,帮助用户根据版本与需求选择最佳方案,实现高效、精确且美观的多子图排版。

weixin_29048309的博客 360

Flink吐血总结,学习与面试收藏这一篇就够了!

Flink吐血总结,学习与面试收藏这一篇就够了!

u011250186的博客 474

告别CAPL编程!用Matlab/Simulink+CANoe实现复杂ECU仿真的5个技巧

本文介绍了如何利用Matlab/Simulink与CANoe进行联合仿真,以替代复杂的CAPL编程,高效实现复杂ECU仿真。文章分享了5个核心技巧,涵盖信号映射、模型编译集成、实时参数调整、性能优化及数据分析,帮助算法工程师构建稳定强大的仿真环境,显著提升开发与测试效率。

rgv234567的博客 298

Flink框架吐血总结,学习与面试收藏这一篇就够了,大数据必备知识体系

这块内存既可以是堆上内存(Java的byte数组),也可以是堆外内存(基于Netty的DirectByteBuffer)实际申请的是堆外内存,通过RocksDB的Block Cache和WriterBufferManager参数来限制,RocksDB使用的内存量。顺序输出模式(先收到的数据元素先输出,后续数据元素的异步函数调用无论是否先完成,都需要等待),就是在一个确定的时间范围内的数据流,有开始有结束,一旦确定了就不会再改变。作业状态的管理(发布过程中的状态变化、作业异常时的FailOver。

程序源日志的博客 311

树莓派CM4 PCIe扩展方案与ASM1184e芯片应用

PCIe(Peripheral Component Interconnect Express)是计算机硬件中重要的高速串行总线标准,广泛应用于存储、网络等设备连接。其核心原理是通过差分信号实现高带宽传输,PCIe Gen2 x1的理论带宽可达5Gbps。在嵌入式开发中,PCIe扩展技术能有效解决单板计算机接口不足的问题,特别适合树莓派等微型平台。ASMedia ASM1184e作为PCIe交换芯片,可将单个接口扩展为多个,支持热插拔且免驱动,极大提升了工程灵活性。通过PCIe交换机方案,开发者能在树莓派CM

weixin_42602368的博客 423

基于 LSTM 的船舶轨迹预测,单步预测

基于 LSTM 的船舶轨迹预测,单步预测

fyuhao的博客 1万+

10万字大数据框架面试知识点大整理,你还不拿去吗?

呕心沥血几个月,为大家奉献大餐

悦上心灵的博客 2117

论文分栏前后内容不连续?教你word如何删除分节符

问题 当我们在写论文的时候,很多期刊的模板都是两栏的格式,但有的时候我们插入的图像尺寸可能太大,两栏格式放不下,因此需要将其以一栏的格式出入,如下: 但当我们把图片删除后,再将其转换成两栏格式,前后内容就出现不连续的情况: 正常情况下应该是如下: 正确处理方式 里面有个分页符,把分页符去掉,或者把你的文字全部复制到记事本里,然后重新复制回word就可以取消原有的格式了。 删除分节符的方法(以word 2019为例) -点击菜单栏上的“视图”,点击“大纲视图”。 可以看到word文档以整列的形式展开:

左手の明天的博客 1万+

你的“大厂梦”不是梦,你离大厂仅差我这篇博客!!!【吐血推荐】

转载请标明地址或者附上我的博客地址https://georgedage.blog.youkuaiyun.com/ 整理不易,谢谢配合!!! 前言 提到梦想中的大厂,我们会想到些哪家? 大厂梯队 在我们所熟知的大厂中,我们对其公司的大数据技术有多少了解,总体梯队你晓得吗?大致,仅供参考,分为两个梯队 大厂招聘特点归纳 这些也就是我们面试大厂需要做的!!! 关于自我介绍 大大方方的聊,放松 体现优势,...

乔治大哥的博客 2212

硬件工程师笔记——电子器件汇总大全

本文系统总结了14种常用电子器件的工作原理及功能应用,包括电阻、压敏电阻、电容、电感、二极管、三极管、MOS管、晶振、光耦、IGBT、继电器、磁珠、可控硅和线性稳压器。每种器件从结构原理、工作特性到典型应用进行全面解析,如电阻的限流分压、电容的储能滤波、三极管的放大开关等。重点阐述了各器件在电路设计中的关键作用,如IGBT的功率控制、继电器的隔离保护、LDO的电压稳定等,并提供了实际电路应用案例。文章还整理了硬件工程师笔试面试相关的知识点和真题资源,为电子工程师提供全面的技术参考。

XU157303764的博客 2万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

秒懂Flink:Flink CDC实时数据同步技术详解

Flink CDC(Change Data Capture)是Flink生态中用于实时数据同步的核心技术,能够帮助用户轻松实现数据库变更的实时捕获与同步。本指南将从基础概念、核心优势到实际应用,全面解析Flink CDC技术,让新手也能快速掌握这一强大工具。 ## 一、Flink CDC核心概念解析 ### 1.1 什么是CDC? CDC(变更数据捕获)是一种数据集成技术,能够捕获数据库中的数

gitblog_00496的博客 507

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

想进大厂?看这两位就够了——敖丙 冰河|寻找C站“宝藏”_阿里敖丙(1)

一般像这样的大企业都有好几轮面试,所以自己一定要花点时间去收集整理一下公司的背景,公司的企业文化,俗话说「知己知彼百战不殆」,不要盲目的去面试,还有很多人关心怎么去跟HR谈薪资。这边给大家一个建议,如果你的理想薪资是30K,你完全可以跟HR谈33~35K,而不是一下子就把自己的底牌暴露了出来,不过肯定不能说的这么直接,比如原来你的公司是25K,你可以跟HR讲原来的薪资是多少,你们这边能给到我的是多少?你说我这边希望可以有一个20%涨薪。

2401_85405886的博客 794

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

冰河竟然被腾讯邀请去做技术分享了,这是要起飞的节奏吗?

应朋友的邀约,不久前去腾讯交流学习了。这次的收获还是蛮大的,今天,跟小伙伴们分享下这次去腾讯交流和学习的体会。

冰河的专栏 2万+

我的大数据之路:2023年度总结

我的大数据之路:2023年度总结 2023年度最值得骄傲的事 2023年度吐血的经验教训 Kafka+Flink+StarRocks/Doris的实时离线一体化方案正在成为小公司数仓架构首选。 2023年度难忘的面试经历

话数Science 1407

Java(springboot)调用python脚本(包含调用第三方库的脚本)_idea中springboot项目中在 java 后端直接集成 python 解释器的(1)

🍅 硬核资料:关注即可领取PPT模板、简历模板、行业经典书籍PDF。🍅 技术互助:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。🍅 面试题库:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新中。🍅 知识体系:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)、数据仓库、Python、前端等等。网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化学习资料的朋友,可以戳这里获取。

2401_84537826的博客 685
上一篇: FlinkSQL没有做热身准备,上手开发你心中有底吗?
下一篇: 你的数据倾斜了吗?一文帮你数据处理再均衡
大数据左右手
博客等级 码龄9年 475粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值