网上商城建站服务商/全网搜索指数
入门需要掌握:从入门demo理解、flink 系统架构(看几个关键组件)、安装、使用flink的命令跑jar包+flink的webUI 界面的监控、常见错误、调优
一、入门demo:统计单词个数
0、单词txt 文本内容(words.txt):
hello world
hello flink
hello java
1、DataSet api(已弃用)
public class BatchWordCount {public static void main(String[] args) throws Exception {// 1. 创建执行环境ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();// 2. 从文件读取数据 按行读取(存储的元素就是每行的文本)DataSource<String> lineDS = env.readTextFile("input/words.txt");// 3. 转换数据格式FlatMapOperator<String, Tuple2<String, Long>> wordAndOne = lineDS.flatMap((String line, Collector<Tuple2<String, Long>> out) -> {String[] words = line.split(" ");for (String word : words) {//Tuple2.of 构建二元组out.collect(Tuple2.of(word, 1L));}}) //Lambda是java的新特性(不是flink的特性),在Lambda表达式中使用泛型,存在泛型擦除,所以flink 需要用returns 显示的声明类型信息.returns(Types.TUPLE(Types.STRING, Types.LONG)); // 4. 按照 word 进行分组(因为flink 不像Spark 有groupByKey可以直接得到字段,flink是通过索引位置得到字段,比如0就是第一个字段)UnsortedGrouping<Tuple2<String, Long>> wordAndOneUG =wordAndOne.groupBy(0);// 5. 分组内聚合统计(同理,flink是通过索引位置得到字段,比如1就是第二个字段)AggregateOperator<Tuple2<String, Long>> sum = wordAndOneUG.sum(1);// 6. 打印结果sum.print();}
}
批处理结果:
为什么说是DataSet api?
-
数据源:DataSource 继承Operator 继承DataSet
-
转换:
FlatMapOperator 继承SingleInputUdfOperator 继承SingleInputOperator 继承Operator 继承DataSet
AggregateOperator 继承SingleInputOperator 继承Operator 继承DataSet所以,把这一整套称为DataSet api。
2、DataStream api
public class FlinkDemo {public static void main(String[] args) throws Exception {// 1. 创建流式执行环境StreamExecutionEnvironment env =StreamExecutionEnvironment.getExecutionEnvironment();// 2. 读取文件DataStreamSource<String> lineDSS = env.readTextFile("./src/main/java/com/shan/words.txt");// 3. 转换数据格式SingleOutputStreamOperator<Tuple2<String, Long>> wordAndOne = lineDSS.flatMap((String line, Collector<String> words) -> {Arrays.stream(line.split(" ")).forEach(words::collect);}).returns(Types.STRING).map(word -> Tuple2.of(word, 1L)).returns(Types.TUPLE(Types.STRING, Types.LONG));// 4. 分组KeyedStream<Tuple2<String, Long>, String> wordAndOneKS = wordAndOne.keyBy(t -> t.f0);// 5. 求和SingleOutputStreamOperator<Tuple2<String, Long>> result = wordAndOneKS.sum(1);// 6. 打印result.print();// 7. 执行env.execute();}
}
流处理结果:
3、特点:
- idea 执行代码,通过多线程并行模拟flink这个分布式框架的并行的特点。idea通过线程模拟任务槽(flink的并行单位-并行子任务编号,它的数量是由并行度决定的)
- 简单理解:并行度,就是当前任务分成多少份去做多线程的并行处理的程度、个数
- idea 没有设置并行度,默认就是电脑cpu核心数量(逻辑处理器数量)
- 小细节:hello前面的子任务编号是相同的,说明分组的时候,将统计hello的个数分给同一个子任务去执行,只有在同一个任务上才能进行叠加
并行,不能保证顺序!
4、流数据特点:应该是源源不断的到来—需要监听捕获
- 代码中,将数据源来源进行修改成监听端口即可
public class FlinkDemo {public static void main(String[] args) throws Exception {// 1. 创建流式执行环境StreamExecutionEnvironment env =StreamExecutionEnvironment.getExecutionEnvironment();// 2. 读取数据流 [代码中,将数据源来源进行修改成监听端口即可]DataStreamSource<String> lineDSS = env.socketTextStream("hadoop102", 7777);// 3. 转换数据格式SingleOutputStreamOperator<Tuple2<String, Long>> wordAndOne = lineDSS.flatMap((String line, Collector<String> words) -> {Arrays.stream(line.split(" ")).forEach(words::collect);}).returns(Types.STRING).map(word -> Tuple2.of(word, 1L)).returns(Types.TUPLE(Types.STRING, Types.LONG));// 4. 分组KeyedStream<Tuple2<String, Long>, String> wordAndOneKS = wordAndOne.keyBy(t -> t.f0);// 5. 求和SingleOutputStreamOperator<Tuple2<String, Long>> result = wordAndOneKS.sum(1);// 6. 打印result.print();// 7. 执行env.execute();}
}
- socket的数据流数据的发送,可以通过Linux系统自带的netcat工具进行模拟。
# 在 Linux 环境的主机 hadoop102 上,执行下列命令,发送数据进行测试:
[atshan@hadoop102 ~]$ nc -lk 7777
-
启动 java 程序
我们会发现程序启动之后没有任何输出、也不会退出。这是正常的——因为 Flink 的流处理是事件驱动的,当前程序会一直处于监听状态,只有接收到数据才会执行任务、输出统计结果。
-
在 Linux 环境的主机 hadoop102 上发送数据
hello flink
hello world
hello java
- 可以看到程序的控制台有数据的输出
二、flink 系统架构/Flink 作业提交运行的原理
我们编写的代码,对应着在Flink集群上执行的一个作业;所以我们在本地执行代码,其实是idea开发环境中根据引入的依赖,先模拟启动一个Flink集群,
然后把我们代码中定义好的操作,作为"作业",(job要打包好)
然后将作业提交到集群上,创建好要执行的任务等待数据输入。
1、Flink 中的几个关键组件:
客户端(Client)、作业管理器(JobManager)和任务管理器(TaskManager)。
(1) 客户端:和flink 集群关系没那么大,主要就是向flink 提交一下作业。
- 我们的代码,实际上是由客户端获取并做转换,之后提交给JobManger 的。
(2) JobManager:对作业进行调度管理
- JobManager获取到要执行的作业后,会进一步处理转换,然后分发任务给众多的 TaskManager
(3) TaskManagers: 也叫worker,等待数据输入,进行实际计算。
2、flink 系统架构详细图
- JobManager,也称为 master,用于协调分布式执行。负责调度任务,检查点,失败恢复等。
- TaskManager,也称为 worker,用于执行数据流图的任务(更准确地说,是计算子任务),并对数据流进行缓冲、交换。Flink 运行环境中至少包含一个任务管理器。
3、Flink之运行时环境
(1) JobManager:
JobManager是Flink系统的协调者,它负责接收Flink Job,调度组成Job的多个Task的执行。同时,JobManager还负责收集Job的状态信息,并管理Flink集群中从节点TaskManager。
■ JobManager所负责的各项管理功能,它接收到并处理的事件主要包括:RegisterTaskManager、SubmitJob、CancelJob、UpdateTaskExecutionState、JobStatusChanged、RequestNextInputSplit
- RegisterTaskManager
在Flink集群启动的时候,TaskManager会向JobManager注册,如果注册成功,则JobManager会向TaskManager回复消息AcknowledgeRegistration。
- SubmitJob
Flink程序内部通过Client向JobManager提交Flink Job,其中在消息SubmitJob中以JobGraph形式描述了Job的基本信息。
- CancelJob
请求取消一个Flink Job的执行,CancelJob消息中包含了Job的ID,如果成功则返回消息CancellationSuccess,失败则返回消息CancellationFailure。
- UpdateTaskExecutionState
TaskManager会向JobManager请求更新ExecutionGraph中的ExecutionVertex的状态信息,更新成功则返回true。
- JobStatusChanged
ExecutionGraph向JobManager发送该消息,用来表示Flink Job的状态发生的变化,例如:RUNNING、CANCELING、FINISHED等。
- RequestNextInputSplit
运行在TaskManager上面的Task,请求获取下一个要处理的输入Split,成功则返回NextInputSplit。
(2) TaskManager:
TaskManager也是一个Actor,它是实际负责执行计算的Worker,在其上执行Flink Job的一组Task。每个TaskManager负责管理其所在节点上的资源信息,如内存、磁盘、网络,在启动的时候将资源的状态向JobManager汇报。TaskManager端可以分成两个阶段: 注册、可操作阶段
- 注册阶段
TaskManager会向JobManager注册,发送RegisterTaskManager消息,等待JobManager返回AcknowledgeRegistration,然后TaskManager就可以进行初始化过程。
- 可操作阶段
该阶段TaskManager可以接收并处理与Task有关的消息,如SubmitTask、CancelTask、FailTask。如果TaskManager无法连接到JobManager,这是TaskManager就失去了与JobManager的联系,会自动进入“注册阶段”,只有完成注册才能继续处理Task相关的消息。
(3) Client
当用户提交一个Flink程序时,会首先创建一个Client,该Client首先会对用户提交的Flink程序进行预处理,并提交到Flink集群中处理,所以Client需要从用户提交的Flink程序配置中获取JobManager的地址,并建立到JobManager的连接,将Flink Job提交给JobManager。
Client会将用户提交的Flink程序组装一个JobGraph, 并且是以JobGraph的形式提交的。一个JobGraph是一个Flink Dataflow,它由多个JobVertex组成的DAG。其中,一个JobGraph包含了一个Flink程序的如下信息:JobID、Job名称、配置信息、一组JobVertex等。
三、flink 集群部署-一主二从
flink 集群默认是本地启动,即Flink 本地启动,直接执行 start-cluster.sh
0、flink 安装
(1) 下载:
- 细节1:flink有两个版本,一个版本是和hadoop捆绑的,另一个是单独的,后缀包含scala
- 细节2:注意最新版的flink 要求的java版本是11,13版本的flink,java版本是8
- 下载链接:https://flink.apache.org/zh/downloads.html
wget https://archive.apache.org/dist/flink/flink-1.13.6/flink-1.13.6-bin-scala_2.12.tgz
(2) 解压
- 习惯,解压到/opt下自己建立的模块modules目录下
tar -zxvf flink-1.13.6-bin-scala_2.12.tgz -C /opt/modules/
(3) 配置环境:
vim /etc/profile# 在配置文件中添加如下内容
export FLINK_HOME=/opt/flink-1.13.6
export PATH=$FLINK_HOME/bin:$PATH# 保存一下配置
source /etc/profile
1、服务器的准备
本书中三台服务器的具体设置如下:
⚫ 节点服务器 1,IP 地址为 192.168.10.102,主机名为 hadoop101。
⚫ 节点服务器 2,IP 地址为 192.168.10.103,主机名为 hadoop102。
⚫ 节点服务器 3,IP 地址为 192.168.10.104,主机名为 hadoop103。
配置工作:先在其中一台服务器上对flink根目录下配置文件进行修改,然后把修改好后的flink 根目录,分发给另外两个节点服务器(通过scp命令)。
# 主机配置修改完毕后,将 Flink 安装目录发给另外两个节点服务器 $ scp -r ./flink-1.13.0 atguigu@hadoop102:/opt/module $ scp -r ./flink-1.13.0 atguigu@hadoop103:/opt/module
配置好后:
在主机那台机器,通过命令:start-cluster.sh 启动集群时,看到日志提示它是主机,通过jps命令,看到StandaloneSessionClusterEntrypoint;
在从机上,通过jps命令,看到打印信息,提示它是从机TaskManagerRunner。
■ 跨服务器的远程拷贝命令scp:
scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。
命令格式:scp [参数] [需要传输的文件原路径] [接收传输的文件的服务器目录路径]
- scp命令,可以将当前文件资源拷贝给远程服务器,也可以将远程服务器的文件资源拷贝到本机上
# 在本地服务器上将/root/shan目录下所有文件传输到服务器10.11.34.73 的/home/目录下,命令为: scp -r /root/shan root@10.11.34.73:/home/# 将服务器10.11.34.73 的/home/shanshan 目录下所有文件传递到本机服务器的/root/ 目录下,命令为: scp -r @10.11.34.73:/home/shanshan /root
2、主机的配置 hadoop101
-
修改flink 配置文件conf目录下的flink-conf.yaml :
# 默认是localhost jobmanager.rpc.address: hadoop101
-
【这一步可以省略】修改flink 配置文件conf目录下的masters
# 默认是localhost hadoop101:8081
3、从机的配置 hadoop102、hadoop103
-
修改flink 配置文件conf目录下的workers
# 默认是localhost hadoop102 hadoop103
4、flink 的 webUI 界面
-
概况:可以看到可用的资源、运行的jobs数量、运行的job列表、完成的job列表(也可以在Jobs 下看到更详细的信息)
当前集群的 TaskManager 数量为 2;由于默认每个TaskManager的Slot数量为 1,所以总Slot数 和 可用Slot数都为2。
- 看到从机taskManagers 的情况:
- taskManagers 内存
每一个taskManager(worker) 其实就是一个独立的jvm实例[jvm 进程],站在jvm 进程的角度理解内存:
Total Process Memory 其实就是jvm,包括了JVM Heap 堆内存、Off-Heap Memory 堆外内存。
其中,flink 管理的内存,包括代码定义的对象,放到的JVM Heap 堆内存,以及flink定义好的状态会放在 Off-Heap Memory 的Managed Memory,还有直接内存。
四、flink 命令
1、flink 提交运行作业(命令行的方式,可以设置更多的参数)
- 也可以通过ui界面提交作业:
# 在master主机上,先使用命令rz 进行文件上传# 进入xxx.jar包所在目录
flink run -c com.xsj.whale.flink.task.CrawlerToKafka -p 4 --detached -D taskmanager.numberOfTaskSlots=4 -D jobmanager.memory.process.size=2048mb -D taskmanager.memory.process.size=5120mb xxx.jar
命令行提交作业的细节:如果是直接在主机的命令行窗口上提交,则不用通过参数指定主机。
- 在从机上通过命令行提交作业,需要通过参数 -m 主机名:端口 指定master主机和端口号。
# 先把xxx.jar 上传到从机上,然后在其目录下提交作业 flink run -m hadoop102:8081 -c 主程序的类全限定名 -p 2 xxx.jar
- 启动flink
start-cluster.sh
- 结束flink
stop-cluster.sh
- 取消作业
flink cancel 作业id
- 查看flink 输出结果
# 进入flink的日志目录
tail log/flink-*-taskexecutor-*.out
五、flink 常见错误
1、NoResourceAvailableException: Could not acquire the minimum required resources.
- 原因:没有资源的情况下,提交作业。
2、异常被抛出(不被catch)会导致flink任务挂掉
- 业务的代码写错了,但是对异常没有try…catch,异常被底层的fink捕获后,任务挂掉
六、flink 的优化配置与调优
在 flink-conf.yaml 文件中还可以对集群中的 JobManager 和 TaskManager 组件进行优化配置
1、通用配置-内存调优
-
jobmanager.memory.process.size:对 JobManager 进程可使用到的全部内存进行配置,包括 JVM 元空间和其他开销,默认为 1600M,可以根据集群规模进行适当调整。
-
taskmanager.memory.process.size:对 TaskManager 进程可使用到的全部内存进行配置,包括 JVM 元空间和其他开销,默认为 1600M,可以根据集群规模进行适当调整。
-
taskmanager.numberOfTaskSlots:对每个 TaskManager 能够分配的 Slot 数量进行配置,默认为 1,可根据 TaskManager 所在的机器能够提供给Flink 的 CPU 数量决定。所谓Slot 就是 TaskManager 中具体运行一个任务所分配的计算资源。
-
parallelism.default:Flink 任务执行的默认并行度,优先级低于代码中进行的并行度配置和任务提交时使用参数指定的并行度数量。
七、flink 的部署
1、flink 资源被占用的问题
flink 的资源被占用的时候,还需要提交或者追加作业,就得等前面的资源被释放了或者需要集群新增加机器。
一种手动管理一切的方式!不够方便!
真正的企业级应用里,我们更加希望是有一套平台,资源不够了,"你"再去申请,再去申请更多资源;而我只需要做的就是只是将集群跑起来,作业跑起来。
“你"不要总跟我提示"资源不够用了”。—> flink 要和不同的资源管理平台要结合在一起!
2、flink 的部署模式
flink 的不同场景,不同的部署模式。
会话模式(Session Mode)
单作业模式(Per-JobMode)
应用模式(Application Mode)
它们的区别主要在于:集群的生命周期以及资源的分配方式。
会话模式
- 特点:资源有限;优点:方便(集群启动起来后,资源也确定了,固定放在那等待使用);缺点:资源共享,一旦资源不够,提交作业就失败;
- 应用:适合**
单个规模小,执行时间短
**的大量作业。(上一个作业释放完资源就可以给下一个作业了!充分利用资源!) - 集群不跟着作业的状态而发生改变,当我们kill或者cancle作业之后,集群依然存在,生命周期远大于作业。
- 作业如果竞争资源,竞争不到,怎么办?–等待那个占用了资源的作业运行结束或者被cancle,然后释放出资源!
会话模式其实最符合常规思维,就是我们前面的集群启动默认就是会话模式。我们需要先启动一个集群,保持一个会话,在这个会话中通过客户端提交作业,集群启动时所有资源就都已经确定,所以所有提交的作业会竞争集群中的资源。
八、flink的print 底层
1、旁路输出流
//旁路输出流print
taptapGroupFeedStreamSideOutput.print();
taptapGroupFeedStreamSideOutput.printToErr();// -->PrintSinkFunction@PublicEvolvingpublic DataStreamSink<T> print() {//创建一个打印汇总算子对象PrintSinkFunction<T> printFunction = new PrintSinkFunction<>();//添加到汇总里return addSink(printFunction).name("Print to Std. Out");}public DataStreamSink<T> addSink(SinkFunction<T> sinkFunction) {// 1、在转换对象中获取到输出类型transformation.getOutputType();//如果汇总算子是输入类型的配置,则设置一下相关配置 if (sinkFunction instanceof InputTypeConfigurable) {((InputTypeConfigurable) sinkFunction).setInputType(getType(), getExecutionConfig());}//2、清理一下汇总算子,并构建汇总操作 StreamSink<T> sinkOperator = new StreamSink<>(clean(sinkFunction));//3、构建汇总数据流,并把汇总操作放进去DataStreamSink<T> sink = new DataStreamSink<>(this, sinkOperator);//4、给环境添加操作(汇总数据流中的转换)getExecutionEnvironment().addOperator(sink.getTransformation());//5、返回汇总数据流return sink;}
如果本文对你有帮助的话记得给一乐点个赞哦,感谢!
相关文章:

flink入门-流处理
入门需要掌握:从入门demo理解、flink 系统架构(看几个关键组件)、安装、使用flink的命令跑jar包flink的webUI 界面的监控、常见错误、调优 一、入门demo:统计单词个数 0、单词txt 文本内容(words.txt): hello world …...

【数据结构】单链表中,如何实现 将链表中所有结点的链接方向“原地”逆转
一.实现一个单链表(无头单向不循环) 我们首先实现一个无头单向不循环单链表。 写出基本的增删查改功能,以及其它的一些功能(可忽略)。 #include<stdio.h> #include<assert.h> #include<stdlib.h>…...

摘花生(简单DP)
Hello Kitty想摘点花生送给她喜欢的米老鼠。她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来。地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过一株花生苗就能摘走该它上面所有的花生。Hel…...

2022济南大学acm新生赛题解
通过答题情况的难度系数: 签到:A 简单:BL 中等:D 困难:CM 极难:KNO A-和 算出n个数的和判断正负性即可!!! 发现很多同学的代码错误:要么sum未赋初值&…...

策略模式教程
策略模式是一种行为型设计模式,它允许在运行时根据不同的情况选择不同的算法实现,从而使得算法可以独立于客户端而变化。本文将介绍策略模式的概念、应用场景、优点和缺点,并提供最佳的代码实践。本文的代码实现将使用Java语言,但…...

什么是刺猬理念
一、什么是刺猬理念刺猬理念是指把复杂的世界简化成单个有组织性的观点,一条基本原则或一个基本理念,发挥统帅和指导作用。核心是把事情简单化,把所有的挑战和进退维谷的局面压缩为简单的。二、刺猬理念的寓言故事狐狸是一种狡猾的动物&#…...

RPC通信相关
RPCRPC, 远程过程调用(Remote Procedure Call,RPC)是一个计算机通信协议,该协议允许运行于一台计算机的程序程调用另一台计算机的上的程序。通俗讲,RPC通过把网络通讯抽象为远程的过程调用,调用远程的过程就…...

Node.js + MongoDB 搭建博客 -- 登录页面
准备工作 安装Node.js安装express等相关库MongoDB数据库电脑系统:win11 功能分析 搭建一个简单的具有多人注册、登录、发表文章以及登出功能的博客。 设计目标 未登录:主页左侧导航栏显示home、login、register,右侧显示已发表的文章、发…...

互联网新理念,对于WEB 3.0 你怎么看?
WEB 3.0 这个名词走进大众视野已经有一段时间了,也曾在各个圈子里火热一时,至今各大互联网企业任旧在 WEB 3.0 上不断探索。但关于 WEB 3.0 是什么这个问题,其实大部分人都没有一个比较明确的认知,包括区块链和元宇宙等相关行业的…...

Git使用教程:最详细、最傻瓜、最浅显、真正手把手教
GITGIT版本控制版本控制的意义分布式图形化客户端环境搭建仓库的操作分支使用场景命令远程仓库操作生成公钥命令冲突忽略列表的配置时机配置方式版本回退练习:GIT 版本控制 把文件系统中的文件,按照修改的版本进行记录,进行管理的操作。 版…...

【面试题】Redis面试题汇总(无解答)
Redis为何这么快?缓存问题及解决入库和缓存策略问题及处理redis数据类型缓存过期删除策略内存淘汰机制Redis 回收进程如何工作的?Redis持久化RDB和AOFredis流式pipeline处理原生批命令 (mset, mget) 与 Pipeline 区别?Pipeline 有什么好处,为…...

RHCSA-用户和组管理和文件系统权限(3.11)
目录 用户(UID) 用户类别(UID): 用户的增删改查: 修改用户密码: 查看用户是否存在: 组(GID) 组的增删改查: 设置组密码: 用户…...

RK3588平台开发系列讲解(同步与互斥篇)信号量介绍
平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、信号量介绍二、信号量API1、结构体2、API三、函数调用流程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢上一章我们看了自旋锁的原理,本章我们一起学习下信号量的用法。 一、信号量介绍 和自旋锁一样,…...

One-YOLOv5 v1.2.0发布:支持分类、检测、实例分割
One-YOLOv5 v1.2.0正式发布。完整更新列表请查看链接:https://github.com/Oneflow-Inc/one-yolov5/releases/tag/v1.2.0,欢迎体验新版本,期待你的反馈。 1 新版本特性 1. 同步了Ultralytics YOLOv5的上游分支v7.0,同时支持分类、目…...

Zookeeper的Java API操作
Zookeeper的Java API操作一、先启动Zookeeper集群二、IDEA 环境搭建三、创建子节点四、获取子节点并监听节点变化五、判断 Znode 是否存在六、Watcher工作流程一、先启动Zookeeper集群 二、IDEA 环境搭建 1.创建一个Maven工程:ZookeeperProject 2.在pom.xml文件添…...

Web3:前端知识和后端知识基础
三.Web3:前端知识和后端知识基础 1.了解前端开发 2.了解JSP 3.了解JAVAWeb的三大组件 4.Servlet的使用 5.Filter的使用 6.了解thymeleaf 未更新 三.Web3:前端知识和后端知识基础 1.了解前端开发 ①前端架构 HTML超文本标记语言CSS层叠样式表JavaS...

调试射频TX和rx实验工程出现的问题与反思
1.今天用ADS仿真 发现 加上SMA 插损就到了4db,但是直接用传输线就在1db以内 这个问题我目前想到的排查思路是换成IPEX, 换成IPEX插损就变成2db 拿最新的7626去看 看到上面是SMA-3G 小针 还是结合参考的demo PCB来看 2.用射频的ipex测试LNA 发现校准…...

代码随想录刷题-数组总结篇
文章目录数组二分查找原理习题题目1思路和代码题目-2移除元素习题我的想法暴力解法双指针有序数组的平方习题暴力排序双指针长度最小的子数组习题暴力解法滑动窗口螺旋矩阵 II习题我的解法别人的解法总结数组 二分查找 本节对应代码随想录中:代码随想录-二分查找 …...

Qt读xml文件
QXmlStreamReaderQXmlStreamReader类通过简单的流式API为我们提供了一种快速的读取xml文件的方式。他比Qt自己使用的SAX解析方式还要快。所谓的流式读取即将一个xml文档读取成一系列标记的流,类似于SAX。而QXmlStreamReader类和SAX的主要区别就是解析这些标记的方式…...

Qt样式表
1>样式表介绍 样式表可通过 QApplication::setStyleSheet()函数将其设置到整个应用程序上,也可以使用 QWidget::setStyleSheet()将其设置到指定的部件或子部件上,不同级别均可设置样式表,称为样式表的层叠。样式表也可通过设计模式编辑样…...

Docker与微服务实战2022
基础篇(零基小白)1.Docker简介1.1 是什么问题:为什么会有docker出现?您要如何确保应用能够在这些环境中运行和通过质量检测?并且在部署过程中不出现令人头疼的版本、配置问题,也无需重新编写代码和进行故障修复? 答案就…...

Linux(传输层二)
文章目录0. 前言1. TCP协议1-1 TCP协议段格式1. TCP如何解包?2. TCP协议如何交付(应用层- - 客户)?3. 如何理解报文本身?4. 如何理解报文字段?1-2 确认应答(ACK)机制1-3 超时重传机制1-4 连接管理机制1. TC…...

4.Spring Cloud (Hoxton.SR8) 学习笔记—Nacos微服务治理、Nacos配置管理
本文目录如下:一、Nacos微服务治理Nacos 下载 与 启动Spring Cloud 集成 NacosIDEA 同一个 Application 启动多次Nacos - 配置集群Nacos - 设置负载均衡Nacos - 设置服务实例的权重二、Nacos 配置管理Nacos - 合理的把配置信息迁移到 Nacos 中Nacos - 配置命名规范N…...

卷王都在偷偷准备金三银四了...
年终奖没发; 简历石沉大海; 发消息只读不回 打开某招聘,看了看岗位,这个厂还不错,可是要求好高,我啥都不会。 “哎,算了,我简历还没更新呢,我躺到6月份拿到年终奖再跑…...

【C++的OpenCV】第十二课-OpenCV图像常用操作(九):找到图像的边界(轮廓)findContours()和drawContours()
🎉🎉🎉欢迎各位来到小白piao的学习空间!\color{red}{欢迎各位来到小白piao的学习空间!}欢迎各位来到小白piao的学习空间!🎉🎉🎉 💖💖💖…...

传奇开服流程—传奇单机架设教程
现在传奇私服还是那么的火爆,上次有报道发布站一年盈利几个亿,还是有很大的机会,很多玩家因为GM开服关服给折腾,刚充的钱服务器就关了,很是恼火,于是都想自己整个服开开,但又不知道从何下手&…...

【GoF 23】篇3:抽象工厂
1. 什么是抽象工厂? 提供一个创建一系列相关或互相依赖的对象接口,而无需指定它们的具体类。 抽象工厂是一个超级工厂,是其他工厂的工厂,或将简单工厂进一步抽象。 这样来理解: 我们将科技公司可以做的事情简要枚举…...

软考高级信息系统项目管理师系列之三十七:流程管理
软考高级信息系统项目管理师系列之三十七:流程管理 一、流程管理内容二、流程管理基础概念知识1.企业业务流程的整体目标2.业务流程的核心3.流程六要素4.良好的业务流程管理步骤5.企业流程管理的层次三、流程管理过程1.业务流程分析2.业务流程分析的主要方法3.业务流程分析工具…...

【WPS文字-Word】WPS文字设置段落居中对齐后公式左边右边的文字仍然无法跟公式对齐,公式和文字对不齐
一、问题背景 原来的公式左边文字是底端,右边文字是居中,我想着让左右文字全跟公式居中对齐,就全部设置了段落居中对齐。 结果发现,公式左右边的文字依然无法居中对齐。左边的文字是居中,但是右边的文字变成了顶端对…...

英文术语对照
underlying asset 标的资产 leverage 杠杆 forward 远期 futures 期货 options 期权 delivery 交割 broker 证券机构/经理人 CBOT 芝加哥交易所 long futures position 多头 short futures position 空头 spot price 现货价格 future price 期货价格 over-the-coun…...