MD5与xxHash性能对比及哈希算法选型指南

MD5到底还能不能用?这个问题我几乎隔三差五就会被团队里的新人问一次。网上关于MD5“不安全”的说法满天飞,可老项目里的校验脚本又全是md5sum,一时半会儿根本换不掉;换xxHash吧,又担心它会不会不够靠谱。反过来,也有人一上来就直接把xxHash吹成“最快的哈希”,什么场景都往里套,结果在安全需求里踩了坑。

这个问题说白了是一个选型问题:非加密哈希算法那么多,MD5和xxHash分别适合干什么、性能差距到底有多大、什么场景该用什么。这篇文章我就从实际测试出发,把两个算法放在同一环境下跑一遍,再结合我平时在项目里做技术选型的经验,把这件事彻底聊透。无论你是刚接触哈希的新手,还是需要给团队做技术决策的负责人,这篇内容都能给你一个可以直接拿来用的答案。

1. 动手测试之前:先搞清两个算法的“出身”差异

选型最忌讳的就是光看指标不看本质。在贴实测数据之前,我想先把两个算法背后那点“出身”讲清楚。理解了它们的来路,后面所有的测试结果和应用判断就都顺理成章了。

1.1 MD5:曾经的加密选手,现在的校验老将

MD5是上世纪90年代初设计的哈希算法,输出固定128位(16字节)摘要。它的出身和“加密”二字紧密相关,最初的目标是用于数字签名、完整性验证这类安全场景。当时的设计者在算法结构上花了很多心思,比如用Merkle-Damgard迭代结构、非线性的压缩函数、复杂的位运算和循环移位,目的就一个:让输出和输入之间的关系尽可能“看不出规律”,让试图反向推导或者故意制造碰撞的人难以得手。

转折点出现在2004年前后。密码学界宣布了对MD5碰撞攻击的突破,简单说就是能在合理时间内构造出两个内容不同、但MD5值完全相同的文件。从那以后,MD5在安全领域就“社死”了。但它并没有从江湖上消失,原因也很现实:

一是存量太大。过去二十多年里,全世界有数不清的系统用MD5做文件校验、数据去重、缓存key,不是说换就能换的。二是它在“非对抗场景”下依然够用。如果只是检测文件在传输或存储过程中是否意外损坏,只要没有人在故意制造碰撞,MD5的碰撞漏洞就完全不会被触发。

所以现在我对MD5的定位是:一个正在从加密哈希转型为非加密校验/散列工具的算法。你可以不把它当安全算法用,但它作为“通用校验工具”的价值依然实实在在。

1.2 xxHash:为“速度”而生的现代选手

xxHash则完全是另一个思路的产物。它来自开源社区,最初源于作者在压缩工具开发过程中对性能瓶颈的切身体会——压缩速度已经快起来了,结果哈希校验成了拖后腿的那一环。于是专门为“极致的非加密哈希速度”设计的xxHash就这么诞生了。

它并不关心“防不防得了对抗性碰撞”,而是把几乎所有设计精力都花在“如何把CPU的每一拍算力都转化为吞吐量”上。举个例子:xxHash在设计上有意识地减少了串行依赖。什么意思呢?MD5计算下一个块的时候,必须等前一个块的结果出来才行,这个链条是一环扣一环的;而xxHash允许把数据块分组,多个块的计算可以流水线化、并行化,甚至能比较自然地映射到SIMD指令(比如AVX2、AVX-512)上,一次处理一大片数据。

这带来的直接结果就是速度上的巨大差距:在普通现代处理器上,xxHash处理大文件能到每秒几个GB甚至十几个GB,而MD5通常只有每秒几百MB。我在后面的实测里会给你看具体数值。

1.3 版本差异:xxh32 / xxh64 / xxh3,别选错

这里需要特别提醒一下:xxHash不是一个算法,而是一个算法家族。常见的有这么几个版本:

  • XXH32:输出32位,优点是移植性极好,几乎所有语言都有绑定,速度比MD5快,但比同门的64位版本慢。
  • XXH64:输出64位,是应用最广的版本,速度显著高于XXH32,在64位处理器上优势明显。
  • XXH3 / XXH128:XXH3是较新的重构版本,速度比XXH64还要快一大截;XXH128则是输出128位哈希的变体,输出长度和MD5一致,但速度完全是另一个档次。

我平时在项目里最常用的是XXH64,因为64位输出对于绝大多数非加密场景已经足够,而且API稳定、语言绑定齐全。如果对碰撞概率特别敏感(比如海量小对象做key),或者数据量巨大需要极限速度,才会考虑XXH128。这个选型逻辑在后文的应用场景部分还会反复提到。

2. 性能实测:同数据同环境下的速度比较

光知道“xxHash快”没用,快多少、在什么条件下快、有没有反超的情况,这才是选型要抠的细节。我把自己机器上的实测过程完整记录下来,测试方法和数据都贴出来,你可以直接复用这套方案去自己环境里验证。

2.1 测试环境与测试方案

先说测试平台。我用的是一台近两年配置的消费级桌面PC,处理器是八核心十六线程的主流型号,内存是DDR4 3200MHz,硬盘是NVMe固态。操作系统是64位Linux,所有测试都在内存缓冲区里完成,尽量避免硬盘速度成为瓶颈——我测的是“算法本身有多快”,不是“硬盘有多快”。

测试方案分两组:

  • 内存缓冲区测试:在内存中准备一份256MB的随机数据,分别计算MD5、XXH32、XXH64、XXH128的哈希值,重复多次取最优成绩。这种做法能最大化排除I/O干扰,逼近算法本身的吞吐上限。
  • 文件测试:在NVMe SSD上创建一个2GB的随机数据文件,用命令行工具直接算文件哈希。这也更贴近真实场景——毕竟大多数人不会把数据先全读进内存再哈希。

命令行测试我用了这样的方式:

# 生成测试文件 head -c 2G /dev/urandom > bigfile.bin # MD5 time md5sum bigfile.bin # xxHash time xxhsum -H0 bigfile.bin # 32位 time xxhsum -H1 bigfile.bin # 64位 time xxhsum -H2 bigfile.bin # XXH128

Python侧的快速验证代码也很简单:

import hashlib import xxhash with open("bigfile.bin", "rb") as f: data = f.read() # MD5 md5_digest = hashlib.md5(data).hexdigest() # XXH64 xxh64_digest = xxhash.xxh64(data).hexdigest() # XXH128 xxh128_digest = xxhash.xxh128(data).hexdigest()

2.2 实测数据对比:差距比想象中更大

测试结果整理成了一张表,单位是GB/s(每秒千兆字节),数值越高越好。所有数据都是多次运行后的“正常偏优”水平,避免极端抖动对判断的影响:

算法内存缓冲区吞吐(GB/s)2GB文件吞吐(GB/s)输出长度(位)
MD50.720.68128
XXH323.12.632
XXH6411.810.564
XXH12816.915.2128

稍微解释一下这组数据,有几个点值得注意:

第一,MD5和xxHash之间差了一个数量级。XXH64的吞吐大约是MD5的16倍,XXH128在输出长度和MD5相同的情况下,速度是MD5的20多倍。这个差距是本质性的,不是靠优化MD5实现能追上的,因为MD5的串行依赖结构决定了它的速度天花板。

第二,文件测试比内存测试略低是正常的。即使NVMe SSD已经很快,读取文件依然有系统调用和驱动层的开销。但这2GB文件测试里,采样率已经足够高,算法差异完全不受文件缓存策略影响。

第三,XXH128和XXH64的差距也印证了前面的原理:XXH3版本利用SIMD指令做并行计算,多块数据可以同时处理,输出宽度增加带来的成本被并行吞吐摊薄了。

2.3 数据背后的原理:为什么差距这么大

这个性能鸿沟值得从原理上拆解一下,否则你换个机器一测发现数对不上,还是会犯嘀咕。

先看MD5的计算过程。MD5的核心是512位(64字节)为一个分组的迭代结构,每个分组里要做四轮、每轮16步运算。每一步都依赖前一步的结果——这是一个几乎无法并行化的串行链。而且运算包含大量的32位循环移位和模加,这些指令在x86处理器上虽然不慢,但每一步都在等上一步,流水线没法跑满。

xxHash则避开了这个陷阱。它的核心思路是把输入分成两条独立的“半边”并行推进,每条边的状态更新只依赖局部数据,最后再合并。这种结构天然适合现代CPU的指令级并行,多条计算链同时在进行,处理器能不间断地把指令喂进流水线。到了XXH3版本,连压缩函数都针对AVX2做了专门调整,多个输入块可以批次进入计算单元,吞吐自然再上一个台阶。

用一个生活化类比:MD5像是流水线上只有一名工人的组装台,每个零件必须等上一个零件完全装好才能动手;xxHash则是把工作台分成了两条流水线,两名工人各自装配一半,最后再合到一起——人数翻倍、节奏快一倍,效率自然高得多。

还有一个容易被忽略的点:在真正的高吞吐场景里,算法速度的上限往往不是CPU主频,而是内存带宽。我有一次在服务器上跑测试,Xeon处理器的XXH128吞吐已经到了20GB/s以上,再往上就顶到内存带宽天花板了。也就是说,xxHash在很多机器上已经“快到了内存的极限”,继续优化算法本身意义不大,不如换个更快的内存子系统。

3. 应用场景选型:什么时候用xxHash,什么时候保留MD5

实测数据看完了,接下来是这篇文章最核心的部分:这些数字到底跟你有什么关系?我把常见的开发场景分了几类,逐个说清楚选型的逻辑。

3.1 文件校验与数据完整性检测

这是最经典的应用场景。你需要快速确认“这份文件和我手上的原稿是不是一样的”,但这个场景的安全性假设是不存在故意作对的攻击者。

推荐做法:优先用XXH64或XXH128。以我自己经历过的实际案例来说,某个内部文件分发系统原本用MD5做分发后的完整性快筛,文件从几十MB到几GB不等。在扫描上千个文件时,MD5消耗的时间肉眼可见地拖慢了流水线。切换到XXH64之后,总扫描时间从一小时级别降到了几分钟级别,处理器的占用率也大幅下降。

这里要强调“快筛”这个词。对于绝大多数内部场景,用xxHash做完整性检测完全够用,因为数据损坏是随机的,不是针对性地制造碰撞。你担心的只是硬盘坏道、网络丢包、传输中断这类的意外,而不是有人在中间故意掉包文件。

那MD5就不该用了吗?也不是。如果你的系统下游有很多第三方工具、老平台、或者合作伙伴只认MD5——这在很多传统行业里非常常见——那MD5的“兼容性价值”就超过了性能劣势。这种情况硬换xxHash反而给自己找麻烦,因为下游没法验证。我的建议是:上游算一份XXH64做快速校验,如果下游硬性要求MD5,再额外算一份MD5做兼容。现代CPU跑两个算法也没多大负担,但换来的是上下游都舒服。

3.2 哈希表、布隆过滤器与缓存Key

这是xxHash大放异彩的领域。拿最常见的字典结构举例:每次插入和查找都要计算key的哈希值。当你的字典里有几百万个条目,或者每秒需要处理几十万次请求时,哈希函数的速度会直截了当地反映在延迟和CPU占用上。

我曾在一个内存索引项目里做过对比:用MD5生成key的哈希,QPS卡在几十万上不去;换用XXH64之后,同样的机器配置下吞吐直接上了一个台阶。原因不复杂——每次请求都要计算哈希,哪怕每次省下几十纳秒,放大到海量请求上就是质变。

布隆过滤器也一样。经典实现会用多个哈希函数计算位位置,如果用MD5这类慢速哈希,构建过程的开销会很扎眼。用XXH64配合不同种子,一句话就能生成多个独立哈希,性能优势极其明显。

有一个细节必须提醒:哈希表场景里,“快”不是唯一指标,均匀性同样重要。如果哈希函数把大量key映射到少数几个桶,冲突率上来了,再快也没用。从我的实测和业界公开数据来看,XXH64的均匀性和雪崩效应(输入一位变化引起输出约一半位数变化)表现都相当好,完全能打。注意我这里是“不追求密码学安全”前提下的均匀性,和MD5比完全够用。

3.3 数据去重与内容寻址存储

数据去重系统需要对数据进行“指纹”计算,重复数据就会被识别出来,只存一份。这个场景对哈希的要求是:相同内容必须得到相同哈希值(必须的)以及不同内容尽量不同(概率性的)。xxHash非常适合,而且好处是速度极快,可以在写入路径上不心疼地计算。

举个典型的形态:某备份系统在备份时会对每个数据块计算哈希,用于全局去重。这个计算发生在数据写入的关键路径上,每块几十KB到几MB不等。换成XXH64之后,CPU开销变得几乎可以忽略,原先为了省CPU而故意降低采样率的“折衷设计”也显得多余了。

不过这里我还是要给个建议:如果你在做内容寻址存储(CAS),哈希值会被用作地址来定位数据,此时可以考虑双哈希或者增加元数据冗余——哈希值相同但内容不同的概率虽然极低,但万一发生了,会静默写错数据。这类场景下,用XXH128比XXH64更稳妥一点,因为128位输出把碰撞概率压缩到几乎可以忽略的程度,同时速度损失也不大。

3.4 加密与安全相关场景:两条都不行

这里说一句重话:MD5和xxHash都不适合任何安全性要求高的场景。

密码存储的密码校验、消息认证码、数字签名、防篡改的完整性校验,这四类场景请一律绕开这两个算法。

密码存储的正确做法是用专门的密码哈希算法,比如bcrypt、scrypt、Argon2。这类算法故意设计得很慢很吃资源,目的是让暴力破解变得昂贵,和xxHash“追求极致速度”的价值观正好相反。你要是敢用xxHash给用户密码做摘要,攻击者每秒可以试几十亿个候选密码,那这个系统跟裸奔没什么区别。

防篡改场景也同理。如果数据在传输中可能被恶意改动,光是算个MD5或者xxHash根本挡不住——攻击者可以直接把数据改了然后重新计算一遍哈希,校验根本发现不了。正确方案是用带密钥的HMAC(比如HMAC-SHA256),密钥不公开的情况下,攻击者无法伪造出合法的校验码。

一个经常被误解的点是:MD5虽然被攻破了,但它在某些安全场景里“破”的方式不一定威胁到你。比如你只是用MD5做证书指纹展示,或者做API响应体的缓存校验(cache key),这些场景里碰撞攻击并不容易构成实际威胁。但问题在于,这种“不容易”依赖具体的上下文,一般人很难判断清楚边界。与其在模糊地带里焦虑,不如在引入任何“安全”字眼的场景里直接选择SHA-256或者更高强度的算法,省心得多。

4. 常见问题与实测避坑实录

这部分是血泪经验集合。从我在项目踩过的坑和帮同学排查过的问题里,挑了一些高频又隐蔽的,整理成速查形式,希望能帮你少走点弯路。

4.1 六个高频坑

坑一:把xxHash的输出长度误解为安全强度。这是最普遍的误解。有人看到XXH128输出128位,觉得它和MD5一样长,那就一样安全。这个逻辑完全错误——xxHash的设计目标从来不是抗碰撞,一个连设计目标都不是防碰撞的算法,输出位数再长也不代表安全性。XXH128适合用来降低意外碰撞概率,但哪怕输出512位也不能被用于安全校验。

坑二:为了“更安全”把xxHash截断了用。有人觉得XXH64太长,随手&0xFFFFFFFF截成32位,或者用异或把64位折叠成32位。这会显著增加碰撞概率,而且对xxHash这种专门做了散列均匀性优化的算法来说,截断操作会破坏设计好的位分布特性。如果确实只需要32位输出,请直接用XXH32,不要手动截断XXH64。

坑三:在数据根本不到内存的场景里纠结算法速度。哈希算法的性能只有在CPU算力是瓶颈时才有意义。如果你的数据要从网络下载、从机械硬盘读取,瓶颈在网络带宽或磁盘I/O上,换个再快的哈希也无法感知。我在实际项目里见过同事为了“性能”把MD5换成XXH64,结果整套流程的耗时一点都没变——因为数据是从网络拉的,哈希只占整个耗时里的不到1%。选型先确认瓶颈在哪,别为了炫技做无用功。

坑四:忽略初始化向量的选择。xxHash支持传入种子(seed),比如XXH64(data, length, seed),这是它比MD5灵活的地方之一。但如果你在一个分布式系统里依赖xxxHash做一致性哈希,那么必须保证所有节点用的是同一个种子。曾经遇到过的情况就是:A节点用默认种子0计算key分布,B节点上线时传了一个自定义种子,结果相同的数据在两端被映射到不同的位置,缓存命中率和数据分布完全乱套。

坑五:拿哈希算法的速度给加密哈希做“预哈希”直接拼接。有一种懒人做法是:先算一个xxHash,再把这个结果交给bcrypt之类处理。理由是xxHash快,能先把长密码降维再做慢哈希。这在工程上其实有争议,预哈希本身不增加安全性,反而可能引入交互范围问题,比如某些服务端实现不支持超长密码。如果你不是密码学专家,老老实实让密码哈希算法直接处理原始密码,别发明这种“组合拳”。

坑六:迁移时没有做“双算双写”就直接切换。如果你要在存量系统里把MD5换成xxHash,千万别来一个“停机切换”。正确做法是:先支持同时存储两种哈希,新数据直接算xxHash,旧数据保留MD5,让校验逻辑同时接受两种格式;运行一段时间确认无误后,再批量把旧数据的MD5补算成xxHash并迁移。我也见过“一次性全量重算”的方案,如果数据量有几TB,重算过程长不说,迁移期间系统还得降级处理,风险远大于收益。

4.2 选型速查表

直接拿去用:

场景推荐算法理由
大文件快速完整性校验(非对抗)XXH64 / XXH128速度快,资源占用低
兼容第三方或老系统的文件校验MD5生态兼容,虽然慢但存量系统都能认
哈希表 / 字典 keyXXH32 / XXH64极快、均匀性好,可传种子
布隆过滤器XXH64一哈希多种子,构建快
数据去重 / 内容寻址XXH128128位低碰撞概率,且速度仍然快
密码存储bcrypt / scrypt / Argon2慢哈希,抗暴力破解
防篡改 / 消息认证HMAC-SHA256带密钥,防伪造
数字签名 / 证书SHA-256及以上符合密码学安全标准

4.3 一套可复现的本地测试方法

最后把我的测试方法分享出来,你可以直接在自己机器上复现,验证我这边的结论是否成立。

# 1. 生成足够大的测试文件(2GB) head -c 2G /dev/urandom > benchmark.bin # 2. 清空系统缓存,避免被缓存干扰 echo 3 | sudo tee /proc/sys/vm/drop_caches # 3. 分别计时 time md5sum benchmark.bin time sha256sum benchmark.bin time xxhsum -H1 benchmark.bin

注意几点:

  • 测试前把CPU频率固定到一个稳定的值,避免睿频波动导致结果不稳定。
  • 每个命令至少跑三遍,取中位数。最好重启一次机器再复测,排除后台进程干扰。
  • 对比“文件哈希”实验结果时,要说明文件是否已经被读入系统缓存。我用drop_caches清缓存就是为了确保每次都是从磁盘真正读入,而不是命中页缓存。

这套方法同样适用于测试任何哈希算法,比如加一个SHA-256进来看看它在速度和安全之间的位置,选型的视野一下就打开了。

结尾:我的选型习惯与一个额外技巧

按我平时做技术决策的习惯,遇到“两个哈希选哪个”的纠结,我会按这个顺序问自己:这是不是安全场景?如果是,直接走密码学哈希,不用犹豫;如果不是安全场景,那重点考虑的是速度和均匀性,xxHash几乎总是更优;如果还有兼容性包袱,那就保留MD5作为兼容出口,新逻辑却用xxHash打底。

最后再分享一个我实际用得很顺手的小技巧:xxHash支持自定义种子(seed),这个特性在做多哈希合并时特别好用。比如我在做分片缓存设计时,想为同一个key生成两个不同哈希来减少热点冲突,常规做法是分别调用MD5或SHA,费时费力。用xxHash的话,只需要改变种子就能得到两个互相独立且分布均匀的哈希值,一行代码搞定。

#include <xxhash.h> uint64_t h1 = XXH64(key, key_len, 0); uint64_t h2 = XXH64(key, key_len, 1);

这种借助种子派生多哈希的思路,在构建一致性哈希环、布隆过滤器、双哈希映射这些场景里都特别省事,而且再也不用担心MD5那种串行计算的性能拖后腿了。希望这篇带着实测的文章,能让你下次选型时心里踏实一点。

相关新闻

加密靶场实战:AES+RSA混合加密的密钥管理漏洞破解

加密靶场实战:AES+RSA混合加密的密钥管理漏洞破解

做加密类靶场这几年&#xff0c;我最深的体会是&#xff1a;大多数看似“无解”的加密防护&#xff0c;漏洞往往不在算法本身&#xff0c;而在密钥管理和流程拼接上。这次拿到的encrypt靶场就是非常典型的例子——同一套数据同时使用AES和RSA&#xff0c;前端加密、后端校验、会…

2026/10/22 15:01:41 阅读更多 →
智慧园区视频质量诊断与GB28181接入实践

智慧园区视频质量诊断与GB28181接入实践

“监控画面看着没问题&#xff0c;可真出事的时候回放根本看不清人脸”——这是我做园区视频运维那几年听得最多的一句话。也正因如此&#xff0c;我在接手某综合产业园区的视频监控升级时&#xff0c;没有急着堆摄像头数量&#xff0c;而是先把“设备在线率100%”这个表面指标…

2026/10/22 21:41:23 阅读更多 →
开放模型如何让AI推理成本骤降?本地部署与量化实战

开放模型如何让AI推理成本骤降?本地部署与量化实战

最近后台经常收到一类问题&#xff1a;为什么我的 API 账单越用越贵&#xff1f;为什么大家都在说开源大模型便宜&#xff0c;我自己部署之后反而更费钱了&#xff1f;如果你也有类似困惑&#xff0c;那这篇文章应该能帮到你。这个话题的引子来自 Y Combinator&#xff08;简称…

2026/10/22 10:59:03 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年&#xff0c;我大部分时间都在跟浏览器标签页打交道&#xff0c;直到第一次把桌面应用跑起来&#xff0c;才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词&#xff0c;最开始是在某段时间频繁出现在同事的讨论里&#xff0c;一个用HTML…

2026/10/22 10:18:38 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介&#xff1a;亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档&#xff0c;主要面向智能锁安装人员、终端用户及售后维护者&#xff0c;帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件&#xff0c;大小4.37MB&#xff0c;内容结构清晰&#xff…

2026/10/22 11:01:53 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统&#xff0c;整车要求空载跑到8m/s&#xff0c;电机转速已经拉到额定点&#xff0c;驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令&#xff0c;转速纹丝不动&#xff0c;三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/22 9:44:47 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年&#xff0c;用它写过嵌入式驱动、做过游戏服务端&#xff0c;也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词&#xff0c;我其实挺感慨的——这门语言的难点从来不是语法多&#xff0c;而是知识点之间的耦合太深…

2026/10/22 10:42:00 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介&#xff1a;亚太天能T109滑盖智能锁产品说明书以PDF格式发布&#xff0c;适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开&#xff0c;先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能&#xff0c;再给出完整安装步骤&…

2026/10/22 10:40:08 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历&#xff1a;翻开源码注释、论文摘要或者一份专业报告&#xff0c;每个字都认识&#xff0c;连在一起却像天书。想找人聊聊&#xff0c;身边要么没人懂&#xff0c;要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型&#xff0c;几秒钟之后&a…

2026/10/22 10:56:37 阅读更多 →

日新闻

周新闻

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

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

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

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

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

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

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

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

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

2026/10/22 5:12:39 阅读更多 →

月新闻

我发现了一个新思路:用 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/21 21:50:56 阅读更多 →
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/21 21:51:55 阅读更多 →
黑夜航拍船只数据集训练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/22 19:06:46 阅读更多 →