飞天使-k8s基础组件分析-服务与ingress
文章目录
- 服务的介绍
- 服务代理
- 服务发现
- 连接集群外服务
- 服务发布
- 无头服务
- 服务,pod和dns的关系
- 端口转发
- 通过expose 暴露应用
- 服务案例
- INGRESS
- MetalLB使用
- 参考文档
服务的介绍
服务的作用是啥?
提供外部调用,保证podip的真实性看看服务解决了什么问题?
[root@k8s-01 chapter05]# cat web-rs.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:name: web
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx[root@k8s-01 chapter05]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-97499b967-jzxwg 1/1 Running 0 35h 10.244.1.2 k8s-02 <none> <none>
web-dgn64 1/1 Running 0 76s 10.244.1.54 k8s-02 <none> <none>
web-x4kkz 1/1 Running 0 76s 10.244.1.52 k8s-02 <none> <none>
web-xx2md 1/1 Running 0 76s 10.244.1.53 k8s-02 <none> <none>rs控制数量为3,如果这3个换了呢,这些ip地址如何让客户端知道呢? pod 和服务之间的关系,依旧是标签来控制[root@k8s-01 chapter05]# cat web-svc.yaml
apiVersion: v1
kind: Service
metadata:name: my-service
spec:ports:- port: 80targetPort: 80selector:app: nginx[root@k8s-01 chapter05]# kubectl apply -f web-svc.yaml
service/my-service created
[root@k8s-01 chapter05]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 35h
my-service ClusterIP 10.107.106.26 <none> 80/TCP 5s
nginx NodePort 10.104.210.165 <none> 80:30001/TCP 35h上面是创建了服务,服务创建之后,有一个ip
查看集群分配给服务的Ip
# kubectl get svc#访问刚才创建的服务三种方式
创建一个Pod,访问服务的Ip
在k8s的任何一个节点访问
使用任何一个现有服务所属任何pod访问
下面图片有它的处理过程查看服务和后面pod的ip地址信息
[root@k8s-01 chapter05]# kubectl describe svc my-service
Name: my-service
Namespace: default
Labels: <none>
Annotations: Selector: app=nginx
Type: ClusterIP
IP: 10.107.106.26
Port: <unset> 80/TCP
TargetPort: 80/TCP
Endpoints: 10.244.1.2:80,10.244.1.52:80,10.244.1.53:80 + 1 more...
Session Affinity: None
Events: <none>#此处如果删除一个pod,查看service中的podip 也会随着变化实验一: 配置 sessionAffinity: ClientIP
[root@k8s-01 chapter05]# cat web-svc.yaml
apiVersion: v1
kind: Service
metadata:name: my-service
spec:sessionAffinity: ClientIPports:- port: 80targetPort: 80selector:app: nginx[root@k8s-01 chapter05]# kubectl delete svc/my-service
service "my-service" deleted
[root@k8s-01 chapter05]# kubectl apply -f web-svc.yaml
service/my-service created
[root@k8s-01 chapter05]# kubectl describe svc my-service
Name: my-service
Namespace: default
Labels: <none>
Annotations: Selector: app=nginx
Type: ClusterIP
IP: 10.104.130.27
Port: <unset> 80/TCP
TargetPort: 80/TCP
Endpoints: 10.244.1.2:80,10.244.1.52:80,10.244.1.53:80 + 1 more...
Session Affinity: ClientIP
Events: <none>实验二:设置自定义的服务ip
[root@k8s-01 chapter05]# vim web-svc.yaml
[root@k8s-01 chapter05]# kubectl apply -f web-svc.yaml
service/my-service created
[root@k8s-01 chapter05]# kubectl describe svc web-service
Error from server (NotFound): services "web-service" not found
[root@k8s-01 chapter05]# cat web-svc.yaml
apiVersion: v1
kind: Service
metadata:name: my-service
spec:clusterIP: 10.104.130.24sessionAffinity: ClientIPports:- port: 80targetPort: 80selector:app: nginx
[root@k8s-01 chapter05]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-97499b967-jzxwg 1/1 Running 0 35h
web-tsxck 1/1 Running 0 34m
web-x4kkz 1/1 Running 0 50m
web-xx2md 1/1 Running 0 50m
[root@k8s-01 chapter05]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 36h
my-service ClusterIP 10.104.130.24 <none> 80/TCP 33s
nginx NodePort 10.104.210.165 <none> 80:30001/TCP 35h实验三: 创建没有选择器的服务
服务通常抽象访问Kubernetes pods,但是它也可以抽象访问其它类型的后端,比如:
比如使用外部的数据库集群
指向服务到不同的命名空间或其它kubernetes集群的服务在上面任何一种情况下,都可以定义一个没有Pod选择器的服务,比如:
由于上面定义的服务没有选择器,对应的Endpoint对象也不会自动创建,因此需要手工的创建Endpoint.kind: Endpoints
服务代理
Userspace
Iptables
Ipvs
以上三种模式,ipvs用的多
服务发现
查看某个pod的 环境变量
kubectl exec web-tsxck env生产环境中要先创建服务在创建pod,否则pod里面的环境变量没有服务的变量服务发现通过两种方式,1.环境变量 2. DNSDNS的服务方式
一个完整的FQDN如下所示:
Backend-database.default.svc.cluster.local进入到容器里面,
kubectl exec -it web-sfe1d -- bash
curl http://my-service
curl http://my-service.default.svc.cluster.local
cat /etc/resolv.conf
连接集群外服务
一般是数据库,云数据库信息查看服务的endpoints[root@k8s-01 chapter05]# kubectl get endpoints
NAME ENDPOINTS AGE
kubernetes 192.168.100.30:6443 37h
my-service 10.244.1.2:80,10.244.1.52:80,10.244.1.53:80 + 1 more... 80m
nginx 10.244.1.2:80,10.244.1.52:80,10.244.1.53:80 + 1 more... 37h查看apiversion版本[root@k8s-01 chapter05]# kubectl explain endpoints.apiVersion
KIND: Endpoints
VERSION: v1FIELD: apiVersion <string>DESCRIPTION: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#resources[root@k8s-01 chapter05]# cat external-service.yaml
apiVersion: v1
kind: Service
metadata:name: external-service
spec:ports:- port: 80[root@k8s-01 chapter05]# cat external-endpoints.yaml
apiVersion: v1
kind: Endpoints
metadata:name: external-service
subsets:- addresses:- ip: 192.168.100.31ports:- port: 30001
[root@k8s-01 chapter05]# cat external-endpoints-alias.yaml
apiVersion: v1
kind: Service
metadata:name: external-service
spec:type: ExternalNameexternalName: feitianshi.cc.ccports:- port: 30001注意:此部分实验未成功,各位可以自己参考配置文件[root@k8s-01 chapter05]# kubectl describe svc external-service
Name: external-service
Namespace: default
Labels: <none>
Annotations: Selector: <none>
Type: ClusterIP
IP: 10.105.6.128
Port: <unset> 80/TCP
TargetPort: 80/TCP
Endpoints: 192.168.100.31:30001
Session Affinity: None
Events: <none>
服务发布
发布服务的类型如下
ClusterIP 内部访问
NodePort 外部访问
LoadBalancer 外部访问
ExternalName 内部访问案例
NodePort:
创建服务
kubectl create –f web-svc-nodeport.yaml检查NodePort服务
kubectl get svc web-nodeport[root@k8s-01 chapter05]# cat web-svc-nodeport.yaml
apiVersion: v1
kind: Service
metadata:name: web-nodeport
spec:type: NodePortports:- port: 80targetPort: 80nodePort: 30123selector:app: nginx[root@k8s-01 chapter05]# kubectl create -f web-svc-nodeport.yaml
service/web-nodeport created
[root@k8s-01 chapter05]# kubectl get svc web-nodeport
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
web-nodeport NodePort 10.105.18.188 <none> 80:30123/TCP 8s
[root@k8s-01 chapter05]# curl 10.105.18.188
<!DOCTYPE html>[root@k8s-01 chapter05]# cat web-svc-loadbalancer.yaml
apiVersion: v1
kind: Service
metadata:name: web-loadbalancer
spec:type: LoadBalancerports:- port: 80targetPort: 80selector:app: nginx[root@k8s-01 chapter05]# cat service-external-ip.yaml
apiVersion: v1
kind: Service
metadata:name: my-service
spec:selector:app: nginxports:- name: httpprotocol: TCPport: 80targetPort: 80externalIPs:- 192.168.100.199
无头服务
无头服务:没有clusterIp字段的服务就是无头服务。
有些服务需要直接连接后端的pod 案例:
- 创建无头服务
# kubectl create –f web-headless.yaml[root@k8s-01 chapter05]# cat web-headless.yaml
apiVersion: v1
kind: Service
metadata:name: web-headless
spec:clusterIP: Noneports:- port: 80targetPort: 80selector:app: nginx- 查看创建的服务
# kubectl get svc
# kubectl describe svc web-headless通过dns发现pods
# kubectl run dnsutils --image=tutum/dnsutils --generator=run-pod/v1 --command -- sleep infinity
# kubectl exec dnsutils nslookup web-headless[root@k8s-01 chapter05]# kubectl exec dnsutils nslookup web-headless
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl kubectl exec [POD] -- [COMMAND] instead.
Server: 10.96.0.10
Address: 10.96.0.10#53Name: web-headless.default.svc.cluster.local
Address: 10.244.1.61
Name: web-headless.default.svc.cluster.local
Address: 10.244.1.60
Name: web-headless.default.svc.cluster.local
Address: 10.244.1.2
Name: web-headless.default.svc.cluster.local
Address: 10.244.1.59[root@k8s-01 chapter05]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 40h
my-service ClusterIP 10.104.130.24 <none> 80/TCP 2s
nginx NodePort 10.104.210.165 <none> 80:30001/TCP 39h
web-headless ClusterIP None <none> 80/TCP 8m50s
[root@k8s-01 chapter05]# kubectl exec dnsutils nslookup my-service
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl kubectl exec [POD] -- [COMMAND] instead.
Server: 10.96.0.10
Address: 10.96.0.10#53Name: my-service.default.svc.cluster.local
Address: 10.104.130.24无头服务比有头服务更快些,注意区分
服务,pod和dns的关系
什么东西可以获取DNS的名称?
集群中定义的每个服务都会被分配一个DNS名称。默认情况下,客户机pod的dns搜索列表包括Pod自己的名称空间和集群的默认域。假设k8s集群bar的名称空间中有一个名为foo的服务,在该名称空间运行的pod可以直接对foo执行dns查询来查找此服务。在别的名称空间中执行foo.bar进行查询。服务
A记录
普通服务分配一个DNS A记录作为表单的名称my-svc.my-namespace.svc.cluster-domain.example,这将解析到服务的集群IP。
无头服务也分配一个DNS记录,针对my-svg.my-namespace.svg.cluster-domain.example表单的名称。与普通服务不同,这将解析为服务选择的pod的ip集。SRV记录
SRV记录是作为普通服务或无头服务一部分的指定端口创建的。每于每个指定端口,SRV记录都有相应的形式_my-port-name._my-port-protocol.my-svc.my-namespace.svc.cluster-domain.example。对于无头服务,这解析为多个答案,每个答案对应一个支持的pod,并包含pod的端口号和域名。
Auto-generated-name.my-svcc.my-namespace.svc.cluster-domain.examplePods
pods的主机名和子域名字段
比如在名称空间my-namespace中将主机名设置为“foo”,子域设置为“bar”的pod将具有完全限定的域为:foo.bar.my-namespace.svc.cluster-domain.examplePods dns策略有以下4种:
Default
ClusterFirst
ClusterFirstWithHostNet
NonePod dns配置
属性有以下三个:
Nameservers
Searchs
options
端口转发
对于排错比较方便
创建redis的部署和应用
创建deployment资源
# kubectl create –f redis-master-deployment.yaml查看部署状态
# kubectl get pods查看replicaset状态
# kubectl get rs创建服务
# kubectl create –f redis-master-service.yaml查看服务
# kubectl get svc | grep redis校验运行在pod中的redis server是否侦听在6379端口
# kubectl get pods redis-master-7db7f6579f-zd27q –template=‘{{(index(index.spec.containers 0).ports 0).containerPort}}{{“\n”}}’执行端口转发
# kubectl port-forward redis-master-7db7f6579f-zd27q 7000:6379客户端进行测试
# redis-cli –p 7000[root@k8s-01 chapter05]# cat redis-master-deployment.yaml
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:name: redis-masterlabels:app: redis
spec:selector:matchLabels:app: redisrole: mastertier: backendreplicas: 1template:metadata:labels:app: redisrole: mastertier: backendspec:containers:- name: masterimage: redis # or just image: redisresources:requests:cpu: 100mmemory: 100Miports:- containerPort: 6379[root@k8s-01 chapter05]# cat redis-master-service.yaml
apiVersion: v1
kind: Service
metadata:name: redis-masterlabels:app: redisrole: mastertier: backend
spec:ports:- port: 6379targetPort: 6379selector:app: redisrole: mastertier: backend
通过expose 暴露应用
创建资源
# kubectl create –f hello-application.yaml查看关于部署的信息
# kubectl get deployment hello-world
# kubectl describe deployments hello-world
# kubectl get replicasets
# kubectl describe replicasets暴露刚才的部署
# kubectl expose deployment hello-world --type=NodePort --name=example-service显示关于服务的信息
# kubectl describe services example-service列出在Hello World应用运行的Pods
# kubectl get pods –selector=“run=load-balancer-example” --output=wide使用下面的方法进行测试
# curl http://<public-node-ip>:<node-port>[root@k8s-01 chapter05]# cat hello-application.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: hello-world
spec:selector:matchLabels:run: load-balancer-examplereplicas: 2template:metadata:labels:run: load-balancer-examplespec:containers:- name: hello-worldimage: "mike0405/node-hello:1.0"ports:- containerPort: 8080protocol: TCP[root@k8s-01 chapter05]# cat hello-service.yaml
apiVersion: v1
kind: Service
metadata:name: hello
spec:selector:app: hellotier: backendports:- protocol: TCPport: 80targetPort: http
服务案例
创建后端的部署
# kubectl create –f hello.yaml创建后端的服务
# kubectl create –f hello-service.yaml创建前端的部署和服务
# kubectl create –f fronted.yaml测试前端和后端的交互
# curl http://${EXTERNAL_IP}[root@k8s-01 chapter05]# curl 192.168.100.31:32746
{"message":"Hello"}
[root@k8s-01 chapter05]# curl 192.168.100.31:32746
{"message":"Hello"}
[root@k8s-01 chapter05]# cat frontend.yaml
apiVersion: v1
kind: Service
metadata:name: frontend
spec:selector:app: hellotier: frontendports:- protocol: "TCP"port: 80targetPort: 80type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:name: frontend
spec:selector:matchLabels:app: hellotier: frontendtrack: stablereplicas: 1template:metadata:labels:app: hellotier: frontendtrack: stablespec:containers:- name: nginximage: "mike0405/hello-frontend:1.0"lifecycle:preStop:exec:command: ["/usr/sbin/nginx","-s","quit"][root@k8s-01 chapter05]#
[root@k8s-01 chapter05]# cat hello.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: hello
spec:selector:matchLabels:app: hellotier: backendtrack: stablereplicas: 7template:metadata:labels:app: hellotier: backendtrack: stablespec:containers:- name: helloimage: "mike0405/hello-go-gke:1.0"ports:- name: httpcontainerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: hello
spec:selector:app: hellotier: backendports:- protocol: "TCP"port: 80targetPort: 80[root@k8s-01 chapter05]# kubectl get pod
NAME READY STATUS RESTARTS AGE
dnsutils 1/1 Running 0 129m
frontend-76c7d58dc5-l5kcz 1/1 Running 0 5m30s
hello-84ccf7cd9d-97htk 1/1 Running 0 7m2s
hello-84ccf7cd9d-9sl6v 1/1 Running 0 7m2s
hello-84ccf7cd9d-9tg8f 1/1 Running 0 7m2s
hello-84ccf7cd9d-bps5g 1/1 Running 0 7m2s
hello-84ccf7cd9d-lh446 1/1 Running 0 7m2s
hello-84ccf7cd9d-tl2gx 1/1 Running 0 7m2s
hello-84ccf7cd9d-w2hjz 1/1 Running 0 7m2s
hello-world-7457d6ddb5-g2fcf 1/1 Running 0 37m
hello-world-7457d6ddb5-mknkq 1/1 Running 0 37m
nginx-97499b967-jzxwg 1/1 Running 0 42h
redis-master-7d557b94bb-8wqjh 1/1 Running 0 60m
web-764vs 1/1 Running 0 4h8m
web-kd8ml 1/1 Running 0 4h8m
web-rqc7q 1/1 Running 0 4h8m
INGRESS
为什么需要INGRESS ?
一个重要原因,每个LoadBalancer服务都需要自己负载均衡器和自己的公共IP地址,而一个Ingress只需要一个,即使提供对数个服务的访问时也是如此。对象发送HTTP请求时请求中的主机和路径决定请求转发给哪个服务。internet - ingress - serviceingress 可以理解成nginx配置文件
MetalLB使用
这个了解下,根据实际情况看
参考文档
https://edu.csdn.net/course/detail/27762?spm=1003.2449.3001.8295.2
相关文章:
![](https://img-blog.csdnimg.cn/6ffe4679a3c0452c915b9a236e4eb0d0.png)
飞天使-k8s基础组件分析-服务与ingress
文章目录 服务的介绍服务代理服务发现连接集群外服务服务发布无头服务 服务,pod和dns的关系端口转发通过expose 暴露应用服务案例INGRESSMetalLB使用参考文档 服务的介绍 服务的作用是啥? 提供外部调用,保证podip的真实性看看服务解决了什么…...
![](https://img-blog.csdnimg.cn/f0ce05ccfc1e4212a487b232a5892c37.png)
Unity——拖尾特效
拖尾是一种很酷的特效。拖尾的原理来自人类的视觉残留:观察快速移动的明亮物体,会看到物体移动的轨迹。摄像机通过调整快门时间,也可以拍出具有拖尾效果的照片,如在城市的夜景中,汽车的尾灯拖曳出红色的线条。 在较老…...
![](https://img-blog.csdnimg.cn/42d4f0f63e204dd5888aa9385b1a7508.png)
java开发之fastjson
依赖 <!-- fastjson依赖 --> <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.76</version> <…...
![](https://www.ngui.cc/images/no-images.jpg)
第一个C语言程序:HelloWorld
第一个C语言程序 注释 注释 对代码的解释和说明 特点 ○ 不会被执行 目的 让人们能够更加轻松地看懂代码 分类 行注释 // 快键键 ctrl/ 块注释 /**/ 快捷键 shiftalta 示例代码: #include <stdio.h>int main() {// 行注释/*块注释*/printf("hello w…...
![](https://www.ngui.cc/images/no-images.jpg)
golang 使用 viper 加载配置文件 自动反序列化到结构
文章博客地址:golang 使用 viper 加载配置 自动反序列化到结构 golang使用 viper 无需设置 mapstructure tag 根据配置文件后缀 自动返序列化到结构解决结构有下划线的字段解析不成功问题 viper 正常加载配置文件 golang viper 其中可以用来 查找、加载和反序列化JSON、TOML…...
![](https://www.ngui.cc/images/no-images.jpg)
C#设计模式六大原则之--接口隔离原则
设计模式六大原则是单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则、开闭原则。它们不是要我们刻板的遵守,而是根据实际需要灵活运用。只要对它们的遵守程度在一个合理的范围内,努为做到一个良好的设计。本文主要介绍一下.NET(C#)…...
![](https://www.ngui.cc/images/no-images.jpg)
【面试题】:axios二次封装都进行了哪些配置以及如果项目里面有两个baseURL你怎么解决?
一.axios的概念 Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 XMLHttpRequests。 二.axios的特点…...
![](https://img-blog.csdnimg.cn/img_convert/f6dfcabed87227900fc14fee105b7279.png)
谈谈对 GMP 的简单认识
犹记得最开始学习 golang 的时候,大佬们分享 GMP 模型的时候,总感觉云里雾里,听了半天,并没有一个很清晰的概念,不知 xmd 是否会有这样的体会 虽然 golang 入门很简单,但是对于理解 golang 的设计思想和原…...
![](https://www.ngui.cc/images/no-images.jpg)
Java正则表达式系列--从字符串中提取字符串或数字
原文网址:Java正则表达式系列--从字符串中提取字符串或数字_IT利刃出鞘的博客-CSDN博客 简介 本文用示例介绍Java如何使用正则表达式从字符串中提取想要的内容(字符串或者数字等)。 例1:提取一次不同内容 需求 从字符串中找到…...
![](https://img-blog.csdnimg.cn/45e87cbd4f3e4fa29dfc5b630c1cafc2.png)
机器学习实战之模型的解释性:Scikit-Learn的SHAP和LIME库
概要 机器学习模型的“黑箱”困境 机器学习模型的崛起让我们惊叹不已!不论是预测房价、识别图片中的猫狗,还是推荐给你喜欢的音乐,这些模型都表现得非常出色。但是,有没有想过,这些模型到底是如何做出这些决策的呢&a…...
![](https://img-blog.csdnimg.cn/img_convert/43c685c0a49a9abd6ca66c3d73a5b1b9.png)
Go 语言进阶与依赖管理 | 青训营
Powered by:NEFU AB-IN 文章目录 Go 语言进阶与依赖管理 | 青训营 语言进阶依赖管理测试 Go 语言进阶与依赖管理 | 青训营 GO语言工程实践课后作业:实现思路、代码以及路径记录 语言进阶 Go可以充分发挥多核优势,高效运行 Goroutine是Go语言中的协程…...
![](https://www.ngui.cc/images/no-images.jpg)
hyperf 十三 视图
教程:Hyperf composer地址:hyperf/view - Packagist 本次测试使用twig twig composedr地址:twig/twig - Packagist twig 文档地址:Home - Twig - The flexible, fast, and secure PHP template engine 一、安装 composer re…...
![](https://www.ngui.cc/images/no-images.jpg)
请你说说前端图形图像的框架
前端图形图像方面有许多强大的框架和库,使得开发者能够更容易地创建丰富的视觉效果和复杂的图形应用。下面列举了一些主要的框架和库: 1. Three.js Three.js 是一款运行在浏览器中的 3D 引擎,你可以用它创建各种三维场景,包括了…...
![](https://img-blog.csdnimg.cn/a76b2cb8ead94c4cbcb51fe139f41c35.png)
C++数据结构学习——栈
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、栈二、C语言实现1.声明代码2.实现增删查改代码3.测试代码 总结 前言 栈(Stack)是计算机科学中一种常见的数据结构,它是…...
![](https://img-blog.csdnimg.cn/e13f2cca67b44a8da551d87ca00d434f.png)
【C++笔记】C++之类与对象(下)
【C笔记】C之类与对象(下) 1、再看构造函数1.1、构造函数的初始化列表1.2、C支持单参数的构造函数的隐式类型转换1.3、匿名对象 2、Static成员2.1、为什么要有静态成员变量?2.2、一个类的静态成员变量属于这个类的所有对象2.3、静态成员函数 3、友元3.1、…...
![](https://www.ngui.cc/images/no-images.jpg)
管理类联考——英语——实战篇——大作文——图表——动态图表——整体效果
动态图表模板 What is clearly presented in the above 图表类型 is that dramatic changes have taken place in 主题词1 from 年份1 to 年份2.During the period, there was a marked jump from 数字1 to 数字2 in 事物1,while that of 事物2 declined significantly from 数…...
![](https://img-blog.csdnimg.cn/4a0338b7cdaa47d794cc160c3d15e663.png)
threejs纹理加载三(视频加载)
threejs中除了能把图片作为纹理进行几何体贴图以外,还可以把视频作为纹理进行贴图设置。纹理的类型有很多,我们可以用不同的加载器来加载,而对于视频作为纹理,我们需要用到今天的主角:VideoTexture。我们先看效果&…...
![](https://img-blog.csdnimg.cn/img_convert/ebc47c6e601408dafbfb4e7a0be4f5f5.png)
VUE笔记(三)vue的语法
一、计算属性 1、计算属性的概念 计算属性是依赖于源数据(data或者属性中的数据),在元数据的基础上进行逻辑运算后得到的新的数据,计算属性要依赖于源数据,源数据数据变化计算属性也会变化 2、计算属性的语法 在vue2中使用computed这个选…...
![](https://img-blog.csdnimg.cn/37b8fa718b1349109e9b9fbfbe5a34c7.png)
探讨uniapp的路由与页面生命周期问题
1 首先我们引入页面路由 2 页面生命周期函数 onLoad() {console.log(页面加载)},onShow() {console.log(页面显示)},onReady(){console.log(页面初次显示)},onHide() {console.log(页面隐藏)},onUnload() {console.log(页面卸载)},onBackPress(){console.log(页面返回)}3 页面…...
![](https://img-blog.csdnimg.cn/c39fdaae525641f48070dd34688360e1.png)
咸鱼之王俱乐部网站开发
我的俱乐部 最新兑换码 *注意区分大小写,中间不能有空格! APP666 HAPPY666 QQ888 QQXY888 vip666 VIP666 XY888 app666 bdvip666 douyin666 douyin777 douyin888 happy666 huhushengwei888 taptap666 周活动 宝箱周 宝箱说明 1.木质宝箱开启1个…...
![](https://www.ngui.cc/images/no-images.jpg)
Electron+Vue3+TS 打包exe客户端
Electron Vue3 TS 实战 - 掘金 如果报错loaderContext.getOptions is not a function ts-loader版本不一致导致的问题。 解决方案:npm install ts-loader8.0.0 --save...
![](https://img-blog.csdnimg.cn/b46a9d7ac7c64512924455b6b3175c37.png)
vue3范围选择组件封装
个人项目地址: SubTopH前端开发个人站 (自己开发的前端功能和UI组件,一些有趣的小功能,感兴趣的伙伴可以访问,欢迎提出更好的想法,私信沟通,网站属于静态页面) SubTopH前端开发个人站…...
![](https://www.ngui.cc/images/no-images.jpg)
能被整除的数(容斥原理)
思路: (1)需求:求对于1~n中至少能被p1~pm至少1个整除的数的个数,由于都是质数,彼此互质,不需要进行质因子分解,根据容斥原理, res n/p1 n/p2 ... n/pm - n /(p1p2) -…...
![](https://img-blog.csdnimg.cn/0a4277007c32428489eb45c6f5b9ba9e.png)
Modbus转Profinet网关与流量变送器兼容转ModbusTCP协议博图配置
首先,我们需要明确电磁流量计的通信协议是Modbus,而西门子1200PLC的通信协议是Profinet。这两种协议在功能和特性上存在一定的差异,因此需要使用兴达易控Modbus转Profinet网关设备进行转换。兴达易控的XD-MDPN100是Profinet转ModbusTCP的网关…...
![](https://img-blog.csdnimg.cn/3484e74afa6549e496088f0992298077.png#pic_center)
HLS实现CORDIC算法计算正余弦并上板验证
硬件:ZYNQ7010 软件:MATLAB 2019b、Vivado 2017.4、HLS 2017.4、System Generator 2017.4 1、CORDIC算法计算正余弦 CORDIC算法详细分析网上有很多资料,它的原理是用一系列旋转去逼近目标角度,这一系列旋转的角度为 θ a r c t…...
![](https://img-blog.csdnimg.cn/bd4b43a626ec415c8ac273ec45abd9cd.png)
高阶数据结构并查集
目录: 并查集的概念代码实现 LeetCode例题 并查集的概念 将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元元素集合,然后按一定的规律将归于同一组元素的集合合并。在此过程中反复遇到查询某一个元素属于那个集合的运算…...
![](https://img-blog.csdnimg.cn/f2f93842c432457c8228c496ceea8c22.png)
WSL2连接不了外网怎么办?
某天忽然WLAN变成地球图标,上不了Internet,搞了半天网络适配器,仍然不行。回忆之前做过的操作,曾经运行过ZoogVPN,试着启动并连接,然后退出,WLAN神奇地恢复了连接,可以上Internet了。…...
![](https://www.ngui.cc/images/no-images.jpg)
【C/C++】探索内存对齐的奥秘与优势
目录 一,前言 二,什么是内存对齐? 三,内存对齐的原理 四,内存对齐的优势 五,如何实现内存对齐?(看这节就行) 1.使用 #pragma pack 来实现内存对齐的示例 七&#…...
![](https://www.ngui.cc/images/no-images.jpg)
leetcode分类刷题:滑动窗口(二、重复元素类型)
1、连续子数组、连续子串问题通常需要滑动窗口来求解,本篇文章对应的“二、重复元素类型”在此基础上对连续子数组、连续子串中重复元素个数、种类进行考察,此时,需要使用和维护哈希表进行左右指针的移动,因此这类题目对应的解法为…...
![](https://img-blog.csdnimg.cn/9cd1544f884c4665a1cc3b1d8861338c.png)
MySQL—buffer pool
一、buffer pool的介绍 Buffer pool是什么 一个内存区域,为了提⾼数据库的性能,数据库操作数据的时候,把硬盘上的数据加载到buffer pool,不直接和硬盘打交道,操作的是 buffer pool的数据,数据库的增删改查…...
![](/images/no-images.jpg)
做公司网站要素/google play应用商店
大家好,我是小马老师。 本文介绍lammps in文件中使用混合键势的方法。 在以前的推文中,介绍比较多的是混合对势的写法(pair_style hybrid),其实,在同一个模拟体系内,键势类型也可以使用混合势,对应命令为bo…...
个人如何建网站/自媒体是如何赚钱的
//logger.h/*//类名:CLogger//功能介绍:Win平台日志记录功能,多线程安全,支持写日志级别的设置,日志格式包含日志等级,日志时间,文件名,行号信息//作者:sunflover 2016-1…...
![](https://images2015.cnblogs.com/blog/799867/201603/799867-20160308161709210-1423043524.png)
宝安网站设计制作/怎样优化网站
1、频道管理中,URL配置,增加一个参数person_id 2、在photo_list.html模板页中,添加以下代码 <!--C#代码--><%csharp%>string strwhere"status0 ";if(DTRequest.GetQueryString("person_id")!null){string pe…...
做网站违反广告法/关键词优化报价推荐
一、理解什么是MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。 MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索。 MyBatis 可以使用简单的XML 或注解用于配置和原始映射,将接口和 Java…...
![](https://img-blog.csdnimg.cn/img_convert/e8b29392dc22152d6351609f949fc190.png)
全国被执行人名单查询/seoul是哪个国家
Android自定义半圆进度条 半圆渐变色进度条带指示 半圆开口大小可自由修改首先我们来看下效果图不同的开口大小只需要修改一个参数即可半圆1:半圆2:半圆3:如果是你想要的效果,就直接滑动到文章底部,下载源码࿰…...
![](/images/no-images.jpg)
wordpress主题报错/网站代发外链
PHP 安全三板斧:过滤、验证和转义之过滤篇 & Laravel底层SQL注入规避由 学院君 创建于4年前, 最后更新于 1年前版本号 #328413 views19 likes0 collects我们在开发应用时,一般有个约定:不要信任任何来自不受自己控制的数据源中的数据。例…...