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/8/6 14:15:59 阅读更多 →
从教学到实战:共享单车大数据项目的数据仓库架构与Hive/Spark实践

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

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

2026/8/6 14:12:59 阅读更多 →
想靠网络安全吃饭,这些攻防工具与实战案例必须精通

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

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

2026/8/6 14:10:14 阅读更多 →

最新新闻

VC++ ADO数据库编程实战:从Access操作到CRUD完整实现

VC++ ADO数据库编程实战:从Access操作到CRUD完整实现

1. 项目概述:为什么VC与ADO仍是桌面数据库开发的经典组合?如果你是一位使用Visual C(VC)进行Windows桌面应用开发的程序员,并且你的应用需要处理本地或小型网络环境下的数据存储,那么Access数据库大概率是你…

2026/8/7 1:50:09 阅读更多 →
IaaS、PaaS、SaaS、DaaS四大云服务模型详解与实战选型指南

IaaS、PaaS、SaaS、DaaS四大云服务模型详解与实战选型指南

1. 云服务模型:从“自己盖楼”到“拎包入住”的演变干了这么多年技术,从自建机房到全面上云,我亲眼见证了企业IT基础设施的变迁。现在大家开口闭口都是“上云”,但云到底怎么上?SaaS、PaaS、IaaS、DaaS这些词儿听起来都…

2026/8/7 1:50:09 阅读更多 →
无监督学习核心算法解析:从聚类、降维到关联规则实战

无监督学习核心算法解析:从聚类、降维到关联规则实战

1. 从“有”到“无”:无监督学习的核心思想与价值在AI的世界里,我们常常听到“监督学习”这个词,它就像一个手把手教孩子认字的老师,给每个样本都贴上明确的标签(比如“这是猫”、“那是狗”)。但现实世界的…

2026/8/7 1:50:09 阅读更多 →
从原理到实践:深度解析PCIe与SATA热插拔技术及其在Linux中的实现

从原理到实践:深度解析PCIe与SATA热插拔技术及其在Linux中的实现

1. 项目概述:为什么“热插拔”是系统可靠性的基石在数据中心运维或者个人搭建高性能工作站的场景里,你肯定遇到过这样的窘境:为了更换一块疑似故障的硬盘,或者升级一张新的显卡,不得不通知所有用户“系统即将停机维护”…

2026/8/7 1:50:09 阅读更多 →
微信小程序搜索排名优化:自定义关键词策略与实战指南

微信小程序搜索排名优化:自定义关键词策略与实战指南

1. 项目概述:为什么你的小程序搜索排名总上不去? 做小程序的朋友,尤其是负责运营和推广的,最头疼的问题之一可能就是:我明明做了推广,内容也不错,为什么用户在微信里搜关键词,我的小…

2026/8/7 1:50:09 阅读更多 →
Python依赖分析利器altgraph:从图论原理到打包优化实战

Python依赖分析利器altgraph:从图论原理到打包优化实战

1. 项目概述:一个被低估的Python依赖分析利器如果你在Python生态里折腾过打包、依赖分析或者逆向工程,大概率见过altgraph这个名字。它常常作为pyinstaller、py2exe这类打包工具的依赖,静静地躺在requirements.txt里,很多人装完就…

2026/8/7 1:49:08 阅读更多 →

日新闻

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy 想要将Android手机屏幕完美投射到电脑上,享受大屏操作的自…

2026/8/7 0:00:19 阅读更多 →
如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南 【免费下载链接】tom-select Tom Select is a lightweight (~16kb gzipped) hybrid of a textbox and select box. Forked from selectize.js to provide a framework agnostic autocomplete widget wi…

2026/8/7 0:00:19 阅读更多 →
5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件 【免费下载链接】nsz NSZ - Homebrew compatible NSP/XCI compressor/decompressor 项目地址: https://gitcode.com/gh_mirrors/ns/nsz 你是否在为Nintendo Switch游戏文件占用大量存储…

2026/8/7 0:00:19 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/6 22:02:27 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/6 22:02:27 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/5 23:28:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/6 22:02:28 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/5 23:46:51 阅读更多 →