Oracle层次查询LEVEL伪列详解:从原理到树形数据实战应用
刚接触Oracle层次查询的同行可能都遇到过这样的情况写了一个CONNECT BY语句结果里莫名其妙多出一列数字有时候是1、2、3有时候是1、1、2看得一头雾水。这个数字就是Level伪列很多人只知道它是“层级深度”可真到了业务里要用它的时候又不知道怎么下手。这篇文章就从我实际折腾“伪列level的应用”的经验出发把这玩意的原理、常见用法、踩坑记录一次聊透。不管你是做报表、搞权限系统还是处理BOM清单只要涉及树形结构和层级展开这篇内容应该都能帮上忙。1. 先搞明白LEVEL伪列到底是什么跟普通列有什么区别1.1 伪列的本质与使用边界Level是Oracle数据库里一个非常特殊的“列”说它是列因为它能像普通列一样出现在SELECT列表、WHERE条件里说它特殊是因为它不像EMP_ID、DEPT_NAME那样物理存储在磁盘上而是在SQL执行过程中由Oracle的层次查询引擎动态算出来的。这种“用的时候才有、不用就不存在”的列就是伪列Pseudocolumn。常见的伪列还有ROWNUM、ROWID但Level跟它们都不一样——ROWNUM表示结果集的物理行号ROWID表示行的物理地址而Level专门表示当前行在树形结构中的深度。举个例子你查一个部门表根节点的Level是1根节点的直接子部门Level是2孙部门Level是3以此类推。这个值完全由查询语句里的CONNECT BY结构决定跟表的实际存储顺序一毛钱关系都没有。适用边界一定要先搞清楚Level和CONNECT BY是Oracle系数据库包括部分兼容Oracle语法的国产数据库的专属能力。MySQL、PostgreSQL、SQL Server都不支持这种写法它们要实现同样的功能得用WITH RECURSIVE递归CTE。所以如果你在非Oracle环境里看到了CONNECT BY Level 10这种写法先别急着抄大概率会直接报语法错误。1.2 CONNECT BY的执行逻辑Level伪列不在表里,那它到底怎么算出来的这就要说到Oracle层次查询的经典三兄弟START WITH、CONNECT BY、LEVEL。执行逻辑可以理解成一次“顺着指针往下走”的过程先执行START WITH确定哪些行作为根节点Level1。从每个根节点出发用CONNECT BY条件找子节点Level2。再以这些子节点为新起点继续找下一层子节点Level3。直到某行没有符合条件的孩子这行就是叶子节点递归结束。你每次在SELECT列表里写LevelOracle就在生成每一行的时候顺手把当前深度值填进去这样一个树有几层、每个节点在第几层就一目了然了。我用一个生活化的类比解释下想象你在一家公司里做“组织架构点名”。先喊总经理Level1总经理喊他直属的几位总监Level2每位总监再喊各自的经理Level3经理再喊主管和员工。整个过程就是Level从1开始逐层递增喊到没人可喊就停。Level就是你这个“点名册”上自动记录的“第几轮”编号。2. 项目里最常见的几种应用场景2.1 组织架构与树形数据的层级展开刚做开发那会儿我接手过一个模拟项目X的人员管理系统里面有个需求特别典型页面上展示公司组织架构树要求每个部门名称前面根据层级深度做缩进总经理在最左边一级部门缩进2个空格二级部门缩进4个空格以此类推。这种需求用Level伪列简直是无脑解。SQL的核心结构是这样SELECT dept_id, dept_name, Level AS depth, LPAD( , (Level - 1) * 2) || dept_name AS display_name FROM dept START WITH parent_id IS NULL CONNECT BY PRIOR dept_id parent_id;关键在于LPAD函数它根据Level算出的深度值决定前面拼接多少个空格。Level等于1时缩进0格Level等于2时缩进2格树形结构的视觉层级立刻就有了。2.2 菜单权限树的动态渲染权限系统的菜单表也是Level伪列的重度用户。菜单表通常有menu_id、parent_id、menu_name、sort_no这些字段要渲染一个多级菜单树除了要知道菜单名称还得知道当前菜单在第几层——前端要根据层级决定是否显示为分组标题、还是叶子菜单项点击行为完全不同。这种情况下我习惯把Level查出来作为树节点的depth字段传给前端SELECT menu_id, parent_id, menu_name, Level AS menu_depth FROM sys_menu START WITH parent_id 0 CONNECT BY PRIOR menu_id parent_id ORDER SIBLINGS BY sort_no;注意这里我用了ORDER SIBLINGS BY而不是普通的ORDER BY这个细节后面会专门说先记住一个结论要保持树形结构稳定排序就必须用ORDER SIBLINGS BY。2.3 用LEVEL生成序列号Level伪列有个特别“离经叛道”的用法不查任何业务表直接拿它当计数器生成数字序列。SELECT Level AS seq FROM DUAL CONNECT BY Level 10;这段SQL会返回1到10正好10行。原理就是让DUAL表自己跟自己CONNECT BY每次递归Level加1直到超过10为止。这个技巧在需要批量造测试数据、生成连续日期序列、或者把一行拆成多行行转列的场景里特别好用。比如我要给一张销售表插入未来30天的临时数据就可以用Level生成日期偏移量SELECT SYSDATE Level AS sale_date, TEST AS product_id, 100 AS amount FROM DUAL CONNECT BY Level 30;30天的临时测试数据一条SQL全搞定省得写PL/SQL循环。不过要提醒一句这招在Oracle里好用但别指望在MySQL里能跑通没那个语法。2.4 BOM物料清单与多级展开统计制造业或者供应链系统里BOM物料清单是很典型的层次结构。一个成品由多个半成品组成半成品又由更基础的物料组成要算一个成品的“全链路物料需求”正好是Level伪列的用武之地。比如物料表里每一行记录一个组件的父子关系成品A由部件B、C组成部件B又由原料D、E组成。用CONNECT BY从A出发一路往下走每多走一层Level加1恰好就是BOM的阶次。要计算某个物料在整棵树上出现过几次甚至可以用CONNECT_BY_ROOT取根节点物料编号再按根节点GROUP BY汇总。这个场景下Level不仅用于显示还常用于限制展开深度。比如BOM有10层但业务上只需要看前三层可以在CONNECT BY后面加一个AND Level 3子查询直接截断效率更高返回数据量也更可控。3. 实操环节Level伪列的完整案例拆解3.1 环境准备与基础数据为了让步骤更清晰我自己建了一张模拟表结构很简单CREATE TABLE t_tree ( node_id NUMBER PRIMARY KEY, parent_id NUMBER, node_name VARCHAR2(50) );插入这几行数据形成一个简单的三级树INSERT INTO t_tree VALUES (1, NULL, 总部); INSERT INTO t_tree VALUES (2, 1, 研发部); INSERT INTO t_tree VALUES (3, 1, 市场部); INSERT INTO t_tree VALUES (4, 2, 后端组); INSERT INTO t_tree VALUES (5, 2, 前端组); INSERT INTO t_tree VALUES (6, 3, 品牌组);层级关系就是总部下面挂了研发部、市场部研发部下面又挂了后端组和前端组市场部下面挂品牌组。3.2 完整查询语句与结果解读现在跑一条最经典的层级查询SELECT Level, node_id, parent_id, node_name FROM t_tree START WITH parent_id IS NULL CONNECT BY PRIOR node_id parent_id;执行结果如下LEVELNODE_IDPARENT_IDNODE_NAME11NULL总部221研发部342后端组352前端组231市场部363品牌组看到没有Level值是跟着树深度走的总部Level1它的直接子节点研发部、市场部Level2再下一层Level3。Oracle的遍历顺序遵守深度优先原则所以研发部的子树会连着出现也就是后端组、前端组紧接着研发部。3.3 深入细节起点选择、方向控制与循环防护选对START WITH是第一步。上面示例里我用parent_id IS NULL表示“所有没有父节点的行都是根”。如果表里有多个顶层节点比如多个独立公司都在一张表里那START WITH出来就会同时出现多棵树的Level1根节点。CONNECT BY的方向决定了树的走向。最常见的写法是CONNECT BY PRIOR node_id parent_id意思是“先从当前行取node_id再到别的行里找parent_id等于它的找出来的就是孩子”这是自上而下展开。反过来写CONNECT BY PRIOR parent_id node_id就是从叶子出发往上找父节点变成自下而上的路径追溯。CONNECT BY的循环问题是必须防的一刀。如果表里的父子关系存在环比如A的parent是BB的parent又是AOracle会报ORA-01436: CONNECT BY loop in user data。这时候要么修数据要么在SQL里显式加上循环检测条件。常规做法是引入一个NOCYCLE关键字SELECT Level, node_id, node_name FROM t_tree START WITH parent_id IS NULL CONNECT BY NOCYCLE PRIOR node_id parent_id;NOCYCLE不会帮你修数据但至少查询不会直接挂掉坏行会在那一支被剪掉整棵树还能正常出来。3.4 核心折腾Level与排序、缩进、路径三件套缩进显示。前面提到了LPAD这里给一个更完整的写法前端要拿到的display_name直接在SQL里拼好SELECT Level AS depth, LPAD(, (Level - 1) * 2, ) || node_name AS indented_name FROM t_tree START WITH parent_id IS NULL CONNECT BY PRIOR node_id parent_id;Level1时LPAD的填充长度是0总部前面没空格Level2时填充4个空格注意我用了两个空格作为一级缩进单位视觉效果就是越深的节点越往右偏。排序保持结构。如果写成ORDER BY node_name出来的结果会变成“总部、后端组、品牌组、研发部……”树直接被拍平了父子关系全靠眼睛猜。Oracle专门提供了ORDER SIBLINGS BY来保持树形结构的同时对同一父级的兄弟节点排序SELECT Level, node_id, node_name FROM t_tree START WITH parent_id IS NULL CONNECT BY PRIOR node_id parent_id ORDER SIBLINGS BY node_name;这时的顺序会变成总部下面先按名字排研发部在前、市场部在后研发部内部前端组排在后面组后面但前端组不会跑到市场部底下。这是层级查询里最容易踩的排序陷阱。完整路径拼接。另一个常见需求是把从根到当前节点的整条路径打出来Oracle提供了SYS_CONNECT_BY_PATH函数SELECT Level, SYS_CONNECT_BY_PATH(node_name, /) AS full_path FROM t_tree START WITH parent_id IS NULL CONNECT BY PRIOR node_id parent_id;后端组那行会输出/总部/研发部/后端组用在哪面包屑导航、导出Excel时的层级路径列、日志归因分析全是这个函数的用途。3.5 结果集加工用Level拆解一根路径还有一种很常见的开发场景是前端传过来一个完整路径比如“总部/研发部/后端组”后端要解析出每一级节点的名称顺便还想要每一层的序号。我惯用的套路是先用CONNECT BY把路径按分隔符拆成多行配合Level完成序号的标注。SELECT Level AS part_no, REGEXP_SUBSTR(总部/研发部/后端组, [^/], 1, Level) AS part_name FROM DUAL CONNECT BY Level LENGTH(总部/研发部/后端组) - LENGTH(REPLACE(总部/研发部/后端组, /, )) 1;这里用Level同时做了两件事一是作为REGEXP_SUBSTR的第三个参数指定取第几段二是作为循环次数控制递归的终点。输出结果是三行依次是“总部”“研发部”“后端组”。不用写循环不用建临时表SQL走一步直接就出结果。4. 深入一点Level关联的高级函数与性能考量4.1 CONNECT_BY_ROOT与CONNECT_BY_ISLEAF的搭配Level负责告诉你“我有多深”但有时候你还想知道“我这一支从哪个根来的”“我是不是叶子节点”这时候就得用到另外两个层次查询特性。CONNECT_BY_ROOT可以取出当前行的根节点字段。例如SELECT CONNECT_BY_ROOT node_name AS root_name, node_name, Level FROM t_tree START WITH parent_id IS NULL CONNECT BY PRIOR node_id parent_id;后端组那行的root_name是“总部”品牌组那行的root_name也是“总部”。在BOM汇总、多棵树下按根分组统计时这个函数是神器。CONNECT_BY_ISLEAF返回当前行是不是叶子节点。我们看结果SELECT node_name, Level, CONNECT_BY_ISLEAF AS is_leaf FROM t_tree START WITH parent_id IS NULL CONNECT BY PRIOR node_id parent_id;后端组、前端组、品牌组的is_leaf都是1研发部、市场部是0。这个标志位在做“只查末级明细”“只查有子节点的分组”“树形懒加载时判断要不要显示展开箭头”这些逻辑时非常常用。这三个东西Level、CONNECT_BY_ROOT、CONNECT_BY_ISLEAF经常一起出现我一般把它们统称为“树形查询三件套”配合使用基本能覆盖绝大多数层级分析需求。4.2 性能问题为什么会慢怎么优化Level伪列本身不会拖慢查询真正影响性能的是CONNECT BY的递归过程。每一层递归都要做一次表扫描去匹配父节点如果表很大且没有合适的索引递归深度一深查询时间会爆炸式增长。常见的优化手段有这么几个给PRIOR对应的关联列建索引。如果你写的是CONNECT BY PRIOR node_id parent_id那优化器会在找子节点时按parent_id列去定位parent_id列上必须有索引。同理往上找父节点就确保node_id列有索引。用START WITH缩窄根的个数。根节点越少整个递归的入口越少遍历的总行数也就越少。能走WHERE parent_id IS NULL或者WHERE dept_id 100这种条件就不要用全表扫描去猜根。控制Level的深度上限。业务上如果只需要两层或者三层直接在CONNECT BY后面加AND Level 3。需要注意的是这个条件是写在CONNECT BY里面不是WHERE里面写在WHERE里会把整条分支剪掉留在CONNECT BY里则只是截断深度并且在Level超过上限后不再继续向下展开语义更安全。避免在LEVEL条件上做隐式转换。有的同事习惯写WHERE Level 2如果Level在查询里已经被当成数字参与过运算优化器可能无法有效裁剪遍历分支导致先全量递归再过滤性能直接翻车。4.3 用子查询或LATERAL派生表做深度过滤还有一类需求是“只要第二层的节点”或者“只要包含某个子节点的所有祖先链”这时候用WHERE Level2写起来简单但要注意它跟CONNECT BY条件里的深度限制执行时机不一样。我之前在人员系统里遇到过一个需求找到所有“二级部门”及其下面的所有员工然后统计每个二级部门的员工数。直接WHERE Level 2会把Level3及以下的员工全部排除这不是我们要的。正确的思路是先用子查询找到二级部门集合再让主查询通过CONNECT BY去展开每个二级部门下的所有子节点WITH l2_dept AS ( SELECT dept_id FROM dept START WITH parent_id IS NULL CONNECT BY PRIOR dept_id parent_id AND Level 2 ) SELECT d.dept_id, d.dept_name, COUNT(e.emp_id) AS emp_cnt FROM l2_dept d LEFT JOIN emp e ON e.dept_id IN ( SELECT dept_id FROM dept START WITH dept_id d.dept_id CONNECT BY PRIOR dept_id parent_id ) GROUP BY d.dept_id, d.dept_name;这种方式的数据量更可控性能更好而且语义上完全准确。遇到层级过滤的需求先冷静想清楚你是要“只保留这一层”还是“从这个层开始向下全展开”这两种写法完全不同。5. 避坑指南Level应用里那些防不胜防的细节5.1 别把Level和ROWNUM混为一谈Level和ROWNUM都能输出数字看起来很像实际完全是两码事。ROWNUM是结果集的行号跟树的深度没有任何关系它在查出来的每一行上依次递增1、2、3、4……哪怕这行在树的第5层只要它恰好是结果集的第2行ROWNUM就是2。Level则完全取决于树的深度。我见过有人想在层次查询里“限定返回前5行”写成了ROWNUM 5结果树形结构被拦腰截断数据东拼西凑。这时候应该用FETCH FIRST 5 ROWS ONLY或者子查询包一层而不是用ROWNUM硬切。5.2 多张表联合查询时Level的作用域如果层次查询里关联了多张表要特别注意Level算的是哪张表的深度。Level永远是当前层级查询生成的行的深度而不是某个业务表的字段深度。一旦你JOIN了一张子表一行层级结果可能因为一对多关联被拆成多行这些多行的Level值一样但行的数量会翻倍。比如部门表关联员工表一个部门有20个员工这个部门如果Level3那这20行的Level都是3。如果你拿Level做GROUP BY统计部门个数就会重复计数。这种情况建议先用子查询把部门树查出来再跟员工表关联不要在同一个SQL里既CONNECT BY又做多表JOIN。5.3 START WITH和CONNECT BY的优先级陷阱START WITH和CONNECT BY的执行顺序对结果影响巨大很多新手栽在这上面。比如你想找“研发部下面的所有子部门”写成SELECT dept_id, dept_name, Level FROM dept START WITH dept_name 研发部 CONNECT BY PRIOR dept_id parent_id;这里研发部就是Level1它下面的后端组、前端组是Level2。但如果把过滤条件误写在CONNECT BY里CONNECT BY PRIOR dept_id parent_id AND dept_name 研发部那这个条件会作用于“父子关系匹配”它要求所有子节点自己的dept_name也是‘研发部’结果就是谁也匹配不上直接查不到数据。记住起点过滤放START WITH路径过滤放CONNECT BY结果集过滤放WHERE。5.4 递归死循环的兜底策略除了NOCYCLE还有两个土办法能预防死循环。一个是在数据初始化时就让parent_id不构成环业务层面加约束比如不允许更新某列为自身ID另一个是在CONNECT BY里加一个层级上限例如CONNECT BY PRIOR node_id parent_id AND Level 10一旦Level到10就算表里真有环也不会无限递归下去。这种写法在数据质量不稳定的老系统里非常有用算是保命策略。5.5 别把Level直接写进索引或唯一约束Level是伪列不能建索引也没办法物化存储。有人为了“提高按Level查询的性能”想建一个包含Level的函数索引这在Oracle里是行不通的因为伪列的值只有在执行层次查询时才会生成日常的全表扫描根本用不上。正确的姿态是如果业务频繁按层级筛选考虑在业务表里冗余一个“depth”字段在插入数据时手动维护或者用触发器维护查询时直接用普通索引。这样虽然多了点冗余存储但换来了稳定的查询性能在层级数据量大时很划算。6. 从一个小例子看Level的实战威力为了让大家更直观感受Level伪列怎么改变一条SQL的复杂度我再说一个实际处理过的需求。某个营销系统里有一张“区域表”区域关系是“大区 - 省份 - 城市 - 门店”四层树。后台管理页面需要展示一个全部区域的下拉框用户选任意一级就能统计这个区域下面所有门店的销售额。如果用程序处理你得先查出一层再根据用户选择循环查下面的层级然后再汇总。代码写起来又长又容易漏。用Level伪列一条SQL就能把某个区域下所有门店查全SELECT store_id, store_name, Level AS region_depth FROM store START WITH store_id :selected_node_id CONNECT BY PRIOR store_id parent_region_id;参数传什么Level就从1开始重新算用户选“华东大区”下面所有省份、城市、门店全出来了用户选“上海”下面所有门店也全出来了。逻辑完全一致不用写循环不用动态拼接SQL省心不是一点半点。如果还想把每个门店的销售额带上再JOIN一张销售表即可。Level在这种“不确定选哪一层”的动态查询场景里价值是无可替代的。7. 最后的实操建议与个人心得跟LEVEL伪列打交道的这几年最深刻的体会是它是个“看起来简单实际坑不少”的东西。原理上就是树深度计数器但用得好不好差别就在对细节的把握上。给刚开始使用Level的同行几条实操建议写任何CONNECT BY查询时第一反应先明确START WITH应该怎么写。如果根不明确先跑一条SELECT看数据别急着套SQL。排序一律用ORDER SIBLINGS BY别用ORDER BY除非你明确就是要拍平成平铺列表。数据量超过几十万行或者递归深度超过10层的场景仔细检查执行计划必要时设置NOCYCLE和深度上限做兜底。多环境开发时注意你的数据库版本和品牌是否支持CONNECT BY语法不支持就用WITH RECURSIVE重写。平时多积累树形查询的三件套组合用法Level、CONNECT_BY_ROOT、CONNECT_BY_ISLEAF黏在一起用比单独用Level能多解决一半问题。伪列Level最大的魅力在于它把关系数据库里本需要用程序循环才能表达的逻辑压缩成了SQL里的一个数字让树形数据的查询、展示、统计都变得格外干净。搞清楚它不敢说所有层级需求都能秒杀但至少不会再对着“1、2、3”发呆半天。

相关新闻

Docker部署MySQL 5.7.44:从镜像拉取到数据备份的完整实践

Docker部署MySQL 5.7.44:从镜像拉取到数据备份的完整实践

1. 部署前:为什么用Docker跑MySQL 5.7.44 1.1 版本锁定的意义 MySQL 5.7.44,是5.7系列的最后一个维护版本。很多人还在担心“是不是太老了”,但现实是,大量业务系统、旧项目、内部管理系统仍然依赖5.7的特性,尤其是那…

2026/10/19 11:15:36 阅读更多 →
基于MATLAB的光伏功率仿真与MPPT算法对比分析

基于MATLAB的光伏功率仿真与MPPT算法对比分析

1. 项目概述与核心需求拆解1.1 这个项目解决的是什么问题先聊一个很多做过光伏仿真的人都会遇到的痛点:光照数据明明拿到了,光伏板的参数也查清楚了,但算出来的功率曲线总感觉不对。要么是中午时段功率曲线出现奇怪的凹陷,要么是阴…

2026/10/19 11:15:36 阅读更多 →
AIGC内容工业化:AI漫剧与智能体打造个人内容流水线

AIGC内容工业化:AI漫剧与智能体打造个人内容流水线

自媒体这条赛道上,这两年最明显的趋势就是“单打独斗跑不过流水线”。过去做内容,一个人要负责选题、写稿、录制、剪辑、发布、运营,一天能产出一条就谢天谢地;但如果把 AI 漫剧、短视频切片、智能体自动化这些环节全部串起来&…

2026/10/19 11:14:28 阅读更多 →

最新新闻

Windows 开源输入法选型与配置实战:从 IME 机制到小狼毫

Windows 开源输入法选型与配置实战:从 IME 机制到小狼毫

如果你只是聊聊天、敲敲普通文档,Windows 自带的输入法确实够用。可一旦你需要在 Windows 上写代码、维护长篇文档、录入特殊符号,甚至同时保持拼音、五笔、注音几套输入习惯,自带输入法的短板就会一点点冒出来:词库排序不顺手、自…

2026/10/19 19:34:52 阅读更多 →
AI如何降低网店获客成本?从自动回复到意图识别的转化实战

AI如何降低网店获客成本?从自动回复到意图识别的转化实战

在这个流量越来越贵、平台规则越来越细的时候,很多做网店的朋友问我:AI到底能不能帮我把获客成本降下来?我的回答是,能,但前提是你得把它当成一个可以训练的销售助理,而不是许愿池里的锦鲤。今天我就拿大家…

2026/10/19 19:33:50 阅读更多 →
交通标志检测识别系统:YOLOv8+OpenCV+PyQt5实战

交通标志检测识别系统:YOLOv8+OpenCV+PyQt5实战

1. 方案选型与实际价值先说结论:这个项目是很多人入手深度学习落地时的首选练手目标。原因很简单——交通标志检测有真实场景价值,模型效果直观,又能把算法、界面、图像处理全部串起来。用 Python 作为底座,YOLOv8 负责目标检测&a…

2026/10/19 19:33:50 阅读更多 →
钢材表面缺陷检测实战:从YOLOv5到YOLOv10的选型与部署

钢材表面缺陷检测实战:从YOLOv5到YOLOv10的选型与部署

钢材表面质量把控这件事,在很长一段时间里都靠质检员肉眼盯。带钢在产线上以每分钟几百米的速度跑,缺陷转瞬即逝,人盯久了必然疲劳,漏检几乎无法避免。这也是基于深度学习的表面缺陷检测这几年在金属加工行业里反复被讨论的原因。…

2026/10/19 19:32:49 阅读更多 →
PDF转Excel不乱格式:从表格识别到数据校验的完整实操指南

PDF转Excel不乱格式:从表格识别到数据校验的完整实操指南

1. 为什么PDF转Excel,表格结构总是乱七八糟先放过工具推荐,聊一个更扎心的问题:为什么PDF转Excel,十次有八次转出来是乱的?我接触过大量做财务、做数据整理的同行,大家对这种场景应该都不陌生——收到一份上…

2026/10/19 19:31:48 阅读更多 →
TensorFlow 分布式 FFT 实战:数据切分、跨设备转置与性能优化

TensorFlow 分布式 FFT 实战:数据切分、跨设备转置与性能优化

做大规模谱分析的人,很多都会在某个阶段撞上同一堵墙:数据越算越大,FFT 开始成为整条流水线里最慢的环节。TensorFlow 里的分布式快速傅里叶变换,乍一看就是把tf.signal.fft2d放到多张卡上跑,实际做起来才会发现&#…

2026/10/19 19:31:48 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

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

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/18 12:16:16 阅读更多 →