LeetCode 905 Sort Array By Parity 全解:从排序到双指针的四类实现与源码印证
LeetCode 905 Sort Array By Parity 全解从排序到双指针的四类实现与源码印证【免费下载链接】leetcodeLeetcode solutions项目地址: https://gitcode.com/GitHub_Trending/leetcode1/leetcode本文基于仓库 articles/sort-array-by-parity.md 展开系统讲解 LeetCode 905「按奇偶排序数组」的四种主流解法基于比较的排序、双数组收集、相向双指针与同向快慢指针并结合仓库内 Java/Kotlin 的实际提交代码印证其工程实现。读完你将掌握奇偶校验num 1与num % 2的差异、原地分区partition与双指针的经典写法并能针对不同语言约束选择最优实现。前置知识在动手解题前建议先掌握以下基础数组Arrays数组的遍历与原地in-place修改双指针技巧Two Pointers用于实现最优的 $O(n)$ 原地分区方案位运算基础Bit Manipulation使用按位与num 1或取模num % 2判断奇偶性。这些前置知识在仓库同类题目中反复出现例如 articles/move-zeroes.md、articles/remove-element.md、articles/sort-colors.md 均以数组遍历与双指针分区为核心。一、解法一直接排序Sorting直觉Intuition我们想要所有偶数排在奇数前面。把奇偶性even/odd当作排序键就可以直接复用语言内置的排序偶数奇偶性为 0奇数为 1按奇偶性排序自然把偶数排在最前。这种思路只要求满足「偶数在前、奇数在后」不要求组内有序因此比较器只需比较奇偶性无需比较数值大小。算法步骤Algorithm使用基于num 1或num % 2的自定义比较器对数组排序比较结果为0偶数的元素排在结果为1奇数的元素之前返回排序后的数组。各语言实现class Solution: def sortArrayByParity(self, nums: List[int]) - List[int]: nums.sort(key lambda x: x 1) return numspublic class Solution { public int[] sortArrayByParity(int[] nums) { Integer[] A Arrays.stream(nums).boxed().toArray(Integer[]::new); Arrays.sort(A, (a, b) - (a 1) - (b 1)); return Arrays.stream(A).mapToInt(Integer::intValue).toArray(); } }class Solution { public: vectorint sortArrayByParity(vectorint nums) { sort(nums.begin(), nums.end(), { return (a 1) (b 1); }); return nums; } };class Solution { /** * param {number[]} nums * return {number[]} */ sortArrayByParity(nums) { return nums.sort((a, b) (a 1) - (b 1)); } }public class Solution { public int[] SortArrayByParity(int[] nums) { Array.Sort(nums, (a, b) (a 1).CompareTo(b 1)); return nums; } }func sortArrayByParity(nums []int) []int { sort.Slice(nums, func(i, j int) bool { return (nums[i] 1) (nums[j] 1) }) return nums }class Solution { fun sortArrayByParity(nums: IntArray): IntArray { return nums.sortedBy { it and 1 }.toIntArray() } }class Solution { func sortArrayByParity(_ nums: [Int]) - [Int] { return nums.sorted { ($0 1) ($1 1) } } }impl Solution { pub fn sort_array_by_parity(mut nums: Veci32) - Veci32 { nums.sort_by_key(|x| x 1); nums } }复杂度分析时间复杂度$O(n \log n)$空间复杂度$O(1)$ 或 $O(n)$取决于具体排序算法的实现如原地快排为 $O(\log n)$ 栈空间归并等则需 $O(n)$ 辅助空间。二、解法二双数组收集Array / Two Lists直觉Intuition与其排序不如单趟扫描把元素分成两组偶数收集到一个列表奇数收集到另一个列表再拼接。这样完全避开了基于比较的排序开销。算法步骤Algorithm创建两个列表一个放偶数一个放奇数遍历数组根据奇偶性把每个元素放入对应列表将偶数列表拼接在奇数列表之前将结果复制回原数组或直接返回拼接结果。各语言实现class Solution: def sortArrayByParity(self, nums: List[int]) - List[int]: even, odd [], [] for num in nums: if num 1: odd.append(num) else: even.append(num) idx 0 for e in even: nums[idx] e idx 1 for o in odd: nums[idx] o idx 1 return numspublic class Solution { public int[] sortArrayByParity(int[] nums) { ListInteger even new ArrayList(); ListInteger odd new ArrayList(); for (int num : nums) { if ((num 1) 1) { odd.add(num); } else { even.add(num); } } int idx 0; for (int e : even) { nums[idx] e; } for (int o : odd) { nums[idx] o; } return nums; } }class Solution { public: vectorint sortArrayByParity(vectorint nums) { vectorint even, odd; for (int num : nums) { if (num 1) { odd.push_back(num); } else { even.push_back(num); } } int idx 0; for (int e : even) { nums[idx] e; } for (int o : odd) { nums[idx] o; } return nums; } };class Solution { /** * param {number[]} nums * return {number[]} */ sortArrayByParity(nums) { const even []; const odd []; for (let num of nums) { if (num % 2) { odd.push(num); } else { even.push(num); } } let idx 0; for (let e of even) { nums[idx] e; } for (let o of odd) { nums[idx] o; } return nums; } }public class Solution { public int[] SortArrayByParity(int[] nums) { Listint even new Listint(); Listint odd new Listint(); foreach (int num in nums) { if ((num 1) 1) { odd.Add(num); } else { even.Add(num); } } int idx 0; foreach (int e in even) { nums[idx] e; } foreach (int o in odd) { nums[idx] o; } return nums; } }func sortArrayByParity(nums []int) []int { even : []int{} odd : []int{} for _, num : range nums { if num 1 1 { odd append(odd, num) } else { even append(even, num) } } idx : 0 for _, e : range even { nums[idx] e idx } for _, o : range odd { nums[idx] o idx } return nums }class Solution { fun sortArrayByParity(nums: IntArray): IntArray { val even mutableListOfInt() val odd mutableListOfInt() for (num in nums) { if (num and 1 1) { odd.add(num) } else { even.add(num) } } var idx 0 for (e in even) { nums[idx] e } for (o in odd) { nums[idx] o } return nums } }class Solution { func sortArrayByParity(_ nums: [Int]) - [Int] { var even [Int]() var odd [Int]() for num in nums { if num 1 1 { odd.append(num) } else { even.append(num) } } var result [Int]() result.append(contentsOf: even) result.append(contentsOf: odd) return result } }impl Solution { pub fn sort_array_by_parity(mut nums: Veci32) - Veci32 { let mut even Vec::new(); let mut odd Vec::new(); for num in nums { if num 1 1 { odd.push(num); } else { even.push(num); } } let mut idx 0; for e in even { nums[idx] e; idx 1; } for o in odd { nums[idx] o; idx 1; } nums } }复杂度分析时间复杂度$O(n)$空间复杂度$O(n)$需要两个额外列表。仓库源码印证另一种「双指针 新数组」变体仓库中的 java/0905-sort-array-by-parity.java 给出了一种紧凑的变体不建两个列表而是新建一个等长数组用i从头和j从尾两个索引同时填充——遇到偶数放到前端、奇数放到后端class Solution { public int[] sortArrayByParity(int[] nums) { int[] arr new int[nums.length]; int i 0; int j nums.length-1; for(int n : nums){ if(n%2 0){ arr[i] n; i; } else{ arr[j] n; j--; } } return arr; } }这段代码同样达到 $O(n)$ 时间、$O(n)$ 空间但只用一个辅助数组逻辑更简洁偶数从前端顺序写入奇数从后端倒序写入天然满足「偶数在前、奇数在后」且无需拼接步骤。可见「双列表收集」与「单辅助数组双端填充」本质同源都是空间换时间的线性解法。三、解法三相向双指针Two Pointers - I直觉Intuition可以用两个指针在数组两端原地分区左指针负责找出需要移到右边的奇数右指针标记奇数应该去的位置。当左指针发现奇数时把它与右指针所指元素交换从而把奇数推到数组末尾。算法步骤Algorithm初始化两个指针i指向开头j指向末尾当i j时循环若nums[i]是奇数与nums[j]交换并让j减一否则i加一该元素是偶数已就位返回修改后的数组。各语言实现class Solution: def sortArrayByParity(self, nums: List[int]) - List[int]: i, j 0, len(nums) - 1 while i j: if nums[i] 1: nums[i], nums[j] nums[j], nums[i] j - 1 else: i 1 return numspublic class Solution { public int[] sortArrayByParity(int[] nums) { int i 0, j nums.length - 1; while (i j) { if ((nums[i] 1) 1) { int temp nums[i]; nums[i] nums[j]; nums[j--] temp; } else { i; } } return nums; } }class Solution { public: vectorint sortArrayByParity(vectorint nums) { int i 0, j nums.size() - 1; while (i j) { if ((nums[i] 1) 1) { swap(nums[i], nums[j]); j--; } else { i; } } return nums; } };class Solution { /** * param {number[]} nums * return {number[]} */ sortArrayByParity(nums) { let i 0, j nums.length - 1; while (i j) { if ((nums[i] 1) 1) { [nums[i], nums[j]] [nums[j], nums[i]]; j--; } else { i; } } return nums; } }public class Solution { public int[] SortArrayByParity(int[] nums) { int i 0, j nums.Length - 1; while (i j) { if ((nums[i] 1) 1) { int temp nums[i]; nums[i] nums[j]; nums[j] temp; j--; } else { i; } } return nums; } }func sortArrayByParity(nums []int) []int { i, j : 0, len(nums) - 1 for i j { if nums[i] 1 1 { nums[i], nums[j] nums[j], nums[i] j-- } else { i } } return nums }class Solution { fun sortArrayByParity(nums: IntArray): IntArray { var i 0 var j nums.size - 1 while (i j) { if (nums[i] and 1 1) { nums[i] nums[j].also { nums[j] nums[i] } j-- } else { i } } return nums } }class Solution { func sortArrayByParity(_ nums: [Int]) - [Int] { var nums nums var i 0, j nums.count - 1 while i j { if nums[i] 1 1 { nums.swapAt(i, j) j - 1 } else { i 1 } } return nums } }impl Solution { pub fn sort_array_by_parity(mut nums: Veci32) - Veci32 { let (mut i, mut j) (0, nums.len() as i32 - 1); while i j { if nums[i as usize] 1 1 { nums.swap(i as usize, j as usize); j - 1; } else { i 1; } } nums } }复杂度分析时间复杂度$O(n)$空间复杂度$O(1)$ 额外空间纯原地交换。仓库源码印证仓库中的 kotlin/0905-sort-array-by-parity.kt 正是这一相向双指针思路的直接实现左指针i遇到奇数时与右边界odd交换并回退右边界遇到偶数则前进直到两指针相遇class Solution { fun sortArrayByParity(nums: IntArray): IntArray { var odd nums.lastIndex var i 0 while (i odd) { if (nums[i] % 2 1) { val temp nums[i] nums[i] nums[odd] nums[odd] temp odd-- } else { i } } return nums } }注意这里用的是nums[i] % 2 1而非 1在本题目数据范围内非负整数两种写法等价其通用性与负数场景的差异将在下文「常见陷阱」中详细说明。四、解法四同向快慢指针Two Pointers - II直觉Intuition该方案使用同向移动的慢指针与快指针。慢指针l记录下一个偶数应该放置的位置快指针r负责扫描整个数组。每当发现偶数就把它交换到位置l并让l前进一位从而把所有偶数收集到数组前端。这与 articles/move-zeroes.md 中把零移到末尾的思路是同构的——只是把目标元素从「零」换成了「偶数」。算法步骤Algorithm初始化慢指针l为0用快指针r遍历数组若nums[r]是偶数交换nums[l]与nums[r]并令l加一返回修改后的数组。各语言实现class Solution: def sortArrayByParity(self, nums: List[int]) - List[int]: l 0 for r in range(len(nums)): if nums[r] % 2 0: nums[l], nums[r] nums[r], nums[l] l 1 return numspublic class Solution { public int[] sortArrayByParity(int[] nums) { for (int l 0, r 0; r nums.length; r) { if (nums[r] % 2 0) { int temp nums[l]; nums[l] nums[r]; nums[r] temp; l; } } return nums; } }class Solution { public: vectorint sortArrayByParity(vectorint nums) { for (int l 0, r 0; r nums.size(); r) { if (nums[r] % 2 0) { swap(nums[l], nums[r]); l; } } return nums; } };class Solution { /** * param {number[]} nums * return {number[]} */ sortArrayByParity(nums) { for (let l 0, r 0; r nums.length; r) { if (nums[r] % 2 0) { [nums[l], nums[r]] [nums[r], nums[l]]; l; } } return nums; } }public class Solution { public int[] SortArrayByParity(int[] nums) { int l 0; for (int r 0; r nums.Length; r) { if (nums[r] % 2 0) { int temp nums[l]; nums[l] nums[r]; nums[r] temp; l; } } return nums; } }func sortArrayByParity(nums []int) []int { l : 0 for r : 0; r len(nums); r { if nums[r] % 2 0 { nums[l], nums[r] nums[r], nums[l] l } } return nums }class Solution { fun sortArrayByParity(nums: IntArray): IntArray { var l 0 for (r in nums.indices) { if (nums[r] % 2 0) { nums[l] nums[r].also { nums[r] nums[l] } l } } return nums } }class Solution { func sortArrayByParity(_ nums: [Int]) - [Int] { var nums nums var l 0 for r in 0..nums.count { if nums[r] % 2 0 { nums.swapAt(l, r) l 1 } } return nums } }impl Solution { pub fn sort_array_by_parity(mut nums: Veci32) - Veci32 { let mut l 0; for r in 0..nums.len() { if nums[r] % 2 0 { nums.swap(l, r); l 1; } } nums } }复杂度分析时间复杂度$O(n)$空间复杂度$O(1)$ 额外空间。四种方案的取舍对照方案时间空间是否原地稳定性适用场景直接排序$O(n\log n)$$O(1)$/ $O(n)$视语言而定否代码最简洁适合快速实现双数组收集$O(n)$$O(n)$否是允许额外空间逻辑直白相向双指针$O(n)$$O(1)$是否追求原地与最小空间同向快慢指针$O(n)$$O(1)$是是保持相对顺序面试高频考察「同向快慢指针」是四者中唯一同时满足线性时间、常数空间与稳定性的方案它只把偶数向前交换奇数之间的相对顺序不会被打乱因此也适合要求稳定的变种题。五、常见陷阱Common Pitfalls陷阱一与右边界交换后误递增左指针在「相向双指针」方案中把奇数交换到右端后绝不能顺手让左指针i也加一。因为从右侧换过来的元素尚未被检查它可能依然是奇数需要下一轮继续与更靠前的右边界交换。只有确认当前左指针元素为偶数无需移动时才递增i。若在交换后同时执行i与j--可能漏处理换过来的奇数导致分区不完整。陷阱二对负数使用取模判断奇偶虽然本题数据范围只含非负整数但在某些语言中num % 2对负数会产生反直觉的结果——负奇数的余数会是-1而非1例如-3 % 2 -1导致num % 2 1判断失败。使用按位与num 1判断奇偶更安全也更高效任何奇数的最低二进制位都是 1与 1 做与运算恒为 1与正负无关。这也是仓库 articles/sort-array-by-parity.md 中 Python、Go、Swift 等多语言实现优先采用 1的原因。陷阱三语言细节差异Java 中int[]是原始类型数组无法直接传 lambda 给Arrays.sort需要先装箱为Integer[]排序后再拆箱见解法一 Java 实现Kotlin 的sortedBy返回新列表需toIntArray()转回IntArray若想原地修改可改用IntArray下标交换见仓库 Kotlin 实现Swift 中sorted是非原地版本原地交换需使用swapAt见解法三 Swift 实现。六、延伸阅读与总结本题是「按条件分区」类题目的经典模板掌握后可以顺带攻克仓库中的一系列同构问题articles/move-zeroes.md把 0 移到末尾与本题互为镜像articles/remove-element.md原地移除指定值同样是快慢指针分区articles/sort-colors.md三色分区把相向双指针扩展为三分区articles/valid-palindrome-ii.md双指针在字符串上的应用。完整源码可在仓库对应语言目录查看Java 版见 java/0905-sort-array-by-parity.javaKotlin 版见 kotlin/0905-sort-array-by-parity.kt其余语言解法与本题指南 articles/sort-array-by-parity.md 一一对应。一句话总结面试中优先给出「同向快慢指针」——它同时满足 $O(n)$ 时间、$O(1)$ 空间与稳定性若允许额外空间「双数组收集」最易写对而判断奇偶一律用num 1避免负数取模的坑。【免费下载链接】leetcodeLeetcode solutions项目地址: https://gitcode.com/GitHub_Trending/leetcode1/leetcode创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Roc 语言 List.chunks_of 列表分块全解析:从 REPL 快照测试到 Builtin 源码实现

Roc 语言 List.chunks_of 列表分块全解析:从 REPL 快照测试到 Builtin 源码实现

Roc 语言 List.chunks_of 列表分块全解析:从 REPL 快照测试到 Builtin 源码实现 【免费下载链接】roc A fast, friendly, functional language. 项目地址: https://gitcode.com/GitHub_Trending/ro/roc 导读 List.chunks_of 是 Roc 标准库中用于将列表按固定…

2026/9/19 7:52:31 阅读更多 →
为什么电磁波用复指数表示?从本征函数到计算效率的深度解析

为什么电磁波用复指数表示?从本征函数到计算效率的深度解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 7:51:31 阅读更多 →
机器人也有Scaling Law?GE-Act 2.0用数据规模实验给出答案

机器人也有Scaling Law?GE-Act 2.0用数据规模实验给出答案

2024年底到2025年初,几乎每个做具身智能的团队都在盯着同一个问题:大语言模型里那条“参数越多、数据越多、效果越好”的Scaling Law曲线,搬到机器人身上还成不成立?因为从直觉上看,机器人数据和文本数据完全是两码事—…

2026/9/19 7:51:31 阅读更多 →

最新新闻

Matter 布尔状态配置集群(Boolean State Configuration Server)在 connectedhomeip 中的实现与接入指南

Matter 布尔状态配置集群(Boolean State Configuration Server)在 connectedhomeip 中的实现与接入指南

Matter 布尔状态配置集群(Boolean State Configuration Server)在 connectedhomeip 中的实现与接入指南 【免费下载链接】connectedhomeip Matter (formerly Project CHIP) creates more connections between more objects, simplifying development for…

2026/9/19 8:31:48 阅读更多 →
AI与SaaS死亡交叉:技术驱动下的行业重构

AI与SaaS死亡交叉:技术驱动下的行业重构

1. 现象级传播背后的行业震动上周一张名为"AI与SaaS死亡交叉预测图"的行业分析图在科技圈疯狂刷屏,图中两条曲线清晰显示:传统SaaS产品增长率持续下滑,而AI驱动的自动化工具呈现指数级上升,预测在2027年出现历史性交叉点…

2026/9/19 8:31:48 阅读更多 →
郑州万和热水器检修电话|点火后自动断热检查|欧米到家服务电话

郑州万和热水器检修电话|点火后自动断热检查|欧米到家服务电话

洗澡时热水忽冷忽热、燃气热水器打不着火、电热水器加热慢、空气能热水不够用、太阳能控制器报警……这些问题表面上都指向“没有热水”,实际背后却可能涉及水路、电路、燃气、燃烧、排烟、温控、传感器、安装环境及长期维护等多个环节。真正专业的热水器维修&#…

2026/9/19 8:31:48 阅读更多 →
郑州美的热水器故障报修电话|频繁熄火漏水排查|欧米到家服务热线

郑州美的热水器故障报修电话|频繁熄火漏水排查|欧米到家服务热线

洗澡时热水忽冷忽热、燃气热水器打不着火、电热水器加热慢、空气能热水不够用、太阳能控制器报警……这些问题表面上都指向“没有热水”,实际背后却可能涉及水路、电路、燃气、燃烧、排烟、温控、传感器、安装环境及长期维护等多个环节。真正专业的热水器维修&#…

2026/9/19 8:31:48 阅读更多 →
多目标决策实战:用Python实现TOPSIS与AHP的云服务选型

多目标决策实战:用Python实现TOPSIS与AHP的云服务选型

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 8:31:48 阅读更多 →
GitHub Trending W35:AI图像生成、架构核验与终端编程代理实战拆解

GitHub Trending W35:AI图像生成、架构核验与终端编程代理实战拆解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 8:30:48 阅读更多 →

日新闻

BP神经网络时序预测:滑窗长度与多窗口平均策略

BP神经网络时序预测:滑窗长度与多窗口平均策略

简介:面向机器学习、深度学习与数据建模学习者的一份完整研究文献,聚焦BP神经网络在农业产量预测中的应用。文档以1980—2018年全国棉花产量为样本,系统讲解数据归一化处理、激活函数原理、多层神经网络结构搭建及训练流程,展示敏…

2026/9/19 0:00:30 阅读更多 →
Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

上个月调一个Deformable DETR模型,在单卡上要跑将近两天。第二天早上我下意识打开终端翻日志,发现loss从凌晨两点就开始往上爬,一路从0.8涨到1.35,整整六个小时没人发现。那六个小时的训练不仅白跑,还霸占着卡——等于…

2026/9/19 0:00:30 阅读更多 →
OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南 【免费下载链接】opencloud 🌤️ OpenCloud is the open source platform for file management, sharing and collaboration. Simple and sovereign. 项目地址: htt…

2026/9/19 0:00:30 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/19 3:59:36 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/19 3:53:08 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/19 4:02:43 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/16 22:31:27 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/15 21:39:18 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/16 22:32:59 阅读更多 →