ClickHouse查询执行与优化
SQL语法扩展与执行计划分析
特殊函数与子句
WITH
子句:定义临时表达式(CTE),复用中间结果。WITH tmp AS (SELECT ...) SELECT * FROM tmp
ANY
修饰符:在JOIN
时仅保留第一个匹配的行(避免笛卡尔积爆炸)。SELECT ... FROM table1 ANY LEFT JOIN table2 USING (key)
GLOBAL IN
/GLOBAL JOIN
:在分布式查询中,将右表广播到所有节点执行。SELECT ... WHERE id GLOBAL IN (SELECT id FROM remote_table)
LIMIT n BY expr
:按expr
分组后,每组取前n
条数据(类似窗口函数ROW_NUMBER
)。SELECT * FROM table LIMIT 3 BY date ORDER BY time DESC
SAMPLE
子句:快速采样数据(基于哈希或分块)。SELECT * FROM table LIMIT 3 BY date ORDER BY time DESC
。
ARRAY JOIN
:展开数组或嵌套结构为多行。SELECT * FROM table ARRAY JOIN tags
聚合函数扩展
uniqCombined
:近似计算UV(误差率<1%),内存占用低。SELECT uniqCombined(user_id) FROM logs
quantileTDigest
:近似计算分位数(如P99延迟)。SELECT quantileTDigest(0.99)(latency) FROM requests
sumMap
/minMap
:对Map类型(Key-Value
)的聚合计算。SELECT sumMap(keys, values) FROM metrics
anyLast
:返回最后一次出现的非NULL值(适合状态跟踪)。SELECT anyLast(status) FROM events GROUP BY user_id
执行计划优化策略
-
主键索引:确保
WHERE
条件命中ORDER BY
键的前缀。 -
跳数索引:对高基数列使用
SET
或MINMAX
索引加速过滤。 -
避免全表扫描:使用分区裁剪(
PARTITION BY
)和索引过滤;避免在WHERE
中对非索引列进行复杂计算。 -
聚合优化
- 预聚合:使用
SummingMergeTree
或AggregatingMergeTree
减少实时计算。 - Combiner优化:在分布式查询中,优先在本地节点预聚合。
- 预聚合:使用
-
JOIN优化
ANY JOIN
:右表存在重复键,只需保留第一个匹配值。GLOBAL JOIN
:右表数据量小,广播到所有节点避免Shuffle。DISTRIBUTED JOIN
:右表数据量大,按Join键分布数据。
-
资源控制:设置内存限制
max_memory_usage
;调整线程数max_threads
、background_pool_size
。
索引原理
索引类型与适用场景
- 主键索引:基于排序键(
ORDER BY
)的粗粒度索引,定位数据块(Granule)范围,如时间范围过滤。 - 跳数索引:基于列值统计的细粒度索引,跳过不满足条件的数据块,如高基数列的等值或范围过滤。
主键索引(Primary Key)
-
数据排序:MergeTree表的数据按
ORDER BY
指定的列严格排序后存储在磁盘,形成有序数据块(Granule)默认包含8192
行数据。 -
索引结构:主键索引记录每个Granule中第一个行的排序键值,并持久化为
primary.idx
文件。索引条目与Granule一一对应。 -
工作流程
- 查询条件解析:优化器提取
WHERE
条件中涉及主键的过滤表达式(如date >= '2023-01-01'
)。 - 索引匹配:通过二分查找定位到满足条件的Granule范围。
- 数据读取:仅加载相关Granule的数据文件(
.bin
),跳过无关数据块。
- 查询条件解析:优化器提取
-
优化策略
- 前缀匹配原则:主键索引仅对
ORDER BY
键的前缀列有效。若查询条件不包含前缀列,索引将失效。 - 合理选择排序键:将高频过滤条件(如时间列)放在
ORDER BY
最左侧。
- 前缀匹配原则:主键索引仅对
跳数索引(Data Skipping Indexes)
- 数据块级统计:跳数索引为每个Granule生成统计信息(如最大/小值),记录在
skp_idx_[index_name].idx
和.mrk
文件中。 - 跳过机制:查询时根据索引统计信息,跳过不满足条件的Granule,减少数据读取量。
- 索引类型
- minmax:记录Granule中列的最小值/最大值,适用于范围查询(如数值列、日期列)。
- set(max_rows):记录Granule中列的取值集合(最多
max_rows
个),适用于低基数枚举列(如状态码)。 - bloom_filter:基于布隆过滤器判断列值是否存在,适用于高基数列的等值查询(如UserID)。
- ngrambf_v1:支持文本子串的布隆过滤器,适用于模糊查询(如
LIKE '%error%'
)。 - tokenbf_v1:基于分词后的布隆过滤器,适用于分词后的文本搜索(如日志关键词)。
索引的存储与维护
-
存储结构
-
主键索引:每个MergeTree表对应一个
primary.idx
文件,按Granule顺序存储排序键的起始值。 -
跳数索引:
1.
.idx
:存储索引数据(如minmax值、布隆过滤器位数组)。2.
.mrk
:记录索引条目与数据文件的偏移量映射。
-
-
数据写入与合并
- 写入阶段:数据插入时,每个新生成的Part(数据部分)独立维护其索引文件。
- 合并阶段(Merge):多个Parts合并时,重新生成合并后的索引文件,确保索引的连续性。
索引优化策略
-
主键设计原则
- 高频过滤列前置:
ORDER BY
的第一列应为最常用的范围过滤条件(如时间列) - 避免过长主键:主键列过多会增加索引文件大小,降低查询效率。
- 高频过滤列前置:
-
跳数索引选择
-
低基数列 →
set
或minmax
索引。 -
高基数等值查询 →
bloom_filter
。 -
文本搜索 →
ngrambf_v1
或tokenbf_v1
。
-
-
参数调优
- index_granularity:减小此值(如
4096
)可提升索引精度,但会增加索引文件大小。 - GRANULARITY:跳数索引的粒度需平衡精度与存储开销。较小的粒度(如
2
)过滤更精确,但索引条目更多。
- index_granularity:减小此值(如
查询优化的核心策略
执行计划分析与优化
-
执行计划分析
-
ReadFromMergeTree
:检查是否命中主键索引或跳数索引(如显示Index ... used
)。 -
Aggregating
:判断是否启用并行聚合(ParallelAggregating
)。 -
Sorting
:是否使用外部排序(ExternalSort
)或内存排序(InMemorySort
)。
-
-
执行优化
-
并行化:设置
parallel_aggregation_min_rows
(默认100000
)触发多线程聚合。 -
索引覆盖:确保
WHERE
条件匹配主键前缀或跳数索引。
-
查询优化
-
过滤条件下推:将过滤条件尽可能提前,减少中间结果集。
-
ClickHouse语法扩展:LIMIT BY替代窗口函数、ANY JOIN减少Shuffle。
-
分布式查询优化
- GLOBAL修饰符:小表右连接时使用
GLOBAL IN
或GLOBAL JOIN
,避免重复计算。 - 本地预聚合:分布式聚合前启用
distributed_aggregation_memory_efficient
。
- GLOBAL修饰符:小表右连接时使用
-
数据预聚合与存储优化
- 物化视图加速:预计算高频指标;直接查询物化视图,避免全量扫描
- 冷热数据分层:按时间自动迁移冷数据到廉价存储(TTL策略)。
分布式场景优化
- 分片键选择
- 均匀分布:选择高基数列(如
user_id
)作为分片键,避免数据倾斜。 - 本地性优化:按业务属性分片(如
region
),减少跨节点查询。
- 均匀分布:选择高基数列(如
- 副本与一致性
- 异步复制:使用
ReplicatedMergeTree
实现副本同步,设置max_replicated_queries
限制并发。 - 最终一致性:查询时添加
SET allow_experimental_consistency=1
容忍副本延迟。
- 异步复制:使用
资源管理与并发控制
资源管理:核心参数与策略
-
内存管理
max_memory_usage
:单个查询最大内存使用量(默认10GB,推荐根据节点内存调整)。max_bytes_before_external_sort
:触发外部排序的阈值,超过后使用磁盘暂存数据(默认1GB,推荐设为总内存的50%)。max_memory_usage_for_all_queries
:所有查询的总内存限制(默认0,表示无限制,推荐设为物理内存的80%)。memory_overcommit_ratio
:允许内存超卖的比例(默认0,不允许超卖)。
-
CPU管理
max_threads
:单查询最大线程数(默认物理CPU核数,推荐设为逻辑CPU核数的75%)。background_pool_size
:后台任务(合并、删除)的线程池大小,推荐生产环境设为16
。load_balancing
:分布式查询的分片调度策略(随机/就近优先)。
-
磁盘与网络
max_concurrent_queries
:最大默认并发查询数(默认100),推荐根据磁盘IOPS进行调整。max_bytes_to_read
:单查询最大读取数据量(默认0,无限制),需要限制大查询。network_bandwidth
:网络带宽限制(默认0,无限制),推荐网络带宽限制(默认0,无限制)。
并发控制:队列与优先级s
-
查询队列机制
-
max_running_queries
:同时运行的查询数(默认100),超出后新查询排队。 -
max_waiting_queries
:最大等待查询数(默认1000),超出后拒绝新查询。
-
-
优先级调度:通过**
priority
**参数设置查询优先级(范围1-10,默认0)。 -
资源组(Resource Groups):配置资源组,实现物理资源隔离。
相关文章:
ClickHouse查询执行与优化
SQL语法扩展与执行计划分析 特殊函数与子句 WITH子句:定义临时表达式(CTE),复用中间结果。 WITH tmp AS (SELECT ...) SELECT * FROM tmp ANY修饰符:在JOIN时仅保留第一个匹配的行(避免笛卡尔积爆炸&…...
[Kaggle]:使用Kaggle服务器训练YOLOv5模型 (白嫖服务器)
【核知坊】:释放青春想象,码动全新视野。 我们希望使用精简的信息传达知识的骨架,启发创造者开启创造之路!!! 内容摘要:最近需要使用 YOLOv5 框架训练一个识别模型…...
Debian安装避坑
Debian安装避坑 不要联网安装不支持root直接登陆默认没有ssh服务默认没有sudo命令 不要联网安装 安装系统的时候不要联网安装, 直接关闭网卡 否则在线下载最新的包非常耗时间. 不支持root直接登陆 ssh <创建的普通用户名>机器ip默认没有ssh服务 # 安装ssh服务 apt ins…...
Android Gradle插件开发
文章目录 1. Gradle插件是什么2. 为什么需要插件3. 编写插件位置4. 编写插件5. 自定义插件扩展5.1 订阅扩展对象5.2 把扩展添加给Plugin并使用5.3 配置参数5.4 嵌套扩展5.4.1 定义扩展5.4.2 获取扩展属性5.4.3 使用5.4.4 执行5.4.5 输出 6. 编写在单独项目里6.1 新建Module6.2 …...
goweb项目结构以及如何实现前后端交互
项目结构 HTML模板 使用ParseFiles可以解析多个模板文件 func ParseFiles(filenames ...string)(*Teplate,error){return parseFiles(nil,filenames...) }把模板信息响应写入到输入流中 func (t *Template) Exwcute(wr io.Writer,data interface{})error{if err:t.escape();…...
Astro canvas大屏从iotDA上抽取设备影子的参数的详细操作实施路径
目录 🛠 场景: 🎯 核心思路 🗺 详细操作实施路径(针对小白版) 🚛 第1步:配置桥接器(建立连接通道) 📋 第2步:配置数据集…...
Ardunio学习
程序书写 Ardunio程序安装 在 Arduino的官方网站上可以下载这款官方设计的软件及源码、教程和文档。Arduino IDE的官方下载地址 为:http://arduino.cc/en/Main/Software。登录官网,下载软件并安装。 https://www.arduino.cc/。 安装成功后࿰…...
dl学习笔记(13):从强化学习到PPO
一、我们为什么要有强化学习 为了更好的有一个宏观感受,下图是DeepMind在2024发表的文章中对AI做出了不同层次的定义 可以看到左边分为了5个不同层次的AI,中间是对于细分的下游任务AI的能力展现,右边则是通用任务的AGI实现。我们可以看到中间…...
【运维】云端掌控:用Python和Boto3实现AWS资源自动化管理
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在云计算时代,AWS(Amazon Web Services)作为领先的云服务平台,其资源管理的高效性对企业至关重要。本文深入探讨如何利用Python的boto3…...
数字技术驱动下教育生态重构:从信息化整合到数字化转型的路径探究
一、引言 (一)研究背景与问题提出 在当今时代,数字技术正以前所未有的速度和深度渗透到社会的各个领域,教育领域也不例外。从早期的教育信息化整合到如今的数字化转型,教育系统正经历着一场深刻的范式变革。 回顾教…...
《数据库系统工程师》-B站-视频截图整理-2021-23
在2024年准备软考《数据库系统工程师》,跟着B站UP主学习的视频截图记录,当然考试也顺利通过了(上午下午都是50多分)。 在视频评论区还愿下面看到有人问我的截图资源。 我当时学习用的钉钉的teambition做的记录,在线文档…...
【PINN】DeepXDE学习训练营(5)——function-mf_dataset.py
一、引言 随着人工智能技术的飞速发展,深度学习在图像识别、自然语言处理等领域的应用屡见不鲜,但在科学计算、工程模拟以及物理建模方面,传统的数值方法仍然占据主导地位。偏微分方程(Partial Differential Equations, PDEs&…...
lnmp1.5+centos7版本安装php8
1、问题: 1nmp1.5不支持php8 解决办法: 下载lnmp2.1,进入到2.1版本执行安装php多版本命令,选择php8 2、编译安装php8时报C错误问题 解决办法: 安装php8.0报错A compiler with support for C17 language features is required…...
Netmiko 源码解析
1. 源码结构概览 Netmiko 的代码库主要分为以下核心模块: netmiko/ ├── base_connection.py # 连接基类(核心逻辑) ├── cisco/ # Cisco 设备实现类 ├── juniper/ # Juniper 设备实现类 ├── hp_…...
WPF大数据展示与分析性能优化方向及代码示例
WPF大数据展示与分析性能优化指南 一、大数据展示性能优化方向 1. 虚拟化技术 核心思想:只渲染可见区域的数据,动态加载/卸载数据项 实现方式: 使用VirtualizingStackPanel(WPF内置)自定义虚拟化容器(如VirtualizingWrapPanel)代码示例: &…...
Redis的ZSet对象底层原理——跳表
我们来聊聊「跳表(Skip List)」,这是一个既经典又优雅的数据结构,尤其在 Redis 中非常重要,比如 ZSet(有序集合)底层就用到了跳表。 🌟 跳表(Skip List)简介 …...
SpringCloud组件——OpenFeign
一.使用 1.为什么要使用 OpenFeign是⼀个声明式的WebService客户端。它让微服务之间的调用变得更简单,类似controller调用service, 只需要创建⼀个接口,然后添加注解即可使用OpenFeign。 2.引入依赖 加下面的依赖引入到服务消费者中&…...
C#里使用libxl来创建EXCEL文件然后发送到网络
前面一个例子说明了从网络直接读取EXCEL数据的方法, 本例子就说明怎么样创建一个EXCEL文件,也可以直接发送到网络,而不需要保存到文件,直接在内存里高效操作。 在这里要使用函数SaveRaw,输入参数是保存数据缓冲区和缓冲区的大小,返回数据和大小。 例子如下: private…...
物联网安全运营概览
这是第二篇博客文章,概述了实施物联网安全及其运行之前所需的内容。上次,我们概述了物联网安全。为了让您更具体地了解它是什么,我们将首先解释它是如何工作的,然后介绍设备 ID、部署选项和许可的概念。 物联网安全各个组件之间的关系如下图所示:基于此图,我们先来看一下…...
如何给GitHub项目提PR(踩坑记录
Fork 项目 (Fork the Repository): 在你使用的代码托管平台(如 GitHub、GitLab)上,找到你想要贡献的原始项目仓库。点击 "Fork" 按钮。这会在你自己的账户下创建一个该项目的完整副本(你的 Fork 仓库)。 克…...
Redux和MobX有什么区别
Redux 和 MobX 都是用于 React 应用的全局状态管理库,但它们在设计理念、使用方式和适用场景等方面存在明显的区别,下面为你详细分析: 1. 设计理念 Redux:基于 Flux 架构,遵循单向数据流和纯函数式编程的理念。状态是…...
测试模板x
本篇技术博文摘要 🌟 引言 📘 在这个变幻莫测、快速发展的技术时代,与时俱进是每个IT工程师的必修课。我是盛透侧视攻城狮,一名什么都会一丢丢的网络安全工程师,也是众多技术社区的活跃成员以及多家大厂官方认可人员&a…...
dubbo 隐式传递
隐式传递 隐式传递的应用 传递请求流水号,分布式应用中通过链路追踪号来全局检索日志传递用户信息,以便不同系统在处理业务逻辑时可以获取用户层面的一些信息传递凭证信息,以便不同系统可以有选择性地取出一些数据做业务逻辑,比…...
深入解析 ASP.NET Core 中的 ResourceFilter
在现代 Web 开发中,ASP.NET Core 提供了强大的过滤器(Filters)机制,用于在处理请求的不同阶段执行特定的代码逻辑。ASP.NET Core 中的 ResourceFilter 是一种非常有用的过滤器类型,允许开发人员在请求到达控制器操作方…...
Java进阶--面向对象设计原则
设计模式 概念 设计模式,又称软件设计模式,是一套被反复使用,经过分类编目的,代码设计经验的总结。描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方。它是解决特定问题的一系列套路,是…...
java每日精进 4.26【多租户之过滤器及请求处理流程】
一月没更,立誓以后断更三天我就是狗!!!!!!!! 研究多租户框架中一条请求的处理全流程 RestController RequestMapping("/users") public class UserControlle…...
【学习笔记】Stata
一、Stata简介 Stata 是一种用于数据分析、数据管理和图形生成的统计软件包,广泛应用于经济学、社会学、政治科学等社会科学领域。 二、Stata基础语法 2.1 数据管理 Stata 支持多种数据格式的导入,包括 Excel、CSV、文本文件等。 从 Excel 文件导入…...
[MySQL数据库] 事务与锁
🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…...
Rule.issuer(通过父路径配置loader处理器)
说明 正常在设置loader配置规则时,都是通过文件后缀来配置的 issuer的作用是可以通过父级的路径,设置生效的匹配规则 与rule的差别 test: 匹配当前模块的路径(如 .css 文件) issuer: 匹配引入当前模块的父模块的路径࿰…...
MyBatis 插件开发的完整详细例子
MyBatis 插件开发的完整详细例子 MyBatis 插件(Interceptor)允许开发者在已映射语句执行过程中的某一点进行拦截调用,从而实现自定义逻辑。以下是一个完整的 MyBatis 插件开发示例,涵盖所有使用场景,并附有详细注释和总…...
树状数组底层逻辑探讨 / 模版代码-P3374-P3368
目录 功能 实现 Q:但是,c[x]左端点怎么确定呢? Q:那么为什么要以二进制为基础呢? Q:为什么是补码 - ? 区间查询 树形态 性质1.对于x<y,要么c[x]和c[y]不交,要么c[x]包含于c[y] 性质2.c[x] 真包含 于c[x l…...
Eigen库入门
Eigen是一个C模板库,用于线性代数运算,包括矩阵、向量、数值求解和相关算法。它以其高性能、易用性和丰富的功能而闻名。 安装与配置 Eigen是一个纯头文件库,无需编译,只需包含头文件即可使用。 下载Eigen:从官方网站…...
力扣HOT100——102.二叉树层序遍历
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]] /*** Definition for a bi…...
客户案例 | 光热+数智双驱动!恒基能脉的数字化协同与技术创新实践
光热先锋 智领未来 恒基能脉新能源科技有限公司: 创新驱动,智造光热未来行业领航者 恒基能脉新能源科技有限公司是一家立足于光热发电核心技术产品,专注于“光热” 多能互补项目的国家高新技术企业,其核心产品定日镜广泛应用于光热发电、储…...
第十六周蓝桥杯2025网络安全赛道
因为只会web,其他方向都没碰过,所以只出了4道 做出来的: ezEvtx 找到一个被移动的文件,疑似被入侵 提交flag{confidential.docx}成功解出 flag{confidential.docx} Flowzip 过滤器搜索flag找到flag flag{c6db63e6-6459-4e75-…...
构造函数有哪些种类?
构造函数用于对象的初始化。 1.默认构造函数:没有参数,执行默认的初始化操作; 2.参数化构造函数:传入参数的构造函数,允许构造函数初始化成员变量; 3.拷贝构造函数:将同一类型的实例化对象作…...
第十六届蓝桥杯大赛软件赛省赛 C/C++ 大学B组 [京津冀]
由于官方没有公布题目的数据, 所以代码仅供参考 1. 密密摆放 题目链接:P12337 [蓝桥杯 2025 省 AB/Python B 第二场] 密密摆放 - 洛谷 题目描述 小蓝有一个大箱子,内部的长宽高分别是 200、250、240(单位:毫米)&…...
关于调度策略的系统性解析与物流机器人应用实践
关于调度策略的系统性解析与物流机器人应用实践 一、调度策略的定义与核心目标 调度策略是用于在复杂环境中协调资源分配、任务排序及路径规划的决策框架,旨在通过优化资源利用率和任务执行效率,实现系统整体性能的最优解。其核心目标包括: 动态适应性:应对实时变化(如订…...
探索具身智能协作机器人:技术、应用与未来
具身智能协作机器人:概念与特点 具身智能协作机器人,简单来说,就是将人工智能技术与机器人实体相结合,使其能够在与人类共享的空间中进行安全、高效协作的智能设备。它打破了传统机器人只能在预设环境中执行固定任务的局限&#…...
毕业项目-Web入侵检测系统
1. 项目简介 系统主要分为两大板块:靶标站点和入侵检测系统。靶标站点是系统的被监测对象,而入侵检测系统则是用于检测靶标站点的流量是否存在异常,以及在检测到异常时进行告警。 入侵检测系统的实现过程简述如下: 数据获取与分…...
【分布式系统中的“瑞士军刀”_ Zookeeper】二、Zookeeper 核心功能深度剖析与技术实现细节
在分布式系统的复杂生态中,Zookeeper 凭借其强大的核心功能,成为保障系统稳定运行的关键组件。上篇文章我们了解了 Zookeeper 的基础概念与安装配置,本文将继续深入剖析 Zookeeper 的核心功能,包括分布式锁、配置管理、命名服务和…...
前端学习笔记(四)自定义组件控制自己的css
1、前言及背景 自己写的一个组件有至少3个页面在使用,组件中的部分文字颜色需要统一修改需要根据一个状态字段来显示不同颜色且不希望受父组件影响 注意:博主学习vue截止目前也就半年,如有知识错误之处还请指出不胜感激,祝学习开…...
从描述语言,非功能性需求,需求和架构的一致性三个方面,说明软件需求到架构的映射存在哪些难点
软件需求到架构的映射是软件工程中的关键环节,其难点主要体现在描述语言差异、非功能性需求的复杂性以及需求与架构的一致性维护三个方面。以下是具体分析: 1. 描述语言的差异 难点:需求与架构使用不同的抽象语言描述,导致语义鸿…...
linux blueZ 第五篇:高阶优化与性能调优——蓝牙吞吐、延迟与功耗全攻略
本篇面向已有实战经验的读者,深入探讨 Classic Bluetooth 与 BLE 在 BlueZ 平台上的性能优化和调优方法,包括连接参数、MTU 调整、PHY 选择、缓存管理、并发策略,以及 HCI 抓包、功耗测量与自动化基准测试,助你打造高吞吐、低延迟、超低功耗的蓝牙应用。 目录 为何要做性能…...
linux的例行性工作(at)
使用场景: 生活中,我们有太多场景需要使用到闹钟,比如早上 7 点起床,下午 4 点开会,晚上 8 购物,等等 在 Linux 系统里,我们同样也有类似的需求。比如我们想在凌晨 1 点将文件上传服务器&#…...
JVM考古现场(二十六):执剑人·降维打击的终极审判
楔子:二向箔的颤动——当修真文明遭遇降维打击 "警告!老年代发生维度坍缩!"我腰间悬挂的昆仑镜突然迸发幽蓝光芒,终南山巅的河图洛书大阵中,GC日志正以《奇门遁甲》的格局疯狂演化: // 降维打击…...
腾讯云物联网平台
文档:物联网开发平台 MQTT.fx 快速接入物联网开发平台_腾讯云...
Unity之基于MVC的UI框架-含案例
Unity之基于MVC的UI框架-含案例 使用案例:类《双人成行》3D动作益智冒险类双人控制游戏开发教程 资源地址:https://learn.u3d.cn/tutorial/3d-adventure-william-anna 一、MVC框架概览 本框架以MVC的方式搭建,以View视口的方式展现数据&am…...
【Token系列】01 | Token不是词:GPT如何切分语言的最小单元
文章目录 01 | Token不是词:GPT如何切分语言的最小单元?一、什么是 Token?二、Token 是怎么来的?——BPE算法原理BPE核心步骤: 三、为什么不直接用词或字符?四、Token切分的实际影响五、中文Token的特殊性六…...
C++学习之路,从0到精通的征途:List类的模拟实现
目录 一.list的介绍 二.list的接口实现 1.结点 2.list结构 3.迭代器 (1)begin (2)end 4.修改 (1)insert (2)push_back (3)push_front ࿰…...