网易游戏 x Apache Doris:湖仓一体架构演进之路
导读:网易游戏引入 Apache Doris 升级架构,先是替换 Elasticsearch、Hbase、Clickhouse 构建了实时数仓,而后基于 Apache Doris 和 Iceberg 构建了湖仓融合架构,实现架构的大幅简化及统一。目前,网易游戏 Apache Doris 集群超 20 个 ,总节点数百个,已对接内部 200+ 项目,日均查询量超过 1500 万,总存储数据量 PB 级别。
近年来,随着网易游戏品类和产品的快速增加,数据规模呈现爆炸性增长,日均新增数据可达百 TB 级别。面对如此庞大的数据增长,如何高效、实时地提供数据分析成为一项重要挑战。网易游戏技术中心效能研发部的重点工作围绕数据、人工智能和安全展开,旨在通过数据和 AI 为公司众多游戏提供运营及决策支持,同时保护网易所有与游戏相关的产品、服务和资源的安全。这是推动游戏商业成功、品质提升以及渠道优化的重要支撑。
网易游戏早期数据平台是由 Hive、Spark、Trino、ElasticSearch、HBase、ClickHouse 多种技术栈组成,存在查询性能低、实时性不足、运维及研发成本高等问题。为此,引入 Apache Doris 进行架构升级,最初用 Doris 替换了 Elasticsearch、Hbase、Clickhouse,构建了实时数仓;随后基于 Apache Doris 和 Iceberg 构建了湖仓融合的架构,实现了数据架构的简化,数据的时效性和查询性能大幅提升。网易游戏 Apache Doris 集群超 20 个 ,总节点数百个,已对接内部 200+ 项目,日均查询量超过 1500 万,总存储数据量 PB 级别。
早期架构及痛点
在早期架构中,大部分查询请求通过离线数据仓库(Hive)以及多种查询引擎(如 Hive、Spark 和 Trino)完成,而针对时效性要求更高的实时查询分析,则由 Elasticsearch、HBase 和 ClickHouse 提供支持。
这一架构在使用过程中暴露出了许多问题:
- 数据时效性差:该架构数据处理链路长,需要经过多次流转,时效性对实时分析业务满足比较吃力。
- 查询性能不优:依赖 Hive、Spark、Trino 等查询引擎的效率不够高;HBase、Elasticsearch、ClickHouse 对复杂查询支持非常有限。
- 运维成本高:涉及组件较多,包括 Hive、Spark、Trino、HBase、Elasticsearch、ClickHouse 等,运维复杂度相对较高,需要投入较多的人力。
- 研发成本高:过多的组件也带来较高的研发成本。面对新增的需求,不仅要开发 Spark、Trino 作业,也要开发 HBase 作业以及 ElasticSearch 的 DSL,这要求分析师理解并学习不同组件的使用方法及数据模型,研发成本及难度较高、开发流程长。
因此,网易游戏亟需一种具备简洁架构设计的引擎,既能支持业务对高时效性的要求,又希望其能够替代早期架构中多技术栈,顺应湖仓一体发展趋势。而 Apache Doris 作为网易内部应用最为广泛的 OLAP 引擎之一,随着近些年在湖仓一体方面的深耕,自然成为我们的首要选择。
阶段 1 - 基于 Apache Doris 构建实时数仓
最初引入 Doris 时,离线数据仓库的链路保持不变,同时基于 Doris 构建了实时数据仓库,成功替代了原架构中的 Elasticsearch 、HBase、ClickHouse。
具体而言,实时采集的数据可以直接落入 Doris,实现秒级可见性。此外,离线数据也可以通过 Broker Load 或 SeaTunnel 导入 Doris,以加速关联查询。该方案有效提升了许多业务场景的响应速度,并且大大简化了架构。
阶段 2 - 基于 Doris 构建高效易用的湖仓一体架构
随着 Apache Doris LakeHouse 能力完善,网易游戏自 Apache Doris 2.1 版本发版,对架构进一步升级,以 Apache Doris 为核心构建高效易用的湖仓一体架构。
其主要变化在于,在阶段 1 的基础上进一步替换了 Hive、Spark、Trino 等查询引擎,整合了离线数仓和实时数仓,升级为数据湖上统一的数据仓库。全新的湖仓一体架构充分结合了仓和湖的能力,实现存储和查询的统一,并基于 Apache Doris 物化视图等能力可以进一步简化数据建模加工、实现数据湖查询加速等能力。
结合内部自研的统一的查询引擎 SmartSQL,我们设计了两种湖仓融合方案,分别是湖上建仓和湖仓融合。这两种方案在实际场景中都有使用,不同的业务根据关注点选择不同的方案。
SmartSQL:实现多个引擎之间的智能路由,使用户能够专注于业务开发。为实现智能路由,进行了大量工作,包括多引擎语法兼容、查询优化以提升作业效率和降低成本、统一权限管理与行列加密,以及在复杂场景下提供统一接入方案。目前,我们也在借助大模型的能力,积极提升 SmartSQL 的智能水平。
3.1 湖上建仓
在湖上建仓方案中,数据流仍然保持之前的链路,统一写到 Hive、Iceberg 等数据湖中,然后在 Doris 中建立一些查询加速层,通过 Doris 外部表的物化视图功能,定期将数据从 Hive 、Iceberg 同步到 Doris 中。
当用户执行查询时,SmartSQL 会解析查询是否命中物化视图。如果命中,查询将直接走 Doris 内表,速度最快;如果未命中,则可以使用 Doris Catalog 查询数据湖;对于一些超大 ETL 作业还可以进一步降级到先前的引擎组,以确保查询的最终成功。
3.2 湖仓融合
在湖仓融合方案中,数据优先进入 Apache Doris,在 Doris 进行 ETL 加工处理,查询也基于 Doris 进行,数据进入的时效性和分析性能极好,特别适合实时分析为主的场景。Doris 中数据变冷后,利用 Doris 提供的数据湖写回功能,再将冷数据写回到 Iceberg 中,进行数据的统一入湖管理。
3.3 融合工作
3.3.1 SQL 兼容
在湖仓融合架构中,SQL 兼容性至关重要,这样能够更轻松地将现有的分析工具和业务逻辑迁移到新的数据架构中。不仅提高了用户的使用体验,还降低了培训和迁移的成本,使数据分析人员能够快速上手,直接利用他们熟悉的工具进行分析。而 Doris 在兼容性上表现优异:
- Hive UDF 兼容:Doris 在 SQL 兼容性方面表现卓越,其设计目标是兼容 Hive UDF。因此,在迁移通用 UDF 和业务 UDF 时,只需进行极少的修改。
- SQL Convert 语法兼容:对于某些用户而言,他们的 SQL 语法可能与 Doris 不兼容。可以利用社区提供的 SQL 转换工具来处理用户的一些旧查询。目前,Doris 支持 Presto/Trino、Hive、PostgreSQL 和 Clickhouse 等常见查询引擎的 SQL 方言转换,在实际用户场景中,兼容率可达到 99%以上。
3.3.2 资源隔离
Doris 现已能够覆盖大部分 Trino 的场景。网易游戏内部使用 Trino 时,设定了许多限制参数,以避免单个用户的大查询占用过多资源,因此这些限制参数与 Doris 的兼容性至关重要。
我们注意到社区提供了 Workload Group,并经过测试发现,所有 Trino 的限制参数均可兼容,甚至在某些硬性资源隔离方面表现更优。此处列举了一些替代方法,有相同想法的读者可以参考。
3.4.3 弹性计算资源利用
社区提供了完整的 Doris on K8s 方案以实现弹性节点,但考虑到网易游戏自建的 Hadoop 集群,以及该集群典型的潮汐现象——白天资源利用率较低,而凌晨资源消耗较高,为了充分利用计算资源,决定将弹性计算资源启动在 YARN 上。
YARN 上的启动是利用了 Apache Slider 组件,该组件预定义了一套创建、启动和销毁的流程,从而简化了在 YARN 上的部署过程。我们的弹性节点也部署在 YARN 上。如果要实现多种 YARN,所需的资源准备相对简单,仅需准备相关的启动脚本,并实现 Slider 的启动和销毁方法,即可快速部署 Doris。
基于 Apache Doris 的应用场景
4.1 大宽表场景
在大宽表场景中,采用 Doris 替代 Clickhouse,并在问卷业务和 CDN 业务中应用。虽然 Doris 和 Clickhouse 性能相当,但 Doris 的系统维护更加简便,降低了运维人员的技术门槛,减少了因运维复杂性带来的潜在风险,相比之下,Clickhouse 的运维难度较高,要求团队具备更深入的技术知识和经验。
4.2 用户行为分析
主要应用于点击行为、付费事件跟踪和用户画像等场景。依赖 Doris 在 Bitmap 位图索引上优异的性能和丰富的 Bitmap 函数支持,大大提升了这类场景的分析效率。我们以玩家 UV 统计的应用场景举例:
游戏产品会在版本发布当天公告更新及优化信息。为精准监控游戏运营的各个环节、为玩家提供良好的游戏体验,数据团队需监控玩家打开游戏时,从 Patch(游戏补丁)更新到最后登录过程中转化情况,量化各环节的转化数据。这就要求对玩家设备 ID 进行精确去重,而去重的数据量高达 10 亿级别。
针对不同的使用场景,可选择不同 Bitmap 优化方案。
- 方式一:首先在 Hive 中构建玩家设备 ID 全局字典表,接着将该表导入到 Doris 表对应的 Bitmap 列;
- 方式二:针对明细表创建物化视图,通过
bitmap_hash64
函数将字符串转化为 Bitmap 类型。使用bitmap_hash64
而不使用bitmap_hash
的原因是bitmap_hash
在数据量大于 2000 万时碰撞较为严重,导致结果不准确。
优化后,在 14 亿数据的场景下,Bitmap 查询峰值所占用的 Doris 内存从 54GB 下降到了 4.2GB,查询时间从 20 秒下降到了 2 秒以内,提升效果颇为显著。
4.3 统一 SQL 引擎
Doris 可以作为统一 SQL 查询引擎,可连接不同数据源进行联邦分析,当前已实现 Doris、MySQL、Hive 和 Iceberg 等数据源的联邦查询。这种能力使得用户能够在不同的数据存储和处理系统之间无缝地进行数据整合和分析。
Doris 自带联邦查询模块,高效处理跨数据源查询,有效替代了 Presto/Trino 的应用场景,提供了更为优越的性能。实验证明,Doris 的查询速度优于 Presto 2-3 倍。
4.4 AI ChatBI 执行引擎
凭借 Doris 的极速查询性能,将其应用于大模型相关业务。首先,Doris 被用作 ChatBI 的最终执行引擎。其次,将所有元数据存储在 Doris 中,并在 SmartSQL 中构建了多个智能体。当用户根据需求提交问题时,可以在多维组中检索相关数据,以补充智能体,实现 SQL 预估、SQL 改写、SQL 智能优化及报错智能诊断等一系列功能。
未来规划
目前,网易游戏拥有超过 20 个 Doris 集群,总节点数达数百个,已对接内部 200 多个项目,日均查询量超过 1500 万,总存储数据量在 PB 级别。未来,还将基于 Doris 在以下几方面发力:
- 数据湖解决方案推广:基于 Apache Doris 的数据湖解决方案将在更多业务部门和场景中推广,助力用户降本提效。
- 实现智能物化:物化视图是加速数据湖查询的重要利器,未来的重点工作是基于用户作业对热点 SQL 片段进行物化。
- 3.0 版本升级: 3.0 版本采用云原生的存算分离全新架构,为数据湖场景提供了更多业务模式的可能性,未来将探索并升级该版本。
- 内部 Manager 建设: 内部 Doris Manager 将支持 2.1 及 3.0 版本新特性,尤其是对用户最关心的功能迭代与开发。
如果你对 Apache Doris 湖仓一体化建设感兴趣,可加入社区。
相关文章:
网易游戏 x Apache Doris:湖仓一体架构演进之路
导读:网易游戏引入 Apache Doris 升级架构,先是替换 Elasticsearch、Hbase、Clickhouse 构建了实时数仓,而后基于 Apache Doris 和 Iceberg 构建了湖仓融合架构,实现架构的大幅简化及统一。目前,网易游戏 Apache Doris…...
大模型会不会取代人类工作
大模型是否会取代人类工作? 随着人工智能技术的迅猛发展,尤其是大型语言模型(如GPT-4、BERT等)的出现,人们开始担忧这些先进的技术是否会在未来取代人类的工作。这种担忧并非空穴来风,历史上每一次技术革命…...
深入理解 Linux 权限管理:从 Shell 到文件权限
🌼🌼 在 Linux 系统中,权限是保障系统安全与稳定的核心之一。每个操作都可能涉及权限的管理和控制,特别是当你开始以不同用户的身份进行操作时。本文将通过生动的比喻与详细的技术解析,带你一起深入理解 Linux 权限系统…...
.net core 项目快速接入Coze智能体-开箱即用-全局说明
目录 一、Coze智能体的核心价值 二、开箱即用-效果如下 三 流程与交互设计 为什么要分析意图,而不是全部交由AI处理。 四 接入前的准备工作 五:代码实现----字节Coze 签署 JWT和获取Token .net core 项目快速接入Coze智能体-开箱即用 .net core快…...
React 开放封闭原则详解,构建可扩展的应用
开放封闭原则 React 采用了一些面向对象编程的原则和概念,其中之一就是开放封闭原则(Open-Closed Principle,OCP),它是面向对象编程的一个基本原则。本文将详细解释开放封闭原则的概念和在 React 中的应用,…...
【并行分布计算】Hadoop完全分布搭建
Hadoop完全分布搭建 1.为了使机器都处于同一个局域网中,先要修改机器的ip地址分配方式为固定ip,并为其固定分配一个ip地址。 [rootlocalhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33 问题:修改ip地址后,网络无法正常…...
Three.js + React 实战系列 : 从零搭建 3D 个人主页
可能你对tailiwindcss毫不了解,别紧张,记住我们只是在学习,学习的是作者的思想和技巧,并不是某一行代码。 在之前的几篇文章中,我们已经熟悉了 Three.js 的基本用法,并通过 react-three-fiber 快速构建了一…...
四月十六日华为发布会
智能家居及穿戴类 华为智能门锁 2 系列发布:2025 年 4 月 16 日,华为智能门锁 2 系列正式发布。该系列引入 AI 掌静脉识别技术和 AI 3D 人脸识别 3.0,具备高安全性;采用超清智能大猫眼,可视范围达 161;通过…...
23种设计模式-创建型模式之工厂方法模式(Java版本)
Java 工厂方法模式(Factory Method Pattern)详解 🌟 什么是工厂方法模式? 工厂方法模式是一种创建型设计模式,定义一个创建对象的接口,让子类决定实例化哪一个类。 它让类的实例化推迟到子类进行…...
基于FreeBSD的Unix系统搭建Nginx+PHP5运行环境
服务器操作系统版本:FreeBSD-10.1-i386 Nginx安装配置 1.以ports形式安装 #进入nginx目录 cd /usr/ports/www/nginx #执行编译安装 make install 2.编辑配置文件 #进入etc目录 cd /etc #编辑配置文件 ee rc.conf #进入编辑模式 i #参照如下设置 nginx_enable”YES…...
医院处方外流对接外部药房系统(合规python代码版)
系统概述 本系统旨在帮助医院实现与外部零售药店的安全、合规对接,满足2025年医保局和卫健委关于处方流转的最新规定。系统采用Python开发,基于RESTful API实现医院HIS系统与外部药房之间的处方信息传输、医保支付验证和处方状态跟踪等功能。 系统架构 #mermaid-svg-zKU5Wj…...
第十七届“华中杯”B 题校园共享单车的调度与维护问题分析
问题1:估算共享单车总量及不同停车点位在不同时间点的数量分布 首先,我们需要对附件1的数据进行汇总,以估算出校园内的共享单车总量。由于数据是按不同时间和停车点位统计的,我们可以通过对所有时间和点位的单车数量进行求和&…...
线程池的封装(c/c++)
前言:本文将要封装的线程池相关接口是基于之前一篇文章中的实现(文章链接:Linux多线程编程的艺术:封装线程、锁、条件变量和信号量的工程实践-CSDN博客)。不过无需担心,即使您没有阅读过前文,只…...
「数据可视化 D3系列」入门第六章:比例尺的使用
比例尺的使用 一、比例尺是什么?典型示例: 二、常用比例尺类型1. 线性比例尺 (scaleLinear)2. 序数比例尺 (scaleOrdinal)3. 其他常用比例尺类型: 三、实际应用主要改进点说明 四、比例尺的高级用法1. 颜色比例尺2. 时间比例尺3. 分段比例尺 …...
巧用ChatGPT生成适合小白的Python练习题,助力编程入门
🎁个人主页:User_芊芊君子 🎉欢迎大家点赞👍评论📝收藏⭐文章 🔍系列专栏:AI 【前言】 在Python学习的道路上,练习题是帮助小白快速掌握编程知识和技能的重要工具。然而,…...
iOS15描述文件在哪下载?iOS15测试版描述文件下载与升级教程
iOS 15正式发布:全面升级体验与开发者工具推荐 今天凌晨,备受关注的WWDC21开发者大会上如期召开,果粉期待已久的新一代iOS 15操作系统正式发布。iOS 15系统带来了全新FaceTime与通知界面,并对照片、天气、钱包、地图等应用进行了…...
Java面试(2025)—— Spring
什么是Spring? 结构化回答(总分总模式) ① 一句话定义 “Spring 是一个开源的 Java 企业级应用框架,核心目标是简化企业应用的开发,通过控制反转(IoC)、依赖注入(DI)和面向切面编…...
【C++ Qt】Hello World、初始信号槽、理解对象树 ~~~(通俗易懂 图文并茂)
每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry” 绪论: 本章是Qt的第二篇,带你认识Qt中几个简单的控件如何实现,以及通过信号槽的方式实现一定的用户和程序的联动,还有许多…...
2025.04.16【GroupedandStackedbarplot】生信数据可视化技法
Negative values This blogpost shows what happens when the dataset includes negative values. Most basic streamchart The most basic streamchart you can build with R and the streamgraph package. 文章目录 Negative valuesMost basic streamchart 2025.04.16【Gro…...
java 设计模式之代理模式
简介 代理模式:使用代理类来增强目标类的功能。在代码结构上,代理对象持有目标对象,通过代理对象访问目标对象,这样可以在不改变目标对象的前提下增加额外的功能,如权限校验、缓存等 代理模式内部的角色:…...
Spring Boot实战:基于策略模式+代理模式手写幂等性注解组件
一、为什么需要幂等性? 核心定义:在分布式系统中,一个操作无论执行一次还是多次,最终结果都保持一致。 典型场景: 用户重复点击提交按钮网络抖动导致的请求重试消息队列的重复消费支付系统的回调通知 不处理幂等的风…...
【.net core】【watercloud】数据库连接报错问题
错误信息: 中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Cannot Open when State is Connecting.DbType"MySql";ConfigId"0". English Message : Connection open …...
69. x 的平方根
目录 一、问题描述 二、解题思路 三、代码 四、复杂度分析 一、问题描述 给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。 注意:不允许使用任何内置指数…...
计算机网络基础概论
计算机网络基础概论 目录 一、网络基本概念 1.1. 网络 1.2 互联网 1.3 ip地址 1.3.1 作用 1.3.2 分类 1.4 MAC地址 1.4.1 MAC地址与 IP 地址的关系 1.5 网络协议 二、网络分层模型 2.1 物理层 2.2 数据链路层 2.3 网络层 2.4 传输层 2.5 会话层 2.6 表示层 2.7…...
京东3D空间视频生成技术探索与应用
1. 背景 近年来,随着社交媒体、流媒体平台以及XR设备的快速发展,沉浸式3D空间视频的需求迅猛增长,尤其是在短视频、直播和电影领域,正在重新定义观众的观看体验。2023年,苹果公司发布的空间视频技术为这一趋势注入了新…...
吉利矩阵(DFS)
所有元素为非负整数,且各行各列的元素和都等于 7 的 33 方阵称为 “吉利矩阵”,因为这样的矩阵一共有 666 种。 本题就请你统计一下,各行各列的元素和都等于 5 的 33 方阵一共有多少种? 思路:统计方法数,…...
突破反爬限制的智能数据采集实战 —— 面向中小企业的高效信息监控方案
在当前数据驱动的商业环境中,如何高效、稳定地获取网络数据,已成为众多中小企业进行市场洞察、竞品监测与品牌舆情管理的关键能力。本文将分享一个基于先进API技术构建的社交媒体热点监控系统,聚焦实际应用场景,展示如何在合规前提…...
从0到1:让AI赋能计算机的全流程实践指南
🎁个人主页:User_芊芊君子 🎉欢迎大家点赞👍评论📝收藏⭐文章 🔍系列专栏:AI 【前言】 在数字化浪潮席卷全球的今天,AI(人工智能)早已不是科幻电影中的虚构概…...
IntelliJ IDEA 2025.1 发布 ,默认 K2 模式 | Android Studio 也将跟进
2025.1 版本已经发布,在此之前我们就聊过该版本的 《Terminal 又发布全新重构版本》,而现在 2025.1 中的 K2 模式也成为了默认选项。 可以预见,这个版本可能会包含不少大坑,为下个 Android Studio 祈祷。 首先有一点可以确定&…...
MCP、A2A、Function Calling:AI架构设计的三驾马车
随着AI浪潮的到来,各种技术和概念也层出不穷,作为技术人应该第一时间掌握其核心概念与原理,以便于在工作和交流中傻傻分不清楚,本文主要就最近大家提及比较多的MCP、A2A和Function Call做下普及与区分 在当今快速发展的AI领域&a…...
NO.96十六届蓝桥杯备战|图论基础-多源最短路|Floyd|Clear And Present Danger|灾后重建|无向图的最小环问题(C++)
多源最短路:即图中每对顶点间的最短路径 floyd算法本质是动态规划,⽤来求任意两个结点之间的最短路,也称插点法。通过不断在两点之间加⼊新的点,来更新最短路。 适⽤于任何图,不管有向⽆向,边权正负&…...
OpenHarmony - 小型系统内核(LiteOS-A)(六)
OpenHarmony - 小型系统内核(LiteOS-A)(六) 七、文件系统 支持的文件系统 FAT 基本概念 FAT文件系统是File Allocation Table(文件配置表)的简称,主要包括DBR区、FAT区、DATA区三个区域。其…...
“星睿O6” AI PC开发套件评测 - Windows on Arm 安装指南和性能测评
引言 Radxa联合此芯科技和安谋科技推出全新的"星睿O6"迷你 ITX 主板。该系统搭载了 CIX P1(CD8180)12 核 Armv9 处理器,拥有高达30T算力的NPU和高性能的GPU,最高配备64GB LPDDR内存,并提供了如 5GbE、HDMI …...
JS实现RSA加密
目录 目标 环境 实现RSA加解密 计算RSA加密允许的最大字节长度 目标 使用JS实现RSA加密解密。计算RSA加密允许的最大字节长度。 环境 node-rsa 实现RSA加解密 const NodeRSA require(node-rsa);function getKey() {const keyLength512// 创建 RSA 密钥对const key new …...
Seata方案详细
Seata(Simple Extensible Autonomous Transaction Architecture)是阿里开源的分布式事务解决方案,支持多种事务模式,提供一站式的事务管理能力。以下是其核心原理、模式及实践的详细解析: 一、Seata核心架构与角色 Se…...
深入了解v-model的原理:v-model拆分为value属性和input事件,表单类组件的封装并用v-model简化代码
文章目录 1.v-model的原理1.1.验证:在input文本输入框中不使用v-model实现双向数据绑定1.2.验证:v-model在下拉菜单中的拆分 2.表单类组件的封装2.1.原理或步骤2.2.示例:表单类组件封装之下拉菜单select的封装 3.使用v-model简化代码完整代码 4.拓展示例:完成input文本输入框的…...
设计模式每日硬核训练 Day 14:组合模式(Composite Pattern)完整讲解与实战应用
🔄 回顾 Day 13:桥接模式小结 在 Day 13 中,我们学习了桥接模式(Bridge Pattern): 用于将“抽象”与“实现”分离,适用于双维度变化场景(如图形类型 渲染方式)。它强调…...
RMSIN论文阅读
自适应旋转卷积 (ARC)是否可以换成可变形卷积 研究背景 指向性遥感图像分割(RRSIS):旨在根据文本描述实现遥感图像中目标对象的像素级定位 像素级定位:像素级定位指的是在图像中对目标对象的每个像素进行准确的定位和标记。这意味…...
【音视频】FLV格式分析
FLV概述 FLV(Flash Video)是Adobe公司推出的⼀种流媒体格式,由于其封装后的⾳视频⽂件体积⼩、封装简单等特点,⾮常适合于互联⽹上使⽤。⽬前主流的视频⽹站基本都⽀持FLV。采⽤FLV格式封装的⽂件后缀为.flv。 FLV封装格式是由⼀个⽂件头(file header)和…...
华为OD机试真题——最小的调整次数/特异性双端队列(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
2025 A卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C、C语言、GO六种语言的最佳实现方式! 2025华为OD真题目录全流程解析/备考攻略/经验分享 华为OD机试真题《最小的调…...
华为OD机试真题——统计匹配的二元组个数(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
2025 A卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C、C语言、GO六种语言的最佳实现方式! 2025华为OD真题目录全流程解析/备考攻略/经验分享 华为OD机试真题《统计匹配…...
4.16学习总结
完成134. 加油站 - 力扣(LeetCode)算法题 学习了filewriter的相关方法,了解了字符流的底层原理...
java面试篇 4.9
目录 mybatis: 1、mybatis的执行流程 2、mybatis是否支持延迟加载? 当我们需要去开启全局的懒加载时: 3、mybatis的一级和二级缓存 微服务 1、springcloud五大组件有哪些 2、服务注册和发现是什么意思?springcloud如何实现…...
子函数嵌套的意义——以“颜色排序”为例(Python)
多一层缩进精减参数传递,参数少平铺书代码写更佳。 笔记模板由python脚本于2025-04-16 11:52:53创建,本篇笔记适合喜欢子函数嵌套结构代码形式的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值:在于输出思考与经验,而不仅…...
Python深度学习实现验证码识别全攻略
放在前面 Python深度学习实现验证码识别全攻略 Python深度学习实现验证码识别全攻略 在网络安全领域,验证码作为人机区分的关键防线,广泛应用于登录、注册等场景。随着技术演进,验证码样式愈发复杂,传统识别手段力不从心&#…...
【Linux】su、su-、sudo、sudo -i、sudo su - 命令有什么区别?分别适用什么场景?
目录 su su- sudo sudo -i sudo su - /etc/sudoers su 该命令将启动非登录shell,即虽然以该用户身份启动shell,但使用的是原始用户的环境设置。普通用户账户运行 su 命令切换到另一用户账户,需提供要切换的账户的密码。root用户&…...
算法-同余原理
在计算n个数相加或者相乘再取余时,中间结果可能会溢出导致结果错误,这时可以使用同余原理 一、同余原理 ①加法同余 (a[1] a[2] ... a[n])% m > (a[1] % m a[2] % m ... a[n] % m) % m ② 乘法同余 (…...
深入理解卷积神经网络(CNN):从原理到实践
引言 卷积神经网络(Convolutional Neural Networks, CNN)是深度学习领域最具影响力的架构之一,尤其在计算机视觉任务中表现出色。自2012年AlexNet在ImageNet竞赛中一战成名以来,CNN不断演进,推动着图像识别、医疗影像分析、自动驾驶等领域的快…...
深度学习常见模块实现001
文章目录 1.学习目的2.常见模块使用与实现2.1 ResNet18实现2.2 SeNet模块2.3 CBAM模块 1.学习目的 深度学习在图像处理这块,很多模块已经成型,并没有很多新的东西,更多的是不同的模块堆叠,所以需要我们不断总结,动手实…...
Python实现贪吃蛇三
上篇文章Python实现贪吃蛇一,实现了一个贪吃蛇的基础版本。后面第二篇文章Python实现贪吃蛇二修改了一些不足,但最近发现还有两点需要优化: 1、生成食物的时候有概率和记分牌重合 2、游戏缺少暂停功能 先看生成食物的时候有概率和记分牌重合的…...