阅读视图

发现新文章,点击刷新页面。

每日一题-使数组和能被 K 整除的最少操作次数🟢

给你一个整数数组 nums 和一个整数 k。你可以执行以下操作任意次:

  • 选择一个下标 i,并将 nums[i] 替换为 nums[i] - 1

返回使数组元素之和能被 k 整除所需的最小操作次数。

 

示例 1:

输入: nums = [3,9,7], k = 5

输出: 4

解释:

  • nums[1] = 9 执行 4 次操作。现在 nums = [3, 5, 7]
  • 数组之和为 15,可以被 5 整除。

示例 2:

输入: nums = [4,1,3], k = 4

输出: 0

解释:

  • 数组之和为 8,已经可以被 4 整除。因此不需要操作。

示例 3:

输入: nums = [3,2], k = 6

输出: 5

解释:

  • nums[0] = 3 执行 3 次操作,对 nums[1] = 2 执行 2 次操作。现在 nums = [0, 0]
  • 数组之和为 0,可以被 6 整除。

 

提示:

  • 1 <= nums.length <= 1000
  • 1 <= nums[i] <= 1000
  • 1 <= k <= 100

3512. 使数组和能被 K 整除的最少操作次数

解法

思路和算法

每次操作可以将数组 $\textit{nums}$ 中的一个元素值减少 $1$,因此为了计算使数组元素和能被 $k$ 整除的最少操作次数,需要考虑数组元素和的最小减少量。考虑数组 $\textit{nums}$ 的元素和除以 $k$ 的余数 $r$。

  • 如果 $r = 0$,则数组元素和已经能被 $k$ 整除,不需要执行操作。

  • 如果 $r > 0$,则至少要将数组元素和减少 $r$ 才能被 $k$ 整除,因此需要执行 $r$ 次操作。

因此,对于 $0 \le r < k$ 的任意余数 $r$,使数组元素和能被 $k$ 整除的最少操作次数是 $r$。

计算数组 $\textit{nums}$ 的元素和除以 $k$ 的余数,即为使数组元素和能被 $k$ 整除的最少操作次数。

代码

###Java

class Solution {
    public int minOperations(int[] nums, int k) {
        return Arrays.stream(nums).sum() % k;
    }
}

###C#

public class Solution {
    public int MinOperations(int[] nums, int k) {
        return nums.Sum() % k;
    }
}

复杂度分析

  • 时间复杂度:$O(n)$,其中 $n$ 是数组 $\textit{nums}$ 的长度。需要遍历数组一次计算元素和。

  • 空间复杂度:$O(1)$。

求和模 k(Python/Java/C++/C/Go/JS/Rust)

题目要求 $\textit{nums}$ 的元素和 $s$ 能被 $k$ 整除。

每次操作可以把 $s$ 减少 $1$。目标是把 $s$ 变成一个 $k$ 的倍数,且操作次数越小越好。

比如 $s=8,k=3$,需要操作 $2$ 次,把 $s$ 变成 $6$。

一般地,至少要操作 $s\bmod k$ 次,才能把 $s$ 变成 $k$ 的倍数。

本题视频讲解

###py

class Solution:
    def minOperations(self, nums: List[int], k: int) -> int:
        return sum(nums) % k

###java

class Solution {
    public int minOperations(int[] nums, int k) {
        int s = 0;
        for (int x : nums) {
            s += x;
        }
        return s % k;
    }
}

###java

class Solution {
    public int minOperations(int[] nums, int k) {
        return Arrays.stream(nums).sum() % k;
    }
}

###cpp

class Solution {
public:
    int minOperations(vector<int>& nums, int k) {
        return reduce(nums.begin(), nums.end()) % k;
    }
};

###c

int minOperations(int* nums, int numsSize, int k) {
    int s = 0;
    for (int i = 0; i < numsSize; i++) {
        s += nums[i];
    }
    return s % k;
}

###go

func minOperations(nums []int, k int) int {
s := 0
for _, x := range nums {
s += x
}
return s % k
}

###js

var minOperations = function(nums, k) {
    return _.sum(nums) % k;
};

###rust

impl Solution {
    pub fn min_operations(nums: Vec<i32>, k: i32) -> i32 {
        nums.iter().sum::<i32>() % k
    }
}

复杂度分析

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

分类题单

如何科学刷题?

  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站@灵茶山艾府

模拟

解法:模拟

每次操作会让数组的总和减一,因此答案就是总和 $\mod k$ 的值。

复杂度 $\mathcal{O}(n)$。

参考代码(c++)

class Solution {
public:
    int minOperations(vector<int>& nums, int k) {
        int sm = 0;
        for (int x : nums) sm += x;
        return sm % k;
    }
};

以超级供应链破解中小企业发展痛点,京东PLUS企业会员让采购更省更高效|WISE2025商业之王

2025年的商业世界正站在新旧转换的十字路口。在商业叙事重构、科技浪潮席卷的当下,WISE2025商业之王大会以“风景这边独好”为基调,试图在不确定中锚定中国商业的确定性的未来。我们在此记录这场思想盛宴的开篇,捕捉那些在变局中依然坚定前行的声音。

11月27-28日,被誉为“年度科技与商业风向标”的36氪WISE2025商业之王大会,在北京798艺术区传导空间落地。

今年的WISE不再是一场传统意义上的行业峰会,而是一次以“科技爽文短剧”为载体的沉浸式体验。从AI重塑硬件边界,到具身智能叩响真实世界的大门;从出海浪潮中的品牌全球化,到传统行业装上“赛博义肢”——我们还原的不仅是趋势,更是在捕捉在无数次商业实践中磨炼出的真知。

我们将在接下来的内容中,逐帧拆解这些“爽剧”背后的真实逻辑,一起看尽2025年商业的“风景独好”。

大会现场,京东政企业务中小企业客户部副总经理张瑞发表《数字时代,那些过去敢想却未实现的事情》的主题演讲,分享了京东如何以“有责任的供应链”为基础,通过AI技术与创新服务模式,破解中小企业服务的“不可能三角”难题,助力百万级中小企业实现数字化采购转型。

张瑞指出,中小企业作为中国经济的重要活力源,其健康发展对国民经济意义重大,但行业分散、需求多样、价格敏感等特性,构成了B2B领域“海量客户、深度链接、低成本服务”的长期困境。对此,京东政企业务通过三大核心举措实现突破:打造企业版京东商城,依托AI技术实现精准获客、高效服务与采购体验升级;推出行业首个付费会员体系——京东PLUS企业会员,将优质权益标准化输出,会员企业覆盖建筑、船舶等传统行业,以及低空经济、信息智能等新兴行业,深度契合“十五五”规划重点产业方向。

目前,京东政企业务服务超800万家政企客户,覆盖90%以上在华世界500强企业及70%以上专精特新企业,未来将向着服务1000万企业客户、100万PLUS企业会员的目标迈进,持续推动产业链供应链韧性提升与实体经济高质量发展。

京东政企业务中小企业客户部副总经理张瑞

以下为京东政企业务中小企业客户部副总经理张瑞的演讲实录,经编辑:

各位现场和线上的朋友们,大家好!我是来自京东集团政企业务部的张瑞。刚才百度的李莹总介绍了百度小度的硬件,我看到现场也有很多一直以来支持京东业务、跟我们有合作的朋友,当然这里面要插一句广告,就是百度小度,买国补上京东。

我今天给大家分享的主题是《数字时代,那些过去敢想却未实现的事情》。

我先介绍一下我们整个京东集团,京东集团定位于“以供应链为基础的技术与服务企业”,目前业务已涉及零售、科技、物流、健康、工业、产发和国际等领域。作为同时具备实体企业基因和属性、拥有数字技术和能力的新型实体企业,京东集团所有的业务都围绕供应链展开。依托“有责任的供应链”,京东持续推进“链网融合”,实现了货网、仓网、云网的“三网通”,不仅保障自身供应链稳定可靠,也带动产业链上下游合作伙伴数字化转型和降本增效,更好服务实体经济高质量发展。

我所在的京东政企业务是京东集团服务政企客户的核心平台,凭借京东稳定高效的供应链基础设施,以一体化的服务生态为政府、企业及事业单位提供一站式、全链路、场景化的数字采购供应链综合解决方案,携手政企推进采购与业务的深度融合,加速实现采购的阳光、高效、低成本,全面提升产业链、供应链的韧性和安全水平。

我们服务超过800万家政企客户,其中包括3万+大型客户,覆盖了90%以上的在华世界500强企业、95%中国民营500强企业和70%以上专精特新企业,全面覆盖像银行、运营商、航空、石油石化、电力等集团型的客户。

一直以来,中小企业是我们中国经济活力的重要体现,中小企业的健康发展对于我们国民经济的健康发展意义是非常重大的,京东政企业务通过“平台营销、精准营销、项目集采”三种服务模式来满足企业全场景的需求。

到目前为止,我们服务的800万中小企业中,有六成客户是集中在制造、科研科技、技术信息、商业服务等四类行业,在规模30人以上的公司中占比超过35%,在我国4个主要的经济带——京津冀、珠三角、长三角、川渝产业带的占比超过了55%。

同时,我们也发现数智化意识强的企业,在我们京东平台上的平均留存周期是超过5.9年的,远超过我们中国企业平均2.5年的生命周期。这800万中小企业的客户群体实际上是一个非常巨大的数字,但是与我们现在整个国家6600万的中小企业群体相比,其实我们前面要走的路还很长。

一直以来,我们在服务中小客户群体的时候,我们发现不管是大客户还是小客户,服务好一个客户非常容易,服务好10万客户群体也很容易,但是当我们去服务100万乃至1000万的客户群体时,中小企业的每一个特性都会放大成为一个我们难以解决的山一样的问题。

比如说,行业非常分散、需求也非常分散,客户的需求也很多样,价格非常敏感,计划性非常低,等等等等。所有这些要素综合起来,就成为B2B行业里一个长期的“不可能三角”。我相信每个业务都会有它的“不可能三角”,对于我们B2B的中小企业业务来讲,我们的“不可能三角”就是要服务海量的客户,也要与客户形成深度的链接,同时我们的服务成本也非常低。

在过往相当长的时间里面,其实我们这三者是很难同时做到,你只能选择其中两点,必须要放弃另外一点。那么如何去破解这个难题,也就成为我们如何把800万的客户扩张为1000万、1200万的一个核心问题。

第一个,我们为中小企业的客户群体打造了快采购、轻管理、一站式的企业版京东商城。从获客的源头来看,除了京东主站,我们还拥有丰富的站内外生态,线下以及品牌的联合拉新,并且根据客户的身份去区分商品、金融服务权益,配套了适配SMB群体的商品、价格和服务,同时我们依托京东主站的流量,搭建了适配SMB客户的交易链路,实现企业采购的体验与商业效率的双重升级。

这里面大家可能会问,双重升级、采购体验和采购效率,为什么你们可以做到这一点?我们京东政企业务有自己独特的资源禀赋的优势,我们持续进行的算法迭代和资源投入,结合现在AI的能力,对我们大规模客户运营、客户的服务以及客户的采购体验,三个方面都产生了革命性的影响,深刻地改变了我们与中小企业客户互动的方式,让京东政企业务真正具备了服务千万级中小企业客户的能力。这里面的话,我想重点展开讲这么几点:

第一点,在客户的获取和运营上。首先在获客上面,我相信所有做To B业务的人,特别是做中小企业业务的人,大家都有深刻的体感,就是每一个企业级客户的获取,其实都是一个非常高成本投入的事情。在今天的这个时代,我们是可以借AI的能力,帮助我们在京东主站以及外部各个生态渠道里面,去精准地识别用户,以及在正确的时间把正确投放的内容生产出来,去做正确的投放。第二是在客户的运营上面,我们策略的制定和执行,营销和销售端权益利益点,服务在客户端ID级别的适配,对客户内容的生产,以及我们对客户的这些权益内容的提供,在服务时点和渠道上的选择。

第二点,就是在我们的客户服务端。我们前面讲了,我们服务一家客户容易,但当你希望把针对于那些大型客户所提供的高品质的服务,去普惠地适应到我们的中小企业百万级、千万级这样一个群体的时候,我们必须要想到一个更高效低成本的方式。所以我们在服务客户的时候,经常会碰到当客户需要我们开发票,或者说客户有一些相对复杂的选型、包括一些工业品技术上选型的需求,那AI能力就可以帮助我们快速地完成客户的需求,并且提供完整的交付,特别是在一些专业性高的场景,专业性越高,我们提效的效能越强。

第三点,我们客户的采购和采购的管理体验。特别是对于中小企业来说,整个采购的过程追求的是高效率,我们可以让采购管理、整个采购的绩效更加可视化,在这个上面AI也给我们提供了非常大的帮助。我们深刻地知道,对于AI的能力,不仅仅在于回答客户的每一个问题,而是完成客户期望的完整交付。这是基于我们京东自身海量的标准和产品数据库,以及高确定性的自营交付能力、海量的客户互动和行为数据,共同支撑我们完成对于客户高标准的服务体验。

为了解决客户在采购的过程当中所面临的零散采购价格高、重货配送运费贵、资金紧张周转难、供应质量波动大等问题,京东的第二个举措,就是在今年8月份的时候,我们推出了企业采购行业首个付费会员——京东PLUS企业会员。我们是希望为SMB客户提供省钱省心的采购体验,把我们面向个人消费者或者是大客户的一些好权益,把它产品化、标准化,提供给我们的中小企业客户。我们通过经典卡的主打折上折、立减等省钱的权益,满足客户的经营,同时设置专享卡,通过主副卡的设置,来满足客户多元采购的诉求。

PLUS企业会员上线后这段时间,已经受到很多企业的关注,并且在制造业、信息技术等行业实现了快速的渗透。未来,我们也期待PLUS企业会员走向生态的共建,联动更多的优质品牌,丰富我们会员的生态,为客户构建一站式采购能力,为品牌提供更多连接客户的能力,共同开辟新的增长路径。

我们也看了客户在开通PLUS企业会员前后的对比,从它的表现状况来看,采购的频次实现了3.5倍的增长。PLUS企业会员所处的行业,与我们现在所看到的“十五五”规划里“8467”政策提到的这些行业深度契合——重点客户群体的行业,包括传统行业里面的建筑业、船舶、机械、化工等行业,新兴行业中的低空经济、新能源、具身智能、机器人、生物制药、量子科技等。我们现在客户重点采购的场景,包括办公、福利、工业品MRO等等。同样是企业会员,具有高活跃、高消费的特点,既是最具发展前景的企业群体,又是京东政企SMB最具核心的用户资产。

我们也希望与各界,包括我们的合作伙伴一起快速走向服务1000万企业客户、100万京东PLUS企业会员新的里程碑。谢谢大家!

一文搞懂 Webpack 分包:async、initial 与 all 的区别【附源码】

大家好,我是前端架构师,关注微信公众号【程序员大卫】免费领取精品资料。

1. 背景

最近在优化一个项目的加载性能时,对 optimization.splitChunks.chunks 的三个可选值 asyncinitialall 的具体效果产生了疑惑。为了彻底搞清楚它们的区别,我专门搭建了一个 Demo 进行对比研究。

2. 核心区别:async vs initial

chunks 属性决定了 Webpack 对哪些类型的代码块进行分割。其中 async 是默认配置。

经过测试发现:在单入口应用中,二者区别不明显;但在多入口应用中,差异非常显著。

2.1 测试环境配置 (webpack.config.js)

为了直观观察分包结果,我将 minSize 设置为 0,确保即使是很小的模块也会被强制分割。

const { CleanWebpackPlugin } = require("clean-webpack-plugin");

module.exports = {
  mode: "production",
  entry: {
    entry1: "./src/entry1.js",
    entry2: "./src/entry2.js",
  },
  optimization: {
    splitChunks: {
      chunks: "async", // 实验变量:此处分别修改为 'async', 'initial', 'all'
      minSize: 0       // 强制分割小模块
    },
  },
  plugins: [
    new CleanWebpackPlugin() // 每次构建前清理 dist 目录
  ],
};

2.2 代码结构

假设我们有两个入口文件,它们都引用了同步模块 shared.js,且 entry1 额外引用了一个异步模块 dynamic.js

  • entry1.js: 引用 shared + 动态引用 dynamic
  • entry2.js: 引用 shared
// entry1.js
import "./shared";       // 同步公共模块
import("./dynamic");     // 异步动态导入
console.log("entry1");

// entry2.js
import "./shared";       // 同步公共模块
console.log("entry2");

2.3 打包结果对比

在上述场景下,切换配置会产生完全不同的结果:

  • 设置 chunks: 'async' (默认)

    • 结果dynamic.js 被单独打包,但 shared.js 没有被分离。
    • 原因async 只关注异步加载(动态导入)的模块。尽管 shared.js 被多个入口引用,但因为它是同步导入的,所以被忽略,直接打入了各自的入口包中。
  • 设置 chunks: 'initial'

    • 结果dynamic.js 被单独打包,同时 shared.js 也可以被剥离出来成为独立文件。
    • 原因initial 关注初始加载(同步导入)的模块。Webpack 发现 shared.js 在初始化时就被多个入口共享,因此将其分离。

3. 关于 all

当设置为 all 时,Webpack 会采用一种混合策略:无论同步还是异步,只要满足分割条件(如大小、引用次数),都会进行代码分割。

这是目前最推荐的配置,因为它能最大限度地复用代码,减小包体积。

4. 总结

三种模式的核心差异对比:

模式 作用范围 适用场景 特点
async (默认) 仅异步模块 针对 import() 动态导入的模块 确保首屏加载的 bundle 纯净,不影响初始包大小
initial 仅同步模块 针对入口文件直接 import 的公共模块 优化多页应用的公共代码提取,减少重复打包
all 所有模块 希望最大化代码分割效果 最全面的策略,通常能获得最佳的缓存利用率

源码地址: github.com/zm8/wechat-…

​中指研究院:1月至11月TOP100企业拿地总额同比增长14.1%

中指研究院最新发布《2025年1-11月全国房地产企业拿地TOP100排行榜》,2025年1-11月,TOP100企业拿地总额8478亿元,同比增长14.1%,虽继续延续增长态势,但增幅较1-10月大幅收窄,临近年底,企业拿地积极性有所减弱,拿地较为审慎。11月,民营房企拿地较为活跃,部分企业联合国企拿地,部分企业聚焦优势区域独立拿地深耕。民企拿地主要集中在热点一二线核心城市。(证券时报)

美股大型科技股盘前普涨,英特尔涨超1%

36氪获悉,美股大型科技股盘前普涨,截至发稿,英特尔涨超1%,谷歌涨0.99%,微软涨0.75%,亚马逊涨0.73%,特斯拉涨0.61%,Meta涨0.48%,苹果涨0.37%,奈飞涨0.36%,英伟达涨0.33%。

山东高速:全资子公司拟24.35亿元出售粤高速A9.68%股权

36氪获悉,山东高速发布公告,全资子公司山东高速投资发展有限公司(简称“投资公司”)拟通过非公开协议转让方式将其持有的广东省高速公路发展股份有限公司(简称“粤高速A”)9.68%股权,2.02亿股股票转让给山东通汇资本投资集团有限公司,交易金额为24.35亿元。本次交易完成后,投资公司不再持有粤高速A股份。

你应该了解的TCP滑窗

一、TCP 滑窗机制:从可靠传输到高效流控的演进

在基本的 TCP 传输概念中,滑动窗口机制通过序列号确认实现了可靠数据传输。然而,这仅仅是故事的开始。真正的 TCP 效率来自于对窗口机制的深度优化和策略控制,其中蕴含着精细的设计权衡。

二、累计确认:效率与可靠性的完美平衡

TCP 并没有采用简单的"一对一"确认机制,而是设计了精巧的累计 ACK 策略。这种机制的核心思想是:确认号表示该序号之前的所有字节都已被正确接收

已接收:1-1000, 2001-3000  // 序列号1001-2000形成空洞
期待接收:1001

在这种情况下,即使收到了 2001-3000 的数据,接收端仍然只能确认 1001。只有当 1001-2000 的数据到达后,才能一次性确认到 3001。

三、延迟确认的优化策略

TCP 实现中通常包含延迟确认计时器(通常 200ms,也许更短):

  • 当按序数据到达时,不立即回复 ACK,而是等待短暂时间
  • 如果在此期间有后续数据到达,可以合并确认
  • 如果期间有发送数据,可以捎带确认
  • 超时后仍会发送纯 ACK

这种策略在实际网络中可以将 ACK 数量减少 50% 以上,显著降低网络开销。

四、滑窗内部结构:字节级的精确控制

与概念性理解不同,实际的 TCP 滑窗是以字节为单位进行管理的,这种精细度带来了更精确的流量控制。

发送方窗口结构:

WeChatWorkScreenshot_4a6f5045-0724-4e93-8a2d-79f9a39d6e61.png

接收方窗口结构:

image.png

接收方多出的"已接收未提交"部分反映了应用层处理延迟。当应用读取速度跟不上接收速度时,这部分会增长,导致通告窗口缩小,这一“空间”的减小会导致接收方的通告窗口急剧下降,这时需要一个反馈机制,告诉发送方:减速->暂停。

五、流量控制:动态的速率协调机制

在第四点我们说到了滑窗结构,发送窗口与接收窗口,在一个完整的发送流程中我们会有探测 -> 启动 -> 连接 -> 发送 -> 接收 -> 回复 -> 确认 等一系列过程。

当然我们本文的重点在于滑窗,是这个体系知识的一小部分,那滑窗是如何动态控制的? 简单来说就是要保证整个通信链路能高效传输,既不能太慢也不能太快,它要在一个阀值附近横跳保证网络以最大可通信速率运行。

这个由谁决定?是拥塞窗口(cwnd)来进行控制,主要利用了慢启动、拥塞避免、快速重传和快速恢复这四个方案来处理

1:慢启动

其实说白了就是一开始不要把传输速率跑满而是从0加速,快速的接近一个半窗口阀值,因为一开始跑满速率这很可能会导致整个链路在开始就无比拥挤,才刚开始就堵车了这不是一个好消息,我们更希望的是先发一小部分内容用较低的速率发出,并且尽快达到半窗口阀值,而后逐步加速的过程。

2: 拥塞避免

接在慢启动之后拥塞避免方案会马上接手传输,在此基础上均匀加速到最大阀值是一个线性的过程

WeChatWorkScreenshot_00e4b9c9-439d-4c82-a21f-b219b8a452bf.png

以上半窗口阀值就是图中的ssthresh,慢启动就是达到ssthresh这段,而拥塞避免是ssthresh到max这段 这里我们也可以看到长短连接区别,长连接效率会高很多,短连接相当于每次都要有一个加速的过程,非常耗时。

3: 快速重传

没有快速重传时,TCP 发送方像个死脑筋:只有一个重传定时器。如果数据包丢了,它必须等到定时器超时才会重传。这通常需要几百毫秒到几秒,效率极低。

快速重传的核心思路就是:  别等定时器了!如果接收方反复在问同一个问题,那肯定是有包丢了!


想象你是个发送方,你发了 1, 2, 3, 4, 5, 6 号包。

  • 接收方顺利收到了包1,它回信说:“包1收到了,我下一个想要包2!”(ACK 2)
  • 这时,包2在网络中丢了,没收到。
  • 接收方紧接着收到了包3。它一看,包2还没到呢,包3就来了?但它最关心的还是包2。于是它再次回信催更:“包1收到了,我下一个还是想要包2!”(ACK 2)
  • 接着,它又收到了包4。它继续回信:“我想要包2!”(ACK 2)
  • 然后又收到了包5,它依然回信:“我想要包2!”(ACK 2)

对于发送方来说,它在短时间内连续收到了 3个重复的 ACK 2(加上第一个正常的,一共是4个 ACK 2)。

第二步:发送方触发“快速重传”

发送方内部有个小本本,专门记着 重复ACK计数器

  • 收到第一个 ACK 2:正常,不管。
  • 收到第二个 ACK 2(第一个重复ACK):计数器+1。心想:“有点奇怪,但再等等。”
  • 收到第三个 ACK 2(第二个重复ACK):计数器+1。心想:“情况不妙,可能真丢了。”
  • 收到第四个 ACK 2(第三个重复ACK) :计数器变成3了!发送方立刻判断:“实锤了!包2肯定丢了!别等重传定时器了,现在就重传包2!”

这个神奇的阈值 3(即收到总计4个相同的ACK)是经过大量实践验证的,能有效避免因为网络短暂乱序而误判丢包。

4: 快速恢复

重传完丢失的包2之后,故事还没完。如果直接回到原来的状态,可能会让网络瞬间再次拥塞。所以 TCP 会紧接着启动 快速恢复 算法:

  1. “假装”事情没那么糟:既然能收到这么多重复ACK,说明网络还能通,只是丢了一个包。所以不像超时重传那样把窗口直接打到1(慢启动),而是只砍半
  2. 保持数据流:在重传期间,发送方还可以继续发送新的数据(比如包7,包8),因为接收方的缓存里还存着包3,4,5,6,窗口并没有被完全占满。

当发送方收到针对包2(以及之后数据)的新ACK(比如 ACK 7),表明丢失的包已经被成功弥补,它就退出快速恢复状态,恢复正常传输。

WeChatWorkScreenshot_ea45b90a-a236-4116-b43c-c53880d890c4.png

上图可以看到,这是一个非常精巧的设计,确认丢包马上降速至新阀值,启动拥塞避免逐步恢复,有人会问为啥丢包就要降速?其实不降速是不行的,这会导致网络拥堵灾难,丢包是在告诉你路堵,已经导致路上的某些汽车已经冲出了道路找不到了。这个是一个非常危险的信号,出于公平使用网络tcp会自动降速,保证网络稳定通畅。


总结:TCP 滑窗的演进

TCP 滑窗机制从最初的基本可靠传输,演进为一套复杂的流量控制和效率优化系统。这种演进体现了网络协议设计的核心智慧:

  • 渐进优化:通过累计确认、延迟确认等机制在保持兼容性的前提下不断提升效率
  • 自适应控制:根据网络状况和应用需求动态调整传输策略

这些设计使得 TCP 在三十年后的今天,依然是互联网不可替代的传输基石。我们需要理解,每一种你觉得没必要的做法背后都是一次小型灾难,如今这些策略已经非常成熟,稳定的服务我们的每一次网络通信中。

注明:文中图片来自互联网

捐赠自研OS内核背后:Rust 先行者 vivo 的「担当」

作者|白石

编辑|靖宇

人工智能时代,开源成为一个重要发展方向。

Meta 的 Llama,开启了开源模型对抗闭源模型的序幕,让 OpenAI、Anthropic 等闭源模型公司没法吃「垄断」的饭,必须不停地拿出更新更好的 AI 模型。

中国的 Qwen 和 DeepSeek 接过接力棒,让开源模型遍地开花,它们的 AI 模型在开源社区的下载量,都达到千万量级。

对于用户和开发者,开源模型和开源工具能让他们不用为闭源模型昂贵的 Token 成本担心,快速开发和迭代自己的项目。

对于开源方,开源生态中的开发者们能够帮助它们把项目变得更完善,并不断推进创新,将基于这个项目的衍生生态发展壮大。

随着 AI 开始逐步进入到现实世界,全新的 AI 原生硬件设备对连接底层硬件与顶层应用的操作系统提出了新的需求。

最近,一家国内公司更是将自研的、面向 AI 时代的操作系统内核开放给世界。

这家迈出关键一步的企业是 vivo。这次开源的背后,是一场长达八年的技术长跑。

2018 年,随着 AI 浪潮的涌动,vivo 自研操作系统——蓝河操作系统(BlueOS)正式立项;2023 年,vivo 自研蓝河操作系统正式发布,该系统的框架基于 Rust 语言编写并率先搭载于智能手表产品;2024 年,它更进一步,成为从内核到系统框架全栈使用 Rust 语言编写的操作系统。

而在这套全栈自研的操作系统中,最核心、最基础的部分是它的内核,也是决定整个系统安全、性能和稳定性的关键。

蓝河操作系统内核于 2024 年正式发布,在 2025 年 7 月面向行业开源;并于 2025 年 11 月捐赠给开放原子开源基金会,正式以「BlueKernel」命名成为开源孵化项目,以全新的开源运营和治理模式面向行业。

可以看出,一直以来,vivo 在 Rust 语言技术研究、产品落地和开源实践,都走在了行业前沿,可以说是 Rust 的先行者。那么,vivo 开源的操作系统内核有哪些价值?系统内核的开源,又会给行业带来哪些助推?

 

01

为什么我们需要一个 Rust 内核?

 

一个操作系统能走多远,与其使用的语言有密切关系。

AI 眼镜、机器人等 AI 原生硬件设备与普通智能设备最大的不同,在于它内置的 AI 能力,这些能力通常由大模型和 AI Agent 驱动。要在端侧设备上运行 AI 模型和 AI Agent,对操作系统的安全性、轻量化程度和通用性都提出了都提出了更为严苛的考验。

蓝河操作系统是 vivo 面向 AGI 时代构建的自研操作系统,它从内核到系统框架全栈使用 Rust 语言编写,它在安全、AI 能力和运行流畅方面的优秀特性,能够很好地满足 AI 原生硬件设备对操作系统的要求。

安全上,蓝河操作系统全栈使用 Rust 语言,从源头保障内存安全。AI 能力上,蓝河操作系统的系统架构设计深度融合蓝心大模型,Agent 框架具备跨场景感知、自主决策等能力。运行流畅方面,蓝河操作系统构建了一系列高性能技术,能高效利用软硬件资源。

蓝河操作系统的这些核心特性,离不开一颗强大的「心脏」——内核。BlueKernel 是 vivo 以 Rust 语言自研的操作系统内核,具备安全、轻量和通用的核心特性。

在安全方面,以 C/C++ 语言为主的操作系统约 70% 的严重安全漏洞与内存安全问题有关。近年来,行业里与内存安全相关的事故案例层出不穷,比如工信部的网络安全威胁和漏洞信息共享平台(NVDB)在 2025 年 9 月就发布了苹果操作系统(包括 Mac OS 和 iOS)在内存安全方面的高危漏洞。

尤其是对于 AI 应用,尤其是端侧 AI,需要处理和分析海量的、极其敏感的个人数据,例如用户的对话录音、面部图像和健康指标,传统操作系统在内存安全上的缺陷,容易导致灾难性的隐私泄露。

相比 C/C++语言,Rust 语言在内存安全上有质的飞跃,它的核心思路,是在代码编译时就对常见的内存风险做严格检查,让许多容易埋下隐患的错误无法通过编译。一些在 C/C++语言中需要靠开发者自觉规避的错误,在 Rust 语言中,大多会在写代码时就被编译器直接拦下。

它的优越安全性能已经被主流操作系统项目实际验证。例如,Android 系统底层采用 Rust 后,相比 C/C++ 时代,内存安全漏洞首次降至总漏洞的 20% 以下。

在轻量化方面,AI 原生硬件设备通常受到严格的资源限制,包括有限的内存、闪存硬盘和电池容量,所以它们的操作系统必须是极致轻量化的,其内核和核心服务占用的系统资源要尽可能小,以便让 AI 模型和算法更高效地运行。

同时,AI 原生硬件设备的形态目前还比较多样,其内在也会使用不同芯片架构的 AI 芯片,这些都对操作系统的通用性提出了高要求。基于 Rust 语言编写的 BlueKernel,也在持续提升对 CPU 架构和驱动的兼容能力,对硬件资源的需求相比传统操作系统内核也显著降低,能够以更低的成本满足各类终端产品的需求。

本质上,Rust 是用一套语言规则打通了从底层系统到上层服务,为多硬件平台的长期迭代提供了更稳固的通用底座。

而有了更好的语言,才有了更好的操作系统内核。

 

02

BlueKernel 内核,AIOS 的基石

 

蓝河操作系统本身就是面向智能眼镜、机器人等 AI 原生硬件设备的智慧操作系统,所以其内核——BlueKernel,也针对 AI 硬件设备「高安全、低资源、多形态」的痛点进行了原生设计,具备安全、轻量、通用的三大特性,将语言的潜力转化为系统级的核心竞争力。

BlueKernel 技术架构图

作为适用于 AI 原生硬件设备的开源 Rust 内核,BlueKernel 的竞争力首先体现在安全与效率的统一。

在内存安全方面,BlueKernel 使用编译期所有权系统,让内存安全从以往的被动防御进化到现在的主动掌控,开发者不用再为内存安全问题花费更多开发资源,进而能加速 AI 原生硬件设备在消费者层面的普及,促进整个行业的繁荣。

同时,得益于对基础数据结构高性能低开销的设计,BlueKernel 对硬件资源需求低,最小内核内存占用仅 13KB,这为 AI 模型和算法等「资源消耗大户」腾出了宝贵的计算资源,也让那些极度轻量化的 AI 原生硬件设备,例如智能眼镜(通常只有几十克重)和智能手环,利用有限的算力提供足够强的 AI 能力。

在通用性与硬件兼容方面,BlueKernel 兼容 RISC-V、ARM 等多种芯片架构,也支持兼容 POSIX 接口的标准库。对于开发者来说,这意味着他们写的程序可以更容易地在各种类型的硬件设备平台上移植。

为保证系统扩展性,BlueKernel 通过硬件抽象等一系列方式,提升了对于 CPU 架构和驱动的兼容能力,支持 Rust 语言开发驱动,也支持兼容已有的 C 语言内核的外设驱动。因此,开发者和生态内的厂商既可以继续使用现有的 C 语言驱动,也可以用 Rust 语言为新硬件编写新驱动,这种分阶段的投入,降低了整个行业的进入门槛。

从内存安全保护、超低的资源消耗到对多芯片架构、多设备形态的灵活适配,BlueKernel 通过发挥 Rust 语言的优良特性,在系统内核层面解决了 AI 原生硬件设备对高安全性与低资源的诉求。这种兼顾效率与通用性的特性,使它成为 AI 时代操作系统的新基石。

vivo 作为 Rust 语言的先行者,也承担起责任,将 BlueKernel 开源,与行业共同构筑越来越繁荣的 AI 生态。

 

03

BlueKernel 的生态机遇与未来

 

在海外市场,开源的操作系统已经非常有影响力,例如 Linux 不仅是大部分服务器的底层操作系统,成为全球互联网的基石;引领移动互联网时代的 Android 操作系统,它的操作系统内核也基于 Linux 内核。

而在中国市场,随着近些年越来越多的企业、高校、研究机构和开发者持续的投入和创新,开源也呈现出了繁荣发展的态势。由此看来,vivo 将以 Rust 语言自研的操作系统内核 BlueKernel 向行业开源,并捐赠给开放原子开源基金会,既具有诚意,又意义深远。

vivo 开源的是操作系统内核,它是操作系统的「心脏」,这让底层的硬件厂商、专业的系统开发者、开源社区,都可以基于 BlueKernel 进行创新,而不仅仅是 vivo 一家。

vivo 在构建生态时,具有务实的态度。目前,微软和 Linux 仍然是操作系统的主流,它们留下了数量庞大的 C 语言驱动代码(近 2000 万行)。因此,BlueKernel 采取了灵活的「渐进式」迁移策略:它既支持开发者用先进的 Rust 语言开发原生驱动,也兼容已有的 C 语言驱动,极大地降低了硬件厂商的适配门槛和开发者的学习成本。

基于安全、通用、轻量化的特性,以及务实的生态策略,BlueKernel 为爆发初期的 AI 原生硬件设备市场提供了巨大的想象空间。

vivo 的贡献不止于开源操作系统内核,它正与开放原子开源基金会携手,通过举办「蓝河操作系统创新赛」等方式,系统性地推广 Rust 语言。目前,第三届「蓝河操作系统创新赛」正在进行中,设立 70 万元奖金池,以 C2Rust 项目级转译工具赛题聚焦攻关 Rust 生态行业难题。vivo 将持续把蓝河创新赛打造为行业最具含金量和影响力的 Rust 顶尖赛事。

从开源并捐献操作系统内核,到办「创新赛」,vivo 持续为产业做贡献,不断推动整个行业的繁荣和发展。它开源的操作系统内核 BlueKernel,为 AI 眼镜、机器人等 AI 原生硬件提供了一个安全、通用的强大「心脏」。

远大智能:公司股票将实施其他风险警示,12月1日起停牌一天

36氪获悉,远大智能发布公告,公司及相关人员收到辽宁证监局出具的行政处罚事先告知书,根据《行政处罚事先告知书》的认定的情况,公司披露的《2019年年度报告》《2020年年度报告》《2021年年度报告》《2022年半年度报告》存在虚假记载。深圳证券交易所将对公司股票实施其他风险警示。公司股票自2025年12月1日开市起停牌一天,并于2025年12月2日开市起复牌。

氪星晚报|雷军:未来5年,人形机器人将大面积在小米工厂上岗;淘宝闪购将全面取消超时扣款,以正向激励提升骑士保障与用户体验;美永久停止接收所谓第三世界移民

大公司:

名创优品:MINISO LAND全球壹号店销售额破亿

36氪获悉,截至目前,名创优品已与全球超150个IP建立合作,成功孵化出“吉福特熊、墩DUN鸡”等自有IP。与此同时,MINISO LAND已在北京、上海、广州等核心城市落地18家,其中上海的MINISO LAND全球壹号店开业9个月销售额破亿、单月破1600万元,创下全球门店纪录。

雷军:未来5年,人形机器人将大面积在小米工厂上岗

小米创办人、董事长兼CEO雷军接受媒体专访时表示,下一个五年,人工智能将深刻影响传统产业:“所有产业都值得用AI做一遍。”他说,人工智能与传统产业深度融合,将会开启一个新的万亿级大市场,一家公司不可能掌握所有环节,而是要与最强的伙伴携手,取长补短,带动整个产业链共同升级。除了这些自动化设备,人形机器人进厂打工也正成为现实。他预计,未来5年,人形机器人将大面积在小米工厂上岗,“这还只是第一步,家庭对人形机器人的需求更大、要求更高,市场也更大”。(北京日报)

淘宝闪购将全面取消超时扣款,以正向激励提升骑士保障与用户体验

外卖骑士超时免罚迎来新进展。11月28日,淘宝闪购取消超时扣款正扩大覆盖到60城,年底前将覆盖全国直营城市。今年以来,淘宝闪购持续推广服务分机制,以正向激励和技术牵引骑士服务,通过好的履约加分、超时送达扣分的方式,让骑士收入不再因超时受影响,多劳多得,优劳优得,实现骑士安全、履约效率与用户体验的协同提升。

元气森林等成立食品科学研究公司

36氪获悉,爱企查App显示,近日,华中食品科学研究(咸宁)有限公司成立,法定代表人为董亚,注册资本1亿元人民币,经营范围包括自然科学研究和试验发展、新材料技术研发、发酵过程优化技术研发、新材料技术推广服务等。股东信息显示,该公司由咸宁高新产业发展有限公司、元气森林(北京)食品科技集团有限公司共同持股。

微博热搜主榜优化升级:强化公共属性,多元内容占比将更清晰

36氪获悉,11月28日,微博发布《微博热搜主榜优化升级公告》,对热搜主榜进行机制优化升级,旨在进一步提升榜单的公共性与多元性,优化热点内容呈现结构。据了解,此次升级将重点调整主榜头版(前十)内容的版面配比,明确划分社会时政、垂直热点、文娱作品三大类内容,每类占比约30%,以平衡不同领域热点在榜单中的呈现。

亚马逊正向印度银行业进军,推出新型消费贷款服务

据报道,亚马逊正准备向印度的小企业提供贷款,该电子商务巨头正在向印度的金融产品领域进军。亚马逊今年早些时候收购了总部位于班加罗尔的非银行贷款机构Axio。目前专注于BNPL和个人贷款服务的Axio据悉将重新开始为小企业提供信贷,并开始提供现金管理解决方案。(新浪财经)

张朝阳:加大美剧采购丰富关注流内容生态

36氪获悉,“2025搜狐财经年度论坛”期间,张朝阳在接受采访时提到,目前搜狐视频加大了对美剧及美国电影的采购力度,以丰富关注流内容生态。针对当下热门的短剧赛道,搜狐视频定位为竖屏短剧领域的“生力军”。此外,搜狐关注流亦正拓展有声书、有声剧等语音内容,完善内容矩阵。

东莞证券“换帅”,原离职总裁“回归”接任董事长

东莞证券董事长迎来最新变动。11月28日,东莞证券发布董事长变动的公告,收到陈照星提交的书面辞职报告。陈照星因个人原因,申请辞去该公司董事长以及法定代表人等职务。与此同时,东莞证券相关董事会会议选举该公司董事潘海标为新任董事长。去年5月,原本担任总裁的潘海标因工作调整原因离任,后续东莞证券市场化招聘了招商证券资管总经理杨阳出任新总裁。因此,潘海标此次重新回归并出任董事长,略出乎外界意料。(证券时报)

新产品:

影石创新:全景无人机将于2025年12月4日发售

36氪获悉,影石创新在互动平台表示,公司计划推出两个无人机品牌,包括公司自有无人机品牌和与第三方共同孵化的全景无人机品牌。截止目前,公司前述无人机品牌业务按既定计划顺利推进,其中全景无人机将于2025年12月4日正式发售。公司专注于全景相机、运动相机等智能影像设备的研发、生产和销售,暂无“扫地机器人”产品开发计划。

其他值得关注的新闻:

客户尽职调查管理办法正式发布,2026年起施行

今天,记者从中国人民银行了解到,中国人民银行、金融监管总局、中国证监会正式公布《金融机构客户尽职调查和客户身份资料及交易记录保存管理办法》,自2026年1月1日起施行。(央视新闻)

上海:深入推动海洋产业与人工智能融合发展

36氪获悉,上海市人民政府办公厅印发《上海市海洋产业发展规划(2026—2035年)》,其中提出,深入推动海洋产业与人工智能融合发展,鼓励企业开发垂类大模型,重点发展智能船舶、水下机器人、无人船、智慧海洋装备以及海上风电智能运维等领域。推动海洋制造业数字化、智能化转型,依托工业互联网平台,推动设计、制造、运维等全流程数字化。探索海洋数据市场化开发利用。

美永久停止接收所谓第三世界移民

美国总统特朗普当地时间11月27日深夜在社交平台发文称,将永久暂停来自所有“第三世界国家”的移民,以让美国的移民系统能够完全恢复。(CCTV国际时讯)

我国发明专利平均审查周期压减至15个月

国家知识产权局今天(28日)召开新闻发布会介绍:我国推进知识产权全链条保护,发明专利平均审查周期压减至15个月,商标注册平均审查周期稳定在4个月,均保持相同审查制度下国际最快水平。布局建设129家国家级知识产权保护中心和快速维权中心,知识产权保护社会满意度由2020年的80.05分提升至2024年的82.36分。(央视新闻)

英国年度净移民人数锐减近七成

英国国家统计局27日发布的数据显示,在截至今年6月的一年里,英国年度净移民人数同比减少69%,降至约20.4万,为4年来最低。净移民即流入移民与流出移民人数之差。英国国家统计局分析,该数据下降主要原因是欧盟以外地区赴英学习、工作人员数量减少,同时离英人数增加。在截至2023年6月的一年里,英国净移民人数为90.6万人,创历史新高。(央视新闻)

直播电商监管新规拟出台

记者28日从市场监管总局获悉,市场监管总局会同国家网信办制定《直播电商监督管理办法》,目前已完成各项审核程序,将于近期正式出台。(新华社)

❌