WWW.YOUINFO.SITE
标签聚合 特定

/tag/特定

LinuxDo 最新话题 · 2026-06-10 16:14:20+08:00 · tech

枚举和注解 枚举 基础知识 枚举是一组常量的集合。枚举属于一种特殊的类,里面只包含一组有限的特定的对象。 其实枚举类是可以通过传统写法自定义的,写法为: 构造器私有化 不提供set方法 在类内部预先初始化好静态的实例,并且对外暴露 代码略,直接学习如何创建真正的枚举。 使用enum关键字来代替class 直接写FALL(“秋天”,“凉爽”),效果上等价于 public static final Season FALL = new Season(“秋天”,“凉爽”); 如果有多个常量对象,使用逗号间隔即可 使用 enum 实现枚举,必须把定义的常量对象写在枚举类的最前面 使用无参构造器时,可以把括号也省略,直接写FALL,举例 FALL, SPRING, SUMMER, WINTER; public class Enum { public static void main(String[] args) { System.out.println(Season.SPRING); } } enum Season{ SPRING("春天","温暖"), SUMMER("夏天","炎热"), FALL("秋天","凉爽"), WINTER("冬天","寒冷"); private String name; private String desc; Season(String name, String desc) { this.name = name; this.desc = desc; } @Override public String toString() { return "Season{" + "name='" + name + '\'' + ", desc='" + desc + '\'' + '}'; } } .java文件可以用 Javac 编译成.class文件,.class文件也可以用 Javap 反编译成字节码文件,通过观察先编译再反编译的结果,可以看到很多隐藏的细节。 对于 Seanon 类,反编译得到的代码如下 Compiled from "Enum.java" final class hspedu.inner.enumer.Season extends java.lang.Enum<hspedu.inner.enumer.Season> { public static final hspedu.inner.enumer.Season SPRING; public static final hspedu.inner.enumer.Season SUMMER; public static final hspedu.inner.enumer.Season FALL; public static final hspedu.inner.enumer.Season WINTER; public static hspedu.inner.enumer.Season[] values(); public static hspedu.inner.enumer.Season valueOf(java.lang.String); public java.lang.String toString(); static {}; } 值得关注的细节有: 枚举类是 final 类型的,因此不可被继承 枚举类默认继承 java.lang.Enum 类,因此不可继承其他类 每一个常量都默认是 public static final 类型的 简单练习 第一题 判断语法正误 enum Gender { BOY, GIRL; } 答案: 语法没有错,相当于一个“没有属性,只含有无参构造器”的枚举类 第二题 判断输出什么 enum Gender2 { BOY, GIRL; } Gender2 boy = Gender2.BOY; Gender2 boy2 = Gender2.BOY; System.out.println(boy); System.out.println(boy2 == boy); 答案: BOY true 分析: 首先,枚举类本质也是类,所以Gender2 boy = Gender2.BOY;这种写法肯定是对的 boy相当于拿到了枚举类里的public static final常量,因此boy和boy2肯定是一样的 System.out.println(boy)相当于调用Gender2的toString方法,但是显然它没有,就去找父类的toString方法,父类是java.lang.Enum(前面有提到) Enum类的成员方法 分别是 name、ordinary、values、valueOf、compareTo方法,建议自己写一写用一用,方法的效果都写在代码里了: public class Enum { public static void main(String[] args) { Season spring = Season.SPRING; // name方法,建议优先使用toString,效果类似 System.out.println(spring.name()); System.out.println(spring); // ordinary方法,输出该枚举对象的序号,从0开始 System.out.println(spring.ordinal()); // values方法,返回所有的枚举对象 Season[] values = Season.values(); for (Season value : values) { System.out.println(value); } // valueOf方法,返回指定名称的枚举对象 Season valueOf = Season.valueOf("FALL"); System.out.println(valueOf); // compareTo方法,比较两个枚举对象,返回它们的序号之差,在这里是spring的序号 - valueOf的序号 System.out.println(spring.compareTo(valueOf)); } } enum Season{ SPRING("春天","温暖"), SUMMER("夏天","炎热"), FALL("秋天","凉爽"), WINTER("冬天","寒冷"); private String name; private String desc; Season(String name, String desc) { this.name = name; this.desc = desc; } } 简单练习2 声明 Week 枚举类,其中包含星期一至星期日的定义; MONDAY, TUESDAY, WEDNESDAY, THURSDAY,FRIDAY, SATURDAY, SUNDAY; 使用 values 返回所有的枚举数组,并遍历,要求打印值为“星期一”而不是“MONDAY” public class Enum { public static void main(String[] args) { Week[] values = Week.values(); for (Week value : values) { System.out.println(value); } } } enum Week{ MONDAY("星期一"), TUESDAY("星期二"), WEDNESDAY("星期三"), THURSDAY("星期四"), FRIDAY("星期五"), SATURDAY("星期六"), SUNDAY("星期日"); private String name; Week(String name) { this.name = name; } @Override public String toString() { return name; } Enum类的接口 Enum类本身已经有了继承关系,因此不能继承其他类 但作为一个类,它仍然可以实现接口 interface Playing { void play(); } enum Music implements Playing { HARD_ROCK, POP, CLASSIC, ROCK, JAZZ; @Override public void play() { } } 注解 最基本的修饰符 最基本的三个修饰符分别是: Override:用来限定某个方法必须重写父类的方法,只能用于方法 SuppressWarnings:抑制编译器的警告 Deprecated:用来表示某个程序元素(比如类或者方法)已经过时 Override 其实对于正确的方法重写来说,加不加这个修饰符都可以。 但如果加了的话,编译器会检查你是否有正确地重写这个方法。如果不正确的话会报错,产生编译错误。 Override的源码如下,从 @Target (ElementType.METHOD) 上可以看出,这个修饰符只能用在方法上。 @interface 修饰的类都是注解类。 @Target(ElementType.METHOD) @Retention(RetentionPolicy.SOURCE) public @interface Override { } 顺带一提, @Target 是修饰注解的注解,也称为元注解。 Deprecated 用 @Deprecated 修饰符修饰的元素,暗示其已经过时了,不推荐再继续使用,但其实可以使用。 @Documented @Retention(RetentionPolicy.RUNTIME) @Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, MODULE, PARAMETER, TYPE}) public @interface Deprecated { String since() default ""; boolean forRemoval() default false; } 从源码可以看出,该修饰符可以修饰方法、字段、包、参数等。 该关键字一般用于 JDK 版本更迭时,给过时的方法打上标注。 SuppressWarnings 用来抑制编译器警告,在 ( ) 中可以填抑制的警告类型。 因为懒得打字,我直接把文档粘在这: 参数名称 作用描述 all 抑制所有警告。 unchecked 抑制与泛型相关的“未经检查的操作”警告,例如在使用原始类型时。 deprecation 抑制使用了 @Deprecated 标记的过时类或方法的警告。 rawtypes 抑制使用了泛型但未指定具体类型的“原始类型”警告。 unused 抑制代码中存在但未被使用的变量、方法或类的警告。 serial 抑制可序列化的类未定义 serialVersionUID 的警告。 null 抑制与空值分析相关的警告(如潜在的空指针)。 cast 抑制与强制类型转换操作相关的警告。 fallthrough 抑制在 switch 语句中缺少 break 而导致“直通”的警告。 finally 抑制 finally 块无法正常返回的警告。 boxing 抑制与自动装箱(boxing)和拆箱(unboxing)操作相关的警告。 static-access 抑制不正确的静态成员访问方式的警告。 dep-ann 抑制使用过时注解的警告。 incomplete-switch 抑制 switch 语句中未覆盖所有枚举常量的警告。 javadoc 抑制与 Javadoc 相关的警告。 synthetic-access 抑制内部类访问未优化的警告。 resource 抑制与资源(如 Closeable )使用相关的警告。 restriction 抑制使用了不建议或禁止引用的警告。 使用示例,代码如下: @SuppressWarnings({"all"}) enum Music implements Playing { HARD_ROCK, POP, CLASSIC, ROCK, JAZZ; @Override public void play() { } } @SuppressWarnings是没有对使用位置限制的,从源码中也可以看出,它没有 @Target 去限制,源码如下: @Retention(RetentionPolicy.SOURCE) public @interface SuppressWarnings { String[] value(); } 元注解 注解的注解,看源码时可能遇到,没那么重要,快速过一下。 四种元注解: Retention:指定注解的作用范围,三种值SOURCE,CLASS,RUNTIME Target:指定注解可以在哪些地方使用 Documented:指定该注解是否会在javadoc体现,即在生成文档的时候,可以看到该注解 Inherited:子类会继承父类注解 这部分我战略性跳过了,稍微不太好理解,也有点深入了。 1 个帖子 - 1 位参与者 阅读完整话题

LinuxDo 最新话题 · 2026-06-05 22:07:05+08:00 · tech

我正准备在 mac 上使用 brew 安装下面这只鼹鼠: github.com GitHub - tw93/Mole: 🐹 Clean, uninstall, analyze, optimize, and monitor... 🐹 Clean, uninstall, analyze, optimize, and monitor your Mac from the terminal. 根据官方文档,我只需要: brew install mole 同时在下面的官网也是可以检索到的: 在 HomeBrew 的官方源上,这没有任何问题: 然而,如果使用了 CunKai 的这个自动化脚本: https://gitee.com/cunkai/HomebrewCN 我选择了中科大镜像或者清华镜像或者阿里云,不知为何,这都将会导致检索不到进而安装不了 mole … 我不觉得中科大镜像和清华镜像同步会很慢,这是为什么呢… 如果事实真是如此,这似乎意味着使用上面的自动化脚本将天然排除一些程序,这可能会在特定情况下给某些软件的安装带来麻烦… 1 个帖子 - 1 位参与者 阅读完整话题

LinuxDo 最新话题 · 2026-06-02 08:37:41+08:00 · tech

针对GB202 GPU架构,受影响的特定型号包括: RTX 6000D BSE (GB202-891) RTX 5090DD (GB202-240) RTX 5090D (GB202-250) 上述GB202 SKU的GPU性能分析(GPU profiling)支持情况将取决于具体的CUDA及相关开发者工具版本: CUDA版本要求 :这些GB202 SKU的GPU性能分析支持自CUDA 13.3版本开始提供。在此之前的CUDA版本(包括13.0、13.1、13.2)均不支持,若在旧版本下使用会导致显示“ERR_NVGPU”错误信息。 Nsight Compute :2025*版本以及2026.1版本不支持;GPU性能分析自2026.2或更高版本开始获得支持。 CUPTI :CUDA 13.0、13.1、13.2版本不支持;GPU性能分析自CUDA 13.3及以上版本开始获得支持,且需要驱动程序版本在R580或更新版本。 Nsight Graphics :2025*版本以及2026.1版本不支持;GPU性能分析自2026.2或更高版本开始获得支持。 Nsight Systems :2025*版本、2026.1版本以及2026.2版本均不支持;GPU性能分析自2026.3或更高版本开始获得支持。 PerfSDK :2025*版本不支持;GPU性能分析自2026.3或更高版本开始获得支持。 Source 1 个帖子 - 1 位参与者 阅读完整话题

v2ex · 2026-05-31 00:32:57+08:00 · tech

创业不要选择会被模型吞噬的方向 如果你在做一个小工具,他在某个特定的场景里实现了 20%的优化,相较于通用模型实现了 15%的性能提升,这似乎是一个看上去还不错的东西。但你应当小心了,因为你所做的所有的改进、努力和工程上的设计,可能会因为模型的一次迭代而被吞噬。 这可能是做 AI 创业最扎心的事实。你在弥补模型能力的不足,但随着模型能力变得越来越强,原有的那些不足变得不复存在了,那么你的产品也就失去了存在的意义和价值。 我觉得所有做 AI 创业的朋友,可能都要记住的一点是,你的竞争对手可能并不只是和你做相同事情的那几家公司,模型厂商有时候才是你最大的竞争对手。怎么在面对模型迭代时保持竞争力,怎么在时刻变化的 AI 浪潮中保证产品不掉队,这是所有创始人从创业第一天开始就需要每时每刻思考的东西。否则,你所有做的一切都可能是白费功夫。 所以我在选择创业方向时,核心便是希望建立一个 A2A 的网络,让你的 Agent 能够有一个地方和别人的 Agent 进行沟通、交流。于是我们做了这款叫做 [连连 AI ] 的小程序。因为有了 Agent 去帮你自动连接和沟通,所以当你有一个需求时,比如我想找有没有适合我做的兼职订单,无需再去找到那个人并花费大量的时间去沟通,而是只需要把需求告诉你的 Agent ,这时候你的 Agent 自动帮你找到相应的人并沟通。 这样一个 A2A 的网络的好处就在于,他不是一个与模型为敌的产品,而是模型能力越强,你的 Agent 能力也就越强,越能够帮你找到合适的人。 但平台类产品的问题在于,你如何进行冷启动获取用户。从我创业这一个多月来的感触,我觉得难,非常难。这会是一个很考验你的运营团队成色的挑战。并且,平台类产品都会具有一些其他的通用问题:需要投入的资金非常之大、变现周期极长等。 但没有一种产品形态是完美的,重要的是找到自己真正喜欢做的事情。希望大家都能有所收获。

v2ex · 2026-05-31 00:21:35+08:00 · tech

创业不要选择会被模型吞噬的方向 如果你在做一个小工具,他在某个特定的场景里实现了 20%的优化,相较于通用模型实现了 15%的性能提升,这似乎是一个看上去还不错的东西。但你应当小心了,因为你所做的所有的改进、努力和工程上的设计,可能会因为模型的一次迭代而被吞噬。 这可能是做 AI 创业最扎心的事实。你在弥补模型能力的不足,但随着模型能力变得越来越强,原有的那些不足变得不复存在了,那么你的产品也就失去了存在的意义和价值。 我觉得所有做 AI 创业的朋友,可能都要记住的一点是,你的竞争对手可能并不只是和你做相同事情的那几家公司,模型厂商有时候才是你最大的竞争对手。怎么在面对模型迭代时保持竞争力,怎么在时刻变化的 AI 浪潮中保证产品不掉队,这是所有创始人从创业第一天开始就需要每时每刻思考的东西。否则,你所有做的一切都可能是白费功夫。 所以我在选择创业方向时,核心便是希望建立一个 A2A 的网络,让你的 Agent 能够有一个地方和别人的 Agent 进行沟通、交流。于是我们做了这款叫做 [连连 AI ] 的小程序。因为有了 Agent 去帮你自动连接和沟通,所以当你有一个需求时,比如我想找有没有适合我做的兼职订单,无需再去找到那个人并花费大量的时间去沟通,而是只需要把需求告诉你的 Agent ,这时候你的 Agent 自动帮你找到相应的人并沟通。 这样一个 A2A 的网络的好处就在于,他不是一个与模型为敌的产品,而是模型能力越强,你的 Agent 能力也就越强,越能够帮你找到合适的人。 但平台类产品的问题在于,你如何进行冷启动获取用户。从我创业这一个多月来的感触,我觉得难,非常难。这会是一个很考验你的运营团队成色的挑战。并且,平台类产品都会具有一些其他的通用问题:需要投入的资金非常之大、变现周期极长等。 但没有一种产品形态是完美的,重要的是找到自己真正喜欢做的事情。希望大家都能有所收获。

v2ex · 2026-05-20 11:12:05+08:00 · tech

背景: 这两天在跟圈子里的朋友聊天,他们正在寻找潜在可以帮助特定行业新建大模型用来预测行业的趋势,风险,交易,交易决策等。 举个简单的例子:某企业是大宗采购国际市场的大豆,但是传统上无法基于全球天气,货运方式选择,地缘政治关系,供应链的管理,做出相对较高正确,较低成本的决策。 这个例子不一定准确,但是的确有这样非常大的需求。 国内的空白:目前国内能做这样模型的非常少,看下来的情况是能做模型的大厂不屑于匹配特定行业,比如字节系,有能力的在专注自己领域继续深耕,且该模型偏向有大宗商品经验的模型生厂商。 目的:可以产出相关有效决策并在最后可以量化绩效。 机会:这种标能做出一个一期都是 500W ,如果能有更多产出和有效性会有更大的空间,1 个小目标预算也能接受。 v2 的大拿多,欢迎留言沟通,如果从纸头计划到能落地会有酬谢。

cnBeta全文版 · 2026-05-14 12:35:37+08:00 · tech

Instagram 今日推出名为 Instants 的新功能,同时上线同名独立应用,主打“以更自发、不过度修饰的照片分享当下瞬间”。 官方将其定位为一种面向朋友的即时分享方式:照片对接收方而言是短暂可见的,但会在用户个人归档中保留最长一年,并可日后作为回顾内容再次分享到限时动态。 Instants 支持好友对内容进行回应和回复,所有回复都会直接进入 Instagram 私信收件箱。 为方便拍摄与发送,Meta 还发布了 Instants“陪伴应用”,提供更快捷的相机入口,目前正面向部分国家和地区在 iOS 与 Android 平台陆续推送。 从形态上看,Instants 实际上是面向特定人群的照片“阅后即焚”分享工具,支持面向密友或互相关注的粉丝发送,一旦对方查看完成,照片即从其视图中消失。 在 Instagram 私信界面中,Instants 以一叠缩略图的形式固定在右下角,方便用户随时查看与使用。 用户在分享 Instant 时可以添加文字说明,而且文字会优先展示,这与限时动态的呈现逻辑有所不同。 不同于 Stories,Instants 不支持进一步编辑和美化,强调内容的即时性与原始状态。 用户可在发送前灵活选择分享对象,如有悔意还可通过“撤回”按钮快速收回刚刚发送的内容。 在 Instants 界面的右上角,用户可以进入个人 Instants 归档,该归档仅对本人可见,用于集中管理过去一段时间内分享过的瞬间照片。 官方表示,此举旨在兼顾“短暂可见”的社交体验与对个人数字记忆的长期保存需求。 查看评论

IT之家 · 2026-05-09 11:15:10+08:00 · tech

IT之家 5 月 9 日消息,在人工智能领域,一个大模型能够准确“复述”特定名词,看似是一项基础能力,却也可能因训练机制的细微偏差而“失灵”。 稀宇科技(MiniMax)今日发布官方技术报告,就旗下 M2 系列模型无法正确输出“马嘉祺”等特定人名一事进行了解答,并宣布已通过全词表合成数据覆盖完成性能修复。 据介绍,该问题的核心在于大模型处理文字的“分词器”(Tokenizer)机制。与传统逐字处理不同,大模型在读写文本时会先将文字切分为若干“词元”(Token)。 在 MiniMax 模型的词表中,“马嘉祺”被切分为“马”和“嘉祺”两个词元。其中,作为一个人名整体,“嘉祺”被合并为一个独立的词元。 IT之家注:大模型训练通常分为两个阶段:预训练阶段接触海量互联网文本,让模型掌握广泛词汇;而后训练(即指令微调)阶段则使用精选对话数据来教会模型如何与人交流。 MiniMax 团队排查发现,在其后训练所使用的对话数据中,含有“嘉祺”一词的样本数量极少。这种数据分布上的稀疏,导致“嘉祺”这一词元在后训练阶段几乎没有得到有效训练。 与此同时,大量高频词元(如工具调用标记、编程符号等)在训练中不断更新其向量参数,持续“挤压”“嘉祺”这类低频词元的向量空间,最终将其推离了原本正确的生成概率区域。当模型需要输出这一名字时,只得退而求其次,选择了发音相近的高频词元,例如“佳琪”或“琪琪”。 ▲ 统计分布检查:对比全词表的 embed_tokens norm 分布,token 190467(“嘉祺”)的向量范数落在正常分布范围内,未出现未训练 token 常见的异常小值的现象,表明该 token 在预训练阶段已被充分学习 ▲ “嘉祺”对应的权重向量在后训练过程中发生了显著偏移,余弦相似度大幅下降且 Norm 变化很大 值得关注的是,这并非孤立个案。为了系统性地评估这一现象的普遍性,MiniMax 团队对模型全部约 20 万个词元进行了参数扫描。 结果发现,约有 4.9% 的词元在模型后训练后发生了显著退化。这些退化的词元大致可分为四类:预训练阶段使用的特殊标记(如代码填充符号)、LaTeX 公式与维基百科源码标记、中文 SEO 垃圾关键词(如“传奇私服”、“无痛人流”等),以及占比最大的日文口语和博客模板表达。 这一发现直接解释了该模型另一个长期存在的疑难问题:在日语对话中偶尔会混入俄语或韩语字符。统计数据显示,日语词元的退化比例高达 29.7%,远超中文(3.9%)和英文(3.5%)等其他语种。这说明,数据稀疏的后果是全局性的 —— 当后训练数据对不同语种的覆盖率不均衡时,模型在生成响应时就可能误入歧途。 ▲ 小语种混淆率实验评测(核心指标,100 次采样,temperature=1.0):分别使用韩语和日语 prompt,统计输出中非目标语言字符的出现率。 在确认根因后,修复思路随之变得清晰:确保每个词元在后训练阶段都能获得最低限度的训练。为此,MiniMax 构造了一份覆盖全词表的合成数据,通过让模型完成“复读”任务,为所有词元建立起生成频率的下限保障。 官方基准数据显示,修复后模型的全词表输出参数稳定度(余弦相似度)最低值已大幅提升至 0.97 以上;同时,日语回答中混入俄文字符的比例由修复前的 47% 降至 1%。 除此之外,MiniMax 团队目前仍在同步探索更多优化方向,包括在指令微调数据中混入预训练语料、针对未覆盖词元定向合成对话样本、以及从源头裁撤词表中业务场景永不启用的特殊标记等。 MiniMax 反思道,这一问题的深层原因在于分词器设计与下游使用场景之间的脱节。毕竟,大模型的分词器通常基于大规模的网络语料训练而成,其中不可避免地包含大量仅出现在特定领域或小众语言中的词元。这些词元在预训练阶段尚能获得充分训练,一旦进入后训练阶段,就会因数据分布差异而失去其生成能力。这起看似简单的个案,最终暴露出一个影响深远的结构性问题:在后训练阶段,团队不仅要保证语义层面的多样性,更需要从底层的统计视角保障词元层面的数据覆盖。

linux.do · 2026-05-06 09:10:07+08:00 · tech

问题的根源:账户特定的会话故障 Gemini 在登录主 Google 帐户之前运行完美。经在多个浏览器甚至隐身模式下测试证实,此现象表明错误并非客户端(浏览器相关)问题,而是源自 Google 服务器,具体与您已登录的帐户会话相关。这是服务器端的一个小故障,导致您的帐户无法与 Gemini 建立正常连接。 方案一:“宝石创造者”重置——一种后门修复方法 最有效也最出人意料的解决方案之一是利用 Gemini 界面访问量较低的部分来强制刷新会话。这种方法被社区成员称为“宝石创造者”重置法,通常可以绕过主登录页面的会话故障。 问题: 主“与 Gemini 聊天”按钮可能会在服务器会话出现故障时卡住。 解决方法: 通过与自定义“Gems”界面交互,强制服务器创建一个新的会话。 “宝石创造者”重置操作步骤: 前往“宝石创建器”链接: 打开浏览器并直接访问该链接 gemini.google.com/gems/create 创建新宝石: 如果页面加载成功,请在“名称”框中输入一个随机名称。 发起聊天: 在右侧的聊天预览窗口中输入“你好”之类的简单消息。 验证解决方案: 如果 Gemini 回复,则您的帐户会话现已“解锁”。然后您可以返回主界面。 gemini.google.com 首页应该可以正常运行。 解决方案 2:必要的 Google 帐户设置检查 除了“Gems Creator”这个变通方法之外,一些后端同步错误还可以通过检查和调整您的 Google 帐户设置来解决。这些检查对于维护一个健康的 Google 帐户至关重要,它会影响所有 Workspace 服务,例如如何在 Google 云端硬盘上查找共享文档以及如何管理 Google Meet 报告。 切换“Gemini 应用活动”: 访问 myactivity.google.com ,尝试关闭“Gemini 应用活动”设置,然后再重新打开。这有时可以将您的帐户活动数据与 Gemini 重新同步。 请确保已设置“姓氏”: 请确认您的 Google 帐号个人资料中已填写“姓氏”。个人资料信息不完整有时会导致意外的服务错误。您可以通过 Google 信息中心工作区 进行检查。 验证年龄/生日设置: 请确认您 Google 帐号中的年龄和生日设置准确完整。年龄限制或未经验证的生日有时会导致您无法访问某些 Google 服务。您可以在 Google 信息中心工作区 管理这些信息。 1 个帖子 - 1 位参与者 阅读完整话题

linux.do · 2026-05-04 06:22:11+08:00 · tech

我的 AI 规则文件有一句话,雷打不动的出现在我全部的项目、全部我用的AI客户端的设置中 这句话是:“如要大规模替换文件中的特定内容,请使用Python3脚本,而不是Powershell。” 原因是因为之前VC的时候AI写的PS替换脚本,他总是把文件搞得只剩下最后一行…因为有Git就没管 直到我维护了一个没Git的项目…然后炸了(还好有备份要不然惨了) 2 个帖子 - 2 位参与者 阅读完整话题