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

顺丰科技:从 Presto 到 Doris 湖仓构架升级,提速 3 倍,降本 48%

导读:顺丰科技引入 Doris 替换 Presto,在内部可视化数据自助分析工具丰景台场景广泛应用。目前,顺丰临时查询业务、丰景台报表业务的 Presto 场景已经 100% 切换到 Doris 集群中,日均查询量 100W+。并实现 P95 性能提升近 3 倍,硬件资源节省达 48% 显著收益。

丰景台是顺丰科技自主研发的一款可视化数据自助分析工具,旨在提升数据分析师的工作效率,助力自助分析和业务决策。该产品支持多种丰富的图表类型,用户只需通过拖拽操作即可快速进行自助分析,实现数据可视化。目前,丰景台已广泛支撑顺丰的物流收、转、运、派等各个环节,该平台处理的数据规模庞大,用户数量众多,对实时响应速度和稳定性有着较高要求。

最初,丰景台使用 Presto 作为查询引擎,面临查询速度慢、服务稳定性不足以及资源消耗成本高等问题。为解决这些问题,引入 Doris 替换 Presto,构建统一的数据分析平台。目前,顺丰临时查询业务、丰景台报表业务的 Presto 场景已经 100% 切换到 Doris 集群中,日均查询量 100W+。并实现 P95 性能提升近 3 倍,硬件资源节省达 48%。

使用 Presto 面临挑战

起初,丰景台使用 Presto 作为查询引擎来支撑业务。基于自研的 Presto On Yarn 模式,可以在租户级别根据业务负载情况自动调整 Presto 集群的规模,或根据负载模式选择不同的 Presto 子集群对查询请求进行路由。

使用 Presto 面临挑战.png

因丰景台支撑的业务线众多,查询模式多样化,且高峰期的 QPS 较高,涉及到的数据量庞大。同时,系统对查询延迟有严格的保证需求。在使用 Presto 时遇到了以下问题:

  • 查询速度慢: 因 Presto 查询优化器能力有限,无法提供很好的规则优化,尤其在处理复杂查询时,查询速度慢,无法满足性能要求。
  • 服务稳定性差: Presto 缺乏内置的缓存机制,容易受到 HDFS IO 抖动的影响,影响服务的稳定性。引入外部缓存组件虽然可以缓解这一问题,但同时也会增加系统的复杂性。
  • 资源成本高:Presto 以万核规模运行,需要大量的计算资源和硬件支持,整体资源成本高昂。
  • 适用场景有限:Presto 作为查询引擎,但它不具备数据存储的能力,当前只能分析存储在 Hive 中的数据。更加实时的场景、半结构化分析的场景不好满足。

为什么选择 Apache Doris

为解决上述痛点,顺丰在 2024 年初开始调研下一代数据分析产品,旨在寻求一款高性能、功能丰富且适用场景广泛的工具,以支持丰景台及内部业务的各种数据分析需求。Apache Doris 在性能表现和资源成本等方面具有显著优势:

  • 查询速度更快: Doris 的查询优化器(CBO)可有效支持复杂查询,尤其是多表关联查询的优化,同时通过丰富的统计信息提升优化规则的准确性。此外,Doris 物化视图能力能灵活应对数据加工和湖仓透明加速等场景。
  • 服务稳定性高: Doris 提供内置的元数据和数据缓存能力,可有效降低远端存储(如 HDFS)抖动对查询延迟的不稳定影响,同时降低系统维护的复杂度。
  • 湖仓统一及查询加速: Doris 作为湖仓加速引擎,可直接对 Hive、Iceberg 和 Paimon 在内的主流湖仓格式进行查询加速,并能管理高性能的自有格式数据。凭借 Doris 单一引擎即可支撑日志分析、实时报表分析等多样化场景的统一分析。
  • 弹性资源隔离: Doris 提供节点级别的物理隔离和进程内的线程级别隔离,利用计算节点和计算组等功能,满足顺丰对多业务、多租户及弹性扩缩容的需求。

Presto 到 Doris :湖仓建设实践

顺丰科技自 2024 年中开始,逐步使用 Apache Doris 替换 Presto 所支持场景,构建统一的数据分析平台。Doris 具备查询和存储的能力,既可以作为查询引擎查询数据湖 Hive 中数据,也作为数据仓库存储数据。这一升级,同时满足数据仓库和数据湖的需求,实现了查询与存储引擎的统一。

Presto 到 Doris :湖仓建设实践.png

在平台升级过程中,顺丰重点关注以下两点:

  • 无感升级: 由于是线上业务的升级,需保证整个过程业务侧无明显感知。因此,需完善对 Presto 的语法支持、SQL 行为的兼容、集群切换方案和监控报警方面的能力。
  • 性能提升和稳定性保障: 基于 Doris 以更少的计算资源获得更好的分析性能,同时保证整体服务的稳定性。

接下来核心围绕以上两点,详细介绍架构迭代升级过程中的实践、优化经验和收获。

01 无感升级

Presto 和 Doris 两套系统虽然都支持标准 SQL,但是在部分语法、函数语义和执行行为上存在细微差别。因此我们在前期涉及了周密的迁移验证流程,在平台侧通过以下方案来确保架构的平滑升级:

  • 开发线上查询模拟工具,自动收集线上查询语句,并在测试环境进行回放和结果比对,验证结果正确性。
  • 开发压力测试工具模拟真实线上流量负载,检查高峰、低谷期 Doris 集群的资源开销、查询延迟等,用于验证稳定性和性能预期。
  • 搭建 Doris -> Presto 的双跑和降级切换链路。可以按照比例将流量缓慢灰度到 Doris 集群。并且通过自定义路由规则,当遇到 Doris 不支持的函数、语法、SQL 行为时,系统自动将切换到 Presto 集群上,确保上游业务的平稳运行。

Presto 和 Doris 两套系统无感升级.png

这些方案是整个升级和迁移项目的重要基石,为后续的性能表现、版本迭代提供了有力保障。

02 Presto SQL 方言兼容

Doris 社区提供了 SQL Convertor 组件,灵活支持将 Hive、Trino/Presto、Spark、Clickhouse 等多种 SQL 方言转换为 Doris SQL,帮助业务无感迁移到 Doris 。在验证阶段,飞轮科技与顺丰合作,完成了大量方言适配工作,显著提升了 Presto SQL 方言的兼容性。

  • 语法改写: 将 Presto SQL 语法等价改写为 Doris SQL 语法。例如,在 Presto SQL 中,列名用双引号包裹需转换为反引号;或者为 Presto SQL 中的子查询添加别名,以满足 Doris SQL 对别名的强制要求等。
  • 函数签名改写: 将 Presto 中与 Doris 行为相同但签名不同的函数进行改写。比如将 date_parse函数改写为 str_to_da``te函数;或者调换data_trunc函数中的参数顺序等。
  • 函数行为改写: Doris 的大部分函数行为兼容 MySQL,如对非法参数的处理和返回值的精度等。如果直接修改这些函数的行为,会对其他用户造成影响。因此额外补充了一些符合 Presto 行为的新函数,并通过 SQL Convertor 改写,或使用cast转换类型,以不影响原函数行为的情况下提升对 Presto 函数行为的兼容度。
  • 输出格式改写: 针对 Array、Map、JSON 等复杂类型的字符串输出,Doris 提供了相应的改写规则。比如将 Doris 对 Map 类型的字符串表示由{"k1":null, "k2":"v3"}改写为{k1=NULL, k2=v3},确保用户在进一步处理时获得正确的语义。
  • 新增函数: 新增大量 Doris 原本不支持的 Presto/Trino 函数,进一步提升 SQL 兼容性。

目前在顺丰业务场景下,Presto SQL 兼容度可以达到 97%,仅有少部分 SQL 需要业务方配合调整,后续将进一步加强兼容性,目标达到 99%以上。

03 Parquet/ORC 性能优化

丰景台场景存储格式包括 Parquet、ORC 以及少量 Json 和 Text 数据格式。数据多样性对优化工作带来了挑战。顺丰与飞轮科技在以下方面合作,显著提升了 Doris 对不同文件格式的访问性能:

  • **复杂类型的延迟物化:**针对包含 Map、Array、Struct 等复杂类型的查询,在 Parquet/ORC 读取过程中提供延迟物化能力,显著降低 IO 数量。
    Parquet:ORC 性能优化.png

  • 小 IO 优化:通过调整 Merge IO 的阈值,缓解在不同查询模式下 Merge IO 引发的读放大问题,并显著降低 IO 次数。

  • ORC Tiny Stripe 优化:针对包含大量小 Stripe(小于 8MB)的 ORC 文件,提供跨 Stripe 合并读取能力,降低 IO 次数并提升文件读取吞吐。

  • 数据格式兼容度提升:全面支持 Parquet/ORC/Text 在 snappy、lz4、zstd、gzip、lzo、bzip2、brotli 等多种压缩格式下的读取能力。并且提供enable_text_validate_utf8等可调选项,确保在非法值场景下(如非 UTF8 编码的 Text 格式)行为和 Presto 一致。

这些优化显著改善了 Doris 在文件格式读取性能、稳定性和兼容性方面的表现。

04 HDFS IO 优化

丰景台场景数据由科技提供的 HDFS 统一存储。由于 HDFS 在多个业务共享,业务高峰期可能出现 IO 抖动、延迟增大甚至超时等问题。针对 HDFS 特性,制定了多种改善 IO 的措施:

  • 文件对齐 Block 切分: Doris 将大文件切分为多个文件分片,通过并行读取提升效率。针对 HDFS 文件,Doris 根据 HDFS Block Size 对齐切分,避免分片任务跨 Block 读取,降低对 Namenode 的访问频率,从而减少 HDFS 不稳定的影响。
  • HDFS Hedged Read 和 Read Timeout: HDFS 客户端提供 Hedged Read 功能,当数据块的读取请求在预设时间内未响应时,会向其他数据节点发送额外请求,使用最快返回的数据块,减少读取延迟。此外,通过dfs.client.socket-timeout降低读取超时阈值,快速触发重试,从而提升 IO 稳定性。这些功能在部分顺丰业务场景下显著改善了访问 HDFS 的 IO 响应性能。

05 执行调度优化

Hive 等湖仓外表数据的查询执行环境与内表数据存在显著差异,如元数据访问延迟和网络 IO 开销。因此,针对外表查询特点优化了执行调度:

  • 动态优先级调度: 丰景台场景查询模式多样,无法通过预定义 Workload Group 进行资源分组和隔离。动态优先级调度策略通过任务分片执行时间统计,实时识别大查询和小查询,动态调整优先级,显著降低中小查询在资源抢占场景下的延迟。

    执行调度优化.png

  • 分片异步调度: Hive 集群中有大量分区数量在十万级别的表。Doris 通过分片异步调度,让文件列表的 List 操作与 BE 节点的文件读取并行执行,显著改善了海量分区访问时的查询调度耗时。

    分片异步调度.png

  • Limit 下推优化: 实际场景中存在大量由谓词条件和 Limit 子句组成的查询,通常用于快速探查符合条件的数据,但无需返回查询结果,但要求探查完成后快速结束查询。Doris 在查询规划时将 Limit 下推到数据扫描节点,并在扫描任务调度、跨节点数据传输、查询快速熔断方面进行了优化,显著减少了 IO 开销。

这些优化降低了 Doris 对 CPU 和 IO 资源的开销,在混合负载的 Hive 查询场景中大幅提升了查询的稳定性和可预期性,尤其在长尾查询和 95 分位以上的延迟上效果显著。

06 缓存优化

缓存功能降低了通过网络访问外部数据源的不可预测性,并提升了热点数据的读取性能。在丰景台场景下,单集群磁盘缓存容量达到 10 TB。在使用 Doris 替换 Presto 的过程中,针对缓存的时效性和一致性进行了优化,这不仅提高了查询性能和稳定性,还有效降低了对 Hive Metastore 和 HDFS 的访问压力。

  • 提升数据缓存命中率: Doris 数据缓存属于本地缓存,采用一致性哈希算法确保对相同数据文件的请求被发送到同一个节点,从而提升缓存命中率。在丰景台场景中,缓存命中率高达 96%
  • 单查询文件列表共享: 在需要实时感知 Hive 分区文件变化的场景中,关闭了 Doris 的全局分区文件列表缓存,这意味着每次查询需通过 List 操作从 HDFS 获取文件列表。为此,Doris 进行了优化。例如在同一查询中对同一张表的子查询时,进行 Union 或自关联操作,子查询间可以共享文件列表。这使得查询规划性能数倍提升,并降低了对 HDFS 的请求压力。

基于 Doris 的云产品改造

Doris 除了在丰景台场景广泛应用之外,顺丰科技正在基于 Doris 进行内部云产品改造,面向顺丰内部提供按需的 Doris 集群服务。当前正进行 Doris 容器化部署的实践,通过容器化的方式, 提供更小规格的资源供业务选择,实现按需使用。

以下为内部云上 Doris 产品图以及部分管理页面展示:

基于 Doris 的云产品改造.png

基于 Doris 的云产品改造-2.png

基于 Doris 的云产品改造-3.png

应用层主要分为两部分:

  • 面向用户: 用户能够在页面上进行集群申请操作,该申请流程会自动接入内部计费体系。在完成集群申请后,用户可在页面上进行查询以及查看监控、日志,实施库表授权等相关自助操作,还可通过页面针对所在的慢查询进行分析等。
  • 面向运维: 运维人员可以对所有资源进行管理,诸如存储空间、集群等。同时,还能够对集群进行版本升级以及通用模版配置修改等多种操作,从而便于运维人员在线上对故障进行快速处理,以保障云上集群的服务质量。

顺丰科技期望在 2025 年全面完成 Doris 的平台化建设,推动 Doris 产品更广泛在内部应用。

结束语

01 业务收益

目前,顺丰的临时查询业务、丰景台报表业务场景已从 Presto 100% 切换到 Doris 集群中,日均查询量超过 100W。

  • 查询性能提升 3 倍: P95 性能降低到 20 秒以内,提升近 3 倍。大于 50s 的查询由 8% 降低至 1.5%,小于 10s 的查询比例由 72% 提升至 88%
  • 硬件资源节省 48%: 将 Presto 的上万核规模降低至 Doris 的数千核规模,实现了约 48% 的资源节省

02 未来规划

除了湖仓分析场景,Doris 在日志分析和实时报表分析中表现同样出色。顺丰科技正与 Doris 社区、飞轮科技团队合作,持续推进 Doris 在内部的业务拓展。

  • 完善稳定性及兼容性: 今年将全面下线 Presto 服务,继续完善 Doris 集群稳定性,并增强对 Presto SQL 的兼容性。同时引入 Delta Lake 替换 Hive 格式,验证 Doris 3.0 对 Delta Lake 的支持(Doris 计划在 3.1 版本中增强对 Delta Lake 的读取能力)。
  • 日志及半结构化场景应用: Doris 当前已在多个企业的日志及半结构化数据分析场景成功落地,顺丰也在尝试用 Doris 替换 Elasticsearch,简化更多数据平台的组件,构建统一数据分析技术栈。
  • 尝试存算分离架构: 计划引入 Doris 3.0 所支持的存算分离架构,不仅提升多租户弹性能力,还能支持冷数据动态备份,降低用户存储成本。
  • Doris 集群运维: 随着 Doris 在顺丰内部的逐渐铺开,需要更完善的工具来运维 Doris 集群或诊断线上问题。顺丰正在推动 Doris 社区提供更加完善的 SQL 诊断工具,如可视化的 Query Profile 分析能力、慢 SQL 诊断优化工具等。

相关文章:

顺丰科技:从 Presto 到 Doris 湖仓构架升级,提速 3 倍,降本 48%

导读:顺丰科技引入 Doris 替换 Presto,在内部可视化数据自助分析工具丰景台场景广泛应用。目前,顺丰临时查询业务、丰景台报表业务的 Presto 场景已经 100% 切换到 Doris 集群中,日均查询量 100W。并实现 P95 性能提升近 3 倍&…...

使用 Cesium 构建 3D 地图应用的实践

CesiumJS 是一个功能强大的开源 JavaScript 库,能够帮助开发者快速构建高性能、高精度的 3D 地球和地图应用 。本文将介绍如何使用 Cesium 构建一个基本的 3D 地图应用,并加载自定义的 3D Tiles 模型。 初始化 Cesium Viewer 首先,在 Vue 的…...

公链钱包开发:技术逻辑与产品设计实践

公链钱包开发:技术逻辑与产品设计实践 ——2025年数字资产管理的范式革命与用户价值重构 一、公链钱包的核心理解:技术逻辑与用户价值的耦合 公链钱包不仅是存储数字资产的工具,更是用户与区块链生态交互的“超级入口”。其核心价值体现在三…...

mobile自动化测试-appium webdriverio

WebdriverIO是一款支持mobile app和mobile web自动化测试框架,与appium集成,完成对mobile应用测试。支持ios 和android两种平台,且功能丰富,是mobile app自动化测试首选框架。且官方还提供了mobile 应用测试example代码&#xff0…...

【Python开源】深度解析:一款高效音频封面批量删除工具的设计与实现

🎵 【Python开源】深度解析:一款高效音频封面批量删除工具的设计与实现 🌈 个人主页:创客白泽 - CSDN博客 🔥 系列专栏:🐍《Python开源项目实战》 💡 热爱不止于代码,热情…...

飞算 用到妙处 AI辅助编程 - 双击方法名,自动识别到上下文中很方便

1. 双击findtasktypedict方法。右侧箭头指向自动识别 2. 按照说的内容机型了修改...

msIT大模型推理迁移调优工具

msIT LLM大模型ATB推理精度工具 适用场景:大模型加速库推理精度分析工具能力:大模型推理精度工具msIT llm,提供基于加速库推理的精度调试工具,支持数据dump、精度比对、单算子预检、溢出检测、模型迁移等能力。 msIT LLM大模型…...

YOGA Air X ILL10(83CX)/YOGA 14 ILL10X(83LC)2025款恢复开箱状态原装出厂Win11系统OEM镜像

适用机型(MTM): 【83LC】链接:https://pan.baidu.com/s/1AwbFR9nccvyzS1pOCToMvA?pwdewjs 提取码:ewjs 【83CX】链接:https://pan.baidu.com/s/1wMRI8ETodVG59GBDVDLgQg?pwdn3nx 提取码:n3nx lenovo联想原装wi…...

使用Deployment部署运行Nginx和Apache服务

1.Deployment简介 : 在Kubernetes(k8s)中,Deployment 是一种核心控制器资源,用于管理无状态应用的声明式部署、扩展与更新。它通过定义应用的期望状态,由控制器自动维护实际状态与期望状态的一致性&#x…...

382_C++_在用户会话结束时,检查是否有其他会话仍然来自同一个客户端 IP 地址,没有连接状态设置为断开,否则为连接

之前出现的问题:重启管理机,工作机上面热备连接状态显示未连接 (此时是有一个工作机连接管理机的),所以正常应该是连接状态解决:根因分析: 重启管理机后,管理机给过来的cookie是空的,导致工作机同时存在两个管理机的session,在其中一个超时后,调用回调函数通知会话断开…...

【 Redis | 实战篇 短信登录 】

前言: 主要完成了基于Session实现登录,解决集群的Session共享问题,从而实现了基于Redis来实现共享Session登录 1.基于Session实现登录 1.1.发送短信验证码 步骤: 前端提交手机号 》校验手机号 》不符合返回错误信息&#xff0…...

AI(学习笔记第二课) 使用langchain进行AI开发

文章目录 AI(学习笔记第二课) 使用langchain进行AI开发学习内容:1. 使用背景2.创建python(pycharm community版)开发环境并连接deepseek2.1 创建python(pycharm community版)开发环境2.2 创建python工程2.3 写入初始py…...

如何查看某个文件中的特殊符号

Q:如何查看某个文件中的特殊符号,比如说是换行符之类的转义字符? 1,法1:使用cat -A cat -A filename可以看到-A本质上就是-vET,也就是 展示所有的字符,-v是显示非打印字符,这个需…...

venv环境里控制scapy版本和起trex v2.87

要在虚拟环境(venv)中控制Scapy版本并运行TRex v2.87,您可以按照以下步骤操作: 创建一个新的虚拟环境: python3 -m venv trex-env激活创建的虚拟环境。在Linux或macOS上: source trex-env/bin/activate在Wi…...

第五十四篇 AI与数据分析

一、AI数据分析就像做菜 想象你在厨房做一道新菜,AI数据分析的流程其实非常相似: 买菜(获取数据) 去市场挑选新鲜蔬菜 从Excel/数据库获取数据例:pd.read_csv(超市销售表.csv) 洗菜切菜(清洗数据&#x…...

C++面向对象编程入门:从类与对象说起(一)

C语言是面向过程,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题,而C面向的是对象,关注的是对象,将一件事拆解成多个对象,靠对象之间互交完成。 目录 类的定义 类的两种定义 …...

openwrt之UCI 增删改查(add/get/set /add_list...)

1&#xff0c;引入 UCI是openwrt的统一配置接口&#xff0c;所有的配置文件被存放在/etc/config/下&#xff0c;使用UCI工具操作具体可查询官网中的开发文章&#xff1a; [OpenWrt Wiki] The UCI systemhttps://openwrt.org/docs/guide-user/base-system/uciconifg <secti…...

TypeScript 中,属性修饰符

在 TypeScript 中&#xff0c;属性修饰符&#xff08;Property Modifiers&#xff09;是用于修饰类的属性或方法的关键字&#xff0c;它们可以改变属性或方法的行为和访问权限。TypeScript 提供了三种主要的属性修饰符&#xff1a;public、private 和 protected。此外&#xff…...

LeetCode 3341.到达最后一个房间的最少时间 I:Dijkstra算法(类似深搜)-简短清晰的话描述

【LetMeFly】3341.到达最后一个房间的最少时间 I&#xff1a;Dijkstra算法&#xff08;类似深搜&#xff09;-简短清晰的话描述 力扣题目链接&#xff1a;https://leetcode.cn/problems/find-minimum-time-to-reach-last-room-i/ 有一个地窖&#xff0c;地窖中有 n x m 个房间…...

http重新为https

1.先创建一个配置文件 主要方便实验 可以将主配置文件下的location全部注释掉&#xff0c;方便观察 2.配置新配置文件 server{ listen 80; listen 443 ssl; ssl_certificate /usr/local/nginx/conf.d/ssl/www.kgc.com.crt; ssl_certificate_key /usr/local/nginx/conf…...

2025最新免费视频号下载工具!支持Win/Mac,一键解析原画质+封面

软件介绍 适用于Windows 2025 最新5月蝴蝶视频号下载工具&#xff0c;免费使用&#xff0c;无广告且免费&#xff0c;支持对原视频和封面进行解析下载&#xff0c;亲测可用&#xff0c;现在很多工具都失效了&#xff0c;难得的几款下载视频号工具&#xff0c;大家且用且珍…...

CTF杂项入门(BUUCTF-Misc第一页)

写在前面 题目涵盖&#xff1a;BUUCTF 第一页杂项 涉及工具&#xff1a; 随波逐流、foremost、binwalk、honeyview、010editor、zipperello、archpr、wireshark、cyberchef、QR_Research、PNGCRC爆破、stegsolve、Audacity、河马、D盾、routerpassview、steghide&#xff0c;以…...

碰一碰发视频一键成片功能开发实践与技术解析

在数字化营销与内容传播领域&#xff0c;碰一碰发视频技术凭借便捷的交互体验&#xff0c;已成为实体商业引流的重要手段。而一键成片功能的融入&#xff0c;能够让用户在触碰 NFC 标签后&#xff0c;快速获取高质量的视频内容&#xff0c;进一步提升传播效率。本文将从功能需求…...

【CTFer成长之路】举足轻重的信息搜集

举足轻重的信息搜集 信息搜集 常见的搜集 题目描述: 一共3部分flag docker-compose.yml version: 3.2services:web:image: registry.cn-hangzhou.aliyuncs.com/n1book/web-information-backk:latestports:- 80:80启动方式 docker-compose up -d 题目Flag n1book{info_…...

centos搭建dokcer和vulhub

1、换源阿里云 2、安装docker与docker-compose 下载1.29.2 docker compose sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 如果下载不了&#xff0c;可以…...

Linux系统下使用Kafka和Zookeeper

Apache Kafka 是一个分布式流处理平台,最初由 LinkedIn 开发,后来成为 Apache 软件基金会的顶级项目。它具有高吞吐量、可扩展性、持久性、容错性等特点,主要用于处理实时数据流。 Linux系统下使用Kafka 1.安装 Java Kafka 和 Zookeeper 都是基于 Java 开发的,所以需要先…...

vscode与keil的乱码不兼容问题

都用英文注释 中文注释的话&#xff0c;打开vscode的自动识别格式,如下 解决VSCode中文乱码 自动识别也可以设置识别优先级&#xff0c;把GB2312和UTF8排在自动识别序列前面(因为keil默认就是GB2312) 4.!!!在暂存更改的时候&#xff0c;不要把vscode的设置给暂存了&#xff…...

C++类和对象:构造函数、析构函数、拷贝构造函数

引言 介绍&#xff1a;C类和对象&#xff1a;构造函数、析构函数、拷贝构造函数 _涂色_博主主页 C基础专栏 一、类的默认成员函数 先认识一下类中的默认成员函数&#xff1a; 默认成员函数就是用户没有显式实现&#xff0c;编译器会自动生成的成员函数称为默认成员函数。⼀个类…...

【FAQ】HarmonyOS SDK 闭源开放能力 — PDF Kit

1.问题描述&#xff1a; 预览PDF文件&#xff0c;文档上所描述的loadDocument接口&#xff0c;可以返回文件的状态&#xff0c;并无法实现PDF的预览&#xff0c;是否有能预览PDF相关接口&#xff1f; 解决方案&#xff1a; 1、执行loadDocument进行加载PDF文件后&#xff0c…...

Spring Boot 3 + Undertow 服务器优化配置

优化背景 当你的application需要支持瞬时高并发的时候&#xff0c;tomcat已经不在是最优的选择&#xff0c;我们可以改为Undertow&#xff0c;并对其进行优化。 Undertow 是一个轻量级的、高性能的Java Web 服务器&#xff0c;由JBoss 开发并开源。它是基于非阻塞&#xff08;…...

网易游戏 Flink 云原生实践

摘要&#xff1a;本文整理自网易游戏实时计算&数据湖平台负责人林小铂老师和网易游戏大数据开发工程师陈宇智老师&#xff0c;在Flink Forward Asia 2024 云原生专场的分享。主要分为四个部分&#xff1a; 1、背景 2、架构演进 3、实践挑战 4、总结和展望 01.背景 Flink 在…...

使用迁移学习的自动驾驶汽车信息物理系统安全策略

信息物理系统 (CPS) 是一种新兴系统,它通过信息通信基础设施,实现控制系统、传感器、执行器和周围环境等物理组件之间有效的实时通信与协作 (C&C)。自动驾驶汽车 (AV) 是大量采用 CPS 方法的领域之一,旨在通过降低能源消耗和空气污染来改善智慧城市中的人们生活。因此,…...

《算法导论(第4版)》阅读笔记:p11-p13

《算法导论(第4版)》学习第 8 天&#xff0c;p11-p13 总结&#xff0c;总计 3 页。 一、技术总结 无。 二、英语总结(生词&#xff1a;2) 1.precious (1)precious: pretium(“value, worth, price”) adj. of great value(宝贵&#xff0c;珍贵)。 (2)示例 Computing t…...

Qt 编译 sqldrivers之psql

编译postgres pgsql驱动 下载驱动源码修改配置文件编译 下载驱动源码 // 源代码下载 https://download.qt.io/archive/qt/5.15/5.15.2/submodules/驱动目录:qtbase-everywhere-src-5.15.2\src\plugins\sqldrivers 修改配置文件 打开pro文件 右键点击添加库 此处的为debu…...

查看单元测试覆盖率

文章目录 1、POM文件配置2、编写单元测试3、执行单元测试4、查看单元测试覆盖率 1、POM文件配置 pom文件配置jacoco插件 <!-- 生成JaCoCo覆盖率数据插件 --> <plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artif…...

ASP.NET Core 中实现 Markdown 渲染中间件

文章目录 前言一、核心功能二、实现步骤1&#xff09;安装依赖包2&#xff09;创建中间件类3&#xff09;中间件扩展方法4&#xff09;在Program.cs配置5&#xff09;模板文件示例6&#xff09;*.md文件示例7&#xff09;缓存优化8&#xff09;使用示例 三、注意事项总结 前言 …...

AI学习路径

一、AI入门与系统课程 &#xff08;1&#xff09;《开启AI革命&#xff1a;7天从小白到大神》 简介&#xff1a;保姆级教学&#xff0c;覆盖AI基础知识、机器学习、深度学习、自然语言处理&#xff08;NLP&#xff09;、大语言模型&#xff08;LLM&#xff09;等&#xff0c;…...

基于Kubernetes的Apache Pulsar云原生架构解析与集群部署指南(下)

文章目录 k8s安装部署Pulsar集群前期准备版本要求 安装 Pulsar Helm chart管理pulsarClustersBrokersTopic k8s安装部署Pulsar集群 前期准备 版本要求 Kubernetes 集群&#xff0c;版本 1.14 或更高版本Helm v3&#xff08;3.0.2 或更高版本&#xff09;数据持久化&#xff…...

B站搜索关键词全攻略:掌握B站搜索关键词的运作机制

在拥有超过7亿月活用户的B站&#xff0c;每天都有海量视频涌入平台。无论是普通用户还是内容创作者&#xff0c;掌握B站搜索关键词的运作机制&#xff0c;都能极大提升平台体验和内容价值。本文将从用户和创作者双重视角&#xff0c;深入解析B站搜索关键词的应用技巧和优化策略…...

Windows系统安装Cursor与远程调用本地模型QWQ32B实现AI辅助开发

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

DBeaver查询PostgreSQL的只读模式

问题 DBeaver查询PostgreSQL数据表时&#xff0c;注意到经常会出现“Detect unique identifiers" 这个阶段&#xff0c;几乎需要花费10s时间&#xff0c;想着挺浪费时间的。 问题解决办法 把”读取数据表元数据(唯一键)"这个复选框选项去掉&#xff0c;再进行查询…...

C++内存管理与模板初阶详解:从原理到实践

目录&#xff1a; 一、C/C内存管理1. 内存区域划分2. 动态内存管理3. 底层原理&#xff1a;operator new/delete4.new和delete的实现原理5. 定位new&#xff08;了解即可&#xff09; 二、模板初阶1. 泛型编程2. 函数模板实例化隐式实例化&#xff1a;编译器自动推导类型显式实…...

02-GBase 8s 事务型数据库 客户端工具dbaccess

dbaccess概述 数据库产品通常会提供一个命令行客户端工具。 数据库厂商 命令行客户端 Oracle sqlplus MySQL mysql Marladb mysql GBase 8s dbaccess Kingbase ES ksql DM8 disql dbaccess 是 GBase 8s 数…...

【kubernetes】通过Sealos 命令行工具一键部署k8s集群

一、前言 1、sealos安装k8s集群官网&#xff1a;K8s > Quick-start > Deploy-kubernetes | Sealos Docs 2、本文安装的k8s版本为v1.28.9 3、以下是一些基本的安装要求&#xff1a; 每个集群节点应该有不同的主机名。主机名不要带下划线。所有节点的时间需要同步。需要…...

【Pandas】pandas DataFrame abs

Pandas2.2 DataFrame Computations descriptive stats 方法描述DataFrame.abs()用于返回 DataFrame 中每个元素的绝对值 pandas.DataFrame.abs() pandas.DataFrame.abs() 方法用于返回 DataFrame 中每个元素的绝对值。该方法适用于包含数值型数据的 DataFrame&#xff0c;对…...

如何在 C# 和 .NET 中打印 DataGrid

DataGrid 是 .NET 架构中一个功能极其丰富的组件&#xff0c;或许也是最复杂的组件之一。写这篇文章是为了回答“我到底该如何打印 DataGrid 及其内容”这个问题。最初即兴的建议是使用我的屏幕截图文章来截取表单&#xff0c;但这当然无法解决打印 DataGrid 中虚拟显示的无数行…...

使用DEEPSEEK快速修改QT创建的GUI

QT的GUI&#xff0c;本质上是使用XML进行描述的&#xff0c;在QT CREATOR的界面编辑处&#xff0c;按CTRL2 切换到代码视图&#xff0c;CTRL3切换到编辑器视图。 CTRL2 切换到代码视图 CTRL3 切换到编辑器视图 鼠标左键点击代码视图中&#xff0c;按CTRLA → CTRLC复制XML代码…...

前端面试宝典---JavaScript import 与 Node.js require 的区别

import 和 require 来自不同的规范&#xff1a; import 是 ES6&#xff08;ECMAScript 2015&#xff09;模块系统的一部分&#xff0c;是 JavaScript 语言的标准语法 require 是 CommonJS 规范的一部分&#xff0c;最初为 Node.js 环境设计 加载方式&#xff1a; require() …...

C++入门小馆 :多态

嘿&#xff0c;各位技术潮人&#xff01;好久不见甚是想念。生活就像一场奇妙冒险&#xff0c;而编程就是那把超酷的万能钥匙。此刻&#xff0c;阳光洒在键盘上&#xff0c;灵感在指尖跳跃&#xff0c;让我们抛开一切束缚&#xff0c;给平淡日子加点料&#xff0c;注入满满的pa…...

极简远程革命:打破公网桎梏,重塑数字生活新体验

简远程革命&#xff1a;节点小宝&#xff0c;让家庭与职场无缝互联 ——打破公网桎梏&#xff0c;重塑数字生活新体验 引言&#xff1a;当公网IP成为过去式 在2025年的今天&#xff0c;80%的家庭仍因缺乏公网IP而深陷远程访问困境。NAS玩家为端口映射焦头烂额&#xff0c;家长…...