当前位置: 首页 > news >正文

Lalamove基于Flink实时湖仓演进之路

摘要:本文投稿自货拉拉国际化技术部 资深数据仓库工程师林海亮老师。内容分为以下几个部分:

1、业务简介

2、Flink 在业务中的应用与挑战

3、实时数仓架构的 Flink 驱动演进

4、未来展望

一、业务简介

Lalamove 于2013年在香港成立,是货拉拉的海外业务品牌,作为全天候即时送货平台,致力透过快速、灵活、经济的送货服务为社区注入动力。不论是个人客户、中小企和大型企业,经 Lalamove 手机应用程式即可与专业司机伙伴配对,提供各类车款选择。Lalamove 致力运用科技优势,紧密连系用户、司机伙伴、货物及道路,现时 Lalamove 的业务已覆盖亚洲、拉丁美洲以及欧洲、中东、非洲地区(EMEA)共13个市场,以科技物流满足各地社区的物流需求,为当地带来正面影响。

二、Flink 在业务中的应用与挑战

2.1 实时链路在Lalamove的应用

  1. 实时看板:为管理层和运营团队提供了全面且细致的核心指标实时展示。从全球各地区的不同价格品类,到最细化的车型维度,都能进行多维度组合展示。同时,还具备对部分核心指标的单独诊断功能,助力管理层迅速掌握业务动态,做出精准决策。

  2. 数据服务API:依托大数据自建的数据云平台,Flink 实时计算能力为订单服务和营销活动提供了强有力的支持。在订单下单过程中,根据司机、用户、片区供需等实时数据,Flink 能够快速计算并调整订单附加费用。目前,该功能已涵盖动态附加费、实时派券和实时订单风控等多个方面,显著提升了业务的灵活性和智能化水平。

  3. 数据监控:在实时数仓的业务核心指标层,通过上报至自研告警平台 LL-Monitor,实现了对业务指标的实时监控。这不仅为业务运营提供了及时的数据支持,还能有效监控实时数仓的数据质量,确保数据的准确性和可靠性。

  4. 数据分析:Flink 实时加工处理后的数据,借助 Doris 等 OLAP 引擎,极大地提升了数据查询速度。业务团队能够使用新鲜度更高的数据进行深入分析,及时发现业务中的潜在问题和机会,为业务优化提供了有力依据。

2.2 业务扩张带来的技术挑战

实时能力所面向的场景基本就是上面提及的4个部分,难点在于随着业务的发展数据量越来越大,上游所涉及的流数据也日趋增多,如何在数据新鲜度、成本和性能间作好权衡则是实时数仓的搭建需要综合考虑的要点,并且区别于国内业务,海外业务的数据建设面临的挑战也存在差异。

  1. 多个数据中心:与传统跨境电商业务不同,O2O 业务需要在各个市场配备运营团队,并遵循当地法律法规对数据进行监管。因此,Lalamove 在海外设立了东南亚、南美多个数据中心,并在多云服务上混合部署。这导致了数据隔离、延迟和一致性等问题,给 Flink 实时数仓的搭建和运行带来了巨大挑战。
  2. 多个时区数据:业务横跨 8 个时区,为了更好地服务当地团队,数据需要按照当地时间进行处理。而 Flink 的事件时间在实时数仓构建中起着关键作用,如何在数据模型设计中兼顾成本和复杂度,成为了一大难题。
  3. 上游改造频繁:近 4 年来,随着业务的迅猛发展,流数据上游订单系统经历了 3 次重大版本迭代。从最初的单一宽表,到 1.0 版本拆分为订单、运单、属性 3 张业务事实表,再到 2.0 版本进一步扩展至 20 多张事实表,且各表面向不同业务场景没有单一主表。在实时链路已对接多个业务需求的情况下,如何实现上游数据的兼容,对数据模型提出了严峻考验。
  4. 建设成本高企:相较于国内云厂商,海外云服务的单机成本要高出 N 倍,且数据跨 DC、跨云传输的流量费用也十分高昂。这就要求在实时数仓建设过程中,必须在使用成本、数据新鲜度和机器性能之间进行更为谨慎的权衡。

三、实时数仓架构的 Flink 驱动演进

围绕着这4个挑战,Lalamove 在 Flink 的基础上以更拥抱变化的态度不断迭代实时数仓的构建,新版本的特性、新技术的融入可以帮忙 Lalamove 更好的应对这些挑战。

  • 数据中心问题上,在 Paimon 表进行湖仓的构建,通过 sequence 等机制确保了每条流数据本身的数据顺序,避免了跨DC数据传输数据延迟后导致的数据乱序问题。

  • 时区问题上,在数据模型设计基于事件时间 event time 来构建DM层,既应用上了 Flink 的 TVFs 功能,也避免了不同时区数据量差异导致的数据倾斜问题。

  • 上游改造问题上,通过搭建了 Paimon 湖仓来提高实时数据模型的兼容性,不管上游如何的变动,Paimon 上构建的 DWD 层提高了模型的兼容度,只需基于 PK Table 的主键进行列级更新即可。

  • 成本问题上,由于对价格的敏感度相对国内业务线更高,从2022年升级到 Flink1.13 使用 TVFs 特性,2023年引入 Flink1.18 构建 K8S 云原生实现动态扩缩容,2024在对象存储搭建 Paimon 都有效减少了成本。

3.1 数仓分层架构演进

(1)2022 年前:采用 Flink1.9 版本,开发模式为面向应用的烟囱式,无分层设计。上游业务系统由单一宽表构成,下游通过消费单一流表进行核心指标开发。这种模式下,单个数据流被多次消费和重复计算,采用 groupby 全窗口计算方式,导致单个任务状态过大,需要大量计算资源。同时,由于实时看板需要进行可选日期相同时点环比,需保存大量历史数据的中间窗口数据,一旦数据出错,只能通过离线数据进行 T - 1 天的修复,资源维护成本较高。

(2)2022 年:基于一流多用的理念,搭建了从 ODS - DWD - DM 的实时数仓分层架构。ODS 层由业务数据 binlog、埋点数据以及后端数据统一输出到 kafka 构建;DWD 层则进行数据的ETL处理;DM 层运用 Flink 的 TVFs 窗口计算新特性,以面向时区的方式进行计算,大幅减少了计算资源的消耗。同时,采用累计窗口回跑中间结果的数据修复模式,提高了数据修复的效率。此外,这种面向时区的分拆计算模式还从数据结构上有效解决了不同时区市场数据量差异大带来的数据倾斜问题。

(3)2023 年:上游业务系统升级,从单一订单宽表改造为 3 张事实表。为避免实时流关联带来的资源消耗和数据重复问题设计了多 DWD 表结构,以满足不同维度指标的计算需求,包含了订单用户、订单司机、订单账单、订单需求多张业务宽表,以及埋点用户、埋点司机等埋点宽表。并随着业务量增长,埋点数据大幅增加且具有明显的高峰低谷特性,Lalamove 将集群升级到 Flink1.18,并部署为 Flink on K8S,建立了任务级自动扩缩容规则,确保埋点数据计算不会长时间占用大量集群资源。

(4)2024 年:面临着上游业务订单、账单以及结算几个大业务系统的改造,其中订单业务将从 3 张订单实时表扩展为 20 多张业务事实表,各表更新时间不一致,后端状态保留时间难以预估;账单及结算同样基于业务做不同场景的事实表分拆。在此背景下,引入 Paimon 引擎。Paimon 既能作为 sink 目标组件,又能作为 source 消费其 change - log,其 partial - update 特性与新业务系统高度兼容。ODS 层依旧从canal直接输出到 kafka 不做任何处理,DWD 层在 Paimon 构建订单与埋点主题宽表,在 Flink 任务中按字段级别进行更新,并基于 sequence 机制保证数据顺序,在 Flink 任务中对数据进行 ETL 处理,实现数据的清洗、转换和整合。DWB 层关联 DIM 构建最终的大宽表。DM 层保持按时区基于事件时间进行处理,数据在 Paimon 做存储,Kafka 进下分发,特定场景也会存储在 OLAP 提供即席查询。

3.2 数仓架构现状

  • 数据模型:实时侧数据模型与实时引擎技术紧密相关,基于不同版本的 Flink 和 Paimon 湖仓,数仓模型的构建方式也有所不同,因此也可以说相对离线在实时领域的数据模型相对并不“稳定”。目前,PRD 环境是基于 Flink1.18 + Paimon1.0 进行搭建。另外需要强调的是,在上下游协同方面,下游实时开发能积极参与上游业务系统改造,对上游在改造时提出合理的字段冗余诉求能够减少实时链路中的流关联,使数据模型更加轻量高效。
  • 数据处理:统一基于自研平台 “飞流” 进行统一开发,自研的 SQL 解析引擎使得 90% 的任务为 FlinkSQL 任务,大大降低了任务的维护和开发难度,提高了开发效率。
  • 数据监控:利用基于 Prometheus 研发的监控平台 LL-Monitor,对从 ODS 到 DM 层的 Flink 任务 metrics 以及业务指标进行实时上报和监控。通过预设的监控规则,能够及时发现任务和数据质量问题,保障系统稳定运行。
  • 数据存储:Paimon 使用对象存储,数据应用方面则使用多种存储模式以应对不同的业务场景,基于 OLAP 进行查询加速、使用 KV 数据库支持接口毫秒级响应,使用 Kafka 方便多端分发。另外,跨云间的数据传输也使用了特定的算法对数据进行处理,使得存储成本及数据流量费用都尽可能最优。

Lalamove现有实时湖仓架构

3.3 湖仓构建收益

  • 驱动业务决策,通过在 Paimon 上核心指标流批一体的路线的演进,可以支持离线数仓现在可以通过跨云读取 Paimon 数据生成的核心报表,实现了离线与实时相同口径相同数据源的核心指标构建,效率上也支持基于实时数据小时/分钟级别去更新核心报表。

  • 技术实现提效,基于 Paimon 进行湖仓构建后,让实时数仓的兼容性从以前的上游改造下游则同步改造,调整为上游改造 DWD 层进行兼容即可,DM 层不再受改造带来数据风险以及双写资源浪费,并有效的减少了开发人员的人力投入。未来上游业务系统还将迎来账单2.0改造,评估后预期未来一年只需轻量开发即可轻松兼容。

  • 资源达成降本,从基于 kafka 构建的多 DWD 表实时链路切换到 Paimon 湖仓后,在业务从 5 个时区扩展到 8 个时区市场的情况下,按现有数据量预期 Paimon 链路所使用的计算资源相比基于 Kafka 链路开发方式仍然有了大幅下降。

Paimon链路相对Kafka链路Flink计算资源预期对比

四、未来展望

尽管基于 Paimon 构建的链路在当前取得了显著成效,但仍存在一些局限性。Paimon 表文件合并会带来数据秒级延迟问题,同时维护 Kafka 及 OLAP 第三方组件也需要一定开销。为了进一步优化实时数仓架构,Lalamove 已经不断在尝试基于各种技术栈来加强湖流融合,目前社区生态中的 Fluss 所提供的能力恰好能解决现有架构所面临的痛点,下一步的实时数仓构建也会在 Fluss+Paimon 基础上不断地演进。

  1. 支持基于对象存储的 Paimon,兼容了现有的技术架构。

  2. 具备 CDC 订阅、数据层毫秒级延迟的特性,解决现在 Paimon 表秒级延迟问题。

  3. 支持实时数据点查提供了流分析能力,能一定程度上减少现有 OLAP 引擎的压力与依赖。

相关文章:

Lalamove基于Flink实时湖仓演进之路

摘要:本文投稿自货拉拉国际化技术部 资深数据仓库工程师林海亮老师。内容分为以下几个部分: 1、业务简介 2、Flink 在业务中的应用与挑战 3、实时数仓架构的 Flink 驱动演进 4、未来展望 一、业务简介 Lalamove 于2013年在香港成立,是货拉拉的…...

【含文档+PPT+源码】基于微信小程序的卫生院预约挂号管理系统的设计与实现

项目视频介绍: 毕业作品基于微信小程序的卫生院预约挂号管理系统的设计与实现 课程简介: 本课程演示的是一款基于微信小程序的卫生院预约挂号管理系统的设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习…...

人工智能100问☞第2问:机器学习的核心原理是什么?

目录 一、通俗解释 二、专业解析 三、权威参考 机器学习的核心原理是​​通过数据训练模型,使计算机自动发现数据中的内在规律或模式,并利用这些规律对新数据做出预测或决策​​。这一过程强调数据驱动(从经验中学习)、模型优化(通过损失函数和参数调整提升性能)以及泛…...

【深度学习基础】——机器的神经元:感知机

感知机模型的原理之前已经讲过(【感知机模型 - CSDN App】https://blog.csdn.net/2401_88885149/article/details/145563837?sharetypeblog&shareId145563837&sharereferAPP&sharesource2401_88885149&sharefromlink)但主要是从数学和机…...

OpenCV 图形API(29)图像滤波-----GMat类

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::GMat 是 OpenCV 的 G-API 模块中的一个核心类,用于定义计算图中的数据节点。G-API 是 OpenCV 中的一个模块,旨在通过…...

spark的堆外内存,是在jvm内还是操作系统内存内?

在 Apache Spark 中,堆外内存(Off-Heap Memory)是直接分配在操作系统的物理内存中,而非 JVM 堆内内存。以下是详细的解释: 1. 堆外内存的本质 操作系统管理 Spark 的堆外内存直接通过操作系统分配(例如使用…...

AD9253 LVDS 高速ADC驱动开发

1、查阅AD9253器件手册 2、查阅Xilinx xapp524手册 3、该款ADC工作在125Msps下,14bit - 2Lane - 1frame 模式。 对应:data clock时钟为500M DDR mode。data line rate:1Gbps。frame clock:1/4 data clock 具体内容:…...

swift菜鸟教程14(闭包)

一个朴实无华的目录 今日学习内容:1.Swift 闭包1.1闭包定义1.2闭包实例1.3闭包表达式1.3.1sorted 方法:据您提供的用于排序的闭包函数将已知类型数组中的值进行排序。1.3.2参数名称缩写:直接通过$0,$1,$2来顺序调用闭包的参数。1.3.3运算符函…...

【HarmonyOS NEXT+AI】问答02:有一点编程基础,可以学不?

在“HarmonyOS NEXTAI大模型打造智能助手APP(仓颉版)”课程里面,有学员问,有一点编程基础,可以学不? 这里统一做下回复。 学习本课程只需要掌握任一编程语言即可,拥有JavaScript、TypeScript、ArkTS或Java语言基础更佳…...

maven 依赖的优先级

最短路径优先 工程中依赖了a、b两个jar包, 在a jar包内引用了b jar包版本为1.0,路径为:Project > a > b(1.0) 工程中直接依赖的b jar包版本为2.0,路径为:Project > b(2.0) 由于b(2.0)路径最短&#xff0…...

Java实现音频录音播放机功能

Java实现一个简单的音频录音和播放功能,使用Swing创建图形用户界面,利用Java Sound API进行音频处理。下面是对此程序的详细剖析: 一、程序结构 程序主要由以下几个部分组成: RecorderFrm类:主框架类,继承自…...

OpenCV 图形API(26)图像滤波-----方框滤波函数boxFilter()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 使用方框滤波器模糊图像。 该函数使用以下内核来平滑图像: K α [ 1 1 … 1 1 1 … 1 ⋮ ⋮ ⋱ ⋮ 1 1 … 1 ] K \alpha \begin{b…...

oracle 表空间(Tablespace)

在 Oracle 11g 中,表空间(Tablespace) 是数据库存储架构的核心逻辑单元,其原理基于 逻辑存储与物理存储的分离,通过分层管理数据文件、段(Segment)、区(Extent)和数据块&…...

Git 高级操作

Git不仅是代码管理的基石工具,更是开发者提升效率的瑞士军刀。掌握基础操作只是起点,真正的高手都在使用进阶技巧优化工作流。本文将深入解析Git四大高阶操作,助你轻松应对复杂开发场景! 一、交互式暂存:精准控制提交粒…...

Go:程序结构

文章目录 名称声明变量短变量声明指针new 函数变量的生命周期 赋值多重赋值可赋值性 类型声明包和文件导入包初始化 作用域 名称 命名规则: 通用规则:函数、变量、常量、类型、语句标签和包的名称,开头须是字母(Unicode 字符 &a…...

sqlserver2017 分离附加数据库

分离数据库 分离数据库是指将数据库从 SQL Server 实例中移除,但会完整保留数据库及其数据文件和事务日志文件。 然后可以使用这些文件将数据库附加到任何 SQL Server 实例,包括分离该数据库的服务器。 如果存在下列任何情况,则不能分离数据…...

QuarkPi-CA2 RK3588S卡片电脑:6.0Tops NPU+8K视频编解码+接口丰富,高性能嵌入式开发!

QuarkPi-CA2 RK3588S卡片电脑:6.0Tops NPU8K视频编解码接口丰富,高性能嵌入式开发! 芯片框架 视频介绍 https://www.bilibili.com/video/BV1btdbYkEjY 开发板介绍 核心升级,产品炸裂 QuarkPi-CA2卡片电脑搭载瑞芯微RK3588S芯片…...

对称加密与非对称加密与消息摘要算法保证https的数据交互的完整性和保密性

一、对称加密与非对称加密的作用 1. 对称加密 作用: 保密性:对称加密使用相同的密钥对数据进行加密和解密,确保数据在传输过程中不被窃听。效率:对称加密算法(如AES)计算速度快,适合加密大量数…...

Lab Cloud FPGA 硬件在线实验云平台介绍

友晶科技依托其在FPGA技术领域的深厚积累,成功研发出了一套完整的FPGA云平台解决方案(即FPGA 硬件在线实验云,简称LabCloud )。LabCloud 是一个高效、实用的学习平台,目前已在多个学校成功部署。 LabCloud 是通过 B/S …...

相机回调函数为静态函数原因

在注册相机SDK的回调函数时,是否需要设置为静态函数取决于具体SDK的设计要求,但通常需要遵循以下原则: 1. 必须使用静态函数的情况 当相机SDK是C语言接口或要求普通函数指针时,回调必须声明为静态成员函数或全局函数:…...

实验室纯水器实验室超纯水机(常见类型、选型建议、维护保养)

不同实验室用水级别有何差异? 实验室用水级别由ASTM或ISO 3696等质量标准定义,有助于特定应用选择适合的水质。这些标准也考虑了生产成本,如1级(Type 1)超纯水的生产成本远高于2级(Type 2)或3级(Type 3)纯水。 1级超纯水 不含离子&#xff…...

腾讯云COS与ZKmall 开源商城的存储集成方案

ZKmall 开源商城与腾讯云对象存储(COS)的集成,可通过云端资源托管、自动化数据同步、高性能存储架构实现本地存储负载降低与访问效率提升。以下是基于搜索结果的集成路径与核心优化点: 一、存储架构升级:本地与云端协同…...

Python 深度学习实战 第3章 Keras和TensorFlowKeras 训练和评估模型实例

Python 深度学习实战 第3章 Keras和TensorFlow&Keras 训练和评估模型实例 内容概要 第3章介绍了Keras和TensorFlow的基本概念及其关系,并指导如何设置深度学习工作区。本章还概述了核心深度学习概念如何转化为Keras和TensorFlow API。通过本章,读者…...

基于SpringBoot的动物救助中心系统(源码+数据库)

500基于SpringBoot的动物救助中心系统,本系统共分为2个角色:系统管理员、用户,主要功能如下 【管理员】: 1. 登录:管理员可以通过登录系统来管理各种功能。 2. 用户管理:管理员可以查看用户列表&#xff0…...

【多模态大模型】《Qwen2.5-Omni》 论文解读

《Qwen2.5-Omni:重新定义端到端全模态大模型的技术范式》 论文解读 论文: https://arxiv.org/abs/2503.20215 (2025.03.26)代码: https://github.com/QwenLM/Qwen2.5-OmniNews: https://mp.weixin.qq.com/…...

go 通过汇编分析函数传参与返回值机制

文章目录 概要一、前置知识二、汇编分析2.1、示例2.2、汇编2.2.1、 寄存器传值的汇编2.2.2、 栈内存传值的汇编 三、拓展3.1 了解go中的Duff’s Device3.2 go tool compile3.2 call 0x46dc70 & call 0x46dfda 概要 在上一篇文章中,我们研究了go函数调用时的栈布…...

蓝桥杯C/C++省赛/国赛注意事项及运行环境配置

大佬的蓝桥杯考前急救指南 对拍&#xff08;手动生成测试数据&#xff09;代码&#xff1a; #include <bits/stdc.h> // 包含所有标准库的头文件 using namespace std; // 使用标准命名空间int main() {srand(time(0)); // 设置随机数种子为当前时间&#xff0c;确保每次…...

CSS高度坍塌?如何解决?

一、什么是高度坍塌&#xff1f; 高度坍塌&#xff08;Collapsing Margins&#xff09;是指当父元素没有设置边框&#xff08;border&#xff09;、内边距&#xff08;padding&#xff09;、内容&#xff08;content&#xff09;或清除浮动时&#xff0c;其子元素的 margin 会…...

redis的基本使用

简介 redis&#xff0c;Remote Dictionary Server&#xff0c;远程字典服务&#xff0c;一个基于内存的、存储键值对的数据库。redis是开源的&#xff0c;使用C语言编写。因为redis的数据是存储在内存中的&#xff0c;所以redis通常被用来做数据库的缓存 优点&#xff1a; re…...

【蓝桥杯】单片机设计与开发,第十二届

/*头文件声明区*/ #include <STC15F2K60S2.H>//单片机寄存器头文件 #include <init.h>//初始化底层驱动头文件 #include <led.h>//led,蜂鸣器,继电器底层驱动头文件 #include <key.h>//按键底层驱动头文件 #include <seg.h>//数码管底层驱动头…...

主流时序数据库深度对比:TDengine、InfluxDB与IoTDB的技术特性、性能及选型考量

目录 引言 一、 核心架构与技术特性对比 1.1、 TDengine&#xff1a;面向物联网的特定优化 1.2. InfluxDB&#xff1a;成熟的通用时序平台 1.3. Apache IoTDB&#xff1a;面向工业场景的精细化设计 二、 核心性能指标对比分析 2.1、写入性能 2.2、查询性能 三、 关键技…...

使用人工智能大模型腾讯元宝,如何免费快速做高质量的新闻稿?

今天我们学习使用人工智能大模型腾讯元宝&#xff0c;如何免费快速做高质量的新闻稿&#xff1f; 手把手学习视频地址&#xff1a;https://edu.csdn.net/learn/40402/666431 第一步在腾讯元宝对话框中输入如何协助老师做新闻稿&#xff0c;通过提问&#xff0c;我们了解了老师…...

国产Linux系统统信安装redis教程步骤

系统环境 uname -a Linux FlencherHU-PC 6.12.9-amd64-desktop-rolling #23.01.01.18 SMP PREEMPT_DYNAMIC Fri Jan 10 18:29:31 CST 2025 x86_64 GNU/Linux官网下载源码包并解压 下载链接 https://download.redis.io/releases/redis-7.0.15.tar.gz?_gl11h424d3_gcl_au*ODQ5…...

leetcode590 N叉树的后序遍历

前序遍历 的顺序是&#xff1a;根 → 子节点1 → 子节点2 → ... → 子节点N 后序遍历 的顺序是&#xff1a;子节点1 → 子节点2 → ... → 子节点N → 根 首先一个办法就是前序遍历结果进行翻转 在 迭代法 实现 后序遍历 时&#xff0c;如果采用 前序遍历 反转 的方式&…...

docker desktop 的安装和使用

一、Docker Desktop 是什么&#xff1f; Docker Desktop 是一款专为开发者设计的工具&#xff0c;可以在本地计算机&#xff08;Windows/macOS&#xff09;上快速运行和管理容器&#xff08;Container&#xff09;环境。以下是核心功能&#xff1a; 核心特点说明容器化开发基于…...

QCustomPlot频谱图

使用QCutomPlot做的读取txt文件显示频谱图的demo,帮助大家了解QCustomPlot的基本使用 1.运行结果 demo比较简单,用于文件读取,鼠标放大缩小,右键截图等基础功能. 2.绘图详解 绘图核心是将类提升为QCustomPlot之后进行重绘,重绘之前设计图表曲线,图标标题,坐标轴,坐标轴范围,背…...

Python 和 JavaScript两种语言的相似部分-由DeepSeek产生

Python 和 JavaScript 作为两种流行的编程语言&#xff0c;虽然在设计目标和应用场景上有差异&#xff08;Python 偏向后端和脚本&#xff0c;JavaScript 偏向前端和动态交互&#xff09;&#xff0c;但它们的语法存在许多相似之处。以下是两者在语法上的主要共同点及对比&…...

记一次 .NET某云HIS系统 CPU爆高分析

一&#xff1a;背景 1. 讲故事 年前有位朋友找到我&#xff0c;说他们的系统会偶发性的CPU爆高&#xff0c;有时候是爆高几十秒&#xff0c;有时候高达一分多钟&#xff0c;自己有一点分析基础&#xff0c;但还是没找到原因&#xff0c;让我帮忙看下怎么回事&#xff1f; 二&…...

ESP32开发入门:基于VSCode+PlatformIO环境搭建指南

前言 ESP32作为一款功能强大的物联网开发芯片&#xff0c;结合PlatformIO这一现代化嵌入式开发平台&#xff0c;可以大幅提升开发效率。本文将详细介绍如何在VSCode中搭建ESP32开发环境&#xff0c;并分享实用开发技巧。 一、环境安装&#xff08;Windows/macOS/Linux&#xf…...

在 macOS 上设置来电自启动

在 macOS 中&#xff0c;系统本身并不支持直接通过“接上电源适配器”自动开机&#xff08;此功能涉及硬件底层控制&#xff09;。但针对 Intel 处理器的 Mac 机型&#xff0c;可以通过以下方法间接实现类似效果。对于 Apple Silicon&#xff08;M1/M2/M3&#xff09;芯片的 Ma…...

【技术】Ruby 生态概念速查表,通过对比nodejs生态(入门)

以下是 Ruby 生态 对应概念的速查表&#xff0c;并使用与 Node.js 生态 对比的方式来参照&#xff0c;涵盖名称、作用&#xff08;或解释&#xff09;、简单用法、可能的替代方案&#xff0c;以及 Node.js 中最相似或可类比的工具&#xff08;如果有的话&#xff09;。有些工具…...

入门级宏基因组数据分析教程,从实验到分析与应用

宏基因组学彻底改变了研究人员对微生物群落的认识&#xff0c;微生物组不仅是环境组分&#xff0c;更作为共生体深刻影响着宿主的健康与功能。 鉴于微生物群落固有的复杂性及其所处环境的多样性&#xff0c;研究者进行一些宏基因组学研究时必须精心设计以获取能真实反映目标群体…...

解决 Vue 中 input 输入框被赋值后,无法再修改和编辑的问题

目录 需求&#xff1a; 出现 BUG&#xff1a; Bug 代码复现 解决问题&#xff1a; 解决方法1&#xff1a; 解决方法2 关于 $set() 的补充&#xff1a; 需求&#xff1a; 前段时间&#xff0c;接到了一个需求&#xff1a;在选择框中选中某个下拉菜单时&#xff0c;对应的…...

聚划算!CNN-GRU、CNN、GRU三模型多变量回归预测

聚划算&#xff01;CNN-GRU、CNN、GRU三模型多变量回归预测 目录 聚划算&#xff01;CNN-GRU、CNN、GRU三模型多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 聚划算&#xff01;CNN-GRU、CNN、GRU三模型多变量回归预测 (Matlab2023b 多输入单输出) 1.程…...

list的常见接口使用

今天&#xff0c;我们来讲解一下C关于STL标准库中的一个容器list的常见接口。 在我们之前c语言数据结构中&#xff0c;我们已经了解过了关于链表的知识点了&#xff0c;那么对于现在理解它也是相对来说比较容易的了。 数据结构--双向循环链表-CSDN博客 1. 定义与包含头文件 …...

5. 蓝桥公园

题目描述 小明喜欢观景&#xff0c;于是今天他来到了蓝桥公园。 已知公园有 N 个景点&#xff0c;景点和景点之间一共有 M 条道路。小明有 Q 个观景计划&#xff0c;每个计划包含一个起点 stst 和一个终点 eded&#xff0c;表示他想从 stst 去到 eded。但是小明的体力有限&am…...

零基础开始学习鸿蒙开发-智能家居APP离线版介绍

目录 1.我的小屋 2.查找设备 3.个人主页 前言 好久不发博文了&#xff0c;最近都忙于面试&#xff0c;忙于找工作&#xff0c;这段时间终于找到工作了。我对鸿蒙开发的激情依然没有减退&#xff0c;前几天做了一个鸿蒙的APP&#xff0c;现在给大家分享一下&#xff01; 具体…...

你的 Linux 服务器连不上网?10 分钟入门网络故障排查

问题现象&#xff1a;服务器突然失去网络连接 当你兴冲冲地打开终端&#xff0c;准备开始一天的开发工作时&#xff0c;却发现服务器无法连接网络&#xff0c;ifconfig命令只能看到本地环回接口(lo)。这种突如其来的网络中断可能会让很多Linux新手感到手足无措。 别担心&…...

《Vue Router实战教程》20.路由懒加载

欢迎观看《Vue Router 实战&#xff08;第4版&#xff09;》视频课程 路由懒加载 当打包构建应用时&#xff0c;JavaScript 包会变得非常大&#xff0c;影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块&#xff0c;然后当路由被访问的时候才加载对应组件&am…...

JVM 之 String 引用机制解析:常量池、堆内存与 intern 方法

案例一&#xff1a; String s1 new String("1"); String s2 "1"; System.out.println(s1 s2);s1: 执行 new String("1")&#xff0c;JVM 首先在字符串常量池中查找或添加字面量 "1"&#xff0c;然后在堆内存中新建一个内容为 &quo…...