Hive SQL面试核心:窗口函数、数据倾斜与性能优化实战解析
1. 项目概述为什么Hive SQL面试题如此重要在数据仓库和数据分析领域Hive SQL的掌握程度几乎成了衡量一个数据工程师或分析师基本功的标尺。我见过太多候选人简历上写着“精通Hive”但一遇到稍微绕个弯的面试题就卡壳。这背后的原因往往不是语法不熟而是对Hive处理数据的底层逻辑、窗口函数的灵活运用、以及性能优化的核心思想理解不够透彻。今天我们不谈那些基础得不能再基础的SELECT * FROM table而是聚焦于六个能真正拉开差距的经典面试题。这些题目覆盖了数据倾斜处理、复杂逻辑实现、性能调优等核心实战场景它们不仅是面试官爱问的“高频考点”更是你日常工作中解决棘手问题的“工具箱”。无论你是正在准备面试还是想巩固自己的Hive技能树通过拆解这些题目背后的“为什么”和“怎么做”你都能获得远超题目本身的收获。2. 六大经典面试题深度拆解与实战解析2.1 第一题如何高效计算Top N—— 窗口函数ROW_NUMBER的进阶用法场景还原有一张用户行为表user_behavior字段包括user_id用户ID、item_id商品ID、action_time行为时间戳。需求是找出每个用户最近浏览的3件商品。很多人的第一反应是写一个子查询用GROUP BY user_id然后ORDER BY action_time DESC再LIMIT 3。但在Hive里对分组后的结果直接LIMIT是无效的它只会限制最终输出的总行数。这时窗口函数ROW_NUMBER()就是你的最佳选择。核心解法与原理SELECT user_id, item_id, action_time FROM ( SELECT user_id, item_id, action_time, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY action_time DESC) AS rn FROM user_behavior ) t WHERE rn 3;为什么这么写PARTITION BY user_id这定义了窗口的范围计算在每个用户内部进行互不干扰。这是实现“每个用户”这个分组需求的关键。ORDER BY action_time DESC在窗口内按时间降序排列最近的行为排第一。ROW_NUMBER()为窗口内的每一行生成一个唯一的连续序号1,2,3...。RANK()和DENSE_RANK()在遇到并列值时序号处理方式不同这里时间戳通常唯一用ROW_NUMBER()最直接。外层查询过滤通过WHERE rn 3轻松取出每个用户的前3条记录。实操心得与避坑指南注意当数据量极大时OVER (PARTITION BY ... ORDER BY ...)可能会导致严重的Reduce端数据倾斜。如果一个用户的行为记录特别多例如“僵尸用户”或测试账号负责处理该用户的Reduce任务将异常缓慢成为整个作业的瓶颈。优化技巧提前过滤如果业务允许先在子查询中用WHERE条件过滤掉一些明显异常的用户如行为次数超过某个阈值或过旧的数据。关注ORDER BY字段确保action_time字段上有索引虽然Hive表索引不常用但在ORC格式下可以利用Bloom Filter等或者该字段是分区字段以加速排序过程。2.2 第二题如何处理连续活跃用户—— 日期函数的妙用与LAG/LEAD场景还原有一张用户每日登录表user_login字段为user_id和login_date日期格式‘yyyy-MM-dd’。需要找出连续登录至少7天的用户。这道题考察的是对序列数据的处理能力和LAG/LEAD窗口函数的理解。暴力方法是做7次自关联但效率极低且代码丑陋。核心解法与思路拆解 思路是如果一个用户连续登录那么将登录日期减去一个由ROW_NUMBER生成的序列号得到的“基准日期”对于连续日期来说是相同的。分步SQL实现-- 步骤1去重同一个用户一天可能多次登录 WITH distinct_login AS ( SELECT DISTINCT user_id, login_date FROM user_login ), -- 步骤2为每个用户的登录日期生成序号 ranked_login AS ( SELECT user_id, login_date, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY login_date) AS rn FROM distinct_login ), -- 步骤3计算基准日期关键步骤 base_date AS ( SELECT user_id, login_date, DATE_SUB(login_date, rn) AS base_date -- 登录日期减去序号 FROM ranked_login ), -- 步骤4按用户和基准日期分组统计连续天数 continuous_days AS ( SELECT user_id, base_date, COUNT(*) AS days_count, -- 连续天数 MIN(login_date) AS start_date, MAX(login_date) AS end_date FROM base_date GROUP BY user_id, base_date HAVING COUNT(*) 7 -- 筛选连续7天及以上的记录 ) -- 步骤5输出最终结果一个用户可能有多段连续记录 SELECT user_id, start_date, end_date, days_count FROM continuous_days ORDER BY user_id, start_date;为什么DATE_SUB(login_date, rn)是核心假设用户A在1月1日、2日、3日登录其rn分别为1,2,3。1月1日 - 1 12月31日1月2日 - 2 12月31日1月3日 - 3 12月31日 三天的“基准日期”都是12月31日对于不连续的日期这个值就会不同。因此GROUP BY user_id, base_date自然就把连续登录的日期归到了一组。另一种解法使用LAG函数逐行比对SELECT user_id FROM ( SELECT user_id, login_date, LAG(login_date, 6) OVER (PARTITION BY user_id ORDER BY login_date) AS lag_date_6 FROM (SELECT DISTINCT user_id, login_date FROM user_login) t ) t2 WHERE DATEDIFF(login_date, lag_date_6) 6;这个解法更直观取出当前行之前第6行的登录日期如果两者相差正好6天说明这7天包括首尾是连续的。它更节省中间步骤但需要理解LAG的偏移量参数。2.3 第三题如何实现行列转换——CASE WHEN与聚合函数的配合场景还原有一张销售明细表sales字段为product产品、month月份如‘2024-01’、amount销售额。需要将数据转换为以产品为行各月份销售额为列的交叉表形式。这就是经典的行转列Pivot问题。Hive没有直接的PIVOT函数某些新版本或Spark SQL有需要手动用条件聚合实现。核心解法SELECT product, SUM(CASE WHEN month 2024-01 THEN amount ELSE 0 END) AS m202401, SUM(CASE WHEN month 2024-02 THEN amount ELSE 0 END) AS m202402, SUM(CASE WHEN month 2024-03 THEN amount ELSE 0 END) AS m202403, -- ... 可以继续添加更多月份 SUM(amount) AS total_amount -- 顺便计算个总计 FROM sales WHERE month BETWEEN 2024-01 AND 2024-03 -- 限定月份范围避免无效计算 GROUP BY product;原理与细节CASE WHEN作为SUM的参数实现了条件求和。对于每一行数据只有当月份匹配时amount值才会被加到对应的列聚合中否则加0。GROUP BY product确保了输出结果以产品为唯一行。为什么用SUM而不是MAX因为一个产品在一个月内可能有多条销售记录我们需要的是月销售总额。如果业务确定每月每个产品只有一条记录用MAX也可以。动态行列转换的挑战 上面的SQL是“静态”的月份是写死的。如果月份是动态的就需要用程序拼接SQL字符串或者使用Hive的collect_set和map等复杂函数构造可读性和维护性会下降。在实际工作中如果报表需求固定静态写法更清晰如果需要高度动态通常会借助BI工具或上层应用来实现。2.4 第四题如何计算累计占比—— 窗口函数SUM() OVER()与排序场景还原有一张商品销售额表product_sales字段为product_id和sale_amount。需要计算每个商品的销售额并按照销售额从高到低排序同时计算累计销售额及其占总销售额的百分比。这是业务分析中非常常见的需求用于快速定位核心商品帕累托分析或ABC分析。核心解法SELECT product_id, sale_amount, -- 计算累计销售额从第一行无界前行加到当前行 SUM(sale_amount) OVER (ORDER BY sale_amount DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_amount, -- 计算总销售额整个窗口的和 SUM(sale_amount) OVER () AS total_amount, -- 计算累计占比累计销售额 / 总销售额 ROUND( SUM(sale_amount) OVER (ORDER BY sale_amount DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) / SUM(sale_amount) OVER () * 100, 2 ) AS cumulative_percentage FROM product_sales ORDER BY sale_amount DESC;窗口框架详解SUM(sale_amount) OVER (ORDER BY sale_amount DESC)如果不指定框架默认是RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW。对于数值类型且ORDER BY的列有重复值时RANGE会把所有并列的行视为同一“组”进行求和。ROWS则是严格按行计算。ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW这是明确指定窗口范围从第一行到当前行。使用ROWS通常更符合“累计”的直观理解性能也更好。SUM(sale_amount) OVER ()空OVER()子句表示窗口是整个结果集用来计算总和。性能考量 这个查询会触发两次全表扫描一次用于带排序的累计和一次用于总和。对于超大表可以先用一个子查询计算出总和避免重复扫描WITH total_sale AS ( SELECT SUM(sale_amount) AS total FROM product_sales ) SELECT p.product_id, p.sale_amount, SUM(p.sale_amount) OVER (ORDER BY p.sale_amount DESC) AS cumulative_amount, t.total AS total_amount, ROUND(SUM(p.sale_amount) OVER (ORDER BY p.sale_amount DESC) / t.total * 100, 2) AS cumulative_percentage FROM product_sales p CROSS JOIN total_sale t ORDER BY p.sale_amount DESC;2.5 第五题如何识别并处理数据倾斜——JOIN操作的优化实战场景还原有两张表一张巨大的用户事实表fact_user数十亿行user_id分布不均存在少量超级活跃用户一张较小的用户维度表dim_user百万行。使用user_id进行JOIN时作业卡在99%不动Reduce阶段个别任务运行时间极长。这就是典型的数据倾斜。JOIN时那些超级活跃user_id对应的key会被发送到同一个Reduce节点导致该节点负载远高于其他节点。解决方案与实操步骤方案一使用MapJoin广播Join如果dim_user表足够小通常建议小于25MB可通过参数hive.auto.convert.join.noconditionaltask.size调整Hive会自动将其转换为MapJoin即把小表广播到所有Map端在Map阶段完成JOIN完全避免Reduce阶段和Shuffle。-- 确保自动MapJoin开启默认是开启的 SET hive.auto.convert.jointrue; -- 可以手动提示使用MapJoin SELECT /* MAPJOIN(d) */ f.*, d.* FROM fact_user f JOIN dim_user d ON f.user_id d.user_id;方案二拆分倾斜Key分而治之如果dim_user表不小或者倾斜发生在事实表内部的大表JOIN上就需要更精细的处理。识别倾斜Key先对fact_user表的user_id进行采样统计找出频率异常高的user_id比如出现次数超过总行数1%的。SELECT user_id, COUNT(*) as cnt FROM fact_user GROUP BY user_id ORDER BY cnt DESC LIMIT 10;分离倾斜数据将事实表中倾斜的user_id和非倾斜的user_id分开处理。-- 创建临时表存放倾斜的Key CREATE TABLE tmp_skew_keys AS SELECT DISTINCT user_id FROM fact_user WHERE user_id IN (skew_key1, skew_key2, ...); -- 处理倾斜部分为倾斜Key添加随机前缀打散分布 SELECT f.*, d.* FROM ( SELECT CONCAT(CAST(CEIL(RAND() * 10) AS STRING), _, user_id) AS prefixed_user_id, -- 添加1-10的随机前缀 ... -- 其他字段 FROM fact_user WHERE user_id IN (SELECT user_id FROM tmp_skew_keys) ) f JOIN ( SELECT CONCAT(prefix, _, user_id) AS prefixed_user_id, ... -- 其他字段 FROM dim_user d LATERAL VIEW EXPLODE(SPLIT(1,2,3,4,5,6,7,8,9,10, ,)) prefix_table AS prefix -- 将小表膨胀10倍 WHERE d.user_id IN (SELECT user_id FROM tmp_skew_keys) ) d ON f.prefixed_user_id d.prefixed_user_id UNION ALL -- 处理非倾斜部分正常JOIN SELECT f.*, d.* FROM fact_user f JOIN dim_user d ON f.user_id d.user_id WHERE f.user_id NOT IN (SELECT user_id FROM tmp_skew_keys);这个方法的精髓在于将大表中倾斜的key通过随机前缀打散同时将小表中对应的key复制多份膨胀确保JOIN能成功。虽然小表膨胀增加了数据量但成功避免了单个Reduce的瓶颈。方案三开启Skew Join优化参数Hive提供了参数来尝试自动优化倾斜JOIN。SET hive.optimize.skewjointrue; -- 开启倾斜Join优化 SET hive.skewjoin.key100000; -- 设置倾斜Key的阈值如果一个Key的出现次数超过这个值则认为是倾斜的 SET hive.skewjoin.mapjoin.min.split33554432; -- 相关参数 SET hive.skewjoin.mapjoin.min10000; -- 相关参数开启后Hive会尝试将倾斜Key的JOIN转为MapJoin。但这是一种“尽力而为”的自动优化对于极端严重的倾斜可能仍需手动干预。2.6 第六题如何优化慢SQL—— 从执行计划到参数调优场景还原你写了一个多表JOIN和复杂聚合的SQL跑起来异常缓慢如何定位瓶颈并优化优化慢SQL是一个系统工程不能只靠猜。我的经验是遵循一个清晰的排查路径。第一步查看执行计划Explain这是最重要的第一步。在SQL前加上EXPLAIN关键字Hive会输出逻辑执行计划和物理执行计划EXPLAIN EXTENDED或EXPLAIN DEPENDENCY信息更详细。EXPLAIN SELECT ... -- 你的慢SQL重点看Stage依赖关系有多少个Stage它们是如何串联的Stage越多Shuffle落盘次数可能越多。每个Stage的操作是Map、Reduce还是FetchMap阶段是否发生了JOINMapJoin数据流TableScan扫描了哪些表Reduce操作的key是什么Group By和JOIN的key是否一致第二步分析数据与资源数据量参与JOIN和GROUP BY的各表大小是多少中间结果是否膨胀数据倾斜观察Reduce任务进度是否有个别任务长时间卡在99%用COUNT(DISTINCT key)或分组统计初步判断key分布。资源使用任务是否频繁GCMap/Reduce任务数量设置是否合理可通过SET mapred.reduce.tasks50;等方式调整。第三步针对性优化策略减少数据扫描使用分区和分桶在WHERE条件中使用分区字段避免全表扫描。对于常用来JOIN或GROUP BY的字段考虑分桶。列式存储与压缩使用ORC或Parquet格式并只SELECT需要的列。开启谓词下推hive.optimize.ppdtrue。SET hive.exec.orc.zerocopytrue; SET hive.optimize.ppdtrue; CREATE TABLE ... STORED AS ORC TBLPROPERTIES (orc.compressSNAPPY);优化JOIN调整JOIN顺序将数据量小的表放在JOIN的左侧Hive默认尝试将小表作为流式表但并非绝对。使用MapJoin如前所述对小表使用MAPJOIN提示。处理倾斜Join如前所述使用随机前缀或开启倾斜优化。优化GROUP BY开启Map端聚合SET hive.map.aggrtrue;可以在Map端先做部分聚合减少Shuffle数据量。检查GROUP BY的key是否可以用更少的字段或编码后的字段代替优化DISTINCT避免使用COUNT(DISTINCT col)在数据量大时极易倾斜。改用GROUP BY后再COUNT或者先GROUP BY去重再JOIN。-- 低效 SELECT COUNT(DISTINCT user_id) FROM huge_table; -- 高效可利用多Reduce并行 SELECT COUNT(*) FROM (SELECT user_id FROM huge_table GROUP BY user_id) t;调整并行度与资源mapred.reduce.tasks根据数据量和集群能力手动设置Reduce任务数。太大增加开销太小无法并行。hive.exec.parallel设置为true开启Stage间并行执行。hive.exec.parallel.thread.number控制并行线程数。mapreduce.map.memory.mb和mapreduce.reduce.memory.mb根据任务需要调整内存避免OOM。第四步迭代验证每次修改一个或少量几个参数重新运行并对比时间。记录下有效的优化手段形成自己的经验库。3. 面试题背后的核心能力考察这六道题看似独立实则系统性地考察了一个数据工程师的硬核能力。第一题Top N考察的是对窗口函数的熟练度这是现代SQL分析的基石。能否清晰理解PARTITION BY和ORDER BY的作用能否区分ROW_NUMBER、RANK、DENSE_RANK是基本功。第二题连续活跃考察的是解决复杂逻辑问题的建模能力。它需要你将一个业务问题连续转化为一个可计算的数学问题日期差恒定。这种“转化”思维比记住某个函数更重要。第三题行列转换考察的是对SQL语句灵活组合的能力。用基础的CASE WHEN和聚合函数实现高级功能体现了对SQL语言本质的理解。第四题累计占比考察的是对窗口函数高级用法窗口框架的理解以及编写清晰、高效分析SQL的能力。这直接对应日常的报表开发和业务分析需求。第五题数据倾斜是性能调优和解决极端场景能力的试金石。能否识别倾斜、理解其根源Shuffle、并提出有效解决方案MapJoin、分治、参数调优是区分初级和资深工程师的关键。第六题慢SQL优化考察的是系统性排查和解决问题的工程能力。从查看执行计划到分析数据特征再到运用多种优化手段这是一个完整的性能优化闭环。4. 从面试题到日常工作实战经验萃取在我多年的工作中这些面试题中的技巧几乎每天都在用。比如用窗口函数计算同环比、做去重排名用LAG/LEAD分析用户行为序列用条件聚合做各种维度的透视报表。而数据倾斜和慢SQL优化更是伴随大数据作业的“日常伴侣”。最重要的心得是不要死记硬背答案。面试官稍微变一下条件背的答案就可能失效。比如把“连续登录7天”改成“连续登录7天且期间未发生付费行为”你就需要把登录表和付费表关联起来在计算连续日期时排除付费的日期。这时理解“基准日期法”的本质就比记住那段SQL更重要。另一个建议是重视执行计划。很多优化问题EXPLAIN一下就能看出端倪。养成在跑一个复杂作业前先看执行计划的习惯能帮你提前发现潜在的性能陷阱比如不该有的Cartesian Product笛卡尔积或者可以优化掉的冗余Shuffle。最后SQL是一门实践性极强的语言。最好的学习方法就是给自己出题或者去刷一些在线的SQL题库在真实的数据库环境中运行、调试、优化你的语句。当你对JOIN、GROUP BY、窗口函数、子查询这些基础操作如臂使指时再复杂的业务逻辑你也能从容地用SQL构建出来。这六道题就是一个绝佳的起点。

相关新闻

Python邮件封装

Python邮件封装

Python邮件封装一、smtplib库是SMTP 简单邮件传输协议的操作模块,发送邮件时起到服务器之间的通信作用。发送一封邮件分为:设置服务器信息-编写邮件主体信息-进行登录发送发送一个文本邮件import smtplib from email.header import Header from email.mi…

2026/9/30 8:29:26 阅读更多 →
从教学到实战:共享单车大数据项目的数据仓库架构与Hive/Spark实践

从教学到实战:共享单车大数据项目的数据仓库架构与Hive/Spark实践

1. 项目缘起:从“头歌”平台到真实数据世界的桥梁如果你正在学习大数据,尤其是通过“头歌”这类在线实践平台,你可能会发现一个普遍现象:平台上的实验环境、数据集和任务流程都经过了高度抽象和简化。这当然有助于初学者快速上手核…

2026/10/9 11:25:50 阅读更多 →
想靠网络安全吃饭,这些攻防工具与实战案例必须精通

想靠网络安全吃饭,这些攻防工具与实战案例必须精通

红蓝对抗视角下的全栈能力构建在网络安全职场中,岗位职能通常被划分为“红队”与“蓝队”。红队侧重于模拟攻击,通过渗透测试、漏洞挖掘来检验系统的防御短板;蓝队则聚焦于防御运营,负责安全监控、应急响应及体系加固。然而&#…

2026/10/3 7:05:20 阅读更多 →

最新新闻

BL0940电能计量芯片设计实战:从硬件采样到量产校准

BL0940电能计量芯片设计实战:从硬件采样到量产校准

简介:面向硬件与嵌入式开发者的BL0940电能计量专用电路设计资料,涵盖芯片外围电路、代码实现与完整工程文件。资料围绕BL0940在智能电网、智能家居、工业自动化等场景的高精度电能测量需求,重点讲解模拟前端信号调理、数字信号处理及RS485/Mo…

2026/10/13 20:38:51 阅读更多 →
SYCL编码实践与编译设计:从缓冲区内核到设备二进制

SYCL编码实践与编译设计:从缓冲区内核到设备二进制

SYCL这套东西,我前后花了不少时间才把它从“会写一点点”掰扯到“敢说懂了一层”的状态。前两篇笔记里,我把队列、处理器、缓冲区这些基础组件过了一遍,顺手整理了几个能跑通的最小例子。这篇是第三篇,我打算把重心换一下&#xf…

2026/10/13 20:38:51 阅读更多 →
AI日报制作全流程:从信息源筛选到自动化辅助的工程实践

AI日报制作全流程:从信息源筛选到自动化辅助的工程实践

1. 一份AI日报的诞生逻辑:为什么值得认真做每天早上花十五分钟翻一遍行业动态,这个习惯我坚持了快三年。最开始只是自己看,后来顺手整理成几条发在群里,再后来有朋友说“你干脆做成日报吧,省得我们到处翻”。于是就有了…

2026/10/13 20:38:51 阅读更多 →
PIPE4.3.0 Petri网建模仿真实战:从建模到验证避坑指南

PIPE4.3.0 Petri网建模仿真实战:从建模到验证避坑指南

简介:PIPE 4.3.0 是一款基于 Petri 网的可视化建模与仿真工具,面向软件工程、计算机科学、流程管理等领域的研究者与工程师。它通过图形化的库所(Place)、变迁(Transition)和弧线构建系统模型,支…

2026/10/13 20:38:51 阅读更多 →
Firebase-Gantt:DHTMLX甘特图实时协同的轻量级适配方案

Firebase-Gantt:DHTMLX甘特图实时协同的轻量级适配方案

简介:这是一份面向Web前端开发者与实时协作应用构建者的JavaScript工具库,专为将dhtmlxGantt甘特图组件无缝集成至Firebase后端而设计。它解决了传统甘特图数据需手动同步、难以实现实时协同编辑与离线操作的痛点,适用于项目管理SaaS、团队任…

2026/10/13 20:38:51 阅读更多 →
学编程前先做一件事:用“问题倒推法”明确目标,让学习效率翻倍

学编程前先做一件事:用“问题倒推法”明确目标,让学习效率翻倍

很多人问我:编程到底怎么学才能不痛苦?我带过的新人不少,也看过很多自学者的成长路径。有一个人让我印象特别深,他学某个语言学了大半年,语法书翻了三遍,视频课存了几十个G,收藏夹里堆满了各种教…

2026/10/13 20:37:49 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/12 21:05:09 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →