Kubernetes控制平面组件:调度器Scheduler(二)
云原生学习路线导航页(持续更新中)
- kubernetes学习系列快捷链接
- Kubernetes架构原则和对象设计(一)
- Kubernetes架构原则和对象设计(二)
- Kubernetes架构原则和对象设计(三)
- Kubernetes控制平面组件:etcd(一)
- Kubernetes控制平面组件:etcd(二)
- Kubernetes控制平面组件:API Server详解(一)
- Kubernetes控制平面组件:API Server详解(二)
- Kubernetes控制平面组件:调度器Scheduler(一)
- Kubernetes控制平面组件:调度器Scheduler(二)
本文是kubernetes的控制面组件调度器Scheduler第二篇,本篇详细讲解了pod对调度策略的配置方法和原理,包括:节点调度、节点亲和/反亲和、pod亲和/反亲和、拓扑打散约束、容忍调度、优先级调度以及多调度器
- 希望大家多多 点赞 关注 评论 收藏,作者会更有动力继续编写技术文章
1.指定Node调度(nodeName+nodeSelector)
1.1.基本原理
- 通过显式指定Pod应调度到特定节点,完全绕过Kubernetes调度器的决策逻辑。常用于需要固定节点(如专用硬件节点)的场景。
1.2.涉及Pod字段及解释
1.2.1.nodeName
spec:nodeName: worker-node-01 # 直接指定目标节点名称
- 作用:强制Pod调度到指定节点
- 特性:
- 若节点不存在则Pod保持Pending状态
- 绕过调度器资源检查逻辑
- 节点标签变更不影响已调度Pod
1.2.2.nodeSelector
spec:nodeSelector:disktype: ssd # 必须存在的节点标签gpu-model: "a100" # 精确匹配标签值
- 匹配规则:
- 节点必须具有所有指定的标签label
- 值匹配为精确字符串比较(区分大小写)
- 调度流程:调度器先筛选符合标签的节点,再检查资源是否充足
1.3.配置示例
apiVersion: v1
kind: Pod
metadata:name: gpu-pod
spec:nodeName: gpu-node-03containers:- name: cuda-containerimage: nvidia/cuda:11.0-base
---
apiVersion: v1
kind: Pod
metadata:name: ssd-pod
spec:nodeSelector:disktype: ssdstorage-tier: "premium"containers:- name: appimage: redis:alpine
1.4.运维实践
- 风险提示:
nodeName
会跳过所有调度策略,可能导致Pod无法调度- 节点维护时需要手动迁移Pod
- 容易造成节点资源利用率不均衡
- 最佳实践:
- 生产环境优先使用
nodeSelector
代替nodeName
- 配合节点自动伸缩组使用固定标签(如
node-role/gpu=true
) - 定期审计节点标签的准确性
2.节点亲和性/反亲和性调度(nodeAffinity)
2.1.基本原理
- 通过 节点标签的复杂逻辑匹配 实现柔性调度策略,支持:
- 硬性约束(required):必须满足的条件
- 软性偏好(preferred):优先但不强制满足的条件
- 基本原理
- nodeAffinity是对nodeSelector的增强,比nodeSelector扩展性更强,本质还是对根据Node Label,对Node做一个筛选或打分
- nodeAffinity同时支持亲和/反亲和的配置,比如通过NotIn Operator,就可以实现 Node反亲和性 的功能
2.2.涉及Pod字段及解释
affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution: # 硬约束nodeSelectorTerms: # 要满足的条件是什么,predicates阶段- matchExpressions:- key: topology.kubernetes.io/zoneoperator: Invalues: [zone-a, zone-b]preferredDuringSchedulingIgnoredDuringExecution: # 软偏好- weight: 80 # 打分权重preference: # 要满足的条件是什么,priority阶段matchExpressions:- key: app-tieroperator: Invalues: [cache]
- nodeSelectorTerms:node的label满足下面的条件
- preference:node的label满足下面的条件
2.2.1.关键字段说明
字段路径 | 类型 | 说明 |
---|---|---|
operator | enum | In / NotIn / Exists / DoesNotExist / Gt / Lt |
weight | int(1-100) | 软策略的权重值,影响调度评分 |
topologyKey | string | 定义拓扑域的节点标签键 |
2.2.2.Operator详解
操作符 | 匹配条件 | 示例 |
---|---|---|
In | 标签值在指定集合中 | values: [v1,v2] |
NotIn | 标签值不在集合中 | values: [v3] |
Exists | 标签键存在(忽略values) | key: “gpu” |
DoesNotExist | 标签键不存在 | key: “temp” |
Gt | 数值大于(仅整数) | values: [“100”] |
Lt | 数值小于(仅整数) | values: [“50”] |
2.3.配置示例
apiVersion: v1
kind: Pod
metadata:name: ai-pod
spec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: acceleratoroperator: Invalues: [nvidia-tesla-v100]preferredDuringSchedulingIgnoredDuringExecution:- weight: 60preference:matchExpressions:- key: topology.kubernetes.io/zoneoperator: Invalues: [zone-a]containers:- name: ai-containerimage: tensorflow/tensorflow:latest-gpu
2.4.运维实践
- 注意事项:
- 避免在单个Pod中组合过多复杂规则
- 硬性约束可能导致Pod无法调度
- 节点标签变更不会触发已调度Pod的重新调度
- 优化建议:
- 对高频变更的标签使用软性策略
- 使用
kubectl describe nodes
验证节点标签 - 结合HorizontalPodAutoscaler实现弹性调度
3.Pod亲和性/反亲和性调度(podAffinity/podAntiAffinity)
3.1.基本原理
- 根据已有Pod的分布情况决定新Pod的调度位置,支持:
- 亲和性(Affinity):倾向于与指定Pod共置
- 反亲和性(AntiAffinity):避免与指定Pod共置
- 基本原理
- 查看在指定范围的node中,有没有运行打了指定label的pod,然后做相应的亲和/反亲和
- 指定范围的node,这个范围是如何定义的?
- 由topologyKey决定,常用的如 region范围、zone可用区范围、rack机架范围、hostname节点范围等
- 举例:topology.kubernetes.io/zone
- 含义:以可用区为基本单位,看同一个可用区内的所有node,是否有运行打了指定label的pod,如果存在,则当前pod可以调度/不能调度 到该可用区
- 已知的kubernetes预定义topologyKey列表
- https://kubernetes.io/docs/reference/labels-annotations-taints/
3.2.涉及Pod字段及解释
affinity:podAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: Invalues: [cache]topologyKey: topology.kubernetes.io/zonepodAntiAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 100podAffinityTerm:labelSelector:matchExpressions:- key: appoperator: Invalues: [web]topologyKey: kubernetes.io/hostname
-
配置解释:
- 强亲和:必须调度到 可用区范围 内已经存在携带 app==cache label 的pod 的可用区中
- 弱反亲和:尽量调度到 节点范围 中,不存在 携带 app==web label 的pod 的node上去。
- 假如这个app==web就是本应用的label,那么实现的效果就是:我的应用必须都调度到一个可用区,但是尽量一个node上只有该应用一个实例
-
核心字段说明
字段 说明 topologyKey
定义拓扑域的节点标签键(如hostname/zone) namespaces
指定命名空间(默认当前ns) namespaces.matchLabels
通过标签选择命名空间(v1.24+)
3.3.配置示例
apiVersion: apps/v1
kind: Deployment
metadata:name: web-server
spec:replicas: 3template:spec:affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: Invalues: [web-server]topologyKey: "kubernetes.io/hostname"containers:- name: webimage: nginx:alpine
3.4.运维实践
- 性能警告:
- 集群规模超过500节点时慎用Pod亲和性
- 每个调度周期需要扫描所有匹配Pod
- 反亲和性规则可能显著增加调度延迟
- 最佳实践:
- 为关键业务服务设置反亲和规则
- 使用
topologySpreadConstraints
替代简单反亲和 - 定期清理陈旧的Pod标签
4.拓扑打散约束(topologySpreadConstraints)
4.1.基本原理
- 通过反亲和性规则,实现Pod在拓扑域间的均匀分布,最大化容错能力,属于Pod反亲和性的高级应用。
4.2.涉及Pod字段及解释
spec:topologySpreadConstraints:- maxSkew: 1topologyKey: zonewhenUnsatisfiable: DoNotSchedulelabelSelector:matchLabels:app: payment-service
-
字段说明
字段 类型 说明 maxSkew
int 允许的最大分布偏差(≥1) whenUnsatisfiable
enum DoNotSchedule / ScheduleAnyway topologyKey
string 定义拓扑域的节点标签 labelSelector
object 选择需要打散的Pod组
4.3.配置示例
apiVersion: apps/v1
kind: Deployment
metadata:name: stateless-api
spec:replicas: 6template:spec:topologySpreadConstraints:- maxSkew: 2topologyKey: topology.kubernetes.io/zonewhenUnsatisfiable: ScheduleAnywaylabelSelector:matchLabels:app: stateless-apicontainers:- name: apiimage: my-api:v1.2.3
4.4.运维实践
- 版本要求:
- 需要Kubernetes v1.18+
- 完整功能需要启用EvenPodsSpread特性门控
- 调度策略:
- 强均衡:
whenUnsatisfiable=DoNotSchedule
+maxSkew=1
- 弱均衡:
whenUnsatisfiable=ScheduleAnyway
+ 较大maxSkew
- 监控指标:
kube_scheduler_pod_scheduling_duration_seconds
kube_scheduler_scheduling_attempts
5.容忍调度(taint/tolerations)
5.1.基本原理
- 允许Pod调度到带有特定污点(Taint)的节点,实现:
- 专用节点隔离(如GPU节点)
- 节点维护前的Pod驱逐
- 特殊硬件资源分配
- 使用场景:
- 有些业务加入集群时,是带资进组的,自带了一些服务器,这些服务器他们希望自己用,不开放给其他应用,那么就可以打上一些污点,自己的应用容忍这个污点。但无法强限制,如果别人看到了,可能也会加容忍
5.2.涉及Pod字段及解释
tolerations:- key: "node.kubernetes.io/disk-pressure"operator: "Exists"effect: "NoSchedule"tolerationSeconds: 3600
-
字段详解
字段 必填 说明 key
是 污点标识符 operator
是 Exists 或 Equal value
条件 operator=Equal时必填 effect
否 NoSchedule/PreferNoSchedule/NoExecute tolerationSeconds
否 仅对NoExecute有效,驱逐pod前的容忍时间(秒) -
effect详解
类型 新 Pod 调度 已运行 Pod 影响 容忍配置必要性 典型运维场景 NoSchedule 禁止 无影响 必须 专用硬件节点、控制平面隔离 PreferNoSchedule 尽量禁止 无影响 可选 资源优化、灰度环境 NoExecute 禁止 驱逐 必须 节点维护、故障隔离、安全修复
5.3.配置示例
apiVersion: v1
kind: Pod
metadata:name: gpu-pod
spec:tolerations:- key: "nvidia.com/gpu"operator: "Exists"effect: "NoSchedule"containers:- name: cuda-appimage: nvidia/cuda:11.0-base
5.4.运维实践
- 安全建议:
- 避免使用全局容忍(operator: Exists)
- 生产环境应为专用节点设置独特污点
- 结合NodeAffinity实现精确调度,因为如果有 不带污点/带污点 的2个node同时满足调度需要,pod是不一定被调度到带污点node上的,可以配合node调度策略来达到更精确的调度
- 维护场景:
# 设置维护污点
kubectl taint nodes node1 maintenance=true:NoExecute# 查看节点污点
kubectl describe node node1 | grep Taints
- 监控要点:
- 节点就绪状态(Ready/DiskPressure等)
- Pod容忍时间窗口(tolerationSeconds)
5.5.Pod的2个默认容忍
- kubernetes默认会给pod添加两个容忍,用于当node发生异常时自动驱逐pod完成故障转移
- 二者区别
- not-ready:一般是节点上某些组件有问题,比如cni坏了
- unreachable:一般是节点断开连接了,ping都不通了
- 达成的效果:当node进入异常状态后,上面所有的pod被允许再存活300s==5min,之后就被驱逐了
- 默认5min,实际生产可能会更久,因为很多场景下node可能会有挺久的异常时间,比如集群升级,所以生产上有的集群久调整为15min
- 驱逐:其实就是把pod删除了,如果这个pod有上层的deploy或者replicaSet,就会给他在其他ready node上拉起来
tolerations:- effect: NoExecutekey: node.kubernetes.io/not-readyoperator: ExiststolerationSeconds: 300- effect: NoExecutekey: node.kubernetes.io/unreachableoperator: ExiststolerationSeconds: 300
5.6.多租户kubernetes集群-如何做到计算资源隔离
- 控制node的读取权限,将node专用于某个团队
5.7.生产经验
6.优先级调度(PriorityClass)
6.1.基本原理
- Kubernetes优先级调度通过
PriorityClass
定义Pod的优先级权重,将所有待调度的pod进行优先级排序,保证高优先级优先调度。 - 优先级调度可以实现功能:
- 调度顺序控制:高优先级Pod优先调度
- 资源抢占机制:当节点资源不足时,允许高优先级Pod驱逐低优先级Pod
- 系统稳定性保障:为关键系统组件保留资源
- 开启方法:通过 --feature-gates打开
6.2.涉及资源及字段解释
6.2.1.PriorityClass 资源
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:name: high-priority
value: 1000000 # 优先级数值,越大优先级越高(必填,范围0-1e9)
globalDefault: false # 是否作为集群默认优先级(true/false)
description: "关键业务优先级"
preemptionPolicy: PreemptLowerPriority # 抢占策略(v1.24+)
-
关键字段说明
字段 类型 说明 value
int32 优先级数值,数值越大优先级越高 globalDefault
bool 当未指定priorityClassName时是否作为默认值(集群中只能有一个true) preemptionPolicy
enum Never
(不抢占)/PreemptLowerPriority
(默认)
6.2.2.在Pod中指定优先级
spec:priorityClassName: high-priority # 关联的PriorityClass名称priority: 1000000 # 自动填充字段(不可手动设置)
6.3.配置示例
6.3.1.创建PriorityClass
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:name: mission-critical
value: 10000000
globalDefault: false
description: "核心业务优先级,允许资源抢占"
- critical为关键的意思
6.3.2.Pod使用优先级
apiVersion: v1
kind: Pod
metadata:name: payment-service
spec:priorityClassName: mission-criticalcontainers:- name: paymentimage: payment-service:v1.8.0resources:requests:cpu: "2"memory: "4Gi"
6.4.运维实践
6.4.1.风险提示
- 级联抢占:多个高优先级Pod可能引发连锁驱逐
- 资源碎片化:频繁抢占导致节点资源利用率下降
- 死锁风险:当所有节点都无法满足高优先级Pod需求时,系统可能无法恢复
6.4.2.最佳实践
- 优先级规划:
0-999999 # 用户应用(按业务重要性分级) 1000000-1999999 # 中间件/数据库 2000000+ # 系统组件(kube-system)
- 抢占控制:
- 为关键Pod设置
preemptionPolicy: Never
避免被更高优先级Pod抢占 - 使用PodDisruptionBudget保护重要应用
- 为关键Pod设置
- 监控方案:
- 跟踪
kube_scheduler_preemption_attempts
指标 - 使用
kubectl get event --field-selector reason=Preempted
- 跟踪
6.4.3.注意事项
- 启用要求:确保API Server开启
PodPriority
特性门控 - 配额关联:优先级与ResourceQuota独立,需单独设置配额限制
- 默认优先级:避免多个PriorityClass设置
globalDefault: true
- 升级兼容性:v1.14+版本才支持稳定版优先级调度
6.5.高级配置
6.5.1.非抢占式优先级
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:name: non-preempt
value: 500000
preemptionPolicy: Never # 禁止抢占其他Pod
6.5.2.系统保留优先级
# 系统组件示例(kube-apiserver)
apiVersion: v1
kind: Pod
metadata:name: kube-apiservernamespace: kube-system
spec:priorityClassName: system-cluster-critical # 内置最高优先级(2亿)containers:- name: apiserverimage: k8s.gcr.io/kube-apiserver:v1.25.0
7.多调度器
- podSpec.schedulerName用于指定使用的调度器,不指定时默认为default-scheduler
- schedulerName: default-scheduler
- 对于web应用,一般启动都是分钟级,对调度效率要求没有那么高,一般default-scheduler就够用了
- 但是对于一些特殊领域,比如大数据场景、AI场景、batchJob场景,可能有特殊的调度需求,kubernetes defaultScheduler可能不太够用,此时可以使用一些自定义的调度器
- batchJob场景,比如有3个作业,需要同时启动运行,只要有一个没有启动,其他2个也运行不了,这种对调度效率就有要求。再比如在计算密集型任务中,一秒可能会有几百上千的作业需要调度,就需要一些batchJob调度场景
- batchJob社区有不少调度器,比如华为的Volcano调度器,腾讯TKE也有类似的batch调度器
8.常见问题解析
8.1.required/preferredDuringSchedulingIgnoredDuringExecution 辨析
8.1.1.required/preferredDuringSchedulingIgnoredDuringExecution 名称解析
- requiredDuringSchedulingIgnoredDuringExecution可以拆分为2部分
- requiredDuringScheduling(调度阶段规则)
- 含义:在 Pod 调度过程中 必须满足 的条件,若不满足,Pod 将无法被调度,持续处于 Pending 状态。
- 行为:调度器(kube-scheduler)会严格过滤节点,仅选择符合标签匹配条件的节点。例如,要求节点必须带有 disktype=ssd 标签,否则拒绝调度。
- IgnoredDuringExecution(执行阶段规则)
- 含义:Pod 运行后,即使节点标签或条件发生变化(如标签被删除),Kubernetes 不会驱逐或重新调度 Pod。
- 行为:仅影响调度阶段的逻辑,运行阶段的变化由用户主动干预(如手动删除 Pod 触发重新调度)。
- requiredDuringScheduling(调度阶段规则)
- preferredDuringSchedulingIgnoredDuringExecution也可以拆分为2部分
- preferredDuringScheduling(调度阶段规则)
- 含义:在 Pod 调度过程中 尽量满足 的条件,允许 Pod 优先(而非强制)被调度到满足特定条件的节点。如果条件无法满足,Pod 仍会被调度到其他可用节点,但调度器会尽量选择最接近条件的节点
- IgnoredDuringExecution(执行阶段规则)
- 同上
- preferredDuringScheduling(调度阶段规则)
8.1.2.required/preferred应用的调度阶段
- requiredDuringSchedulingIgnoredDuringExecution:是必须要满足的条件,不满足就不能调度,因此是 Predicates阶段生效的
- preferredDuringSchedulingIgnoredDuringExecution:是尽量满足的条件,配置时会携带一个权重用于打分,因此是 Priority阶段生效的
8.2.kubectl apply/replace命令的区别
- 区别:
- apply是patch merge操作,不涉及的字段不会覆盖
- replace是 put请求 全量替换资源,会直接用请求的资源替换环境资源
- 示例:
- 比如下面的pod,只有required…,没有preferred…,那么我用一个只包含preferred…的yaml 去apply,会导致nodeAffinity下面的required…删除吗?答案是不会
- 但是如果使用 replace -f xxx.yaml,就会清理required…,因为是直接替换了
affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution: # 硬约束nodeSelectorTerms: # 要满足的条件是什么,predicates阶段- matchExpressions:- key: topology.kubernetes.io/zoneoperator: Invalues: [zone-a, zone-b]
8.3.Pod被驱逐的几种情况
- 高优先级Pod抢占低优先级,低优Pod会被驱逐,此时不会看QoS的
- 集群资源承压,kubelet可能会根据Qos对某些pod做驱逐
8.4.通过调度策略绑定边缘节点
- 一般来说,应用需要通过外部elb暴露出去,但是有些公司 不想投入资金到elb,就可以通过nodeSelector或一些调度手段,将ingress绑定到某几台固定的node上,将这几台node作为边缘节点,专用于接收用户流量
- 属于常规操作
8.5.生产上一些实践经验
- 总的来说,kubernetes调度器是最让人省心的组件之一,稳定性比较好,一般不会有太大的维护上的问题
相关文章:
Kubernetes控制平面组件:调度器Scheduler(二)
云原生学习路线导航页(持续更新中) kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计(一)Kubernetes架构原则和对象设计(二)Kubernetes架构原则和对象设计(三)Kubernetes控…...
数据通信学习笔记之OSPF其他内容2
OSPF 与 BFD 联动 网络上的链路故障或拓扑变化都会导致设备重新进行路由计算,所以缩短路由协议的收敛时间对于提高网络的性能是非常重要的。 OSPF 与 BFD 联动就是将 BFD 和 OSPF 关联起来,一旦与邻居之间的链路出现故障,BFD 对完品以&…...
数据通信学习笔记之OSPF的区域
OSPFArea 用于标识一个 OSPF 的区域 区域是从逻辑上将设备划分为不同的组,每个组用区域号 (Area ID)来标识 OSPF 的区域 ID 是一个 32bit 的非负整数,按点分十进制的形式(与 IPV4 地址的格式一样)呈现,例如 Area0.0.0.1。 为了简便起见&#…...
css3新特性第四章(渐变)
渐变 线性渐变 径向渐变 重复渐变 使用: background-image: xx 渐变 background-image: linear-gradient(red,yellow,green); 公共代码 .box {width: 300px;height: 200px;border: 1px solid black;float: left;margin-left: 30px;margin-top: 30px;text-align:…...
玩机搞机基本常识-------小米OLED屏幕机型怎么设置为永不休眠_手机不息屏_保持亮屏功能 拒绝“烧屏” ?
前面在帮一位粉丝解决小米OLED机型在设置----锁屏下没有永不休眠的问题。在这里,大家要明白为什么有些小米机型有这个设置有的没有的原因。区分OLED 屏幕和 LCD屏幕的不同。从根本上拒绝烧屏问题。 OLED 屏幕的一些优缺点💝💝💝 …...
深拷贝和浅拷贝的区别
浅拷贝: 只复制原对象的基本数据类型字段,拥有相对独立的副本数据,修改时不会影响到原对象的字段值。对于原对象的引用数据类型字段,直接共享原对象字段的引用,修改自己的字段时会同时影响原对象。 深拷贝:…...
RabbitMQ和Seata冲突吗?Seata与Spring中的事务管理冲突吗
1. GlobalTransactional 和 Transactional 是否冲突? 答:不冲突,它们可以协同工作,但作用域不同。 Transactional: 这是 Spring 提供的注解,用于管理单个数据源内的本地事务。在你当前的 register 方法中,…...
[安全实战]逆向工程核心名词详解
逆向工程核心名词详解 一、调试与执行类 1. 断点(Breakpoint) 定义:在代码中设置标记,使程序执行到此处时暂停类型: 普通断点:通过INT3指令实现条件断点:满足特定条件时触发内存断点…...
用键盘实现控制小球上下移动——java的事件控制
本文分享Java的一个有趣小项目,实现用键盘控制小球的移动 涉及java知识点:Swing GUI框架,绘图机制,事件处理,焦点控制 1.编写窗口和面板 (1.)定义面板类 Panel 继承自Java 自带类JPanel (2.)定义窗口类 window 继承…...
AutoSAR从概念到实践系列之MCAL篇(二)——Mcu模块配置及代码详解(上)
欢迎大家学习我的《AutoSAR从概念到实践系列之MCAL篇》系列课程,我是分享人M哥,目前从事车载控制器的软件开发及测试工作。 学习过程中如有任何疑问,可底下评论! 如果觉得文章内容在工作学习中有帮助到你,麻烦点赞收藏评论+关注走一波!感谢各位的支持! 根据上一篇内容中…...
BEVDet: High-Performance Multi-Camera 3D Object Detection in Bird-Eye-View
背景 在自动驾驶场景下,以往工作是目标检测任务用图像视角做,语义分割用BEV视角做。本文提出了BEVDet,实现了一个统一的框架,它模块化设计分为图像编码器,视角转换器,BEV编码器以及BEV空间的3D检测头。然而…...
高效获取淘宝实时商品数据:API 接口开发与数据采集实战指南
在电商行业竞争白热化的当下,实时且准确的商品数据是企业制定营销策略、优化产品布局的重要依据。淘宝作为国内头部电商平台,其海量的商品数据蕴含着巨大价值。通过 API 接口高效获取淘宝实时商品数据,成为电商从业者和开发者的必备技能。本文…...
kotlin知识体系(六) : Flow核心概念与与操作符指南
1. Flow基础概念 1.1 冷流(Cold Stream) 冷流是Flow的默认形式,其核心特点如下: • 按需触发:仅在消费者调用 collect 时开始发射数据,且每次收集都会重新执行流的逻辑(类似“单播”࿰…...
【CentOs】构建云服务器部署环境
(一) 服务器采购 2 CPU4G 内存40G 系统盘 80G 数据盘 (二) 服务器安全组和端口配置 (三) 磁盘挂载 1 登录 root 2 查看目前磁盘使用情况 df -h 3 查看磁盘挂载情况 识别哪些磁盘没挂载 fdisk -l 4 对未挂载磁盘做分区 fdisk /dev/vdb 输入m࿰…...
【AI论文】对人工智能生成文本的稳健和细粒度检测
摘要:机器生成内容的理想检测系统应该能够在任何生成器上很好地工作,因为越来越多的高级LLM每天都在出现。 现有的系统往往难以准确识别人工智能生成的短文本内容。 此外,并非所有文本都完全由人类或LLM创作,因此我们更关注部分案…...
MyFamilyTree:专业家谱族谱制作工具
MyFamilyTree 是一款专业级家谱族谱制作工具,支持 Windows 7 至 11 系统(含服务器版本)。该软件以直观的拖拽式操作为核心,支持构建多维家族树结构,并提供丰富的多媒体集成功能,便于用户记录家族成员的生…...
【统计分析120】统计分析120题分享
1-30 判断题 数学模型 指的是通过抽象、简化现实世界的某些现象,利用数学语言来描述他们的结构和行为,做出一些必要的假设,运用适当的数学工具,得到一个数学结论 数学模型:指的是通过抽象、简化现实世界的某些现象&am…...
【Windows10下PP-OCRv4部署指南】
Windows10下PP-OCRv4部署指南 一、环境准备 安装Visual Studio 2022 下载并安装 C桌面开发组件,确保支持MSVC编译环境。 配置系统环境变量,确保cl.exe等编译工具可用。 Python环境配置 推荐使用Conda创建虚拟环境: bash Co…...
Matlab PID参数整定和设计
1、内容简介 Matlab 206-PID参数整定和设计 可以交流、咨询、答疑 2、内容说明 略 某流量控制系统整定方法仿真(3) 摘 要:本次设计针对一个给定的流量控制系统进行仿真,已经确认该系统为简单控制系统,并且控制策略…...
【Linux系统】Linux基础指令(详解Linux命令行常用指令,每一个指令都有示例演示)
文章目录 一、与文件路径相关的指令0.补充知识:路径的认识1.pwd 指令2.cd 指令(含家目录的介绍) 二、创建和删除文件的指令0.补充知识:普通文件和目录文件1.touch 指令(可以修改文件的时间戳)2.mkdir 指令3…...
LLM基础-什么是Token?
LLM基础-什么是Token? 概述 Token 是大语言模型(LLM, Large Language Model)中最基本的输入单元,它是语言被模型“理解”的方式。不同于人类可以直接看懂一段自然语言文本,LLM 只能处理数字,而这些数字就…...
Few-shot medical image segmentation with high-fidelity prototypes 论文总结
题目:Few-shot medical image segmentation with high-fidelity prototypes(高精确原型) 论文:Few-shot medical image segmentation with high-fidelity prototypes - ScienceDirect 源码:https://github.com/tntek/D…...
大模型之路(day 1)
这段时间以来,全身心的投入了研究大模型,虽然还是入门,但比之前已经好了非常多了,不得不说,计算机的学习特别需要强大的自驱力和耐心,以及检索能力。知乎确实在这些知识的分享上做的比csdn好太多了 万事开…...
996引擎-拓展变量:物品变量
996引擎-拓展变量:物品变量 测试代码参考资料对于Lua来说,只有能保存数据库的变量才有意义。 至于临时变量,不像TXT那么束手束脚,通常使用Lua变量就能完成。 测试代码 -- 存:物品拓展strfunction (player)local where =...
集合框架(重点)
1. 什么是集合框架 List有序插入对象,对象可重复 Set无序插入对象,对象不可重复(重复对象插入只会算一个) Map无序插入键值对象,键只唯一,值可多样 (这里的有序无序指的是下标,可…...
IDEA在Git提交时添加.ignore忽略文件,解决为什么Git中有时候使用.gitignore也无法忽略一些文件
文章目录 一、为什么需要.gitignore文件?二、如何在IntelliJ IDEA中高效管理.gitignore文件?1:先下载这个.ignore插件2. 创建或编辑.gitignore文件3. 使用IDEA内置模板快速生成忽略规则4. 实时预览忽略效果5. 检查忽略规则是否生效6.但是一般我们更多时候…...
如何将自己封装的组件发布到npm上:详细教程
如何将自己封装的组件发布到npm上:详细教程 作为前端开发者,我们经常从npm(Node Package Manager)上下载并使用各种第三方库和组件。然而,有时候我们可能会发现自己需要的功能在npm上并不存在,或者我们希望…...
位运算,状态压缩dp(算法竞赛进阶指南学习笔记)
目录 移位运算一些位运算的操作最短 Hamilton 路径(状态压缩dp模板,位运算) 0x是十六进制常数的开头;本身是声明进制,后面是对应具体的数; 数组初始化最大值时用0x3f赋值; 移位运算 左移 把二…...
node.js|环境部署|源码编译高版本的node.js
一、 前言 本文就如何二进制部署和源码编译安装部署node.js环境做一个简单的介绍 node的版本大体是以18版本为界限,也就是说18版本之前对glibc版本没有要求,其后的版本都对glibc版本有要求,node的版本越高,glibc需要的版本也越…...
通信安全员ABC证的考试内容包括哪些?
通信安全员 ABC 证的考试内容整体上围绕通信安全相关的法律法规、安全技术、安全管理等方面展开,但在具体侧重点上有所不同,以下是详细介绍: 通信安全基础知识 通信原理:包含模拟通信和数字通信的基本原理,如调制、解…...
Oracle--SQL基本语法
前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 1、SQL语句介绍 在Oracle开发中,客户端把SQL语句发送给服务器,服务器对SQL语句进行编译、执行,把执行的结果返回给…...
windows服务器及网络:论如何安装(虚拟机)
今天我要介绍的是:在Windows中对于安装系统(虚拟机的步骤以及相关的安装事宜),事不宜迟,让我们来看看系统安装(虚拟机)是怎么操作的: 对现在来说,安装电脑系统已经是非常…...
【网络篇】从零写UDP客户端/服务器:回显程序源码解析
大家好呀 我是浪前 今天讲解的是网络篇的第四章:从零写UDP客户端/服务器:回显程序源码解析 从零写UDP客户端/服务器:回显程序源码解析 UDP 协议特性核心类介绍 UDP的socket应该如何使用:1: DatagramSocket2: DatagramPacket回…...
学习笔记:黑马程序员JavaWeb开发教程(2025.3.23)
11.2 案例-文件上传-简介 文件上传的前端页面的代码需要放到springboot项目的static里面,也就是resource文件夹下面的static文件夹里面 服务端接收前端上传的数据,再服务端定义一个controller来接收数据,再controller中定义一个…...
提示词构成要素对大语言模型跨模态内容生成质量的影响
提示词构成要素对大语言模型跨模态内容生成质量的影响 提示词清晰度、具象性与质量正相关 限定指向性要素优于引导指向性要素 大语言模型生成内容保真度偏差 以讯飞星火大模型为实验平台,选取100名具备技术素养的人员,从提示词分类、构成要素和实践原则归纳出7种提示词组…...
浅聊docker的联合文件系统
前言: 在我们pull镜像的时候,就会发现一个神奇的地方,在将镜像pull到本地的时候它是分层下载的,如下图: 这时候我就有一个疑问,为什么是分层下载的?怎么和我们平时下载软件的时候不一样呢? 联…...
计算机视觉cv入门之Haarcascade的基本使用方法(人脸识别为例)
Haar CascadeXML特征分类器,是一种基于机器学习的方法,它利用了积分图像(或总面积)的概念有效地提取特征(例如,边缘、线条等)的数值。“级联分类器”即意味着不是一次就为图像中的许多特征应用数百个分类器,而是一对一地应用分类器…...
【NLP 62、实践 ⑮、基于RAG + 智谱语言模型的Dota2英雄故事与技能介绍系统】
羁绊由我而起,痛苦也由我承担 —— 25.4.14 英雄介绍文件: 通过网盘分享的文件:RAG 智谱语言模型的Dota2英雄故事与技能介绍系统 链接: https://pan.baidu.com/s/1G7Xo5TRvFl2BzUnE0NFaBA?pwd4d4j 提取码: 4d4j --来自百度网盘超级会员v3的…...
Keil MDK 编译问题:function “HAL_IncTick“ declared implicitly
问题与处理策略 问题描述 ..\..\User\stm32f1xx_it.c(141): warning: #223-D: function "HAL_IncTick" declared implicitlyHAL_IncTick(); ..\..\User\stm32f1xx_it.c: 1 warning, 0 errors问题原因 在 stm32f1xx_it.c 文件中调用了 HAL_IncTick(),但…...
OpenCV基础01-图像文件的读取与保存
介绍: OpenCV是 Open Souce C omputer V sion Library的简称。要使用OpenCV需要安装OpenCV包,使用前需要导入OpenCV模块 安装 命令 pip install opencv-python 导入 模块 import cv2 1. 图像的读取 import cv2 img cv2.imread(path, flag)这里的flag 是可选参数&…...
IP数据报
IP数据报组成 IP数据报(IP Datagram)是网络中传输数据的基本单位。 IP数据报头部 版本(Version) 4bit 告诉我们使用的是哪种IP协议。IPv4版本是“4”,IPv6版本是“6”。 头部长度(IHL,Intern…...
视频联网平台与AI识别技术在电力行业的创新应用
一、电力行业智能化转型的迫切需求 在能源革命与数字化转型的双重推动下,电力行业正面临着前所未有的智能化升级需求。随着特高压电网的大规模建设和新能源占比的不断提高,传统的电力运维管理模式已经难以满足现代电网安全、高效运行的要求。据统计&…...
Apache Parquet 文件组织结构
简要概述 Apache Parquet 是一个开源、列式存储文件格式,最初由 Twitter 与 Cloudera 联合开发,旨在提供高效的压缩与编码方案以支持大规模复杂数据的快速分析与处理。Parquet 文件采用分离式元数据设计 —— 在数据写入完成后,再追加文件级…...
深度学习方向急出成果,是先广泛调研还是边做实验边优化?
目录 有限资源下本科生快速发表深度学习顶会论文的实战策略 1.短周期内可出成果的研究路径 2.论文阅读与复现的优先顺序 3.无一对一指导时的调研与实验组织 4.成功案例:本科生顶会论文经验 5.快速上手的研究子方向推荐 大家好这里是AIWritePaper官方账号&…...
Python 深度学习实战 第11章 自然语言处理(NLP)实例
Python 深度学习实战 第11章 自然语言处理(NLP)实例 内容概要 第11章深入探讨了自然语言处理(NLP)的深度学习应用,涵盖了从文本预处理到序列到序列学习的多种技术。本章通过IMDB电影评论情感分类和英西翻译任务,详细介绍了如何使…...
9、Hooks:现代魔法咒语集——React 19 核心Hooks
一、魔法咒语的本质革新 "类组件如同古老的魔杖挥舞仪式,而Hooks是新时代的无杖施法!"霍格沃茨魔法研究院的魔杖动力学教授惊叹道。React Hooks通过函数式能量场重构了魔法运作模式,让组件能量流转如尼可勒梅的炼金术。 ——以《国…...
FutureTask底层实现
一、FutureTask的基本使用 平时一些业务需要做并行处理,正常如果你没有返回结果的需求,直接上Runnable。 很多时候咱们是需要开启一个新的线程执行任务后,给我一个返回结果。此时咱们需要使用Callable。 在使用Callable的时候,…...
深入浅出:LDAP 协议全面解析
在网络安全和系统管理的世界中,LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)是一个不可忽视的核心技术。它广泛应用于身份管理、认证授权以及目录服务,尤其在企业级环境中占据重要地位。本文将从基…...
学习笔记—C++—string(练习题)
练习题 仅仅反转字母 917. 仅仅反转字母 - 力扣(LeetCode) 题目 给你一个字符串 s ,根据下述规则反转字符串: 所有非英文字母保留在原有位置。所有英文字母(小写或大写)位置反转。 返回反转后的 s 。…...
论文阅读:2024 arxiv DeepInception: Hypnotize Large Language Model to Be Jailbreaker
总目录 大模型安全相关研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 DeepInception: Hypnotize Large Language Model to Be Jailbreaker DeepInception:催眠大型语言模型,助你成为越狱者 https://arxiv.org/pdf/2311.0…...