Java集合调试实战:从基础打印到JSON序列化的高效调试技巧
1. 从“打印”说起一个看似简单却暗藏玄机的需求“打印一个List集合”这大概是每个Java开发者入门后不久就会遇到的操作。乍一看这有什么好说的不就是一行System.out.println(list)吗我刚开始学Java的时候也是这么想的直到后来在调试一个复杂的业务对象时控制台输出了一串毫无意义的[com.example.User1b6d3586, com.example.User4554617c]我才意识到事情没那么简单。这串“天书”是对象的默认toString()方法结果它只包含了类名和哈希码对于我们理解集合内容毫无帮助。所以我们今天要聊的“快速打印”远不止是调用一个方法那么简单。它的核心诉求是如何用最简洁、最直观的方式将List集合无论是基本类型包装类、字符串还是自定义的复杂对象的内容以一种人类可读的格式输出到控制台或日志中。这个需求贯穿于日常开发、调试、日志记录和单元测试的每一个环节。一个得心应手的打印方法能极大提升我们定位问题、理解数据流的效率。基于网络上的高频搜索词比如“java list实体类根据字段去重”、“对象数组去重”、“Java集合超详解”可以看出大家不仅关心“打印”这个动作本身更关心打印背后对集合数据的理解和处理。打印往往是数据验证的第一步之后可能紧接着去重、分组、筛选等操作。因此一个优秀的打印方法应该能清晰展现数据的结构和状态为后续的数据操作提供直观的依据。2. 基础招式System.out.println与toString()的默契与局限最直接的方法莫过于使用System.out.println()。对于Java集合框架中的List这行代码能工作是因为AbstractCollection类已经为我们实现了一个默认的toString()方法。2.1 默认toString()的工作原理当你写下System.out.println(myList)时Java虚拟机会执行以下步骤println方法接收一个Object参数。它调用该参数的toString()方法来获取其字符串表示。对于ArrayList,LinkedList等具体List实现它们继承自AbstractCollection其toString()方法会遍历集合中的每个元素调用每个元素的toString()方法然后用逗号和空格连接最后用方括号[]包裹起来。ListString stringList Arrays.asList(Apple, Banana, Cherry); System.out.println(stringList); // 输出[Apple, Banana, Cherry] ListInteger intList Arrays.asList(1, 2, 3); System.out.println(intList); // 输出[1, 2, 3]对于字符串和包装类型效果很好因为它们自身的toString()方法返回的就是其值的直观表示。2.2 当遇到自定义对象时的困境问题出在自定义对象上。如果一个类没有重写toString()方法它将使用从Object类继承的默认实现也就是我们开头看到的“类名哈希码”的形式。class Person { private String name; private int age; // 构造器、getter/setter 省略... } ListPerson personList Arrays.asList(new Person(Alice, 30), new Person(Bob, 25)); System.out.println(personList); // 输出[Person1b6d3586, Person4554617c]这样的输出对于调试毫无意义。你无法知道哪个对象对应“Alice”哪个对应“Bob”。注意这里就是第一个关键点。System.out.println(list)的“可读性”完全依赖于集合内元素类型的toString()实现。在定义重要的领域模型如User,Order,Product时重写一个清晰、包含关键字段的toString()方法不仅是良好编程习惯更是为日常调试铺路。我个人的习惯是使用IDE如IntelliJ IDEA或Eclipse自动生成toString()方法包含所有核心业务字段。2.3 基础方法的优缺点总结优点极简无需任何额外代码或库。通用适用于所有Collection类型。缺点依赖元素类型对自定义对象不友好除非重写toString()。格式固定输出格式是固定的[e1, e2, ...]无法自定义分隔符、缩进等。嵌套集合显示不佳对于ListListString这类嵌套集合虽然能打印但格式会变得混乱不易阅读。ListListString nestedList Arrays.asList( Arrays.asList(a, b), Arrays.asList(c, d, e) ); System.out.println(nestedList); // 输出[[a, b], [c, d, e]] // 勉强能看但如果是更复杂的嵌套对象就会是一团糟。3. 进阶策略遍历与格式化夺回控制权当默认输出不满足要求时我们必须手动控制遍历和格式化过程。这是最灵活也是最考验基本功的方式。3.1 传统 for 循环最精确的控制使用下标for循环你可以精确控制每个元素的访问和输出格式甚至可以在循环体内加入复杂的逻辑。ListString list Arrays.asList(Java, Python, Go); for (int i 0; i list.size(); i) { System.out.println(索引 i : list.get(i)); } // 输出 // 索引 0: Java // 索引 1: Python // 索引 2: Go适用场景当你需要元素索引或者输出格式非常复杂需要根据元素位置或值进行条件判断时。3.2 增强 for 循环 (for-each)简洁的集合遍历这是遍历集合最常用、最简洁的方式代码意图非常清晰“对于集合中的每一个元素执行某些操作”。ListString list Arrays.asList(Java, Python, Go); for (String language : list) { System.out.print(language | ); // 使用print自定义分隔符 } System.out.println(); // 换行 // 输出Java | Python | Go |适用场景绝大多数只需要元素值不需要下标的遍历场景。注意上面的例子最后一个元素后面会多一个分隔符“ |”有时需要额外处理。3.3 Java 8 Stream API函数式与链式调用Stream API 提供了更现代、更声明式的处理方式。结合forEach方法可以写出非常简洁的代码。ListString list Arrays.asList(Java, Python, Go); list.stream().forEach(e - System.out.print(e )); // 输出Java Python Go更优雅的格式化我们可以利用Collectors.joining先将流中的元素连接成一个格式完美的字符串再一次性打印。String result list.stream() .collect(Collectors.joining(, , [, ])); System.out.println(result); // 输出[Java, Python, Go]Collectors.joining(delimiter, prefix, suffix)这个方法极其强大它允许你指定连接符、前缀和后缀完美复刻甚至超越默认toString()的格式且不依赖元素自身的toString()方法但连接时仍会调用。处理自定义对象在流中我们可以通过map操作先将对象转换为想要的字符串格式。ListPerson people ...; // 假设Person没有重写toString String output people.stream() .map(p - p.getName() ( p.getAge() )) // 自定义格式 .collect(Collectors.joining(, )); System.out.println(人员列表: output); // 输出人员列表: Alice(30), Bob(25)为什么选择Stream API它不仅是为了打印。当你有一连串的数据处理操作时如过滤、映射、排序Stream API 的链式调用可以让代码逻辑更清晰。打印只是这个处理链条的终点之一。实操心得在简单的遍历打印场景for-each循环和Stream.forEach性能差异微乎其微可读性上各有千秋。for-each更传统易懂Stream API风格更现代且易于嵌入更复杂的数据处理流水线中。我个人的选择是如果只是简单打印用for-each如果打印前还需要过滤、转换等操作毫不犹豫用Stream。4. 神兵利器借助第三方库实现“美颜”打印对于调试和日志记录我们常常希望输出不仅是“可读”的更是“美观”和“结构化”的。这时第三方库就成了神兵利器。4.1 Apache Commons Lang3ToStringBuilder与ToStringStyle这个库的ToStringBuilder类可以帮助我们为自定义对象生成格式统一、信息丰富的toString()字符串而无需手动拼接。首先你需要引入依赖Mavendependency groupIdorg.apache.commons/groupId artifactIdcommons-lang3/artifactId version3.12.0/version !-- 请使用最新版本 -- /dependency然后在你的类中重写toString()方法import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; class Person { private String name; private int age; // ... 其他代码 ... Override public String toString() { return new ToStringBuilder(this, ToStringStyle.JSON_STYLE) .append(name, name) .append(age, age) .toString(); } }现在打印ListPerson会得到[{name:Alice,age:30}, {name:Bob,age:25}]ToStringStyle提供了多种预定义风格如JSON_STYLE如上、MULTI_LINE_STYLE多行输出、SHORT_PREFIX_STYLE简短类名等非常灵活。它的优势在于一致性团队内所有对象的toString()格式统一。可维护性增加或删除字段时只需修改append语句避免手动拼接字符串的错误。信息丰富默认会输出字段名和值一目了然。4.2 Google Gson将集合直接序列化为JSONGson 是一个强大的JSON序列化/反序列化库。用它来打印集合简直是降维打击因为它能生成标准、美观、层次分明的JSON字符串。引入依赖dependency groupIdcom.google.code.gson/groupId artifactIdgson/artifactId version2.10.1/version !-- 请使用最新版本 -- /dependency打印集合import com.google.gson.Gson; import com.google.gson.GsonBuilder; ListPerson people Arrays.asList(new Person(Alice, 30), new Person(Bob, 25)); Gson gson new GsonBuilder().setPrettyPrinting().create(); // 创建美化输出的Gson实例 String jsonOutput gson.toJson(people); System.out.println(jsonOutput);输出结果[ { name: Alice, age: 30 }, { name: Bob, age: 25 } ]为什么在调试时特别推荐Gson极致可读性漂亮的缩进和换行特别适合复杂对象或嵌套集合。通用性JSON是通用数据交换格式输出结果可以直接用于API测试或其他工具。无需修改模型类即使Person类没有重写toString()甚至没有getter方法可以通过字段反射访问Gson也能工作。这是它相比ToStringBuilder的一个巨大优势——对原有代码零侵入。踩坑提醒使用Gson的setPrettyPrinting()在调试时非常方便但在生产环境的日志中要谨慎。美化后的JSON会包含大量换行和空格显著增加日志体积。生产环境打印日志时应使用new Gson()创建紧凑格式的实例或者通过日志框架的配置来控制输出格式。4.3 其他工具选型考量Jackson另一个顶级的JSON处理库功能与Gson类似。在Spring Boot等生态中更常见。如果你项目里已经引入了Jackson直接用ObjectMapper来打印集合是顺理成章的选择。日志框架SLF4J Logback/Log4j2在真正的企业级应用中我们几乎不会直接用System.out.println而是使用日志框架。它们支持不同的日志级别DEBUG, INFO, ERROR、输出到不同目的地控制台、文件、网络。你可以将格式化的集合字符串通过日志框架输出例如logger.debug(“Current user list: {}”, gson.toJson(userList));。大集合的打印一定要放在DEBUG级别避免在INFO或ERROR日志中产生大量冗余输出影响性能。5. 实战场景与性能、可读性深度权衡掌握了各种方法如何在具体场景中选择这需要权衡开发效率、运行时性能和输出可读性。5.1 场景一日常开发与调试目标快速查看数据格式清晰即可。推荐方案首选为关键领域模型重写toString()用IDE生成或Apache Commons Lang3然后直接System.out.println(list)。这是一劳永逸的做法。临时查看使用Stream API的map().collect(Collectors.joining())进行快速格式化。或者如果你在用IDEA或Eclipse直接使用调试器的“Variables”或“Expressions”视图它们渲染集合数据的能力比任何打印都强大。5.2 场景二单元测试断言目标在测试失败时断言信息能清晰指出数据差异。推荐方案使用如AssertJ、Hamcrest等断言库。它们提供了丰富的匹配器Matcher并能自动生成友好的错误信息。import static org.assertj.core.api.Assertions.assertThat; ListString actual getList(); assertThat(actual).containsExactly(A, B, C); // 如果失败会输出清晰的信息告诉你实际列表是什么期望是什么。避免在测试中用System.out.println来“肉眼比对”这是低效且不可靠的。5.3 场景三生产环境日志记录目标记录必要信息以供排查问题同时避免性能损耗和日志泛滥。推荐方案使用日志框架绝对禁用System.out.println。谨慎选择日志级别集合数据的打印通常放在DEBUG或TRACE级别。控制输出大小截断只打印集合的前N个元素。logger.debug(“First 5 items: {}”, list.stream().limit(5).collect(Collectors.toList()));摘要不打印具体内容只打印大小和关键统计信息。logger.info(“Processing {} orders, total amount: {}”, orderList.size(), totalAmount);使用紧凑格式如用Gson但不设置PrettyPrinting。惰性求值利用日志框架的参数化信息特性。logger.debug(“The list is: {}”, (Supplier) () - expensiveFormatting(list));这样只有在日志级别为DEBUG时才会执行耗时的格式化操作。5.4 性能与可读性权衡的深层解析System.out.println 本身是同步IO操作性能很差。在循环中频繁调用是性能杀手。字符串拼接在循环中使用或StringBuilder先构建完整字符串再一次性打印比在循环内多次调用print高效得多。Stream API 会创建一些中间对象Stream对象、Collector对于超大规模集合百万级以上的简单遍历其开销可能比传统的for循环稍大。但在绝大多数业务场景下几千、几万条数据这种差异可以忽略不计其带来的代码清晰度和可维护性收益更高。第三方库Gson 反射和JSON构建有一定开销。绝对禁止在高频循环或性能关键路径上调用gson.toJson()。仅用于调试、偶尔的日志记录或对外输出。一个重要的经验法则在开发阶段优先追求代码的清晰和调试的便利在性能敏感的生产代码中则要对打印/日志操作保持警惕评估其必要性和开销。很多时候最“快”的打印方法就是不打印或者只在绝对必要时才打印最少量的信息。6. 避坑指南那些年我踩过的“打印”的坑即使是一个简单的打印操作也处处是坑。下面分享几个我亲身经历或常见的问题。6.1 坑一在循环中误用System.out.print导致格式混乱// 意图打印成一行 “A, B, C” ListString list Arrays.asList(A, B, C); for (String s : list) { System.out.print(s , ); } // 实际输出A, B, C, - 末尾多了一个逗号和空格解决方案使用StringJoiner或Collectors.joining它们能完美处理分隔符。// 方案1: StringJoiner (Java 8) StringJoiner joiner new StringJoiner(, ); for (String s : list) { joiner.add(s); } System.out.println(joiner.toString()); // 输出A, B, C // 方案2: Stream (最简洁) System.out.println(list.stream().collect(Collectors.joining(, )));6.2 坑二打印大型集合导致控制台“刷屏”或内存溢出直接打印一个包含数万甚至数十万对象的List会让控制台瞬间被淹没在IDE中可能导致卡顿甚至触发GC。ListBigObject hugeList fetchHugeListFromDB(); // 假设返回10万条记录 System.out.println(hugeList); // 灾难解决方案打印摘要只打印大小、首尾若干元素。logger.info(“List size: {}, first 3: {}, last 3: {}”, hugeList.size(), hugeList.subList(0, Math.min(3, hugeList.size())), hugeList.subList(Math.max(0, hugeList.size()-3), hugeList.size()));写入文件如果确实需要完整数据将其写入日志文件而不是控制台。Files.write(Paths.get(“/tmp/debug_list.txt”), gson.toJson(hugeList).getBytes());6.3 坑三并发修改异常 (ConcurrentModificationException)这是一个经典陷阱。在遍历集合尤其是使用迭代器或for-each循环其底层也是迭代器时如果尝试直接通过集合的方法如list.add()或list.remove()修改集合就会抛出此异常。ListString list new ArrayList(Arrays.asList(A, B, C)); for (String s : list) { if (“B”.equals(s)) { list.remove(s); // 抛出 ConcurrentModificationException! } }解决方案使用迭代器自身的remove()方法。IteratorString iterator list.iterator(); while (iterator.hasNext()) { String s iterator.next(); if (“B”.equals(s)) { iterator.remove(); // 正确方式 } }使用Java 8 Stream的filter生成一个新集合。ListString newList list.stream() .filter(s - !“B”.equals(s)) .collect(Collectors.toList());使用CopyOnWriteArrayList等并发集合类适用于读多写少的场景。打印本身不会触发此异常但你在调试时可能会在遍历打印的代码附近进行此类修改操作需要格外小心。6.4 坑四对象toString()中的惰性加载或循环引用这是一个更隐蔽的坑。有时为了优化对象的某些字段是惰性加载的比如从数据库按需查询。如果在toString()方法中包含了这些字段的获取那么打印集合就会触发大量的惰性加载查询可能导致性能骤降甚至N1查询问题。class Order { private User user; // 惰性加载的代理对象 Override public String toString() { return “Order{user” user.getName() “}”; // 触发数据库查询 } } // 打印 ListOrder 会导致每个Order都查询一次User解决方案在toString()中避免调用会触发外部操作如数据库查询、网络调用的方法。只包含内存中已有的基本字段或者使用Optional包装。Override public String toString() { return “Order{userId” (user ! null ? user.getId() : “null”) “}”; }循环引用则在使用Gson等序列化库时可能导致栈溢出。例如Parent对象有ListChildChild对象又引用了Parent。Gson在序列化时会无限递归。解决方案是使用Expose注解忽略某些字段或者使用自定义的TypeAdapter。7. 举一反三从“打印”到集合调试的完整工具箱“打印”是调试的起点但不是终点。当你需要更深入地洞察集合数据时应该掌握更多工具。7.1 IDE调试器的“求值表达式”Evaluate Expression这是最强大的“打印”工具。在调试模式下的断点处你可以直接查看Variables窗口中集合的内容IDE通常会友好地渲染。在Watches窗口或Evaluate Expression对话框中输入任何合法的Java表达式例如list.stream().filter(...).count()list.stream().map(...).collect(Collectors.toList())new Gson().toJson(list)结果会实时显示无需修改代码、重新编译和启动。7.2 编写专用的debugPrint()工具方法在你的项目工具类中可以封装一个通用的调试打印方法。public class DebugUtil { private static final Gson GSON new GsonBuilder().setPrettyPrinting().create(); private static final Logger LOG LoggerFactory.getLogger(DebugUtil.class); /** * 以JSON格式打印对象到DEBUG日志仅开发环境生效 */ public static void debugPrintJson(Object obj) { if (LOG.isDebugEnabled()) { // 避免不必要的序列化开销 try { LOG.debug(“\n” GSON.toJson(obj)); } catch (Exception e) { LOG.debug(“Object print failed: “ obj, e); } } } /** * 安全地打印集合限制最大输出条目 */ public static T void safePrintCollection(CollectionT coll, int limit) { if (coll null) { System.out.println(“[null]”); return; } String summary coll.stream() .limit(limit) .map(String::valueOf) .collect(Collectors.joining(“, “, “[“, (coll.size() limit) ? “, … (total: “ coll.size() “)]” : “]”)); System.out.println(summary); } }这样在代码中你可以统一使用DebugUtil.debugPrintJson(myComplexObject)或DebugUtil.safePrintCollection(hugeList, 10)保持调试输出风格一致且安全。7.3 针对复杂集合结构的打印策略对于MapString, ListCustomObject这类多层嵌套的复杂结构直接打印几乎不可读。策略一分层打印。先打印Map的键再针对感兴趣的键打印其对应的List。map.forEach((key, valueList) - { System.out.println(“Key: “ key “, List Size: “ valueList.size()); if (needDetail) { // 根据需要决定是否打印详情 valueList.forEach(obj - System.out.println(“ - “ obj)); } });策略二依赖强大的序列化库。Gson/Jackson可以完美序列化这种嵌套结构为格式化的JSON可读性极佳。这是处理复杂对象图打印的首选。最后我想强调的是“打印”这个动作背后体现的是开发者对数据流的掌控力和调试意识。选择合适的方法不仅能快速解决问题更能让代码在开发和维护阶段保持清晰。从今天起告别[Ljava.lang.Object;…这样的“火星文”让你的集合数据在需要时都能清晰、友好地呈现出来。

相关新闻

国内AI生成式引擎GEO监测系统推荐:跨平台品牌可见度追踪能力横评

国内AI生成式引擎GEO监测系统推荐:跨平台品牌可见度追踪能力横评

品牌在豆包被推荐,在DeepSeek却看不到身影;Kimi的回答里频繁提及,文心一言中却毫无存在感——当6大AI引擎各有各的"脾气",GEO监测系统如何帮品牌看清全局?引言:同一品牌,六个AI引擎&a…

2026/10/20 16:40:00 阅读更多 →
自动化媒体流水线:基于 Whisper 与 LLM 的播客转写与摘要生成

自动化媒体流水线:基于 Whisper 与 LLM 的播客转写与摘要生成

自动化媒体流水线:基于 Whisper 与 LLM 的播客转写与摘要生成 对于独立开发者和长内容创作者而言,将动辄数小时的音频播客转换为带精确定效字幕的 Markdown 文章与社交媒体摘要,需要消耗大量时间。本文设计并实现一套零依赖、本地优先的自动化…

2026/10/22 18:11:34 阅读更多 →
华硕笔记本终极控制神器:G-Helper轻量级替代方案完全指南

华硕笔记本终极控制神器:G-Helper轻量级替代方案完全指南

华硕笔记本终极控制神器:G-Helper轻量级替代方案完全指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook,…

2026/10/22 13:05:53 阅读更多 →

最新新闻

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

日新闻

周新闻

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

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

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

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

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

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

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

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

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在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/22 22:56:44 阅读更多 →
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/22 22:56:12 阅读更多 →
黑夜航拍船只数据集训练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 阅读更多 →