MoreRSS

site iconDeppWang | 德普王修改

男|程序员|爱折腾|工具控|五笔 er|麻将爱好者
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

DeppWang | 德普王的 RSS 预览

AI 写下的那把 Redis 锁

2026-09-08 21:51:22

配套代码:transaction-lock-demo。文中的代码位置都可以直接跳转到 GitHub 查看。

一个具体的技术问题

最近看 AI 写的一段后台代码时,我遇到一个具体、也很容易被忽略的技术问题。

代码里有这样一行:

HjEventDtos.CreateResult result = lockService.inTransaction(
idemKey, () -> {
// 创建活动
// 创建行程
return result;
});

方法名叫 inTransaction,第一眼看起来只是「把操作放进数据库事务」。但继续看它的实现,才发现它先获取了一把 Redis 分布式锁,然后才开启数据库事务:

public <T> T inTransaction(String key, Supplier<T> action) {
RLock lock = redissonClient.getLock("activity:" + key);
lock.lock();
try {
return transactionTemplate.execute(status -> action.get());
} finally {
lock.unlock();
}
}

也就是说,它实际做的是:

Redis 分布式锁
└─ 数据库事务

这把锁不一定有问题。原来的系统是一个后台管理系统,操作人数不多,同一活动很少被多人同时修改。用一把活动级锁,简单,也可能足够安全。

但我还是停了下来:

这段代码是真的需要 Redis 锁,还是 AI 只是习惯性地加了一把「大锁」?

这个后台到底在做什么

这个 demo 模拟一个活动运营后台,里面有几种常见操作:

  • 运营人员创建活动并维护签到、分享等行程,活动和行程必须一起保存。
  • 用户报名时占用「场次 + 区域」的额度,已用人数不能超过总额度。
  • 管理员修改运营人员的权限,但已经停用的权限不能继续修改。
  • 活动产生报名后不能直接删除,删除和报名不能互相绕过。
  • 创建请求可能因为双击或网络重试重复到达,相同请求在 60 秒内只能创建一场活动。

我让 AI 做了一个小实验

为了把这个问题看清楚,我没有继续在原系统里大范围改动,而是抽出一个独立的活动报名后台。然后,我让 AI 针对上面的业务规则,分别给出不同版本:

业务问题 采用的方式
修改一条活动记录 一条原子 UPDATE
同时修改活动和行程 只使用数据库事务
多人抢最后一个名额 条件 UPDATE
修改权限前检查权限状态 事务加精确行锁
删除活动前检查报名记录 事务加活动父记录锁
重复提交创建请求 Redis 请求锁加数据库事务

这六个版本不是为了凑齐六种技术。它们来自六种不同的业务问题。

从几个例子看差别

一条 SQL:不需要为了「安全感」加大锁

修改活动名称和地址时,数据库只需要执行一条更新:

UPDATE activity_event
SET name = ?, address = ?
WHERE id = ? AND deleted = 0;

代码位置:业务方法 updateSingleRowSQL 方法 updateEvent

InnoDB 会自动对命中的行加写锁。这里不需要再用活动级 Redis 锁来证明「这条 SQL 不会被同时执行」。

当然,自动行锁也不是万能的。如果两个请求先读取旧对象,再把完整对象写回,仍然可能出现旧值覆盖。这时应该考虑版本号、字段级更新或 FOR UPDATE

错误情况可以这样发生:

事务 A:读到 name=旧名称、address=旧地址
事务 B:也读到同一份旧对象
事务 A:把 name 改成「技术交流会」,写回 name + address,提交
事务 B:把 address 改成「上海徐汇」,仍把旧 name 一起写回,提交
结果:A 的新名称被 B 覆盖

这里的行锁只保证两次写入不会在同一时刻改同一行,并不能保证 B 写回的对象仍然是最新版本。要避免这种丢更新,可以只更新实际变化的字段,或增加 version 条件。

多张表:事务解决的是共同提交

保存活动时,还要删除旧行程并写入新行程。这里最重要的规则是:

活动更新成功,行程更新也必须成功

用一个数据库事务就可以保证共同提交或共同回滚。不需要因为操作涉及两张表,就顺手再加一把活动级 Redis 锁。

代码位置:事务方法 updateEventAndItinerary替换行程的 SQL

错误情况不一定来自并发,也可能来自中途失败:

操作 A:更新 activity_event,成功并自动提交
操作 A:删除旧行程
操作 A:插入新行程时因为数据错误失败
结果:活动基础信息已经变更,但行程只删了一部分,留下半成品

事务的作用是让这几步一起成功或一起回滚;它不等于自动把不同请求串行化。

额度:把判断和修改放到一起

先查询额度,再在 Java 里加一,容易发生这种情况:

请求 A 查到还剩一个名额
请求 B 也查到还剩一个名额
A 报名成功
B 也报名成功

更直接的写法是:

UPDATE activity_quota
SET used_quota = used_quota + 1
WHERE session_id = ?
AND region_id = ?
AND used_quota < total_quota;

代码位置:额度服务 consume条件更新 SQL

数据库在一条语句里完成判断和修改。Service 只检查受影响行数。这比先加一把活动大锁更贴近真正的业务规则。

如果把判断放在 SQL 外面,两个事务就可能同时通过检查:

事务 A:查询到还剩 1 个名额,暂停
事务 B:也查询到还剩 1 个名额,暂停
事务 A:报名并把 used_quota 加 1,提交
事务 B:也报名并把 used_quota 加 1,提交
结果:两个请求都认为自己成功,实际报名数超过 total_quota

used_quota < total_quota 必须和自增放在同一条条件更新里,不能依赖两次独立操作之间「应该不会撞上」。

需要先读、再检查、再改:精确锁一行

管理员修改权限前,要确认权限仍然有效。这个过程不能被另一个操作插入:

读取权限 → 检查状态 → 修改角色

因此可以在事务中锁住这一条权限:

SELECT id, event_id, employee_id, role_name, status
FROM activity_permission
WHERE id = ?
FOR UPDATE;

代码位置:权限业务方法 changeRoleFOR UPDATE 的查询

这里锁的是一条权限记录,不是整个活动。

如果只是普通查询,可能出现这样的交错:

事务 A:查到权限状态为 ACTIVE,准备改角色
事务 B:把同一条权限改为 DISABLED,提交
事务 A:没有重新检查,继续把角色改成 EDITOR,提交
结果:已经停用的权限仍被修改,A 的检查结果已经过期

FOR UPDATE 让 A 的「读取、检查、修改」成为一个受保护的过程;B 要等 A 结束后才能修改这条权限。

规则跨越多张表:锁一个父记录

删除活动前,需要确认报名表里没有报名记录:

锁活动记录
→ 查询报名记录
→ 没有报名才允许删除

活动记录在这里是父记录和共同互斥点。新增报名也必须先锁同一条活动记录。这样删除和报名才会遵守同一条规则。

代码位置:删除流程 deleteIfNoRegistrations报名流程 register锁活动父记录

如果删除和报名都只使用普通查询,错误交错可能是:

事务 A:查询报名表,发现还没有报名,暂停
事务 B:插入一条报名记录并提交
事务 A:继续把活动标记为已删除并提交
结果:活动已经删除,但报名记录仍然存在,违反「有报名不能删除」

锁住父记录本身还不够,新增报名和删除活动两条路径都必须先锁同一条父记录;只在其中一条路径加锁,规则仍然可能被绕过。

父记录锁的重点不是数据库天然知道「这些表属于一个聚合」,而是所有相关代码共同遵守一个约定。

创建前没有记录:Redis 才有用武之地

活动还没有创建时,没有活动 ID 可以拿来执行 FOR UPDATE。如果两个应用节点同时收到相同创建请求,就可以用「操作人 + 请求内容」生成指纹,让相同请求竞争同一把 Redis 锁。

流程是:

锁外检查结果
→ 获取请求指纹对应的 Redis 锁
→ 锁内再次检查结果
→ 事务中创建活动和行程
→ 保存 60 秒结果
→ 释放锁

代码位置:完整创建流程 create生成请求指纹

这里使用 Redis 锁是因为「创建前没有数据库记录」,而不是因为 Redis 锁比数据库锁更高级。

错误情况有两种常见写法。第一种是完全不加锁:

请求 A:检查 60 秒结果,未找到
请求 B:也检查不到结果
请求 A:创建活动 A,保存结果
请求 B:创建活动 B,保存结果
结果:同一个请求创建了两场活动

第二种是加了锁,却忘了锁内再次检查:

请求 A:拿到锁,创建活动 A,保存结果,释放锁
请求 B:随后拿到锁,但没有再次检查,创建活动 B
结果:锁只让操作排队,没有实现幂等

所以「锁内二次检查」不是重复代码,而是把等待期间已经发生的结果读回来。

后来我对原代码的看法

回头看,原来的活动级 Redis 锁并不能简单地贴上「错误」标签。

对于一个并发量不高的后台系统,它可能是一个简单的工程取舍;但如果同一个活动下的修改、额度和权限都共用这把锁,原本可以并发的操作也会被迫排队。是否保留它,关键还是看它保护的业务规则,以及数据库能不能用更小的范围表达这条规则。

最后

这次只是从一把 Redis 锁开始追问:AI 写出的代码能够运行,还要看得懂它为什么这样设计。掌握这些基本原理,才能更好地判断、修改和使用 AI 写出的代码。

读《万历十五年》:人物、制度与一个王朝的问题

2026-08-30 10:47:11

我原来以为《万历十五年》是一本讲明朝某一年发生了什么事的历史书,或者更直接一点,是一本写万历皇帝的书。

读下来才发现不是这样。

它当然有历史事件,也写了很多真实人物,但读起来更像一篇很长的历史文章。黄仁宇不是把史料一条条摆出来,而是从万历皇帝、张居正、申时行、海瑞、戚继光和李贽几个人身上,写出他自己对明朝制度的理解。人物写得很具体,可读性也很好,但背后其实一直在讲同一个问题:明朝当时的社会已经在变化,治理国家的制度和思想却没有完全跟上。

黄仁宇的经历也让我觉得挺厉害。他早年有从军经历,后来到美国研究明史。《万历十五年》的英文书稿在 1976 年就完成了,最开始还多次被出版社拒绝。最后他把这样一本本来很严肃的明史研究,写得很白话、很通俗,也没有把历史写成简单的忠奸故事。

理解这本书,还要先放回明朝的社会背景里。它仍然是一个以农业为根基的国家:土地、赋税、军饷和基层治理,都绕不开农村和农民。可真正承担国家治理的,已经不是春秋战国时期那种以宗族和名门望族为中心的贵族,而是通过科举进入官场的士大夫文官。文官既是国家建立起来解决问题的人,也是国家最难处理的问题之一。

万历:皇帝也有自己的爱情和无奈

万历是全书最开始写的人物。

在万历之前,正德皇帝曾建豹房、宠用亲信,嘉靖后期又长期不临朝。这些经历使文官更加警惕皇帝脱离礼法和正常政务,也更强调用祖制、名分和道德来约束皇权。豹房不是万历的事,但它是理解后来皇帝与文官关系的一段背景。

他早期并不是完全不理政事。张居正在世时,他接受严格教育,也有一段励精图治的时期。万历初年国库比较充实,边防比较稳定,吏治也有整顿,这些都和张居正的改革以及万历的支持有关。

但后来万历和文官集团的矛盾越来越深,最重要的一件事就是立太子。

万历很宠爱郑贵妃,想立郑贵妃的儿子福王为太子;文官集团则坚持「立长」的原则,要求立皇长子朱常洛。这里面当然有国本、名分和政治稳定的问题,但我觉得也不能只把万历理解成一个任性的皇帝。

书里对这一点写得很直接:「陵墓内的葬室筑有停放梓宫的石床。石床上留出来的位置共有三个,除了皇帝和皇后以外,还有一个位置留给下一代皇帝的生母。」万历目睹这一安排,不禁感慨:他所心爱的女人即使不能在生前成为皇后,在死后也应当陪伴在他的身旁。

这样看,万历坚持抬高郑贵妃和福王的地位,不只是抽象的权力争夺,也和他个人的爱情、死后合葬的愿望有关。皇帝不是一个完全抽象的权力符号,他也有个人感情和私心。

万历后来的无奈,在于他发现自己虽然可以惩罚官员、罢免官员,却很难按照自己的意愿提拔官员,更难绕开文官集团决定立储这样的大事。书里有一种很有意思的描述:皇帝无法挽留群臣不喜欢的大官,却又必须显示自己有能力斥退群臣欣赏的小官。

所以万历后来选择怠政,当然不能免除他的责任,但也能看出皇权和文官集团之间的对抗。他不是没有权力,而是很多权力不能按他想的方式使用。

黄仁宇在写郑氏理解万历时,有一句很关键的话:她看出万历虽然贵为天子,实质上却「既柔且弱,也没有人给他同情和保障」。他不是那种愿意不计代价、以强硬手段把文官集团压下去的皇帝。立储如果继续硬碰硬,牵连的不是一两个官员,而可能是整个官僚体系的站队和清算,甚至演成流血冲突。万历看透自己很难真正扭转这种局面,也不愿把冲突推到不可收拾的程度,于是选择了「无为」和消极抵抗。这个选择并不值得赞同,但它既和制度有关,也和他的个人性格有关。

张居正与申时行:改革和调和

万历之后,书里最重要的就是两位首辅:张居正和申时行。

张居正是一个很有能力的改革者。他推行考成法,整顿官员办事效率;清丈土地,推动一条鞭法;整顿驿站;重用戚继光整顿北方边防。

他晚年还做了一件更大的事:以皇帝名义发布诏书,核实全国耕地,想在这个基础上改革赋税、整理财政。黄仁宇认为,这是张居正执政以来最有胆识的一次尝试;如果他没有突然去世,这项重大措施很可能获得成功。

张居正面对的是明朝财政制度的深层问题。当时国家并不是把税收统一收进国库,再统一支付军饷和各种开支。书里举过一个例子:洪武末年五千名金吾卫军士的军饷,不由国库统一支出,而是指定应天府五千个纳税人,把税米直接送到五千名军士家里。

这样的地方自给和指定摊派,会让军饷、土地税和各地财政被切成很多固定的小块。土地税额长期沿用旧数字,各地实际情况却已经变化;市场和赋役越来越依赖白银,国家的财政管理仍保留了很多实物征收和指定用途的做法。张居正想做的土地核实和赋税改革,就是想处理这些问题。

货币制度也是同一个问题。明朝初年曾发行宝钞,也铸过铜钱,但铜钱不足、纸钞失信等问题始终没有被稳定解决。最后,民间和商业交易越来越依赖碎银。问题不是明朝「没有货币」,而是国家没有建立起一套稳定有效的货币制度和商业法律:社会已经越来越需要货币、信用和契约,政府的管理方式却还主要围绕农业税、实物和固定摊派运行。

高利贷在这样的环境里也很难避免。农民急需用钱时,只能以高利率借贷、抵押田产;一旦无法偿还,田产就会落到债主手里。富户、官僚家庭放债买田,成为农村经济的一环,贫富差距也会进一步扩大。黄仁宇的意思不是简单说富人都错了,而是说没有可靠的货币流通、信贷机制和商业法律,民间信用只能用高利贷这种代价很高的方式维持。

但张居正的问题是,他更多依靠自己的威望、地位和亲信去推动改革。他没有充分认识到,文官集团不只是需要被整顿的行政工具,还是帝国真正的权力来源,甚至可以说是帝国的实际主人。

他在世时,可以用权威压住文官集团;他去世后,原来被压制的力量很快反弹,最后连他本人也被清算。

申时行则是另一种做法。他没有继续像张居正一样强硬改革,而是更多选择调和。

他看到了文官集团的「阴」和「阳」。「阳」是文官通过科举进入仕途,讲正心诚意、仁民爱物,也确实有人愿意为了理想和百姓承担风险;「阴」则是同乡、同年、师生、姻亲之间的关系和私心,官员会形成小团体,互相照顾,甚至官官相护。简单来说,「阳」就是道德仁义,「阴」就是物质利益。

申时行认为,与其把所有人的「阴」都暴露出来,不如尽量提倡他们的「阳」,维持文官之间的合作。这让朝廷短期内还能运转,但也意味着很多问题只是被调和,而没有真正被解决。

张居正不是没有触及真正的问题。相反,黄仁宇认为他的十年首辅生涯,刚刚把问题看清楚:文官集团的道德仁义与物质利益的距离越来越远,找出一个大家都同意的折中办法越来越困难。 张居正虽然精明干练, 但因为突然去世,他也没有能解决这个问题。

海瑞:一股清流与他的局限

海瑞是书里最典型的清官。他清廉、刚直,对自己要求很高,家庭生活却并不幸福。

但黄仁宇写海瑞,并不只是为了歌颂清官。

明朝文官大多通过四书五经进入仕途,接受的是儒家的一套思想。儒家的核心是仁,但还有礼、义和名分。仁是对人的体恤;礼是不同身份之间的规范;义是做事时什么才算合宜;名分则是君臣、父子、兄弟各自应承担的责任。

「君君、臣臣、父父、子子」本来是一种双向的角色伦理,不是简单的下级服从上级。但落实到明朝的治理中,伦理秩序常常会比个人权利、证据和程序更优先。

海瑞尊重法律,甚至会按法律规定的最高限度执行;但在条文不够明确的地方,他又会按自己理解的法律精神和伦理原则来判断。比如处理兄弟财产纠纷时,他有「与其屈兄,宁屈其弟」的倾向。今天看,会觉得应该先看产权和证据;但在海瑞看来,维护长幼名分,也是在维护公正和社会秩序。

这不是说海瑞不公正,而是他理解公平的方式,首先服从于儒家伦理。书里还说,当时的政事更注重体制安定,而不计较对一人一事的绝对公允,牺牲少数人是维持大局的办法。黄仁宇批评的不是仁义道德本身,而是复杂的法律、财产和财政问题,如果主要靠道德判断来处理,就很难做到精确、一致和可复制。

我觉得海瑞还有一个很明显的特点,就是太注重细节。他到南直隶以后,发布的规定甚至会管到公文要使用便宜纸张、文书末尾不许留白、地方宴饮和某些奢侈品要停止。这样的规定能看出他的清廉和认真,但也说明他的治理方式更擅长处理看得见的具体问题,而不是从财政、法律和官僚组织的层面重新设计制度。

更大的冲突出现在土地和高利贷上。南直隶一带富户、官绅和退休官员很多,农民一旦借了高利贷却无力偿还,抵押的田产往往就被债主接管。海瑞下令把因高利贷典当到期而失去的田产归还原主,又追究豪强占田的案件。这不是不许富人拥有土地,而是想纠正借贷和兼并造成的失地。

但他的做法是把大量个案逐一追究,改革来得很急,触及的又是地方官绅、富户和农村信用关系的根本。结果他遭到广泛参劾,最终离任。书里甚至推测,如果他只选择少数有代表性的案件严惩和公开,用「惩一儆百」的方式留下余地,可能反而更有机会做成。

所以,海瑞的清廉和勇气是真实的。他在当时的官场里像一股很难得的清流,也让人看见一个官员愿意认真对待百姓疾苦时,可以做到什么程度。但他的局限也在这里:他的做法更多只能代表海瑞个人,难以成为全体文官都能照着实行的办法。书里写他,不只是写一个清官的可敬,也是在写一个理想主义者进入复杂现实之后的困难。

戚继光:武将的能力,也需要现实条件

戚继光是我比较认可的人物。他在嘉靖时期抗倭,后来又到北方练兵、修筑防御设施和整顿边防,做出了很实际的成绩。

倭患之所以会严重,首先和明朝军户、卫所和补给制度的失效有关。制度本来是为了保证兵员和军饷,后来却变得盘根错节,供应经常不足,旧军也缺少战斗力。倭寇中还混有很多中国人,甚至中国人占多数,因此它不只是外敌问题,也是海防、贸易和军事制度的问题。当时海禁和对海外贸易的严格限制,使许多沿海商人和武装集团没有正常的贸易渠道;他们曾希望用武力迫使朝廷放开贸易,并获得招安和正式身份,但这种可能性后来也被破坏,冲突便越来越激烈。

戚继光能平倭,核心在于他重视军纪、训练和适合实际的战术。他把旧军训练成纪律严明的新军,用长短兵器配合的鸳鸯阵对付倭寇。传说中,他甚至为了严明军纪而杀死自己的儿子;这一细节是否完全可靠可以保留,但也反映了后人对他治军严厉的印象。

他也懂得当时的人情世故,能够争取张居正等人的支持。黄仁宇认为,戚继光的天才在于看准妥协无法避免,并能在技术上调和各种矛盾。他的人情世故不是为了升官发财,而是为了建立新军、保卫国家。

张居正去世后,戚继光失去依靠,被调离、被罢官,晚年贫病交加,甚至医药不备。他有三名妾、五个儿子,却能一直瞒着泼悍的正妻,直到儿子长大成人,夫人都不知道将门有子。这些细节也说明,他不仅是刚毅果敢的军人,也很能处理现实关系。

李贽:看到了问题,但没有完全走出去

最后一章的李贽,是我觉得最复杂的人物。

李贽不喜欢虚伪的礼教,也批评当时僵化的道德观念。他更认可有实际政绩、能让百姓受惠的人,而不只是看一个人的道德名声。他尊重海瑞,但也认为海瑞过于拘泥于传统道德;他很认可张居正和戚继光这种有实际能力、能做事的人。

李贽的个人处境也很复杂。他前半生家境困顿,做低级官员时收入微薄,妻儿一度要靠种田、织布维持生活,两个女儿还在荒年饿死。后来辞官以后,他长期受到高级官僚和地方绅士的资助,生活才比较优裕。

这也解释了为什么他后来会遭到不同层级官员的不同对待。对一些高级官僚来说,他只是一个有怪癖、敢说话的思想家,不一定直接威胁他们;但基层地方官要和当地绅士一起维持风化、教化乡民,李贽公开挑战礼教、又不断刊刻和传播著作,就会被看成对基层治理的直接挑战。

如果李贽只是低调地私下批评,也许不会有后来的结局。问题在于他的名望越来越大,著作一再刊刻,态度又毫不退让。对地方官和绅士来说,这已经不是单纯的个人行为,而是会影响他们维持秩序的公共问题。

他有一种接近个人解放的倾向,但又不能简单把他当成现代意义上的自由主义者。更准确地说,他反对的是把孔子和儒家经典解释成唯一、不可质疑的标准。他公开表示,不应当只按孔子的说法来衡量一切,也批评许多士大夫借道德之名维护自己的地位。这种态度自然会招来士大夫阶层的强烈批判。

但李贽也不是完全反对孔子、完全离开儒家。他仍然重视仁,也仍在儒家问题里思考。这里有一个我觉得重要、但容易说乱的思想点:朱熹的理学讲「天理」,认为事物和人的伦常背后都有应当遵循的道理;所谓「格物」,不是现代实验科学的研究物体,而是通过接触、观察和穷究具体事物,去体会其中的「理」,最后使自己的道德修养更清楚。

王阳明的心学则提出「心即理」。他认为,人不必把「理」完全向外寻找,每个人心中本来就有判断善恶的「良知」;关键是把知道的道理落实到行动里,也就是「知行合一」。朱熹更强调由外在事物去穷理,王阳明更强调从内心唤醒良知,但两人都没有把自然、现实问题和伦理道德彻底分开。

这就是黄仁宇所说的一元宇宙观所带来的影响:宇宙的道理、现实中的事物和人的道德,被看成能够互相贯通的一套东西。它能给人一种整体的解释,但面对财政、法律、产权和商业这些很具体的问题时,也容易先用道德语言来判断,而不容易把事实、规则和价值分别处理。李贽同样受这种传统影响,常常把具体和抽象放在一起谈:他看见了现实社会的问题,却没有完全走出传统框架,建立另一套能解释和处理这些问题的制度语言。

李贽提出「文极必开动乱之机,由乱复归于治,有待于下一代创业之君弃文就质」。这里的「文」不只是文化,而是礼法、名分和政治形式越来越繁复;「质」是更朴实、更直接、更有实际力量的状态。

黄仁宇对「文极」的解释更具体:社会物质文明,也就是李贽所说的「文」,不断向前发展,而国家的法律和组织机构不能随之改进,就势必发生动乱。它不只是礼法形式太多,也包括社会经济的发展超过了文官制度呆板的管制力量。

李贽最后仍然只能在传统的治乱循环中寻找答案。这也是黄仁宇称他为「自相冲突的哲学家」的原因:他比很多人更早看见社会和制度的问题,也敢于挑战僵化的标准,但他能使用的思想语言仍然主要来自他想突破的传统。

最后一点想法

读完这本书,我觉得不能简单用今天的眼光去否定书里的这些人物。

他们都有局限,但他们也都是当时很优秀的人。张居正的改革、戚继光的战功、申时行对政局的维持、李贽对思想的挑战,都是真实的成就。

《万历十五年》让我看到,个人会被时代、制度和思想限制,但个人也不是完全没有作用。一个人很难凭自己的力量改变整个时代,但仍然可以在自己的位置上,把能做的事情做到最好。

对普通人来说,可能也不需要成为张居正或戚继光。找到自己愿意投入、也能够发挥的方向,在现实条件允许的范围内尽量实现自己的价值,我觉得就已经很不容易了。

推荐阅读《万历十五年》。

《大空头》里的金融术语与个人理解

2026-08-29 17:37:25

看完《大空头》以后,我原本以为 2008 年金融危机的逻辑很简单:美国人借了太多房贷,还不上,于是房价下跌,银行就出问题了。

但电影真正讲的不是一笔笔房贷本身,而是这些房贷后来被华尔街不断打包、出售、再打包,以及在上面反复下注。危机的核心,是大量低质量的次级房贷被证券化,并通过 MBS、CDO 和衍生品扩散到整个金融系统。最开始只是少数人还不起房贷,为什么会变成全球金融危机?我把自己看电影时想问的几个问题,按这条链路重新整理了一下。

房贷怎么会变成投资产品

普通人的理解里,房贷就是我向银行借钱,以后每个月慢慢还。

但在美国,贷款机构放出房贷后,并不一定会一直拿在自己手里。它可以把一批房贷卖给投行或证券化机构。后者把成千上万笔房贷放进一个池子,按未来月供能够产生的现金流,发行一种证券,这就是 MBS。

MBS 全称是 Mortgage-Backed Security,中文通常叫「住房抵押贷款支持证券」。MBS 的基础资产是房贷,里面既可以是优质房贷,也可以是次级房贷,或者两者混合。《大空头》关注的,主要是以次级房贷为主、风险更高的 MBS。

这时,投资者买到的不是某个人的一套房,而是很多人未来偿还房贷形成的一部分现金流。购房者按月还款,钱会沿着这条链路流向 MBS 的持有人。

购房者 → 贷款机构 → 投行或证券化机构 → MBS 投资者

从这一步开始,房贷就不只是银行和购房者之间的事了,它变成了一种可以卖给资本市场的产品。

次级房贷为什么会成为危机的风险源

次级房贷并不等于「诈骗贷款」,也不是金融危机之后才出现的东西。它只是房贷中的一种,并不等于所有房贷,也不等于所有 MBS。

它本质上是提供给信用记录较弱、收入不稳定、首付较少或负债较高人群的房贷。这类人不一定完全没有还款能力,只是违约风险更高。因此,次级房贷通常利率更高,条款也可能更危险。

危机前常见的一种设计,是前两年月供很低,之后利率重设,月供突然上升。只要房价一直上涨,借款人还可以卖房或重新贷款,看起来不会出大事。但一旦房价停涨甚至下跌,很多人既卖不掉房,也无法再融资,月供又到了更高的阶段,违约就会集中发生。

所以问题不只是「有人借了钱」,而是当时大量房贷根本没有严格核实借款人的长期还款能力。之后,这些风险较高的房贷先被打包成 MBS,相关 MBS 的风险层级又被装入 CDO,最终才扩散为金融系统的问题。

银行卖出的到底是什么,MBS 投资者又赚什么

银行卖出的不是房子,也不是一笔已经放出的贷款现金本身,而是未来向借款人收取本金和利息的权利。

例如,银行已经向很多购房者放出了总计一千万元的房贷。按照合同,借款人会在未来 20 年或 30 年陆续还回本金和利息。银行不想慢慢等这几十年,于是可以把这批房贷的收款权,以按当前价值折算的价格卖给证券化机构。

证券化机构再用投资者的钱买下这批房贷,并发行 MBS。假如我是基金经理,买入 MBS,本质上就是拿今天的资金,换取未来由很多购房者按月偿还的本金和利息。银行提前回笼现金后,又可以继续发放新的房贷;而 MBS 投资者则获得后续的收款权。

可以这样理解:

MBS 投资者的钱 → 证券化实体 → 银行回笼资金

购房者每月还款 → 证券化实体 → MBS 投资者

这里容易误解的一点是:如果一批房贷本金是一千万元,未来 30 年预计总共还回一千五百万元,投资者并不是简单地「花一千二百万,稳赚三百万」。一千五百万元里,有相当一部分是在慢慢拿回最初投入的本金;剩余部分才是利息收益,而且它要分很多年才能拿到。

投资者还要承担借款人违约、提前还款、市场利率变化,以及管理和证券化费用等风险。因此,MBS 本来是一种长期固定收益产品,收益通常不算特别高。危机前真正的问题是,很多人把它当成了高收益、低风险的产品,却低估了底层房贷的质量。

中国也有 MBS 吗

中国也有。中国通常把住宅类 MBS 称为 RMBS,即「个人住房抵押贷款资产支持证券「。

它的基本逻辑和前面说的一样:银行把一批个人房贷转入信托或证券化实体,再以这批房贷未来产生的本金和利息作为基础,发行证券给投资者。购房者仍然按原来的房贷合同还款,现金流最终用于支付 RMBS 投资者。

但中国的 RMBS 与危机前美国的环境并不完全一样。它主要在银行间市场发行,买家通常是银行、保险公司、基金等机构,普通人一般不能像买股票一样直接购买;整体证券化规模也明显低于当年美国。更重要的是,中国并没有形成当年美国那种大规模「次级房贷—CDO—合成 CDO」层层加杠杆、反复下注的完整链条。

所以,MBS 这种工具本身并不必然导致金融危机。真正需要警惕的,仍然是底层贷款质量、风险披露、机构杠杆,以及风险是否被复杂产品不断隐藏和放大。

CDO 不是一家公司,而是第二次打包

我一开始听到「CDO 买入 MBS」时,还以为 CDO 是某个金融机构。其实不是。

CDO 是 Collateralized Debt Obligation,通常译为「担保债务凭证」。它是一种证券产品,不是公司。更准确的说法应该是:投行或 CDO 管理人买入一些 MBS 中风险较高、较难出售的部分,再放进一个新的资产池里,重新打包、重新分层,然后发行 CDO 卖出去。

投行主要负责搭建产品结构、协调评级、销售给机构客户;CDO 管理人通常是资产管理公司的人,负责按规则挑选和管理里面放哪些资产。两者可以合作,也可能属于同一个大金融集团,但角色并不相同。

购房者 → 房贷 → MBS → CDO → 机构投资者

CDO 的危险不在于它凭空制造了更多真实房贷,而在于它让原本风险较高、难卖出去的 MBS 部分也找到了买家。只要有人愿意买 CDO,投行就愿意做更多 CDO;只要投行愿意继续买房贷,贷款机构就有动力继续放更多房贷,甚至把标准越放越松。

普通人的钱有没有参与进来

有,只是大多数普通人不会像买股票、ETF 一样,直接在券商 App 上买 CDO。

当时 CDO 的主要买家是银行、保险公司、养老金、资产管理机构和对冲基金。普通人的钱可能通过养老基金、共同基金或保险保费,间接流进这些机构,再由这些机构购买 MBS 或 CDO。

所以,这并不是一个只发生在华尔街高楼里的游戏。很多普通人以为自己持有的是高评级、收益不错的基金或保险资产,但底层可能已经混进了越来越多质量很差的房贷。

这也是为什么评级机构那么重要。标普、穆迪、惠誉等机构给复杂的房贷证券和 CDO 打出高评级,机构投资者才更愿意买。问题是评级机构采用「发行人付费」模式:需要卖产品的投行向评级机构付钱。这种关系天然存在利益冲突。

CDS:不是房贷本身,而是押注房贷会不会违约

CDS 是 Credit Default Swap,中文叫「信用违约互换」。它可以理解成一份针对债券违约的保险合约:买方持续付保费,如果相关债券违约,卖方就需要赔付。

电影里的迈克尔·伯里最早发现,许多次级房贷证券在优惠利率结束后很可能会大规模违约。他没有发明 CDS,CDS 在 1990 年代就已经存在;但当时市场上几乎没有专门针对次级房贷证券的 CDS。

于是他逐家去找华尔街银行,请它们为具体的房贷证券制作 CDS。最早愿意和他成交的是德意志银行,后来高盛等机构也加入。他买入的约十三亿美元 CDS,是名义金额,不是一次性支付十三亿美元现金;他付的是持续保费,换取房贷证券崩盘时的赔付权。

马克·鲍姆那条线也是类似的逻辑。他是摩根士丹利旗下 FrontPoint 的基金经理,通过德意志银行交易员贾里德·维内特接触到 CDS,并用它做空房贷证券。

赌对了以后,为什么还要卖出 CDS

电影里的三条做空线,最后都没有无限期地持有 CDS。乍看之下,这很矛盾:既然房贷市场还会继续崩,CDS 理论上还会继续升值,为什么不一直拿着?

原因是 CDS 不是自动到账的奖金,而是一份由银行承担赔付义务的合约。房贷证券越坏,手里的 CDS 越值钱;但金融危机越严重,卖出 CDS 的银行也越可能倒闭或无力赔付。到那时,基金即使账面上赚了很多,也可能只能作为债权人排队等待清算,未必能及时、足额拿到钱。

查理和杰米在本·里克特的提醒下选择平仓,就是担心「赌对了,却拿不到赔偿」。迈克尔·伯里长期承受投资人催赎和持续支付保费的压力,最后也需要把账面收益兑现。马克·鲍姆一开始最不愿卖,因为他认为银行还在压低 CDS 的报价,真实风险还没有完全反映出来;同时,他也不愿意让华尔街轻易卸下赔付责任。

但马克最终也必须卖出。因为他管理的是客户的钱,不能为了再多赚一点,承担交易对手先倒下、利润无法兑现的风险。对他们来说,卖出并不是认为房贷市场会好转,而是把已经足够大的账面利润换成真正可以拿到的现金。

为什么一笔房贷会引出远超本金的损失

这里需要区分普通 CDO 和合成 CDO。

普通 CDO 主要买入真实存在的 MBS,或者其中不同风险层级的债券,再重新打包、分层并卖给投资者。它做的是「把真实房贷风险再包装」。

合成 CDO 则主要不买真实的 MBS,而是把针对 MBS 的 CDS 合约放进去。CDS 让没有持有那批房贷证券的机构,也可以押注它会不会违约;合成 CDO 再把大量这类 CDS 赌注打包、分层、销售给更多机构。

所以,CDS 是让同一份房贷风险能够被反复下注的基础;合成 CDO 则把这些下注再包装成新的产品,进一步扩大参与者和风险敞口。

比如,一批真实房贷的本金可能只有一千万美元,但许多机构可以围绕它买卖 CDS。另一些机构再把这些 CDS 组合成合成 CDO。这样,真正发生的房贷损失或许只是其中一部分,但金融系统里围绕这批房贷产生的赔付义务,可能远远超过最初的房贷本金。

这就是电影里「一批坏房贷,最后烧掉整个系统」的意思。最底层房贷违约是火源,层层证券化和衍生品交易则让火蔓延到更多银行、基金和保险公司。

查理和杰米为什么能通过期权赚钱

查理·盖勒和杰米·希普利的基金合伙人。他们早期的思路,是寻找别人不愿碰、价格极低、被市场忽略的机会。

他们常用的工具是期权。期权不是股票,而是在未来某个时间、按约定价格买入或卖出股票的权利。

如果直接买股票,股票从 100 元涨到 130 元,你每股赚 30 元;但如果只花很少的钱买一份看涨期权,股票大涨时,期权的百分比涨幅可能更大。反过来,如果股票没有涨到预期价格,或者涨得太晚,期权可能到期归零。

所以期权和直接买股票的区别是:成本更低、杠杆更高、风险更集中,而且有到期日。持有期权也不等于持有公司股票,没有分红和投票权。

查理和杰米买的不是员工期权,也不是末日期权,而是公开市场上被低估的长期机会。他们用小成本换取大收益的可能性,判断错了主要亏掉权利金。后来做空房贷时,他们把同样的思路用到了 CDS 上:用有限的成本,去押注一个大多数人还没有认真面对的风险。

这种「寻找被市场忽视的冷门个股期权」的思路,在中国内地很难直接复制。美国有大量个股期权,连小公司和冷门公司的股票也可能有不同到期日、不同执行价格的期权;而中国公开市场的期权主要集中在 ETF、股指和商品上,能选择的个股期权非常少,流动性也更受限制。

因此,中国投资者理论上也可以通过 ETF、指数或商品期权,用较小成本押注某个被市场忽略的方向,但很难像查理和杰米一样,专门在大量冷门公司的长期个股期权中寻找机会。期权本身也有较高的适当性门槛和风险,不是普通股票账户开户后就能直接交易。

银行、投行、券商、交易所分别在做什么

《大空头》里出现了德意志银行、高盛、摩根士丹利、美国银行、摩根大通等机构。它们常常同时有很多身份,所以容易混。

商业银行主要吸收存款、发放房贷和企业贷款;投资银行主要做证券发行、并购、交易和复杂金融产品。今天很多大型金融集团两种业务都有。例如摩根大通、美国银行、花旗、德意志银行都属于综合性金融集团;高盛和摩根士丹利历史上更偏投资银行,但后来也有银行和财富管理业务。

券商则是帮助普通人开户和下单的机构,例如盈透、E*TRADE、Merrill Edge。纳斯达克和纽约证券交易所则是交易所,提供股票上市和交易撮合的市场,并不是投行。

普通投资者点下买入按钮后,订单大多由系统自动发送到交易所、电子交易平台或做市商撮合成交,并不需要人工交易员一笔一笔喊价。交易员现在更多处理大宗交易、机构订单和复杂衍生品。

最后谁付出了代价

危机爆发后,雷曼兄弟破产,贝尔斯登被摩根大通收购,美林被美国银行收购。AIG 因为卖出大量 CDS、面临巨大赔付压力而需要救助。

但许多大型金融机构仍然存活下来,甚至因为危机中的收购变得更大。危机期间的财政部长亨利·保尔森和美联储主席本·伯南克,也没有受到刑事处罚。电影最后的讽刺就在这里:造成严重后果的系统依然存在,而真正承担刑事责任的顶层人物很少。

片尾提到 BTO,也就是 Bespoke Tranche Opportunity,中文可以叫「定制分层机会」。它不是政府政策,而是一种重新按客户需求切分信用风险的复杂产品。电影用它表达的意思很直接:CDO 这类复杂风险产品并没有真正消失,很多时候只是换了一个更好听的名字。

最后

看完《大空头》,我觉得最可怕的不是某一个金融产品有多复杂,而是每个环节都能从继续做更多交易中赚钱。

贷款机构想多放贷款,投行想多做证券,评级机构想多拿评级费,机构投资者想拿更高收益。每个人都在自己的环节里认为风险可以被转移给下一个人,但房贷真正能不能还上,并不会因为被包装成更复杂的名字而改变。

当最底层的借款人无法继续还钱时,所有建立在这些还款之上的「安全资产」都会一起失去支撑。这大概就是《大空头》让我理解到的 2008 年金融危机。

另外一个让我印象很深的点,是要相信数据和底层事实,而不是只相信市场共识。迈克尔·伯里读的是每一批房贷证券的说明书和借款人还款条件;贾里德·维内特所在的德意志银行团队,也通过数据和模型看到次级房贷的风险正在累积。市场当时普遍相信房价不会持续下跌,但他们看到的是优惠利率结束、月供上升、借款人还款能力不足这些具体事实。

数据当然不会自动给出答案,模型也可能出错。但当所有人都在重复同一种乐观说法时,回到基础数据、现金流和真实还款能力,至少能避免只因为「大家都这么认为」而忽视风险。

又看到一篇关于大空头原型「伯里」的文章:《大空头》原型伯里加码做空AI,称「终结已开始」。它可以成为一个提醒:AI 可能是一项长期重要的技术趋势,却不代表所有 AI 相关公司的价格都一定合理。投资 AI 时代的公司时,也应该把「技术前景很好」和「现在的估值是否过高」分开看,回到收入、利润、现金流、竞争格局和价格本身,而不是因为市场情绪很热,就默认它会一直上涨。

一副牌的惯蛋玩法

2026-08-22 17:52:31

大侄子来到我家过暑假,我想提升一下他的逻辑思维能力,所以就一起打扑克。

打扑克的话,现在我们比较常玩的是「干瞪眼」,这是最开始只有五张牌的这种玩法,看谁先出完。但是这种玩法相对简单一点。

稍微复杂点的就是「斗地主」,但是只能三个人玩。我们有四个人,这种不太适合大家一起玩。

所以我想四个人怎么一起玩?开始是一起打那个「跑得快」,「跑得快」也有四个人玩法,通过随机叫牌组队,输了抽牌加惩罚,但是容易玩腻。

我发现「掼蛋」的这种玩法挺适合四个人玩,有升级戴帽的概念,固定搭配,考验配合,又有一些成就感。但是因为他的手比较小,拿两副牌的话拿不下。另外他才十岁,所以这个逻辑思维能力还不是很好。

所以我就想能不能用一副牌来玩「掼蛋」。我自己就「创造」了一种一副牌来玩「掼蛋」的方法,是基于两副牌的规则改编过来的。

两副牌的「掼蛋」不像「双扣」分颜色,更像「斗地主」。它的区别就是说:

  • 它是四个人玩,增加了一个队友的概念。

  • 默认最小的牌是 2;A 可以组成顺子,可以出 A2345。

  • 它的牌型比较固定,比如说它顺子只能出五个;如果连对的板子,它就只能出三对(木板)。

  • 增加了另外的规则:飞机不能带牌,只能出飞机(钢板)。

  • 增加了一张级牌,小于王,另外级牌逢人配可以当除王以外任意牌、任意颜色的牌。

  • 引入了同花顺炸弹,炸弹更多。

    一副牌的「掼蛋」,因为默认只有 54 张牌,所以说我加了两个王,一大一小,所以就是四个王。这样的话每个人 14 张牌。炸弹也会多一点,可以增强趣味性。

在牌型这边的话,因为只有一副牌,所以规定顺子只能出三个。三个的就是炸弹。「钢板」和「木板」合二为一,变成了两连对,不能出三连对。可以三带一,只能三带一。

  • 牌型:单牌、对牌、三带一、三张的顺子、三张的同花顺、连对(例:2233)、炸弹(三张及三张以上相同的牌)

  • 牌型大小:四王 > 三王 > 五张炸弹(逢人配) > 两王(两大王 > 两小王) > 四张炸弹 > 三张同花顺 >三张炸弹 > 其它牌型

    除了这个牌型和牌型大小有区别以外,其他的和两副牌的掼蛋都一样。

虽然「双扣」也有一副牌的玩法,名字叫「升级」,但是因为牌比较少,像组成不了对子,所以说我觉得还是没有一副牌的掼蛋好玩。一副牌的掼蛋影响不大,三个就能当炸弹,三个就能出。

事实证明这种一副牌的掼蛋还是挺好玩的,也比较适合锻炼小朋友的逻辑思维能力,趣味性也有。 也不容易玩腻。

电信宽带携号转网到联通宽带

2026-08-05 23:22:49

01 为什么转

主要是因为价格与动态 IPv4 公网 IP。

我原来用的是电信融合宽带,99 元一个月,300M 的宽带,但是只有 20G 流量。

之前给我装电信宽带的师傅后来跳到移动了,上个月他问我合约期到了没有,要不要换移动宽带。我这边是不想换移动宽带的,因为移动宽带口碑太差了。我就查了我的合约期,了解到我这个宽带合约期确实要到期了。

我就问电信合约到期之后能不能降费,电信这边并不给我降。

我就了解了一下其他宽带,联通这边 79 元一个月,是 1000 兆宽带,其实宽带速度我这边并不是太 care,因为正常来说,下载速度更多地取决于服务商的速度,而不是宽带的速度,基本上都跑不满。

除此之外,它还有 100G 全国不限速流量,而且可以开四张副卡(加 1 张副卡加 1 元的费用)。这样家里面的人也可以一起共用这个流量,可以给家里面省下一些流量费用。

电信 99 元的融合套餐,最多只能加两张副卡。电信其实也可以加 1 元加 10G 流量,最多加 30 G,但是它总的也只有相当于 50G 的流量,而且好像副卡加的流量好像只能副卡使用,不是共用的。

联通还有一个优势,就是 79 元以上的套餐可以赠送一个动态 IPv4 公网 IP。

其实上个月的时候,联通还有一个 59 元的套餐,70G 流量、500M 宽带。但是到了这个月,这个套餐就没有了。我问了一下宽带安装师傅,他说是因为联通被电信投诉,所以这个套餐停了。我也不知道是不是真的,但至少现在已经办不了这个 59 元的宽带了。

02 我最担心的是 VPS 线路

如果只是看价格和动态 IPv4 公网 IP,联通这个套餐确实挺有吸引力。但是我对网络还是有一点要求的,因为我平时会使用 VPS。

电信宽带的优势,主要还是稳定。它在网络高峰时间不会明显给你降速。对于网络要求比较高的人,我觉得主要有两类:一类是做直播的,因为直播可能对上行带宽要求比较高;另一类是打电竞的,因为电竞对网络延迟要求比较高。

我其实没有直播和电竞这两方面的需求,我主要担心的是 VPS 线路。

我现在使用的是 CN2 GIA 这类线路,它本身是针对中国电信做优化的。所以我担心换成联通宽带之后,会失去这种线路上的优势。如果联通宽带对我的 VPS 支持不好,那即使价格便宜、带宽更高,我也不能换,还是只能继续用电信。

03 先拉一条联通单宽带测试

我这边正好有一张联通的北京异地号码。我打电话咨询中国联通客服之后,了解到这张卡可以办理一条单宽带,30 元一个月,300M 宽带,没有合约,也没有安装费。

所以我在六月份的时候,先拉了一条联通单宽带测试。测试下来,晚上网络高峰时间的稳定性还可以。然后我又看了一下我使用的搬瓦工 VPS,发现它针对联通线路其实也有优化,测试下来还是走了联通的精品线路。


这样一来,我最担心的 VPS 线路问题基本上就没有了。

04 遇到了一个问题

测试过程中我也遇到了一个问题,我在家庭网络外使用 Tailscale 异地组网无法跟家里的 Mac mini 建立点对点直连,延迟有 300ms,正常点对点直连 50ms 以下。排查后发现原来联通宽带分配的公网 IPv6 前缀长度(Prefix Length)是 /64,只能有一个子网。所以我使用的软路由 + 路由器这种配置时,Wifi 下设备就没有 IPv6 公网 IP,所以无法建立点对点直连。 联通宽带 /60 和 /64 是自动分配的,第一次是 /60 没问题,重启软路由后才发现有这个问题。

电信这边是固定的 /60,所以没有这个问题,我这边跟联通工作人员反馈了一下,让他这边将其固定为 /60,他申请修改了一下, 6 月底申请的,7 月 10 号修改好的。后面就解决了这个问题。这个问题解决后我就决定把原来的电信宽带转成联通宽带。

05 确认能不能转

有的地方可能会有电信工作人员挽留你,或者不让你转。这时候你可以先让他给你降费。我这边倒没有挽留我,我让他降费,他也不给我降。

现在宽带基本都有合约期,一般是两年,有的是三年。只有合约期到了才能转,不然提前转的话可能要交违约金。具体可以登录运营商 APP,看一下自己的套餐什么时候到期。

我这边其实已经用了两年多,差不多应该有三年了,但是因为后面从 129 元降到了 99 元,99 元套餐的合约期重新开始计算,所以直到上个月月底才到期。

还可以尝试发送:SQXZ#用户名#证件号码

把这段短信发送到 10086 或者 10001,用来判断是否可以转。如果可以转,运营商会给你发送一个授权码。用户名是中文名,证件号码是身份证号码。

短信查询截图

06 真正转网时的几个问题

最好月末转

最好月末转。因为联通不足半月也会按半月收费,如果你是 20 号转,它也要收半个月的费用。最后两天转的话,才会按天扣。

比如我是 7 月 30 号转的,最后扣了 3 块钱。

电信宽带怎么注销

电信宽带注销可以直接在中国电信 APP 上面申请,后面会有工作人员给你打电话。你确定要拆的话,有两种方式:

  1. 工作人员上门办理,顺便把光猫带走。
  2. 工作人员远程发一个短信链接,让你提交资料,提交之后再由工作人员确认注销。

我用的是第二种方式。光猫到现在都还没有给我收走。这个我问了一下工作人员,其实注销宽带并不会影响原来的电话卡当前月份使用,两者是独立的。

我因为提前拉了一条联通单宽带,所以直接在月中就让电信给我注销了。如果你没有像我这样提前准备备用宽带,直接转的话,可以和工作人员沟通一下,等这边信号转完以后再注销宽带。

比如说,你 30 号转网,31 号注销宽带,这样家里面的网络就不会断。

有主副卡怎么办

如果你有主副卡,有两种方案:要么先转副卡,把副卡当主卡;如果你想让原来的主卡继续当副卡,就需要先做主副卡拆分。

中国电信的主副卡拆分比较坑。虽然 APP 上面有一个线上视频客服拆分的入口,但是实际上还是不能线上办理,还得去营业厅,需要身份证。

也不是所有营业厅都可以办理,最好先打官方客服问一下。我这边是去新牌坊营业厅办理的。

上门办理和生效时间

转网是工作人员上门来办理的。好像要在 20:00 之前办理,因为 20:00 之后办的话,可能就要第二天早上才会生效。

担心 19 点多办理也会当天不能生效,我是 7 月 30 号 18 点多办的,转完之后就显示成联通信号了。副卡也是当时一起转的,其他副卡也直接一起办理。办理时需要本人在场,还要身份证和扫脸。

有一张副卡当时是 19 点多转的,但是转完之后暂时没有信号,20:00 多钟就有信号了。

当时营业厅的系统还登录不上去,我测试 8/1 号就可以登录上了。

预存话费

要预存 200 块钱话费,没有光猫费用之类的费用,也没有安装费用。

07 套餐和网速

其实 79 元的套餐原价是 99 元,每个月返 20 元。79 元的套餐合约期是 3 年,截图上面写的是大概 2 年时间,我问了一下工作人员,他说也是可以一直用。不知道最后是不是这样,应该没太大问题。

100G 流量也是分开来的:30G 基本流量、40G 联通智家、30G 副卡流量。

后面这个 30G 流量不是当时就到账的,是过了两天才可以看见。流量它比电信好一点的地方是,不是副卡专属的,都是共用的。

套餐流量截图 套餐截图

我使用软路由拨号上网,下面是直接连软路由测速的结果,没有工作人员机器测速快,但也差不多了,我也不是很在意这个。

测速截图 测速截图

08 动态 IPv4 公网 IP

联通这边其实可以分配动态 IPv4 公网 IP,但是默认不一定包含在套餐里。我是问了一下安装工作人员,他说可以配一个。你可以在安装时问一下工作人员是不是可以分配。

我是 7 月 30 号转的,8 月 3 号早上给我开通了。工作人员说需要机房修改数据,所以要统一更改。当天早上 10:00 多给我开通,应该是他们上班之后改了一下,改完就有了。

IPv4 公网 IP 截图

IPv4 公网 IP 其主要作用还是方便将其自己家里的服务通过域名的方式暴露出去,方便自己在家庭以外时,不方便通过异地局域网的方式访问的场景下使用。 后面我也会分享一下这方面的一些玩法。

最后

在我原来的认知里面,电信的宽带一直是最好的,最稳定的。联通宽带其实原来是对它是不信任的。 现在使用下来发现其实还可以,也不差。 我在网络高峰时也没有遇到这网速卡的情况,切换宽带还是没有感知的。

切换宽带其实也是不会改动到 WiFi 的。它相当于光猫这一层改了一下。 WiFi 密码呀、智能家居绑定的设备呀什么的也不会动到。

我去这栋楼的光纤室看了一下,也问了一下师傅。师傅说我们这栋楼可能八九户用联通宽带吧。我们这一栋楼有一百来户,有八九户是联通,其他的基本上都是电信。可能也是因为用的人少,所以说才可以分配动态 IPv4 公网 IP 吧。

另外联通的这个 30 元 300 兆的单宽带也还是挺合适的。如果租房又不缺流量的话,还是可以办这个的。

最后我觉得你是否需要转或者办联通融合宽带,还是要看你这边的需求。假如有大量流量使用的需求,还是可以转的。另外你也可以问一下是否可以给你分配 IPv4 公网 IP。

低成本实现国行 iPhone 使用 eSIM 漫游流量

2026-07-18 20:47:36

最近 Shadowrocket 出了 Tailscale 功能,解决了因为 iPhone 只能开启一个 VPN,Shadowrocket 与 Tailscale 不能同时开启的问题。但使用下来发现 Shadowrocket 的耗电量还是挺高的。

因为手机大部分时间都连 Wifi,本身使用流量不多,所以还是保留 eSIM 漫游流量 + Tailscale 的使用方式。

eSIM 漫游流量简单来说就是让外国人来中国用的漫游流量,可以访问国外服务。

正常国行 iPhone 只有实体卡,不支持 eSIM,可以通过 9eSIM 之类的品牌实体卡实现 eSIM 卡写入实体卡。

现在也有更低成本的小白卡可以实现。

来说下我的折腾过程。

一、eSIM 实体卡购买

拼多多买个最便宜的支持 EUICC 的 eSIM 实体卡(小白卡),大概 20 左右,不同价格只有写入卡数量的区别,买最便宜的就行。

9eSIM 实体卡相对小白卡没有优势,如果在 iPhone 中写入,也是需要借助读卡器才可以。

原理:小白卡本质上是将标准的 eUICC(Embedded Universal Integrated Circuit Card,嵌入式通用集成电路卡)芯片封装成普通 Nano-SIM(或多切)物理卡形态的可编程「空白」卡。

二、软件下载与 eSIM 读卡器购买

使用一个支持 NFC 的安卓手机下载 EasyEUICC, EasyEUICC 在安卓手机中可直接写入 eSIM 信息到实体小白卡中,不需要使用 eSIM 读卡器,相关教程

注意安卓手机要支持 NFC,不然写入不了。我刚开始用的 OPPO Find X 写入就不可以,发现原来是其不支持 NFC。EasyEUICC 需要手机支持 OMAPI(开放移动 API)功能,一般手机有 NFC 功能才有 OMAPI 功能。

iPhone 手机无法直接通过软件 APP 写入,需要买个 eSIM 读卡器,配合 9eSIM iOS APP 使用。

如果你买读卡器,可以就不用单独买小白卡,小白卡与读卡器一起买会更便宜一点。

eSIM 读卡器(eUICC 读卡器)的原理 是通过智能卡标准接口(主要是 ISO/IEC 7816)与 eUICC 芯片进行APDU 命令/响应交换,实现卡片信息读取、Profile 下载/安装/管理等操作。它本质上是一个协议桥接和物理接口转换设备,让电脑、手机或工具软件能安全访问实体 eSIM 白卡(或内置 eUICC 芯片)。

三、eSIM 套餐购买

Superalink

购买用于中国大陆使用的 eSIM 套餐,我买了 2 个套餐,开始为测试一下,买的 Superalink,买了 2 天。可以网上找下推荐码,可以更便宜点。

Superalink 境内走的中国移动国际网(CMLink),测试是香港 IP。

实际体验发现网速不稳定,下载速度有时只有 10 几 Mbps,有时可以达到 100Mbps。

Superalink 最近下线了微信、支付宝,我是通过 link.com(境外银行卡)支付的,link 应该也可以绑定国内双币信用卡支付。

sg.trip.com(携程海外版)

我也在 sg.trip.com(携程海外版)买了个 30 days,3GB 的来试用,相对 RedteaGO 红茶移动,要更便宜点。

也是走的中国移动国际网(CMLink),是新加坡的 IP。

RedteaGO 红茶移动

RedteaGO 红茶移动相对 sg.trip.com(携程海外版)同样规格的套餐要贵点,其有个使用优惠码可获得 3 usd 到余额的活动,可以变相优惠一点,但是需要先消费一笔了再赠送,有点麻烦。我没有用。我的优惠码:DEPP0004。

四、eSIM 写入与切换卡片

安卓手机,将手机卡正常插入到手机中,直接通过在 EasyEUICC 扫码写入就行。

iPhone 手机,将手机卡插入 eSIM 读卡器,eSIM 读卡器插入到 iPhone 手机,再打开 9eSIM APP,可通过扫码的方式获得 eSIM 卡信息,再下载对应 Profile 写入到卡片中。

我遇到了「下载失败」的问题,应该是接触不良。我将 eSIM 读卡器拔出换个面再插入就没报错了。

小白卡插入到国行 iPhone 后,要打开数据漫游功能,才可以正常上网。

当有多张卡时,可通过「设置 - 蜂窝网络 - SIM卡应用程序 - LPAe Menu」中切换 eSIM 卡。

eSIM 的问题

  1. 使 Tailscale 直连也不是很快(香港 IP)
    • 当热点使用也有这个问题
  2. 国内的某些应用需要反向翻墙,比如看不了小红书世界杯直播