普通视图

发现新文章,点击刷新页面。
今天 — 2026年5月10日首页

报道:美国汽车贷款规模创下1.68万亿美元历史新高

2026年5月10日 10:40
据媒体报道,美国汽车贷款规模创下1.68万亿美元历史新高,规模已超过信用卡债务总额。美国人普遍选择7至10年期车贷,月供平均达735美元。自2020年以来,汽车售价涨幅超35%,同时车辆收回违约率创下30年新高。(新浪财经)

Ozon大中华区总裁Simon Huang:中国卖家,正在涌向俄罗斯|专访

2026年5月10日 10:18

编者按:上个月月底,36氪在厦门参加了一场Ozon全球招商启动大会,我们发现现场人山人海。火热的出海和国内经济形成鲜明对比,特别是一组数据吸引了我们注意:尽管俄罗斯电商渗透率在2025年才23%,但是Ozon在2017年至2025年间,实现了91%的年均复合增长率。

这些高增长数据背后,似乎隐藏着比较大的商业机会,但机会究竟是什么?中国卖家如何在AI时代抓住?那边电商处于什么阶段?带着这些疑问,36氪和Ozon大中华区总裁Simon Huang(黄效)进行了一次交流。结论就是:俄语区还有比较长的红利期,中国电商迁移过去有足够的品牌优势、供应链优势,以及运营优势。以下为正文:

过去几年,中国跨境电商最拥挤的地方,是欧美。

以深圳坂田、龙华、华强北为代表的无数跨境卖家,围绕亚马逊、独立站、TikTok Shop和Temu,构建起了一整套成熟的方法论:选品、投流、铺货、品牌化、海外仓、达人营销……。可以说,中国供应链几乎把全球电商卷了个遍。

但2025年以来,越来越多卖家开始感受到一种变化:欧美市场越来越难了。

一方面,小包关税、物流、平台规则不断收紧;另一方面,竞争开始从“增量争夺”变成“存量内卷”。多位卖家直言:“流量越来越贵,广告越来越卷,利润越来越薄”。不少卖家还发现,即使店铺GMV还在增长,但利润是下降的。

于是,大量中国卖家开始寻找新的市场。而这一次,他们把目光投向了一个过去长期被忽视的区域:俄罗斯和独联体。

“过去一年,有非常多原来做欧美市场的卖家,转到了俄语区,做独联体市场。”Ozon大中华区总裁Simon Huang告诉36氪。

其实对于很多中国卖家来说,俄罗斯一直是个“熟悉又陌生”的市场。熟悉,是因为它足够大。俄罗斯拥有1.5亿人口,加上中亚五国、白俄罗斯等独联体国家,总人口达到2.5亿,相当于一个印尼规模的区域市场。

陌生,则是因为过去很长时间里,这个市场始终缺乏真正成熟的电商基础设施。中国企业想进入俄罗斯,大多只能依赖传统贸易:层层代理、线下渠道、高物流成本、低效率流通。很多中国品牌最终甚至变成了当地贴牌。

但现在,一切开始改变。

根据Ozon官方披露的数据,2025年俄罗斯电商市场规模已达到14万亿卢布,约合1900亿美元;而到2029年,这一数字有望进一步增长至30万亿卢布,接近4000亿美元。与此同时,俄罗斯电商渗透率仍只有23%,远低于中国、韩国等成熟市场。

这意味着,一个巨大的增量市场,才刚刚开始。而在这场变化中,俄罗斯最大电商平台之一Ozon,正成为中国卖家进入独联体市场最重要的入口。

一个被低估十年的市场,开始爆发

如果从时间线来看,俄罗斯电商的发展,明显比中国慢了至少十年。Ozon成立于1998年,比淘宝还早。但在前20年里,它更像一家“小而美”的图书和文创网站。直到2018年前后,Ozon才真正转向平台模式,并迎来爆发式增长。

“2018年是一个关键分界线。”Simon对36氪回忆,“当时全球电商平台的成功路径已经非常清晰。亚马逊、阿里、京东,包括Shopee、Coupang(韩国电商)等平台,都证明了电商平台是一个具备巨大规模效应和网络效应的商业模式。”

转型之后,Ozon开始疯狂投入。过去5年,Ozon在俄罗斯建设了超过500万平方米仓储中心,拥有2万多个专职司机和运输车辆,并建立了超过84000个自提点网络,覆盖90%以上用户。

这些数字背后,实际上是一场关于“基础设施”的战争。因为俄罗斯电商最大的问题,从来不是消费能力,而是履约能力。这个横跨欧亚大陆的国家,拥有极其复杂的地理结构:地广人稀、冬季漫长、物流成本高昂。莫斯科和圣彼得堡之外,大量人口分布在中小城市和乡镇地区。

传统物流公司并不愿意投入如此巨大的基础设施成本。但电商平台必须做。“只有物流基建跑通了,电商这个商业模式才能成立。”Simon告诉36氪。于是,Ozon做了一件非常“中国式”的事:把物流、自提点、补贴、支付、数字化能力全部做成平台基础设施。

某种程度上,它很像十年前的中国电商平台。比如,自提点网络就是一个极具俄罗斯特色的模式。

与中国大量“送货上门”不同,俄罗斯消费者更习惯到附近自提点取货。Ozon最初尝试自建自提点,但发现速度太慢,随后改为加盟模式:任何人都可以把自己的空间改造成Ozon自提点,平台按GMV进行分成。

结果,自提点数量迅速扩张到84000个。消费者可以在这里试穿、试用、退货,甚至完成二次配送。“这是一个很强的网络效应。”Simon说,“物流规模越大,成本越低,时效越快;用户越多,商家越愿意进来;商家越多,消费者选择越丰富。”

这套逻辑,与中国电商过去十年的飞轮极其相似。而基础设施成熟之后,中国卖家终于开始真正进入这个市场。

中国卖家,正在迁徙

过去几年,中国跨境卖家经历了一轮极度残酷的全球竞争。

欧美市场流量成本上涨、关税政策变化、平台规则收紧,很多卖家开始重新评估自己的全球布局。而俄语区市场,开始变成新的目的地。“独联体市场现在还是增量市场,不需要卷存量。”Simon对36氪表示。

相比欧美市场,俄罗斯和独联体最大的特点,是电商仍处于高速增长阶段。这里的消费者需求长期没有被充分满足,而中国供应链则恰好具备极强的性价比优势。尤其是在下沉市场。

Simon观察到,俄罗斯超过1亿人口生活在中小城市和乡镇地区,这些消费者对价格极其敏感。而中国的产业带卖家——无论是福建鞋服、义乌小商品,还是珠三角消费电子——都能以极高性价比快速满足这些需求。

于是,中国卖家开始大量进入。截至目前,Ozon平台活跃卖家超过75万,中国卖家占比已超过20%。 而这些卖家里,逐渐出现了两种完全不同的路径。

第一种,是典型的产业带铺货型卖家。他们拥有大量SKU,依赖成熟ERP系统进行精细化运营,通过极致性价比覆盖俄罗斯下沉市场。

第二种,则是越来越多开始做品牌的中国企业。这也是Simon最看重的一类卖家。“未来AI会把很多运营优势拉平。”他说,“真正能形成长期壁垒的,是品牌、IP、技术、审美和用户信任。”

在他看来,中国卖家过去最大的优势,是信息差和运营效率。但AI出现之后,这些优势正在被迅速削弱。AI可以完成选品分析、本地化翻译、内容生成、广告优化、客服运营、店铺管理等。

甚至,AI还能24小���无间断运营。“过去,大卖家最大的优势是可以堆很多运营人员。但现在AI员工出现后,这个优势没了。”Simon说。 于是,整个行业开始回到最底层的问题:

你的核心资产到底是什么?

如果供应链人人都能找到,运营人人都能AI化,那么最后真正能留下来的,只能是品牌。这也是为什么,越来越多中国卖家开始在俄罗斯市场做长期投入。有人开始注册本地商标;

有人开始做本地化营销;有人开始与俄罗斯KOL合作;甚至有人开始在当地开快闪店。

在Simon看来,这种变化,本质上是中国跨境卖家从“短期套利”转向“长期经营”。“短期主义越来越难了。”他说。

AI时代,跨境电商开始进入“一人公司”时代

在这次采访里,Simon反复提到一个词:OPC(One Person Company,一人公司)。他认为,AI正在把跨境电商带入一个全新的阶段。过去,一个跨境团队可能需要运营、美工、文案、小语种客服、数据分析、广告投手。但现在,AI开始逐渐替代这些岗位。

“未来很多企业不需要雇佣很多员工,它需要的是数字员工。”Simon说。 在他看来,AI带来的变化并不只是效率提升,而是整个竞争逻辑的重构。

首先,AI消灭了信息差。过去,一个经验丰富的运营,最大的价值是知道平台规则、知道怎么选品、知道怎么投广告。但现在,AI已经可以低成本分析全球公开数据,快速找到趋势和需求。

其次,AI也消灭了组织规模优势。过去大卖家可以通过堆人建立效率壁垒,但AI出现后,小团队甚至一个人,也能拥有过去大公司的运营能力。这意味着:跨境电商的创业门槛,正在被迅速拉低。

“未来会有越来越多运营出来创业。”Simon说,“只要配一个AI工具,他就可以跑起来。” 但与此同时,AI也让整个行业变得更加残酷。因为当所有人都能运营时,真正拉开差距的,就不再是运营。而是产品、品牌、IP、用户信任、内容审美,以及消费者洞察。

这也是为什么,Simon始终强调“品牌化”和“合规”。在他看来,未来跨境电商最核心的资产,是无法被AI迅速复制的东西。尤其专利、商标、技术、品牌心智和用户关系。这些东西,才是真正的长期壁垒。

某种程度上,这也意味着:中国跨境电商正在结束“野蛮生长”阶段。过去依赖信息差、流量套利、铺货逻辑的时代,正在逐渐过去。而一个新的阶段,开始出现:平台越来越重基础设施;卖家越来越重品牌;AI越来越重效率;而竞争,则越来越回归长期主义。

对Ozon来说,它希望成为这场变化里的基础设施提供者。对中国卖家来说,俄罗斯和独联体,则像是一个新的增长大陆。而在AI、物流基础设施和全球供应链重新组合的背景下,这个过去长期被忽视的市场,正在被重新发现。

老白干酒董事长主动“放弃连任”:任期已超10年,半个月前才宣布为董事候选人

2026年5月10日 09:55
交出最近五年最差业绩之后,5月8日,老白干酒(600559.SH)宣布,董事长刘彦龙个人请求不再担任公司新一届董事会董事候选人,原定于5月15日召开的股东会延期至5月19日。值得关注的是,2025年,老白干酒账面盈利4.30亿元,经营活动现金流却净流出2.93亿元。(澎湃新闻)

哈啰员工聚会把青桔和美团单车踩在脚下?官方回应:已展开内部调查,始终尊重行业伙伴

2026年5月10日 09:54
近日,一张哈啰员工聚会的照片在社交平台流传,照片里多名人员骑在哈啰单车上,还有人脚下踩着倒地的青桔和美团单车。该行为引发争议。针对此事,哈啰方面向新浪科技回应称,“近日,社交平台流传的一张我司员工聚会照片,照片中的行为与哈啰一直倡导的价值观不符,不能代表哈啰员工的整体风貌。对此,我司已展开内部调查。哈啰始终尊重行业伙伴,倡导健康、理性的行业氛围。”(新浪科技)

融资超亿元、割草机器人公司拿下数亿订单,瞄准庭院具身终端|硬氪首发

2026年5月10日 09:27

作者|黄楠

编辑|袁斯来

硬氪获悉,智能庭院机器人公司「长曜创新」近日完成数千万元A+融资,领投方为美的系上市公司盈峰环境,老股东持续加注。资金将重点投入技术研发迭代、多SKU量产交付及产品矩阵拓展,持续夯实供应链能力,完善全球化渠道布局。此前,公司已于2015年12月完成A轮融资,半年累计融资金额超亿元。

长曜创新成立于2022年,长期专注户外庭院智能硬件赛道,聚焦无边界割草机器人的研发、设计与制造。公司依托自主技术研发与场景化创新能力,围绕草坪养护场景,构建庭院智能全生态系统。

根据Euromonitor等报告显示,2024年,全球割草机器人销售额占割草机总额的9.1%,处于较低水平。分区域看,欧洲市场存量渗透率达20%-30%,普及率较高,但无边界产品替代空间依然广阔;北美家庭草坪面积大、地形复杂,渗透率不足2%位数,是未来扩容的关键市场。

随着庭院机器人市场持续升温,竞争日趋白热化。面对日益同质化的价格战与功能堆叠,市场分化的背后,是现有产品力难以匹配用户的深层需求。长曜创新创始人胡岳告诉硬氪,“用户不是要一台会跑的割草机,而是要一片好看的草坪。破除竞争的最好方式,就是不断保持创新,去打造更好的产品。行业第一往往靠规模化成本取胜,行业第二则通过产品与渠道的差异化来击败竞争者。”

这一思路,在长曜创新最新旗舰产品Tron Ultra系列割草机器人身上得到充分印证。

Tron Ultra系列搭载了行业首创的四轮独立驱动与独立转向系统,允许每个轮子以任意角度独立旋转。这使得机器人能够实现原地自转、横向平移、斜向移动等复杂运动模式,从而有效应对传统割草机器人难以克服的运动死角,彻底解决磨草、边缘死角以及在复杂草坪场景中的脱困难题。这一突破性创新,首次将汽车领域的复杂底盘方案引入机器人行业。

Tron系列割草机器人,避免边界磨草(图源/企业)

在工程实现上,为兼顾紧凑空间、越野通过性、可靠性与成本,长曜创新的研发团队自研了轮毂电机与独立转向节的一体化设计,取消了传统机械转向拉杆,大幅减少了活动部件数量。配合升级后的AI视觉导航系统以及独创的碎草模块,整机的响应速度、故障率与维护成本均得到显著优化。

目前,Tron Ultra系列已完成研发与工程验证,将于今年年中正式开启全球销售。长曜创新表示,将持续以“产品差异化×渠道差异化”为双引擎,在中高端割草机器人市场建立清晰的品牌认知

除了线上渠道外,长曜长期专注欧洲及北美线下专业渠道的搭建,包括区域性的庭院设备专营店、园艺用品连锁网络等,以形成相对稳定的出货预期。

硬氪了解到,截至目前,长曜创新在欧洲线下渠道订单较去年同期实现5倍以上增长,新款割草机器人产品已拿下数亿元意向订单。

Tron系列割草机器人(图源/企业)

当前,庭院机器人赛道正经历从“单功能工具”向“场景化平台”的范式迁移。从硬件迭代到生态构建,长曜创新对庭院的想象远不止于割草。

相比于部分厂商仍聚焦在轮式底盘、单一割草功能上的持续迭代时,长曜创新选择走向另一条的路径。“当单一功能及场景的技术壁垒陆续被供应链成熟度稀释,用户需要一个能够统筹打理整个庭院空间的智能系统。”胡岳表示,“庭院的工作很多,我们要做的不只是割草场景。我们将会用一种全新、有别于目前所有轮式底盘设计的形态,在园林行业第一次落地消费级的具身终端,去改变庭院的格局,重新塑造欧美的‘第二起居室’生活方式。”

以下为硬氪与长曜创新创始人胡岳的访谈节选(略经编辑):

硬氪:目前欧洲仍是主力市场,近半年来美国市场开始起量了吗?

胡岳:欧洲市场基本盘稳固,美国市场今年虽已开始缓慢起量,但整体增速依然偏慢,这也是整个行业当前共同攻坚的难题。不少品牌看似已进驻北美大型商超的线上渠道,但目前更多仍停留在品牌曝光和用户心智的初步搭建阶段。

据我们实际观察,美国用户对中国出海硬件品牌的刻板印象依然根深蒂固,普遍认为中国产品只是平价的替代品,高端化、品牌化心智还处于建立期。

这也意味着,在海外用户眼中,绝大多数中国硬件公司实际上站在同一条起跑线上——即便是国内的大厂,在美国普通消费者心中的认知度也与其体量严重不匹配。好处是大家起跑线相近,坏处则是“廉价低端”的标签难以在短期内撕掉。

Tron系列割草机器人(图源/企业)

硬氪:国内割草机器人赛道的“内卷”声量很大,你们如何判断行业当前所处的竞争阶段?

胡岳:目前行业已进入淘汰赛阶段,远非当初的热身赛。对企业综合实力、供应链管理、本地化服务以及全球销售网络的搭建都提出了极高要求。但很多玩家仍停留在浅层内卷:一窝蜂堆技术、拼参数、打价格战,卷得太早、太浅,扎堆在表层红海厮杀,却不愿深耕蓝海场景。

产品同质化严重也是行业普遍问题。大多数产品仅停留在基础割草功能,草坪养护、碎草还田、节水灌溉等深层用户痛点几乎无人深耕。更值得关注的是,大厂的入局思路也偏保守——部分企业的行业习惯是,等市场跑出三家定位清晰的玩家后才跟风进入,很少主动做前沿探索。而小的创业公司企业受制于资金和资源,同样难以支撑深度研发。结果就是,大家都在海面上卷,没人往深海挖机会。

在场景探索上,商用智能割草目前尚未出现成熟落地的商业模式。虽有团队在尝试,但远未到规模化阶段。而且商用和家用在渠道、研发、售后上是两套完全不同的逻辑,需要单独组建团队。基于这些判断,我们现阶段暂时不会重点布局商用方向。

硬氪:你们给自己的定位远不止是割草机器人公司。长曜在生态布局上有哪些设想?

胡岳:我们思考的底层逻辑,从来不是做一堆孤立的硬件单品。长曜要构建的,是一套能够自我进化、全域感知的庭院生命体。

以割草机器人为感知与交互的切入点,我们持续沉淀庭院场景的环境数据、用户行为轨迹以及植物生长的隐性模型,逐步形成具备语义理解能力的认知上下文。但这只是表象。真正的内核,将由一款彻底颠覆当下轮式底盘运动方式的终端机器人来承载——它将是行业内首个真正落地于庭院消费级场景的“具身终端”,一种打通物理世界与数字感知的实体界面。

长曜的演进路径清晰而深远:短期,聚焦单品硬件的极致落地;长期,则是在庭院生态与具身智能的深层维度上加速编织一张不可见的网。我们想要的,不是一个工具,而是一个高壁垒的庭院智能入口——在那里,庭院不再是机器的作业场,而是人与环境、数据与实体共生共感的“第二起居室”。

新修订《婚姻登记条例》施行一年 全国建成户外颁证点1330个

2026年5月10日 09:24
今天(5月10日)是新修订的《婚姻登记条例》施行一周年。记者从民政部了解到,一年来,各地共办理“全国通办”68.2万件,异地调档24.7万份。一年来,各地持续推进婚俗改革试点示范工作,推行户外颁证服务,建成户外颁证点1330个。目前全国设置在公园等有标志性意义场所的婚姻登记点525个、婚俗文化展示场所2045处。 (央视新闻)

英伟达全面布局AI生态 股权投资今年已超400亿美元

2026年5月10日 09:22
5月9日,英伟达在AI热潮中通过大手笔投资上下游企业,打造从芯片到AI模型的完整生态体系。数据显示,今年英伟达股权投资已突破400亿美元。业内人士指出,这种投资模式不仅帮助英伟达锁定下游客户,还在一定程度上确保了公司硬件需求的稳定供应。(财联社)

中国汽车工业协会:网传“新能源车企因锁电问题被约谈、立案”为不实信息

2026年5月10日 09:22
财联社5月9日电,记者今天(9日)从中国汽车工业协会了解到,网传“新能源车企因锁电问题被约谈、立案”为不实信息。中国汽车工业协会相关负责人表示,针对近日网络上盛传的关于“8家新能源车企因锁电问题被约谈”“3家车企被立案”的说法,网传内容无官方来源,与事实严重不符,一切行业监管动态与执法举措以主管部门官方正式信息为准。同时,希望新能源车企在优化电池管理系统的同时,保持信息透明原则,保障消费者知情权与选择权,并建立畅通高效的售后沟通渠道,积极处理锁电相关的投诉争议,用诚信经营守护品牌口碑。 (央视新闻)

港交所:前四个月IPO集资金额为1514亿港元 同比上升604%

2026年5月10日 09:20
5月9日,香港交易所数据显示,证券市场市价总值于2026年4月底为48.0万亿港元,同比上升24%。2026年4月的平均每日成交金额为2535亿港元。2026年首四个月的平均每日成交金额为2711亿港元,同比上升8%。2026年首四个月的交易所买卖基金平均每日成交金额为391亿港元,同比上升5%。2026年首四个月有49家新上市公司,较去年同期的19家上升158%。2026年首四个月的首次公开招股集资金额为1514亿港元,同比上升604%。(财联社)

早报|中汽协辟谣8家车企锁电被约谈/曝苹果正在研发全息iPhone/李想回应理想L9四年换代:汽车不是手机

作者 Shawn Rain
2026年5月10日 08:27
cover

🔋

多家车企辟谣「锁电被约谈」传言

🚗

李想回应理想 L9 四年换代:汽车不是手机,安全验证无法提速

💰

SK 海力士回应员工人均奖金 610 万元

🔍

曝苹果正在研发全息屏幕 iPhone

🤖

MiniMax 回应大模型不认识马嘉祺

⚠

曝甲骨文裁员 2-3 万人,员工集体争取更高遣散费遭拒

💡

Anthropic 联创:AI 对就业的冲击被高估了

🚙

小鹏多款 SUV 新车亮相

📱

Google 旗下修图软件推出大更新

💻

电脑微信三大更新来袭

🎧

光帆带摄像头 AI 耳机 5 月 15 日开售

🧠

百度文心 5.1 正式发布,Agent 能力超越 DeepSeek-V4-Pro

☁

蚂蚁百灵大模型发布 Ring-2.6-1T

📰 周末也值得一看的新闻

多家车企辟谣「锁电被约谈」传言

针对网络流传的「8 家车企被约谈、3 家被立案调查」传言,比亚迪、小鹏汽车、广汽埃安昨日相继发布声明,明确否认上述信息。蔚来、特斯拉、极氪、零跑、理想等车企也均向中新经纬表示,未收到约谈。

  • 比亚迪官方微博称,相关传言「纯属虚假谣言」,公司已取证并将依法追究造谣者法律责任;
  • 小鹏集团法务部官微则指出,经核实,公司近期未收到此类约谈,亦不存在被立案调查情况;
  • AITO 问界汽车发布声明称此为不实信息,纯属造谣;
  • 广汽埃安法务部官微称,网传因 OTA「锁电」问题被约谈及纳入立案调查名单的信息「纯属虚构捏造」;
  • 特斯拉表示该消息为不实信息,并称所有软件更新均经过严格测试并备案;
  • 极氪则表示正在准备辟谣公告。

另据央视新闻报道,中国汽车工业协会昨日发声明称,近期网络流传的「8 家新能源车企因锁电问题被约谈」「3 家车企被立案」等说法为不实信息,网传内容无官方来源,与事实严重不符。

协会相关负责人强调,一切行业监管动态与执法举措,均以主管部门官方正式信息为准。

李想回应理想 L9 四年换代:汽车不是手机,安全验证无法提速

理想汽车 CEO 李想昨日在微博公开回应外界对全新理想 L9 换代周期长达四年的质疑。

理想 L9 于 2022 年 6 月首次上市,至今年 5 月换代周期接近四年,明显长于消费电子产品的迭代节奏。李想对此解释称,汽车与手机等消费电子产品存在本质区别。

汽车真做不到像手机那样的换代速度,它关乎一家人的生命安全,有大量验证工作需要经过长时间反复测试打磨。

李想同时提到,尽管 AI 技术目前发展迅猛,但在汽车测试与验证这一具体专业领域,对实车验证效率的提升仍然相当有限。

SK 海力士回应员工人均奖金 610 万元

据第一财经、财联社报道,海力士昨日针对此前韩国员工人均奖金将达 610 万人民币的预测回应称,由于今年与明年的年度业绩尚未确定,奖金规模亦无法预测。

该公司同时表示,已在总部层面建立了一套新制度,以营业利润的 10% 作为资金来源,每年发放一次绩效奖金。

随着 AI 半导体竞争全面加剧,人才已成为核心竞争要素。为此,公司致力于通过具有竞争力的薪酬待遇吸引优秀人才,以保持长期竞争优势。

国际投行麦格理证券此前预测,若海力士明年营业利润达到 447 万亿韩元,按营业利润的 10% 与去年年末约 3.5 万名员工总数简单测算,分红总规模将达约 44.7 万亿韩元,人均可发放奖金约 12.9 亿韩元,接近 610 万人民币。

曝苹果正在研发全息屏幕 iPhone

据 MacRumors 援引供应链消息报道,苹果正研发一款配备全息显示屏的「空间 iPhone」。据科技爆料人「Schrödinger」透露,三星目前正在研发代号为「MH1」或「H1」的全息智能手机显示屏。

该屏幕与早期裸眼 3D 技术有所不同,采用在 AMOLED 堆叠中直接集成纳米结构全息层的方案,并结合眼球追踪与衍射光束转向技术,将光线以精准角度重定向至用户眼部。

通过配套的专利算法,用户无需佩戴特殊眼镜,仅需倾斜设备即可实现 360 度绕物查看,产生悬浮于屏幕上方的空间深度错觉。

在显示性能方面,爆料称 H1 显示屏在处理常规 2D 任务时可维持原生 4K 分辨率,全息深度层仅在适配内容下激活,以此实现「零清晰度损耗」,规避传统透镜式 3D 屏幕的画质折损问题。

目前,该项目仍处于研发第一阶段,全息智能手机的全面商用时间节点预计在 2030 年左右。

MiniMax 回应大模型不认识马嘉祺

MiniMax 昨日发布技术博客,披露 M2 系列大模型「不认识马嘉祺」的根因,并宣布已完成修复。值得注意的是,模型仍能准确回答马嘉祺的相关信息,丧失的只是「写出这个字」的能力。

问题的起点是分词器将「嘉祺」合并为一个独立 token。模型在预训练阶段学会了它,但后训练的对话数据里包含「嘉祺」的样本不足 5 条。这导致:

  • 高频 token(如代码符号、tool_call 标记)在后训练中反复被练习,持续更新周围的向量空间;
  • 「嘉祺」这个低频 token 几乎从未被练到,权重向量被挤压偏移;
  • 模型输出时找不到「嘉祺」,转而用发音相近的「佳琪」「琪琪」替代。

MiniMax 随后对约 20 万 token 的完整词表做了全量扫描,发现约 4.9% 的 token 存在显著退化。日语的退化尤为严重(29.7%),远超中文(3.9%)、英文(3.5%)、韩语(3.3%)和俄语(3.7%)。

这也解释了另一个旧问题:模型在日语对话中偶尔混入俄语或韩语字符,根因同样是日语 token 参数漂移后在向量空间中与其他语言发生混淆。

修复方案是构造覆盖全词表的合成数据,用简单的复读任务确保每个 token 都被练到。修复后,日语回答混入俄文字符的比例从 47% 降至 1%,全词表输出参数稳定度从最低 0.329 升至全部高于 0.97。

曝甲骨文裁员 2-3 万人,员工集体争取更高遣散费遭拒

据 TechCrunch 报道,3 月 31 日,甲骨文 (Oracle) 通过电子邮件裁减约 2 万至 3 万名员工。被裁员工随后尝试集体谈判争取更高遣散待遇,遭到拒绝。

甲骨文提供的遣散方案为:签署免责协议后,员工可获得第一年 4 周工资,此后每满一年增加 1 周,上限 26 周,另附 1 个月 COBRA 医疗保险。

争议核心在于股票处理 —— 公司未对即将归属的 RSU(限制性股票单位)予以加速,解雇日前未归属股票一律没收。据《时代》报道,一名长期员工因此损失 100 万美元股票,距归属仅差 4 个月,RSU 约占其总薪酬的 70%。

相比之下,Meta 遣散方案起点为 16 周基本工资,另加每年 2 周,并覆盖 18 个月 COBRA 保险;Cloudflare 则提供薪资至今年年底并加速股票归属。

至少 90 名被裁员工签署请愿书,要求甲骨文对标行业水平,但据 TechCrunch 获悉的邮件,甲骨文拒绝谈判,只给出「接受」或「放弃」两个选项。

💡 Anthropic 联创:AI 对就业的冲击被高估了

据《斯坦福日报》报道,Anthropic 联合创始人兼总裁 Daniela Amodei 昨日在斯坦福大学商学院「View From The Top」系列演讲活动中表示,外界对 AI 冲击就业市场的担忧存在明显夸大。

Daniela 表示,根据 Anthropic 持续跟踪的经济指数,AI 目前呈现出的形态更接近「技能互补」而非「岗位替代」。她指出,AI 正在改变工作的性质,而非简单消灭工作本身,客服领域是目前少数确实出现明显替代效应的行业之一。

以软件开发为例,她预测工程师这一职业不会消失,但工作重心将从编写代码转向与产品经理、客户的沟通协作,即那些 AI 不擅长处理的环节。

Daniela 同时提出了「比较优势位移」的概念。她认为,在 AI 能够承担更多日常生产性工作的未来,人类的优势将向同理心、社会判断力和人际沟通倾斜。她以医疗行业为例说明:

AI 或许能在诊断准确率上超越医生,但「床边照护」的温度与患者信任关系所带来的临床效果,是 AI 无法复制的。

小鹏多款 SUV 新车亮相

在昨天披露的第 407 批《道路机动车辆生产企业及产品公告》新产品公示信息中,小鹏三款新 SUV 产品正式亮相:

小鹏 G9L:

  • 长 5120mm,轴距 3100mm;
  • 纯电提供两驱、四驱;两驱电机功率 270kw;四驱电机功率 160+270kw;
  • 增程版搭载东安 1.5T 增程器(型号 DAM15NTE,功率 110kw);两驱电机功率 210kw;四驱电机功率 160+210kw。

小鹏 Mona L05:

  • 长 4870mm,轴距 2940mm;
  • 纯电电机功率 183kw;增程版搭载重庆小康 1.5L 增程器(型号 H15R,功率 70kw),电机功率 183kw。

小鹏 Mona L03:

  • 新增增程版本,长 4650,4672mm,轴距 2850mm;
  • 搭载重庆小康 1.5L 增程器(型号 H15R,功率 70kw);电机功率 183kw。

Google 旗下修图软件推出大更新

近日,Google 旗下手机修图 App 正式上线了 4.0 版本:整体 UI 焕新,还上线了各种胶片功能,直接在 Google Play 商店/苹果 App Store 更新即可体验。

  • UI 整体变得更加活泼,配色以黄、绿为主;
  • Snapseed 相机上线:适配 Android 多摄像头接口,以小米 15 为例,支持后置三焦段切换;
  • 新增「免费胶片」滤镜:提供柯达 Portra 400、柯达 Gold 200、富士 Superia 200 等多种经典胶片色彩,并且对应有噪点等后期处理;
  • 后期方面,「粗粒胶片」功能同样上线了免费胶片滤镜调节,以及新增泛光调节。

电脑微信三大更新来袭

昨天,微信派发文宣布了电脑端微信三大更新:

  • 滚动截图:电脑端微信支持「滚动截图」(更新电脑端微信至 4.1.9 版本);
  • 语音输入:聊天框点右下角小话筒或者按住 Alt 键,就能直接开讲。还可以在「微信-设置」中调整快捷键;
  • 表情连发:选择好表情到输入框后,按「→」,就能快速复制该表情。

光帆带摄像头 AI 耳机 5 月 15 日开售

昨天,光帆科技发布预热海报,宣布旗下「光帆全感 AI 耳机」将于 5 月 15 日正式开售。视觉感知是该产品的主打卖点,光帆将其定位为「全感知、主动式、个性化」。

值得一提的是,就在此前一天,The Verge 等媒体报道称,苹果正在推进带摄像头的 AirPods 于年内落地。随着头部厂商加入,支持视觉感知的 AI 耳机正在成为硬件赛道中新的焦点。

百度文心 5.1 正式发布,Agent 能力超越 DeepSeek-V4-Pro

百度昨日正式发布文心 5.1 大模型。官方信息显示,文心 5.1 在保留文心 5.0 核心知识的基础上,将总参数量压缩至文心 5.0 的约三分之一、激活参数量压缩至约二分之一,在 Arena 搜索榜以 1223 分位列全球第四、国内第一。

官方公布的基准测试数据显示,文心 5.1 在 τ³-bench 与 SpreadsheetBench-Verified Agent 评测中性能超越 DeepSeek-V4-Pro;在数学竞赛评测 AIME26(使用工具)中得分 99.6,仅次于 Gemini 3.1 Pro。

蚂蚁百灵大模型发布 Ring-2.6-1T

蚂蚁百灵大模型昨日正式发布万亿参数旗舰推理模型 Ring-2.6-1T,面向真实复杂任务场景,支持 high 与 xhigh 两种推理强度。

官方信息显示,该模式在 PinchBench 上得分 87.60,高于 GPT-5.4 xHigh、Gemini-3.1-Pro high 与 Claude-Opus-4.7 xhigh;ClawEval 得分 63.82,在可比模型中位居前列;Tau2-Bench Telecom 达到 95.32,与该项目最高分模型差距不足 1 分。

✨ 是周末啊!

One Fun Thing|骂虚拟偶像被判赔钱,法院:「中之人」也是真人

广州互联网法院昨日发布了一起涉及虚拟偶像名誉侵权的典型案件判决:有人在网上骂了一个虚拟偶像,结果被判侵害了真人扮演者的名誉权。

事情的起因是一次「开盒」。虚拟女团成员「X宝」的「中之人」陈某,在 2024 年 10 月遭网民非法获取并公开了个人身份信息,早年间的微博言论也随之曝光,引发争议。

陈某随后以「X宝」身份直播回应。直播次日,拥有 50 万粉丝的微博用户历某发文,用一串侮辱性词汇对「X宝」大加攻击,收获 9500 余次点赞。

历某辩称:我骂的是虚拟偶像,又不是真人,而且我根本不知道「中之人」是谁。但法院没有接受这套说法。判决认为,「X宝」长期由陈某扮演,二者已形成稳定对应关系,特定范围内的公众完全能将两者相关联。

至于「虚拟偶像是公众人物、应接受舆论监督」的抗辩,法院也认定,陈某出道前的个人言论并不涉及公共利益,历某使用的词汇已是赤裸裸的人身攻击,早就越过了监督的边界。

最终,历某被判在微博置顶发布道歉声明,并赔偿精神损害抚慰金 1 万元及律师费 5000 元。

周末看什么|《给阿嬷的情书》

《给阿嬷的情书》剧情围绕潮汕阿嬷叶淑柔展开。孙子晓伟因债务缠身,瞒着家人只身赴泰国寻找传说中的亿万富豪阿公郑木生,却带回一个震惊家族的消息:

阿公早已离世,数十年来与阿嬷鸿雁传书、持续谈情说爱的,竟是一位陌生人。随着晓伟的追查,一段跨越半个世纪的隐秘情感浮出水面。

影片在豆瓣获得 9.1 分,逾 10.3 万人参与评价,综合口碑位列「好于 98% 剧情片」,观众评价普遍集中于影片对潮汕地域文化的真实还原与克制的情感表达。

买书不读指南|《语言人》以 40 年前的判断回应 AI 时代语言焦虑

《语言人:论语言学对人文科学的贡献》是法兰西学院理论语言学讲座教授克洛德·海然热(Claude Hagège)的代表作,原著《L’Homme de paroles》首版于 1985 年。

全书以「语言学对人文科学的贡献」为核心命题,分上、中、下三编展开。海然热的核心判断直接回应了 AI 时代的语言焦虑:成倍增长的工业技术不会威胁各语言丰富细腻的表达方式,因为人类语言表达与科技进步本质上并无直接关联。

他以多语言的「厌烦」表达为例加以佐证:荷兰语说「碾盘套住了脖子」,匈牙利语说「尽力挣脱胳膊肘」,摩洛哥阿拉伯语说「捕捉苍蝇」,意在说明语言的细腻性正在各自的文化土壤中持续蓬勃发展,而非趋向同质化。

游戏推荐|《混音青春》

《混音青春》于 5 月 7 日正式发售,登陆 PC、PS5、Switch 2 及 Xbox Series 平台,游戏以三位即将高中毕业的好友为主角,故事始于毕业前夜前往派对的途中。

与强调玩家选择的传统叙事游戏不同,《混音青春》并不提供影响结局的分支选项,而是将玩家置于旁观者与参与者之间,陪伴角色重温那些尴尬、疯狂又真实的青春片段。每段回忆均被包装为一支「可游玩的 MV」。

音乐是本作的核心支柱。游戏大量授权使用 DEVO、Roxy Music、Lush、The Smashing Pumpkins 等真实艺人的 90 年代流行与摇滚曲目,每首歌均与对应场景的情绪高度契合。

发售后,《混音青春》获得广泛好评。IGN 为其打出 2026 年首个满分 10 分,称其「几乎重新定义了电子游戏中的青春成长故事」;Metacritic 平台 PC 版综合评分 93 分(14 家媒体),Switch 2 版 89 分(6 家媒体),PS5 版 85 分(22 家媒体)。

#欢迎关注爱范儿官方微信公众号:爱范儿(微信号:ifanr),更多精彩内容第一时间为您奉上。

Altman 或官宣 OpenAI 硬件;李想谈 L9 4 年才换代:汽车非手机,AI 帮助有限;多家车企否认「被约谈」

2026年5月10日 08:24

Altman「官宣」OpenAI 手机

昨日早间,Altman 发布了一条 X,几乎坐实了近半个月来的传闻。

X 正文只有三个词:「call me maybe」

配图是 ChatGPT 官方账号 10 小时前发的——黑色太空背景,月球地平线,地平线上方升起一个发光的 ChatGPT 输入框。

看似没头没尾,但这几天郭明錤那份"OpenAI 手机加速到 2027 H1"的报告放到一起读就会发现,这几乎相当于在官宣:OpenAI 手机要来了。

与其说是郭明錤爆料 OpenAI 要做手机这件事,不如说在过去半个月里,Altman 自己一步步把它讲出来的。

而这件注定是 AI 原生的硬件产品,将会是 OpenAI 上市前的最大杀招。(来源:AI唱反调

英伟达今年已承诺投入 400 亿美元押注 AI 股权投资

英伟达正持续加码其在全球人工智能生态中的资本布局,在 2026 年刚刚过去的几个月里,已对多家 AI 相关企业承诺超过 400 亿美元的股权投资,进一步巩固其在 AI 基础设施领域的主导地位。

据美国财经媒体 CNBC 报道,这一巨额投资中有相当大一部分来自对 OpenAI 的单笔押注:英伟达此前宣布,将向 OpenAI 投入约 300 亿美元,用于支持后者在大模型训练和推理方面的持续扩张与技术迭代。

与此同时,这家芯片巨头还面向多家上市公司密集出手,宣布了七笔规模达数十亿美元级别的股权投资,其中包括最近披露的最多 32 亿美元投资玻璃制造商康宁(Corning)、以及最多 21 亿美元投资数据中心运营商 IREN 等交易。

在此背景下,英伟达从单纯的芯片供应商,愈发转向集硬件、软件与资本为一体的「AI 基建操盘手」。随着公司管理层此前给出的预期——到 2027 年底,Blackwell 和 Rubin 系列芯片累计创收有望达到至少 1 万亿美元——这家市值巨头显然希望通过密集的股权投资,把自己与下一代 AI 基础设施的核心参与者牢牢捆绑在一起,从而在新一轮 AI 竞赛中占据更持久的结构性优势。(来源:cnBeta)

 

特斯拉 Model Y 成首款通过美国全新驾驶辅助安全基准的车型

美国国家公路交通安全管理局(NHTSA)本周二表示,后期推出的 2026 款特斯拉 Model Y,成为首款符合该机构全新高级驾驶辅助系统(ADAS)安全基准的车型。新标准由 NHTSA 纳入其安全评级体系,旨在更系统地评估车辆在多类驾驶辅助场景下的实际安全表现。

根据 NHTSA 介绍,其五星安全评级项目中新增了四项「及格/不及格」测试,分别针对行人自动紧急制动、盲点警告、盲点干预以及车道保持辅助功能进行评估。这些测试主要考察车辆在潜在碰撞风险和车道偏离等情境下的应对能力,从而为消费者提供更具可比性和参考价值的官方指标。

特斯拉方面已自行完成相关项目测试,并将结果提交给 NHTSA 审核,这是今年车企可选择采用的一条路径。NHTSA 表示将对特斯拉提供的数据进行确认;如果车企宣称通过 ADAS 评估,但在核查测试中未能达标,相关功能的官方「通过」认可将被撤销。

TechCrunch 指出,目前尚不清楚还有哪些车型正在排队接受相同标准的测试,媒体已就此向 NHTSA 进一步求证,若收到回复将对相关信息进行补充。文章后续更新中增加了一个细节,即确认此次 ADAS 测试是由特斯拉自行完成、并向监管机构报送的结果。(来源:cnBeta)

 

李想回应理想 L9 四年才换代:汽车不是手机,安全验证无法提速、AI 的帮助十分有限

近日,理想汽车创始人、CEO 李想就全新一代理想 L9 换代周期长达四年的疑问进行了公开回应。

理想 L9 于 2022 年 6 月首次上市,截至 2026 年 5 月,其换代周期已接近四年,显著长于当前消费电子行业的迭代速度。

李想对此解释称,汽车产品与手机等消费电子产品有本质区别,汽车直接关乎用户家庭的生命安全,其开发过程存在大量验证工作,必须经过长时间的反复测试与打磨,不可能依循手机的快速迭代逻辑。

他以媒体常见的拆车环节为例,指出车企会将大量路测车拆解开来,反复验证其各项机械与电子系统是否符合设计标定;而获取数量足够多、里程足够长、测试工况足够复杂的路测车本身就是一项需要投入大量时间的工程,无法通过其他方式人为压缩。

李想进一步补充说,尽管 AI 技术眼下发展势头迅猛,但在汽车测试与验证这一具体专业领域,目前对实车验证效率的提升仍然相当有限。(来源:IT 之家)

问界汽车否认被约谈:OTA 内容均依法完成备案并得到批准

5 月 9 日消息,AITO 问界汽车发布声明称,关注到各网络平台出现部分社交账号炒作「8 家车企因锁电被约谈、立案调查」,并将问界列为其一。此为不实信息,纯属造谣。问界汽车严格遵守国家法规,OTA 内容均依法完成备案并得到批准。公司已对相关造谣、传谣内容进行充分取证,并将坚决依法追究其法律责任。

此前,小鹏、特斯拉、理想、蔚来、比亚迪、广汽埃安、极氪已经发布了声明,对「约谈」传闻予以澄清。

此次集中辟谣的导火索,源于昨日一则关于「8 家新能源车企因 OTA『锁电』问题被集中约谈,3 家因违规被立案调查」的案件。然而,监管部门并未对外公开被约谈及被立案调查车企的确切名单。

由于缺乏官方权威信息来源,部分用户通过询问 AI 获得了一份所谓的企业名单,其中涵盖几乎所有主流新能源汽车品牌。这份由 AI 生成名单引发的误解,再加上社交媒体、自媒体和其他渠道捕风捉影的推波助澜,最终形成了一波汹涌的舆论影响。(来源:IT 之家)

 

美团、淘宝、滴滴等平台完成多项算法优化调整

5 月 9 日消息,据中国网信网消息,美团、淘宝闪购、淘宝天猫、京东、滴滴、高德、T3、百度、满帮、货拉拉、拼多多、抖音、携程、去哪儿网等平台积极响应,已实施优化改进措施 63 项,承诺遵守算法要求 139 项,限期推进 125 项,在提升算法透明度、公平性、合理性方面取得初步成效。

网信中国从 7 个方面总结了此轮算法优化的初步成果,包括优化订单分配算法、优化时间预估算法、优化安全保障算法、优化收入抽成算法、优化定价算法、优化申诉处理和提升算法透明度。

中央网信办相关负责人表示,生活服务类平台算法治理取得了初步成效,但个别平台仍存在「选择性整改」「别人不改我不改」等问题,与广大新就业群体和人民群众的期盼期待相比还有不少差距。下一步,中央网信办将会同有关部门,持续抓紧抓实《负面清单》实施工作,进一步压实平台主体责任,适时组织专项检查,评估效果、督促进度。发现存在严重问题的,依法依规处置处罚。(来源:TechWeb)

 

揽派一体,京东快递行业内首推「顺手寄」服务

5 月 9 日消息,京东快递宣布正式推出行业首个揽派一体创新服务——「顺手寄」,让用户在查快递、收快递的同时,还可一键顺手寄件下单。

据介绍,作为末端物流服务的一次模式创新,「顺手寄」服务最大的亮点是实现了收派场景的无缝衔接,有效解决用户寄件需单独预约、等待上门等痛点。

用户在京东物流详情页中即可轻松找到「顺手寄」入口,无论是查询快递进度时,还是快递送达、准备签收时,都能直接点击入口一键完成寄件下单,全程操作简单便捷。

京东快递还推出专属优惠活动,新用户领取「顺手寄」专属优惠券后,寄件可直接抵扣 10 元。(来源:IT 之家)

比亚迪首款闪充插混 SUV 海狮 08 申报,定位海洋网大六座旗舰车型 

在 5 月 9 日晚的第 407 批《道路机动车辆生产企业及产品公告》新产品公示列表中,比亚迪带来了首款闪充插混 SUV 车型——海狮 08。

这款新车先前已在 2026 北京车展首发亮相,定位大六座级别旗舰 SUV,轴距来到 3 米,还搭配了闪充、第二代刀片电池、云辇 A 双腔空悬、后轮转向、天神之眼 5.0 等配置。

比亚迪海洋 8 系是全球首个全系搭载闪充技术的车系,插混版 CLTC 纯电续航达 400km,纯电版续航达 900km。

此外,这款新车长宽高分别为 5115/1999/1800mm,轴距 3030mm。提供纯电、插混两种动力。(来源:IT 之家)

 

上汽 MG 07 车型申报图公布:纯电、插混动力,年内上市

 5 月 9 日消息,工信部发布第 407 批《道路机动车辆生产企业及产品公告》新产品公示,上汽 MG 07 车型现身。

申报信息显示,这款新车车身尺寸为长 4886mm、宽 1900mm、高 1478/1485mm,轴距为 2825mm,新车将提供纯电和插混两种动力可供消费者选择。

上汽 MG 已公布 MG 07 车型「莫雷洛紫」配色官图,新车预计定位 15-20 万元级市场,并于年内上市。

外观层面,MG07 采用轿跑标志性的大溜背造型,新车搭载无框车门、翼子板空气动力学风道以及运动侧裙,辅以黑白撞色运动轮毂,新车配备一体式贯穿尾灯。(来源:IT 之家)

 

微信输入法 Windows 2.0.0/iOS 3.3.0 版发布,新增隔空传送

5 月 9 日消息,微信输入法今日发布 Windows 2.0.0/iOS 3.3.0 版本,新增「隔空传送」,支持跨设备及面对面秒传图片和文件。

该功能于本月初开启内测,本次更新为正式上线。新功能支持跨设备发送图片、视频和文件,除了可以给自己的关联设备「隔空传送」,还可以通过扫码建立连接,与其他人进行传送,无需流量。(来源:IT 之家)

目标 2028 年发射,美国 SkyFall 火星无人机通过关键测试

科技媒体 Ars Technica 5 月 8 日发布博文,报道称美国宇航局正推进新一代火星直升机 SkyFall,并在喷气推进实验室完成关键转子测试。

按计划,SkyFall 最早可在 2028 年底发射,并一次向火星投送 3 架直升机。

据悉,「机智号」已证明火星飞行可行。这架仅重 1.8 千克、旋翼直径约 1.2 米的小型直升机,原定 30 天飞 5 次,最终却完成 72 次飞行,直到 2024 年 1 月坠地结束任务。

但 SkyFall 面对的要求更高。火星大气密度只有地球海平面的 1%,想获得足够升力,旋翼必须转得更快,机体越重,对升力需求越高。

「机智号」的碳纤维旋翼转速已达 2700 rpm,大约是地球载人直升机的 10 倍。不过当时工程师刻意把叶尖速度控制在 Mach 0.7,避免顶着逆风时突破音障后发生结构破裂。

美国宇航局为了验证更高速度是否安全,其喷气推进实验室与 AeroVironment 在模拟火星环境的测试舱里,把新旋翼一路推到超音速。

测试时,舱内转速最高达到 3750 rpm,随后工程师再加入逆风,让叶尖最终达到 Mach 1.08。由于事前无法完全确认叶片是否会碎裂,团队还特意用金属板保护测试舱局部区域。

这轮测试覆盖两种方案。第一组采用 3 叶片设计,面向 SkyFall 之后的任务;第二组采用 SkyFall 将使用的 2 叶片设计。后者叶片略长,因此在更低转速下也能达到相同超音速。(来源:IT 之家)

 

 

 

每日一题-达到末尾下标所需的最大跳跃次数🟡

2026年5月10日 00:00

给你一个下标从 0 开始、由 n 个整数组成的数组 nums 和一个整数 target

你的初始位置在下标 0 。在一步操作中,你可以从下标 i 跳跃到任意满足下述条件的下标 j

  • 0 <= i < j < n
  • -target <= nums[j] - nums[i] <= target

返回到达下标 n - 1 处所需的 最大跳跃次数

如果无法到达下标 n - 1 ,返回 -1

 

示例 1:

输入:nums = [1,3,6,4,1,2], target = 2
输出:3
解释:要想以最大跳跃次数从下标 0 到下标 n - 1 ,可以按下述跳跃序列执行操作:
- 从下标 0 跳跃到下标 1 。 
- 从下标 1 跳跃到下标 3 。 
- 从下标 3 跳跃到下标 5 。 
可以证明,从 0 到 n - 1 的所有方案中,不存在比 3 步更长的跳跃序列。因此,答案是 3 。 

示例 2:

输入:nums = [1,3,6,4,1,2], target = 3
输出:5
解释:要想以最大跳跃次数从下标 0 到下标 n - 1 ,可以按下述跳跃序列执行操作:
- 从下标 0 跳跃到下标 1 。 
- 从下标 1 跳跃到下标 2 。 
- 从下标 2 跳跃到下标 3 。 
- 从下标 3 跳跃到下标 4 。 
- 从下标 4 跳跃到下标 5 。 
可以证明,从 0 到 n - 1 的所有方案中,不存在比 5 步更长的跳跃序列。因此,答案是 5 。 

示例 3:

输入:nums = [1,3,6,4,1,2], target = 0
输出:-1
解释:可以证明不存在从 0 到 n - 1 的跳跃序列。因此,答案是 -1 。 

 

提示:

  • 2 <= nums.length == n <= 1000
  • -109 <= nums[i] <= 109
  • 0 <= target <= 2 * 109

被 AI 重新激活的「无屏手环」,成了大厂争抢的运动健康新赛道

2026年5月9日 23:44
Image
硬件只是入口,AI 才是产品。

作者|张勇毅

编辑|靖宇
 

2026 年 5 月 7 日,Google 发布了一款叫 Fitbit Air 的健康手环。99.99 美元,没有屏幕,配套一个叫 Google Health Coach 的 AI 订阅服务,每月 10 美元。

同一天,沿用了十几年的 Fitbit App 改名 Google Health。

Image

Fitbit Air  | 图片来源:Google

 

这是 Google 在 2021 年花 21 亿美元买下 Fitbit 之后的第五年。整整 5 年时间,他们把 Fitbit 拆了又拆,最后交出来的答卷,是一款没有屏的手环。

Image

Google Health  | 图片来源:Google

 

如果把这件事放在 5 年前,几乎没人会信。那时候 Apple Watch 已经把「穿戴 + 健康」的剧本定成了「屏幕越大、传感器越多、功能越全」——「无屏手环」被普遍认为是品类的终点,不是新起点。但过去 12 个月发生的事情把这个共识打碎了。

01

一个被宣告死亡的品类

 

WHOOP 在 2026 年 3 月以 101 亿美元估值完成 Series G 融资,Oura 在 2025 年 10 月完成 Series E 之后估值达到 110 亿美元。两家公司加起来,年营收超过 20 亿美元——听起来像一家中型科技公司的体量。但他们的产品都是同一个东西:一块没有屏幕、戴在手上或手指上的传感器

无屏手环这个品类有过一次完整的繁荣周期:2014 年,第一代小米手环和 Fitbit Flex 把这个形态推到大众面前,几十块到几百块不等,主要用来计步、看心率。那是无屏手环的第一个春天。

但直到 Apple Watch 出现。然后是华为手环、小米手环陆续加屏、加 NFC、加表盘自定义。「手环 + 屏」逐渐成了主流叙事,无屏的版本像被逐出了正史——很多人在 2022 年前后会用「过时品类」来形容它。我自己当时也是这么想的。

只是没人注意到,沉默的两个玩家在持续生长。Oura Ring 累计销量 550 万枚,其中 2025 年单年就卖了 300 万枚——超过过去 11 年的总和。WHOOP 的会员从 2020 年的几十万人涨到现在的 250 万人以上,2025 年现金流首次转正。

Image

Whoop 手环的无屏设计放在当下仍然非常特立独行 | 图片来源:Whoop

 

然后是过去 12 个月,无屏手环形态以迅雷不及掩耳的速度疯狂拓展生态——

  • 2025 年 5 月,WHOOP 5.0 / MG 发布,引入医疗级 ECG 和 Healthspan 这种「衰老速度」的概念

  • 2025 年 6 月,华米旗下 Amazfit 推出 Helio Strap,99 美元一次性买断,正面对标 WHOOP 的订阅

  • 2025 年 9 月,芬兰运动品牌 Polar 推出 Polar Loop,从有屏手表反向做无屏

  • 2026 年 5 月 7 日,Google Fitbit Air 上市

一个被宣告死亡的品类,在 12 个月里完成了估值翻倍 + 巨头入场两件事。

这场复活的真正功臣,不是硬件——是 AI。

02

无屏,从局限到立场

 

要理解这场复活,得先把「无屏」这件事的历史含义讲清楚。

最早期的无屏手环——2014 年的第一代小米手环、更早的 Fitbit Flex——之所以无屏,是不得已。那个时候做小尺寸 OLED 又贵又费电,硬件能塞下传感器和电池就不错了,屏幕只能省掉。所以「无屏」在那个阶段是硬件局限的妥协,不是产品立场。

Image

初代小米手环是一代人的青春 | 图片来源:六分超超

 

但 WHOOP 不一样。这家波士顿公司从 2012 年成立第一天起,就把屏幕主动拿掉了。他们的逻辑是——运动员不需要在手腕上看一堆数据,他们需要的是「读懂数据后的建议」。这种思路在 2023 年之前一直是小众路线,绝大多数同行都在加屏,WHOOP 是那个执拗地不加的人。

转折发生在 2023 年 9 月,WHOOP 接入了 GPT-4,发布了 WHOOP Coach——第一个真正意义上的「AI 健康教练」。CTO Jaime Waydo 把它叫做「a search engine for your body」(一个为你身体服务的搜索引擎)。从这一刻开始,「无屏」的意义被重写了——屏幕没有消失,它只是搬到了手机上、变成了一个会回答你问题的 AI。

如果对比有屏手表和 WHOOP,差别会变得很直观。

戴 Apple Watch 这类有屏手表,你早上抬手会看到——心率 72,HRV 48ms,睡眠 6 小时 34 分。这是数据。

戴 WHOOP,你早上打开手机会看到——「今天的恢复值是 65%,建议把训练强度调到 6 成。原因是你昨晚的深睡只有 1 小时 12 分,比你平时少 23%。」这是建议。

同样的传感器、同样的原始数据,呈现出来的产品形态完全不同。前者把数据交给你自己解读,后者直接给你下一步行动。

AI 不是在装饰这个产品,是这个产品本身。

而且 WHOOP 还在让 AI 走得更远。就在我写这篇稿的当天——2026 年 5 月 8 日——他们在 v5.3 beta 里悄悄上线了一个叫 Memory 的功能。用户可以告诉 AI Coach「我在恢复膝伤」「最近因为工作压力睡不好」,AI 会把这些 context 记下来,影响后续所有的 coaching。

这是从「问答式 chat」走向「长期 coaching relationship」的一步

Will Ahmed(WHOOP 创始人兼 CEO)在 Walker Webcast 的采访里说过一句话——他们做的不是手环,是「health operating system」,一个能在心脏病、中风发生之前就预警的系统。

走在这条路上的不只是 WHOOP。

Oura 的路径不一样。它在 2025 年收购了赫尔辛基一家做 AI 手势识别的公司 Doublepoint,然后发布了一个专门为女性健康训练的 LLM——服务的是月经、孕期、更年期等场景。Oura 的 AI 不在「教练」这个壳里,而是「私人健康顾问」的角色,对应的用户群体也偏女性。

Google 昨天交出来的是第三种打法——也是野心最大的那种。Gemini Health Coach 不只服务无屏手环这一种硬件,它要把 Pixel Watch、Fitbit、Health Connect、甚至第三方设备的数据全部归集到一个 AI 顾问里。

Image

Google Health 是本次硬件发布背后的杀手锏 | 图片来源:Google

 

三家走的是三条不同的 AI 路线。但都在做同一件事——

让「无屏」从一种硬件局限,变成一种产品立场。

当 AI 把「显示和交互」这一层从硬件搬走,硬件本身就退化了。它变成了别的东西。

03

真正在卖的,不是手环

 

把这件事翻译到商业模式层面,就出现了无屏手环故事里最反直觉的一部分:WHOOP 在全球手环市场的份额只有 2%。Fitbit 的市占率是 6%,是 WHOOP 的三倍。但 Google 在 2021 年只花了 21 亿美元收购 Fitbit。WHOOP 现在的估值是 101 亿美元——是当年 Fitbit 收购价的 4.8 倍。

一个市占率只有对方三分之一的品牌,估值是对方的几倍。 这种倒挂只能用一个东西来解释——商业模式不一样。

现在市面上无屏手环这个品类里,至少有四种典型的「钱该怎么收」的玩法,并存竞争。

第一种是 WHOOP 的纯订阅。硬件免费送,年费 199 到 359 美元三档,目前 250 万会员,run rate 接近 11 亿美元。

第二种是 Oura 的「硬件主导 + 订阅辅助」。戒指本身 299 到 549 美元,再加每月 5.99 美元订阅。从 2024 年财报看,硬件收入 3.9 亿美元,订阅收入 1.1 亿美元——80/20 的硬件主导。

第三种是 Polar Loop 和 Amazfit Helio Strap 选的反订阅路线。99 到 199 美元一次性买断,没有任何订阅,软件免费用。它们的潜台词写在新闻稿里——「all features available from day one without monthly fees」(所有功能从第一天就可用,无需月费),这话是冲着 WHOOP 喊的。

第四种是 Google 昨天提出的新混合模式。99 美元硬件 + 10 美元/月的 Gemini Health Coach 订阅,但订阅是可选的——免费用户也能看基础数据,但「AI 健康顾问」是订阅专属。

Image

Google 在 App 内提供多种层级的  AI 健康监测服务 | 图片来源:Google

 

四种模式背后是同一个判断——硬件能值多少钱,大家心里都有数。

WHOOP 的硬件在深圳代工,单台制造成本不到 100 元 RMB(36 氪 2024 年的一次访谈披露)。Fitbit Air 12 克塑料加几颗传感器,成本可能更低。如果只是卖硬件,这些产品没有道理估值 100 多亿美元。

真正撑住估值的,是订阅服务的 LTV。

一个 WHOOP 会员每年付 239 美元(Peak 套餐均值),如果留存 5 年,LTV 就是 1195 美元——远超硬件单价。这是为什么 Tom Hale(Oura CEO)在 2025 年那次 Fortune 采访里反复强调,「硬件 + 订阅的组合,让我们和纯硬件公司不在一个估值 level」。这话是讲给 Fidelity 和 Iconiq 听的——他在跟投资人算 SaaS 估值乘数,不是消费电子的乘数。

而且消费者的心理结构正在被这套模式重写。

2025 年 5 月 WHOOP 5.0 发布的时候,他们一度向老会员收 49 到 79 美元的硬件升级费——结果在 Reddit 上被骂上了 Bloomberg,史称「Whoopgate」。最终 WHOOP 改回「订阅满 12 个月或更长的用户免费升级」才平息。

这件事最有意思的不是 WHOOP 改没改价,而是用户的反应——他们觉得「我都付订阅费了,硬件应该是免费的」。这种期望落差本身就证明,订阅模式已经把消费者的心理结构改写了——硬件在他们眼里,不再是「需要付钱的产品」,而是「订阅服务的一部分,应该送」。

硬件只是入口。AI 才是产品。

这件事如果只有 WHOOP 和 Oura 看到了,还可以叫他们「小众派」。但 Google 也看到了——昨天 Fitbit Air 的发布,不是一次产品迭代,是一次范式宣告。

04

Google 想清楚了

 

5 月 7 日的 Fitbit Air 发布,我读了几遍 Google 的官方博客。发现最有意思的不是硬件,是它同时做了三件事——

发了一款 99 美元的无屏手环;上线了一个 Gemini 驱动的 Health Coach;把沿用十几年的 Fitbit App 正式改名 Google Health。

三件事必须放在一起看,才是真正的「产品逻辑」:Fitbit 这个老牌品牌被放到次要位置,让位于 Gemini 驱动的全新 Google Health 推到 C 位。Fitbit Air 是入场的硬件,Gemini 是引擎,Google Health 是平台。

Google 真正想取代的不是 WHOOP,是 Apple Health。

Apple Watch 已经用了 10 年时间把「穿戴 + 健康数据」做成一个相对封闭的生态——Apple Health 这个数据中枢沉淀了几代用户,但它一直缺一层「AI 顾问」。Google 用 Gemini 把这个空缺先占下来——99 美元的硬件只是分发渠道,让用户进入 Google Health 这个新平台。

平台才是真正的产品。

回到 2014 年——第一代小米手环出来那年,它也是无屏的。

12 年过去,小米手环已经做到第十代,屏幕越做越大,几乎是块小手表。WHOOP 走的是另一条路——12 年里把屏幕一直坚持不加,反而做成了 100 亿美元的生意。如今 Google 带着 Gemini 杀到,准备再次书写一个巨头故事。

同一个起点。两条完全不同的路。

无屏的那条路一度被宣告死亡。但 AI 把它重新打开了。

下一个 12 年呢?

*头图来源:Google Fitness
本文为极客公园原创文章,转载请联系极客君微信 geekparkGO
极客一问
当 AI 接管了「看数据」这件事,
你还需要手表的屏幕吗?
Image
Image
Image
Image

 

C++, 动态规划

作者 liu-xiang-3
2023年7月12日 12:57

思路

  1. f[i]表示从0到下标i的最大跳跃次数;
  2. f[0]=0, f[i]=f[j]+1, 可以从j跳过来;
class Solution {
public:
    int maximumJumps(vector<int>& nums, int target) {
        int n = nums.size();
        vector<int> f(n, -1);
        f[0] = 0;
        /* 开始递推 */
        for (int i = 1; i < n; i++) {
            for (int j = 0; j < i; j++) {
                if (f[j] != -1 && abs(nums[i] - nums[j]) <= target) {
                    f[i] = max(f[i], f[j] + 1);
                }
            }
        }
        return f[n - 1];
    }
};
class Solution:
    def maximumJumps(self, nums: List[int], target: int) -> int:
        n = len(nums)
        f = [-1] * n
        f[0] = 0
        for j in range(1, n):
            for i in range(j):
                if f[i] != -1 and abs(nums[i] - nums[j]) <= target:
                    f[j] = max(f[j], f[i] + 1)
        return f[-1]

【什码情况】Java记忆化搜索

作者 smqk
2023年7月9日 15:37

image.png{:width=400}

解题思路

此处撰写解题思路

代码

###java

class Solution {
    // jump[i] 表示从下标 0 开始跳到 nums[i] 所需的最大跳跃次数
    int[] jump;

    public int maximumJumps(int[] nums, int target) {
        this.jump = new int[nums.length];
        Arrays.fill(jump, Integer.MIN_VALUE);
        jump[0] = 0;
        int maximumJumps = dfs(nums, nums.length - 1, target);
        return maximumJumps >= 0 ? maximumJumps : -1;
    }

    // 返回从下标 i 跳到下标 0 所需最大的跳跃次数
    private int dfs(int[] nums, int i, int target) {
        if (jump[i] != Integer.MIN_VALUE) {
            return jump[i];
        }

        int max = Integer.MIN_VALUE;
        for (int j = i - 1; j >= 0; j--) {
            int val = nums[j] - nums[i];
            if (-target <= val && val <= target) {
                int jump = dfs(nums, j, target) + 1;
                max = Math.max(max, jump);
            }
        }

        return jump[i] = max;
    }

}

最后

如果有帮助到你,请给题解点个收藏,让更多的人看到 ~ ("▔□▔)/

两种方法:普通 DP / 值域线段树优化 DP(Python/Java/C++/Go)

作者 endlesscheng
2023年7月9日 12:09

一、寻找子问题

想一想,最后一步发生了什么?

最后一步,我们从某个满足条件的下标 $i$ 跳到了下标 $n-1$。

枚举满足条件的 $i$,问题变成:

  • 从下标 $0$ 到达下标 $i$ 所需的最大跳跃次数。

这是和原问题相似的、规模更小的子问题,可以用递归解决。

注:从右往左思考,主要是方便把递归翻译成从左往右的递推。从左往右思考也是可以的。

二、状态定义与状态转移方程

根据上面的讨论,定义 $\textit{dfs}(j)$ 表示从下标 $0$ 到达下标 $j$ 所需的最大跳跃次数。

枚举满足 $0\le i<j$ 且 $|\textit{nums}[i]-\textit{nums}[j]|\le \textit{target}$ 的下标 $i$,问题变成从下标 $0$ 到达下标 $i$ 所需的最大跳跃次数,再加上从 $i$ 跳到 $j$ 的一次。

取最大值,得

$$
\textit{dfs}(j) = \max_{i} \textit{dfs}(i) + 1
$$

其中 $0\le i<j$ 且 $|\textit{nums}[i]-\textit{nums}[j]|\le \textit{target}$。

递归边界

  • $\textit{dfs}(0)=0$。从 $0$ 到 $0$ 不用跳。
  • 如果没有满足条件的 $i$,那么 $\textit{dfs}(j) = -\infty$。

递归入口:$\textit{dfs}(n-1)$,这是原问题,也是答案。

三、递归搜索 + 保存递归返回值 = 记忆化搜索

考虑到整个递归过程中有大量重复递归调用(递归入参相同)。由于递归函数没有副作用,同样的入参无论计算多少次,算出来的结果都是一样的,因此可以用记忆化搜索来优化:

  • 如果一个状态(递归入参)是第一次遇到,那么可以在返回前,把状态及其结果记到一个 $\textit{memo}$ 数组中。
  • 如果一个状态不是第一次遇到($\textit{memo}$ 中保存的结果不等于 $\textit{memo}$ 的初始值),那么可以直接返回 $\textit{memo}$ 中保存的结果。

Python 用户可以无视上面这段,直接用 @cache 装饰器。

关于记忆化搜索的原理,请看视频讲解 动态规划入门:从记忆化搜索到递推【基础算法精讲 17】,其中包含把记忆化搜索 1:1 翻译成递推的技巧。

class Solution:
    def maximumJumps(self, nums: List[int], target: int) -> int:
        @cache  # 缓存装饰器,避免重复计算 dfs(一行代码实现记忆化)
        def dfs(j: int) -> int:
            if j == 0:  # 起点
                return 0
            res = -inf
            for i in range(j):
                if abs(nums[i] - nums[j]) <= target:  # 可以从 i 跳到 j
                    res = max(res, dfs(i) + 1)
            return res

        ans = dfs(len(nums) - 1)  # 终点
        return -1 if ans < 0 else ans
class Solution {
    public int maximumJumps(int[] nums, int target) {
        int n = nums.length;
        int[] memo = new int[n];
        int ans = dfs(n - 1, nums, target, memo);
        return ans < 0 ? -1 : ans;
    }

    private int dfs(int j, int[] nums, int target, int[] memo) {
        if (j == 0) { // 起点
            return 0;
        }

        if (memo[j] != 0) { // 之前计算过
            return memo[j];
        }

        int res = Integer.MIN_VALUE;
        for (int i = 0; i < j; i++) {
            if (Math.abs(nums[i] - nums[j]) <= target) { // 可以从 i 跳到 j
                res = Math.max(res, dfs(i, nums, target, memo) + 1);
            }
        }
        memo[j] = res; // 记忆化
        return res;
    }
}
class Solution {
public:
    int maximumJumps(vector<int>& nums, int target) {
        int n = nums.size();
        vector<int> memo(n);

        auto dfs = [&](this auto&& dfs, int j) -> int {
            if (j == 0) { // 起点
                return 0;
            }

            int& res = memo[j]; // 注意这里是引用
            if (res) { // 之前计算过
                return res;
            }

            res = INT_MIN;
            for (int i = 0; i < j; i++) {
                if (abs(nums[i] - nums[j]) <= target) { // 可以从 i 跳到 j
                    res = max(res, dfs(i) + 1);
                }
            }
            return res;
        };

        int ans = dfs(n - 1); // 终点
        return ans < 0 ? -1 : ans;
    }
};
func maximumJumps(nums []int, target int) int {
n := len(nums)
memo := make([]int, n)

var dfs func(int) int
dfs = func(j int) int {
if j == 0 { // 起点
return 0
}

p := &memo[j]
if *p != 0 { // 之前计算过
return *p
}

res := math.MinInt
for i, x := range nums[:j] {
if abs(x-nums[j]) <= target { // 可以从 i 跳到 j
res = max(res, dfs(i)+1)
}
}
*p = res // 记忆化
return res
}

ans := dfs(n - 1) // 终点
if ans < 0 {
return -1
}
return ans
}

func abs(x int) int {
if x < 0 {
return -x
}
return x
}

复杂度分析

  • 时间复杂度:$\mathcal{O}(n^2)$,其中 $n$ 是 $\textit{nums}$ 的长度。由于每个状态只会计算一次,动态规划的时间复杂度 $=$ 状态个数 $\times$ 单个状态的计算时间。本题状态个数等于 $\mathcal{O}(n)$,单个状态的计算时间为 $\mathcal{O}(n)$,所以总的时间复杂度为 $\mathcal{O}(n^2)$。
  • 空间复杂度:$\mathcal{O}(n)$。保存多少状态,就需要多少空间。

四、1:1 翻译成递推

我们可以去掉递归中的「递」,只保留「归」的部分,即自底向上计算。

具体来说,$f[j]$ 的定义和 $\textit{dfs}(j)$ 的定义是完全一样的,都表示从下标 $0$ 到达下标 $j$ 所需的最大跳跃次数。

相应的递推式(状态转移方程)也和 $\textit{dfs}$ 一样:

$$
f[j] = \max_{i} f[i] + 1
$$

其中 $0\le i<j$ 且 $|\textit{nums}[i]-\textit{nums}[j]|\le \textit{target}$。

如果没有满足条件的 $i$,那么 $f[j] = -\infty$。

初始值 $f[0]=0$,翻译自递归边界 $\textit{dfs}(0)=0$。

答案为 $f[n-1]$,翻译自递归入口 $\textit{dfs}(n-1)$。

class Solution:
    def maximumJumps(self, nums: List[int], target: int) -> int:
        n = len(nums)
        f = [-inf] * n
        f[0] = 0
        for j in range(1, n):
            for i in range(j):
                if abs(nums[i] - nums[j]) <= target:  # 可以从 i 跳到 j
                    f[j] = max(f[j], f[i] + 1)
        return -1 if f[-1] < 0 else f[-1]
class Solution {
    public int maximumJumps(int[] nums, int target) {
        int n = nums.length;
        int[] f = new int[n];
        for (int j = 1; j < n; j++) {
            f[j] = Integer.MIN_VALUE;
            for (int i = 0; i < j; i++) {
                if (Math.abs(nums[i] - nums[j]) <= target) { // 可以从 i 跳到 j
                    f[j] = Math.max(f[j], f[i] + 1);
                }
            }
        }
        return f[n - 1] < 0 ? -1 : f[n - 1];
    }
}
class Solution {
public:
    int maximumJumps(vector<int>& nums, int target) {
        int n = nums.size();
        vector<int> f(n, INT_MIN);
        f[0] = 0;
        for (int j = 1; j < n; j++) {
            for (int i = 0; i < j; i++) {
                if (abs(nums[i] - nums[j]) <= target) { // 可以从 i 跳到 j
                    f[j] = max(f[j], f[i] + 1);
                }
            }
        }
        return f[n - 1] < 0 ? -1 : f[n - 1];
    }
};
func maximumJumps(nums []int, target int) int {
n := len(nums)
f := make([]int, n)

for j := 1; j < n; j++ {
f[j] = math.MinInt
for i, x := range nums[:j] {
if abs(x-nums[j]) <= target { // 可以从 i 跳到 j
f[j] = max(f[j], f[i]+1)
}
}
}

if f[n-1] < 0 {
return -1
}
return f[n-1]
}

func abs(x int) int {
if x < 0 {
return -x
}
return x
}

复杂度分析

  • 时间复杂度:$\mathcal{O}(n^2)$,其中 $n$ 是 $\textit{nums}$ 的长度。
  • 空间复杂度:$\mathcal{O}(n)$。

五、值域线段树优化 DP

如果 $n=10^5$,上面的做法就超时了。

遍历到 $\textit{nums}[j]$ 时,我们需要知道满足 $\textit{nums}[j]-\textit{target} \le \textit{nums}[i] \le \textit{nums}[j]+\textit{target}$ 的最大的 $f[i]$。

这可以用一棵值域线段树维护。线段树的区间是值域区间,例如区间 $[20,23]$ 指的是 $\textit{nums}$ 中的元素 $20,21,22,23$。线段树的每个节点保存的是值域区间对应的最大的 $f[i]$。例如 $\textit{nums}[4]=20$ 且 $f[4] = 3$,那么线段树维护的位置 $20$ 更新为 $3$。

如此一来,满足 $\textit{nums}[j]-\textit{target} \le \textit{nums}[i] \le \textit{nums}[j]+\textit{target}$ 的最大的 $f[i]$,可以通过线段树的区间最值查询得到。

# 完整的线段树模板见 https://leetcode.cn/circle/discuss/mOr1u6/
class SegmentTree:
    def __init__(self, n: int) -> None:
        self.t = [-inf] * (2 << (n - 1).bit_length())

    def update(self, node: int, l: int, r: int, i: int, val: int) -> None:
        if l == r:  # 叶子
            self.t[node] = val
            return
        m = (l + r) // 2
        if i <= m:  # i 在左子树
            self.update(node * 2, l, m, i, val)
        else:  # i 在右子树
            self.update(node * 2 + 1, m + 1, r, i, val)
        self.t[node] = max(self.t[node * 2], self.t[node * 2 + 1])

    def query(self, node: int, l: int, r: int, ql: int, qr: int) -> int:
        if ql <= l and r <= qr:  # 当前子树完全在 [ql, qr] 内
            return self.t[node]
        m = (l + r) // 2
        if qr <= m:  # [ql, qr] 在左子树
            return self.query(node * 2, l, m, ql, qr)
        if ql > m:  # [ql, qr] 在右子树
            return self.query(node * 2 + 1, m + 1, r, ql, qr)
        return max(self.query(node * 2, l, m, ql, qr), self.query(node * 2 + 1, m + 1, r, ql, qr))


class Solution:
    def maximumJumps(self, nums: List[int], target: int) -> int:
        # 去重排序,便于离散化
        sorted_nums = sorted(set(nums))

        n = len(nums)
        m = len(sorted_nums)
        t = SegmentTree(m)  # 值域线段树

        # nums[0] 对应的 f[0] = 0
        t.update(1, 0, m - 1, bisect_left(sorted_nums, nums[0]), 0)

        for j in range(1, n):
            l = bisect_left(sorted_nums, nums[j] - target)       # >= nums[j]-target 的第一个数
            r = bisect_right(sorted_nums, nums[j] + target) - 1  # <= nums[j]+target 的最后一个数
            # t.query 返回满足 nums[j]-target <= nums[i] <= nums[j]+target 的最大的 f[i]
            fj = t.query(1, 0, m - 1, l, r) + 1
            t.update(1, 0, m - 1, bisect_left(sorted_nums, nums[j]), fj)

        return -1 if fj < 0 else fj
class Solution {
    // 完整的线段树模板见 https://leetcode.cn/circle/discuss/mOr1u6/
    private int[] tree;

    private void update(int node, int l, int r, int i, int val) {
        if (l == r) { // 叶子
            tree[node] = val;
            return;
        }
        int m = (l + r) / 2;
        if (i <= m) { // i 在左子树
            update(node * 2, l, m, i, val);
        } else { // i 在右子树
            update(node * 2 + 1, m + 1, r, i, val);
        }
        tree[node] = Math.max(tree[node * 2], tree[node * 2 + 1]);
    }

    private int query(int node, int l, int r, int ql, int qr) {
        if (ql <= l && r <= qr) { // 当前子树完全在 [ql, qr] 内
            return tree[node];
        }
        int m = (l + r) / 2;
        if (qr <= m) { // [ql, qr] 在左子树
            return query(node * 2, l, m, ql, qr);
        }
        if (ql > m) { // [ql, qr] 在右子树
            return query(node * 2 + 1, m + 1, r, ql, qr);
        }
        return Math.max(query(node * 2, l, m, ql, qr), query(node * 2 + 1, m + 1, r, ql, qr));
    }

    public int maximumJumps(int[] nums, int target) {
        int n = nums.length;
        int[] sorted = nums.clone(); // 用于离散化
        Arrays.sort(sorted);

        tree = new int[2 << (32 - Integer.numberOfLeadingZeros(n - 1))];
        Arrays.fill(tree, Integer.MIN_VALUE);

        // nums[0] 对应的 f[0] = 0
        update(1, 0, n - 1, lowerBound(sorted, nums[0]), 0);

        for (int j = 1; ; j++) {
            int l = lowerBound(sorted, (long) nums[j] - target);         // >= nums[j]-target 的第一个数
            int r = lowerBound(sorted, (long) nums[j] + target + 1) - 1; // <= nums[j]+target 的最后一个数
            // query 返回满足 nums[j]-target <= nums[i] <= nums[j]+target 的最大的 f[i]
            int fj = query(1, 0, n - 1, l, r) + 1;
            if (j == n - 1) {
                return fj < 0 ? -1 : fj;
            }
            update(1, 0, n - 1, lowerBound(sorted, nums[j]), fj);
        }
    }

    // 见 https://www.bilibili.com/video/BV1AP41137w7/
    private int lowerBound(int[] nums, long target) {
        int left = -1;
        int right = nums.length;
        while (left + 1 < right) {
            int mid = (left + right) >>> 1;
            if (nums[mid] >= target) {
                right = mid;
            } else {
                left = mid;
            }
        }
        return right;
    }
}
// 完整的线段树模板见 https://leetcode.cn/circle/discuss/mOr1u6/
class SegmentTree {
    vector<int> tree;

public:
    SegmentTree(int n) : tree(2 << bit_width(n - 1u), INT_MIN) {}

    void update(int node, int l, int r, int i, int val) {
        if (l == r) { // 叶子
            tree[node] = val;
            return;
        }
        int m = (l + r) / 2;
        if (i <= m) { // i 在左子树
            update(node * 2, l, m, i, val);
        } else { // i 在右子树
            update(node * 2 + 1, m + 1, r, i, val);
        }
        tree[node] = max(tree[node * 2], tree[node * 2 + 1]);
    }

    int query(int node, int l, int r, int ql, int qr) const {
        if (ql <= l && r <= qr) { // 当前子树完全在 [ql, qr] 内
            return tree[node];
        }
        int m = (l + r) / 2;
        if (qr <= m) { // [ql, qr] 在左子树
            return query(node * 2, l, m, ql, qr);
        }
        if (ql > m) { // [ql, qr] 在右子树
            return query(node * 2 + 1, m + 1, r, ql, qr);
        }
        return max(query(node * 2, l, m, ql, qr), query(node * 2 + 1, m + 1, r, ql, qr));
    }
};

class Solution {
public:
    int maximumJumps(vector<int>& nums, int target) {
        // 排序去重,便于离散化
        auto sorted = nums;
        ranges::sort(sorted);
        sorted.erase(ranges::unique(sorted).begin(), sorted.end());

        int n = nums.size();
        int m = sorted.size();

        SegmentTree t(m); // 值域线段树

        // nums[0] 对应的 f[0] = 0
        int pos = ranges::lower_bound(sorted, nums[0]) - sorted.begin();
        t.update(1, 0, m - 1, pos, 0);

        long long tar = target;
        for (int j = 1; ; j++) {
            int l = ranges::lower_bound(sorted, nums[j] - tar) - sorted.begin();     // >= nums[j]-target 的第一个数
            int r = ranges::upper_bound(sorted, nums[j] + tar) - sorted.begin() - 1; // <= nums[j]+target 的最后一个数
            // t.query 返回满足 nums[j]-target <= nums[i] <= nums[j]+target 的最大的 f[i]
            int fj = t.query(1, 0, m - 1, l, r) + 1;
            if (j == n - 1) {
                return fj < 0 ? -1 : fj;
            }
            pos = ranges::lower_bound(sorted, nums[j]) - sorted.begin();
            t.update(1, 0, m - 1, pos, fj);
        }
    }
};
// 完整的线段树模板见 https://leetcode.cn/circle/discuss/mOr1u6/
type seg []int

func (t seg) update(node, l, r, i, val int) {
if l == r { // 叶子
t[node] = val
return
}
m := (l + r) / 2
if i <= m { // i 在左子树
t.update(node*2, l, m, i, val)
} else { // i 在右子树
t.update(node*2+1, m+1, r, i, val)
}
t[node] = max(t[node*2], t[node*2+1])
}

func (t seg) query(node, l, r, ql, qr int) int {
if ql <= l && r <= qr { // 当前子树完全在 [ql, qr] 内
return t[node]
}
m := (l + r) / 2
if qr <= m { // [ql, qr] 在左子树
return t.query(node*2, l, m, ql, qr)
}
if ql > m { // [ql, qr] 在右子树
return t.query(node*2+1, m+1, r, ql, qr)
}
return max(t.query(node*2, l, m, ql, qr), t.query(node*2+1, m+1, r, ql, qr))
}

func maximumJumps(nums []int, target int) int {
// 排序去重,便于离散化
sorted := slices.Clone(nums)
slices.Sort(sorted)
sorted = slices.Compact(sorted)

n := len(nums)
m := len(sorted)

t := make(seg, 2<<bits.Len(uint(m-1))) // 值域线段树
for i := range t {
t[i] = math.MinInt
}

// nums[0] 对应的 f[0] = 0
t.update(1, 0, m-1, sort.SearchInts(sorted, nums[0]), 0)

for j := 1; ; j++ {
l := sort.SearchInts(sorted, nums[j]-target)       // >= nums[j]-target 的第一个数
r := sort.SearchInts(sorted, nums[j]+target+1) - 1 // <= nums[j]+target 的最后一个数
// t.query 返回满足 nums[j]-target <= nums[i] <= nums[j]+target 的最大的 f[i]
fj := t.query(1, 0, m-1, l, r) + 1
if j == n-1 {
if fj < 0 {
return -1
}
return fj
}
t.update(1, 0, m-1, sort.SearchInts(sorted, nums[j]), fj)
}
}

复杂度分析

  • 时间复杂度:$\mathcal{O}(n\log n)$,其中 $n$ 是 $\textit{nums}$ 的长度。
  • 空间复杂度:$\mathcal{O}(n)$。

相似题目

2407. 最长递增子序列 II

更多相似题目,见下面动态规划题单的「§11.4 树状数组/线段树优化 DP」和「专题:跳跃游戏」。

分类题单

如何科学刷题?

  1. 滑动窗口与双指针(定长/不定长/单序列/双序列/三指针/分组循环)
  2. 二分算法(二分答案/最小化最大值/最大化最小值/第K小)
  3. 单调栈(基础/矩形面积/贡献法/最小字典序)
  4. 网格图(DFS/BFS/综合应用)
  5. 位运算(基础/性质/拆位/试填/恒等式/思维)
  6. 图论算法(DFS/BFS/拓扑排序/基环树/最短路/最小生成树/网络流)
  7. 动态规划(入门/背包/划分/状态机/区间/状压/数位/数据结构优化/树形/博弈/概率期望)
  8. 常用数据结构(前缀和/差分/栈/队列/堆/字典树/并查集/树状数组/线段树)
  9. 数学算法(数论/组合/概率期望/博弈/计算几何/随机算法)
  10. 贪心与思维(基本贪心策略/反悔/区间/字典序/数学/思维/脑筋急转弯/构造)
  11. 链表、树与回溯(前后指针/快慢指针/DFS/BFS/直径/LCA)
  12. 字符串(KMP/Z函数/Manacher/字符串哈希/AC自动机/后缀数组/子序列自动机)

我的题解精选(已分类)

欢迎关注 B站@灵茶山艾府

昨天 — 2026年5月9日首页

把一份前端 checklist 变成 AI 的 Skill:让 CR 不再靠记忆

作者 jump_jump
2026年5月9日 23:17

引子:一个吃灰三年的项目被重新盘活

写这篇博客的由头有点特别。

我有一个叫 front-end-checklist 的老项目(网页:wsafight.github.io/front-end-c…),2023 年初在公司做 Code Review 的时候顺手整理出来的。那会儿评审新同学的代码,总是在重复同样的话:"这里没做 XSS 转义"、"useEffect 里有竞态"、"label 没和 input 关联"。后来干脆把这些反复出现的问题写成清单,用 Jekyll 挂在 GitHub Pages 上。

然后它就一直在那儿积灰。2024 只有一次提交,2025 只有一次,到了 2026 年 5 月也还没动过。

2026-05-08 晚上,我本来只想顺手改一下清单里过时的条目,结果一头扎进 Claude Code,两小时做了 22 次提交,把这个静态页面彻底改造了一遍。

真正让我想写这篇文章的,不是"AI 让我写代码变快"。快是肯定快,但这次改造最后落到了一件我之前没想过的事情上——一份静态文档,换了个交付形式,才真正开始被用起来。

清单本身:三年沉淀下来的 160 条检查项

先交代清楚这个清单是什么。

它不是 ESLint 能查的那种风格规则,而是 Code Review 时需要结合业务和上下文判断的问题。目前一共 25 个分组、160 条检查项:

命名规范      数据与类型    函数设计      状态管理      控制流
异步处理      数据请求      UI 与渲染     样式与响应式  路由与权限
性能          安全与健壮性  表单与交互    错误处理      测试
无障碍访问    用户体验      代码质量      工程化        国际化
日志与监控    依赖管理      浏览器兼容    文档与协作    PR 自检

随便挑几条看看:

  • 区分"缺失"、"为空"、"为 0"、"为空数组"、"为空字符串"的业务含义
  • 处理并发请求的竞态问题,避免旧响应覆盖新状态
  • 同一表单/输入控件不要在受控与非受控之间切换
  • useEffect / watch 的依赖项必须完整,避免闭包捕获过期值
  • 定时器和事件监听记得清除,否则可能引发内存泄漏
  • 表单错误应定位到具体字段,而不是只给出笼统提示

这些不是靠格式化、类型推导或者简单 AST 规则就能稳定抓出来的问题。它们往往来自真实线上事故、返工、误解和交接成本。以前这些经验只能靠人去记,记不住就会在别的项目里重新踩一次。

痛点:清单挂在网上,但不会进入工作流

清单做完这三年,我一直有个遗憾:没人真的会去翻

我自己都不翻。做一个 PR 的时候,我知道清单里有条"处理并发请求的竞态",但我会不会每次都老老实实打开页面对一遍?不会。同事更不会。新人入职时我会把链接丢给他们,他们收藏,然后就再也不打开了。

这是很多静态文档共同的问题:信息在那里,但你必须主动去触达它。而在 CR 场景里,主动触达的前提是你已经意识到自己可能漏了什么。可真正漏掉的时候,人往往意识不到。

我试过一些办法:

  • 写成 Markdown 放 README:没人会在写代码时切到 README 里逐条对照。
  • 做成可搜索的网页:搜索的前提是你已经知道关键词,可 XSS、竞态、状态错位这类问题,经常就是因为你没意识到该搜什么。
  • 加上勾选和进度追踪:这次改造时我反而把它们删了,因为它把"查阅文档"变成了"填表",使用意愿更低。

根本问题不是文档形式不够花哨,而是查阅式文档很难主动进入人的工作流。

转折:把清单变成 AI 的上下文

Claude Code 的 Skill 机制改变了这件事。

简单说,Skill 是一段给 AI 读的说明书,加上它执行任务时需要参考的资料。当你在对话里说到特定触发词时,AI 会加载这个 Skill,并按说明书走流程。

我的 frontend-checklist Skill 里写的是这样的逻辑:

  1. 只在用户明确请求时触发:比如 /frontend-checklist、"按前端清单 review"、"按 checklist 检查这段代码"。用户没提,它不会自作主张去扫代码。
  2. 确认检查范围:如果用户指定了文件,就只看指定文件;如果说 "review PR",就用 git diff 定位变更;如果都没有,就先确认范围,不盲目扫整个仓库。
  3. 按语言选择清单:中文提问读中文版清单,英文提问读英文版清单。
  4. 只报命中的问题:通过和不适用的条目一律不输出。
  5. 按严重度排序:安全、数据丢失、竞态、内存泄漏这类硬问题优先,命名风格靠后。
  6. 每个问题都标出文件路径和行号:让人能直接跳到具体位置。

关键的翻转在这里:

以前是"你去翻清单"。现在是"清单来找你"。

写 PR 的时候,你不需要记得清单里每一条是什么,直接在 IDE 里说一句"按前端清单 review 我这个 PR",AI 会把 160 条和当前 diff 放在一起看,只告诉你命中的那些,并给出文件路径和行号,必要时附 1-3 行示例代码。心智负担从"记住 160 条"降到"知道有这么一个入口"。

一个真实跑出来的 review

空讲没意思,看一段 showcase 里的实际输出。

下面这段代码是我写的一个有意设计的"坏例子"(showcase/cases/01-xss/bad.tsx),一个评论列表组件:

export function CommentList(props: any) {
  const [list, setList] = useState([] as any);
  const [keyword, setKeyword] = useState('');

  useEffect(() => {
    fetch('/api/comments?topic=' + props.topic)
      .then((r) => r.json())
      .then((d) => {
        setList(d.data);
      });
  }, [props.topic]);

  const highlight = (text, kw) => {
    if (!kw) return text;
    return text.replace(new RegExp(kw, 'g'), '<mark>' + kw + '</mark>');
  };

  return (
    <div>
      <input type="text" onChange={onSearch} />
      <div id="tip" dangerouslySetInnerHTML={{ __html: props.tip }} />
      {list.map((c: Comment, i: number) => (
        <div key={i} className="comment">
          <img src={c.avatar} />
          <a href={'javascript:void(0)'} onClick={() => eval(c.author.onClick)}>
            {c.author.name}
          </a>
          <div dangerouslySetInnerHTML={{ __html: highlight(c.body, keyword) }} />
        </div>
      ))}
    </div>
  );
}

乍看能跑,TypeScript 不一定报错,ESLint 也不一定能拦住关键问题。但 Skill 跑完吐出来 11 条命中,挑几条看(行号对应 showcase/cases/01-xss/bad.tsx 原文件,不是上面代码块里的相对行号):

安全与健壮性(最严重的一批)

  • line 35dangerouslySetInnerHTML={{ __html: props.tip }} 直接吃外部 tip,存在 XSS 风险。建议默认文本渲染,真要富文本时先用 DOMPurify 消毒。
  • line 44highlight 用字符串拼接 HTML 再 dangerouslySetInnerHTMLbodykeyword 都没转义。建议改成 String.split 分段渲染,把命中段包进 <mark>,不要注入 HTML。
  • line 39eval(c.author.onClick) 把接口返回的字符串当代码执行,等于把任意脚本执行权交给接口数据。建议彻底删除,交互改成前端静态映射。

数据请求

  • line 14-20props.topic 变化时发起新请求但没取消旧请求,旧响应可能覆盖新数据。建议用 AbortControllerignore 标志在 cleanup 里关掉。

UI 与渲染

  • line 37key={i} 用数组下标,列表增删重排时可能导致状态错位。建议用稳定的业务 id,比如 c.id

无障碍

  • line 34, 38:搜索 input 没有 aria-label 或关联 label<img> 没有 alt

泛泛地让 AI 做 review,它很容易给出"结构清晰、建议补充错误处理"这类通用意见。扔给 ESLint,也大概率只会在 any、未定义变量、hook 依赖这类规则上发声。Skill 的价值在于把评审标准显式化:AI 不是凭感觉聊几句,而是按一把真实的尺子在量代码。

我还拿其他 showcase 跑了一遍:用户资料页命中 12 条(竞态、未清理副作用、无空值守卫),注册表单命中 17 条(a11y、字段级错误、密码明文 input、防重复提交)。这些都是一眼看过去"差不多能用",但上线后很容易变成坑的代码。

怎么用

Skill 装起来一条命令的事:

curl -fsSL https://github.com/wsafight/front-end-checklist/releases/latest/download/install.sh \
  | sh -s -- claude

装完在对话里说 /frontend-checklist 或"按前端清单 review 我这个 PR",就会触发它。也支持 Kiro / Cursor / Codex,把命令结尾换一下就行。

清单是中英双语的,AI 会根据你提问的语言自动选对应版本。


两小时改造一个老项目听起来像标题党,但实际发生的事情比这更有意思:一份躺了三年没人翻的清单,换了个交付形式,突然就活过来了。内容还是那 160 条,变的只是"它怎么到达读者"。

如果你手里也有这种"明明有价值但没人用"的老文档,值得花个晚上,把它接进 AI 看看。

— 2026-05-09 夜

❌
❌