CKA认证 | Day3 K8s管理应用生命周期(上)
第四章 应用程序生命周期管理(上)
1、在Kubernetes中部署应用流程
1.1 使用Deployment部署Java应用
在 Kubernetes 中,Deployment 是一种控制器,用于管理 Pod 的部署和更新。以下是使用 Deployment 部署 Java 应用的步骤:
1)创建 Deployment
使用 kubectl create deployment 命令创建一个名为 web 的 Deployment,并指定要使用的镜像:
kubectl create deployment web --image=lizhenliang/java-demo
使用 kubectl get 命令显示 Deployment 和 Pod 的详细信息,包括名称、状态、副本数等
kubectl get deployment,pods
2)使用 Service 发布Pod
在 Kubernetes 中,Service 用于将一组 Pod 暴露给外部网络。以下是使用 Service 发布 Pod 的步骤:
使用 kubectl expose 命令创建一个 Service,并指定要暴露的端口和类型:
kubectl expose deployment web --port=80 --type=NodePort --target-port=8080 --name=web
--port=80:Service 的端口为 80
--type=NodePort:Service 类型为 NodePort,这意味着 Service 会在每个节点的 IP 地址上暴露一个端口
--target-port=8080:Pod 的端口为 8080
--name=web:Service 的名称为 web
使用 kubectl get 命令查看 Service 的状态:
kubectl get service
2、服务编排(YAML)
2.1 YAML文件格式说明
YAML(YAML Ain't Markup Language)是一种人类可读的数据序列化格式,广泛用于配置文件和数据交换。在 Kubernetes 中,YAML 文件用于定义和配置各种资源,如 Pod、Deployment、Service 等。以下是 YAML 语法格式的详细说明:
① 缩进表示层级关系
YAML 使用缩进来表示层级关系,类似于 Python。缩进必须是空格,不能使用制表符(Tab)。通常建议使用 2 个空格进行缩进。
level1:level2:level3: value
② 不支持制表符“tab”缩进,使用空格缩进
YAML 解析器对制表符非常敏感,因此必须使用空格进行缩进。
# 错误的缩进(使用制表符) level1:level2: value# 正确的缩进(使用空格) level1:level2: value
③ 通常开头缩进 2 个空格
为了保持一致性和可读性,通常建议在每个层级开始时缩进 2 个空格。
level1:level2:level3: value
④ 字符后缩进 1 个空格,如冒号、逗号等
在键值对中,冒号(
:
)后面通常需要跟一个空格。key: value
⑤ “---” 表示 YAML 格式,一个文件的开始
在 YAML 文件中,“- - -” 用于表示一个新的文档的开始。一个文件中可以包含多个文档,每个文档以“- - -” 开头。
--- document1:key1: value1--- document2:key2: value2
⑥ “#” 注释
YAML 支持使用
#
进行注释。注释行以#
开头,不会被解析器处理。# 这是一个注释 key: value # 这也是一个注释
2.2 YAML文件创建资源对象
2.2.1 Deployment
apiVersion | API版本 |
kind | 资源类型,即功能 |
metadata | 资源元数据(name资源名字、namespace命名空间) |
spec | 资源规格 |
replicas | 副本(实例)数量 |
selector | 标签选择器,与下面metadata.labels保持一致 |
template | Pod模板 |
metadata | Pod元数据 |
spec | Pod规格 |
containers | 容器配置 |
将你需要创建的资源描述到YAML文件中:
- 部署:kubectl apply -f xxx.yaml
- 执行多部署:kubectl apply -f xxx1.yaml -f xxx2.yaml
- 卸载:kubectl delete -f xxx.yaml
示例:Kubernetes Deployment YAML 文件
使用 kubectl create deployment 命令创建一个 Deployment并指定镜像、副本数和命名空间。命令示例:(添加 -o 选项 可导出YAML)
kubectl create deployment web --image=lizhenliang/java-demo --replicas=3 -n default
使用 YAML 文件来定义和创建 Deployment,内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:name: webnamespace: defaultlabels:app: web
spec:replicas: 3selector:matchLabels:app: webtemplate:metadata:labels:app: webspec:containers:- name: webimage: lizhenliang/java-demoports:- containerPort: 8080
解释说明:
apiVersion: apps/v1:指定 API 版本。
kind: Deployment:指定资源类型为 Deployment。
metadata:定义资源的元数据,包括名称、命名空间和标签。
name: web:Deployment 的名称为 web。
namespace: default:Deployment 所在的命名空间为 default。
labels:为 Deployment 添加标签 app: web。
spec:定义 Deployment 的详细规格。
replicas: 3:指定副本数为 3。
selector:定义选择器,用于匹配 Pod 标签。
matchLabels:匹配标签 app: web。
template:定义 Pod 模板。
metadata:定义 Pod 的元数据,包括标签 app: web。
spec:定义 Pod 的详细规格。
containers:定义容器列表。
name: web:容器的名称为 web。
image: lizhenliang/java-demo:使用的镜像为 lizhenliang/java-demo。
ports:定义容器端口。
containerPort: 8080:容器端口为 8080。
2.2.2 Service
port | Service端口,通过ClusterIP访问用 |
targetPort | 镜像内服务端口,例如nginx镜像是80 |
selector | 标签选择器,与Deployment中标签保 持一致 |
type | Service类型 |
示例:Kubernetes Service YAML 文件
使用 kubectl expose 命令为现有的 Deployment 创建一个 Service,并指定端口、目标端口和服务类型。以下是命令示例:
kubectl expose deployment web --port=80 --target-port=8080 --type=NodePort -n default
创建一个名为 web-service.yaml 的文件,内容如下:
apiVersion: v1
kind: Service
metadata:name: web-servicenamespace: defaultlabels:app: web
spec:type: NodePortports:- port: 80targetPort: 8080selector:app: web
解释说明:
apiVersion: v1:指定 API 版本。
kind: Service:指定资源类型为 Service。
metadata:定义资源的元数据,包括名称、命名空间和标签。
name: web-service:Service 的名称为 web-service。
namespace: default:Service 所在的命名空间为 default。
labels:为 Service 添加标签 app: web。
spec:定义 Service 的详细规格。
type: NodePort:指定服务类型为 NodePort,允许外部访问。
ports:定义服务端口和目标端口。
port: 80:Service 的端口为 80。
targetPort: 8080:目标端口为 8080,即 Pod 中容器的端口。
selector:定义选择器,用于匹配 Pod 标签。
app: web:匹配标签 app: web 的 Pod。
— 定义标签:
注意:Service中的selector字段指定Lables,即左图红框内的Lables保持一致
① 一般推荐定义两个,由项目和应用组成,例如:
project: ec //键:值,可任意定义
app: portal
② matchLabels 必须与下面labels保持一致,否则apply会报错
apiVersion: apps/v1
...
spec:selector:matchLabels:project: ec //指定项目app: portal //指定应用
template:metadata:labels:project: ecapp: portal
...
Service是通过标签进行转发(负载均衡),获取Service关联后面Pod的IP
kubectl get endpoints
2.2.3 资源字段太多,记不住怎么办
Kubernetes 的资源字段非常多,完全记住所有字段是不现实的。以下是一些实用的方法来帮助你管理和生成 YAML 文件:
1. 使用 create 命令生成 YAML 文件
使用 kubectl create 命令结合 -o yaml 和 --dry-run=client 选项生成 YAML ,而不实际创建资源。
kubectl create deployment nginx --image=nginx:1.16 -o yaml --dry-run=client > my-deploy.yaml
-o yaml:以 YAML 格式输出
--dry-run=client:在客户端模拟运行,不实际创建资源--dry-run=server:提交到api层面尝试运行
2. 使用 get 命令导出现有资源的 YAML 文件
如果已创建了一个资源,可使用 kubectl get 命令将其导出为 YAML 文件
kubectl get deployment nginx -o yaml > my-deploy.yaml
3. 使用 kubectl explain 命令查看字段说明
kubectl explain 命令可帮助查看资源的字段说明,了解每个字段的含义和用法
kubectl explain pods.spec.containers
kubectl explain deployment
4. 参考官方文档的示例
Kubernetes 官方文档提供了丰富的示例和详细的字段说明,是学习和参考的好资源。
- Kubernetes 官方文档
- Kubernetes API 参考
3、Deployment 工作负载
3.1 介绍
Deployment是最常用的K8s工作负载控制器(Workload Controllers), 是K8s的一个抽象概念,用于更高级层次对象,部署和管理Pod。其他控制器还有DaemonSet、StatefulSet等。
1. 管理 Pod 和 ReplicaSet
- Pod:Kubernetes 中最小的部署单元,包含一个或多个容器。
- ReplicaSet:确保指定数量的 Pod 副本始终运行。
- Deployment:管理 ReplicaSet,从而间接管理 Pod。
2. 主要功能
- 上线部署:通过定义新的 ReplicaSet 来部署新版本的 Pod。
- 副本设定:指定 Pod 的副本数量,确保应用的高可用性。
- 滚动升级:逐步替换旧版本的 Pod,实现平滑升级。
- 回滚:在升级过程中出现问题时,可以回滚到之前的版本。
3. 应用场景
- 网站:部署和管理网站的前端和后端服务。
- API:部署和管理 API 服务,确保 API 的高可用性和可扩展性。
- 微服务:管理微服务架构中的各个服务,实现服务的独立部署和升级。
3.2 应用生命周期管理流程
1. 部署(Deployment)
部署是将应用程序首次部署到 Kubernetes 集群中的过程。这个过程通常包括以下步骤:
- 编写 YAML 文件:定义 Deployment、Service 等资源
- 应用 YAML 文件:使用 kubectl apply -f <filename>.yaml 命令将资源应用到集群中
- 验证部署:使用 kubectl get pods 和 kubectl get deployments 验证 Pod 和 Deployment 状态
2. 升级(Upgrade)
升级是指将应用程序更新到新版本的过程。Kubernetes 提供滚动升级(Rolling Update)策略,确保在升级过程中服务不中断。
- 更新 YAML 文件:修改 Deployment 中的镜像版本或其他配置
- 应用更新:使用 kubectl apply -f <filename>.yaml 命令应用更新
- 监控升级过程:使用 kubectl rollout status deployment/<deployment-name> 监控升级状态
3. 回滚(Rollback)
回滚是指在升级过程中出现问题时,将应用程序恢复到之前的版本。Kubernetes 提供了回滚功能,可以轻松地将 Deployment 回滚到之前的版本。
- 回滚到上一个版本:使用 kubectl rollout undo deployment/<deployment-name> 命令。
- 回滚到指定版本:使用 kubectl rollout undo deployment/<deployment-name> --to-revision=<revision-number> 命令。
4. 下线(Deletion)
下线是指将应用程序从 Kubernetes 集群中移除的过程。这个过程通常包括以下步骤:
- 删除 Deployment:使用 kubectl delete deployment/<deployment-name> 命令删除 Deployment
- 删除 Service:如果存在相关的 Service,使用 kubectl delete service/<service-name> 命令删除 Service
3.3 应用部署
通过 Deployment 部署镜像,两种方式:
- ① kubectl create deployment web --image=nginx:1.16 --replicas=3
- ② kubectl apply -f xxx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: webnamespace: default
spec:replicas: 3 # Pod副本预期数量selector:matchLabels:app: webtemplate:metadata:labels:app: web # Pod副本的标签spec:containers:- name: webimage: nginx:1.16 //指定镜像版本
3.4 应用升级
应用升级主要对象为镜像,镜像里面是包含了项目和运行环境例如nginx,在修改YAML的镜像并执行时,Deployment控制器会根据检测到的镜像版本进行升级;即 修改镜像默认是产生的一次滚动升级(更新镜像三种方式,自动触发滚动升级)
方式1:kubectl apply -f xxx.yaml
...spec:containers:- name: webimage: nginx:1.16 //修改指定镜像版本
方式2:kubectl set image deployment 容器名=镜像名称:版本 //非交互
kubectl set image deployment web web=nginx:1.17
注意:容器名为 -name:定义的名字
备注:升级新的镜像是通过创建新的副本且升级完成的情况下,通过删除旧镜像进行去替换
方式3:kubectl edit deployment # 使用系统编辑器,在线打开
kubectl edit deployment web
补充:edit在线编辑,只有个别的资源可以使用
3.4.1 滚动升级详细介绍
滚动发布是指每次只升级一个或多个服务,升级完成后加入生产环境,不断执行这个过程,直到集群中 的全部旧版本升级新版本。
了解:有关K8S的主流发布方案,每种方案都有其独特的优势和适用场景。
① 滚动升级(Rolling Update)
Kubernetes 默认的升级策略,适用于大多数场景。它通过逐步替换旧版本的 Pod,实现平滑升级,确保在升级过程中服务不中断。
- 逐步替换:逐步创建新版本的 Pod,并删除旧版本的 Pod
- 平滑过渡:在升级过程中,新旧版本的 Pod 可以同时存在,确保服务的连续性
- 自动回滚:如果升级过程中出现问题,Kubernetes 可以自动回滚到之前的版本
② 蓝绿升级(Blue-Green Deployment)
是一种更复杂的发布策略,适用于需要零停机时间和快速回滚的场景。它将目标服务器分为两组:蓝组和绿组。先升级一组(例如蓝组),上线后没问题再升级另一组(绿组)。
- 零停机时间:在升级过程中,始终有一组服务在运行,确保服务的连续性
- 快速回滚:如果新版本出现问题,可以快速切换回旧版本
- 资源消耗:需要两倍的服务器资源,因为两组服务同时运行
③ 灰度升级(Canary Deployment)
是一种逐步发布新版本的策略,适用于需要逐步验证新版本稳定性的场景。它按照一定百分比升级,例如先升级 10%,继续 50%,最后 40%。
- 逐步验证:逐步将流量切换到新版本,验证其稳定性
- 风险控制:如果新版本出现问题,可以快速回滚,减少影响范围
- 灵活性:可以根据实际情况调整升级比例
滚动升级在K8s中的实现:
- 1个Deployment
- 2个ReplicaSet
滚动更新一次只升级一小部分Pod,成功后,再升级一部分Pod,最终完成 所有Pod升级,整个过程始终有Pod在运行,从而保证了业务的连续性。
查看滚动升级过程:
使用 kubectl describe deployment web 命令查看详情
新建RS web-nginx-f5f6b7648,并设置副本为1
缩容RS web-nginx-6b999f8f 副本数由3到2
扩容RS web-nginx-f5f6b7648 副本数由1到2
缩容RS web-nginx-6b999f8f 副本数由2到1
扩容RS web-nginx-f5f6b7648 副本数由2到3
缩容RS web-nginx-6b999f8f 副本数由1到0
- 备注:Scaled up RS 新建/扩容 ,Scaled down RS 缩容
- 备注:deployment pod 名称格式组成 :deployment名称-RS 名称-随机字符串
3.4.2 ReplicaSet控制器
ReplicaSet:副本集,主要维护Pod副本数量,不断对比当前Pod数量 与期望Pod数量(在Deployment控制器创建的Pod中进行删除Pod的操作,ReplicaSet会自动帮忙拉起新的Pod)
用途:Deployment每次发布都会创建一个RS作为记录, 用于实现滚动升级和回滚(一个RS相当于一次历史的版本)
① 查看RS记录
- 命令:kubectl get replicaset
[root@k8s-master-1-71 ~]# kubectl get replicaset
NAME DESIRED CURRENT READY AGE
web-5cc97bc7d5 1 1 1 3h35m
# 或者
kubectl get rs
② 查看详细RS记录
- 命令:kubectl describe rs
[root@k8s-master-1-71 ~]# kubectl describe rs web-5cc97bc7d5
Name: web-test-yaml-5cc97bc7d5
Namespace: default
Selector: app=web,pod-template-hash=5cc97bc7d5
Labels: app=webpod-template-hash=5cc97bc7d5
Annotations: deployment.kubernetes.io/desired-replicas: 1deployment.kubernetes.io/max-replicas: 2deployment.kubernetes.io/revision: 1
Controlled By: Deployment/web-test-yaml
Replicas: 1 current / 1 desired
Pods Status: 1 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:Labels: app=webpod-template-hash=5cc97bc7d5Containers:nginx:Image: nginxPort: <none>Host Port: <none>Environment: <none>Mounts: <none>Volumes: <none>
Events: <none>
③ 查看版本对应RS记录
- 命令:kubectl rollout history deployment
[root@k8s-master-1-71 ~]# kubectl rollout history deployment web-nginx
deployment.apps/web-nginx
REVISION CHANGE-CAUSE
1 <none>
2 <none>
3.5 回滚
用途:项目升级失败恢复到正常版本
① 回滚上一个版本
- 命令:kubectl rollout undo deployment
[root@k8s-master-1-71 ~]# kubectl rollout undo deployment web-nginx
② 回滚历史指定版本
- 命令:kubectl rollout undo deployment web --to-revision=版本记录
[root@k8s-master-1-71 ~]# kubectl rollout undo deployment web-nginx --to-revision=4
注:回滚是重新部署某一次部署时的状态,即当时版本所有配置
通过脚本方式获取历史发布版本与镜像对应关系:
脚本如下:
kubectl describe $(kubectl get rs -o name) | egrep "revision:|Image:"
- 解释:发布镜像的RS记录名称(版本) kubectl get rs -o name // -o name 只获取rs名称
- 解释:每个RS对应一个镜像的RS版本与发布历史版本号 kubectl describe rs
测试:
for i in {1..1000}
do
sleep 1
curl -I http://192.168.1.71:32233
done
3.6 项目下线
- 命令:kubectl delete deployment/web
- 命令:kubectl delete svc/web
3.7 应用实力扩容和缩容
水平扩/缩容实现方式(场景:当并发过大,可以启动多个Pod实例,应对提高并发)
- 修改yaml里的 replicas 值,再apply -f xxx.yaml文件
- kubectl scale deployment --replicas=副本数
注:replicas参数控制Pod副本数量
[root@k8s-master-1-71 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
web-nginx-7bbcc98c54-6rd6f 1/1 Running 0 6m40s
web-nginx-7bbcc98c54-prtgm 1/1 Running 0 6m43s
web-nginx-7bbcc98c54-x69wf 1/1 Running 0 6m38s# 从3副本缩容至2副本[root@k8s-master-1-71 ~]# kubectl scale deployment web-nginx --replicas=2
deployment.apps/web-nginx scaled
[root@k8s-master-1-71 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
web-nginx-7bbcc98c54-6rd6f 1/1 Running 0 8m5s
web-nginx-7bbcc98c54-prtgm 1/1 Running 0 8m8s# 从2副本扩容至5副本
[root@k8s-master-1-71 ~]# kubectl scale deployment web-nginx --replicas=5
deployment.apps/web-nginx scaled
[root@k8s-master-1-71 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
web-nginx-7bbcc98c54-6rd6f 1/1 Running 0 8m47s
web-nginx-7bbcc98c54-9jcv4 1/1 Running 0 12s
web-nginx-7bbcc98c54-g48n8 1/1 Running 0 12s
web-nginx-7bbcc98c54-hkdrk 1/1 Running 0 12s
web-nginx-7bbcc98c54-lccp9 1/1 Running 0 12s
课后作业
1、创建一个deployment 副本数 3,然后滚动更新镜像版本,并记录这个更新记录,最后再回滚到上一个版本
- 名称:nginx
- 镜像版本:1.16
- 更新镜像版本:1.17
2、给web deployment扩容副本数为3
3、把deployment输出json文件,再删除创建的deployment
4、生成一个deployment yaml文件保存到/opt/deploy.yaml
- 名称:web
- 标签:app_env_stage=dev
小结:
本篇为 【Kubernetes CKA认证 Day3】的学习笔记,希望这篇笔记可以让您初步了解到 YAML文件如何编排,Deployment的工作负载模式,K8S一般生命周期管理流程等,课后还有扩展实践,不妨跟着我的笔记步伐亲自实践一下吧!
Tip:毕竟两个人的智慧大于一个人的智慧,如果你不理解本章节的内容或需要相关笔记、视频,可私信小安,请不要害羞和回避,可以向他人请教,花点时间直到你真正的理解。
相关文章:

CKA认证 | Day3 K8s管理应用生命周期(上)
第四章 应用程序生命周期管理(上) 1、在Kubernetes中部署应用流程 1.1 使用Deployment部署Java应用 在 Kubernetes 中,Deployment 是一种控制器,用于管理 Pod 的部署和更新。以下是使用 Deployment 部署 Java 应用的步骤&#x…...

JavaWeb——HTML、CSS
目录 1.概述 2.HTML a.HTML结构标签 b.图片标签 c.标题标签 d.水平线标签 e.布局标签 f.超链接标签 e.视频标签 f.音频标签 e.换行标签 f.段落标签 g.加粗标签 h.表格 1.声明表格 2.表行 3.普通表格 4.加粗表格 i.表单标签 1.声明表单 2. 表单 3.下拉列表…...
springboot如何获取控制层get和Post入参
一、在 Spring 配置中创建一个过滤器,将 HttpServletRequest 包装为 ContentCachingRequestWrapper import org.springframework.stereotype.Component; import org.springframework.web.filter.OncePerRequestFilter; import javax.servlet.FilterChain; import j…...

30 秒!用通义灵码画 SpaceX 星链发射流程图
不想读前人“骨灰级”代码, 不想当“牛马”程序员, 想像看图片一样快速读复杂代码和架构? 来了,灵码又加新 buff!! 通义灵码支持代码逻辑可视化, 可以把你的每段代码画成流程图。 你可以把…...

设计模式之组合模式(营销差异化人群发券,决策树引擎搭建场景)
前言: 往往很多大需求都是通过增删改查堆出来的,今天要一个需求if一下,明天加个内容else扩展一下。日积月累需求也就越来越大,扩展和维护的成本也就越来越高。往往大部分研发是不具备产品思维和整体业务需求导向的,总以…...
关于做完 C# 项目的问题总结
1. .Any()方法使用 可以与其他LINQ方法结合使用,以构建更复杂的查询。例如,你可以首先过滤集合,然后检查过滤后的集合是否包含任何元素: List<string> fruits new List<string> { "Apple", "Banana&q…...
CSS响应式布局实现1920屏幕1rem等于100px
代码解析与实现 设置根元素的 font-size 为 5.208333vw 假设你想让根元素的 font-size 基于视口宽度来动态调整。我们可以通过设置 font-size 为 5.208333vw 来让 1rem 相当于视口宽度的 5.208333%。 计算 5.208333vw: 当屏幕宽度为 1920px 时,5.208333vw 等于 5…...
根据当前浏览器版本,下载或更新驱动文件为对应的版本
以前通过ChromeDriverManager().install()的方式自动下载驱动的方式,现在行不通了,访问不通下载网址,会报错:requests.exceptions.ConnectionError: Could not reach host. Are you offline? 所以想着换一个下载地址和方式&…...

【轻量化】YOLOv10 更换骨干网络之 MobileNetv4 | 模块化加法!非 timm 包!
之前咱们在这个文章中讲了timm包的加法,不少同学反馈要模块化的加法,那么这篇就讲解下模块化的加法,值得注意的是,这样改加载不了mobilebnetv4官方开源的权重了~ 论文地址:https://arxiv.org/pdf/2404.10518 代码地址:https://github.com/tensorflow/models/blob/master…...

人体存在感应器设置时间开启感应人存在开灯,失效
环境: 领普人体存在感应器 问题描述: 人体存在感应器设置时间开启感应人存在开灯,失效,设置下午5点,如果有人在5点前一直在这个区域,这个时候到了5点,就触发不了感应自动打开灯光。 解决方案:…...
2024年09月CCF-GESP编程能力等级认证Python编程二级真题解析
本文收录于专栏《Python等级认证CCF-GESP真题解析》,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 一、单选题(每题 2 分,共 30 分) 第 1 题 据有关资料,山东大学于1972年研制成功DJL-1计算机,并于1973年投入运行,其综合性能居当时全国第三位。DJL-1计算机运算控…...
Vuex vs Pinia:新一代Vue状态管理方案对比
引言 随着Vue生态系统的不断发展,状态管理已经成为现代Vue应用程序中不可或缺的一部分。Vuex作为Vue官方的状态管理方案,一直是开发者的首选。然而,随着Pinia的出现,为Vue开发者带来了新的选择。本文将深入对比这两个状态管理方案…...
es查询报错:too_many_buckets_exception
故障排除 es查询报错:too_many_buckets_exception {"error":{"root_cause":[],"type":"search_phase_execution_exception","reason":"","phase":"fetch","grouped":…...

outlook邮箱关闭垃圾邮件——PowerAutomate自动化任务
微软邮箱反垃圾已经很强大了非常敏感,自家的域名的邮件都能给扔到垃圾邮箱里,但还是在本地增加了一层垃圾邮箱功能,然后垃圾邮箱并没有提示,导致错过很多通知,本身并没有提供关闭的功能,但微软有个Microsof…...

机器学习(七)——集成学习(个体与集成、Boosting、Bagging、随机森林RF、结合策略、多样性增强、多样性度量、Python源码)
目录 关于1 个体与集成2 Boosting3 Bagging与随机森林4 结合策略5 多样性X 案例代码X.1 分类任务-Adaboost-SVMX.1.1 源码X.1.2 数据集(鸢尾花数据集)X.1.3 模型效果 X.2 分类任务-随机森林RFX.2.1 源码X.2.2 数据集(鸢尾花数据集)…...

vue跳转传参
path 跳转只能使用 query 传参 ,name 跳转都可以 params :获取来自动态路由的参数 query :获取来自 search 部分的参数...

初识Linux · 共享内存
目录 理解共享内存 Shared memmory code 理解共享内存 前文介绍的管道方式的通信,本文介绍的是进程通信的另外一种方式,即共享内存。但是这种通信方式的特点是只能本地通信,并且不像管道那样有保护机制,这里是没有的。 我们通…...

Illumina测序什么时候会测序到接头序列?
Storage-D: 一个支持实用及个性化 DNA 数据存储的用户友好型平台 iMeta主页:http://www.imeta.science 方法论文 ● 期刊:iMeta(IF 23.7) ● 原文链接DOI: https://doi.org/10.1002/imt2.168 ● 2024年1月21日,中国…...

Element表格show-overflow-tooltip属性
表格默认情况下若内容过多会折行显示,若需要单行显示可以使用show-overflow-tooltip属性,它接受一个Boolean,为true时多余的内容会在 hover 时以 tooltip 的形式显示出来。 <el-table v-loading"loading" :data"list"…...

蓝桥杯竞赛单片机组备赛【经验帖】
本人获奖情况说明 笔者本人曾参加过两次蓝桥杯电子赛,在第十二届蓝桥杯大赛单片机设计与开发组获得省级一等奖和国家级二等奖,在第十五届嵌入式设计开发组获得省级二等奖。如果跟着本帖的流程备赛,只要认真勤奋,拿个省二绝对没问…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...

c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...