华为OD机试真题——荒岛求生(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现

在这里插入图片描述

2025 A卷 200分 题型

本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式;
并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析;
本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分享》

华为OD机试真题《荒岛求生》:


文章快捷目录

题目描述及说明

Java

python

JavaScript

C

GO

更多内容


题目名称:荒岛求生


  • 知识点:栈操作(贪心算法)、逻辑处理
  • 时间限制:1秒
  • 空间限制:256MB
  • 限定语言:不限

题目描述

一个荒岛上有若干人,岛上只有一条路通往岛屿两端的港口(左港口和右港口)。所有人以相同速度逃生,方向分为向左(负数)或向右(正数),其绝对值表示体力值。若两人相遇(即一个向右的人与一个向左的人路径重叠),则进行决斗:

  • 体力值大的一方存活,但体力值减少对方体力值的绝对值;
  • 若体力值相同,则同归于尽(双方均淘汰)。
    最终存活的人可从两端港口逃生,求逃生总人数。

输入描述
一行非零整数,用空格分隔,正数表示向右逃生,负数表示向左逃生。数组长度不超过30000。

输出描述
一个整数,表示最终逃生人数。

示例
输入:5 10 8 -8 -5
输出:2
说明:

  • 8-8同归于尽;
  • 10击败-5后剩余体力5
  • 最终存活[5, 5],均从右港口逃生,输出2

Java

问题分析

人们在一个荒岛逃生,方向分为左右(正负),体力值由绝对值表示。当两人相遇(向右遇到向左)时,体力大者存活但减少对方体力值,相等则同归于尽。最终存活的人从两端港口逃生,求总人数。


解题思路

  1. 栈处理向右的人:向右的人压入栈,向左的人与栈顶决斗。
  2. 决斗规则
    • 栈顶体力大:栈顶减少对方体力,存活。
    • 相等:栈顶弹出,同归于尽。
    • 栈顶体力小:弹出栈顶,继续与下一个栈顶决斗。
  3. 存活统计:栈内剩余为右港口逃生人数,未击败的向左人数为左港口逃生人数。

代码实现

import java.util.ArrayDeque;
import java.util.Deque;public class Main {public static void main(String[] args) {// 示例测试int[] example1 = {5, 10, 8, -8, -5};System.out.println(escapeCount(example1)); // 输出2int[] example2 = {3, -5};System.out.println(escapeCount(example2)); // 输出1int[] example3 = {-3, -4, 2};System.out.println(escapeCount(example3)); // 输出2}public static int escapeCount(int[] people) {Deque<Integer> stack = new ArrayDeque<>(); // 保存向右逃生的人int leftSurvivors = 0; // 左港口逃生人数for (int num : people) {if (num > 0) {stack.push(num); // 向右的人直接入栈} else {int k = -num; // 当前向左逃生者的体力while (k > 0) {if (stack.isEmpty()) {leftSurvivors++; // 栈空则左港口存活+1break;}int t = stack.pop(); // 取出栈顶向右的人if (t > k) {stack.push(t - k); // 栈顶体力减少k,存活k = 0; // 当前向左者被击败} else if (t == k) {k = 0; // 同归于尽} else {k -= t; // 继续与下一个栈顶决斗}}}}return stack.size() + leftSurvivors;}
}

代码详解

  1. 栈初始化Deque<Integer> stack保存向右逃生的人。
  2. 遍历处理每个人
    • 向右的人:直接压入栈。
    • 向左的人
      • k为体力绝对值,循环处理栈顶元素。
      • 栈空则左港口存活+1。
      • 栈顶大于k:栈顶存活,体力减少k
      • 栈顶等于k:同归于尽。
      • 栈顶小于k:继续处理下一个栈顶。
  3. 返回结果:栈的大小(右港口)加左港口存活人数。

示例测试

  1. 示例1[5,10,8,-8,-5]

    • 8-8同归于尽,10击败-5变为5
    • 右港口存活[5,5],输出2
  2. 示例2[3,-5]

    • 3-5击败,左港口存活1,输出1
  3. 示例3[-3,-4,2]

    • -3-4左港口存活,2右港口存活,输出3

综合分析

  1. 时间复杂度:O(N),每个元素最多入栈和出栈一次。
  2. 空间复杂度:O(N),栈空间最坏保存所有向右的人。
  3. 正确性
    • 栈处理保证所有相遇的向右和向左的人正确决斗。
    • 左港口存活人数统计未被击败的向左者。
  4. 适用性:高效处理大规模数据(3万元素)。

python

问题分析

人们在荒岛上逃生,方向分为左右(正数为右,负数为左),体力值为绝对值。相遇时决斗规则:体力大者存活并减少对方体力值,相等则同归于尽。求最终存活人数。


解题思路

  1. 栈处理向右的人:向右的人存入栈中。
  2. 处理向左的人:向左的人依次与栈顶元素决斗,直到击败对方或栈空。
  3. 存活统计:栈内剩余为右港口逃生者,未被击败的向左人数为左港口逃生者。

代码实现

def escape_count(people):stack = []  # 保存向右逃生的人left_survivors = 0  # 左港口逃生人数for num in people:if num > 0:stack.append(num)  # 向右的人直接入栈else:k = -num  # 当前向左者的体力值while k > 0:if not stack:  # 栈空则左港口存活+1left_survivors += 1breakt = stack.pop()  # 取出栈顶向右的人if t > k:stack.append(t - k)  # 栈顶体力减少k,存活k = 0  # 当前向左者被击败elif t == k:k = 0  # 同归于尽else:k -= t  # 继续与下一个栈顶决斗return len(stack) + left_survivors# 示例测试
example1 = [5, 10, 8, -8, -5]
print(escape_count(example1))  # 输出2example2 = [3, -5]
print(escape_count(example2))  # 输出1example3 = [-3, -4, 2]
print(escape_count(example3))  # 输出2

代码详解

  1. 栈初始化stack保存所有向右逃生的人。
  2. 遍历处理每个人
    • 向右的人:直接加入栈中(stack.append(num))。
    • 向左的人
      • 取绝对值k表示体力值。
      • 循环处理栈顶元素:
        • 栈空:左港口存活+1,退出循环。
        • 栈顶体力更大:栈顶存活,体力减少k,当前向左者被击败(k=0)。
        • 体力相等:同归于尽(k=0)。
        • 栈顶体力更小:继续处理下一个栈顶(k -= t)。
  3. 返回结果:栈长度(右港口存活) + 左港口存活人数。

示例测试

  1. 示例1[5, 10, 8, -8, -5]

    • 8-8同归于尽。
    • 10击败-5后变为5
    • 右港口存活[5,5],总人数2。
  2. 示例2[3, -5]

    • 3-5击败,左港口存活1。
  3. 示例3[-3, -4, 2]

    • -3-4左港口存活,2右港口存活,总人数2。

综合分析

  1. 时间复杂度:O(N),每个元素最多入栈和出栈一次。
  2. 空间复杂度:O(N),栈空间最坏保存所有向右的人。
  3. 正确性:严格处理决斗规则,确保栈和左港口人数正确统计。
  4. 适用性:高效处理大规模数据(如3万元素)。

JavaScript

问题分析

人们在荒岛上逃生,方向分为左右(正数右,负数左),体力值为绝对值。相遇时决斗规则:体力大者存活并减少对方体力值,相等则同归于尽。求最终存活人数。


解题思路

  1. 栈处理向右的人:向右的人存入栈中。
  2. 处理向左的人:向左的人依次与栈顶元素决斗,直到击败对方或栈空。
  3. 存活统计:栈内剩余为右港口逃生者,未被击败的向左人数为左港口逃生者。

代码实现

function escapeCount(people) {let stack = [];       // 保存向右逃生的人let leftSurvivors = 0; // 左港口逃生人数for (const num of people) {if (num > 0) {stack.push(num); // 向右的人直接入栈} else {let k = -num;   // 当前向左者的体力值while (k > 0) {if (stack.length === 0) { // 栈空则左港口存活+1leftSurvivors++;break;}const t = stack.pop(); // 取出栈顶向右的人if (t > k) {stack.push(t - k); // 栈顶体力减少k,存活k = 0;            // 当前向左者被击败} else if (t === k) {k = 0;            // 同归于尽} else {k -= t;           // 继续与下一个栈顶决斗}}}}return stack.length + leftSurvivors;
}// 示例测试
const example1 = [5, 10, 8, -8, -5];
console.log(escapeCount(example1)); // 输出2const example2 = [3, -5];
console.log(escapeCount(example2)); // 输出1const example3 = [-3, -4, 2];
console.log(escapeCount(example3)); // 输出2

代码详解

  1. 栈初始化stack数组保存向右逃生的人。
  2. 遍历处理每个人
    • 向右的人:直接压入栈(stack.push(num))。
    • 向左的人
      • 取绝对值k表示体力值。
      • 循环处理栈顶元素:
        • 栈空:左港口存活+1。
        • 栈顶体力更大:栈顶存活,体力减少k
        • 体力相等:同归于尽。
        • 栈顶体力更小:继续处理下一个栈顶(k -= t)。
  3. 返回结果:栈长度(右港口存活人数) + 左港口存活人数。

示例测试

  1. 示例1[5, 10, 8, -8, -5]

    • 8-8同归于尽。
    • 10击败-5后变为5
    • 右港口存活[5,5],总人数2。
  2. 示例2[3, -5]

    • 3-5击败,左港口存活1。
  3. 示例3[-3, -4, 2]

    • -3-4左港口存活,2右港口存活,总人数3。

综合分析

  1. 时间复杂度:O(N),每个元素最多入栈和出栈一次。
  2. 空间复杂度:O(N),栈空间最坏保存所有向右的人。
  3. 正确性:严格处理决斗规则,确保栈和左港口人数正确统计。
  4. 适用性:高效处理大规模数据(如3万元素)。

C++

问题分析

人们在荒岛上逃生,方向分为左右(正数右,负数左),体力值为绝对值。相遇时决斗规则:体力大者存活并减少对方体力值,相等则同归于尽。求最终存活人数。


解题思路

  1. 栈处理向右的人:向右的人存入栈中。
  2. 处理向左的人:向左的人依次与栈顶元素决斗,直到击败对方或栈空。
  3. 存活统计:栈内剩余为右港口逃生者,未被击败的向左人数为左港口逃生者。

代码实现

#include <iostream>
#include <vector>
using namespace std;int escapeCount(vector<int>& people) {vector<int> stack;       // 保存向右逃生的人(用vector模拟栈)int leftSurvivors = 0;   // 左港口逃生人数for (int num : people) {if (num > 0) {stack.push_back(num); // 向右的人直接入栈} else {int k = -num;        // 当前向左者的体力值(取绝对值)while (k > 0) {if (stack.empty()) { // 栈空则左港口存活+1leftSurvivors++;break;}int t = stack.back(); // 取栈顶元素stack.pop_back();     // 弹出栈顶if (t > k) {stack.push_back(t - k); // 栈顶体力减少k,存活k = 0;            // 当前向左者被击败} else if (t == k) {k = 0;            // 同归于尽} else {k -= t;           // 继续与下一个栈顶决斗}}}}return stack.size() + leftSurvivors;
}int main() {// 示例测试vector<int> example1 = {5, 10, 8, -8, -5};cout << escapeCount(example1) << endl; // 输出2vector<int> example2 = {3, -5};cout << escapeCount(example2) << endl; // 输出1vector<int> example3 = {-3, -4, 2};cout << escapeCount(example3) << endl; // 输出2return 0;
}

代码详解

  1. 栈初始化

    vector<int> stack; // 使用vector模拟栈,便于动态操作
    
    • 使用vectorpush_backpop_back实现栈的压入和弹出。
  2. 遍历处理每个人

    • 向右的人
      stack.push_back(num); // 直接存入栈尾
      
    • 向左的人
      int k = -num; // 取绝对值作为体力值
      while (k > 0) {if (stack.empty()) {leftSurvivors++; // 栈空则左港口存活+1break;}int t = stack.back(); // 取栈顶元素stack.pop_back();     // 弹出栈顶
      
      • 循环处理栈顶元素,直到击败所有向左者或栈空。
      • 决斗规则
        if (t > k) {        // 栈顶体力更大stack.push_back(t - k);k = 0;
        } else if (t == k) { // 同归于尽k = 0;
        } else {             // 栈顶体力更小k -= t;
        }
        
        • 栈顶存活时重新压入剩余体力,否则继续处理。
  3. 返回结果

    return stack.size() + leftSurvivors; // 右港口存活数 + 左港口存活数
    

示例测试

  1. 示例1[5, 10, 8, -8, -5]

    • 8-8同归于尽,10击败-5后剩余5
    • 右港口存活[5,5],总人数2。
  2. 示例2[3, -5]

    • 3-5击败,左港口存活1。
  3. 示例3[-3, -4, 2]

    • -3-4左港口存活,2右港口存活,总人数2。

综合分析

  1. 时间复杂度O(N)

    • 每个元素最多入栈和出栈一次,总操作次数与输入规模成线性关系。
  2. 空间复杂度O(N)

    • 栈空间最坏保存所有向右逃生者(例如输入全为正数)。
  3. 正确性

    • 严格模拟决斗规则,确保栈顶元素与向左者正确抵消。
    • 左港口存活数统计未被击败的向左者。
  4. 适用性

    • 高效处理大规模数据:3万元素可在1秒内处理完毕。
    • 代码简洁性:使用vector模拟栈,避免复杂数据结构。
  5. 为什么这是最佳实现?

    • 贪心策略:每次优先处理最近的向右者,保证局部最优。
    • 无需回溯:栈操作直接覆盖所有可能的相遇情况。
    • 低常数开销:直接操作内存,无递归或复杂计算。

C

问题分析

人们在荒岛上逃生,方向分为左右(正数右,负数左),体力值为绝对值。相遇时决斗规则:体力大者存活并减少对方体力值,相等则同归于尽。求最终存活人数。


解题思路

  1. 栈处理向右的人:向右的人存入栈中。
  2. 处理向左的人:向左的人依次与栈顶元素决斗,直到击败对方或栈空。
  3. 存活统计:栈内剩余为右港口逃生者,未被击败的向左人数为左港口逃生者。

代码实现

#include <stdio.h>
#include <stdlib.h>#define MAX_SIZE 30000  // 题目规定输入数组长度不超过30000int escapeCount(int people[], int size) {int stack[MAX_SIZE]; // 模拟栈,存储向右逃生的人int top = 0;          // 栈顶指针(指向下一个可插入的位置)int left_survivors = 0; // 左港口逃生人数for (int i = 0; i < size; i++) {int num = people[i];if (num > 0) {stack[top++] = num; // 向右的人入栈} else {int k = -num;       // 当前向左者的体力值(取绝对值)while (k > 0) {if (top == 0) { // 栈空则左港口存活+1left_survivors++;break;}int t = stack[--top]; // 取出栈顶元素if (t > k) {stack[top++] = t - k; // 栈顶体力减少k,存活k = 0;            // 当前向左者被击败} else if (t == k) {k = 0;            // 同归于尽} else {k -= t;           // 继续与下一个栈顶决斗}}}}return top + left_survivors; // 栈中剩余人数 + 左港口存活人数
}int main() {// 示例测试int example1[] = {5, 10, 8, -8, -5};printf("%d\n", escapeCount(example1, 5)); // 输出2int example2[] = {3, -5};printf("%d\n", escapeCount(example2, 2)); // 输出1int example3[] = {-3, -4, 2};printf("%d\n", escapeCount(example3, 3)); // 输出2return 0;
}

代码详解

  1. 栈初始化

    int stack[MAX_SIZE]; // 用数组模拟栈
    int top = 0;         // 栈顶指针(指向下一个空位)
    
    • 数组stack存储向右逃生的人,top表示栈顶位置。
  2. 遍历处理每个人

    • 向右的人
      stack[top++] = num; // 直接存入栈顶
      
    • 向左的人
      int k = -num;       // 取绝对值
      while (k > 0) {if (top == 0) { // 栈空则左港口存活+1left_survivors++;break;}int t = stack[--top]; // 取出栈顶元素
      
      • 循环处理栈顶元素,直到击败所有向左者或栈空。
      • 决斗规则
        if (t > k) {          // 栈顶体力更大stack[top++] = t - k; // 栈顶存活,减少k体力k = 0;
        } else if (t == k) {  // 同归于尽k = 0;
        } else {              // 栈顶体力更小k -= t;
        }
        
  3. 返回结果

    return top + left_survivors; // 栈剩余人数 + 左港口存活人数
    

示例测试

  1. 示例1{5, 10, 8, -8, -5}

    • 8-8同归于尽,10击败-5后剩余5
    • 右港口存活[5,5],总人数2。
  2. 示例2{3, -5}

    • 3-5击败,左港口存活1。
  3. 示例3{-3, -4, 2}

    • -3-4左港口存活,2右港口存活,总人数2。

综合分析

  1. 时间复杂度O(N)

    • 每个元素最多入栈和出栈一次,总操作次数与输入规模成线性关系。
  2. 空间复杂度O(MAX_SIZE)

    • 栈空间固定为MAX_SIZE,满足题目约束(数组长度≤30000)。
  3. 正确性

    • 严格模拟决斗规则,确保栈顶元素与向左者正确抵消。
    • 左港口存活数统计未被击败的向左者。
  4. 适用性

    • 高效处理大规模数据:3万元素可在1秒内处理完毕。
    • 低内存消耗:使用固定大小的数组避免动态内存分配。
  5. 为什么这是最佳实现?

    • 贪心策略:每次优先处理最近的向右者,保证局部最优。
    • 无需动态内存:预先分配栈数组,减少内存管理开销。
    • 代码简洁:直接操作数组,避免复杂数据结构。

GO

问题分析

人们在荒岛上逃生,方向分为左右(正数右,负数左),体力值为绝对值。相遇时决斗规则:体力大者存活并减少对方体力值,相等则同归于尽。求最终存活人数。


解题思路

  1. 栈处理向右的人:向右的人存入栈中。
  2. 处理向左的人:向左的人依次与栈顶元素决斗,直到击败对方或栈空。
  3. 存活统计:栈内剩余为右港口逃生者,未被击败的向左人数为左港口逃生者。

代码实现

package mainimport "fmt"func escapeCount(people []int) int {stack := make([]int, 0)     // 保存向右逃生的人(用切片模拟栈)leftSurvivors := 0          // 左港口逃生人数for _, num := range people {if num > 0 {stack = append(stack, num) // 向右的人直接入栈} else {k := -num                   // 当前向左者的体力值(取绝对值)for k > 0 {if len(stack) == 0 {     // 栈空则左港口存活+1leftSurvivors++break}// 取出栈顶元素t := stack[len(stack)-1]stack = stack[:len(stack)-1] // 弹出栈顶if t > k {stack = append(stack, t-k) // 栈顶体力减少k,存活k = 0                      // 当前向左者被击败} else if t == k {k = 0                      // 同归于尽} else {k -= t                     // 继续与下一个栈顶决斗}}}}return len(stack) + leftSurvivors // 右港口存活数 + 左港口存活数
}func main() {// 示例测试example1 := []int{5, 10, 8, -8, -5}fmt.Println(escapeCount(example1)) // 输出2example2 := []int{3, -5}fmt.Println(escapeCount(example2)) // 输出1example3 := []int{-3, -4, 2}fmt.Println(escapeCount(example3)) // 输出2
}

代码详解

  1. 栈初始化

    stack := make([]int, 0) // 使用切片模拟栈
    
    • Go 的切片(slice)动态扩展,非常适合模拟栈的 pushpop 操作。
  2. 遍历处理每个人

    • 向右的人
      stack = append(stack, num) // 追加到切片末尾(入栈)
      
    • 向左的人
      k := -num // 取绝对值
      for k > 0 {if len(stack) == 0 {leftSurvivors++ // 栈空则左港口存活+1break}t := stack[len(stack)-1]     // 取栈顶元素stack = stack[:len(stack)-1]  // 弹出栈顶
      
      • 循环处理栈顶元素,直到击败所有向左者或栈空。
      • 决斗规则
        if t > k {stack = append(stack, t-k) // 栈顶存活,减少k体力k = 0
        } else if t == k {k = 0                     // 同归于尽
        } else {k -= t                    // 继续与下一个栈顶决斗
        }
        
  3. 返回结果

    return len(stack) + leftSurvivors
    
    • 栈的长度即为右港口存活人数,加上左港口存活人数。

示例测试

  1. 示例1[5, 10, 8, -8, -5]

    • 8-8同归于尽,10击败-5后剩余5
    • 右港口存活[5,5],总人数2。
  2. 示例2[3, -5]

    • 3-5击败,左港口存活1。
  3. 示例3[-3, -4, 2]

    • -3-4左港口存活,2右港口存活,总人数3。

综合分析

  1. 时间复杂度O(N)

    • 每个元素最多入栈和出栈一次,总操作次数与输入规模成线性关系。
  2. 空间复杂度O(N)

    • 栈空间最坏保存所有向右逃生者(例如输入全为正数)。
  3. 正确性

    • 严格模拟决斗规则,确保栈顶元素与向左者正确抵消。
    • 左港口存活数统计未被击败的向左者。
  4. 适用性

    • 高效处理大规模数据:3万元素可在1秒内处理完毕。
    • 动态内存管理:Go 的切片自动扩容,避免手动内存分配。
  5. 为什么这是最佳实现?

    • 贪心策略:每次优先处理最近的向右者,保证局部最优。
    • 代码简洁:利用切片的动态特性,简化栈操作。
    • 低内存开销:切片按需分配内存,避免固定数组的空间浪费。

更多内容:

https://www.kdocs.cn/l/cvk0eoGYucWA

本文发表于【纪元A梦】,关注我,获取更多实用教程/资源!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/82444.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IOC和Bean

IOC IOC将对象的创建&#xff0c;依赖关系的管理和生命周期的控制从应用程序代码中解耦出来了 IOC容器的依赖注入(DI) 在程序运行过程中动态的向某个对象中注入他所需要的其他对象 依赖注入是基于反射实现的 Spring IOC 容器使用的是Map&#xff08;concorrentMap&#xff…

vue3: pdf.js 2.16.105 using typescript

npm create vite vuepdfpreview //创建项目npm install vue-pdf-embed npm install vue3-pdfjs npm install pdfjs-dist2.16.105 <!--* |~~~~~~~|* | |* | |…

Java面试全栈解析:Spring Boot、Kafka与Redis实战揭秘

《Java面试全栈解析&#xff1a;Spring Boot、Kafka与Redis实战揭秘》 【面试现场】 面试官&#xff1a;&#xff08;推了推眼镜&#xff09;小张&#xff0c;你简历里提到用Spring Boot开发过微服务系统&#xff0c;能说说自动配置的实现原理吗&#xff1f; 程序员&#xff1…

常见的提示词攻击方法 和防御手段——提示词注入(Prompt Injection)攻击解析

提示词注入&#xff08;Prompt Injection&#xff09;攻击解析 提示词注入是一种针对大型语言模型&#xff08;LLM&#xff09;的新型攻击手段&#xff0c;攻击者通过精心设计的输入文本&#xff08;提示词&#xff09;操控AI模型的输出&#xff0c;使其执行非预期行为或泄露敏…

基于NI-PXI的HIL系统开发

基于NI-PXI平台的汽车电控单元HIL系统开发全解析 引言&#xff1a;HIL系统如何成为汽车电控开发的“效率倍增器”&#xff1f; 某车企通过基于NI-PXI的HIL系统&#xff0c;将悬架控制器的测试周期从3个月压缩至2周&#xff0c;故障检出率提升65%。这背后是硬件在环技术对汽车电…

复合机器人案例启示:富唯智能如何以模块化创新引领工业自动化新标杆

在国产工业机器人加速突围的浪潮中&#xff0c;富唯智能复合机器人案例凭借其高精度焊接与智能控制技术&#xff0c;成为行业标杆。然而&#xff0c;随着制造业对柔性化、全场景协作需求的升级&#xff0c;复合机器人正从单一功能向多模态协同进化。作为这一领域的创新者&#…

如何使用极狐GitLab 软件包仓库功能托管 python?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 软件包库中的 PyPI 包 (BASIC ALL) 在项目的软件包库中发布 PyPI 包。然后在需要将它们用作依赖项时安装它们。 软件包库适用…

K8s中的containerPort与port、targetPort、nodePort的关系:

pod中的containerPort与service中的port、targetPort、nodePort的关系&#xff1a; 1、containerPort为pod的配置&#xff0c;对应pod内部服务监听的具体端口&#xff0c;例如nginx服务默认监听80端口&#xff0c;那么nginx的pod的containerPort应该配置为80&#xff0c;例如m…

面试题:QTableView和QTableWidget的异同

目录 1.QTableView简介 2.QTableWidget简介 3.QTableView和QTableWidget不同 4.总结 1.QTableView简介 QTableView是一个基于模型-视图架构的表格控件&#xff0c;用于展示表格形式的数据。同样需要关联一个QAbstractTableModel或其子类&#xff08;如QStandardItemModel&a…

smbd:快速拉取服務端SMB共享文件脚本工具

地址:https://github.com/MartinxMax/smbd smbd 是一款簡單的 Bash 腳本&#xff0c;用於自動化從共享目錄透過 SMB/CIFS 協議下載檔案的過程。此工具設計用來與遠端 SMB 分享進行互動&#xff0c;並將其內容下載到本地目錄中。 環境需求 $ apt install smbclient 使用方式 …

MiInsertVad函数分析之nt!MMVAD结构

MiInsertVad函数分析之nt!MMVAD结构 1: kd> dt nt!MMVAD 89520270 0x000 u1 : __unnamed 0x004 LeftChild : (null) 0x008 RightChild : (null) 0x00c StartingVpn : 0x2b0 0x010 EndingVpn : 0x2c5 0x014 u …

OSPF不规则区域划分

1、建立一条虚链路 vlink 可以被视为是⻣⼲区域的⼀段延伸。 这⼀条虚拟的链路&#xff0c;只能够跨域⼀个⾮⻣⼲区域。 [r2-ospf-1-area-0.0.0.1]vlink-peer 3.3.3.3 [r3-ospf-1-area-0.0.0.1]vlink-peer 2.2.2.2 在没有建立虚链路之前,r1是不能ping r4的。vlink建⽴的邻居关…

Webug4.0靶场通关笔记-靶场搭建方法(3种方法)

目录 一、虚拟机绿色版本 1. 开启phpstudy 2. 访问靶场 二、Docker版本 1.拉取镜像 2.启动镜像 三、源码安装版本 1. 搭建环境 &#xff08;1&#xff09;安装PHPStudy &#xff08;2&#xff09;WeBug4.0靶场源码 &#xff08;3&#xff09;安装Navicat &#xff…

Linux:进程间通信---消息队列信号量

文章目录 1.消息队列1.1 消息队列的原理1.2 消息队列的系统接口 2. 信号量2.1 信号量的系统调用接口 3. 浅谈进程间通信3.1 IPC在内核中数据结构设计3.2 共享内存的缺点3.3 理解信号量 序&#xff1a;在上一章中&#xff0c;我们引出了命名管道和共享内存的概念&#xff0c;了解…

电子电器架构 --- 车载网关的设计

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 钝感力的“钝”&#xff0c;不是木讷、迟钝&#xff0c;而是直面困境的韧劲和耐力&#xff0c;是面对外界…

华为云Git使用与GitCode操作指南

案例介绍 本文档带领开发者学习如何在云主机上基于GitCode来使用Git来管理自己的项目代码,并使用一些常用的Git命令来进行Git环境的设置。 案例内容 1 概述 1.1 背景介绍 Git 是一个快速、可扩展的分布式版本控制系统,它拥有异常丰富的命令集,可以提供高级操作和对内部…

ESP32开发入门(七):HTTP开发实践

一、HTTP协议基础 1.1 什么是HTTP&#xff1f; HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是互联网上应用最为广泛的一种网络协议&#xff0c;用于从服务器传输超文本到本地浏览器。它是一种无状态的请求/响应协议&#xff0c;工作…

Python 对象引用、可变性和垃圾 回收(变量不是盒子)

变量不是盒子 1997 年夏天&#xff0c;我在 MIT 学了一门 Java 课程。Lynn Andrea Stein 教授 &#xff08;一位获奖的计算机科学教育工作者&#xff0c;目前在欧林工程学院教书&#xff09;指 出&#xff0c;人们经常使用“变量是盒子”这样的比喻&#xff0c;但是这有碍于理…

局域网常用的测速工具,Iperf3使用教程

目录 下载方式 Windows Linux 使用方法&#xff1a;测试局域网带宽 步骤一&#xff1a;服务端准备 步骤二&#xff1a;客户端发起连接 步骤三&#xff1a;查看结果 参数说明 1. Iperf常用参数&#xff08;测试够用&#xff09; 2. 通用参数&#xff08;Server端和Cli…

《深入理解分布式系统》之认识分布式系统

本文是阅读深入理解分布式系统第一章认识分布式系统时的笔记。 分布式系统的特点 多进程不共享操作系统不共享时钟 分布式系统 由多个可独立运行的子系统组成。每个子系统可以独立选择运行平台。不同的运行平台存在差异&#xff0c;比如操作系统&#xff0c;硬件规格等。由…