Flink回撤流详解 代码实例
一、概念介绍
1. 回撤流的定义
在 Flink 中,回撤流主要出现在使用 Table API 或 SQL 进行聚合或更新操作时。对于那些结果并非单纯追加(append-only)的查询,Flink 会采用“回撤流”模式来表达更新。
- 回撤流的数据格式:
回撤流一般以元组形式输出,格式为Tuple2<Boolean, Row>
。其中:- 第一个元素是布尔值:
true
表示这是一条新的记录(添加),false
表示这条记录是对先前结果的撤回。 - 第二个元素是具体的记录数据(Row)。
- 第一个元素是布尔值:
- 工作原理:
当一个聚合或窗口计算的结果发生更新时,Flink 会先发送一条撤回消息(撤回旧的计算结果),然后发送一条新的添加消息。这样可以保证下游消费者能够及时、正确地反映最新的计算结果。
2. 什么场景下产生回撤流
- 聚合操作: 当对流数据进行分组聚合(例如,计算每个类别的计数、求和等)时,随着数据不断变化,原来的聚合结果需要更新,此时就会采用回撤模式。
- 非追加查询: 对于存在更新和删除的查询(不支持纯追加的查询),如 JOIN、GROUP BY 等产生的中间状态。
- 事件时间处理: 当使用窗口计算且允许迟到数据到达(late arriving data)时,也可能导致先前结果被重新计算,从而产生更新。
二、回撤流的内部机制
1. 数据流转换过程
Flink Table API 将查询解析后,会根据查询的特性决定输出形式:
- 追加流(Append Stream): 只包含新增数据,这种模式适用于结果集单调递增的场景。
- 回撤流(Retract Stream): 对于需要撤回旧数据的场景,Flink 会生成回撤流,每一条消息标记了记录是新增还是撤回。
2. 状态管理与更新
- 状态存储: 为了计算聚合结果,Flink 会在内部存储每个分组的状态。例如,针对
COUNT
聚合,每当同一分组中有新的记录到达,Flink 会更新状态,将旧计数的计算结果通过撤回消息下发,然后输出新的计数。 - 计算过程:
- 初次计算:当某个分组第一次出现时,会直接输出一条
true
的消息。 - 更新计算:当后续数据到达,同一分组的结果需要更新时,会输出一个
false
消息,撤回之前的计算结果;随后输出一个true
消息,发布更新后的结果。
- 初次计算:当某个分组第一次出现时,会直接输出一条
3. 优势与挑战
- 优势:
- 保证了数据一致性,使得下游能够实时得到正确的聚合结果。
- 适用于不断更新的数据源,尤其是实时分析场景。
- 挑战:
- 下游消费方需要实现对撤回逻辑的支持。
- 状态管理和更新带来的性能和状态存储压力需关注,尤其在大规模、数据倾斜时更为明显。
三、代码示例及详细注释
下面提供一个基于 Java 的示例,演示如何利用 Flink Table API 生成回撤流。代码中的详细注释解释了每一步骤和配置项。
package com.example.flink;import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.table.api.Table;
import org.apache.flink.table.api.bridge.java.StreamTableEnvironment;
import org.apache.flink.types.Row;public class RetractStreamExample {public static void main(String[] args) throws Exception {// 1. 创建流式执行环境StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();// 注意:可以设置 checkpoint 机制来保证状态的一致性env.enableCheckpointing(5000); // 每 5000 毫秒进行一次 checkpoint// 2. 创建 Table 环境,支持流式 Table APIStreamTableEnvironment tableEnv = StreamTableEnvironment.create(env);// 3. 注册一个数据源,这里以模拟数据源为例// 实际项目中,这里一般连接 Kafka、Socket 或其他外部系统String createTableDDL = "CREATE TABLE orders ("+ " order_id STRING, "+ " category STRING, "+ " amount DOUBLE, "+ " order_time TIMESTAMP(3), "+ " WATERMARK FOR order_time AS order_time - INTERVAL '5' SECOND "+ ") WITH ("+ " 'connector' = 'kafka', "+ " 'topic' = 'orders_topic', "+ " 'properties.bootstrap.servers' = 'localhost:9092', "+ " 'properties.group.id' = 'flink_group', "+ " 'format' = 'json' "+ ")";tableEnv.executeSql(createTableDDL);// 4. 定义聚合查询——按订单类别统计订单数量// 此处 GROUP BY 会导致中间结果需要更新,因此产生回撤流消息String querySQL = "SELECT category, COUNT(*) AS cnt FROM orders GROUP BY category";Table aggregatedResult = tableEnv.sqlQuery(querySQL);// 5. 将 Table 转换为 Retract Stream// 转换后的数据为 Tuple2<Boolean, Row>,其中 Boolean 表示 true:添加数据,false:撤回数据DataStream<Tuple2<Boolean, Row>> retractStream =tableEnv.toRetractStream(aggregatedResult, Row.class);// 6. 输出结果到控制台,实际项目中可输出到 Kafka、数据库、文件系统等retractStream.print();// 7. 提交任务env.execute("Flink Retract Stream Example");}
}
代码详细解释
- 环境配置:
- 创建了
StreamExecutionEnvironment
并启用 checkpoint(以便在分布式环境下保证状态容错)。 - 利用
StreamTableEnvironment
将流转换为表进行操作。
- 创建了
- DDL 注册数据源:
- 使用 DDL 语句注册 Kafka 数据源,并利用 WATERMARK 策略处理乱序数据。
- SQL 聚合查询:
- 针对订单数据进行按
category
分组计数。由于结果需要更新,从而触发回撤流的产生。
- 针对订单数据进行按
- Table 转 Retract Stream:
- 利用
toRetractStream
方法将表查询结果转换为带有布尔标识的流,满足下游对撤回消息的处理需要。
- 利用
四、应用场景模块解析
1. 实时数据分析
在实时数据分析场景中,例如电商、金融领域,经常需要对实时数据进行聚合统计。例如:
- 业务需求: 实时计算各个品类的销售量/销售额,以便进行动态的业务监控和预警。
- 回撤流的作用: 当新订单数据不断进入后,某个品类的累计销售量会更新。通过回撤流,系统可以先撤回旧的统计结果,再下发新的统计数据,确保仪表盘或下游系统的数据始终一致。
- 技术要点:
- 数据源选择(Kafka、Socket、CDC 等)
- 窗口与时间特性配置(事件时间、watermark 设计)
- 状态管理与容错设置(checkpoint 配置、状态后端选型)
2. 动态结果更新和下游联动
在一些需要数据联动的系统中,例如在线推荐系统、广告系统:
- 业务需求: 根据用户行为实时更新推荐列表或广告竞价结果。
- 回撤流的作用: 通过连续计算的聚合与关联操作,实现数据更新的回撤和补充,下游系统能够基于最新状态进行策略调整。
- 技术要点:
- 系统如何处理撤回消息,确保数据不会出现重复或错误累加。
- 建议下游系统设计“幂等性”处理逻辑,确保相同的数据被正确撤回和更新。
- 错误处理与重试机制:在消息处理失败时,对撤回与新增消息分别进行可靠性处理,避免数据丢失或顺序错乱。
五、实际项目模块详细解析
实际项目案例:电商实时销售监控系统
1. 项目背景
假设某大型电商平台需要监控全站销售情况,实时统计每个品类的订单数量和销售额,以便于监控业务增长、库存调控与促销策略调整。由于订单数据流量大且数据存在乱序情况,采用 Flink 进行实时计算,并使用回撤流来更新聚合数据。
2. 系统架构
- 数据采集层: 利用 Kafka 采集订单数据。
- 数据处理层: 使用 Flink Streaming 与 Table API 对订单数据进行清洗、分组聚合(使用事件时间与窗口机制)并生成回撤流。
- 数据展示层: 将回撤流的数据输出到下游数据库或实时仪表盘(例如:Elasticsearch、Redis 或自定义 Web Dashboard)。
3. 实现关键点
-
DDL 注册和时间属性配置:
确保数据源注册时配置了事件时间字段和 watermark 策略,以便于正确处理乱序数据。CREATE TABLE orders (order_id STRING,category STRING,amount DOUBLE,order_time TIMESTAMP(3),WATERMARK FOR order_time AS order_time - INTERVAL '5' SECOND ) WITH ('connector' = 'kafka','topic' = 'orders_topic','properties.bootstrap.servers' = 'localhost:9092','properties.group.id' = 'flink_group','format' = 'json' );
-
聚合查询及回撤流输出:
利用 SQL 对订单数据进行分类聚合,统计订单量和销售额,然后将结果转换成回撤流输出。// 定义 SQL 查询 String querySQL = "SELECT category, COUNT(*) AS cnt, SUM(amount) AS total " +"FROM orders GROUP BY category"; Table aggregatedResult = tableEnv.sqlQuery(querySQL);// 转换为回撤流,此处会输出更新时的撤回与新增消息 DataStream<Tuple2<Boolean, Row>> retractStream =tableEnv.toRetractStream(aggregatedResult, Row.class);
-
下游系统的处理:
因为输出的是带有撤回标记的流,所以下游系统(例如写入 Redis 或 Elasticsearch 的消费者)需要支持:- 当收到
(false, oldRow)
时删除或修改对应的记录; - 当收到
(true, newRow)
时插入或更新数据。
- 当收到
4. 遇到的问题及解决方案
-
问题1:下游消费者不支持撤回消息
解决方案:- 将回撤流转换为 upsert 流(upsert-kafka、upsert-jdbc 模式),利用键值唯一性来实现覆盖更新。
- 或者在下游消费者中增加逻辑,将撤回消息与新增消息组合成完整的更新操作,确保数据一致性。
-
问题2:状态增长和内存压力
解决方案:- 合理设置 state TTL(Time-To-Live),对不活跃数据自动清理。
- 采用分布式状态后端(如 RocksDB),并优化 checkpoint 与恢复策略。
-
问题3:数据延迟和乱序处理
解决方案:- 针对业务场景设计合理的 watermark 策略,确保延迟数据能被及时处理;
- 配置合适的窗口大小与容错机制,保证数据在一定延迟下依然能准确计算。
六、详细总结
-
回撤流的原理:
Flink 的回撤流通过发送(boolean, Row)
元组来表达数据的变化,能够撤回旧值并下发新结果,满足聚合、连接等复杂查询的更新需求。 -
技术实现:
- 需要在数据源注册时配置时间属性与 watermark 策略,保证乱序数据处理正确。
- 利用 Table API 的
toRetractStream()
方法,可将表查询结果转换为回撤流。 - 注意状态管理与容错策略,确保系统在大流量场景下依然稳定运行。
-
应用场景:
主要用于实时数据分析、动态聚合更新等场景,如电商销售统计、实时监控、金融数据聚合等。系统设计时要考虑下游消费者如何解析和处理回撤消息,并尽量向 upsert 模式转化。 -
实际项目中的实践:
在实际项目(如电商实时监控系统)中,需要从数据采集、数据处理到数据展示全链路设计,确保回撤消息能被正确处理。还要考虑状态管理、延迟与乱序数据、下游系统兼容性等问题,并采取相应的解决措施。 -
可能遇到的问题及解决方案:
- 下游系统不支持撤回操作: 转换为 upsert 模式或增加处理逻辑;
- 状态增长引起内存问题: 使用状态 TTL 和分布式状态后端;
- 乱序数据与延迟处理: 合理设置 watermark 策略和窗口参数,保证延迟数据也能准确计算。
通过以上详细解析,希望对你理解 Flink 中回撤流的产生、机制、应用场景、实际项目实践以及相关问题与解决方案提供了全方位、多角度的指导。如需进一步探讨代码调优、配置参数或特定业务场景的实现细节,可继续进行更深入的交流。
相关文章:
Flink回撤流详解 代码实例
一、概念介绍 1. 回撤流的定义 在 Flink 中,回撤流主要出现在使用 Table API 或 SQL 进行聚合或更新操作时。对于那些结果并非单纯追加(append-only)的查询,Flink 会采用“回撤流”模式来表达更新。 回撤流的数据格式ÿ…...
学习笔记四——Rust 函数通俗入门
🦀 Rust 函数通俗入门 📘 Rust 是一门语法精炼但设计严谨的系统级语言。本文围绕函数这一主线,带你真正搞懂 Rust 最关键的语法思想,包括表达式驱动、闭包捕获、Trait 限制、生命周期标注与所有权规则,每遇到一个新概念…...
使用 Spring Boot 和 Uniapp 搭建 NFC 读取系统
目录 一、NFC 技术原理大揭秘1.1 NFC 简介1.2 NFC 工作原理1.3 NFC 应用场景 二、Spring Boot 开发环境搭建2.1 创建 Spring Boot 项目2.2 项目基本配置 三、Spring Boot 读取 NFC 数据3.1 NFC 设备连接与初始化3.2 数据读取逻辑实现3.3 数据处理与存储 四、Uniapp 前端界面开发…...
五、中断系统及外部中断
中断系统是管理和执行中断的逻辑结构;外部中断是众多能产生中断的外设之一; 一、中断系统 1.中断的概念 在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序ÿ…...
动态类生成 / 加载机制(更新)
前言 一般的编译是编译器编译.java文件 生成.class文件 然后JVM加载并运行.class字节码文件 反射的前提是内存中已经有了Class<T>对象 或者 通过Class.forName等方法去加载静态的.class文件 最终还是需要Class对象 那么动态生成Class对象的几种技术 JDK代理 CGL…...
(十三)安卓开发中的输入框、复选框、单选框和开关等表单控件详解
下面介绍一下 Android 开发中常用的表单控件,包括输入框、复选框、单选框和开关,从 XML 布局设计到代码控制,以及如何在实际场景中使用它们,并通过示例代码加以说明。 1. 输入框(EditText) 作用与场景 作…...
基于Kubeadm实现K8S集群扩缩容指南
一、集群缩容操作流程 1.1 缩容核心步骤 驱逐节点上的Pod 执行kubectl drain命令驱逐节点上的Pod,并忽略DaemonSet管理的Pod: kubectl drain <节点名> --ignore-daemonsets # 示例:驱逐worker233节点 kubectl drain worker233 --ignor…...
基于flask+vue框架的助贫公益募捐管理系统1i6pi(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
系统程序文件列表 项目功能:用户,求助信息,商品信息,商品类型,捐款信息 开题报告内容 基于FlaskVue框架的助贫公益募捐管理系统开题报告 一、选题背景与意义 (一)选题背景 在当今社会,贫困问题依然是全球面临的重大挑战之一&…...
【软考-高级】【信息系统项目管理师】【论文基础】进度管理过程输入输出及工具技术的使用方法
定义 项目进度管理是为了保证项目按时完成,对项目中所需的各个过程进行管理的过程,包括规划进度、定义活动、活动优先级排序、活动持续时间、制定进度计划和控制进度。 管理基础 制定进度计划的一般步骤 选择进度计划方法(如关键路径法&a…...
【学生管理系统升级版】
学生管理系统升级版 需求分析:注册功能:登录功能:验证码规则:忘记密码: 实操:系统主页面注册功能登录功能忘记密码效果演示 需求 为学生管理系统书写一个登陆、注册、忘记密码的功能。 只有用户登录成功之后&…...
ue插件开发遇到引入dll库与引擎内部冲突或其他插件引入的冲突
插件开发遇到引入dll库与引擎内部冲突或其他插件引入的冲突(相同或版本不一致) 开开心心引入libcurl库,编写了一些插件功能目的调用给蓝图使用,结果与引擎的http模块冲突,他也是libcurl 一、dll在编辑器环境下运行正…...
Redis缓存穿透、击穿与雪崩的核心原理与Java实战解决方案
在高并发系统中,Redis作为核心缓存组件,其稳定性直接决定了系统的性能与可靠性。本文将围绕缓存穿透、缓存击穿、缓存雪崩三大经典问题,从概念解析到Java实现,提供完整的解决方案与代码示例。 一、缓存穿透:恶意请求的…...
【面试】什么是回流和重绘
面试被问到什么是回流和重绘,毫无印象,下来以后查了一下,原来是浏览器渲染机制的概念。 回流:元素的大小或几何图形变动,浏览器需要重新计算、布局和绘制整个页面或其中一部分。 重绘:元素的样式变动但不影…...
HAL TIM PWM产生 蓝桥杯
目录 0.原理 0.1 CNT和CCR关系 0.2 PWM模式1模式2 1. cubemx配置 需求(将PA1输出1Khz的 50%占空比的方波) 1.0 PWM的频率计算: 2.代码 0.原理 0.1 CNT和CCR关系 CNT计数器和CCR比较器进行比较,如果是向上计数,CNT逐渐增加,CCR是虚线位置,也是用户自定义的…...
Elasticsearch 系列专题 - 第五篇:集群与性能优化
随着数据量和访问量的增长,单节点 Elasticsearch 已无法满足需求。本篇将介绍集群架构、性能优化方法以及常见故障排查,帮助你应对生产环境中的挑战。 1. 集群架构 1.1 节点角色(Master、Data、Ingest 等) Elasticsearch 集群由多个节点组成,每个节点可扮演不同角色: M…...
GPT:Transformer的专精产品
目录 1. 前言 2. GPT与Transformer的对比 2.1 Transformer架构 2.2 GPT架构 2.3 主要区别 3. GPT模型架构详解与代码实例 3.1 嵌入层 3.2 多头注意力机制 3.3 完整的GPT模型 4. 总结 1. 前言 GPT(Generative Pre-trained Transformer)是一种…...
算法——分治
学习目标: 掌握算法入门知识 学习内容: 分治的定义例题详细步骤讲解(查找最大和次大元素) 1. 分治的定义 对于一个大规模的问题,将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同&a…...
论坛系统(测试报告)
文章目录 一、项目介绍二、设计测试用例三、自动化测试用例的部分展示用户名或密码错误登录成功编辑自己的帖子成功修改个人信息成功回复帖子信息成功 四、性能测试总结 一、项目介绍 本平台是用Java开发,基于SpringBoot、SpringMVC、MyBatis框架搭建的小型论坛系统…...
UE5 添加随机弹道
我们一直都是直接拿玩家摄像头的正前方当作子弹发射方向,这样弹道将是固定的直线 现在我们需要添加一些随机的偏移,注意这不是让枪口上跳的后坐力,只是弹道的偏移 需要注意的是,这里的弧长并不真正的圆的弧长,因为显然…...
#苍穹外卖#(个人使用)
目录 Day-01 1 首先导入项目 2 创建Git仓库并建立连接 3 数据库部分 4 编译启动测试 5 前后端联调 6 完善登录功能 7 接口文档 Day-02 mapper持久层service业务层controller控制层 1 新增员工 编辑 2 员工分页查询 编辑 3 启用禁用员工账号 4 编辑员工信息…...
ArcToolbox应用基础
1.启动ArcToolbox -在ArcGIS其他模块中单击ArcToolbox按钮来启动。 在ArcToolbox环境下可以看到(图-2.44),ArcToolbox由多个工具箱构成,能够完成不同类型的任务。每个工具箱中包含着不同级别的工具集,工具集又包括若干工具。 2.激活扩展工具 …...
北京大学DeepSeek内部研讨系列:AI在新媒体运营中的应用与挑战|122页PPT下载方法
随着人工智能(AI)技术的飞速发展,AI在新媒体运营中的应用越来越广泛。北京大学AI肖睿团队最近举办了一场关于DeepSeek在新媒体运营中的应用与挑战的内部研讨会,为新媒体从业者提供了宝贵的见解和策略。 如果感兴趣的话࿰…...
git日志规范
1. 代码提交规范 <header> <type>(<modules>): <subject> <BLANK LINE> <body> Description: Root Cause: Solution: <BLANK LINE> <footer> Product: Project: Build: Dependency: Change-Id: 2. 代码提交规范详解 2.1 …...
uniapp实现H5页面麦克风权限获取与录音功能
1.权限配置 在uni-app开发H5页面时,需要在manifest.json文件中添加录音权限的配置。具体如下: {"h5": {"permissions": {"scope.record": {"desc": "请授权使用录音功能"}}} }这段配置代码是用于向…...
2025.4.10总结
今日记录:今天提了两个问题单,最近要关注一下产出了,上半年的考核如今还剩两个月了,然后发现一同入职的同事,有的人进步得很快,得向优秀得同事看齐了,不然几年过去,别人连升好几年&a…...
web前端 html常用标签
head内常用标签 基本标签(非meta标签): <!--title: 定义网页标题--> <title>Title</title><!--style: 定义内部样式表. 内部用来书写css代码--> <style>h1 {color: greenyellow;} </style><!--script: 内部用来…...
【Hadoop入门】Hadoop生态之Sqoop简介
1 什么是Sqoop? 在企业的数据架构中,关系型数据库与Hadoop生态系统之间的数据流动是常见且关键的需求。Apache Sqoop(SQL-to-Hadoop)正是为解决这一问题而生的高效工具,它专门用于在结构化数据存储(如RDBMS…...
小程序中实现音频播放(原生 + uniapp)
原生: miniprogram/components/mp-audio/index.wxml <view class"imt-audio"><view class"top"><view class"audio-control-wrapper"><image src"{{poster}}" mode"aspectFill" class"…...
SpringBoot接口覆盖上一次调用的实现方案
调用springboot接口时,如何实现覆盖上一次调用 Spring Boot 接口覆盖上一次调用的实现方案 以下是多种实现覆盖上一次接口调用的方案,适用于不同场景。 方案一:同步锁控制(单机环境) 适用场景:单实例…...
小白电路设计-设计7-固定式倍压器直流稳压电源电路设计
介绍 作为电子信息工程的我,电路学习是一定要学习的,可惜目前作为EMC测试工程师,无法兼顾太多,索性不如直接将所学的知识进行运用,并且也可以作为契机,进行我本人的个人提升。祝大家与我一起进行提升。1.本…...
Vue报错...properly without JavaScript enabled. Please enable it to continue
问题: Vue报错Were sorry but apptest1 doesnt work properly without JavaScript enabled. Please enable it to continue 解决: 修改 vue.config.js module.exports {publicPath: ./, // 使用相对路径devServer: {headers: {Access-Control-Allow…...
MySQL的半同步模式
MySQL的主从架构采用的是异步模式 master更新完成后直接发送二进制日志到slave,但是slaves是否真正保存了数据master端不会检测,master端直接保存二进制日志到磁盘,当master端到slave端的网络出现问题时或者master端直接挂掉,二进…...
Redis安装(Windows环境)
文章目录 Resid简介:下载Redis启动Redis服务设置Windows服务常用的Redis服务命令 Resid简介: Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。 Redis通常…...
CExercise_09_2动态拼接字符串_1字符串拼接
题目: 标准库函数strcat会将一个字符串追加到另一个字符串的末尾。 现在我们编写一个函数把两个字符串拼接起来,返回拼接的结果,但要求不改变其中任何一个字符串。其函数声明如下: char* my_strcat(const char* prefix, const cha…...
【保姆级图解】插入排序 算法详解:直接插入排序、希尔排序
总体引入 在计算机科学的算法领域中,排序是一项基础且重要的操作。它旨在将一组无序的数据元素重新排列为有序序列,以满足特定的顺序要求,如升序或降序。常见的排序算法可分为不同类别,像插入排序,包含直接插入排序和…...
Python爬虫第10节-lxml解析库用 XPath 解析网页
目录 引言 一、XPath简介 二、XPath常用规则 三、实例讲解 四、节点的选取 4.1 所有节点的选取 4.2 子节点的选取 4.3 父节点选取 五、属性匹配获取及文本获取 5.1 属性匹配 5.2 文本获取 5.3 属性获取 5.4 属性多值匹配 5.5 多属性匹配 六、按序选择 七、节点…...
Prometheus有哪几种服务发现?
Prometheus 支持多种服务发现 (Service Discovery) 机制,用于自动发现需要监控的目标。这些服务发现机制主要分为以下几类: 1. 静态配置 (Static Configuration) Static Configuration: 手动定义静态目标列表。适用于小规模的、固定的目标环境…...
突破焊丝虚影干扰,端子焊点缺陷检测如何实现自动化?
端子焊点作为 3C 产品中连接电路的关键环节,其质量优劣对产品性能有着决定性影响。然而,传统人工检测端子焊点不仅效率低下,难以满足大规模生产需求,而且误判率高,无法精准把控产品质量,成为企业提质增效智…...
2025.04.10-拼多多春招笔试第二题
📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 02. 糖果店的优惠兑换计划 问题描述 K小姐开了一家糖果店,推出了一种特殊的兑换活动。商店有 n n n<...
linux系统下如何提交git和调试
我们默认的ubuntu20.04镜像是没有Git提交的工具,我们需要配置安装包。 安装和更新git的命令 sudo apt update //用于更新软件包索引sudo apt install git //用于安装git版本控制工具 git --version //检查git版本,确认是否安装成功 随便进入linux系统下的一…...
40页的IPD流程指标字典【全文精读】
该文档聚焦 IPD 流程指标,为企业在产品研发管理领域提供全面量化评估标准,主要适用于企业中与产品研发、管理、财务及市场相关的各类人员。 财务类指标:涵盖市场份额、新产品销售比重等,用于评估产品市场竞争力、投资效率…...
如何在Cherry Studio中配置MCP工具服务?国内MCP服务有哪些?
在当今数字化时代,AI助手已成为提升工作效率和创造力的重要工具。Cherry Studio作为一个全能的AI客户端,支持多平台(包括Windows、macOS和Linux),并提供了丰富的功能,如大模型对话、AI绘图和AI翻译等。为了…...
动态词槽管理系统深度设计
动态词槽管理系统深度设计 基于Dual-Encoder的实时增量式语义槽管理方案 一、Dual-Encoder架构优化 1.1 架构创新设计 增强型双塔模型结构: #mermaid-svg-DRhtmuANYnJBJzpu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill…...
网络安全中信息收集需要收集哪些信息了?汇总
目录 1. 域名信息 2. IP地址与网络信息 3. 备案与注册信息 4. Web应用与中间件信息 5. 操作系统与服务器信息 6. 敏感文件与配置文件 7. 社交工程信息 8. 证书与加密信息 9. API与接口信息 10. 外部威胁情报 11. 历史数据与缓存 常用工具与技术: 在网络…...
代码模板-线段树(区间修改,区间查询和和最值)
题目链接:1270. 数列区间最大值 - AcWing题库 代码: // #pragma GCC optimize(1) // #pragma GCC optimize(2) // #pragma GCC optimize(3,"Ofast","inline")#include<bits/stdc.h> using namespace std; typedef long long…...
LLM介绍
一、核心概念与能力边界 LLM(Large Language Model:大语言模型)是基于海量文本训练的深度学习模型,其核心能力源于Transformer架构与自监督学习机制。关键特征包括: 参数规模:千亿级参数(如GP…...
[数据结构]排序
目录 1、排序的概念 2、常见排序算法 3、直接插入排序 4、希尔排序 5、直接选择排序 6、堆排序 7、冒泡排序 1、排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作 …...
Next.js + Droplet:高并发视频内容平台部署与优化扩展实战
在构建在线服务时,无论你是开发者还是企业技术负责人,扩展性和稳定性始终是绕不开的核心挑战。尤其在涉及高并发访问、大量数据传输和持续内容分发的场景中,系统架构的设计直接决定了用户体验与业务成效。 本文将以视频点播(Video…...
django寻味美食分享与交流网站-计算机毕业设计源码74984
摘 要 美食分享与交流网站是当前社交网络领域的一个热门话题。本研究旨在探讨用户在美食分享网站上的行为和互动模式,以及他们分享和获取美食信息的动机和方式。通过对美食分享网站上用户发文内容和互动数据的分析,揭示了用户在美食分享中的需求和行为规…...
把读写函数里的printf 打印到文件里
使用 fprintf 函数 将输出目标从标准输出(stdout)更改为一个文件指针 1、首先,在头文件或全局变量中定义一个 FILE 类型的指针,用于指向输出文件。 2、在程序启动时,打开文件并将文件指针赋值给上面定义的全局指针。…...