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

【云原生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、包含了简单的⼯具,例如lscatecho等等,还包含了⼀些更复杂的⼯具,例grepfindtelnet等;

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&#xff0c…...

深度学习技巧应用3-神经网络中的超参数搜索

大家好,我是微学AI,今天给大家带来深度学习技巧应用3-神经网络中的超参数搜索。 在深度学习任务中,一个算法模型的性能往往受到很多超参数的影响。超参数是指在模型训练之前需要我们手动设定的参数,例如:学习率、正则…...

【信号量机制及应用】

水善利万物而不争,处众人之所恶,故几于道💦 目录 一、信号量机制 二、信号量的应用 >利用信号量实现进程互斥   >利用信号量实现前驱关系   >利用记录型信号量实现同步 三、例题 四、参考 一、信号量机制 信号量是操作系统提…...

围棋高手郭广昌的“假眼”棋局

(图片来源于网络,侵删)文丨熔财经作者|易不二2022年,在复星深陷债务压顶和变卖资产漩涡的而立之年,“消失”已久的郭广昌,在质疑与非议声中回国稳定军心,强调复星将在未来的五到十年迎来一个全新…...

学成教育-统一异常处理实现

一、统一异常处理实现 统一在base基础工程实现统一异常处理&#xff0c;各模块依赖了base基础工程都 可以使用。 首先在base基础工程添加需要依赖的包&#xff1a; <dependency><groupId>org.springframework</groupId><artifactId>spring-web</…...

JNI内通过参数形式从C/C++中传递string类型数据至Java层

目录 0 前言 1 string类型参数形式传值 2 测试和结果 0 前言 类似之前我写过的两篇文章&#xff1a;一篇介绍了在JNI中基础类型int的传值方式&#xff1b;一篇详细梳理了在JNI层中多维数组的多种传值方式。 JNI内两种方式从C/C中传递一维、二维、三维数组数据至Java层详细…...

自动化测试——执行javaScript脚本

文章目录一、点击元素(对应的click())二、input标签对应的值&#xff08;对应的send_keys()&#xff09;修改时间控件的属性值&#xff1a;三、元素的文本属性四、js脚本滚动操作一、点击元素(对应的click()) 使用场景&#xff1a;当使用显性等待不能解决问题时 代码中实现点击…...

常用十种算法滤波

十种算法滤波1. 限幅滤波法&#xff08;又称程序判断滤波法&#xff09;2. 中位值滤波法3. 算术平均滤波法4. 递推平均滤波法&#xff08;又称滑动平均滤波法&#xff09;5. 中位值平均滤波法&#xff08;又称防脉冲干扰平均滤波法&#xff09;6. 限幅平均滤波法7. 一阶滞后滤波…...

IO多路复用

一、概述 IO多路复用&#xff1a;进程同时检查多个文件描述符&#xff0c;以找出他们中的任何一个是否可执行IO操作。 核心&#xff1a;同时检查多个文件描述符&#xff0c;看他们是否准备好了执行IO操作。文件描述符就绪状态的转化是通过一些IO事件来触发。 二、水平触发和…...

Python中的错误是什么,Python中有哪些错误

7.1 错误(errors) 由于Python代码通常是人类编写的&#xff0c;那么无论代码是在解释之前还是运行之后&#xff0c;或多或少总会出现一些问题。 在Python代码解释时遇到的问题称为错误&#xff0c;通常是语法和缩进问题导致的&#xff0c;这些错误会导致代码无法通过解释器的解…...

记录自己开发一款小程序中所遇到的问题(uniapp+uview)(持续更新)

每次开发小程序中&#xff0c;都会遇到各种各样的问题。但是有的问题已经遇到过了&#xff0c;但是遇到的时候还是要各种的问度娘。 特此出这篇文章&#xff0c;方便自己也是方便大家。 仅供参考 1. u-collapse的样式在h5中正常&#xff0c;但是运行到微信小程序中样式就乱了…...

华为机试 HJ43 迷宫问题

经典迷宫问题dfs 题目链接 描述 定义一个二维数组 N*M &#xff0c;如 5 5 数组下所示&#xff1a; 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, }; 它表示一个迷宫&#xff0c;其中的1表示墙壁&#xff0c;0表示可以走…...

数据结构|链表

概念&#xff1a;链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。单链表的形式就像一条铁链环环相扣它与顺序表最大的不同是&#xff0c;单链表的数据存储是在不连续的空间&#xff0c;存储的数据里面含有…...

计算机写论文时,怎么引用文献? - 易智编译EaseEditing

首先需要清楚哪些引用必须注明[1]&#xff1a; 任何直接引用都要用引号并注明来源&#xff1b; 任何不是自己的口头或书面的观点、解释和结论都应注明来源&#xff1b; 即使不用原话&#xff0c;但是他人的思路、概念或观点也应注明&#xff1b; 不要为了适合你的观点修改原…...

实验三:贪心

1.减肥的小k1 题目描述 小K没事干&#xff0c;他要搬砖头&#xff0c;为了达到较好的减肥效果&#xff0c;教练规定的方式很特别&#xff1a; 每一次&#xff0c;小K可以把两堆砖头合并到一起&#xff0c;消耗的体力等于两堆砖头的重量之和。 经过 n-1次合并后&#xff0c; …...

MySQL日志文件

文章目录1.MySQL中的日志文件2.bin log的作用3.redo log的作用4.bin log和redo log的区别&#xff08;1&#xff09;存储的内容&#xff08;2&#xff09;功能&#xff08;3&#xff09;写入时间&#xff08;4&#xff09;写入方式5.两阶段提交6.undo log的作用1.MySQL中的日志…...

Intel8086处理器使用NASM汇编语言实现操作系统08-关于负数的相关处理idiv/cbw/cwde/cdqu/cwd/cdq/cdo/

很多人都知道一个有符号的数&#xff0c;最高位是1&#xff0c;则表示负数&#xff0c;最高位是0&#xff0c;则表示正数&#xff0c;如果假设我的CPU是4位CPU&#xff0c;那么对于1001这个数&#xff0c;是表示9&#xff0c;还是表示-7呢&#xff1f;&#xff1f;&#xff1f;…...

JavaScript 混淆技术

根据JShaman&#xff08;JShaman是专业的JavaScript代码混淆加密网站&#xff09;提供的消息&#xff0c;JavaScript混淆技术大体有以下几种&#xff1a; 变量混淆 将带有JS代码的变量名、方法名、常量名随机变为无意义的类乱码字符串&#xff0c;降低代码可读性&#xff0c;如…...

安装库报错:No CUDA runtime is found, using CUDA_HOME=‘/usr/local/cuda-11.3‘

1、报错内容 安装库时报错&#xff1a; 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前端面经项目介绍&#xff08;重点&#xff09;在数据B中找到数组A对应的值&#xff0c;并把数组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版本&#xff1a; ** &#xff0c;JDK&#xff1a;1.8将json.jar包置于…\apache-jmeter-5.1\lib\下&#xff1b;否则会报&#xff1a;Typed variable declaration : Class: JSONObject not found in namespace的错误&#xff1b;处理器&#xff1a;Beanshel…...

面向对象

面向对象面向对象一、什么是对象二、什么是面向对象三、对象四、什么是类五、实例变量六、实例方法七、方法重载(overload)八、构造方法九、对象的创建过程十、构造方法重载十一、this关键字面向对象 一、什么是对象 万物皆对象。 二、什么是面向对象 面向对象是一种编程思想。…...

展示型网站设计/网络营销组合策略

2019独角兽企业重金招聘Python工程师标准>>> 尝试了很长时间&#xff0c;也试过很多办法&#xff0c;比如在之前使用的ubuntu中&#xff0c;我使用chmod -R 777 /var/www/* 为这个目录下面的所有文件赋777权限&#xff0c;我在fedora 15试了一下&#xff0c;完全不行…...

市场来说网站建设销售发展怎么样/seo门户网站优化

我们先来看一下&#xff0c;通常一个标准的钱包应用是什么组成。钱包之于区块链应用程序来说&#xff0c;是一个前端工具&#xff0c;其作用主要是提供给用户一个交互操作的应用&#xff0c;以便于用户可以通过钱包来进行密钥管理、转账交易、余额查询、 合约部署等一系列操作。…...

用asp做网站流程/重庆森林台词

今年的面试主要是技术面试 1、项目是怎么做的 常规问题 --略 2、判断项目的可以上线的标准是什么&#xff1f; ①与需求一致&#xff0c;符合客户的要求 ②用例执行完成 ③bug和研发、产品这边确定必须改的改完 ④进行release版本回归无bug 3、给你一个登陆功能&#xff0…...

双语 网站 数据怎么做/vue seo 优化方案

写成宏&#xff0c;方便移植#define setbit(x,y) x|(1<//将X的第Y位置1#define clrbit(x,y) x&~(1<方法二:C语言位运算除了可以提高运算效率外&#xff0c;在嵌入式系统的编程中&#xff0c;它的另一个最典型的应用&#xff0c;而且十分广泛地正在被使用着的是位间的…...

沈阳做网站客户多吗/网址收录入口

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代码&#xff0c;当用户浏览该页之时&#xff0c;嵌入当中Web里面的html代码会被运行&#xff0c;从而达到恶意攻击用户的特殊目的。 from:http://www.incapsula.com/blog/world-largest-site…...