Go语言开发k8s-04-Service操作

news2024/12/25 9:32:48

文章目录

  • 1. 结构体
    • 1.1 ServiceList
    • 1.2 Service
    • 1.3 TypeMeta
    • 1.4 ObjectMeta
    • 1.5 ServiceSpec
    • 1.6 ServiceStatus
    • 1.7 对照yml文件示例
  • 2. Get List
    • 语法
    • 完整示例
  • 3. Create
    • 语法
    • 完整示例
  • 4. Get Service
    • 语法
    • 完整示例
  • 5. Update Service
    • 语法
    • 完整示例
  • 6. Delete Service
    • 语法
    • 完整示例

1. 结构体

1.1 ServiceList

所在包:“k8s.io/api/core/v1”

type ServiceList struct {
    v1.TypeMeta `json:",inline"`
    v1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
    Items           []Service `json:"items" protobuf:"bytes,2,rep,name=items"`
}

其中Items下各元素的service结构体如下:

1.2 Service

所在包:“k8s.io/api/core/v1”

type Service struct {
    v1.TypeMeta   `json:",inline"`
    v1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
    Spec              ServiceSpec   `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"`
    Status            ServiceStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"`
}

其中TypeMetaObjectMeta ServiceSpec ServiceStatus结构体如下:

1.3 TypeMeta

所在包:“k8s.io/apimachinery/pkg/apis/meta/v1”

type TypeMeta struct {
    Kind       string `json:"kind,omitempty" protobuf:"bytes,1,opt,name=kind"`
    APIVersion string `json:"apiVersion,omitempty" protobuf:"bytes,2,opt,name=apiVersion"`
}

对应k8s的yaml文件如下部分:

apiVersion: v1
kind: Service

1.4 ObjectMeta

所在包:“k8s.io/apimachinery/pkg/apis/meta/v1”

type ObjectMeta struct {
    Name                       string               `json:"name,omitempty" protobuf:"bytes,1,opt,name=name"`
    GenerateName               string               `json:"generateName,omitempty" protobuf:"bytes,2,opt,name=generateName"`
    Namespace                  string               `json:"namespace,omitempty" protobuf:"bytes,3,opt,name=namespace"`
    SelfLink                   string               `json:"selfLink,omitempty" protobuf:"bytes,4,opt,name=selfLink"`
    UID                        types.UID            `json:"uid,omitempty" protobuf:"bytes,5,opt,name=uid,casttype=k8s.io/kubernetes/pkg/types.UID"`
    ResourceVersion            string               `json:"resourceVersion,omitempty" protobuf:"bytes,6,opt,name=resourceVersion"`
    Generation                 int64                `json:"generation,omitempty" protobuf:"varint,7,opt,name=generation"`
    CreationTimestamp          Time                 `json:"creationTimestamp,omitempty" protobuf:"bytes,8,opt,name=creationTimestamp"`
    DeletionTimestamp          *Time                `json:"deletionTimestamp,omitempty" protobuf:"bytes,9,opt,name=deletionTimestamp"`
    DeletionGracePeriodSeconds *int64               `json:"deletionGracePeriodSeconds,omitempty" protobuf:"varint,10,opt,name=deletionGracePeriodSeconds"`
    Labels                     map[string]string    `json:"labels,omitempty" protobuf:"bytes,11,rep,name=labels"`
    Annotations                map[string]string    `json:"annotations,omitempty" protobuf:"bytes,12,rep,name=annotations"`
    OwnerReferences            []OwnerReference     `json:"ownerReferences,omitempty" patchStrategy:"merge" patchMergeKey:"uid" protobuf:"bytes,13,rep,name=ownerReferences"`
    Finalizers                 []string             `json:"finalizers,omitempty" patchStrategy:"merge" protobuf:"bytes,14,rep,name=finalizers"`
    ManagedFields              []ManagedFieldsEntry `json:"managedFields,omitempty" protobuf:"bytes,17,rep,name=managedFields"`
}

对应k8s的yml文件中如下部分

metadata:
  ……

代码中实例化示例如下:

		ObjectMeta: metaV1.ObjectMeta{
			Name: "nginx",
			Labels: map[string]string{
				"app":"nginx",
			},
		},

1.5 ServiceSpec

所在包:“k8s.io/api/core/v1”

type ServiceSpec struct {
    Ports                         []ServicePort                     `json:"ports,omitempty" patchStrategy:"merge" patchMergeKey:"port" protobuf:"bytes,1,rep,name=ports"`
    Selector                      map[string]string                 `json:"selector,omitempty" protobuf:"bytes,2,rep,name=selector"`
    ClusterIP                     string                            `json:"clusterIP,omitempty" protobuf:"bytes,3,opt,name=clusterIP"`
    ClusterIPs                    []string                          `json:"clusterIPs,omitempty" protobuf:"bytes,18,opt,name=clusterIPs"`
    Type                          ServiceType                       `json:"type,omitempty" protobuf:"bytes,4,opt,name=type,casttype=ServiceType"`
    ExternalIPs                   []string                          `json:"externalIPs,omitempty" protobuf:"bytes,5,rep,name=externalIPs"`
    SessionAffinity               ServiceAffinity                   `json:"sessionAffinity,omitempty" protobuf:"bytes,7,opt,name=sessionAffinity,casttype=ServiceAffinity"`
    LoadBalancerIP                string                            `json:"loadBalancerIP,omitempty" protobuf:"bytes,8,opt,name=loadBalancerIP"`
    LoadBalancerSourceRanges      []string                          `json:"loadBalancerSourceRanges,omitempty" protobuf:"bytes,9,opt,name=loadBalancerSourceRanges"`
    ExternalName                  string                            `json:"externalName,omitempty" protobuf:"bytes,10,opt,name=externalName"`
    ExternalTrafficPolicy         ServiceExternalTrafficPolicyType  `json:"externalTrafficPolicy,omitempty" protobuf:"bytes,11,opt,name=externalTrafficPolicy"`
    HealthCheckNodePort           int32                             `json:"healthCheckNodePort,omitempty" protobuf:"bytes,12,opt,name=healthCheckNodePort"`
    PublishNotReadyAddresses      bool                              `json:"publishNotReadyAddresses,omitempty" protobuf:"varint,13,opt,name=publishNotReadyAddresses"`
    SessionAffinityConfig         *SessionAffinityConfig            `json:"sessionAffinityConfig,omitempty" protobuf:"bytes,14,opt,name=sessionAffinityConfig"`
    IPFamilies                    []IPFamily                        `json:"ipFamilies,omitempty" protobuf:"bytes,19,opt,name=ipFamilies,casttype=IPFamily"`
    IPFamilyPolicy                *IPFamilyPolicy                   `json:"ipFamilyPolicy,omitempty" protobuf:"bytes,17,opt,name=ipFamilyPolicy,casttype=IPFamilyPolicy"`
    AllocateLoadBalancerNodePorts *bool                             `json:"allocateLoadBalancerNodePorts,omitempty" protobuf:"bytes,20,opt,name=allocateLoadBalancerNodePorts"`
    LoadBalancerClass             *string                           `json:"loadBalancerClass,omitempty" protobuf:"bytes,21,opt,name=loadBalancerClass"`
    InternalTrafficPolicy         *ServiceInternalTrafficPolicyType `json:"internalTrafficPolicy,omitempty" protobuf:"bytes,22,opt,name=internalTrafficPolicy"`
}

对应原生k8s创建service的 yml文件中spec的内容示例如下:(这一部分也是我们主要填写的)

spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30500
  selector:
    app: nginx

代码示例如下:

		Spec: coreV1.ServiceSpec{
			Type: coreV1.ServiceTypeNodePort,
			Selector: map[string]string{
				"app":"nginx",
			},
			Ports: []coreV1.ServicePort{
				{
					Port: 80,
					Protocol: coreV1.ProtocolTCP,
					NodePort: nodePort,
				},
			},
		}

1.6 ServiceStatus

所在包:“k8s.io/api/core/v1”

type ServiceStatus struct {
    LoadBalancer LoadBalancerStatus `json:"loadBalancer,omitempty" protobuf:"bytes,1,opt,name=loadBalancer"`
    Conditions   []v1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,2,rep,name=conditions"`
}

service 的状态,这个不用过多操作。

1.7 对照yml文件示例

附原生k8s集群上一个service 信息,大家可以对照理解一下以上结构体

apiVersion: v1
kind: Service
metadata:
  annotations:
    field.cattle.io/publicEndpoints: '[{"addresses":["10.10.117.53"],"port":30051,"protocol":"TCP","serviceName":"liubei:nginx","allNodes":true}]'
  creationTimestamp: "2022-09-29T07:01:01Z"
  labels:
    app: nginx
  name: nginx
  namespace: liubei
  resourceVersion: "19646213"
  selfLink: /api/v1/namespaces/liubei/services/nginx
  uid: 7d05764c-87a7-46d1-8e4f-bed136755fb9
spec:
  clusterIP: 10.1.101.241
  clusterIPs:
  - 10.1.101.241
  externalTrafficPolicy: Cluster
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - nodePort: 30051
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}

2. Get List

语法

  • 语法
func (ServiceInterface) List(ctx context.Context, opts v1.ListOptions) (*v1.ServiceList, error)
  • 语法示例
serviceList,err = clientSet.CoreV1().Services(namespaceName).List(context.TODO(),metaV1.ListOptions{})

完整示例

  • 创建函数
package crowK8S

import (
	"context"
	"fmt"
	coreV1 "k8s.io/api/core/v1"
	metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/client-go/kubernetes"
)

func GetServiceList(clientSet *kubernetes.Clientset,namespaceName string) (serviceList *coreV1.ServiceList,err error) {
	serviceList,err = clientSet.CoreV1().Services(namespaceName).List(context.TODO(),metaV1.ListOptions{})
	if err != nil {
		return serviceList,err
	}
	return serviceList,nil
}
  • 调用
package main

import (
	"fmt"
	"go-k8s/crowK8S"
)

func main()  {
	clientSet,err := crowK8S.ConnectK8s()
	if err !=nil {
		fmt.Println(err)
	}

	serviceList,err := crowK8S.GetServiceList(clientSet,"kube-system")
	for _,serviceInfo := range serviceList.Items{
		fmt.Println(serviceInfo.Name)

	}

}
  • 输出
kube-dns
metrics-server

3. Create

语法

  • 语法
func (ServiceInterface) Create(ctx context.Context, service *v1.Service, opts v1.CreateOptions) (*v1.Service, error)
  • 代码示例
serviceInfo,err = clientSet.CoreV1().Services(namespace).Create(context.TODO(),service,metaV1.CreateOptions{})

完整示例

  • yml文件对照

以下是边这个yml文件为例,我们就照着这个内容写代码:

apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: test
  labels:
    app: nginx
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30500
  selector:
    app: nginx
  • 定义函数
func CreateService(clientSet *kubernetes.Clientset,namespaceName string) (serviceInfo *coreV1.Service,err error) {
	namespace := namespaceName
	service := &coreV1.Service{
		ObjectMeta: metaV1.ObjectMeta{
			Name: "nginx",
			Labels: map[string]string{
				"app":"nginx",
			},
		},
		Spec: coreV1.ServiceSpec{
			Type: coreV1.ServiceTypeNodePort,
			Selector: map[string]string{
				"app":"nginx",
			},
			Ports: []coreV1.ServicePort{
				{
					Port: 80,
					Protocol: coreV1.ProtocolTCP,
					NodePort: 30050,
				},
			},
		},
	}
	serviceInfo,err = clientSet.CoreV1().Services(namespace).Create(context.TODO(),service,metaV1.CreateOptions{})
    return serviceInfo,nil

}
  • 调用
package main

import (
	"fmt"
	"go-k8s/crowK8S"
)

func main()  {
	clientSet,err := crowK8S.ConnectK8s()
	if err !=nil {
		fmt.Println(err)
	}

	serviceInfo,err := crowK8S.CreateService(clientSet ,"liubei")
	fmt.Println(serviceInfo)

}
  • 结果输出

本来是一个json字串,以下是我格式化之后贴上来的:

{
	ObjectMeta: {
		nginx liubei / api / v1 / namespaces / liubei / services / nginx 7 d05764c - 87 a7 - 46 d1 - 8e4 f - bed136755fb9 19389876 0 2022 - 09 - 29 15: 01: 01 + 0800 CST < nil > < nil > map[app: nginx] map[][][][{
			___6go_build_main_go.exe Update v1 2022 - 09 - 29 15: 01: 01 + 0800 CST FieldsV1 {
				"f:metadata": {
					"f:labels": {
						".": {},
						"f:app": {}
					}
				},
				"f:spec": {
					"f:externalTrafficPolicy": {},
					"f:ports": {
						".": {},
						"k:{\"port\":80,\"protocol\":\"TCP\"}": {
							".": {},
							"f:nodePort": {},
							"f:port": {},
							"f:protocol": {},
							"f:targetPort": {}
						}
					},
					"f:selector": {
						".": {},
						"f:app": {}
					},
					"f:sessionAffinity": {},
					"f:type": {}
				}
			}
		}]
	},
	Spec: ServiceSpec {
		Ports: [] ServicePort {
			ServicePort {
				Name: ,
				Protocol: TCP,
				Port: 80,
				TargetPort: {
					0 80
				},
				NodePort: 30050,
				AppProtocol: nil,
			},
		},
		Selector: map[string] string {
			app: nginx,
		},
		ClusterIP: 10.1 .101 .241,
		Type: NodePort,
		ExternalIPs: [],
		SessionAffinity: None,
		LoadBalancerIP: ,
		LoadBalancerSourceRanges: [],
		ExternalName: ,
		ExternalTrafficPolicy: Cluster,
		HealthCheckNodePort: 0,
		PublishNotReadyAddresses: false,
		SessionAffinityConfig: nil,
		IPFamilyPolicy: * SingleStack,
		ClusterIPs: [10.1 .101 .241],
		IPFamilies: [IPv4],
		AllocateLoadBalancerNodePorts: nil,
		LoadBalancerClass: nil,
		InternalTrafficPolicy: nil,
	},
	Status: ServiceStatus {
		LoadBalancer: LoadBalancerStatus {
			Ingress: [] LoadBalancerIngress {},
		},
		Conditions: [] Condition {},
	},
}

4. Get Service

语法

完整示例

  • 创建函数
func GetService(clientSet *kubernetes.Clientset,namespaceName string,serviceName string) (serviceInfo *coreV1.Service,err error) {
	serviceInfo,err = clientSet.CoreV1().Services(namespaceName).Get(context.TODO(),serviceName,metaV1.GetOptions{})
	if err != nil {
		return serviceInfo,err
	}
	return serviceInfo,nil
}
  • 调用
package main

import (
	"fmt"
	"go-k8s/crowK8S"
)

func main()  {
	clientSet,err := crowK8S.ConnectK8s()
	if err !=nil {
		fmt.Println(err)
	}

	serviceInfo,err := crowK8S.GetService(clientSet ,"liubei","nginx")
	fmt.Println(serviceInfo)
}
  • 结果显示

同创建时的结果

5. Update Service

语法

  • 语法
func (ServiceInterface) Update(ctx context.Context, service *v1.Service, opts v1.UpdateOptions) (*v1.Service, error)
  • 语法示例
serviceInfo,err = clientSet.CoreV1().Services(namespaceName).Update(context.TODO(),service,metaV1.UpdateOptions{})

完整示例

  • 创建函数
package crowK8S

import (
	"context"
	coreV1 "k8s.io/api/core/v1"
	metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/client-go/kubernetes"
)

func ApplyServiceByNodePort(clientSet *kubernetes.Clientset,namespaceName string,serviceName string,nodePort int32)(serviceInfo *coreV1.Service,err error)  {

	service,err := clientSet.CoreV1().Services(namespaceName).Get(context.TODO(),serviceName,metaV1.GetOptions{})
	if err !=nil {
		return serviceInfo,err
	}

    service.Spec.Ports[0].NodePort = nodePort
	serviceInfo,err = clientSet.CoreV1().Services(namespaceName).Update(context.TODO(),service,metaV1.UpdateOptions{})
	if err !=nil {
		return serviceInfo,err
	}

	return serviceInfo,nil
}
  • 调用
package main

import (
	"fmt"
	"go-k8s/crowK8S"
)

func main()  {
	clientSet,err := crowK8S.ConnectK8s()
	if err !=nil {
		fmt.Println(err)
	}

	serviceInfo,err := crowK8S.ApplyServiceByNodePort(clientSet ,"liubei","nginx",30051)
	fmt.Println(serviceInfo)
}

6. Delete Service

语法

  • 语法
func (ServiceInterface) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error
  • 语法示例
err = clientSet.CoreV1().Services(namespaceName).Delete(context.TODO(),serviceName,metaV1.DeleteOptions{})

完整示例

  • 创建函数
package crowK8S

import (
	"context"
	metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/client-go/kubernetes"
)

func DeleteService(clientSet *kubernetes.Clientset,namespaceName string,serviceName string)(err error)  {
	err = clientSet.CoreV1().Services(namespaceName).Delete(context.TODO(),serviceName,metaV1.DeleteOptions{})
	if err != nil {
		return err
	}
	return nil
}
  • 调用
package main

import (
	"fmt"
	"go-k8s/crowK8S"
)

func main()  {
	clientSet,err := crowK8S.ConnectK8s()
	if err !=nil {
		fmt.Println(err)
	}

	err = crowK8S.DeleteService(clientSet,"liubei","nginx")
    if err != nil {
		fmt.Println(err)
	}else {
		fmt.Println("删除成功")
	}
}
  • 结果打印
删除成功

在这里插入图片描述

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

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

相关文章

python基于PHP的个人信息管理系统

随着现代工作的日趋繁忙,人们越来越意识到信息管理的重要性与必要性,而具有个性化特色的个人信息管理系统能够高速有效的管理个人信息,从而提升自己的工作效率 社会的发展给人们的生活压力越来越大,每天所要面临的问题也越来越多,面对如此多的事情需要去处理往往会顾此失彼,将很…

SpringCloud-Hystrix服务治理

简介 Hystrix是用于服务熔断&#xff0c;容错管理工具&#xff0c;旨在通过熔断机制控制服务和第三方库的节点&#xff0c;从而对延迟和故障提供更强大的容错能力。 服务降级 当服务器压力剧增的情况下&#xff0c;根据实际业务情况及流量&#xff0c;对一些服务和页面有策略的…

Web前端入门(十八)圆角边框及盒子阴影

总目录&#xff1a;https://blog.csdn.net/treesorshining/article/details/124725459 文章目录1.圆角边框2.盒子阴影2.1 开发中阴影常用语句2.2 文字阴影1.圆角边框 在 CSS3 中&#xff0c;新增了圆角边框样式&#xff0c;这样盒子就可以变圆角了。border-radius 属性用于设置…

牛客刷题总结——Python入门03:运算符

&#x1f935;‍♂️ 个人主页: 北极的三哈 个人主页 &#x1f468;‍&#x1f4bb; 作者简介&#xff1a;Python领域优质创作者。 &#x1f4d2; 系列专栏&#xff1a;《牛客题库-Python篇》 &#x1f310;推荐《牛客网》——找工作神器|笔试题库|面试经验|实习经验内推&am…

【Linux】分析缓冲区,刷新机制,FILE

文章目录一、Linux的缓冲区(一) 用户层缓冲区(二) 内核层缓冲区&#xff08;Kernel Buffer Cache&#xff09;验证buffer增加和减少释放缓存二、缓冲区的刷新策略(一) 用户层缓冲区刷新策略(二) 内核层缓冲区刷新策略三、探究缓冲区常见问题的产生(一) 由于缺失换行符导致内容没…

相对于java,C++中的那些神奇语法

空指针还可以调用成员函数 #include <cstdio>class Person { public:void sayHello() {printf("hello!\n");} };int main() {auto * p new Person;p->sayHello();p nullptr;p->sayHello();return 0; }运行结果如下&#xff1a; hello! hello!进程已结…

【深入理解java虚拟机】JVM故障处理工具介绍

目录前言一、jps&#xff1a;虚拟机进程状况工具一、一 输出远程机器信息二、jstat&#xff1a;虚拟机统计信息监视工具三、jinfo&#xff1a; Java配置信息工具四、jmap&#xff1a; Java内存映像工具五、jhat&#xff1a;虚拟机堆转储快照分析工具六、jstack&#xff1a; Jav…

问:毁掉一个人,有多容易?答:年龄到了就可以

人到中年&#xff0c;有点难。 曾在虎扑论坛上看到一篇爆帖&#xff1a; 标题是《loser回忆录&#xff1a;一年前我月薪两万被人叫X总&#xff0c;如今在美团送外卖》&#xff0c;63万浏览量&#xff0c;回复也超过了2300条。 如题&#xff0c;帖子的主人公是一个35岁的男人…

node-sass安装失败解决方法

node-sass安装失败&#xff0c;提示如下&#xff1a; gyp verb check python checking for Python executable "python" in the PATH gyp verb which succeeded python D:Program FilesPython38python.EXE gyp ERR! configure error gyp ERR! stack Error: Command f…

nvidia显卡驱动、cuda、cudnn、tensorflow对应版本

1、下载显卡驱动 在nvidia官网下载驱动&#xff0c;驱动官网选择设备的驱动进行搜索下载即可&#xff0c;搜索时注意对应的操作系统 一般为安装NVIDIA Studio驱动版本&#xff0c;GeForce Game Ready适用于游戏玩家&#xff0c;下面是两个版本区别的官方解释 下载完的驱动会以…

关键路径 ← AOE网

【问题描述】 给定一个只有一个源点和一个汇点的有向图&#xff0c;要求求出所有的关键活动&#xff0c;并计算完成该工程至少需要多少时间。【输入格式】 第一行包含两个整数 n 和 m&#xff0c;表示顶点数和边数。 接下来 m 行&#xff0c;每行包含三个整数 u&#xff0c;v&a…

p2p开户银行审核模块功能实现

审核模块简介 用户提交开户申请后要等待审核通过才能审核成功 审核需要银行系统进行开户 使用flask框架搭建一个银行系统 用户提交审核 银行进行开户&#xff0c;在返回p2p后台通过审核 flask搭建测试银行系统 利用工厂模式搭建一个flask框架 app.py from flask import Fl…

程序员必看内容连续集之 Redis 03

目录 一、Spring整合Redis 二、注解式开发 一、Spring整合Redis ①项目的pom文件导入依赖并修改 <redis.version>2.9.0</redis.version> <redis.spring.version>1.7.1.RELEASE</redis.spring.version><dependency><groupId>redis.clien…

(附源码)计算机毕业设计SSM抗新冠肺炎药品进销存管理系统

&#xff08;附源码&#xff09;计算机毕业设计SSM抗新冠肺炎药品进销存管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 …

Synchronized锁的使用

前言&#xff1a;大家好&#xff0c;我是小威&#xff0c;24届毕业生&#xff0c;在一家满意的公司实习。本篇文章是关于并发编程中Synchronized锁的用法知识记录&#xff0c;由于篇幅原因&#xff0c;核心原理知识下篇记录。 本篇文章记录的基础知识&#xff0c;适合在学Java的…

进程的基本概念(操作系统)

目录 一、程序的顺序执行及其特征 二、程序的并发执行及其特征 三、进程的特征与状态 1、进程的定义和特征 2、进程的三种基本状态 3、进程的三种基本状态的转换 4、 挂起状态 四、进程控制块&#xff08;PCB&#xff09; 1. PCB作用&#xff1a; PCB是进程存在的唯一…

【力扣】正则表达式匹配--回溯法解剖

题目&#xff1a;10.正则表达式匹配 给你一个字符串 s 和一个字符规律 p&#xff0c;请你来实现一个支持 . 和 * 的正则表达式匹配。 . 匹配任意单个字符 * 匹配零个或多个前面的那一个元素 所谓匹配&#xff0c;是要涵盖 整个 字符串 s的&#xff0c;而不是部分字符串。 示…

maven配置阿里镜像,解决IDEA配置maven恢复默认配置问题

文章目录1.三个IDEA配置说明2.拷贝与修改settings.xml2.1 找到IDEA的mave配置文件settings.xml位置2.2 拷贝IDEA的settings.xml到.m2目录下2.3 打开settings.xml&#xff0c;配置本地库LocalRepository的路径2.4 删除默认镜像配置&#xff0c;配置阿里镜像2.5 保存文件3.验证是…

面试时,MySQL这些基础知识你回答的出来吗?

目录 【一】前言 【二】MySQL的并发控制 【三】数据库的事务 【四】隔离级别 【五】死锁 【六】存储引擎 6.1 InnoDB存储引擎 6.2 MyISAM存储引擎 【七】总结 【一】前言 MySQL是一个关系型数据库管理系统&#xff0c;由瑞典MySQL AB公司开发&#xff0c;属于Oracle…

一文就读懂RPC远程调用核心原理

rpc核心原理 什么是rpc&#xff1f; rpc的全称是Remote Procedure Call&#xff0c;即远程过程调用&#xff0c;是分布式系统的常用通信方法。 Remote&#xff0c;简单来说的话就是两个不同的服务之间&#xff0c;两个服务肯定是两个不同的进程。因此&#xff0c;我们就从跨进…