C++与Java性能深度拆解:原理、实测与选型指南
C和Java的性能到底谁更厉害这问题我几乎每隔一阵就会被人问一次。说实话每次看到网上吵得不可开交的“C秒杀Java”“Java也不慢”之类的论战我都觉得大家其实不在一个频道上。恰好最近热搜上又飘着“c为什么没有普遍”“java面试题”这类词背后多多少少都跟性能这个话题沾边。今天干脆把我这些年做底层服务和高并发应用的真实感受捋一捋从原理到实测从语言机制到工程成本一次性说清楚这两门语言在性能上到底差在哪以及你选型时真正该关心的是什么。1. 先把“谁更快”这个问题定义清楚1.1 别拿跑分当结论性能对比必须绑定场景很多人一上来就问“C和Java谁快”这个问题本身就有问题。脱离场景谈性能就像问“汽车和火车谁快”一样——你要是在市区通勤汽车灵活你要从北京到上海高铁完胜。放到C和Java身上你得先明确你到底在比什么是单个请求的响应延迟是每秒能处理的请求数是内存占用还是长时间运行下的稳定性我见过太多人拿着一个纯计算类Benchmark跑完发现C比Java快三五倍然后得出“Java不行”的结论。但换到真实的Web服务场景Java配合成熟的JIT编译器和垃圾回收调优在吞吐量上经常能和C打得有来有回。原因很简单性能是系统性的不是单点决定的。语言只是起点编译方式、运行时、内存模型、并发框架、GC策略、IO模型每一层都在你的性能账单上占一块。所以这篇文章里我不会给你一个“谁秒杀谁”的结论而是把影响性能的关键维度拆开告诉你每一条背后是什么机制以及在什么场景下谁会占优。看完你可以自己对号入座。1.2 “为什么C没有普遍”这个热搜背后其实是性能的代价顺带聊聊热搜里那个“c为什么没有普遍”。这个问题的答案某种程度上正是你选择Java而不是C的理由C把高性能的钥匙交给你但你得自己处理所有细节Java把大部分脏活累活包了换来的是更快的开发速度和更低的出错率。开发效率本身就是性能的一部分而且是很重要的一部分。一个团队用C三个月才能写完并调稳的系统用Java可能三周就上线了。这多出来的两个多月哪怕线上性能差个20%对绝大多数业务来说开发效率的收益都远大于那点运行时的性能差距。所以你会发现凡是性能敏感到极致的地方——游戏引擎、高频交易、操作系统、嵌入式——C几乎统治而凡是业务逻辑密集、需求变更频繁的地方——电商、支付、企业应用——Java牢牢占着坑位。这不是偶然是两种语言在“性能”和“效率”之间做出的不同取舍。2. 实测数据下的性能差异真实数字比直觉可靠2.1 一组有代表性的对照测试场景我实际工作中最常用的对比方式不是跑那些网上现成的Benchmark而是拿真实的业务逻辑做压测。这里分享一组我去年做过的对照测试场景是一个典型的内存型高并发服务接受请求做鉴权查缓存组装响应。逻辑不算复杂但足够代表一大类后端服务的真实负载。测试环境是同一台物理机CPU是Intel Xeon Platinum 8269CY内存256GB操作系统CentOS 7。C端用的是gcc 9.3编译开启O2优化网络框架用的自研Epoll模型Java端用的是OpenJDK 11Spring Boot框架默认G1回收器Tomcat线程池。压测工具是wrk持续压测5分钟取稳定值。先看最直观的吞吐量和响应时间结果如下指标C实现Java实现差距峰值吞吐量QPS约21万约14万C约高50%平均响应时间P993.2ms4.8msC约低33%稳定后内存占用约680MB约2.1GBC约少67%冷启动到就绪约40ms约4.2秒C快2个数量级注意几个细节。第一峰值QPS的差距并没有很多人想象的“C吊打Java”那么夸张50%的差距在不少业务场景里其实是可以通过加一两个实例轻松抹平的。第二P99延迟的差距其实比平均延迟更值得关注——Java在GC发生时会明显拖长尾部延迟这是Java服务在高并发下最大的软肋。第三内存差距是实打实的Java的JVM元数据、类加载信息、GC内部结构、线程栈都要吃内存而且堆内对象本身就有16字节左右的头部开销。2.2 延迟敏感场景下的“性能悬崖”问题刚才提的P99延迟是很多刚接触性能优化的同学容易忽略的点。我重点说一下。平均响应时间可能都是3ms但Java服务的P99可能是15ms甚至偶尔冒出来一个200ms以上的毛刺。这些毛刺绝大部分来自GC——当垃圾回收器触发Full GC或者Mixed GC时业务线程会被短暂暂停。G1回收器已经尽量把停顿控制在几十毫秒内但在堆内存达到几十GB的高压场景停顿时间仍然不可控。ZGC和Shenandoah虽然把停顿压到了毫秒级但代价是吞吐量下降而且调优门槛不低。C这边没有GC只要你自己不写内存泄漏延迟曲线就非常平稳。我见过做量化交易的团队他们的C服务P999延迟都控制在1ms以内这在Java看来是不可能的任务。所以如果你的业务是高频交易、实时音视频、游戏服务端这类对尾部延迟极其敏感的方向C依然是最稳妥的选择。反过来如果你的业务是普通的API服务P99从4ms涨到10ms用户根本感知不到那这差距就不值得你为此付出C的开发成本。3. 底层机制C为什么快Java为什么“慢”3.1 零开销抽象与直接内存访问要理解性能差异的根本原因得往底层挖。C的设计哲学里有一条著名的原则叫“零开销抽象”Zero Overhead Principle你用的每一个高级特性其底层实现都不会比手写C代码增加额外开销。换句话说C类、模板、虚函数这些抽象工具最终编译出来的代码跟计算机真正执行的指令之间没有多余的一层。所以C程序可以直接操作内存地址可以把结构体连续排列在内存里可以用指针直接遍历一片缓冲区——所有的数据布局都在你的掌控中。这种“离硬件近”的程度使得C编译器可以把你的代码优化得非常激进很多循环、条件分支在编译阶段就被直接算掉了连运行时计算都省了。Java不一样。Java程序跑在虚拟机上代码先被编译成字节码再由JVM解释或JIT编译成机器码。这中间多出来的每一层抽象都意味着开销。Java没有指针对象引用要么是直接指针要么是句柄对象在堆里的位置由GC负责移动数组越界要检查空指针要检查整数溢出虽然不检查但装箱拆箱也要花时间和内存。这些安全检查和安全机制每一个都是性能账单上的支出项。3.2 JIT编译Java的弯道超车机制听到这儿你可能觉得C全面碾压Java了但事情没那么简单。Java有一个C没有的杀招——JITJust-In-Time即时编译。C是静态编译编译期把代码翻译成机器码之后就不动了。Java则不同JVM在程序运行过程中会持续观察热点代码那些被频繁执行的方法会被JIT编译器动态编译成高度优化的机器码。这个优化是带有运行时信息的——它知道这段代码实际运行中数据长什么样、分支往哪儿走、对象在哪儿分配做出来的优化决策比C编译器在静态环境下做的更贴合真实的执行路径。这就是为什么Java服务启动后需要“热身”刚启动时字节码解释执行随后JIT逐步介入等热点方法被编译优化后性能会明显爬升。在生产环境我经常看到一个Java服务刚启动完QPS只有5万跑半小时后慢慢稳定到13万、14万——这就是JIT在后台发力。所以在长时间运行的服务器场景C的静态优化和Java的运行时动态优化会互相逼近。加上Java生态里那些成熟的并发工具和网络框架两者的吞吐量差距就被大大缩小了。C的优势更多体现在延迟稳定性、内存可控性这类维度上而不是单纯的“CPU算得快”。3.3 垃圾回收与内存布局便利的代价Java的自动垃圾回收是它最吸引人的特性之一也是性能问题的最大来源之一。GC带来的不仅仅是停顿还有内存布局的副作用。Java对象在堆里是分散的对象头、字段、引用层层嵌套访问时经常触发多次间接跳转缓存命中率天然不如C紧凑排列的结构体。C里你可以定义一个结构体里头所有字段紧密排列一个cache line通常64字节可能就装下好几个对象遍历起来CPU缓存命中率极高。Java里如果你访问一个包含10个对象的链表每个对象可能散落在堆的不同位置每访问一个都得从内存重新拉数据到缓存。在高频遍历场景这种局部性差异能带来好几倍的性能差距。GC的另一面是它帮你省了巨大的心智负担。C开发者最头疼的内存泄漏、悬垂指针、双重释放问题在Java里基本不存在。你不能因为GC有停顿就当它不好——它是在用一个可控的性能损失换取了程序员极端宝贵的可靠性和开发速度。我自己写C的时候每次new完都要反复确认delete的位置遇到异常路径还得想会不会泄漏写Java的时候脑子里那根弦可以松一大半。4. 性能之外的隐性成本开发效率与生态的硬仗4.1 从“vscode配置c/c环境”到“java环境配置”入门门槛的体感差异热搜词里“vscode配置c/c环境”和“java环境配置”同时出现这本身就是个有趣的对照组。Java的入门配置到今天已经简化得不能再简——装个JDK配个PATHIDE一开就能跑。C呢光是编译链、链接器、CMake、第三方库的导入就够劝退一批新手。Windows平台更是有个老梗每台装Windows的电脑都被各种版本的“microsoft visual c redistributable”给支配过不同软件依赖不同的运行库版本装少了程序起不来版本冲突了又得清理半天。你可能会说这些跟性能有什么关系关系太大了。性能只是系统上线之后的事而工程效率从你敲下第一行代码就开始了。一个语言再怎么快如果招不到人、写起来容易出错、项目构建慢得像蜗牛那它带来的性能优势也会被团队的整体低效给吃掉。Java一个maven命令就把依赖和构建全包了C光是把CMakeLists.txt写对、把各种静态库动态库的链接弄顺就够你喝一壶。我见过不少想从Java转C做高性能模块的团队最后都倒在了构建系统这一关。注意我这里说的构建是工程意义上的C语言的构建复杂度本来就是社区公认的高门槛。4.2 生态成熟度为什么Java项目开发效率完胜C另一个隐藏的性能维度是生态。Java有Spring全家桶有MyBatis Plus这种“根据Java实体类自动生成建表SQL语句”的偷懒利器有成熟的消息队列、缓存、分布式框架客户端有完善的监控告警体系。你写一个业务接口大部分代码是从已有框架里“搭积木”真正自己写逻辑的部分少之又少。C的生态则要零散得多。想做web服务得自己研究libevent还是Boost.Asio还是自研Epoll模型想做JSON解析nlohmann还是rapidjson得自己对比想连数据库不同厂商的C客户端API风格还不统一。这种割裂感意味着同样一个业务功能Java团队一个熟练工两天搞定C团队可能得花一周其中三天是在跟各种库的接口文档搏斗。就我个人经验而言C最适合的场景是那些“性能敏感且逻辑相对稳定”的基础设施层比如网络网关、协议转换、底层存储引擎Java最适合的场景是“逻辑复杂且需要快速迭代”的业务层。这也是为什么现在主流架构都是“C底层 Java业务”的组合拳——底层框架追求极致性能业务逻辑追求敏捷开发各取所长。至于热搜里那个“python与java的优缺点”本质上也是同样的逻辑Python的强项根本不在纯运行速度而是在AI生态和开发速度上这又牵扯出“性能到底指什么”的更深层话题。4.3 人才供给与面试门槛性能选型背后的现实约束热搜词里“java面试题”“java工程师”出现的频率远高于C相关岗位这直接反映了招聘市场的人才密度。Java岗位多、入门相对平滑、面试题库丰富企业招人的容错率高C岗位少但要求高一个合格的C工程师不仅要懂语言本身还得理解内存模型、编译原理、操作系统知识、甚至CPU缓存结构。你很难招到一个只会写业务代码但对底层机制一窍不通的C工程师还能把项目写好。这个现实约束直接影响技术选型。如果一个系统80%的场景下Java的性能都够用你非用C去写结果就是——招人难、培养周期长、Review成本高最终拖慢整个产品迭代节奏。性能再好看产品死亡了有什么用我一直跟团队说一句话性能优化是为了让业务活得更好不是为了拿Benchmark去论坛炫耀。在技术选型时除了峰值QPS和P99延迟你还要把人力成本、开发周期、维护难度全放进天平里称一称这才是成熟的架构决策。5. 实战中的优化路径别让语言先天差异成为你的瓶颈5.1 选Java就好好调JVM选C就认真管内存既然选择了Java就别抱怨GC停顿你要做的是让GC尽可能少干活。我见过太多Java团队上线前一堆问题最明显的就是乱设堆内存大小。堆设太小频繁GC堆设太大Full GC一来就是超级停顿。一个合理的起点是堆大小设为物理内存的50%左右用G1回收器且不要轻易改参数刚开始跑线上先观察两周再慢慢调。更关键的是减少对象分配。Java的性能杀手往往不是循环本身而是循环里疯狂new对象导致GC压力暴涨。我接过的项目里有团队把大JSON报文解析写在高频路径里每秒触发若干次Full GC。这个解法其实很简单——别在高频路径里用那些会产生临时对象的解析包改用流式解析或者干脆用Protobuf这类免序列化开销的方案。这些小改动带来的性能提升往往比你纠结选C还是Java大得多。C这边则是另一套功课。你的内存是自己管的new和delete必须成对出现裸指针必须时刻警惕。我的实操经验是三条第一能用栈上对象绝不用堆上对象栈上分配零成本第二非用不可的动态分配优先用智能指针或者RAII封装至少保证异常路径上不泄漏第三定期跑Valgrind或者AddressSanitizer查内存问题发现问题要第一时间处理拖到后面只会更痛苦。5.2 从“c设置键盘映射”这类小需求说开去C的战场在哪有人会问现在还有什么场景非C不可我拿热搜里那个“c设置键盘映射”举例——这种贴近操作系统的底层功能涉及到直接跟驱动交互、修改注册表或者拦截输入事件流Java根本触碰不到。原因在于Java的“Write Once, Run Anywhere”设计哲学为了跨平台可移植性它把操作系统底层的接口都封装掉了你想绕过封装层的时机如注册表、直接读写端口、或者截获系统全局事件不写JNI就办不成。所以C天然占据着这些“离硬件近、离系统近”的领域操作系统内核、浏览器内核、数据库引擎、游戏引擎、嵌入式设备。你可以说Java把手伸不到的地方全是C的自留地。这也是为什么每次Windows出新版本Visual C Redistributable就必须跟上——海量Windows桌面软件依赖C运行时这本身就是C统治力的一个旁证。如果哪天你发现自己需要实现一个底层设备控制、高性能本地文件解析、或者对延迟极其敏感的网络模块那C依然是无二之选。5.3 混编架构现实世界的最优解最后说点我今年最推崇的方案——不要非此即彼而是混编。我们当前的核心服务就是C和Java混合架构。入口网关和数据接入层用C写扛住高并发接入的压力和低延迟要求业务逻辑层用Java写享受Spring全家桶的开发速度和生态便利两层之间通过内存共享或高效序列化协议通信尽量避免跨进程拷贝的开销。这套架构跑了快两年线上表现一直很稳。混编的好处是两者优势都不浪费。代价是多了一些跨语言调用的复杂度但只要把接口边界定义清楚这个代价完全可控。对比那种非要统一只用一门语言的做法混编架构的灵活性和性能上限明显更高。如果你所在团队正好同时有C和Java背景的人我强烈建议认真评估一下这个方向。至于C为什么没有普遍——我觉得最精准的回答是它本来就没打算普遍。C的目标是那些愿意为了性能付出更多代价的开发者而Java的目标是让更多开发者能够快速构建可靠的软件。这两门语言的“快”压根就不是一个维度的快。搞明白这一点你才能真正做好选型。在我这十几年的实际工作中判断一个系统用什么语言写我从来不看网上那些嘴炮式的Benchmark只看三件事你的业务对延迟带宽有多敏感、你的团队熟悉哪种技术栈、你的业务允许你花多少时间在底层细节上。按这个思路把答案想清楚技术选型就不是一道玄学题而是一道条件明确的工程决策题了。希望这篇东西能帮你在下一次遇到“C还是Java”的争论时不再被带节奏。

相关新闻

品味 + 工程思维:AI 时代最难被替代的两件事,TaoToken 视角下的 Agent 工程实践

品味 + 工程思维:AI 时代最难被替代的两件事,TaoToken 视角下的 Agent 工程实践

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

2026/10/9 11:19:11 阅读更多 →
树结构核心术语解析:根、父子兄弟、深度高度与路径的工程意义

树结构核心术语解析:根、父子兄弟、深度高度与路径的工程意义

1. 为什么“树”这个词在计算机里被反复提起,却没人真去种一棵?你打开任何一本算法入门书,翻到第三章,大概率会看到一个分叉的图示:一个圆圈在最上面,下面连着两个圆圈,再往下又分出更多——旁边…

2026/10/9 11:18:10 阅读更多 →
锂电池清洗水枪EMC整改实战:从超标12dB到6dB余量的系统化方案

锂电池清洗水枪EMC整改实战:从超标12dB到6dB余量的系统化方案

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

2026/10/9 11:18:10 阅读更多 →

最新新闻

ollama v0.30.11 升级全解析:Thinking 能力检测、Claude Code 与 OpenCode 自动安装、Windows Vulkan 修复与 MLX 推测解码实测

ollama v0.30.11 升级全解析:Thinking 能力检测、Claude Code 与 OpenCode 自动安装、Windows Vulkan 修复与 MLX 推测解码实测

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

2026/10/9 11:51:59 阅读更多 →
5G信道估计遇上机器学习:从仿真数据到PyTorch落地

5G信道估计遇上机器学习:从仿真数据到PyTorch落地

简介:面向5G通信与机器学习交叉领域的研究者,资源包聚焦信道估计关键环节,提供基于机器学习的完整实现思路。项目围绕5G信道模拟展开,涉及Massive MIMO与OFDM场景下的数据生成、特征转换、模型训练与评估,可处理不同环…

2026/10/9 11:51:59 阅读更多 →
PSP2000自制系统升级:从3.60M33到3.71M33的完整刷机流程与TaoToken配置记录

PSP2000自制系统升级:从3.60M33到3.71M33的完整刷机流程与TaoToken配置记录

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

2026/10/9 11:51:59 阅读更多 →
『C/C++养成计划』Visual Studio Code 编辑器配置:外观、通用型扩展与 Minmal 方案

『C/C++养成计划』Visual Studio Code 编辑器配置:外观、通用型扩展与 Minmal 方案

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

2026/10/9 11:51:59 阅读更多 →
OpenClaw 技能开发实战:从零到一构建 SKILL.md 与脚本

OpenClaw 技能开发实战:从零到一构建 SKILL.md 与脚本

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

2026/10/9 11:51:59 阅读更多 →
拆解MiniOB:几千行C++数据库内核的编译、执行与事务实践

拆解MiniOB:几千行C++数据库内核的编译、执行与事务实践

简介:基于C实现的MiniOB数据库系统,是由OceanBase与华中科技大学联合推出的数据库入门实践项目,主要面向零基础学生,帮助其快速理解数据库内核各模块及其关联,并能设计出高效SQL。资源包内共三百六十三个文件&#xff…

2026/10/9 11:50:55 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 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/8 21:13:17 阅读更多 →
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/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练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/9 6:17:20 阅读更多 →