尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
ClickHouse v22.4.1.2305-prestable 版本变更深度解读:新功能、性能优化与升级注意事项
ClickHouse v22.4.1.2305-prestable 版本变更深度解读新功能、性能优化与升级注意事项【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse本文基于当前仓库中 v22.4.1.2305-prestable 版本变更记录系统梳理 ClickHouse 22.4 预发布分支相对 v22.3.1.1262-prestable 的完整变更清单并深入对应源码模块帮助读者理解每个变更的底层实现、适用场景与升级影响。读完本文你将掌握哪些新函数与表函数可直接用于生产查询、哪些配置项发生了语义变更尤其是文件系统缓存与插入语句语法、本次版本带来了哪些可感知的性能收益以及升级前必须注意的向后不兼容点。版本背景与发布基调v22.4.1.2305-prestable是 ClickHouse 22.4 系列的一个预发布prestable版本构建号为77a82cc090d其对比基线为v22.3.1.1262-prestable92ab33f560e。本次变更覆盖面极广主要脉络包括一条明确的向后不兼容变更一致性哈希函数改名大量新功能覆盖事务实验支持、聚合函数、日期构造、H3 地理网格、Protobuf 新格式、文件系统缓存内省、配额新类型等一批性能优化尤其集中在 MergeTree 启动加载、聚合哈希表、ASOF JOIN 与查询计划优化系统性的改进与 Bug 修复涉及输入格式、schema 推断、分布式 DDL、客户端体验与稳定性。需要注意的是预发布版本面向测试与评估其中事务等能力明确标注为「高度实验性不建议生产使用」。向后不兼容变更Backward Incompatible ChangeyandexConsistentHash更名为kostikConsistentHash一致性哈希函数由yandexConsistentHash更名为kostikConsistentHash命名取自 Konstantin kostik Oblakov 的一致性哈希算法。虽然旧名称在本次版本中仍作为别名保留、短期兼容但官方明确提示后续版本可能移除该别名建议所有应用尽快把调用点迁移到新名称。从源码看kostikConsistentHash.cpp 中核心实现结构体的name为kostikConsistentHash并在注册时通过factory.registerAlias(yandexConsistentHash, kostikConsistentHash)保留旧名函数语法为kostikConsistentHash(input, n)即对输入哈希值取模到n个桶。INSERT 语句不再允许SETTINGS位于FORMAT之后此前INSERT ... FORMAT ... SETTINGS ...这类写法可以被接受本版本起默认禁止新增兼容性开关allow_settings_after_format_in_insert默认关闭OFF。如果你有存量脚本依赖这种写法需要显式开启该设置或更推荐直接调整语句顺序将SETTINGS放到FORMAT之前。相关解析逻辑可在 ParserInsertQuery.cpp 与 ParserQuery.cpp 中跟踪。缓存文件哈希路径变更远程文件系统缓存的缓存文件哈希路径发生改变Changed hashed path for cache files这意味着升级后旧缓存文件不会被复用首次查询会产生一次缓存重建的开销。该变更与下文远程文件系统缓存功能的整体重构#35475配套出现。新功能New Feature实验性事务支持简单 MergeTree 表本版本为简单的MergeTree表加入了事务支持。该功能高度实验性官方明确不建议用于生产环境属于长期 issue#22086的阶段性成果。涉及事务的配套调整还包括 Minor fix for transactions#36136说明事务代码仍在快速演进中评估时务必关注后续版本。[Zoo]Keeper 客户端负载均衡新增 [Zoo]Keeper 客户端的负载均衡设置#30325用于改善多副本场景下对协调服务的连接分布闭合 issue#29617。该能力对依赖 ZooKeeper 的ReplicatedMergeTree与clickhouse-keeper部署有一定意义相关实现可在 src/Coordination 与 Keeper 相关目录中继续阅读。新增聚合函数与采样函数groupSortedArray返回按排序分组后的前 N 个值构成的数组#34055适合「组内取前 N」类分析场景minSampleSizeContinuous/minSampleSizeConversion分别用于连续型指标与转化率类指标的最小样本量估算可直接用于 A/B 实验设计。源码位于 minSampleSize.cpp连续型函数语法为minSampleSizeContinuous(baseline, sigma, mde, power, alpha)基线均值、标准差、最小可检测效应、统计功效、显著性水平转化率函数语法为minSampleSizeConversion(baseline, mde, power, alpha)。注意文档中的旧拼写minSampleSizeContinous在实现中仍以别名形式保留registerAlias(minSampleSizeContinous, ...)新增proportionsZTest相关统计函数的格式化修复#35369/#35380属于同一统计函数族。日期与时间构造/处理函数本版本集中补齐了一批日期时间函数toEndOfMonth将日期或带时间的值向上取整到当月最后一天#34394常与toStartOfMonth配套做月度区间划分makeDate(year, month, day)/makeDate32(year, month, day)由年月日构造日期值#35628makeDate32支持更广的年份范围makeDateTime()/makeDateTime64()由年、月、日、时、分、秒以及可选的小数位、精度、时区构造时间值#35934。全部实现在 makeDate.cpp 中且makeDate系列注册为大小写不敏感函数INTERVAL 精度扩展INTERVAL表达式现在可配合[MILLI|MICRO|NANO]SECOND使用同时新增toStartOf[Milli|Micro|Nano]second()以及[add|subtract][Milli|Micro|Nano]second()系列函数#34353覆盖毫秒/微秒/纳秒级别的时间截断与加减。H3 地理网格函数扩展新增 5 个 H3 函数#34568h3PointDistM、h3PointDistKm、h3PointDistRads计算两个经纬度点之间的球面距离分别以米、千米、弧度返回。实现在 h3PointDist.cpp其中h3PointDistKm的语法为h3PointDistKm(lat1, lon1, lat2, lon2)基于大圆距离great-circle distance计算h3GetRes0Indexes返回分辨率为 0 的全部 H3 单元索引h3GetRes0Indexes.cpp语法h3GetRes0Indexes()h3GetPentagonIndexes返回指定分辨率下全部五边形pentagonH3 索引h3GetPentagonIndexes.cpp语法h3GetPentagonIndexes(resolution)在需要规避五边形畸变的应用中尤为有用。新输入输出格式ProtobufList引入ProtobufList格式#35152解决 issue#16436允许以 Protobuf 列表形式读写数据扩展了 Protobuf 生态在 ClickHouse 中的接入方式。独立的clickhouse-keeper精简安装包新增面向clickhouse-keeper的独立小体积软件包#35308。此前 keeper 随主服务分发独立包便于在不需要完整分析引擎的部署环境中单独安装协调服务。ORDER BY ... WITH FILL新增INTERPOLATE扩展为ORDER BY ... WITH FILL增加INTERPOLATE扩展#35349闭合 issue#34903允许在填充缺失行时对指定列进行插值如取前一有效值显著增强了时间序列数据补齐的表达能力。数组函数arrayFirstOrNull/arrayLastOrNull新增arrayFirstOrNull、arrayLastOrNull#35414闭合 issue#35238在满足条件的首个/末个元素不存在时返回NULL而不是抛错。实现在 arrayFirstLast.cpp语法形如SELECT arrayFirstOrNull(x, y - x y, [a, b, c], [c, b, a]); -- 结果b当没有元素满足条件时返回类型为Nullable的NULL。远程文件系统缓存全面升级这是本版本最重要的存储层功能#35475闭合 issue#34021包含多个子能力所有写操作均可写入远程文件系统缓存此前仅部分读路径可写缓存新增系统表system.remote_filesystem_cache用于查看缓存元数据新增DROP REMOTE FILESYSTEM CACHE查询用于主动清理缓存新增系统表system.remote_data_paths提供 S3 元数据的内省能力为 merge 增加缓存模式read_from_filesystem_cache_if_exists_otherwise_bypass_cachemerge 默认开启也可作为查询级设置手动打开即「存在即用、不存在则绕过」缓存相关设置改名remote_fs_enable_cache更名为enable_filesystem_cache等升级脚本若引用旧设置名需同步更新。对应设置read_from_filesystem_cache_if_exists_otherwise_bypass_cache的声明位于 Settings.cpp。缓存路径哈希策略的变更前述向后不兼容变更也源于本次重构配套修复还包括「缓存高并发下边界情况修复」#35381、「缓存死锁修复」#35378、「缓存竞态修复」#35922说明该功能在本次版本中经历了密集的稳定化打磨。配额新类型WRITTEN BYTES新增WRITTEN BYTES配额类型#35736用于限制 INSERT 查询写入的字节总量弥补了此前配额仅能限制读取量/查询次数的缺口。同步修复了「异步插入与配额共用」的问题#35645。客户端与密码安全增强支持在查询末尾使用\G;触发FORMAT Vertical#36130闭合 issue#36111便于交互式查看行数据密码哈希生成时加入随机盐random salt并附加到密码后再哈希#36172提升密码存储安全性新增设置throw_if_no_data_to_insert#36345闭合 issue#36336在无数据可插入时可选择直接抛错而不是静默成功为INSERT INTO FUNCTION null()实现类型推断#36353闭合 issue#36334无需显式声明列类型即可写出INSERT INTO FUNCTION null() SELECT ...。其他新特性速览flattenTuple将嵌套命名Tuple拍平为一层如Tuple(a Int, Tuple(b Int, c Int))变为Tuple(a Int, b Int, c Int)可配合Object类型把 JSON 路径展开为独立列flattenTuple.cpp 与 DataTypes/flattenTuple.hCHANGELOG中#36436条目为占位...无实际描述内容分布式 DDL 的会话/查询设置传播与distributed_ddl_entry_format_version 2默认化见下文 Improvement。性能改进Performance ImprovementMergeTree 部件加载大幅提速缩短服务启动时间#32928对 MergeTree 部件加载流程做了重大优化用于加速clickhouse-server启动。变更记录给出的实证数据为在70 万个 MergeTree 部件的场景下服务启动时间从75 分钟降至约 20 秒。该优化还配套了「启动时清理损坏部件的元数据缓存」#35759保障重启后的一致性。对于部件数量庞大尤其 S3 后端的生产集群本项收益最为直观。聚合哈希表尺寸学习减少扩容#33439收集聚合过程中哈希表的使用尺寸并在后续查询中复用该信息以预分配容量避免运行期反复 resize。哈希表扩容是 CPU 密集且引发内存抖动的操作此改动对高频聚合查询有普遍正收益。ASOF JOIN 提速 1.2–1.6 倍并支持大整数#34733对 ASOF JOIN 做了多项优化性能提升 1.2–1.6 倍同时新增对 big integer 作为连接键的支持#35525进一步针对「键为原生整数」的场景做了专项优化。ASOF JOIN 常用于时序数据的最近邻匹配如事件与价格快照对齐这组优化直接利好时序分析负载。URL 引擎并行下载#35150使 URL 存储引擎在端点支持 HTTP Range 时并行分块下载新增两个设置max_download_threads单查询最大下载线程数与max_download_buffer_size每线程最多处理的字节数。二者在 Settings.cpp 中的默认值分别为4与10 MiB10*1024*1024。#35571将同样的并行下载能力扩展到 S3 对象读取。S3 分片上传并行化与查询计划优化#35343将 S3 存储的多部分上传multipart upload并行化提升大文件写入吞吐#35623新增查询计划优化尽可能将函数计算下推/延后到ORDER BY之后执行。文档给出的示例为SELECT sipHash64(number) FROM numbers(1e8) ORDER BY number LIMIT 5函数sipHash64只需在排序截断后对少量行求值实测约20 倍提速#36055对两张分布式表的 GLOBAL JOIN 的EXPLAIN PLAN/EXPLAIN PIPELINE提速约100 倍指 EXPLAIN 语句本身的执行速度便于调试复杂分布式查询。其他性能优化#35646收窄setenv的互斥锁作用域规避 LIBHDFS3_CONF 相关的锁竞争#35723为hasAll函数加入 SSE/AVX2 专用化实现#27653亦有配套 gtest 验证SIMD 化后对大规模数组包含判断有明显加速#36082对 Hive 引擎做了两项优化平凡count查询的快速路径以及通过缓存 Hive 文件元数据加速查询#35986修复标量子查询优化带来的性能回退保持既有优化效果。常规改进Improvement输入格式、schema 推断与列匹配本次版本在输入格式与 schema 推断上投入了大量工作主要改进点包括CSV/TSV 启发式类型推断#35582引入启发式规则以在 CSV、TSV、TSVRaw 中识别数字、字符串、数组、元组与 Map并新增开关input_format_csv_use_best_effort_in_schema_inference与input_format_tsv_use_best_effort_in_schema_inference默认开启关闭后一律按字符串处理同时为 Values 格式增加 Map 推断支持、修复潜在的段错误、允许通过column_names_for_schema_inference为不含列名的格式显式指定列名Arrow/ORC/Parquet 大小写不敏感列匹配新增input_format_orc_case_insensitive_column_matching、input_format_arrow_case_insensitive_column_matching、input_format_parquet_case_insensitive_column_matching三个设置#35459跳过不支持类型列新增input_format_{parquet|orc|arrow}_skip_columns_with_unsupported_types_in_schema_inference默认关闭并且修复了「查询未使用的列包含不支持类型时报错」的问题#35406Nullable 推断修复Arrow/ORC/Parquet 推断结果统一为Nullable修复此前无法读取 Nullable 列的问题Null类型列可转换为全NULL的Nullable列格式魔法字节预检读取 ORC/Parquet/Arrow 文件前先校验 magic bytes避免错误格式文件被整体载入内存造成高内存占用#36209JSON 相关改进JSONAsObject支持并行解析与 schema 推断#35592JSONEachRow支持对Object类型推断与Map→Object转换#35629新增input_format_json_read_bools_as_numbers设置默认开启将 JSON 中的布尔值推断/解析为数字#35735TSKV/JSONEachRow 列序优化改进这两类格式的列排序空行不再中断推断过程#35724Template 格式修复 CSV 转义规则下的推断问题#35582的一部分INSERT SELECT 从表函数推断#35760支持从目标表结构获取 schema 而非从数据推断适用于input表函数等场景#36275将该逻辑置于设置开关下。表函数与外部存储引擎s3Cluster自动 schema 推断#35544为s3Cluster增加自动 schema 推断并同步s3与s3Cluster的函数签名#35602为hdfsCluster增加 schema 推断支持Hive 引擎使用 minmax 索引优化 ORC/Parquet 文件读取#34631尊重remote_url_allow_hosts配置#35743修复从 Hive 读取时对不存在的列误删 block 的问题#35393推断 HDFS 配置的绝对路径#35572PostgreSQL 引擎支持uuid类型#35403Mongo 引擎允许缺失列#36272闭合#36119、#26490s3cluster/HDFSCluster/hive权限类型修复StorageFactory::instance().getSourceAccessType无法正确推断AccessType的问题#35365URL 引擎 schema 推断前校验主机白名单#35619确保remote_url_allow_hosts在 schema 推断前生效。分布式、复制与 DDL集群配置中未指定port时默认使用服务器端口#34772闭合#34769分布式 DDL 现在传播查询级与会话级设置distributed_ddl_entry_format_version默认提升为 2#35463复制数据库支持指定 cluster secret#35333ALTER TABLE t DETACH PARTITION ALL语法支持#35794、#35987新增thread_id、query_id列到system.zookeeper_log#36074部分Array/Nullable类型的ALTER MODIFY COLUMN可在元数据层完成、无需 mutation#35882例如Array(Enum8(Option11))扩展为Array(Enum8(Option11, Option22))同时禁止对不存在的设置执行RESET SETTING#35884。系统表、监控与诊断Processor 级性能剖析#34355在log_processors_profiles设置下将每个 processor 在执行/等待数据上的耗时写入system.processors_profile_log表为查询管道级性能分析提供第一手数据相关实现见 ProcessorsProfileLog.cpp异步插入字节指标新增 ProfileEvent 计数器AsyncInsertBytes#35644查询日志安全标记system.query_log新增is_secure列标识客户端是否通过加密 TCP/HTTP 连接#35705系统日志表 COMMENT系统日志表引擎声明支持COMMENT#34536system.parts_columns子列尺寸新增子列subcolumn尺寸统计#35488Kafka 基础指标为engineKafka表增加基础监控指标#35916并修复kafka_num_consumers 1且kafka_thread_per_consumer 0时无法并行多线程读取的问题#35973clickhouse-diagnostics新增--user、--password、--host、--port参数#35422clickhouse-local修复send_logs_level支持#35716。服务器、客户端与安全服务器可绑定低端口如 443安装脚本为二进制设置cap_net_bind_service#35451启动时新增健全性检查可用内存、磁盘空间、最大线程数等#34566#36365为后续修复启动时检查LD_PRELOAD等有害环境变量#36342针对 Google Colab 场景#36400扩展到 OSXDNS 缓存新增dns_max_consecutive_failures设置默认 5连续失败达到阈值后停止重新解析缓存的 DNS 条目#35956客户端改进粘贴性能与兼容性#35541修复INSERT INTO table FROM INFILE无进度条的问题#35429stdin 数据与查询/INFILE 数据并存时两者都会发送#36254修复结果未收到时的查询取消#36057、#36164ProfileEvents 到达即更新进度条#36202FORMAT Vertical末行\G;支持#36130行策略新增simple类型#35345区别于permissive/restrictivesimple只是纯粹地在表上追加过滤条件、无副作用DEFAULT NULL现在将列类型推断为Nullable#36058闭合#35887EPHEMERAL列允许无显式默认表达式#35706Enum 元素支持自动编号#36101、#36352修复范围问题UNSIGNED修饰符可用于未使用的INT参数#36126后于#36337被回滚hex函数支持 Int128/Int256/UInt128/UInt256#36386INSERT INTO FUNCTION file(...)对不支持 schema 推断的格式也可用#36211throwIf常量参数崩溃#35500、短路求值 Nullable 常量崩溃#35502等在本版本的 Bug Fix 部分一并修复见下节max_rows_to_read在按排序键顺序读取并带 LIMIT 时计算更准确不再误抛Limit for rows or bytes to read exceeded#33230仅当 TTL 实际发生变化时才要求 mutation#35953MySQL 连接失败错误信息更友好#352344-letter 命令在clickhouse-keeper获得 quorum 前即可响应#35992wchc从four_letter_word_white_list默认值中移除#35320。Bug 修复Bug Fix稳定性与崩溃类修复format函数参数过多导致服务器崩溃#35651附有可复现测试Keeper 客户端连接不稳定修复#35031引入的 Keeper 连接不稳定问题#35498并发读缓冲区崩溃ParallelReadBuffer崩溃#36169#36210回滚后由#36212重新合入随后改用 atomic 替代 mutexcondvar 进一步修复#36192JSON schema 推断段错误#36195自定义类型转字符串的段错误#35755闭合#35752if函数返回列类型与数据类型不一致导致的逻辑错误如Bad cast from ColumnVectorint to ColumnVectorlong#35476Object类型相关子列丢失#35682、读取时Cant adjust last granule异常#35687、多分区 INSERT 到Object列#35806、空字符串转Object空值#36179、竞态#35409HDFS 读缓冲区ReadBufferFromHDFSImpl::offset误用导致读取错误#36153debug 模式崩溃#36287远程读缓冲 pos 未同步HadoopSnappyReadBuffer 场景#35771。正确性与查询结果修复分区裁剪溢出WHERE 中列与常量类型不同时可能发生溢出并返回错误的空结果#35334闭合#35304WINDOW 函数 LIMIT 结果错误由 limit 下推优化引发#36075闭合#36071、#23125投影projection分析IN 子查询导致错误结果#35631闭合#35336带投影的部件检查逻辑#35667平凡count()投影优化#35788ASOF JOIN 键可空性检查#35674HashJoin使用LowCardinality列的问题#35616datetime64 负数结果错误#35440闭合#34831caseWithExpression返回类型推断正确纳入 ELSE 分支类型#35576分布式查询 LIMIT BY报Cannot find column#36454any/all(subquery)实现修复#35727闭合#35489extract函数参数解析修复#35799闭合#35751IPv4/IPv6IN子句中的 cast 修复#35534超过 39 字符的 IPv6 地址解析#35539CROSS JOIN 空列Empty list of columns in SELECT query#36033JOIN引擎表从 Ordinary 迁移到 Atomic 报错#35995闭合#35686物化视图创建时类型检查#24896子查询物化视图重启后不更新的问题#35691闭合#35511负排序方向下空数组读取#36215LIMIT BY 与分布式查询列缺失#36454远程查询执行器以original_query而非重写后查询调用消除AMBIGUOUS_COLUMN_NAME异常#35748input_format_null_as_default对 DEFAULT 表达式不生效#35039闭合#34890稀疏列启用时的 mutation 修复#35284-WithNames 格式超过 256 列报INCORRECT_NUMBER_OF_COLUMNS#35803闭合#35793标量查询优化性能回退#35986GroupingAggregatedTransform 空块跳过#35417quota 与异步插入#35645cgroup 仅从 group 中取 quota 与 period#35815clickhouse local删除非空数据库失败#35711闭合#35692INSERT 最终部件写入不再默认延迟新增max_insert_delayed_streams_for_parallel_writeS3 写入默认 1000其余场景保持禁用修复 INSERT 期间可能的Memory limit exceeded#34780不支持 TTL 的引擎禁止 ALTER TTL避免破坏 ATTACH TABLE#33391闭合#33344session_log因 fuzzing 发现内存安全问题被禁用#35873详见#35714CREATE TABLE ... AS与{uuid}宏ReplicatedMergeTree保存元数据时不再展开{uuid}宏修复Replica already exists问题同时限制含{uuid}的复制表从 Atomic 迁回 Ordinary#36200闭合#35577远程执行未消费结果时的查询取消与格式化错误处理#36057、#36164。缓存与 S3 相关修复缓存高并发边界情况修复#35381、死锁修复#35378、竞态修复#35922、File segment can be completed only by downloader 异常#36253、FileSegmentsHolder析构断言错误#36452S3 作为 MergeTree 后端或独立引擎时的过度日志输出#35434闭合#30559S3 引擎虚拟列获取#35586named collections 的 headers 与compression_method修复#35593。构建 / 测试 / 打包改进Build/Testing/Packaging Improvement打包体系迁移到 nfpm#33664废弃release脚本、改用packages/build所有构建迁移至clickhouse/binary-builder镜像CMake 增加符号剥离修复 DWARF 符号问题新增 Alpine APK 包alien更名为additional_pkgs#36330删除旧打包基础设施CI 与 Docker重建 Alpine 镜像 Dockerfile、新增clickhouse-keeper镜像#35211显著改进 docker build-cache 系统#36041新增构建剖析选项-ftime-trace#36318Python 代码应用 black 格式化并加入提交检查#35466stress test 增加向后兼容性检查#27928工具链切换到 LLVM 14 的 libcxx/libcxxabi#34906新增 GCC 构建#35204JIT 编译默认启用#35683CVE 修复更新 unixodbc 以缓解 CVE-2018-7485#35943curl 升级到 7.81.0#35130libxml2 升级到 2.9.13#35034。升级与迁移建议综合本版本的变更升级到 v22.4 预发布分支或基于该分支的正式版时建议关注以下几点函数改名将yandexConsistentHash的全部调用替换为kostikConsistentHash注册与别名定义见源码INSERT 语法确认应用中没有INSERT ... FORMAT ... SETTINGS ...的写法如有需显式开启allow_settings_after_format_in_insert或调整语句顺序缓存设置改名remote_fs_enable_cache等旧设置名已更名且缓存文件哈希路径变更会导致旧缓存失效一次请同步更新运维脚本并对首次缓存重建做好容量规划实验性功能隔离MergeTree 事务支持高度实验性切勿在生产开启测试验证重点若大量使用 S3/MergeTree 远程文件系统缓存、Hive/URL/Parquet/ORC/Arrow 输入或 ASOF JOIN建议先在小流量灰度验证本版本对这些路径改动密集关注后续版本预发布分支中的#36210→#36212ParallelReadBuffer 崩溃修复回滚再合入等反复说明部分功能仍处于收敛期生产升级建议等待对应稳定版如 LTS 分支发布本仓库 changelogs 归档目录 提供了各版本的完整变更历史可供对照。本次 v22.4 版本在「启动速度、查询计划、远程文件系统缓存、输入格式推断」四条主线上投入了大量工作既有面向数据库内核的性能重构也有面向分析场景的实用函数扩展是 22.x 系列中功能密度较高的一个版本。【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

Java实现字符串全排列:递归与回溯方法详解

Java实现字符串全排列:递归与回溯方法详解

1. 字符串全排列问题概述字符串全排列是计算机科学中一个经典的问题,它要求我们找出给定字符串所有可能的排列组合。比如字符串"abc"的全排列有:abc, acb, bac, bca, cab, cba这6种。这个问题看似简单,但在实际实现中却蕴含着许多值…

📅 2026/9/14 3:30:36
STM32CubeMX:嵌入式AI开发的工程基座与AI就绪配置

STM32CubeMX:嵌入式AI开发的工程基座与AI就绪配置

1. 这不是“装个软件”那么简单:STM32CubeMX在嵌入式AI编程中的真实定位很多人点开这个标题,第一反应是:“哦,又一个安装教程”。但如果你真这么想,我建议你先暂停两分钟——把鼠标移开,倒杯水,…

📅 2026/9/14 3:30:36
C++常用数据结构与STL函数实战解析

C++常用数据结构与STL函数实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/14 3:30:36
MORE NEWS

更多资讯

📰

Mastra @mastra/claude:将 Claude Agent SDK 的 Agent 循环接入 Mastra 的 generate/stream 体系

Mastra mastra/claude:将 Claude Agent SDK 的 Agent 循环接入 Mastra 的 generate/stream 体系 【免费下载链接】mastra Mastra is the modern TypeScript framework for AI-powered applications and agents. 项目地址: https://gitcode.com/GitHub_Trending/ma…

📰

240张火焰烟雾图像,用YOLOv8训练自己的检测模型

简介:此数据集聚焦火焰、烟雾与正常三类场景的图像分类,共包含约240张已标注图片,已有110人学习下载,适合图像分类初学者、烟火检测项目开发者以及需要小型标注数据集验证模型流程的研究者使用。压缩包共243个文件,以2…

📰

Python+OpenCV运动目标自动追踪系统:PID控制与云台实战

简介:面向2023年电子设计竞赛E题备赛与智能控制开发人群,该源码包以B站程欢欢智能控制集为灵感,提供一套从三维机械设计到Python程序实现的完整参考方案,适合参赛学生、开发者快速理解电赛E题中的云台追踪、激光发射与视觉识别场景…

📰

Cocos Creator微信小游戏斗地主开发实战:包体控制与性能优化

简介:本资源是一个基于Cocos Creator开发的斗地主微信小游戏完整Demo,面向游戏开发初学者与微信小游戏实践者,旨在帮助开发者掌握Cocos Creator引擎在真实社交类小游戏项目中的工程化落地能力。资源包共470个文件,涵盖54个TypeScr…

📰

Xpay-3.1开源支付网关部署与微信支付宝直连实战

简介:Xpay-3.1版全开源无授权免签约支付源码,面向Java Web开发者、中小型项目技术负责人及支付系统学习者,提供可直接二次开发的轻量级支付解决方案,有效降低企业自建支付网关的技术门槛与授权成本。资源包共823个文件&#xff0c…

📰

Claude AI服务架构与成本优化全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬