2026年2月

标题不符合实际情况哈,只是吃了一顿饭而已。
背景: https://www.v2ex.com/t/1189224#reply56

上周末和朋友以及妹子约了见面,在杭州运河附近吃了一顿饭,然后在河边公园也走了半小时,从 5 点到晚上 8 点附近左右回家。
一开始见面和我想象中的银行女性不一样,娇小可爱型的,但是人本身是很有规划的,确实是学霸思维。喜欢旅游,自由,经常和妈妈一起出去周末游玩,喜欢南方。
我感觉本人有时不会接话,比如女生喜欢旅游,介绍的时候,很多话都可以接过来,我都没意识去接,还是我朋友有时接过来,比如哪个地方有推荐的,比较好玩的,印象深刻的这种。女生也喜欢看星象,但是可惜我不会,我是水瓶,她是金牛。
本人学习了很多,希望后续有个好结果。

昨天回家后就是常规的我到家了,你呢。聊了几分钟就结束了。

最后,询问各位 v 友,后续我该如何聊天啊,比如今天,我就不知道聊啥了,起来了?早安?这周一到周五要聊天吗,聊啥啊,怎么下周末再约出来?给点建议

🔥 收官倒计时! 2 月 10 日 —— 2 月 21 日快递停发(期间想发货只能发顺丰,巨贵,不推荐也不想发),本次活动后至 2026 年 10 月新米下来前不再大规模售卖(太累了,年后卖稻子减量,只留一小部分给老客户了,卖完截止),错过再等一年!

🌾 五年老店不套路:口碑保障,五常核心产区直供,自家口粮田种植,2025 年 10 月五常稻花香新米现磨现发,保留最纯粹的米香与营养,不馋一粒陈米、假米,吃过的都说好!

活动时间:共 5 天( 2 月 2 日 00:00 - 2 月 6 日 21:00 )
微信:18846163054


福利升级,四重福利无套路囤米,诚意拉满!叠加优惠力度史无前例!中奖率超 25%!

🔥福利一:评论区留言抽奖

  • 一等奖 1 名:40 元无门槛无限叠加优惠券
  • 二等奖 5 名:30 元无门槛无限叠加优惠券
  • 三等奖 10 名:20 元无门槛无限叠加优惠券
  • 四等奖 20 名:10 元无门槛无限叠加优惠券
  • 参与奖:每 4 层抽取 1 人,获取 10 元无门槛无限叠加优惠券

注:
1. 活动期间每天 21:00 使用豆包在 “新增楼层中” 抽取中奖楼层号,公布在评论区
2. 整个活动期间同一用户可中不同等级奖,但同一奖不可重复中,中奖人员若冲突,则顺延。顺延规则:参与奖每 4 个楼层为一组( 1-4 楼、5-8 、9-12 楼…), 组内顺延, 组内均不满足时顺延至下一组;其他奖项直接向下一楼层顺延
3. 若不方便在评论区发送评论,可加我微信,让我代发一条评论进行参与,我统一每日 21:00 前按顺序批量代发,代发后视为参与当日抽奖,中奖后凭微信聊天记录核销即可

🔥福利二:老顾客回馈

所有已下单过的顾客,在本次活动期间自动参与「老客回馈活动」,购米自动 “每 10 斤再减 5 元”

注:
1. 只要是老客户在福利期间来跟我买,不管买多少,不管买给谁,不管买几单,通通可用此老顾客回馈福利
2. 老客户定义:简单点,下过单就算。例:福利期间下过第一单后,再下单就算老客户了
3. 我要忘了,微信提醒我一下

🔥福利三:囤货立减:多买多省不封顶

  • 新客首单:立减 5 元
  • 所有人下单 20 斤及以上:直接再减 10 元
  • 所有人下单 50 斤及以上:直接再减 30 元
  • 所有人下单 100 斤及以上:直接再减 70 元
  • 所有人下单 300 斤及以上:直接再减 255 元
  • 所有人下单 500 斤及以上:直接再减 500 元
  • 再高私聊吧

注:
1. 此福利不可同时享受。例:如果下单 50 斤,仅可享受减 30 元优惠
2. 我要忘了,微信提醒我一下

🔥福利四:邀请有礼:拉好友一起囤

邀请 1 位新好友成功下单:双方各得 10 元无门槛无限叠加优惠券(可立即使用)

注:
1. 好友下单时,需让好友给我「邀请人微信昵称」,好友当前订单可立减 10 元。好友付款成功后,邀请人可获得 10 元无门槛无限叠加优惠券,推荐的每名好友无论下了几单,邀请人只可获得一张 10 元无门槛无限叠加优惠券
2. 邀请历史已经下过单的老客不能参与此福利活动


兑奖方式:中奖后私信微信核销,核销方式:「中奖楼层截图 + 用户账号截图」
兑换有效期:截止至 2026 年 2 月 7 日 24:00
微信:18846163054 或扫下方二维码(别问了,和之前发的是一个微信,手欠改微信号了)

米简介:

  1. 数量:10 斤起售,只支持 10 斤、20 斤、30 斤……售卖方式
  2. 价格:10 元一斤,包邮
  3. 所有米默认全部真空包装,一块 10 斤的米砖,可保存 1 年以上,拆开后也可保存 3 个月以上。若要升级成 2 斤一块的米砖,需增加每 10 斤 2 元
  4. 送礼可加礼盒包装,默认两种礼盒,均为 10 斤装,分为 5 个 2 斤一块的米砖。分别为 10 元礼盒 与 25 元礼盒,可加微信详细了解。选择礼盒包装可免 2 斤一块的米砖升级费用
  5. 个人自家口粮田种植售卖,无营业执照,无线上线下店面,仅保障米的纯正与新鲜,介意个人售卖模式的朋友请谨慎下单
  6. 不接受延迟转账,介意先付款再发货模式的朋友请谨慎下单
    米详情链接: https://v2ex.com/t/1166177?p=1#reply64
    (忽略合作、没有合作)

福利规则补充:

  1. 所有活动均可在同一订单下参与,无套路,只要中了就能用
  2. 米绝对不会有质量问题,所以米不支持退货!!!其他问题可沟通协商,我都卖五年了,诉求合理尽量满足
  3. 所有中奖相关信息会在微信朋友圈发布
  4. 福利大是因为感谢众 V 友的支持,即使亏本也给大家一些福利,不是要跑路,是真累了,看看明年新米下来再卖
  5. 优惠叠加示例
  • 新用户:
    • 中了一等奖、参与奖、邀请一位新好友、享受新客福利(首单立减 5 元),下单 10 斤,共花费:100 - 40 - 10 - 10 - 5 = 35
    • 中了一等奖、参与奖、邀请一位新好友、享受新客福利(首单立减 5 元),下单 20 斤,共花费:200 - 40 - 10 - 10 - 5 - 10 = 125
    • 中了一等奖、参与奖、邀请一位新好友、享受新客福利(首单立减 5 元),下单 50 斤,共花费:500 - 40 - 10 - 10 - 5 - 30 = 405
  • 老用户:
    • 中了一等奖、参与奖、邀请一位新好友、享受老用户福利(每 10 斤减 5 元),下单 10 斤,共花费:100 - 40 - 10 - 10 - 5 = 35
    • 中了一等奖、参与奖、邀请一位新好友、享受老用户福利(每 10 斤减 5 元),下单 20 斤,共花费:200 - 40 - 10 - 10 - 10 - 10 = 120
    • 中了一等奖、参与奖、邀请一位新好友、享受老用户福利(每 10 斤减 5 元),下单 50 斤,共花费:500 - 40 - 10 - 10 - 25 - 30 = 385

数据主权时代:为何选择本地知识库

在信息爆炸的今天,我们每天都在产生和接触海量的知识文件。从PDF报告到Word文档,从产品图片到会议视频,这些数字资产构成了个人和企业智慧的核心。然而,当我们将这些宝贵的数据交给云端服务时,是否曾想过:我们的知识安全吗?

云端困境与本地解决方案

传统的云知识库确实提供了便利,但背后隐藏着数据泄露和AI白嫖的风险。企业核心数据、个人研究成果,这些本应受到严格保护的知识资产,在云端面临着不可控的安全威胁。

访答本地知识库的出现,正是对这一困境的回应。它让知识管理回归本地,所有操作都在用户自己的电脑上进行,不上传任何文件数据。这种设计理念体现了对数据主权的尊重——你的知识,应该由你做主。

深度解析:超越传统搜索

与传统搜索工具不同,访答本地知识库具备深度解析能力。它不仅能处理文本内容,还能理解图片中的文字、视频中的场景、表格中的数据关系。这种多模态的理解能力,使得搜索和问答更加精准和智能。

想象一下:当你在海量文件中寻找某个特定印章出现过的所有合同,或者需要找出所有包含某张产品图片的演示文稿时,传统的关键词搜索往往无能为力。而访答的知识库却能通过深度解析,轻松完成这些复杂任务。

安全与智能的平衡

在人工智能时代,我们既渴望智能化的知识管理,又担忧数据安全。访答本地知识库在这两者间找到了平衡。它支持多种AI模型,包括DeepSeek、Qwen等,但这些模型都在本地运行,确保敏感数据不会外泄。

对于政企单位而言,这种平衡尤为重要。内部培训资料、技术文档、销售数据等核心资产,既需要高效的检索和智能问答,又必须保证绝对的安全。本地知识库正是满足这一需求的理想选择。

未来的知识管理方向

随着数据隐私意识的增强,本地化、可控化的知识管理将成为趋势。访答本地知识库不仅是一个工具,更代表了一种理念:在享受AI带来的便利时,我们不应以牺牲数据安全为代价。

无论是个人用户保护自己的知识产出,还是企业守护核心数据资产,选择本地知识库都是迈向智能化管理的明智之举。在这个数据即资产的时代,保护好我们的知识,就是保护我们的未来。

过去 5 年,累计立 flag 想写博客 200+次,实际产出 10+篇。
并不是写不出内容,而是每次想到写完文章后的流程:找图、截图、压缩、传图床、拿链接、写 YAML 头信息……热情就熄灭了一半。


大家好,我是「轻渡(Ferry)」的开发者。

作为Hexo/Hugo/Jekyll的重度用户,我一直觉得现有的写作流程不仅割裂,而且不够优雅。

VS Code 很强,但对静态博客来说配置太繁琐;
Typora 很好,但对 Front Matter 和图床的集成又差点意思。

所以趁着最近有空,我开发了轻渡(Ferry) —— 一个专注于静态博客写作的“闭环”编辑器。

轻渡 App

一、彻底解决“图片焦虑”(这是我最想安利的功能)

写文章时,图片处理是最断节奏的。
轻渡里,我把这个流程压缩到了极致:

  • 拖拽即发布:直接把图片(或剪贴板内容)拖入编辑器,自动完成压缩->上传->回填 Markdown 链接。
  • 独家图床复活术:针对大家常用的“某浪”图床(wb),内置了 403 防盗链修复方案,不再满屏裂图。
  • AI 水印擦除:如果你常用 Google Gemini 生成配图,编辑器能自动识别并擦除 SynthID 水印,让图片更纯净。
  • 无损/有损压缩:支持压缩开关,在画质和体积间自由切换。

二、可视化 Front Matter ,告别 YAML 缩进噩梦

不管是 Hexo 还是 Hugo ,头部元数据(Front Matter)写错一个空格,整个博客渲染就挂了。
轻渡内置了脚手架:

  • 表单式填写:标题、分类、标签、日期全部可视化操作。
  • 模板引擎:支持自定义字段模板,一键生成标准博文结构。

三、本地优先,Git 友好

  • 数据安全:直接挂载你本地的博客 Git 仓库,文件就在你硬盘里,不经过任何第三方云端存储(除了图床)。
  • 一键同步:写完文章,编辑器右上角直接点“同步”,自动完成 git commit+git push 。

其他功能&细节

  • 多引擎适配:完美支持 Hexo/Hugo/Jekyll 目录结构。
  • 沉浸体验:精心调教的深色/浅色模式(珊瑚紫/VS Code/海洋蓝),基于 CodeMirror ,支持 LaTeX 公式、Emoji 快捷输入。
  • 跨平台:macOS(Intel/Apple Silicon)、Windows 、Ubuntu 全覆盖。
  • AI 输出阅读优化:AI 生成的 Markdown 太长、格式太乱看着累?双击用轻渡打开,自动生成侧边目录,条理清晰,当作本地 Markdown 阅读器也很好用。甚至你只需告知 AI 用轻渡打开报告,它便可以轻松打开。

界面预览

界面预览

(图注: 界面预览)

拖拉上传

(图注: 拖拉上传)

可视化 Front Matter

(图注: 可视化 Front Matter )

阅读模式自动打开目录导航

(图注: 阅读模式自动打开目录导航)

关于送码&下载

目前软件处于初期推广阶段,欢迎 V 友们体验反馈。

下载地址:https://github.com/ferry-editor/ferry/releases

项目主页:https://github.com/ferry-editor/ferry/wiki

🎁 送码福利
为了感谢大家的支持,我准备了一批兑换码。

  • 10 枚 6 个月许可证:直接拿码,先到先得(手慢无)
  • 留言 100%获得 3 个月许可证
    留言格式:「你的博客引擎(Hexo/Hugo...) + 博客地址 + 邮箱(base64 编码)」
    我会在稍后统一发送。

8UA6-VLJH-L3PC-S3HE



LJX9-ZPAQ-FVU2-CTNE



56NF-6WWP-FCRF-PURV



TJBE-AJ96-GUCW-4YXC



5RU5-RDXH-JWN3-LSLW



YMYG-2Y7S-7EGS-8RKL



9ANG-2FRF-RNZB-MMJJ



QVKX-YHAE-DK67-HRKT



ZBMY-3DMW-9G2M-U28V



HZAC-L5WP-VHPX-WEFB

最后

开发不易,功能肯定还有不完善的地方。如果你在使用中遇到 Bug 或有新的需求,欢迎在 GitHub 提 Issue 或直接在帖子下留言,我会持续迭代。

Happy Blogging! ✍️

线程停止

stop方法

stop 方法虽然可以停止线程,但它已经是不建议使用的废弃方法了,这一点可以通过 Thread 类中的源码发现,stop 源码如下:

stop 方法是被 @Deprecated 修饰的不建议使用的过期方法,并且在注释的第一句话就说明了 stop 方法为非安全的方法。

原因在于它在终止一个线程时会强制中断线程的执行,不管run方法是否执行完了,并且还会释放这个线程所持有的所有的锁对象。这一现象会被其它因为请求锁而阻塞的线程看到,使他们继续向下执行。这就会造成数据的不一致。

比如银行转账,从A账户向B账户转账500元,这一过程分为三步,第一步是从A账户中减去500元,假如到这时线程就被stop了,那么这个线程就会释放它所取得锁,然后其他的线程继续执行,这样A账户就莫名其妙的少了500元而B账户也没有收到钱。这就是stop方法的不安全性。

设置标志位

如果线程的run方法中执行的是一个重复执行的循环,可以提供一个标记来控制循环是否继续

class FlagThread extends Thread {
    // 自定义中断标识符
    public volatile boolean isInterrupt = false;
    @Override
    public void run() {
        // 如果为 true -> 中断执行
        while (!isInterrupt) {
            // 业务逻辑处理
        }
    }
}

但自定义中断标识符的问题在于:线程中断的不够及时。因为线程在执行过程中,无法调用 while(!isInterrupt) 来判断线程是否为终止状态,它只能在下一轮运行时判断是否要终止当前线程,所以它中断线程不够及时,比如以下代码:

class InterruptFlag {
    // 自定义的中断标识符
    private static volatile boolean isInterrupt = false;

    public static void main(String[] args) throws InterruptedException {
        // 创建可中断的线程实例
        Thread thread = new Thread(() -> {
            while (!isInterrupt) { // 如果 isInterrupt=true 则停止线程
                System.out.println("thread 执行步骤1:线程即将进入休眠状态");
                try {
                    // 休眠 1s
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("thread 执行步骤2:线程执行了任务");
            }
        });
        thread.start(); // 启动线程

        // 休眠 100ms,等待 thread 线程运行起来
        Thread.sleep(100);
        System.out.println("主线程:试图终止线程 thread");
        // 修改中断标识符,中断线程
        isInterrupt = true;
    }
}

输出:我们期望的是:线程执行了步骤 1 之后,收到中断线程的指令,然后就不要再执行步骤 2 了,但从上述执行结果可以看出,使用自定义中断标识符是没办法实现我们预期的结果的,这就是自定义中断标识符,响应不够及时的问题。

interrupted中断

这种方式需要在while循环中判断使用

使用 interrupt 方法可以给执行任务的线程,发送一个中断线程的指令,它并不直接中断线程,而是发送一个中断线程的信号,把是否正在中断线程的主动权交给代码编写者。相比于自定义中断标识符而然,它能更及时的接收到中断指令,如下代码所示:

public static void main(String[] args) throws InterruptedException {
    // 创建可中断的线程实例
    Thread thread = new Thread(() -> {
        while (!Thread.currentThread().isInterrupted()) {
            System.out.println("thread 执行步骤1:线程即将进入休眠状态");
            try {
                // 休眠 1s
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                System.out.println("thread 线程接收到中断指令,执行中断操作");
                // 中断当前线程的任务执行
                break;
            }
            System.out.println("thread 执行步骤2:线程执行了任务");
        }
    });
    thread.start(); // 启动线程

    // 休眠 100ms,等待 thread 线程运行起来
    Thread.sleep(100);
    System.out.println("主线程:试图终止线程 thread");
    // 修改中断标识符,中断线程
    thread.interrupt();
}

输出:

从上述结果可以看出,线程在接收到中断指令之后,立即中断了线程,相比于上一种自定义中断标识符的方法来说,它能更及时的响应中断线程指令。

利用interruptedException

这种方式 不 需要在while循环中判断使用

如果线程因为执行join(),sleep或者wait()而进入阻塞状态,此时想要停止它,可以调用interrupt(),程序会抛出interruptedException异常。可以利用这个异常终止线程

public void run() {
    System.out.println(this.getName() + "start");
    int i=0;
    //while (!Thread.interrupted()){
    while (!Thread.currentThread().isInterrupted()){
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            //e.printStackTrace();
            System.out.println("中断线程");
            break;//通过识别到异常来中断
        }
        System.out.println(this.getName() + " "+ i);
        i++;
    }
    System.out.println(this.getName() + "end");
}

Executor 的中断操作

调用 Executor 的 shutdown() 方法会等待线程都执行完毕之后再关闭,但是如果调用的是 shutdownNow() 方法,则相当于调用每个线程的 interrupt() 方法。

以下使用 Lambda 创建线程,相当于创建了一个匿名内部线程。

public static void main(String[] args) {
    ExecutorService executorService = Executors.newCachedThreadPool();
    executorService.execute(() -> {
        try {
            Thread.sleep(2000);
            System.out.println("Thread run");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    });
    executorService.shutdownNow();
    System.out.println("Main run");
}
Main run
java.lang.InterruptedException: sleep interrupted
    at java.lang.Thread.sleep(Native Method)
    at ExecutorInterruptExample.lambda$main$0(ExecutorInterruptExample.java:9)
    at ExecutorInterruptExample$$Lambda$1/1160460865.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

如果只想中断 Executor 中的一个线程,可以通过使用 submit() 方法来提交一个线程,它会返回一个 Future<?> 对象,通过调用该对象的 cancel(true) 方法就可以中断线程。

Future<?> future = executorService.submit(() -> {
    // ..
});
future.cancel(true);

线程之间的协作

当多个线程可以一起工作去解决某个问题时,如果某些部分必须在其它部分之前完成,那么就需要对线程进行协调。

join()

案例

在线程中调用另一个线程的 join() 方法,会将当前线程挂起,而不是忙等待,直到目标线程结束。

对于以下代码,虽然 b 线程先启动,但是因为在 b 线程中调用了 a 线程的 join() 方法,b 线程会等待 a 线程结束才继续执行,因此最后能够保证 a 线程的输出先于 b 线程的输出。

public class JoinExample {

    private class A extends Thread {
        @Override
        public void run() {
            System.out.println("A");
        }
    }

    private class B extends Thread {

        private A a;

        B(A a) {
            this.a = a;
        }

        @Override
        public void run() {
            try {
                a.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("B");
        }
    }

    public void test() {
        A a = new A();
        B b = new B(a);
        b.start();
        a.start();
    }
}
public static void main(String[] args) {
    JoinExample example = new JoinExample();
    example.test();
}
A
B

原理

public final synchronized void join(long millis)
throws InterruptedException {
    long base = System.currentTimeMillis();
    long now = 0;

    if (millis < 0) {
        throw new IllegalArgumentException("timeout value is negative");
    }

    if (millis == 0) {
        while (isAlive()) {//检查线程是否存活,只要线程还没结束,主线程就会一直阻塞
            wait(0);//这里的wait调用的本地方法。
        }
    } else {//等待一段指定的时间
        while (isAlive()) {
            long delay = millis - now;
            if (delay <= 0) {
                break;
            }
            wait(delay);
            now = System.currentTimeMillis() - base;
        }
    }
}

从源码来看,实际上join方法就是调用了wait方法来使得线程阻塞,一直到线程结束运行。注意到,join方法前的synchronized修饰符,它相当于:

public final void join(long millis){
 synchronized(this){
        //代码块
    }
}

也就是说加锁的对象即调用这个锁的线程对象,在main()方法中即为t1,持有这个锁的是主线程即main()方法,也就是说代码相当于如下:

//t1.join()前的代码
synchronized (t1) {
 // 调用者线程进入 t1 的 waitSet 等待, 直到 t1 运行结束
 while (t1.isAlive()) {
  t1.wait(0);
 }
}
//t1.join()后的代码

也因此主线程进入等待队列,直到 t1 线程结束。

这里可能会有很多人会有疑惑,为什么t1.wait了,阻塞的不是t1,而是主线程?

实际上,如果要阻塞t1,那么就应该在t1的run 方法里进行阻塞,如在run方法里写wait();(当然还有suspend方法,这属于非Java层面,另说)

而这里的 wait 方法被调用以后,是让持有锁的线程进入等待队列,即主线程调用,因此 t1 线程并不会被阻塞,阻塞的是主线程。

也就是说,join方法是一个同步方法,当主线程调用t1.join()方法时,主线程先获得了t1对象的锁,随后进入方法,调用了t1对象的wait()方法,使主线程进入了t1对象的等待池。

那么问题在于,这里只看到了wait方法,却并没有看到notify或者是notifyAll方法,那么主线程在那里被唤醒呢?

这里参考jvm的代码:

static void ensure_join(JavaThread* thread) {

 Handle threadObj(thread, thread->threadObj());

 ObjectLocker lock(threadObj, thread);

 hread->clear_pending_exception();

 //这一句中的TERMINATED表示这是线程结束以后运行的
 java_lang_Thread::set_thread_status(threadObj(), java_lang_Thread::TERMINATED);

    //这里会清楚native线程,isAlive()方法会返回false
    java_lang_Thread::set_thread(threadObj(), NULL);

 //thread就是当前线程,调用这个方法唤醒等待的线程。
 lock.notify_all(thread);

 hread->clear_pending_exception();

}

其实是jvm虚拟机中存在方法lock.notify_all(thread),在t1线程结束以后,会调用该方法,最后唤醒主线程。

所以简化一下,流程即:

wait() notify() notifyAll()

调用 wait() 使得线程等待某个条件满足,线程在等待时会被挂起,当其他线程的运行使得这个条件满足时,其它线程会调用 notify() 或者 notifyAll() 来唤醒挂起的线程。

它们都属于 Object 的一部分,而不属于 Thread。

只能用在同步方法synchronized或者同步控制块中使用,否则会在运行时抛出 IllegalMonitorStateExeception。

使用 wait() 挂起期间,线程会释放锁。这是因为,如果没有释放锁,那么其它线程就无法进入对象的同步方法或者同步控制块中,那么就无法执行 notify() 或者 notifyAll() 来唤醒挂起的线程,造成死锁。

public class WaitNotifyExample {
    public synchronized void before() {
        System.out.println("before");
        notifyAll();
    }

    public synchronized void after() {
        try {
            wait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("after");
    }
}
public static void main(String[] args) {
    ExecutorService executorService = Executors.newCachedThreadPool();
    WaitNotifyExample example = new WaitNotifyExample();
    executorService.execute(() -> example.after());
    executorService.execute(() -> example.before());
}
before
after

wait() 和 sleep() 的区别

  • wait() 是 Object 的方法,而 sleep() 是 Thread 的静态方法;
  • wait() 会释放锁,sleep() 不会。

await() signal() signalAll()

java.util.concurrent 类库中提供了 Condition 类来实现线程之间的协调,可以在 Condition 上调用 await() 方法使线程等待,其它线程调用 signal() 或 signalAll() 方法唤醒等待的线程。相比于 wait() 这种等待方式,await() 可以指定等待的条件,因此更加灵活。

使用 Lock 来获取一个 Condition 对象。

public class AwaitSignalExample {
    private Lock lock = new ReentrantLock();
    private Condition condition = lock.newCondition();

    public void before() {
        lock.lock();
        try {
            System.out.println("before");
            condition.signalAll();
        } finally {
            lock.unlock();
        }
    }

    public void after() {
        lock.lock();
        try {
            condition.await();
            System.out.println("after");
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            lock.unlock();
        }
    }
}
public static void main(String[] args) {
    ExecutorService executorService = Executors.newCachedThreadPool();
    AwaitSignalExample example = new AwaitSignalExample();
    executorService.execute(() -> example.after());
    executorService.execute(() -> example.before());
}
before
after

线程中的异常处理

Runnable中异常如何被吞掉

Runnable 接口的 run() 方法不允许抛出任何被检查的异常(checked exceptions),只能处理或抛出运行时异常(unchecked exceptions)。当在 run() 方法内发生异常时,如果没有显式地捕获和处理这些异常,它们通常会在执行该 Runnable 的线程中被“吞掉”,即异常会导致线程终止,但不会影响其他线程的执行。

public void uncaughtException(Thread t, Throwable e) {
   if (parent != null) {
        parent.uncaughtException(t, e);
   } else {
        Thread.UncaughtExceptionHandler ueh =
            Thread.getDefaultUncaughtExceptionHandler();
        if (ueh != null) {
            ueh.uncaughtException(t, e);
        } else if (!(e instanceof ThreadDeath)) {
            System.err.print("Exception in thread \""
                             + t.getName() + "\" ");
            e.printStackTrace(System.err);
        }
    }
}

解决方案:

  1. 在run方法中显示的捕获异常

    public void run() {
        try {
            // 可能抛出异常的代码
        } catch (Exception e) {
            // 记录日志或处理异常
            throw new RuntimeException(e);
        }
    }
  2. 为创建的线程设置一个UncaughtExceptionHandler

    Thread t = new Thread(() -> {
       int i = 1 / 0;
    }, "t1");
    t.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
       @Override
       public void uncaughtException(Thread t, Throwable e) {
            logger.error('---', e);
       }
    });
  3. 使用Callable代替RunnableCallablecall方法允许抛出异常,然后可以通过提交给ExecutorService返回的Future来捕获和处理这些异常

    ExecutorService executor = Executors.newFixedThreadPool(1);
    Future<?> future = executor.submit(() -> {
        // 可能抛出异常的代码
    });
    
    try {
        future.get(); // 这里会捕获到Callable中的异常
    } catch (ExecutionException e) {
        Throwable cause = e.getCause(); // 获取原始异常
    }

Callable中异常如何被吞掉

class MyCallable implements Callable<String> {
    @Override
    public String call() throws Exception {
        System.out.println("===> 开始执行callable");
        int i = 1 / 0; //异常的地方
        return "callable的结果";
    }
}

public class CallableAndRunnableTest {

    public static void main(String[] args) {
        System.out.println(" =========> main start ");
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3, 5, 1, TimeUnit.SECONDS, new ArrayBlockingQueue<>(100));
        Future<String> submit = threadPoolExecutor.submit(new MyCallable());
        try {
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(" =========> main end ");
    }
}

运行结果

 =========> main start 
 ===> 开始执行callable
 =========> main end 

源码如下:

public <T> Future<T> submit(Callable<T> task) {
    if (task == null) throw new NullPointerException();
    RunnableFuture<T> ftask = newTaskFor(task);
    execute(ftask);
    return ftask;
}

protected <T> RunnableFuture<T> newTaskFor(Callable<T> callable) {
    return new FutureTask<T>(callable);
}

RunableFuture<T> 是个接口,但是它继承了Runnable 接口 , 实现类是 FutureTask ,因此就需要看下 FutureTask里的run方法 是不是和 构造时的Callable 有关系:

public void run() {
     // 状态不属于初始状态的情况下,不进行后续逻辑处理
     // 那也就是run 方法只能执行一次
     if (state != NEW ||
        !UNSAFE.compareAndSwapObject(this, runnerOffset,
                                   null, Thread.currentThread()))
        return;
    try { 
        Callable<V> c = callable;
        if (c != null && state == NEW) {
            V result;
            // 
            boolean ran;
            try {
                // 执行 Callable 里的 call 方法 ,将结果存入result变量中
                result = c.call();
                ran = true;
            } catch (Throwable ex) {
                result = null;
                ran = false;
                 // call 方法异常 , 记录下异常结果
                setException(ex);
            }
            // call 方法正常执行完毕 ,进行结果存储
            if (ran)
                set(result);
        }
    } finally {
        // runner must be non-null until state is settled to
        // prevent concurrent calls to run()
        runner = null;
        // state must be re-read after nulling runner to prevent
        // leaked interrupts
        int s = state;
        if (s >= INTERRUPTING)
            handlePossibleCancellationInterrupt(s);
    }
}

接下来就要看,如果存储正常结果的set(result)方法 和存储异常结果的 setException(ex) 方法

protected void setException(Throwable t) {
    if (UNSAFE.compareAndSwapInt(this, stateOffset, NEW, COMPLETING)) {
        outcome = t;
        UNSAFE.putOrderedInt(this, stateOffset, EXCEPTIONAL); // final state
        finishCompletion();
    }
}

protected void set(V v) {
    if (UNSAFE.compareAndSwapInt(this, stateOffset, NEW, COMPLETING)) {
        outcome = v;
        UNSAFE.putOrderedInt(this, stateOffset, NORMAL); // final state
        finishCompletion();
    }
}

这两个代码都做了一个操作,就是将正常结果result 和 异常结果 exception 都赋值给了 outcome 这个变量 。

接着再看下future的get方法

//这里有必须看下Task的结束时的状态,如果正常结束,状态为 NORMAL , 异常结果,状态为EXCEPTIONAL 。 看下几个状态的定义,如下:  
private volatile int state;
private static final int NEW          = 0;
private static final int COMPLETING   = 1;
private static final int NORMAL       = 2;
private static final int EXCEPTIONAL  = 3;
private static final int CANCELLED    = 4;
private static final int INTERRUPTING = 5;
private static final int INTERRUPTED  = 6;

/**
* @throws CancellationException {@inheritDoc}
*/
public V get() throws InterruptedException, ExecutionException {
    int s = state;
    // NORMAL(2) 、EXCEPTIONAL(3) 都大于 COMPLETING(1),所以Task结束之后,不会走该if
    if (s <= COMPLETING)
         s = awaitDone(false, 0L);
    // 重点: 返回结果
    return report(s);
}

private V report(int s) throws ExecutionException {
    // 之前正常结果或者异常都存放在Object outcomme 中了
    Object x = outcome;
    // 正常返回
    if (s == NORMAL)
        return (V)x;
    // EXCEPTIONAL(3) 小于 CANCELLED(4) ,所以不会走该if分支,直接后续的throw 抛异常的逻辑
    if (s >= CANCELLED)
        throw new CancellationException();
    // 不等于NORMAL 且 大于等于 CANCELLED  ,  再结合 调用 report(int s ) 之前也做了state 的过滤
    //到这一步,那只能是EXCEPTIONAL(3) 
    throw new ExecutionException((Throwable)x);
}

因此可以通过get方法获取到异常结果

网上甚至有说 40w 的。有人实测过不?

这也太惊人了。中年人折腾路由器 nas ,10 几 w 都要盘算半天,结果一个中央空调不断电就给花出去了。。

在人工智能发展的早期阶段,行业关注的核心始终围绕“效率提升”与“能力涌现”。模型是否更大、生成是否更快、覆盖任务是否更多,是衡量技术进步的主要指标。

但随着 AI 系统逐步具备推理能力、工具调用能力以及对现实业务流程的持续介入,人工智能在生产体系中的角色,正在发生结构性变化: 它不再只是被调用的能力模块,而开始参与结果形成本身。

这一变化,使“责任”成为 AI 技术无法回避的新维度。

一、从“增能工具”到“责任介入”的角色转变

在当前产业实践中,可以清晰地区分人工智能的两个发展阶段。

AI 增能阶段 人工智能作为辅助工具存在,主要承担信息整理、内容生成、流程加速等任务。 在这一阶段,AI 不构成决策闭环,其输出结果由人类审核、采纳并承担最终责任。

AI 责任介入阶段 AI 被授权在限定范围内完成“感知—判断—执行”的连续动作,其决策直接影响业务结果或现实环境。 此时,系统行为的后果需要具备可追溯、可约束、可纠偏的技术与制度支撑。

角色的变化,决定了技术架构与治理方式必须同步升级。

二、推动转型的三股力量

1. 技术确定性的持续提升

随着检索增强、规则约束与推理结构的引入,AI 输出逐渐从“概率表达”转向“证据对齐”。 当模型的决策依据可以被还原、被复盘,其进入高可靠场景的门槛才真正被打开。

2. 交互形态的变化

现实应用中,AI 正从“一次性响应”演化为“持续协作单元”,能够围绕目标拆解任务、调用资源并进行自我修正。 这一趋势在行业中被普遍描述为一种现象性变化——智能体来了,它意味着系统自主性显著提高,也意味着责任边界必须被提前定义。

3. 社会层面的责任诉求

当 AI 被应用于风控、医疗、自动化运维等领域,仅将其视为工具已无法满足风险治理需求。 社会与组织需要明确:当算法参与决策,责任如何定位、如何回溯、如何补偿。

三、责任可承担的工程化路径

在实践中,责任并非抽象概念,而是通过工程结构被具体化。

1. 行为对齐而非语言修饰

对齐的目标不再是输出风格,而是行为选择。 系统需要在多目标冲突中,稳定遵循既定合规规则与业务底线。

2. 决策过程可审计

责任的前提是可追溯。 通过决策日志、上下文记录与关键路径留痕,系统行为能够被复盘和分析,而不是停留在结果层面。

3. 动态约束与独立监管

在复杂流程中,主执行系统与约束系统逐步分离。 当行为触及风险边界时,能够被即时阻断或转交人工介入,避免责任失控。

四、从业实践中的范式转移

这一转型,对组织提出了新的要求:

  • 从准确率导向转向鲁棒性导向:系统必须面对极端场景仍可控
  • 权责对等的流程设计:每一次自动化决策都应对应可复盘的责任记录
  • 接口与协议标准化:确保多系统协作时责任不发生断裂

五、结语:构建可被信任的 AI 系统

2026 年,人工智能的发展重心正在发生位移。 真正具备长期价值的系统,不仅要“能做事”,更要“能被追责、能被纠偏、能被信任”。

从增能走向责任承担,并不是对技术的限制,而是其进入核心生产体系的前提条件。 当 AI 成为可预测、可约束的协作主体,它才能真正融入社会运行结构,释放持续性的生产力价值。

最近好几个平时用 IBKR 的朋友都收到了要求补充资料的邮件,估计离限制不远了。但现在众安搞了一个拼团福利,其中 LV2 级的手续费已经大降了,美股 0.006/股,最低 0.99usd/笔。
现在已经有个团已经 LV2 级了,还能进一小部分人。抓紧上车
1. 先用这个网站注册一个邮箱:chat-tempmail.com
2. 后缀用 @geminipaper.com
3. 打开众安 app 首页-拼团福利,用上面的邮箱进行验证,然后邀请码填 R69A66
活动只到 3.31 日,不知道会不会延期,上车要赶紧

官方写的是 40RPM ,用了很长时间了,确实是。但是从昨天开始,出现了大量的 429 错误。

我能确定我的 RPM 是控制在 40 以内的,怎么个情况 😂

飞牛用户,检查了自己设备,目前没中招,昨晚 0day 漏洞网上很沸腾,我翻遍论坛,没找到官方正式的回复和公告。

社区很多评论在骂的,说这么严重的漏洞应该发布公告。

昨晚发评论互动还能正常发布。今晚想回复个信息,发现都要审核了,无法及时发布。他们好像意识到问题的严重性,好像也没意识面对这个问题造成影响态度的问题。

今天上午发现已经发布更新 1.1.18 。不过我设备升级几次,均无法升级,一直在下载更新,几个小时没反应。

论坛发现发布了一个紧急公告:

近日,飞牛技术团队在安全巡检与用户反馈分析过程中,发现部分设备在公网环境下,存在异常访问风险。受影响设备在提供网络服务的过程中,可能因外部异常流量导致系统及部分应用稳定性受到影响。

针对该异常行为,此前我们已于第一时间推送了 1.1.15 版本安全更新,并向全体用户发出了升级通知,阻断异常行为。

经深入分析,此次攻击行为具有明显针对 fnOS 的定向属性,且采用了多维度复合型攻击手法。过去一周,技术团队已紧急排查大量异常设备,持续追踪木马样本及其变种并展开深度分析。目前,安全团队已完成对该攻击链路的逆向工程,并发布系统安全更新以阻断此类攻击行为。

请您尽快升级至 1.1.18 最新版本,补丁安装完成后无需额外配置,即可有效提升设备安全性及系统稳定性。

我们对本次事件可能造成的不便深表歉意。在追查木马过程中,我们发现了自身代码的一些疏漏。未来,飞牛将持续加大安全投入,定期开展安全**与系统优化,直面大小漏洞,让系统更加健壮。同时,建议在 NAS 设备开放公网访问权限时,优先采用安全访问方式(加密隧道/2FA 验证/开启防火墙等),以进一步降低潜在安全风险。

与此同时,为更好地保障用户安全,飞牛将成立安全快速响应团队,第一时间处理用户反馈的漏洞,筑牢产品安全防线。欢迎广大用户通过官方渠道积极提交安全问题与建议,对于首次有效反馈的漏洞,将提供相应激励。

安全漏洞反馈入口:

https://trim-nas.feishu.cn/share/base/form/shrcnYhRB4ryb9K8Te9GEqeRYYe

安全问题联系邮箱:

[email protected]

感谢每一位用户的理解、耐心与监督。

广州铁刃智造技术有限公司

2026 年 2 月 1 日

去年出行买了机票,结果被多收了 104,实际 390 的机票,平台 494 卖给我,忍不了一点,直接收集材料起诉,前后花了几个月,因为是第一次起诉,很多东西不知道,时间花在材料收集和等待审核(诉讼太多了)。
需要材料:
**双方的服务合同(用户服务协议)及完整订单、平台账号实名信息截图(未显示实名信息只显示绑定手机的,应一并提交该手机号实名认证的证据,如话费发票)、含实名的支付流水、被告身份信息(国家企业信用信息网截图)。 **

需要在对方注册地提起诉讼,我这里是北京,所以直接在北京互联网法院提起诉讼,现在统一到:人民法院在线服务网 https://zxfw.court.gov.cn/zxfw/

image
立案信息

最终和解了,因为对方法务强大,会钻空子,只好拿和解费撤诉了。

原文: https://mp.weixin.qq.com/s/-d2u6Ldy7STv-koO4kk7eg

前情提要:北京联通家宽公网 IPv4+IPv6 ,有一台自建服务器主要用来跑 Minecraft 和一些网页(通过 Cloudflared)

我有些文件(3~10G 每个)要保持可下载的状态,需求量不是很大。我是用 BT 做种+OneDrive ,但 OneDrive 在国内经常直连不上,最近有个朋友说他受不了他用的网盘了老是挂,然后提议拉几个人一起做种。
qbit(图中下载比较慢的是一个香港的 peer ,宽带目前还是正常的)

现在种子互相分享完了来 V 站看了几个用 PT 被限速的例子有点担心,想请教各位大佬有没有更合适的方案适应我的需求,或者如果我这么用的话要注意什么来降低被限速的风险。

懒得看文字有我姐配音版

关于腾讯这波 AI 推广的一点看法

说腾讯最近搞的这波 AI 推广加大撒币。
说实话,我对这条路是持怀疑态度的。

因为它套用的是旧互联网时代的打法,
但现在是 LLM 时代。
逻辑已经变了。

你回想一下以前互联网经济是什么样,
微信、QQ 那时候基本是你能做我也能做。
技术差距其实没那么大,
真正拉开差距的是用户生态。

身边所有人都在用微信,
你不用都不行。
所以你砸钱、发红包、抢用户心智,
在当年,这是有效的。

但问题来了,
这套逻辑放在现在的 AI 上真的还成立吗?


抢到的到底是谁的用户心智?

我们拆开看,
你现在砸钱,真正抢占的是谁的用户心智?

答案其实很简单,
是那些几乎没用过 AI 的人。

他们会觉得回复好厉害,
模型好强,
原来 AI 这么牛。

这部分人你是能打动的,
但你完全打不动的是另一类人。

是我们这种用过很多 AI 工具,
试过更强模型的人。
用过高思考模式,
对回复质量有基本判断力的人。

你这波推广对我们来说,
说实话是负向体验。


模型快,但只剩下“快”

你把这个 DVC 推到我面前,
我一试,确实快。

但除了快呢?
回复质量不行。

就算是现在最顶级的模型,
把思考强度拉满,
输出也只是差强人意,
可用,但谈不上惊艳。

不管是 3 Pro 还是 5.2 的深度思考,
大家最后的评价基本都是一句话。

终于,勉强能用了。

那你这种量化、轻量、跑得飞快的模型,
除了闲聊还能干嘛?

再加上幻觉和稳定性问题,
你会发现你不太敢把它用在重要场景。


大撒币的结果:反向劝退

所以你现在花钱抢的,
只是没吃过好的那一批人。

吃过好的呢?
只会觉得原来腾讯 AI 就这水平。

这不是正向传播,
这是反向劝退。

与其砸钱搞营销,
不如把钱砸在人身上。

Google 能一直大而不老,
靠的是 AI 基建、长期迭代和顶级人才。

先把回复质量拉上去,
再谈用户心智。


被浪费的完美 AI 场景

更离谱的是,
你明明有一个完美的 AI 应用场景。

薅红包的活动,
规则又长又复杂。

这不就是 AI 最适合干的事吗?
总结人话版,算 ROI,提醒风险。

结果不能复制文字,
OCR 也不方便。

这么好的场景不用,
我是真的无语。


最后一句

最后说一句,
人性确实爱占小便宜。

为了 20 块钱,
折腾半小时,还要忍受低质量体验。

这种钱,
本质就是用时间和注意力交智商税。

我知道最好的模型也只是勉强可用,
那更差的模型我干脆连试都不想试。

就这么个道理。


一直没有付费使用 ai 相关的服务,之前 99 美刀一年的 Google AI Pro 没舍得买,等想买的时候优惠活动停止了,就后悔莫及……

今天访问链接 https://one.google.com/about/plans

突然发现有

Google AI Plus (200 GB)

$95.88 US$49.99/年



我感觉挺不错啊,更便宜。于是想了十分钟就订阅了,打算当作主力 ai 服务用了。你们觉得值不值?

最近一段时间一直在折腾 SillyTavern (酒馆),主要是觉得:

本地部署对很多人来说门槛还是偏高

参数、规则、人设这些东西,其实挺适合做成更「即开即用」的形态

所以索性基于 SillyTavern 的思路,自己做了一个 在线版本的网站,算是一个偏实验性质的项目。

目前这个站点主要想解决几件事:

不用本地部署,打开就能体验酒馆式多角色 / 情境对话

保留人设、世界观、规则优先级这些核心玩法

更偏向“内容生成 / 剧情 / 解说脚本”这类使用场景

界面和交互尽量收敛一点,减少新手劝退感
所以现在更想做的是:
👉 找一些真正在用酒馆 / 玩过 SillyTavern 的人来体验一下,看看值不值得继续打磨。

如果你:

用过 SillyTavern / Tavern / 类似工具

对多角色、剧情、长文本生成有兴趣

或者单纯想看看“酒馆做成在线版是啥体验”

欢迎来试试 👉 https://meilin88.com/

(2026.01.18-02.01)🚀 好虫子周刊:DeepSeek V4前瞻、Agent标准确立、音频界面革命

本周关键词: 混合专家 (MoE)、Agent 技能标准、物理 AI、音频首选 (Audio-first)

摘要: 本周是开源界深度复盘与大厂战略转向的关键交汇期。DeepSeek R1 发布周年之际,官方以 86 页超长报告披露了 RL 训练核心机密,并预告 V4 版本将冲击 Claude 代码王座。与此同时,Anthropic 推动的 Agent Skills 规范逐渐成为行业事实标准,OpenAI 亦被传出转向“音频优先”硬件策略。整体趋势显示,AI 正在从“大参数”竞赛转向“高可靠性 Agent”和“低成本推理”的务实阶段。

🚨 核心头条 (Top Stories)

1核心头条

1. DeepSeek R1 报告更新与 V4 预告:开源界的透明化巅峰

  • 发布时间: 01.20
  • 核心亮点: DeepSeek 将 R1 技术报告扩展至 86 页,完整披露了从 Dev1 到 Dev3 的三阶段强化学习(RL)路径。同时预告 V4 版本将于 2 月中旬发布。
  • 技术突破: 详细记录了 MCTS(蒙特卡洛树搜索)在训练中的失败经验,证明了纯 RL 训练即可实现推理能力涌现。V4 将采用更优化的 MoE 架构,侧重软件工程能力。
  • 开源/行业价值: 为全球开发者节省了数亿元的验证算力,奠定了中国开源模型在 Hugging Face 社区的领导地位。

2. Agent Skills 规范确立:智能体从“玩具”走向“工具”

  • 发布时间: 01.26
  • 核心亮点: Anthropic 官方开放 Agent Skills 规范。Moltbot(原 Clawdbot)在 GitHub 狂揽 10 万 Star,成为增长最快的 AI 助手项目。
  • 技术突破: 通过 MCP(Model Context Protocol)将智能体与真实系统连接摩擦降至最低。引入自验证机制,解决了复杂任务下 Agent 频繁遗忘上下文的痛点。
  • 开源/行业价值: 标志着 Agent 开发从碎片化走向标准化,开发者可复用 Vercel 或 Anthropic 提供的技能模块,加速企业级智能体部署。

3. 音频界面革命:OpenAI 战略重心向“声音”偏移

  • 发布时间: 01.30
  • 核心亮点: 社区情报显示 OpenAI 计划在 Q1 发布新一代非 Transformer 架构的音频模型,并与 Jony Ive 合作开发“音频优先”个人设备。
  • 技术突破: 实现真·端到端语音交互,摆脱传统的“语音转文字”中转,延迟大幅降低,支持更细腻的情感表达。
  • 开源/行业价值: 预示着 AI 交互将从屏幕端(Screen-based)转向环境音端(Ambient Audio),为可穿戴设备和智能家居开辟新赛道。

🛠️ GitHub 热门开源项目 (Trending Tools)

2GitHub 热门开源项目

本周 GitHub Star 增长最快、开发者关注度最高的项目精选

Moltbot

  • 一句话介绍: 自托管的“最强 AI 智能助手”,GitHub 增长奇迹。
  • 核心价值: 支持集成 Slack/Discord/Telegram,具备系统级操作权限,重点在于数据完全本地化处理,解决了企业对闭环 AI 的核心焦虑。
  • 项目地址: moltbot/moltbot

🤖 OpenClaw

  • 一句话介绍: 专注解决 Agent 稳定性的开源框架。
  • 核心价值: 针对长流程任务进行了“反馈闭环”优化,大幅降低了智能体在多步推理中的出错率(Hallucination Rate)。
  • 项目地址: pipecat-ai/nemotron-january-2026 (NVIDIA 驱动版)

🎨 HunyuanVideo 1.5

  • 一句话介绍: 腾讯开源的“显卡救星”视频生成模型。
  • 核心价值: 仅需 13.6GB 显存即可运行 720p 视频生成,通过 SSTA 稀疏注意力技术实现了 1.87 倍的生成提速。
  • 项目地址: Tencent/HunyuanVideo

📑 前沿研究与行业风向 (Insights)

3前沿研究与行业风向

  • 物理 AI (Physical AI) 与世界模型: 随着 Boston Dynamics 展示全电动 Atlas 机器人的 RL 训练成果,学术界开始转向“物理层面的智能定义”。LeCun 的 World Model 实验室获得 50 亿美元估值,标志着 AI 正在尝试理解物理世界的逻辑而非单纯的概率拟合。
  • 算力能源瓶颈: 马斯克在达沃斯论坛再次预警:电力供应将成为 2026 年 AI 扩张的最大红利障碍。Vistra 等电力巨头通过收购天然气电厂直接对接 AI 数据中心,能源溢价正在重塑 AI 供应链。

✍️ 编辑结语: 本周我们看到了 AI 领域从“堆参数”到“堆逻辑”的结构性转变。开源社区不再盲目跟风,而是通过透明的技术报告和标准化的接口(如 MCP)构建护城河。下周,请密切关注 DeepSeek V4 的定档消息,这可能彻底重写 2026 年的 Coding Agent 竞争格局。

整理:好虫子周刊编辑部 数据来源:GitHub, arXiv, Hugging Face等

本文由mdnice多平台发布