当前位置: 首页 > news >正文

k8s源码分析——kubectl命令行交互

Cobra库

k8s各组件的cli部分都使用Cobra库实现,Cobra 中文文档 - 掘金 (juejin.cn),获取方式如下:

go get -u github.com/spf13/cobra@latest

cobra库中的Command结构体的字段,用于定义命令行工具的行为和选项。它们的作用如下:

    Use: 命令名称。Aliases: 命令的别名。SuggestFor: 命令建议使用的单词列表。Short: 命令简短描述。GroupID: 命令所属的命令组。Long: 命令详细描述。Example: 命令的使用示例。ValidArgs: 命令接受的参数列表。ValidArgsFunction: 命令用于提供动态参数补全的函数。Args: 命令的位置参数列表。ArgAliases: 位置参数的别名。BashCompletionFunction: 生成Bash补全的函数。Deprecated: 命令是否已经过时的标志。Annotations: 命令的附加注释信息。Version: 命令版本号。PersistentPreRun: 每次执行该命令之前都会执行的函数。PersistentPreRunE: 每次执行该命令之前都会执行的返回错误的函数。PreRun: 每次执行该命令之前都会执行的函数。PreRunE: 每次执行该命令之前都会执行的返回错误的函数。Run: 执行命令的函数。RunE: 执行命令的返回错误的函数,RunE与Run的差别是,RunE执行有错误会直接return,Run无论是否有错误,都会继续执行后面PostRun和PersistentPostRun等逻辑。PostRun: 每次执行该命令之后都会执行的函数。PostRunE: 每次执行该命令之后都会执行的返回错误的函数。PersistentPostRun: 每次执行该命令之后都会执行的函数。PersistentPostRunE: 每次执行该命令之后都会执行的返回错误的函数。FParseErrWhitelist : 忽略特定的解析错误CompletionOptions :控制 shell 自动完成的选项TraverseChildren: 解析父命令的标志后再执行子命令Hidden : 隐藏命令,不在可用命令列表中显示SilenceErrors : 静默下游错误SilenceUsage : 静默错误时不显示用法DisableFlagParsing : 禁用标志解析DisableAutoGenTag : 禁用自动生成的标记DisableFlagsInUseLine : 在打印帮助或生成文档时禁用“[flags]”在用法行中的添加DisableSuggestions : 禁用基于Levenshtein距离的建议SuggestionsMinimumDistance : 显示建议的最小Levenshtein距离

kubectl执行流程

创建cobra.Command对象

    主要流程在cmd.NewDefaultKubectlCommand()中,构建KubectlOptions对象(Kubectl Command的配置对象),指定插件、命令行参数、通用配置和输入输出流,然后调用NewDefaultKubectlCommandWithArgs函数创建Command对象,NewDefaultKubectlCommandWithArgs中调用NewKubectlCommand构建Command对象。

  • 创建&cobra.Command{实例,指定Run函数(执行cmd.help)。指定PersistentPreRunE函数,在Run前进行初始化。指定PersistentPostRunE函数,在Run后执行,将配置写入到磁盘。
  • 为所有的子命令和flag设置规范化函数cliflag.WarnWordSepNormalizeFunc,当参数中包含 "_" 时,会将参数中的 "_" 替换为 "-",同时提示警告信息。
  • addProfilingFlags(flags):增加性能调优的参数开关,统计CPU,内存等相关信息,用于性能优化
  • 添加bool类型全局标志warnings-as-errors,默认值为false
  • 创建ConfigFlags对象,设置命令参数,将参数解析值绑定到kubeConfigFlags
  • 添加一个是否匹配client与server版本的参数match-server-version
  • addCmdHeaderHooks(cmds, kubeConfigFlags):为为rest client 增加HTTP Header,依照SIG CLI KEP 859标准
  • 将kubeconfig对象包装成一个Factory类型,Factory是一个通用对象,它提供了与kube-apiserver的交互方式,以及验证资源对象等方法。 Factory接口封装了 DynamicClient、KubernetesClientSet(简称ClientSet)及RESTClient 3种client-go客户端与kube-apiserver交互的方式。
  • 添加所有的子命令,将所有命令存放在不同的group数组中,然后groups.Add(cmds)将所有的子命令添加,groups.Add函数中会调用cobra库中的AddCommand方法添加子命令。
  • 添加其他子命令。
  • 返回command对象

Command对象的执行

  创建了cobra.Command对象后,调用Kubectl封装的RunNoErrOutput方法,进入Command对象的执行。

  • 设置全局规范化参数cliflag.WordSepNormalizeFunc,将参数中的 "_" 替换为 "-"。
  • flag解析错误打印设置,如果有错误不打印使用方法
  • 日志相关设置
  • 调用 cmd.Execute() 函数执行command

  每个子命令的主要处理逻辑(cobra.Command.Run函数)Complete、Validate 和 Run三个函数,其中 complete() 函数中会将命令行参数整理对命令行options进行初始化,设置一些默认值;Validate() 函数会对options中的选项进行检查,打印相应的错误提示信息;Run()函数中执行各子命令的主要处理流程。

创建资源对象的过程(kubectl create -f FILENAME)

image

     创建资源对象的流程分为: 实例化Factory接口 、通过Builder和Visitor将资源对象描述文件(deployment.yaml)文本格式转换成资源对象。将资源对象以HTTP请求的方式发送给kube-apiserver,并得到响应结果。最终根据Visitor匿名函数集的errors判断是否成功创建了资源对象。

  • Factory是一个通用对象,它提供了与kube-apiserver的交互方式,以及验证资源对象等方法。 Factory接口封装了 DynamicClient、KubernetesClientSet(简称ClientSet)及RESTClient 3种client-go客户端与kube-apiserver交互的方式。
  • Builder用于将命令行获取的参数转换成资源对象(Resource Object)。它实现了一种通用的资源对象转换功能。
  • Kubernetes Visitor中存在多种实现方法, 不同实现方法的作用不同,如下:

image

 RunCreate()函数流程

  • raw参数处理。
  • 首先通过f.NewBuilder()实例化Builder对象, 通过函数Unstructured()、 Schema()、 ContinueOnError()、NamespaceParam()、 FilenameParam()、LabelSelectorParam()、 Flatten()对参数赋值和初始化, 将参数保存到Builder对象中。 最后通过Do()函数生成最终的rusult对象,设置rusult.visitor。
 1    // 实例化builder对象 r := f.NewBuilder().
 2     // 以map的方式传输数据对象,对响应内容中的数据做一层封装,这样就可以保留所有字段而不需要首先解析成一个struct
 3     Unstructured().
 4     //
 5     Schema(schema).
 6     // 配置result对象在出现错误的行为,意思很明显,在出错后继续
 7     ContinueOnError().
 8     // 基于命令行参数设置查询的namespace
 9     NamespaceParam(cmdNamespace).DefaultNamespace().
10     // 解析文件名参数 参数 -f,文件名被存放在 b.paths 中
11     FilenameParam(enforceNamespace,&o.FilenameOptions).
12     // 解析标签选择器 参数 -l
13     LabelSelectorParam(o.Selector). 
14     // 将对象展开,比如对象是[a, b], 如果没有flatten就是完成访问[a,b]作为一个整体,反之, 让外层函数分别访问a,b
15     Flatten().
16     // 基于之前的配置,生成最终的result对象
17 Do()

  • Do函数中设置rusult.visitor多层匿名函数嵌套关系如下:
 1 result.Visitor = DecoratedVisitor {    // 在函数Do函数中通过NewDecoratedVisitor函数执设置,并且注册了SetNamespace、RequireNamespace、FilterNamespace、RetrieveLazy等修饰函数。
 2     visitor: ContinueOnErrorVisitor {    // 在函数Do函数中,如果b.continueOnError为真设置,b.continueOnError在函数ContinueOnError()设置。
 3         visitor: FlattenListVisitor {    // 在函数Do函数中设置,这个感觉有点多余,在后面的流程中还会设置一个FlattenListVisitor。
 4             visitor: FilteredVisitor {    // 在函数visitByPaths中,含有Selector时设置,对每个对象对应的info对象进行检查,检查函数为FilterByLabelSelector(selector)。
 5                 visitor: FlattenListVisitor {    // 在函数visitByPaths中,b.flatten为真时设置,b.flatten在上面的Flatten()函数中设为true。
 6                     Visitor: EagerVisitorList {    // 在函数visitByPaths中将b.paths强转成EagerVisitorList,调用关系:Do() -> b.visitorResult() -> b.visitByPaths()。
 7                         []b.paths FileVisitor {    // 每个文件对应一个FileVisitor,所有的FileVisitor被append到 b.paths 数组中。
 8                             StreamVisitor: StreamVisitor {
 9                                 Reader: r,
10                                 mapper: mapper,
11                                 Source: source,    
12                                 Schema: b.schema,
13                             },
14                         },
15                     },
16                 },
17             },
18         },
19     },
20 } 
  • 执行Result.Visit(),该函数中会按照上面多层嵌套关系执行每一个Visit函数,按顺序 处理逻辑如下:
    • 从 DecoratedVisitor.Visit 一直到 EagerVisitorList.Visit都是在函数开始就直接执行对象的成员visitor的Visit函数,直到FileVisitor.Visit中才是先执行本身的流程,然后再执行对象的成员visitor的Visit函数。
    • FileVisitor:打开xml文件,读取里面的数据到一个io.Reader中,然后执行StreamVisitor.Visit。
    • StreamVisitor:对xml文件中的数据进行解码,然后执行 infoForData 函数将解码后的数据转换成info对象,然后执行 EagerVisitorList定义的VisitorFunc(通过 FileVisitor 转传入)。
    • EagerVisitorList:将所有的err信息收集到一个集合中返回,如果StreamVisitor出现错误直接 return,如果没有错误执行FlattenListVisitor定义的VisitorFunc。
    • FlattenListVisitor:如果yaml文件中包含多个资源对象,将runtime.ObjectTyper解析成多个runtime.Object,再转换为多个Info,逐个调用VisitorFunc,即执行FilteredVisitor定义的VisitFunc函数。
    • FilteredVisitor:对Info进行检验, 进行Selector检查。如果不满足条件,则返回error信息,如果满足条件则执行VisitorFunc,即FlattenListVisitor定义的VisitFunc函数。
    • FlattenListVisitor:因为上面已经执行过一次FlattenListVisitor了,这里会直接执行ContinueOnErrorVisitor定义的VisitorFunc。
    • ContinueOnErrorVisitor:将Visitor调用过程中产生的错误保留在[]error中,然后执行DecoratedVisitor定义的VisitorFunc。
    • DecoratedVisitor:执行注册过的VisitorFunc,然后执行result指定的VisitorFunc。
    • Result指定的VisitFunc:通过Helper.Create向kube-apiserver发送创建资源的请求,然后将与kube-apiserver交互后得到的结果通过info.Refresh函数更新到info.Object中。Helper.Create最终会进入createResource函数
 1 func (m *Helper) createResource(c RESTClient, resource, namespace string, obj runtime.Object, options *metav1.CreateOptions) (runtime.Object, error) {
 2     // RESTFUL接口风格中,POST请求对应的就时CREATE方法
 3     return c.Post(). 
 4     NamespaceIfScoped(namespace,m.NamespaceScoped).
 5     Resource(resource).
 6     VersionedParams(options,metav1.ParameterCodec).
 7     Body(obj).
 8     // 发送请求
 9     Do(context.TODO()).
10     // 将请求结果转换成runtime.Object
11     Get()
12 }
 

相关文章:

k8s源码分析——kubectl命令行交互

Cobra库 k8s各组件的cli部分都使用Cobra库实现,Cobra 中文文档 - 掘金 (juejin.cn),获取方式如下:go get -u github.com/spf13/cobra@latestcobra库中的Command结构体的字段,用于定义命令行工具的行为和选项。它们的作用如下:Use: 命令名称。Aliases: 命令的别名。Suggest…...

将 seata 2.5 发布到私服

将 seata 2.5 发布到私服1.概述 我们在使用seata 做分布式事务的时候,有时需要将 seata 发布到私服中,方便 修改和调整。 2.实现过程 2.1 在根目录下的pom.xml 中 增加发布配置 <distributionManagement><repository><id>jpaas-release</id><url&…...

一些感悟

1. 突破分型 50分 2. 驱动浪 30分 3. 驱动浪突破分型 80分 4. 驱动浪突破分型 回调61.8% 或 80% 做单 100分 其中突破分型是做单前提 重中之重!...

五款免费低代码平台深度横评:斑斑、简道云、宜搭、氚云、织信如何选?

在当今数字化转型的浪潮中,低代码开发平台以其可视化、拖拽式的开发模式,极大地降低了企业应用开发的门槛和成本,成为企业提升效率、快速响应市场变化的重要工具。对于预算有限的中小企业、初创团队或业务部门而言,免费的低代码平台是绝佳的入门选择。本文将为您客观评析五…...

ubuntu历史版本下载

https://old-releases.ubuntu.com/releases/LTS版本:...

读书笔记:数据库索引的智能优化:反向键与降序索引

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。本文为个人学习《Expert Oracle Database Architecture Techniques and…...

代码随想录算法训练营第十天| 232.用栈实现队列、 225. 用队列实现栈、20. 有效的括号 、1047. 删除字符串中的所有相邻重复项

232.用栈实现队列 题目链接:https://leetcode.cn/problems/implement-queue-using-stacks/description/ 解题思路:用两个栈实现队列,一个入栈,把入栈里面的元素全部放入出栈 代码实现:点击查看代码def __init__(self):self.stack_in = [] #入栈,主要负责pushself.stack_o…...

零成本搭建企业系统:五款免费低代码平台推荐

概述 在数字化转型的背景下,低代码平台正成为企业快速构建信息系统的重要工具。它们通过可视化、组件化的方式,大幅降低了开发门槛和时间成本,即使没有编程背景的业务人员也能参与系统搭建。本文将为大家推荐五款值得尝试的免费低代码平台,帮助中小团队或个人实现零成本高效…...

故障处理:access$表在数据库丢失的恢复

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。故障处理:access$表在数据库丢失的恢复 下面是测试一把access$基表丢失…...

从需求出发:教你判断选斑斑还是织信

斑斑低代码以免费、私有化部署优势,适合中小企业;织信则提供高端解决方案,适合中大型企业,两者各有特色。​在数字化转型的浪潮中,低代码开发平台正成为企业降本增效的利器。在众多国产平台中,斑斑低代码和织信无疑是受关注的两个选择。本文将从多个维度深入分析这两款平…...

PLC结构化文本设计模式——建造者模式(Builder Pattern)

PLC Structured Text Design Patterns PLC结构化文本设计模式——建造者模式(Builder Pattern) 介绍 建造者模式是一种创建型设计模式,它允许你创建复杂对象的步骤与表示方式相分离。 建造者模式是一种创建型设计模式,它的主要目的是将一个复杂对象的构建过程与其表示相分离…...

C++ - STL - 迭代器

什么是迭代器?🤔 想象一下,你有一排整齐的书架,上面放着很多书。你现在想从第一本开始,一本一本地看书名。你怎么做呢? 你会用手指指着第一本书,看完书名后,手指移动到下一本书,再看书名,这样一直指到最后一本书。 在C++的STL中,迭代器就是你的"手指"!它…...

MATLAB的智能扫地机器人工作过程仿真

MATLAB的智能扫地机器人工作过程仿真,结合环境建模、路径规划、避障算法和动态清扫流程一、代码 %% 环境建模(20x20网格地图) mapSize = [20,20]; obstacleDensity = 0.2; % 障碍物密度% 生成随机障碍物地图 envMap = ones(mapSize); obstacles = randi([1,mapSize(1)], cei…...

linux redis 8.2.1软件开机启动redis.service与etc下的rc.local配置2种方式

### 2025-9-8 linux redis 8.2.1软件开机启动```linux 软件开机启动第一种:写服务1、sudo vim /etc/systemd/system/redis.service 内容如redis.service.txt下:[Unit]Description=Redis In-Memory Data StoreAfter=network.target [Service]User=redisGroup=redisExecStart=…...

在GA中添加Tag-GetDynamicSpecSourceTags().AddTag(NewTag)

GetDynamicSpecSourceTags().AddTagexample:FGameplayAbilitySpec AbilitySpec = FGameplayAbilitySpec(AbilityClass,1);AbilitySpec.GetDynamicSpecSourceTags().AddTag(NewTag);其中AbilityClass是GA的Class...

python如何在函数中使用全局变量?

在 Python 中,全局变量是定义在函数外部的变量。要在函数中使用全局变量,需要根据具体情况使用 global 关键字,以下是详细说明和示例: 1. 只读全局变量(无需声明) 如果只是在函数中读取全局变量的值,不需要任何特殊声明,直接使用即可: # 定义全局变量 global_var = &q…...

296、贾生

296、贾生296、贾生 唐●李商隐 宣室求贤访逐臣,贾生才调更无伦。 可怜夜半虚前席,不问苍生问鬼神。【现代诗意译】 汉文帝 在宣室求贤访能 召见贾谊 这个被贬逐臣子 他的才华无与伦比皇帝半夜移膝向前 认真求教 可惜不问人民疾苦 问的是鬼神!小学生C++...

ubuntu 24.04部署mysql8.0.41(glibc2.17)

环境Os:ubuntu 24.04 desktop桌面版mysql:8.0.41 glibc2.17查看操作系统信息root@hxl-VirtualBox:/# uname -aLinux hxl-VirtualBox 6.14.0-29-generic #29~24.04.1-Ubuntu SMP PREEMPT_DYNAMIC Thu Aug 14 16:52:50 UTC 2 x86_64 x86_64 x86_64 GNU/Linuxroot@hxl-VirtualBox:…...

C++ - STL - 键值对pair

键值对——pair STL中的pair是一个模板类,用于将两个可能类型不同的值组合成一个单元,常用于存储键值对或函数返回多个值的场景。 创建上面尖括号里面,是用来指定类型的。这种指定类型的方式STL会一直使用的。 更准确的应该是叫泛型,用到的技术是模板。 使用pair的元素 pai…...

第四天学习:LSTM

流水不争先,争的是滔滔不绝—— 每日渐进,终抵远方LSTM(Long Short-Term Memory,长短期记忆网络) 他的前身是RNN(循环神经网络),为啥我们拿着好端端的RNN不用,非要寻找其他的网络算法呢? 这是因为RNN本身存在缺陷:RNN的初衷:处理序列数据(如句子、语音、时间序列)…...

MATLAB的稀疏自编码器实现

一、核心实现代码 %% 数据准备(以MNIST手写数字为例) [XTrain, YTrain] = digitTrain4DArrayData; % 加载MNIST训练数据 XTest = digitTest4DArrayData; % 加载测试数据% 数据预处理(归一化+向量化) XTrain = double(reshape(XTrain, [], 28 * 28)) / 255; XTe…...

题解:P2157 [SDOI2009] 学校食堂

题目传送门 题目大意 有 \(n\) 个学生,每个学生有一个时间 \(t_i\),所花费的真实时间为 \(t_i\) 异或上前一个吃饭的同学的 \(t_i\)。每个学生有一个忍耐度,最多可以让后面 \(b_i\) 个同学比自己先吃饭。问在不违反忍耐度的条件下,让所有同学吃饭的最小时间。 解题思路 首先…...

LLM 应用开发中的常见模式

以下内容根据AI对话生成,如有雷同,纯属巧合1. 链式调用 (Chaining) 这是最基本也是最常见的模式。它指的是将多个 LLM 调用、数据处理步骤或工具调用按顺序连接起来,形成一个连贯的工作流。前一个步骤的输出是后一个步骤的输入。要解决的问题:单一 LLM 调用无法完成复杂任务…...

vue3 与 element-plus

Vue,Vite>> 安装 vue/cli 脚手架最新牍的cli脚本架为 5.0.9 版本, 在高版本的 Node 中安装脚手架时,会提示 版本不匹配; 主要适配 8~22版本的Node, 另外 Vue Cli 已进入维护模式,官方推荐新项目使用 vite 构建工具>> 切换到 22.18.0 版本重新安装 Vue/cli 不会出…...

可爱的二维数据结构们

前置知识 相信大家都学过了:树套树、二维树状数组; 四分树; K-D Tree;正文 给你一个 \(n\times n\) 二维平面,支持单点修改,矩形查询。这是我们树套树、二维树状数组能解决的,时间复杂度 \(\mathcal{O}(n\log^2n)\)。 那如果我们需要支持区间修改呢?此时不太能树套树,…...

网络安全相关职业

1、安全分析师是构建跨组织安全措施、保护公司免受攻击的关键人物。他们负责探索和评估公司网络,以发现可操作的数据和建议,供工程师制定预防措施。该职位需要与各利益相关方合作,以了解安全需求和安全形势。 2、安全工程师利用威胁和漏洞数据(通常来自安全团队)开发和实施…...

202005_CTFHUB_Redis流量

Redis流量分析Tags:流量分析,REDIS 0x00. 题目 附件路径:https://pan.baidu.com/s/1GyH7kitkMYywGC9YJeQLJA?pwd=Zmxh#list/path=/CTF附件 附件名称:202005_CTFHUB_Redis.zip 0x01. WP 1. 用Wireshark打开流量包,过滤关键字flag 找到后半部分的flag及前半部分的参数名,过滤…...

langchain学习之路

以下内容是根据与AI对话完成的学习规划,如果有雷同,纯属巧合纯AI生成,阶段一:筑基入门 (1-2周) 这个阶段的目标是理解 LangChain 解决的核心问题、基本概念和核心组件。 学习目标:理解 LLM 应用开发中的常见模式(如链式调用、代理)。 熟悉 LangChain 的核心模块(Models…...

通义灵码产品演示: 数据库设计与数据分析

作者:了哥 演示主题:AI 进行数据库设计以及做数据分析 演示目的 演示通义灵码对于数据库的设计能力以及数据分析能力。 演示准备准备数据库,这里为了简单实用 sqlite3brew install sqlite3使用 vscode,同时安装好通义灵码的插件安装 uvxpip install uvx这里需要注意 python…...

win10安装mysql,MySQL5.7详细教程

还在为Windows10安装MySQL折腾得焦头烂额?作为全球最受欢迎的开源数据库,MySQL在开发环境搭建中必不可少。本文将手把手带你完成从下载到配置的全过程,避开安装过程中的各种"坑"。 下载MySQL安装包 首先访问MySQL官网下载专区,选择社区版(Community)的5.7.22版本…...

第二周作业

问题一 1.1 changeStr:尝试将x赋值为“xyz” changeArr:遍历string数组,把数组的每个元素都接上他们的索引 1.2 main方法里的x没有被改变,因为x的类型是string,非可变对象 1.3 改变了 因为这里对数组进行更改 是可变的 可影响原数组 1.4 来自于命令行参数 如果是命令行就在…...

ubuntu 24编译安装libssl.so.1.0.0

环境: Os:ubuntu 24.04在使用xtrabackup 8.0(percona-xtrabackup-8.0.35-31-Linux-x86_64.glibc2.17.tar.gz)备份数据库的时候报错误 /opt/xtrabackup-8.0.35-31/bin/xtrabackup --defaults-file=/home/middle/mysql8/conf/my.cnf --user=root --password=mysql -P13306 --sock…...

9月8-13日小记 - L

本周主要学习内容:背包DP以及其他DP杂题。 9月8日 大地彩绘,爽读《1984》。 9月9日 1. P8742 [蓝桥杯 2021 省 AB] 砝码称重 (1) bitset法 开一个bitset b,其中b[j]表示重量j能否称到。 边界显然是b[0]=1。 对于每一个w[i],b的每一位都应左移w[i]位,表示某一位所代表的砝码…...

Task2:利用 Basnet 将Task1中的所有图片转化为显著性图片

Task2:利用 Basnet 将Task1中的所有图片转化为显著性图片 1. 什么是显著性检测? 显著性检测的目的是识别图像中最吸引人注意的区域(显著性区域)。对于你的任务,就是将普通图片转换为突出主要对象的显著性图。 输入:普通图片 → 输出:显著性热力图(黑白或彩色) 2. BASNe…...

代码随想录算法训练营第一天| 704.二分查找、27.移除元素、977.有序数组的平方

704.二分查找 题目链接:https://leetcode.cn/problems/binary-search/ 解题思路:定义一个中间索引middle,如果nums[middle]>target,则更新左区间的右边界,如果target>nums[middle],则更新右区间的左边界 注意点!!!始终按照[left,right]左闭右闭的区间定义 代码实现…...

让天下没有难查的故障:2025 阿里云 AI 原生编程挑战赛正式启动

在云原生与 AI 原生架构加速演进的今天,系统复杂性已远超传统边界。运维与可观测不再只是“看日志、查指标、盯告警”,AI 大模型为 Operation Intelligence 实践指明了新方向。在云原生与 AI 原生架构加速演进的今天,系统复杂性已远超传统边界。运维与可观测不再只是“看日志…...

kuka机器人程序备份

注意: 开始以下步骤前,请确保已经切换到专家模式下,否则将无法识别到 U 盘。 1、将 U 盘插入到机器人控制柜上,在示教器上确认是否识别到 U 盘 。 2、按下示教器的主菜单键,在弹出菜单中依次选择 文件 ‣ 存档 ‣ USB控制柜 ‣ 所有 ,并在弹窗的对话框中单击“ 是 ”。3、…...

AI 测试工具20款

1. Testsigma(https://mp.weixin.qq.com/s/N12p8VFntuojytnuWDKcew) 2. Selenium 3. Testcraft 4. Appvance (https://mp.weixin.qq.com/s/oySDKDCv_k1MEoQlQGBrDw) 5. Worksoft 认证 6. Opentext UFT One 7.Telerik Test Studio 8. Sauce Labs 9. TestComplete 10. Katalon …...

VMware安装NOI linux系统教程

一、 VMware虚拟机和NOI linux系统的下载 VMware虚拟机的下载链接 NOI linux2.0系统的下载链接 下载好后硬盘里长这样 二、 VMware虚拟机的安装...

强制横屏 ios

在AppDelegate.h里面添加 @property(nonatomic,assign)NSInteger allowRotation;在AppDelegate.m文件里面添加- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { if (_allowRotation == 1) { r…...

张量链式法则(下篇):揭秘Transpose、Summation等复杂算子反向传播,彻底掌握深度学习求导精髓!

本文紧接系列的上篇,介绍了 transpose,summation,broadcast_to 等更为复杂的深度学习算子的反向传播公式推导。本文首发于本人的微信公众号,链接:https://mp.weixin.qq.com/s/eEDo6WF0oJtRvLYTeUYxYg 摘要 本文紧接系列的上篇,介绍了 transpose,summation,broadcast_to…...

详细介绍:QT初探TCP(四)

详细介绍:QT初探TCP(四)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-size:…...

近期理工类学术会议推荐 | 人工智能、工业设计、电气工程、传感器技术、环境工程等EI会议合集

第五届人工智能与智能制造国际研讨会(AIIM 2025) The 5th International Symposium on Artificial Intelligence and Intelligent Manufacturing 2025年9月19-21日 中国-四川成都 检索类型:EI Compendex, Scopus 2025年智能装备与工业设计国际学术会议(IEID 2025) 2025 In…...

AI访销大脑之“创建及查询数据”新玩法

业代日常使用软件要做很多操作,从做拜访计划、录新门店信息,到执行拜访八步,再到查销量,到查门店信息等等,这样的创建数据、查数据的工作,总是让业代感觉费时间。如果有更多时间,本可以花在更好地谈客情、产品销售上面! 期待总会变为现实,业代的这个愿望,在 AI 的加持…...

史上最薄iPhone 17 Air登场!极致轻薄背后藏有哪些妥协?

北京时间9月10日凌晨,苹果在加州库比蒂诺总部举行了名为“AweDropping”的秋季新品发布会,正式推出了iPhone 17系列。其中最引人注目的当属全新机型——iPhone 17 Air,它以5.6毫米的极致厚度成为苹果史上最薄的手机。 这款新产品被苹果CEO库克称为“将彻底改变智能手机体验”…...

一毛钱好友商城系统介绍

1. 概述总结 一毛钱好友商城系统是一款基于微擎系统交付的多功能程序,微擎系统是一款基于 PHP 开发的开源应用生态系统,主要用于快速搭建微信公众号、小程序等应用,同时支持 Web 系统开发与部署。该商城系统支持多端(公众号、小程序、字节端等),采用 PHP7.4、8.0 开发,代…...

网页转小程序封装机系统介绍

1. 概述总结 本文介绍的网页转小程序封装机是基于微擎系统交付的一款工具,微擎系统是基于 PHP 开发的开源应用生态系统,可用于快速搭建微信公众号、小程序等应用,同时支持 Web 系统开发与部署。该封装机能够将微信公众号开发的网页模块封装成微信小程序,其源码已加密,且为…...

美客分销商城小程序系统介绍

1. 概述总结 美客分销商城小程序系统是一款适用于微信小程序的应用系统,通过微擎系统交付。其交付方式为在线交付,源码已加密,且保障为官方正品。需要注意的是,该系统有全新升级版本,即美客社交电商,可提供更丰富的社交电商模式支持。 微擎系统是一款基于 PHP 开发的开源…...

P12021 面包题

将 \(i\) 向 \(ki\) 连边,发现会变成若干条链,答案即为每条链的答案乘积。 不难发现链的独立集大小就是非伯纳切数列,可以直接做。 现在就变成了求长度为某个值的链的个数,考虑弱化限制可以求出其后缀和,然后差分一下可以得出答案。...

C++ - STL - 静态数组array

array 静态数组 array是固定大小的序列容器,array中包含特定个数并且严格按照线性序列排序的元素。因此array允许对元素进行随机访问,指向某一元素的指针可以通过偏移访问其他元素。在array内部,它只保存自己包含的元素,其他任何信息都不保存,包括自身的大小。 说白了其实…...