【云原生kubernetes】k8s数据存储之Volume使用详解
目录
一、什么是Volume
二、k8s中的Volume
三、k8s中常见的Volume类型
四、Volume 之 EmptyDir
4.1 EmptyDir 特点
4.2 EmptyDir 实现文件共享
4.2.1 关于busybox
4.3 操作步骤
4.3.1 创建配置模板文件yaml
4.3.2 创建Pod
4.3.3 访问nginx使其产生访问日志
4.3.4 查看容器日志
五、Volume 之 hostPath
5.1 hostPath 概述
5.2 hostPath类型
5.3 hostPath 操作演示
5.3.1 创建模板配置文件
5.3.2 使用apply命令创建pod
5.3.3 访问nginx使其产生访问日志
5.3.4 查看容器输出日志
5.3.5 查看挂载目录日志文件
5.3.6 删除当前的pod
5.4 emptyDir和hostPath的对比
六、Volume 之 ConfigMap
6.1 ConfigMap需求场景
6.2 ConfigMap简介
6.3 ConfigMap 创建操作演示
6.3.1 使用命令行创建
6.3.2 查看创建的configmap
6.3.3 使用yaml配置文件创建
6.3.4 查看configmap详情
6.4 ConfigMap 使用操作演示
6.4.1 使用配置文件创建pod
6.4.2 验证configmap中配置的值
七、Volume 之 Secret
7.1 Secret 简介
7.2 secret 常见类型
7.2.1 dockerconfigjson
7.2.2 Service Account
7.3 Secret Opaque使用
7.3.1 创建模板配置文件
7.3.2 使用apply命令创建secret
7.3.3 查看my-secret详细信息
7.3.4 创建pod
7.3.5 查看secret信息
一、什么是Volume
通过之前学习了解到,k8s中Pod是最小的运行单元,Pod中运行的是一个个容器,但是容器的生命周期可能很短,被频繁地创建和销毁。
在学习docker的时候,创建一个容器,如果没有指定容器的数据卷,容器中的文件在磁盘上通常是临时存放的,这就给容器中运行的重要应用程序带来了一些问题 ,比如像下面的场景:
- 当容器崩溃时文件丢失,kubelet 会重新启动容器,但容器会以干净的状态重启,之前保存在容器中的数据也会被清除 ;
- 当在一个 Pod 中同时运行多个容器时,常常需要在这些容器之间共享文件 ;
基于这些问题,k8s中就出现了“卷”这个组件来解决
Kubernetes 卷(Volume) 这一抽象概念能够解决这两个问题,卷的核心是包含一些数据的目录,Pod 中的容器可以访问该目录
二、k8s中的Volume
关于k8s中卷的总结:
- Volume是k8s抽象出来的对象,它被定义在Pod上,然后被一个Pod里的多个容器挂载到具体的文件目录下 ;
- kubernetes通过Volume实现同一个Pod中不同容器之间的数据共享以及数据的持久化存储 ;
- Volume的生命周期不与Pod中单个容器的生命周期相关,当容器终止或者重启时,Volume中的数据也不会丢失;
- K8S可以支持许多类型的卷,Pod 也能同时使用任意数量的卷;
三、k8s中常见的Volume类型
k8s中提供了很多种类型的Volume,下面列举一些常用的类型:
- 常规存储:EmptyDir、HostPath ;
- 高级存储:PV、PVC ;
- 配置存储:ConfigMap、Secret ;
- 其他:网络存储系统 NFS、CIFS,包括云服务商提供的、本地、分布式 ;
接下来,针对日常业务中使用较多的Volume,通过实例一一演示下各自的使用。
四、Volume 之 EmptyDir
4.1 EmptyDir 特点
- 当 Pod 指定到某个节点上时,首先创建的是一个
emptyDir
卷,只要 Pod 在该节点上运行卷就一直存在 ; - 当 Pod 因为某些原因被从节点上删除时,
emptyDir
卷中的数据也会永久删除 ; - 容器崩溃并不会导致 Pod 被从节点上移除,所以容器崩溃时
emptyDir
卷中的数据是安全的;
使用场景:临时缓存空间,存储一些运行过程中的中继日志;
4.2 EmptyDir 实现文件共享
如图所示,我们的需求是,创建一个类型为EmptyDir的Volume,实现两个容器日志的共享;
4.2.1 关于busybox
1、是⼀个集成了三百多个最常⽤Linux命令和⼯具的软件;2、包含了简单的⼯具,例如ls、cat和echo等等,还包含了⼀些更复杂的⼯具,例grep、find、telnet等;
4.3 操作步骤
下面通过案例演示下使用的步骤
4.3.1 创建配置模板文件yaml
在当前目录下创建一个volume-emptydir.yaml 的文件,配置如下内容:
apiVersion: v1
kind: Pod
metadata:name: test-volume-emptydirnamespace: default
spec:containers:- name: test-nginximage: nginx:1.20ports:- containerPort: 80volumeMounts: # 将nginx-log-volume挂在到nginx容器中,对应的目录为 /var/log/nginx- name: test-log-volumemountPath: /var/log/nginx- name: test-busyboximage: busybox:1.35.0 command: ["/bin/sh","-c","tail -f /usr/local/test/access.log"] # 容器启动后初始命令,读取指定文件中内容volumeMounts: # 将nginx-log-volume挂在到busybox容器中,对应的目录为 /logs- name: test-log-volumemountPath: /usr/local/testvolumes: # 这里声明volume存储劵, name为nginx-log-volume,类型是emptyDir- name: test-log-volumeemptyDir: {}
配置中的关键位置如下:
4.3.2 创建Pod
使用apply命令执行pod的创建,创建成功后,可以看到在test-volume-emptydir 这个pod里面运行了2个容器;
4.3.3 访问nginx使其产生访问日志
随机访问一下,使nginx中产生部分日志
4.3.4 查看容器日志
使用下面的命令查看容器产生的access.log日志
kubectl logs -f test-volume-emptydir -n default -c test-busybox
五、Volume 之 hostPath
上面我们聊了EmptyDir的使用,相信实际操作之后的同学应该能看出来,由于EmptyDir创建的这个Volume是一个虚拟的路径,所以当其销毁后,pod中容器产生的数据也就随之销毁了,即无法真正实现数据的落盘持久化,于是我们在想,是否可以做到下面这样呢?
当然是可以的,这就是接下来要说的另一种Volume : hostPath;
5.1 hostPath 概述
- emptyDir中数据没做持久化,随着Pod的结束而销毁,需要持久化到磁盘则选其他方式 ;
- hostPath类型的磁盘就是挂在了主机的一个文件或者目录 ;
- 某些应用需要用到docker的内部文件,这时只需要挂在本机的/var/lib/docker作为hostPath ;
5.2 hostPath类型
根据使用场景的不同,又可以细分成多个类型
- Directory 给定的目录路径必须存在 ;
- DirectoryOrCreate 如果给定路径不存在,将根据需要在那里创建一个空目录 ;
- File 给定路径上必须存在对应文件 ;
- FileOrCreate 如果给定路径不存在,将根据需要在那里创建一个空文件 ;
5.3 hostPath 操作演示
5.3.1 创建模板配置文件
在当前目录下创建一个名叫volume-hostpath.yaml的配置文件,内容如下:
apiVersion: v1
kind: Pod
metadata:name: hostpath-volume-testnamespace: default
spec:containers:- name: test-nginximage: nginx:1.20ports:- containerPort: 80volumeMounts: # 将nginx-log-volume挂在到nginx容器中,对应的目录为 /var/log/nginx- name: test-log-volumemountPath: /var/log/nginx- name: test-busyboximage: busybox:1.35.0 command: ["/bin/sh","-c","tail -f /usr/local/test/access.log"] # 容器启动后初始命令,读取指定文件中内容volumeMounts: # 将nginx-log-volume挂在到busybox容器中,对应的目录为 /logs- name: test-log-volumemountPath: /usr/local/testvolumes: # 这里声明volume存储劵, name为test-log-volume,类型是hostPath- name: test-log-volumehostPath:path: /usr/local/testtype: DirectoryOrCreate #如果给定路径不存在,将根据需要在那里创建一个空目录
主要的配置和上面的emptyDir的案例中的差不多,最后的volumes类型那里改成hostPath相关的参数;
5.3.2 使用apply命令创建pod
创建成功后,可以看到产生了一个hostpath开头的一个Pod,里面包含两个容器;
5.3.3 访问nginx使其产生访问日志
5.3.4 查看容器输出日志
这这里注意使用你自己定义的那个名称
kubectl logs -f hostpath-volume-test -n default -c test-busybox
5.3.5 查看挂载目录日志文件
工作节点查看对应的挂载目录的日志文件,登录工作节点的服务器,可以看到对应的nginx日志文件也在里面了;
5.3.6 删除当前的pod
删除pod之后发现工作节点目录下的日志文件依然存在
5.4 emptyDir和hostPath的对比
通过上面的演示,最后来对比一下emptyDir和hostPath使用上的异同点:
- 两者都是本地存储卷方式 ;
- emptyDir是临时存储空间,完全不提供持久化支持;
- hostPath的卷数据是持久化在node节点的文件系统中的,即便pod已经被删除了,volume卷中的数据还留存在node节点上;
六、Volume 之 ConfigMap
6.1 ConfigMap需求场景
很多应用在其初始化或运行期间要依赖一些配置信息 ,并且在大多数时候, 存在要调整配置参数所设置的数值的需求,而ConfigMap是Kubernetes 用来向应用 Pod 中注入配置数据的一种方法 ;
6.2 ConfigMap简介
- 是K8S的一种API对象,用来把【非加密数据】保存到键值对中,比如etcd ;
- 可以用作环境变量、命令行参数等,将环境变量、配置信息和容器镜像解耦,便于应用配置的修改 ;
使用方式
kubectl create configmap 命令,基于目录、 文件或者键值对来创建 ConfigMap
如下示例:
kubectl create configmap NAME --from-literal=key1=value1 --from-literal=key2=value2
6.3 ConfigMap 创建操作演示
6.3.1 使用命令行创建
使用下面的命令进行ConfigMap的创建
kubectl create configmap test-config --from-literal=account=test --from-literal=password=123456
6.3.2 查看创建的configmap
kubectl get configmap test-config -o yaml
6.3.3 使用yaml配置文件创建
在当前目录下创建一个 test-configmap.yaml的文件,核心配置内容如下:
apiVersion: v1
kind: ConfigMap
metadata:name: congge-configmapnamespace: default
data:info: username:conggepassword:123456
使用apply命令执行创建
6.3.4 查看configmap详情
kubectl describe cm congge-configmap -n default
6.4 ConfigMap 使用操作演示
上面演示了两种创建configmap的方式,configmap创建出来后怎么使用呢?简单来说,只需要开启一个pod,将这个configmap挂载进去使用即可;
6.4.1 使用配置文件创建pod
注意,里面的Volume使用上文yaml中创建的那个configmap的名字:
apiVersion: v1
kind: Pod
metadata:name: pod-configmapnamespace: default
spec:containers:- name: nginximage: nginx:1.20volumeMounts: # configmap挂载的目录- name: configmountPath: /configvolumes: # 声明configmap- name: configconfigMap:name: congge-configmap
执行apply命令进行创建,然后检查下是否创建成功;
6.4.2 验证configmap中配置的值
进入pod容器
kubectl exec -it pod-configmap -n default -- /bin/sh
进入配置文件中的挂载目录 /config,查看配置信息
七、Volume 之 Secret
有些配置需要加密存储,ConfigMap只能使用明文保存,因此ConfigMap就不适合了;
7.1 Secret 简介
Secret 作用
- 用来保存敏感信息,例如密码、秘钥、证书、OAuth 令牌和 ssh key等 ;
- 就不需要把这些敏感数据暴露到镜像或者Pod中 ;
不管是哪种Volume,最终都是为Pod服务的,对于Pod来说,可以用三种方式之一来使用 Secret:
- 作为挂载到一个或多个容器上的卷 中的文件 ;
- 作为容器的环境变量 ;
- 由 kubelet 在为 Pod 拉取镜像时使用 ;
7.2 secret 常见类型
下面列举secret中常用的几种类型
7.2.1 dockerconfigjson
用来存储私有 docker registry的认证信息
7.2.2 Service Account
1、只要与Kubernetes API有交互的Pod,都会自动拥有此种类型的Secret;
2、K8S自动创建,并且会自动挂载到Pod的 /run/secrets/kubernetes.io/serviceaccount 目录中;
7.2.3 Opaque
加密类型为base64,其特点就是将明文改为了密文
7.3 Secret Opaque使用
下面以Secret中Opaque这种类型进行说明,首先用一个字符串做下测试,简单来说,就是将字符串进行base64编码,得到一串类似于密文的字符串;
7.3.1 创建模板配置文件
在当前目录下创建一个secret.yaml的配置文件,内容如下,其中,username和password用的就是上面测试中看到的:
apiVersion: v1
kind: Secret
metadata:name: my-secret
type: Opaque
data:username: YWRtaW4=password: MTIzNDU2
7.3.2 使用apply命令创建secret
创建成功后,可以顺便使用get查看下创建的secret;
7.3.3 查看my-secret详细信息
使用下面的命令进行查看
kubectl get secret my-secret -o yaml
7.3.4 创建pod
创建一个新的pod并使用上面这个secret,在当前目录下,创建一个名叫pod-secret-volume.yaml的配置文件,内容如下:
apiVersion: v1
kind: Pod
metadata:name: pod-secret
spec:containers:- name: nginximage: nginx:1.20volumeMounts: # secret挂载- name: congge-configmountPath: /etc/secretvolumes:- name: congge-configsecret:secretName: my-secret
使用apply命令执行并创建pod
7.3.5 查看secret信息
在pod中的secret信息实际已经被解密,使用下面的命令进入到pod
kubectl exec -it pod-secret -- /bin/sh
查看指定目录下secret中配置的username和password,可以看到,在pod中,加密的信息已被解密了;
相关文章:
【云原生kubernetes】k8s数据存储之Volume使用详解
目录 一、什么是Volume 二、k8s中的Volume 三、k8s中常见的Volume类型 四、Volume 之 EmptyDir 4.1 EmptyDir 特点 4.2 EmptyDir 实现文件共享 4.2.1 关于busybox 4.3 操作步骤 4.3.1 创建配置模板文件yaml 4.3.2 创建Pod 4.3.3 访问nginx使其产生访问日志 4.3.4 …...
SerDes---CDR技术
1、为什么需要CDR 时钟数据恢复主要完成两个工作,一个是时钟恢复,一个是数据重定时,也就是数据的恢复。时钟恢复主要是从接收到的 NRZ(非归零码)码中将嵌入在数据中的时钟信息提取出来。 2、CDR种类 PLL-Based CDROve…...
如何实现在on ethernetPacket中自动回复NDP response消息
对于IPv4协议来说,如果主机想通过目标ipv4地址发送以太网数据帧给目的主机,需要在数据链路层填充目的mac地址。根据目标ipv4地址查找目标mac地址,这是ARP协议的工作原理 对于IPv6协议来说,根据目标ipv6地址查找目标mac地址,它使用的不是ARP协议,而是邻居发现NDP(Neighb…...
CSS清楚浮动
先看看关于浮动的一些性质 浮动使元素脱离文档流 浮动元素可以设置宽高,在CSS中,任何元素都可以浮动,浮动元素会生成一个块级框,而不论其本身是何种元素。 如果没有给浮动元素指定高度,,那么它会以内容的…...
HTTPS详解(原理、中间人攻击、CA流程)
摘要我们访问浏览器也经常可以看到https开头的网址,那么什么是https,什么是ca证书,认证流程怎样?这里一一介绍。原理https就是httpssl,即用http协议传输数据,数据用ssl/tls协议加密解密。具体流程如下图&am…...
EventLoop机制
JavaScript 是单线程的语言 JavaScript 是一门单线程执行的编程语言。也就是说,同一时间只能做一件事情。 单线程执行任务队列的问题: 如果前一个任务非常耗时,则后续的任务就不得不一直等待,从而导致程序假死的问题。 同步任…...
倒立摆建模
前言 系统由一辆具有动力的小车和安装在小车上的倒立摆组成,系统是不稳定,我们需要通过控制移动小车使得倒立摆保持平衡。 具体地,考虑二维情形如下图,控制力为水平力FFF,输出为角度θ\thetaθ以及小车的位置xxx。 力…...
SpringSecurity支持WebAuthn认证
WebAuthn是无密码身份验证技术,解决了密码泄露的风险,主流的浏览器都支持。有很多开源的类库实现了WebAuthn规范,Java下流行的类库有:webauthn4jjava-webauthn-serververtx-authSpring Security官方暂时未支持WebAuthn,…...
深度学习技巧应用3-神经网络中的超参数搜索
大家好,我是微学AI,今天给大家带来深度学习技巧应用3-神经网络中的超参数搜索。 在深度学习任务中,一个算法模型的性能往往受到很多超参数的影响。超参数是指在模型训练之前需要我们手动设定的参数,例如:学习率、正则…...
【信号量机制及应用】
水善利万物而不争,处众人之所恶,故几于道💦 目录 一、信号量机制 二、信号量的应用 >利用信号量实现进程互斥 >利用信号量实现前驱关系 >利用记录型信号量实现同步 三、例题 四、参考 一、信号量机制 信号量是操作系统提…...
围棋高手郭广昌的“假眼”棋局
(图片来源于网络,侵删)文丨熔财经作者|易不二2022年,在复星深陷债务压顶和变卖资产漩涡的而立之年,“消失”已久的郭广昌,在质疑与非议声中回国稳定军心,强调复星将在未来的五到十年迎来一个全新…...
学成教育-统一异常处理实现
一、统一异常处理实现 统一在base基础工程实现统一异常处理,各模块依赖了base基础工程都 可以使用。 首先在base基础工程添加需要依赖的包: <dependency><groupId>org.springframework</groupId><artifactId>spring-web</…...
JNI内通过参数形式从C/C++中传递string类型数据至Java层
目录 0 前言 1 string类型参数形式传值 2 测试和结果 0 前言 类似之前我写过的两篇文章:一篇介绍了在JNI中基础类型int的传值方式;一篇详细梳理了在JNI层中多维数组的多种传值方式。 JNI内两种方式从C/C中传递一维、二维、三维数组数据至Java层详细…...
自动化测试——执行javaScript脚本
文章目录一、点击元素(对应的click())二、input标签对应的值(对应的send_keys())修改时间控件的属性值:三、元素的文本属性四、js脚本滚动操作一、点击元素(对应的click()) 使用场景:当使用显性等待不能解决问题时 代码中实现点击…...
常用十种算法滤波
十种算法滤波1. 限幅滤波法(又称程序判断滤波法)2. 中位值滤波法3. 算术平均滤波法4. 递推平均滤波法(又称滑动平均滤波法)5. 中位值平均滤波法(又称防脉冲干扰平均滤波法)6. 限幅平均滤波法7. 一阶滞后滤波…...
IO多路复用
一、概述 IO多路复用:进程同时检查多个文件描述符,以找出他们中的任何一个是否可执行IO操作。 核心:同时检查多个文件描述符,看他们是否准备好了执行IO操作。文件描述符就绪状态的转化是通过一些IO事件来触发。 二、水平触发和…...
Python中的错误是什么,Python中有哪些错误
7.1 错误(errors) 由于Python代码通常是人类编写的,那么无论代码是在解释之前还是运行之后,或多或少总会出现一些问题。 在Python代码解释时遇到的问题称为错误,通常是语法和缩进问题导致的,这些错误会导致代码无法通过解释器的解…...
记录自己开发一款小程序中所遇到的问题(uniapp+uview)(持续更新)
每次开发小程序中,都会遇到各种各样的问题。但是有的问题已经遇到过了,但是遇到的时候还是要各种的问度娘。 特此出这篇文章,方便自己也是方便大家。 仅供参考 1. u-collapse的样式在h5中正常,但是运行到微信小程序中样式就乱了…...
华为机试 HJ43 迷宫问题
经典迷宫问题dfs 题目链接 描述 定义一个二维数组 N*M ,如 5 5 数组下所示: int maze[5][5] { 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁,0表示可以走…...
数据结构|链表
概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。单链表的形式就像一条铁链环环相扣它与顺序表最大的不同是,单链表的数据存储是在不连续的空间,存储的数据里面含有…...
计算机写论文时,怎么引用文献? - 易智编译EaseEditing
首先需要清楚哪些引用必须注明[1]: 任何直接引用都要用引号并注明来源; 任何不是自己的口头或书面的观点、解释和结论都应注明来源; 即使不用原话,但是他人的思路、概念或观点也应注明; 不要为了适合你的观点修改原…...
实验三:贪心
1.减肥的小k1 题目描述 小K没事干,他要搬砖头,为了达到较好的减肥效果,教练规定的方式很特别: 每一次,小K可以把两堆砖头合并到一起,消耗的体力等于两堆砖头的重量之和。 经过 n-1次合并后, …...
MySQL日志文件
文章目录1.MySQL中的日志文件2.bin log的作用3.redo log的作用4.bin log和redo log的区别(1)存储的内容(2)功能(3)写入时间(4)写入方式5.两阶段提交6.undo log的作用1.MySQL中的日志…...
Intel8086处理器使用NASM汇编语言实现操作系统08-关于负数的相关处理idiv/cbw/cwde/cdqu/cwd/cdq/cdo/
很多人都知道一个有符号的数,最高位是1,则表示负数,最高位是0,则表示正数,如果假设我的CPU是4位CPU,那么对于1001这个数,是表示9,还是表示-7呢???…...
JavaScript 混淆技术
根据JShaman(JShaman是专业的JavaScript代码混淆加密网站)提供的消息,JavaScript混淆技术大体有以下几种: 变量混淆 将带有JS代码的变量名、方法名、常量名随机变为无意义的类乱码字符串,降低代码可读性,如…...
安装库报错:No CUDA runtime is found, using CUDA_HOME=‘/usr/local/cuda-11.3‘
1、报错内容 安装库时报错: No CUDA runtime is found, using CUDA_HOME/usr/local/cuda-11.32、检查 查看cuda版本和pytorch版本 python 进入python环境 import torch torch.__version__ torch.cuda.is_available()nvidia-smi 因此发现是由于该虚拟环境中CUDA与…...
CVTE前端面经(2023)
CVTE前端面经项目介绍(重点)在数据B中找到数组A对应的值,并把数组B对应的值放在数据最前面css1 定位2 外边距3 css高级应用3.1. 过渡3.2. 变形2. 浮动2.1 浮动元素特点2. 2 清除浮动3. html5语义标签4. 实现圣杯布局的两种方式4.1 定位浮动4.…...
基于EB工具的TC3xx_MCAL配置开发02_ICU模块配置
目录 1.概述2. ICU 硬件通道属性确认3. ICU通道配置3.1 添加一个Chanel3.2 IcuChannel->General配置3.3 IcuSignalMeasurement配置3.4 GtmTimerInputConfiguration配置3.5 MCU中的关联配置3.5.1 分配TIM资源给ICU使用3.5.2 设置TIM通道时钟分频系数1.概述 本篇开始我们基于…...
jmeter高阶系列--beanshell返回值中提取参数
1 准备环境 jmeter版本: ** ,JDK:1.8将json.jar包置于…\apache-jmeter-5.1\lib\下;否则会报:Typed variable declaration : Class: JSONObject not found in namespace的错误;处理器:Beanshel…...
面向对象
面向对象面向对象一、什么是对象二、什么是面向对象三、对象四、什么是类五、实例变量六、实例方法七、方法重载(overload)八、构造方法九、对象的创建过程十、构造方法重载十一、this关键字面向对象 一、什么是对象 万物皆对象。 二、什么是面向对象 面向对象是一种编程思想。…...
展示型网站设计/网络营销组合策略
2019独角兽企业重金招聘Python工程师标准>>> 尝试了很长时间,也试过很多办法,比如在之前使用的ubuntu中,我使用chmod -R 777 /var/www/* 为这个目录下面的所有文件赋777权限,我在fedora 15试了一下,完全不行…...
市场来说网站建设销售发展怎么样/seo门户网站优化
我们先来看一下,通常一个标准的钱包应用是什么组成。钱包之于区块链应用程序来说,是一个前端工具,其作用主要是提供给用户一个交互操作的应用,以便于用户可以通过钱包来进行密钥管理、转账交易、余额查询、 合约部署等一系列操作。…...
用asp做网站流程/重庆森林台词
今年的面试主要是技术面试 1、项目是怎么做的 常规问题 --略 2、判断项目的可以上线的标准是什么? ①与需求一致,符合客户的要求 ②用例执行完成 ③bug和研发、产品这边确定必须改的改完 ④进行release版本回归无bug 3、给你一个登陆功能࿰…...
双语 网站 数据怎么做/vue seo 优化方案
写成宏,方便移植#define setbit(x,y) x|(1<//将X的第Y位置1#define clrbit(x,y) x&~(1<方法二:C语言位运算除了可以提高运算效率外,在嵌入式系统的编程中,它的另一个最典型的应用,而且十分广泛地正在被使用着的是位间的…...
沈阳做网站客户多吗/网址收录入口
defaultExpandAll:autoExpandParent"true":treeData"treeData"select"this.onSelect"/>data () {return {// expandedKeys: [0-0-0, 0-0-1], // 受控展开指定的树节点autoExpandParent: true, // 是否自动展开父节点// checkedKeys: [0-0-0],…...
网站建设外包行业/企业推广是什么职业
XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入当中Web里面的html代码会被运行,从而达到恶意攻击用户的特殊目的。 from:http://www.incapsula.com/blog/world-largest-site…...