【云原生】kubernetes中Configmap原理解析与应用实战

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生k8s,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:云原生K8S,零基础到进阶实战
景天的主页:景天科技苑

文章目录

  • ComfigMap
    • 1.Configmap概述
      • 1.1 什么是Configmap?
      • 1.2 Configmap能解决哪些问题?
      • 1.3 Configmap应用场景
      • 1.4 局限性
    • 2.Configmap创建方法
      • 2.1 命令行直接创建
      • 2.2 通过文件创建
      • 2.3 指定目录创建
      • 2.4 编写configmap资源清单YAML文件
    • 3.使用Configmap
      • 3.1 通过环境变量引入:使用configMapKeyRef
      • 3.2 通过环境变量引入:使用envfrom
      • 3.3 把configmap做成volume,挂载到pod
    • 4.Configmap热更新
      • 4.1 注意

ComfigMap

1.Configmap概述

1.1 什么是Configmap?

Configmap是k8s中的资源对象,用于保存非机密性的配置的,数据可以用key/value键值对的形式保存,也可通过文件的形式保存。

1.2 Configmap能解决哪些问题?

我们在部署服务的时候,每个服务都有自己的配置文件,
如果一台服务器上部署多个服务:nginx、tomcat、apache等,那么这些配置都存在这个节点上,
假如一台服务器不能满足线上高并发的要求,需要对服务器扩容,扩容之后的服务器还是需要部署多个服务:nginx、tomcat、apache,
新增加的服务器上还是要管理这些服务的配置,如果有一个服务出现问题,需要修改配置文件,每台物理节点上的配置都需要修改,
这种方式肯定满足不了线上大批量的配置变更要求。
所以,k8s中引入了Configmap资源对象,可以当成volume挂载到pod中,实现统一的配置管理。

1、Configmap是k8s中的资源, 相当于配置文件,可以有一个或者多个Configmap;
2、Configmap可以做成Volume,k8s pod启动之后,通过 volume 形式映射到容器内部指定目录上;
3、容器中应用程序按照原有方式读取容器特定目录上的配置文件。
4、在容器看来,配置文件就像是打包在容器内部特定目录,整个过程对应用没有任何侵入。

1.3 Configmap应用场景

1、使用k8s部署应用,当你将应用配置写进代码中,更新配置时也需要打包镜像,
configmap可以将配置信息和docker镜像解耦,以便实现镜像的可移植性和可复用性,
因为一个configMap其实就是一系列配置信息的集合,可直接注入到Pod中给容器使用。
configmap注入方式有两种:
一种将configMap做为存储卷,
一种是将configMap通过env中configMapKeyRef注入到容器中。

2、使用微服务架构的话,存在多个服务共用配置的情况,如果每个服务中单独一份配置的话,
那么更新配置就很麻烦,使用configmap可以友好的进行配置共享。

1.4 局限性

ConfigMap在设计上不是用来保存大量数据的。在ConfigMap中保存的数据不可超过1 MiB。
如果你需要保存超出此尺寸限制的数据,可以考虑挂载存储卷或者使用独立的数据库或者文件服务。
一般配置文件不会超过1M,所以大胆地去用,几千行也不会超过1M

2.Configmap创建方法

2.1 命令行直接创建

直接在命令行中指定configmap参数创建,通过–from-literal指定参数

[root@master01 configmap ]#kubectl create configmap tomcat-config --from-literal=tomcat_port=8080 --from-literal=server_name=myapp.tomcat.com
configmap/tomcat-config created

命令行创建configmap可以通过帮助命令查看使用规则:

[root@master01 configmap ]#kubectl create configmap --help
Create a config map based on a file, directory, or specified literal value.A single config map may package one or more key/value pairs.When creating a config map based on a file, the key will default to the basename of the file, and the value will
default to the file content.  If the basename is an invalid key, you may specify an alternate key.When creating a config map based on a directory, each file whose basename is a valid key in the directory will be
packaged into the config map.  Any directory entries except regular files are ignored (e.g. subdirectories, symlinks,
devices, pipes, etc).Aliases:
configmap, cmExamples:# Create a new config map named my-config based on folder barkubectl create configmap my-config --from-file=path/to/bar# Create a new config map named my-config with specified keys instead of file basenames on diskkubectl create configmap my-config --from-file=key1=/path/to/bar/file1.txt --from-file=key2=/path/to/bar/file2.txt# Create a new config map named my-config with key1=config1 and key2=config2kubectl create configmap my-config --from-literal=key1=config1 --from-literal=key2=config2# Create a new config map named my-config from the key=value pairs in the filekubectl create configmap my-config --from-file=path/to/bar# Create a new config map named my-config from an env filekubectl create configmap my-config --from-env-file=path/to/foo.env --from-env-file=path/to/bar.envOptions:--allow-missing-template-keys=true: If true, ignore any errors in templates when a field or map key is missing in
the template. Only applies to golang and jsonpath output formats.--append-hash=false: Append a hash of the configmap to its name.--dry-run='none': Must be "none", "server", or "client". If client strategy, only print the object that would be
sent, without sending it. If server strategy, submit server-side request without persisting the resource.--field-manager='kubectl-create': Name of the manager used to track field ownership.--from-env-file=[]: Specify the path to a file to read lines of key=val pairs to create a configmap (i.e. a Docker
.env file).--from-file=[]: Key file can be specified using its file path, in which case file basename will be used as
configmap key, or optionally with a key and file path, in which case the given key will be used.  Specifying a directory
will iterate each named file in the directory whose basename is a valid configmap key.--from-literal=[]: Specify a key and literal value to insert in configmap (i.e. mykey=somevalue)-o, --output='': Output format. One of:
json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file.--save-config=false: If true, the configuration of current object will be saved in its annotation. Otherwise, the
annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.--show-managed-fields=false: If true, keep the managedFields when printing objects in JSON or YAML format.--template='': Template string or path to template file to use when -o=go-template, -o=go-template-file. The
template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].--validate=true: If true, use a schema to validate the input before sending itUsage:kubectl create configmap NAME [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run=server|client|none]
[options]Use "kubectl options" for a list of global command-line options (applies to all commands).
[root@master01 configmap ]#kubectl describe configmap tomcat-config
Name:         tomcat-config
Namespace:    default
Labels:       <none>
Annotations:  <none>Data
====
server_name:
----
myapp.tomcat.com
tomcat_port:
----
8080BinaryData
====Events:  <none>

2.2 通过文件创建

定义一个key是www,值是nginx.conf中的内容

[root@master01 configmap ]#cat nginx.conf 
server {server_name www.nginx.com;listen 80;root /home/nginx/www/
}
[root@master01 configmap ]#kubectl create configmap www-nginx --from-file=www=./nginx.conf
configmap/www-nginx created

此时,如果不指定文件的名称www。则创建的configmap的key是文件名,值是文件的内容

[root@master01 configmap ]#kubectl describe configmap www-nginx
Name:         www-nginx
Namespace:    default
Labels:       <none>
Annotations:  <none>Data
====
www:
----
server {server_name www.nginx.com;listen 80;root /home/nginx/www/
}BinaryData
====Events:  <none>

configmap缩写成cm

2.3 指定目录创建

[root@master01 configmap ]#mkdir test-a
[root@master01 configmap ]#cd test-a/[root@master01 test-a ]#cat my-server.cnf 
server-id=1
[root@master01 test-a ]#cat my-slave.cnf 
server-id=2

指定目录创建configmap

[root@master01 test-a ]#kubectl create configmap mysql-config --from-file=/root/configmap/test-a/
configmap/mysql-config created

#查看configmap详细信息

[root@master01 test-a ]#kubectl describe cm mysql-config
Name:         mysql-config
Namespace:    default
Labels:       <none>
Annotations:  <none>Data
====
my-server.cnf:
----
server-id=1my-slave.cnf:
----
server-id=2BinaryData
====Events:  <none>

这种类似文件名做key,文件内容做值

2.4 编写configmap资源清单YAML文件

[root@master01 configmap ]#kubectl explain cm
KIND:     ConfigMap
VERSION:  v1DESCRIPTION:ConfigMap holds configuration data for pods to consume.FIELDS:apiVersion	<string>APIVersion defines the versioned schema of this representation of anobject. Servers should convert recognized schemas to the latest internalvalue, and may reject unrecognized values. More info:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resourcesbinaryData	<map[string]string>BinaryData contains the binary data. Each key must consist of alphanumericcharacters, '-', '_' or '.'. BinaryData can contain byte sequences that arenot in the UTF-8 range. The keys stored in BinaryData must not overlap withthe ones in the Data field, this is enforced during validation process.Using this field will require 1.10+ apiserver and kubelet.data	<map[string]string>Data contains the configuration data. Each key must consist of alphanumericcharacters, '-', '_' or '.'. Values with non-UTF-8 byte sequences must usethe BinaryData field. The keys stored in Data must not overlap with thekeys in the BinaryData field, this is enforced during validation process.immutable	<boolean>Immutable, if set to true, ensures that data stored in the ConfigMap cannotbe updated (only object metadata can be modified). If not set to true, thefield can be modified at any time. Defaulted to nil.kind	<string>Kind is a string value representing the REST resource this objectrepresents. Servers may infer this from the endpoint the client submitsrequests to. Cannot be updated. In CamelCase. More info:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kindsmetadata	<Object>Standard object's metadata. More info:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
[root@master01 configmap ]#cat mysql-configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:name: mysqllabels:app: mysql
data:master.cnf: |[mysqld]log-binlog_bin_trust_function_creators=1lower_case_table_names=1slave.cnf: |[mysqld]super-read-onlylog_bin_trust_function_creators=1

文件内容有多行 后面要跟 |
不然会出问题

这里主要配置data字段中的内容

3.使用Configmap

3.1 通过环境变量引入:使用configMapKeyRef

创建一个存储mysql配置的configmap

[root@master01 configmap ]#vim mysql-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: mysqllabels:app: mysql
data:log: "1"lower: "1"
[root@master01 configmap ]#kubectl apply -f mysql-configmap.yaml 
configmap/mysql created

查看创建的Comfigmap

[root@master01 configmap ]#kubectl get cm
NAME               DATA   AGE
kube-root-ca.crt   1      12d
mysql              2      8s
mysql-config       2      55m
tomcat-config      2      3h35m
www-nginx          1      111m

创建pod,引用Configmap中的内容

[root@master01 configmap ]#vim mysql-pod.yaml
apiVersion: v1
kind: Pod
metadata:name: mysql-pod
spec:containers:- name: mysqlimage: busyboxcommand: [ "/bin/sh", "-c", "sleep 3600" ]env:- name: log_bin   #定义环境变量log_binvalueFrom: configMapKeyRef:name: mysql     #指定configmap的名字key: log #指定configmap中的key- name: lower   #定义环境变量lowervalueFrom:configMapKeyRef:name: mysqlkey: lowerrestartPolicy: Never

更新资源清单文件

[root@master01 configmap ]#kubectl apply -f mysql-pod.yaml 
pod/mysql-pod created
[root@master01 configmap ]#kubectl exec -it mysql-pod -- /bin/sh
[root@master01 configmap ]#kubectl exec -it mysql-pod -c mysql -- /bin/sh
/ # printenv 
log_bin=1
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT=tcp://192.168.0.1:443
HOSTNAME=mysql-pod
SHLVL=1
HOME=/root
TERM=xterm
lower=1
KUBERNETES_PORT_443_TCP_ADDR=192.168.0.1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP=tcp://192.168.0.1:443
KUBERNETES_SERVICE_HOST=192.168.0.1
PWD=/
/ # 

3.2 通过环境变量引入:使用envfrom

查看envfrom使用方法

[root@master01 configmap ]#kubectl explain pod.spec.containers.envFrom
KIND:     Pod
VERSION:  v1RESOURCE: envFrom <[]Object>DESCRIPTION:List of sources to populate environment variables in the container. Thekeys defined within a source must be a C_IDENTIFIER. All invalid keys willbe reported as an event when the container is starting. When a key existsin multiple sources, the value associated with the last source will takeprecedence. Values defined by an Env with a duplicate key will takeprecedence. Cannot be updated.EnvFromSource represents the source of a set of ConfigMapsFIELDS:configMapRef	<Object>The ConfigMap to select fromprefix	<string>An optional identifier to prepend to each key in the ConfigMap. Must be aC_IDENTIFIER.secretRef	<Object>The Secret to select from
[root@master01 configmap ]#vim mysql-pod-envfrom.yaml
apiVersion: v1
kind: Pod
metadata:name: mysql-pod-envfrom
spec:containers:- name: mysqlimage: busyboximagePullPolicy: IfNotPresentcommand: [ "/bin/sh", "-c", "sleep 3600" ]envFrom: - configMapRef:name: mysql     #指定configmap的名字restartPolicy: Never

更新资源清单文件

[root@master01 configmap ]#kubectl apply -f mysql-pod-envfrom.yaml 
pod/mysql-pod-envfrom created
[root@master01 configmap ]#kubectl get pods
NAME                               READY   STATUS    RESTARTS        AGE
mysql-pod                          1/1     Running   0               11m
mysql-pod-envfrom                  1/1     Running   0               7s
nfs-provisioner-847fb5b8f5-lzvcf   1/1     Running   7 (5h21m ago)   3d5h
pod-pvc                            1/1     Running   1 (6h21m ago)   3d3h
test-hostpath                      2/2     Running   6 (6h21m ago)   4d4h
test-nfs-volume                    1/1     Running   3 (6h21m ago)   4d1h
web-0                              1/1     Running   1 (6h21m ago)   2d21h
web-1                              1/1     Running   1 (6h21m ago)   2d21h
web-2                              1/1     Running   1 (6h21m ago)   2d21h
web-3                              1/1     Running   1 (6h21m ago)   2d21h

进容器查看环境变量

[root@master01 configmap ]#kubectl exec -it mysql-pod-envfrom -c ysql-pod-envfrom -- /bin/sh   
/ # printenv 
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT=tcp://192.168.0.1:443
HOSTNAME=mysql-pod-envfrom
SHLVL=1
HOME=/root
TERM=xterm
lower=1
KUBERNETES_PORT_443_TCP_ADDR=192.168.0.1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
log=1
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP=tcp://192.168.0.1:443
KUBERNETES_SERVICE_HOST=192.168.0.1
PWD=/

这里取得变量以及值都是configmap里面定义的变量

3.3 把configmap做成volume,挂载到pod

[root@master01 configmap ]#vim mysql-configmap-volume.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: mysql-volumelabels:app: mysql-volume
data:log: "1"lower: "1"my.cnf: |[mysqld]Welcome=jingtian
[root@master01 configmap ]#kubectl apply -f mysql-configmap-volume.yaml 
configmap/mysql-volume created
[root@master01 configmap ]#
[root@master01 configmap ]#kubectl get cm
NAME               DATA   AGE
kube-root-ca.crt   1      12d
mysql              2      23m
mysql-config       2      79m
mysql-volume       3      5s
tomcat-config      2      3h58m
www-nginx          1      135m
[root@master01 configmap ]#vim mysql-pod-volume.yaml
apiVersion: v1
kind: Pod
metadata:name: mysql-pod-volume
spec:containers:- name: mysqlimage: busyboxcommand: [ "/bin/sh","-c","sleep 3600" ]volumeMounts:- name: mysql-configmountPath: /tmp/configvolumes:- name: mysql-configconfigMap:name: mysql-volume   这里是configmap 的名字restartPolicy: Never
[root@master01 configmap ]#kubectl apply -f mysql-pod-volume.yaml 
pod/mysql-pod-volume created
[root@master01 configmap ]#kubectl get pods
NAME                               READY   STATUS    RESTARTS        AGE
mysql-pod                          1/1     Running   0               23m
mysql-pod-envfrom                  1/1     Running   0               12m
mysql-pod-volume                   1/1     Running   0               48s  这里 
nfs-provisioner-847fb5b8f5-lzvcf   1/1     Running   7 (5h33m ago)   3d6h
pod-pvc                            1/1     Running   1 (6h33m ago)   3d4h
test-hostpath                      2/2     Running   6 (6h33m ago)   4d4h
test-nfs-volume                    1/1     Running   3 (6h33m ago)   4d2h

进去容器查看挂载生成的文件

[root@master01 configmap ]#kubectl exec -it mysql-pod-volume -- /bin/sh/ # cd /tmp/config/
/tmp/config # ls -l
total 0
lrwxrwxrwx    1 root     root            10 Sep 26 07:27 log -> ..data/log
lrwxrwxrwx    1 root     root            12 Sep 26 07:27 lower -> ..data/lower
lrwxrwxrwx    1 root     root            13 Sep 26 07:27 my.cnf -> ..data/my.cnf
/tmp/config # ls
log     lower   my.cnf/tmp/config # cat lower 
1/tmp/config # 
/tmp/config # cat my.cnf 
[mysqld]
Welcome=jingtian

卷的形式挂载,没有把configmap 的变量加入到容器的环境变量

/tmp/config # printenv 
KUBERNETES_PORT=tcp://192.168.0.1:443
KUBERNETES_SERVICE_PORT=443
HOSTNAME=mysql-pod-volume
SHLVL=1
HOME=/root
OLDPWD=/tmp
TERM=xterm
KUBERNETES_PORT_443_TCP_ADDR=192.168.0.1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP=tcp://192.168.0.1:443
KUBERNETES_SERVICE_HOST=192.168.0.1
PWD=/tmp/config

4.Configmap热更新

4.1 注意

更新 ConfigMap 后:
使用该 ConfigMap 挂载的 Env pod里面不会同步更新

使用该 ConfigMap 挂载的 Volume 中pod里面的数据需要一段时间(实测大概10秒)才能同步更新

[root@master01 configmap ]#kubectl edit cm mysql-volume

把log: “1”变成log: “2”

保存退出

[root@master01 configmap ]#kubectl exec -it mysql-pod-volume – /bin/sh
/ # cat /tmp/config/log
2/ #

#发现log值变成了2,更新生效了

[root@master01 configmap ]#kubectl edit cm mysql
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
data:log: "2"

动态更新了env导入的configmap

[root@master01 configmap ]#kubectl exec -it mysql-pod-envfrom -- /bin/sh
/ # printenv 
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT=tcp://192.168.0.1:443
HOSTNAME=mysql-pod-envfrom
SHLVL=1
HOME=/root
TERM=xterm
lower=1
KUBERNETES_PORT_443_TCP_ADDR=192.168.0.1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
log=1   该值并未变化
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP=tcp://192.168.0.1:443
KUBERNETES_SERVICE_HOST=192.168.0.1
PWD=/

查看pod的变量未发生变化

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

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

相关文章

236. 二叉树的最近公共祖先(C++)

文章目录 前言一、题目介绍二、解决方案三、优化总结 前言 在本篇文章中我们将会讲解二叉树中极为经典的题目236. 二叉树的最近公共祖先 一、题目介绍 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的…

如何借VR之手,让展厅互动更精彩?

VR虚拟现实技术以其卓越的沉浸式体验为特点&#xff0c;引领用户踏入一个全新的虚拟世界&#xff0c;正因如此&#xff0c;它开始被广泛应用于展厅、商业等多个领域。那么&#xff0c;今天&#xff0c;让我们就来了解一下这种技术是如何为展厅带来精彩互动体验的吧&#xff01;…

日常使用工具(截图,笔记,一键启动)

目录 一,截图 Snipaste 二.笔记 Joplin 三.翻译 四.自动启动软件 这篇记录一下工作中用的很顺手的工具. 一,截图 Snipaste 官网:Snipaste - 截图 贴图 下面是官方手册. 使用 我都是直接F1 就会出现选择框,随意拖动大小,选择下方工具栏,相应位置, 二.笔记 Joplin 官网:…

el-table表格实现鼠标拖动而左右滑动

场景描述&#xff1a; 表格样式较为复杂&#xff0c;10条数据超出整个屏幕的高度&#xff0c;因而导致无法快速拖动滚动条&#xff0c;所以提出需要在表格内容区拖动鼠标&#xff0c;从而实现无需滚动到底部就可以左右拖动表格内容的效果。 具体实现&#xff1a; 实现的方式…

[排序算法]4. 图解堆排序及其代码实现

先来看看什么是堆? 堆是一种图的树形结构&#xff0c;被用于实现“优先队列”&#xff08;priority queues&#xff09; 注:优先队列是一种数据结构&#xff0c;可以自由添加数据&#xff0c;但取出数据时要从最小值开始按顺序取出。 在堆的树形结构中&#xff0c…

.NET 某和OA办公系统全局绕过漏洞分析

转自先知社区 作者&#xff1a;dot.Net安全矩阵 原文链接&#xff1a;.NET 某和OA办公系统全局绕过漏洞分析 - 先知社区 0x01 前言 某和OA协同办公管理系统C6软件共有20多个应用模块&#xff0c;160多个应用子模块&#xff0c;从功能型的协同办公平台上升到管理型协同管理平…

JS-06 原型式继承借用构造函数实现继承

目录 1 原型式继承 场景 前置问题 实现方法 2 借用构造函数实现继承 前置问题 错误的实现方式 正确的实现方式 1 原型式继承 场景 a、创建一个纯洁的对象&#xff1a;对象在控制台打印什么属性都没有 b、创建一个继承自某个父对象的子对象 前置问题 一个对象里有很…

基于稀疏辅助信号平滑的心电信号降噪方法(Matlab R2021B)

基于形态成分分析理论&#xff08;MCA&#xff09;的稀疏辅助信号分解方法是由信号的形态多样性来分解信号中添加性的混合信号成分&#xff0c;它最早被应用在图像处理领域&#xff0c;后来被引入到一维信号的处理中。 在基于MCA稀疏辅助的信号分析模型中&#xff0c;总变差方…

【前端篇】前端开发大厂面试真题

为助力小伙伴们梳理前端知识体系&#xff0c;从而能够充分地做好面试准备&#xff0c;那么今天就来给大家分享一份前端开发的面试真题与相关知识点&#xff0c;其中涵盖了最新版本的八股文&#xff08;包含最新的 Vue 3 面试题&#xff09;、高频算法题以及大佬的面经&#xff…

嵌入式进阶——EEPROM读写

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 设置EEPROM读写String字符串官方示例 EEPROM是一种可擦写可编程只读存储器&#xff08;Electrically Erasable Programmable Read-…

[ARM-2D 专题] arm-2d项目简介

Arm-2D 是一个用于 Cortex-M 处理器上的 2.5D 图像处理的开源项目。 由ARM公司开发和维护&#xff0c;属于官方性质的项目&#xff0c;目前最新版本为V1.1.6. 2022年7月发布1.0的预览版&#xff0c; 2023年2月发布第一个正式版V1.1.1&#xff0c;近一年来快速迭代和功能增强&a…

数据库-SQL优化下

Group by 优化 limit优化 count优化 UPDATE优化 当用id去更改的时候,一个是id1 另一个id2 这是没毛病的&#xff0c;因为加的是行锁 但是如果根据name 一个是where nameaa. 另一个是namehh,在另一个事务没提交前&#xff0c;另一个不能提交&#xff0c;因为name字段不是索引…

数据结构复习指导之B树和B+树

目录 B树和B树 考纲内容 1.B树及其基本操作 1.1B树的查找 1.2B树的高度&#xff08;磁盘存取次数&#xff09; 1.3B树的插入 1.4B树的删除 2.B树的基本概念 B树和B树 考纲内容 考研大纲对 B树和 B树的要求各不相同&#xff0c;重点在于考查B树&#xff0c;不仅要求理解…

基于51单片机数字频率计的设计

本文提出设计数字频率计的方案,重点介绍以单片机AT89C51为控制核心,实现频率测量的数字频率设计。测频的基本原理是采用在低频段直接测频法,在低频段直接测频法的设计思路,硬件部分由单片机和数计显示电路组成;软件部分由信号频率测量模块和数据显示模块等模块实现。应用单…

Raven2掠夺者2渡鸦2账号需要验证怎么解决 超简单验证账号教程

《渡鸦2》是一款源自韩国的创新力作&#xff0c;作为《Raven》系列的最新续篇&#xff0c;这款游戏在MMORPG手游领域内再度扩展了其标志性的暗黑奇幻宇宙&#xff0c;融入了大量革新的游戏设计与丰富内容。定档于2024年5月29日开启公测的《渡鸦2》&#xff0c;正处在紧张刺激的…

美光拟投巨资在日本广岛建DRAM厂,目标2027年底投产

美光科技&#xff08;Micron Technology&#xff09;据日本媒体报道&#xff0c;计划在日本广岛县新建一座DRAM芯片生产工厂&#xff0c;目标最快于2027年底投入运营。这一举措标志着美光在增强其内存芯片生产能力方面的又一重大步伐。 报道称&#xff0c;新工厂的总投资规模预…

Kotlin核心编程知识点-03-类型系统

文章目录 1.null 引用2.可空类型2.1.安全的调用 ?.2.2.Elvis 操作符 ?:2.3.非空断言 !!.2.4.类型检查2.5.类型智能转换 3.比 Java 更面向对象的设计3.1.Any&#xff1a;非空类型的根类型3.2.Any?: 所有类型的根类型3.3.自动装箱和拆箱3.4.数组类型 4.泛型&#xff1a;让类型…

CVPR2024《RMT: Retentive Networks Meet Vision Transformers》论文阅读笔记

论文链接&#xff1a;https://arxiv.org/pdf/2309.11523 代码链接&#xff1a;https://github.com/qhfan/RMT 引言 ViT近年来在计算机视觉领域受到了越来越多的关注。然而&#xff0c;作为ViT的核心模块--自注意力缺乏空间先验知识。此外&#xff0c;自注意力的二次计算复杂度…

Spring和Servlet的整合

Servlet对象是谁创建的&#xff1f; 由服务器端创建的 程序启动调用加载spring配置文件代码 Web应用程序启动也需要加载Spring配置文件 Web开发中有三大组件&#xff1a; 1、servlet 2、filter 3、listener&#xff08;request&#xff0c;session&#xff0c;application&…

如何确保大模型 RAG 生成的信息是基于可靠的数据源?

在不断发展的人工智能 (AI) 领域中&#xff0c;检索增强生成 (RAG) 已成为一种强大的技术。 RAG 弥合了大型语言模型 (LLM) 与外部知识源之间的差距&#xff0c;使 AI 系统能够提供更全面和信息丰富的响应。然而&#xff0c;一个关键因素有时会缺失——透明性。 我们如何能够…