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

8、Kubernetes核心技术 - ConfigMap

目录

一、ConfigMap概述

二、ConfigMap创建

2.1、命令行方式创建

2.2、yaml 文件方式创建

三、ConfigMap查询

四、ConfigMap更新

4.1、kubectl edit方式

4.2、kubectl apply方式

五、ConfigMap使用

5.1、spec.env 【环境变量】

5.2、spec.envFrom 【环境变量】

5.3、指定 items【卷挂载方式】

5.4、不指定 items【卷挂载方式】

六、ConfigMap删除


一、ConfigMap概述

ConfigMap 功能在 Kubernetes1.2 版本中引入,许多应用程序会从配置文件、命令行参数或环境变量中读取配 置信息。ConfigMap API给我们提供了向容器中注入配置信息的机制,ConfigMap 可以被用来保存单个属性,也可以用来保存整个配置文件或者JSON 二进制大对象 。

ConfigMap 的主要作用就是为了让镜像和配置文件解耦,以便实现镜像的可移植性和可复用性。

注意:ConfigMap 并不提供保密或者加密功能。 如果你想存储的数据是加密的,请使用 Secret, 或者使用其他第三方工具来保证你的数据的私密性,而不是用 ConfigMap。

二、ConfigMap创建

2.1、命令行方式创建

读取文件方式(也可以是目录)通过--from-file参数从文件中读取,可以指定 key 的名称,若不指定,则默认使用文件名为key。--from-file:指定在目录下的所有文件都会被用在 ConfigMap 里边创建一个键值对,键的名字就是文件名,值就是文件里内容。

vim configmap-file.properties

version:1.0
environment:dev

创建ConfigMap:

$ vim configmap-file.properties# 通过kubectl create configmap创建ConfigMap
$ kubectl create configmap from-file-configmap --from-file=configmap-file.properties
configmap/from-file-configmap created$ kubectl get configmap/from-file-configmap
NAME                  DATA   AGE
from-file-configmap   1      25s# 查看ConfigMap的yaml资源清单
$ kubectl get configmap/from-file-configmap -o yaml
apiVersion: v1
data:configmap-file.properties: |			# ConfigMap的数据,换行的话冒号后面需要加 |version:1.0environment:dev
kind: ConfigMap
metadata:creationTimestamp: "2023-01-05T05:33:28Z"name: from-file-configmapnamespace: defaultresourceVersion: "3179"uid: a9f17c3a-af94-4a9a-9145-e06f3d3bf030

当然,我们也可以通过--from-literal参数,可以指定多个,手动指定ConfigMap中的键值对。如下:

$ kubectl create configmap cm-test --from-literal=MYSQL_ROOT_USERNAME=root --from-literal=MYSQL_ROOT_PASSWORD=123456
configmap/cm-test created$ kubectl describe cm cm-test
Name:         cm-test
Namespace:    default
Labels:       <none>
Annotations:  <none>Data
====
MYSQL_ROOT_PASSWORD:
----
123456
MYSQL_ROOT_USERNAME:
----
rootBinaryData
====

2.2、yaml 文件方式创建

创建资源清单:vim configmap.yaml

apiVersion: v1
data: 	# ConfigMap的Key 和 Value。 每一个键都映射到一个简单的值version: "1.0"    # 需要注意yaml的语法,key和value之间需要有空格environment: "dev"  # 定义一个变量,值类型为字符串,需要加引号
kind: ConfigMap
metadata:name: from-yaml-configmap

创建ConfigMap:

$ vim configmap.yaml 
$ kubectl apply -f configmap.yaml 
configmap/from-yaml-configmap created$ kubectl get cm 
NAME                  DATA   AGE
from-file-configmap   1      11m
from-yaml-configmap   2      19s
kube-root-ca.crt      1      13d

三、ConfigMap查询

# 查看 configmap 列表
$ kubectl get configmap
NAME                  DATA   AGE
from-file-configmap   1      13m
from-yaml-configmap   2      2m2s
kube-root-ca.crt      1      13d# 查看 configmap 详情
$ kubectl describe configmap from-file-configmap
Name:         from-file-configmap
Namespace:    default
Labels:       <none>
Annotations:  <none>Data
====
configmap-file.properties:
----
version:1.0
environment:devBinaryData
====Events:  <none># 查看 yaml 输出
$ kubectl get configmap from-file-configmap -o yaml
apiVersion: v1
data:configmap-file.properties: |version:1.0environment:dev
kind: ConfigMap
metadata:creationTimestamp: "2023-01-05T05:33:28Z"name: from-file-configmapnamespace: defaultresourceVersion: "3179"uid: a9f17c3a-af94-4a9a-9145-e06f3d3bf030

四、ConfigMap更新

4.1、kubectl edit方式

$ kubectl describe configmap from-file-configmap
Name:         from-file-configmap
Namespace:    default
Labels:       <none>
Annotations:  <none>Data
====
configmap-file.properties:
----
version:1.0									# 更新之前的version为1.0
environment:devBinaryData
====Events:  <none># kubectl edit configmap其实是通过修改from-file-configmap这个ConfigMap对象资源清单中的值
controlplane $ kubectl edit configmap from-file-configmap
configmap/from-file-configmap edited# 查看更新之后的ConfigMap的值
controlplane $ kubectl describe configmap from-file-configmap
Name:         from-file-configmap
Namespace:    default
Labels:       <none>
Annotations:  <none>Data
====
configmap-file.properties:
----
version:2.0									# 更新之后的version为2.0
environment:devBinaryData
====Events:  <none>

4.2、kubectl apply方式

这种方式,其实也是通过修改ConfigMap对象对应的yaml资源清单文件,然后重新执行kubectl apply -f xxx即可。

$ vim configmap.yaml$ kubectl describe cm from-yaml-configmap
Name:         from-yaml-configmap
Namespace:    default
Labels:       <none>
Annotations:  <none>Data
====
environment:
----
dev				# 修改之前的environment为dev
version:
----
1.0BinaryData
====Events:  <none>$ kubectl apply -f configmap.yaml 
configmap/from-yaml-configmap configured$ kubectl describe cm from-yaml-configmap
Name:         from-yaml-configmap
Namespace:    default
Labels:       <none>
Annotations:  <none>Data
====
environment:
----
prod				# 修改之后的environment为prod
version:
----
1.0BinaryData
====Events:  <none>

五、ConfigMap使用

容器应用对 ConfigMap 的使用主要是两种:

  • 通过环境变量获取 ConfigMap 的内容:spec.env和spec.envFrom
  • 通过卷 volume 挂载的方式将 ConfigMap 的内容挂载到容器内部的文件或目录:spec.volumes

5.1、spec.env 【环境变量】

定义Pod资源清单:vim configmap-pod-demo01.yaml

apiVersion: v1
kind: Pod
metadata:name: tomcat
spec:containers:- name: tomcatimage: tomcat:8command: [ "/bin/sh", "-c", "env | grep APP"]env:		# 配置环境变量- name: APP_VERSION         # 定义环境变量的名称valueFrom:            configMapKeyRef: name: from-yaml-configmap    # 引用from-yaml-configmap这个ConfigMap,这个值来自 ConfigMapkey: version    	# 需要取值的键,ConfigMap中的配置key为version- name: APP_ENVIRONMENT        # 定义环境变量的名称valueFrom: configMapKeyRef: name: from-yaml-configmap  # 引用from-yaml-configmap这个ConfigMapkey: environment    # ConfigMap中的配置key为environmentrestartPolicy: Never

创建Pod,观察控制台输出:

$ kubectl apply -f configmap-pod-demo01.yaml 
pod/tomcat created
$ kubectl get pod/tomcat
NAME     READY   STATUS      RESTARTS   AGE
tomcat   0/1     Completed   0          9s$ kubectl logs tomcat
APP_ENVIRONMENT=prod
APP_VERSION=1.0

可以看到,from-yaml-configmap这个ConfigMap中的内容已经成功声明为Pod中的两个环境变量:

$APP_VERSION、$APP_ENVIRONMENT,并且值也正确。

5.2、spec.envFrom 【环境变量】

定义Pod资源清单:vim configmap-pod-demo02.yaml

apiVersion: v1
kind: Pod
metadata:name: tomcat
spec:containers:- name: tomcatimage: tomcat:8imagePullPolicy: IfNotPresentcommand: ['/bin/sh','-c','env']envFrom:		# 配置环境变量- configMapRef:name: from-yaml-configmap    # 根据from-yaml-configmap这个ConfigMap中所有的key和value自动生成环境变量restartPolicy: Never 	      	      	

创建Pod,观察控制台输出:

$ kubectl apply -f configmap-pod-demo02.yaml 
pod/tomcat created$ kubectl get pod/tomcat
NAME     READY   STATUS      RESTARTS   AGE
tomcat   0/1     Completed   0          32s$ kubectl logs tomcat
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT=tcp://10.96.0.1:443
LANGUAGE=en_US:en
HOSTNAME=tomcat
LD_LIBRARY_PATH=/usr/local/tomcat/native-jni-lib
TOMCAT_SHA512=e595e906d62ff16545318108478aa101103181569dc6f4549dd0cdf8744147f7e9ba8a88cab6d33237b22981acb1085de86e7b2a4f1659efdbd4804df1303561
HOME=/root
CATALINA_HOME=/usr/local/tomcat
TOMCAT_MAJOR=8
version=1.0				# 根据from-yaml-configmap这个ConfigMap资源自动生成环境变量:version
JAVA_VERSION=jdk-17.0.5+8
environment=prod	# 根据from-yaml-configmap这个ConfigMap资源自动生成环境变量:environment
GPG_KEYS=05AB33110949707C93A279E3D3EFE6B686867BA6 07E48665A34DCAFAE522E5E6266191C37C037D42 47309207D818FFD8DCD3F83F1931D684307A10A5 541FBE7D8F78B25E055DDEE13C370389288584E7 5C3C5F3E314C866292F359A8F3AD5C94A67F707E 765908099ACF92702C7D949BFA0C35EA8AA299F1 79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED 9BA44C2621385CB966EBA586F72C284D731FABEE A27677289986DB50844682F8ACB77FC2E86E29AC A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 DCFD35E0BF8CA7344752DE8B6FB21E8933C60243 F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
PATH=/usr/local/tomcat/bin:/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
LANG=en_US.UTF-8
TOMCAT_VERSION=8.5.84
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
JAVA_HOME=/opt/java/openjdk
LC_ALL=en_US.UTF-8
KUBERNETES_SERVICE_HOST=10.96.0.1
PWD=/usr/local/tomcat
TOMCAT_NATIVE_LIBDIR=/usr/local/tomcat/native-jni-lib

如上,可以看到,通过envFrom可以实现根据某个ConfigMap资源自动生成环境变量,这样在Pod中就可以使用这些环境变量了。

env 和 envFrom 的区别:

env可以自定义变量名,但需要重复性操作;

envFrom不可以自定义变量名,但是很便捷

5.3、指定 items【卷挂载方式】

定义Pod资源清单:vim configmap-pod-demo03.yaml

apiVersion: v1
kind: Pod
metadata:name: tomcat
spec:containers:- name: tomcatimage: tomcat:8volumeMounts:- name: config-volumemountPath: /conf			# 挂载configmap-file.properties到Pod的/conf目录下volumes:- name: config-volume   configMap:   # 你可以在 Pod 级别设置卷,然后将其挂载到 Pod 内的容器中name: from-file-configmap		# 要挂载的 ConfigMap 的名字items:		# 来自 ConfigMap 的一组键,将被创建为文件- key: "configmap-file.properties"   # 来自 ConfigMap 的一组键,将被创建为文件path: "configmap-file.properties"		# ConfigMap挂载到容器内的相对路径restartPolicy: Never

创建Pod,然后进入Pod中/conf目录,查看configmap-file.properties文件是否挂载进去:

$ kubectl apply -f configmap-pod-demo03.yaml 
pod/tomcat created$ kubectl get pod/tomcat
NAME     READY   STATUS    RESTARTS   AGE
tomcat   1/1     Running   0          20s$ kubectl exec -it tomcat -c tomcat -- bash
root@tomcat:/usr/local/tomcat# cat /conf/configmap-file.properties 
version:2.0
environment:dev

5.4、不指定 items【卷挂载方式】

定义Pod资源清单:vim configmap-pod-demo04.yaml

apiVersion: v1
kind: Pod
metadata:name: tomcat
spec:containers:- name: tomcatimage: tomcat:8volumeMounts:- name: configmap-volumemountPath: /confvolumes:- name: configmap-volumeconfigMap:  # 创建一个ConfigMap类型的数据卷name: from-yaml-configmap		# 引用的ConfigMap的名称restartPolicy: Never

创建Pod,然后进入容器查看相关内容:

$ kubectl apply -f configmap-pod-demo04.yaml 
pod/tomcat created$ kubectl get pod/tomcat
NAME     READY   STATUS    RESTARTS   AGE
tomcat   1/1     Running   0          10s$ kubectl exec -it tomcat -c tomcat -- bash
root@tomcat:/usr/local/tomcat# ls -l /conf
total 0
lrwxrwxrwx 1 root root 18 Jan  5 07:01 environment -> ..data/environment
lrwxrwxrwx 1 root root 14 Jan  5 07:01 version -> ..data/version

六、ConfigMap删除

# 方式一:通过 yaml 文件删除
kubectl delete -f configmap.yaml# 方式二:直接删除资源
kubectl delete configmap from-yaml-configmap# 方式三: 删除所有configmap
kubectl delete configmap --all

相关文章:

8、Kubernetes核心技术 - ConfigMap

目录 一、ConfigMap概述 二、ConfigMap创建 2.1、命令行方式创建 2.2、yaml 文件方式创建 三、ConfigMap查询 四、ConfigMap更新 4.1、kubectl edit方式 4.2、kubectl apply方式 五、ConfigMap使用 5.1、spec.env 【环境变量】 5.2、spec.envFrom 【环境变量】 5.3…...

音视频--DTMF信号发送及检测

参考资料 https://zh.wikipedia.org/wiki/%E5%8F%8C%E9%9F%B3%E5%A4%9A%E9%A2%91https://www.cnblogs.com/lijingcheng/p/4454932.html 1. DTMF是什么 1.1 DTMF定义 双音多频信号&#xff08;英语&#xff1a;Dual-Tone Multi-Frequency&#xff0c;简称&#xff1a;DTMF&a…...

阿里云容器服务助力极氪荣获 FinOps 先锋实践者

作者&#xff1a;海迩 可信云评估是中国信息通信研究院下属的云计算服务和软件的专业评估体系&#xff0c;自 2013 年起历经十年发展&#xff0c;可信云服务评估体系已日臻成熟&#xff0c;成为政府支撑、行业规范、用户选型的重要参考。 2022 年 5 月国务院国资委制定印发《…...

C++ 通过time.windows.com获取时间

C++ 通过time.windows.com获取时间 在C++中,你可以使用 <ctime>头文件中的 time()函数来获取当前的系统时间。然后,你可以使用 <ctime>头文件中的 localtime()函数将时间转换为本地时间,并从中获取小时、分钟和秒。 以下是一个示例代码,演示如何通过time.windo…...

MPLAB加载c文件为什么不能添加到工程中的source files中

MPLAB加载c文件为什么不能添加到工程中的source files中 因为你安装好MAPLAB软件之后你的编译器是默认的编译器&#xff0c;所以当你添加C文件时&#xff0c;软件是不认识C文件的&#xff0c;只有手动的将编译器改成自安装的PICC编译器才能进行C文件的正确加载。 具体修改步骤…...

Tcp的粘包和半包问题及解决方案

目录 粘包&#xff1a; 半包&#xff1a; 应用进程如何解读字节流&#xff1f;如何解决粘包和半包问题&#xff1f; ①&#xff1a;固定长度 ②&#xff1a;分隔符 ③&#xff1a;固定长度字段存储内容的长度信息 粘包&#xff1a; 一次接收到多个消息&#xff0c;粘包 应…...

路由的hash和history模式的区别

目录 ✅ 路由模式概述 一. 路由的hash和history模式的区别 1. hash模式 2. history模式 3. 两种模式对比 二. 如何获取页面的hash变化 ✅ 路由模式概述 单页应用是在移动互联时代诞生的&#xff0c;它的目标是不刷新整体页面&#xff0c;通过地址栏中的变化来决定内容区…...

CS5366+VL171母座正反插HDMI(CS5466也可搭配)国产芯片TYPEC方案设计 ASL电路原理图 集睿致远+威锋设计

VL171是威锋芯片,可搭配ASL集睿致远CS5366设计TypeC母座正反插转HDMI高清投屏方案&#xff0c;CS5366是2lane 芯片&#xff0c;支持4K60HZ,是CS5266的升级版&#xff0c;CS5366设计拓展坞方案可以替代CS5266携带快充100W的PD和US,多口HUB也不在话下&#xff0c;而画面的刷新率和…...

mxgraph的核心元素详谈

前言: MxGraph是一个流行的开源图形库,它提供了一stop solution for creating graphical representations of data。下面是MxGraph的核心源码讲解: 正文: Graph Structure(图结构): MxGraph将一个图表示为一个层次结构,由节点和边组成。节点表示图中的顶点,而边表示它…...

再探C++——默认成员函数

目录 一、构造函数 二、析构函数 三、赋值运算符 四、拷贝构造 如果一个类中没有成员&#xff0c;我们称为空类。空类&#xff0c;也存在6个默认的类成员函数。 默认成员函数&#xff1a;用户不显示地写&#xff0c;编译器会默认生成的函数叫做默认成员函数。 6个默认成员…...

推荐两款github敏感信息搜集工具(gsil、gshark)

推荐两款github敏感信息搜集工具&#xff08;gsil、gshark&#xff09; - 云社区 - 腾讯云 (tencent.com) github敏感信息泄露是很多企业时常忽视的一个问题&#xff0c;国外有一份研究报告显示&#xff0c;在超过24,000份的GitHub公开数据中&#xff0c;发现有数千个文件中可能…...

如何不拷贝资源的使用fork

我们知道fork出的子进程会把父线程的资源拷贝一遍&#xff0c;其中包括文件描述符表&#xff0c;如果是一些独占的设备&#xff0c;那么经常会出问题。 比如你在父进程ose了设备&#xff0c;但子进程的文件描述符表里依然记录是open的&#xff0c;这样当你再次在父进程open时&a…...

使用事件侦听器和 MATLAB GUI 查看 Simulink 信号研究

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

使用协程让物体颜色慢慢消失

以下是使用协程让物体颜色慢慢消失的完整代码&#xff0c;每行都有注释说明&#xff1a; using UnityEngine; using System.Collections;public class ExampleClass : MonoBehaviour {public SpriteRenderer sprite; // 物体的SpriteRenderer组件public float fadeSpeed 0.1f…...

服务器流量

1.服务器流量分为入流量和出流量 入流量&#xff08;Inbound Traffic&#xff09;是指流向服务器的数据流量&#xff0c;也就是客户端发送到服务器的数据。这些数据可能包括请求信息、文件上传等。 出流量&#xff08;Outbound Traffic&#xff09;是指从服务器流向客户端的数…...

加拿大量子研究新动作!D-Wave与滑铁卢大学合作研究量子相干性

​ &#xff08;图片来源&#xff1a;网络&#xff09; D-Wave是量子计算系统、软件和服务的领导者&#xff0c;也是量子计算机的第一家供应商。近期&#xff0c;D-Wave宣布与滑铁卢大学量子计算研究所&#xff08;IQC&#xff09;达成两项新合作。他们为量子计算系统建立了关键…...

网络安全进阶学习第十一课——MySQL手工注入(2)

文章目录 一、UA注入1、原理2、靶场演示&#xff1a;1&#xff09;一旦页面出现如下现状&#xff0c;就可以使用UA注入2&#xff09;BP抓包3&#xff09;修改User-Agent 二、referer注入1、原理2、靶场演示&#xff1a;1&#xff09;使用BP抓包2&#xff09;修改Referer 三、DN…...

数据库和ORM如何优雅的添加字段?

RT&#xff0c;业务需要为某个实体添加字段&#xff0c;如何在生成了Mybatis XML&#xff08;包含了手写的部分联合查询&#xff09;的情况下优雅的添加字段呢&#xff1f; 作者&#xff1a;方小葱 链接&#xff1a;https://www.zhihu.com/question/284511416/answer/43812337…...

QT ubuntu下开发视频播放 FFmpeg

ubuntu 安装FFmpeg T113VideoDemo.pro #------------------------------------------------- # # Project created by QtCreator 2023-07-28T11:45:22 # #-------------------------------------------------QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widget…...

8.3一日总结

1.远程仓库的使用 a.克隆远程仓库 1>.在桌面克隆远程仓库 git clone 仓库名 2>.修改仓库内容 3>添加目录 git add. 4>提交: git commit -m 完成登录功能 5>推送提交远程仓库 : git push origin master -u 6>更改推送:git push(简写形式) 需要先添加,再提交,最…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...