最新 client-java 调用 k8s ApiServer

创建权限绑定

sa-role.yaml

apiVersion: v1
kind: ServiceAccount
metadata:name: my-admin #账号名namespace: kube-system---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:annotations:rbac.authorization.kubernetes.io/autoupdate: "true"labels:kubernetes.io/bootstrapping: rbac-defaultsname: my-cluster-admin
rules:
- apiGroups: ["*"]resources: ["*"]verbs: ["*"]
- nonResourceURLs: ["*"]verbs: ["*"]---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: clusterrolebinding-admin
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: my-cluster-admin
subjects:
- kind: ServiceAccountname: my-adminnamespace: kube-system---
apiVersion: v1
kind: Secret
metadata:name: my-admin-tokennamespace: kube-systemannotations:kubernetes.io/service-account.name: "my-admin"   
type: kubernetes.io/service-account-token
 kubectl apply -f .

获取永久token

kubectl get secret my-admin-token -n kube-system -o jsonpath={".data.token"} | base64 -d

k8s apiserver的api查看

生成k8s token

请求k8s-swagger文件

curl -H “Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6ImQ4Slh0Mk9lMzd0TXNlZW9sbGRRMUVfRWtYSHVnNnFwMG11TmhYR3dWM2cifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi10b2tlbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJobC1hZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6Ijc4MDk1MDgwLWE2MWYtNGQ0Ni05YTUyLTYxYzMxOTAyYzIyMCIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTpobC1hZG1pbiJ9.Gy8xiiLngFopG6EJVAUIsP7n9jQqsP6rWEg8q6LcqpaQ42FXYVX01o1wsqi6u5l3H5D4_dI-GjOU1ajc8Y_g4lZu-ClCxn360tsoJ6ZaCg7fuW4LIA2Mr1gT-rv7yLKhYplF6LDwEwsqlAh3nZopoWvMPtAKWfUQ0rI6q3CoNbpben7DAoJljmZRTa63QSjpnYH8hyZGfkgtXYhe6NC1wF0Q3FQJ5yWO1-oaDpkus3sjFa34OJmWx_VR8g-bAUlkrC5GFVMSEFytXGb1MlYSP3W0muel6-C7d-dWZBT7GV_kQrkgP8PYQC1i3weoA19t8JqT2CX1G1WmKo_F2DFktw” -k https://localhost:6443/openapi/v2 > k8s-swagger.json

获取 swagger-ui 镜像

docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/swaggerapi/swagger-ui:v4.15.5

创建serviceaccount

启动 swagger-ui 镜像

docker run -d -p 8080:8080 -e SWAGGER_JSON=/k8s-swagger.json -v /root/crd/k8s-swagger.json:/k8s-swagger.json swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/swaggerapi/swagger-ui:v4.15.5

访问 swagger-ui

http://127.0.0.1:8080

生成k8s对应的CRD资源

参考资源https://kkgithub.com/kubernetes-client/java/blob/master/docs/generate-model-from-third-party-resources.md

docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/kubernetes-client/java/crd-model-gen:v1.0.6
export LOCAL_MANIFEST_FILE=/root/prometheus/kube-prometheus-0.14.0/manifests/setup/0prometheusruleCustomResourceDefinition.yaml
docker run \--rm \-v "$LOCAL_MANIFEST_FILE":"$LOCAL_MANIFEST_FILE" \-v /var/run/docker.sock:/var/run/docker.sock \-v "$(pwd)":"$(pwd)" \-ti \--network host \swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/kubernetes-client/java/crd-model-gen:v1.0.6 \/generate.sh \-u $LOCAL_MANIFEST_FILE \-n com.example.stable \-p com.example.stable \-o "$(pwd)"

在线生成方式参考https://blog.csdn.net/weixin_42340037/article/details/132496248

  • fork kubernetes-client/java 仓库到自己的github
https://github.com/kubernetes-client/java
  • 点击Actions,在点击CRD Java Model Generate

  • 执行run workflow;输入必要的数据

Comma-separated paths to CRD yaml sources, can be either HTTP url or local file path.。k8s 自定义资源的 yaml文件,kube-prometheus的自定义资源prometheusrule

https://github.com/prometheus-operator/kube-prometheus
https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/refs/heads/main/manifests/setup/0prometheusruleCustomResourceDefinition.yaml
  • 执行 Actions 后,下载生成为 CRD Java Model 的 zip 包

The package name of the generated java project. 可以随便输入报名

#调用k8s的api

引入依赖

<dependency><groupId>io.kubernetes</groupId><artifactId>client-java</artifactId><version>21.0.2</version>
</dependency>

编码调用 k8s api的代码

package k8s_demo;import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.yaml.snakeyaml.Yaml;import com.alibaba.fastjson2.JSON;
import com.crd.models.V1PrometheusRule;
import com.crd.models.V1PrometheusRuleSpec;
import com.crd.models.V1PrometheusRuleSpecGroups;
import com.crd.models.V1PrometheusRuleSpecRules;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;import io.kubernetes.client.openapi.ApiClient;
import io.kubernetes.client.openapi.ApiException;
import io.kubernetes.client.openapi.Configuration;
import io.kubernetes.client.openapi.apis.CustomObjectsApi;
import io.kubernetes.client.openapi.apis.CustomObjectsApi.APIcreateClusterCustomObjectRequest;
import io.kubernetes.client.openapi.apis.CustomObjectsApi.APIcreateNamespacedCustomObjectRequest;
import io.kubernetes.client.openapi.apis.CustomObjectsApi.APIdeleteNamespacedCustomObjectRequest;
import io.kubernetes.client.openapi.apis.CustomObjectsApi.APIlistClusterCustomObjectRequest;
import io.kubernetes.client.openapi.apis.CustomObjectsApi.APIlistNamespacedCustomObjectRequest;
import io.kubernetes.client.openapi.models.V1ObjectMeta;
import io.kubernetes.client.util.ClientBuilder;
import io.kubernetes.client.util.credentials.AccessTokenAuthentication;public class CRDdemo {public static void main(String[] args) {ApiClient client = new ClientBuilder().setBasePath("https://10.0.2.11:6443").setVerifyingSsl(false).setAuthentication(new AccessTokenAuthentication("eyJhbGciOiJSUzI1NiIsImtpZCI6ImQ4Slh0Mk9lMzd0TXNlZW9sbGRRMUVfRWtYSHVnNnFwMG11TmhYR3dWM2cifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJteS1hZG1pbi10b2tlbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJteS1hZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImMxYjgyNmU0LTM4YzctNGI1Yy05MzliLTU3MmExNzQ4ZjhjNiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTpteS1hZG1pbiJ9.giP37iGgtXoBCPRj4YBu0ooovb8SbOXuMyAfQx5erzbh-s1AJZTsMVho-Hu2VlyeRcQ7AkLy44EUMdf__yy0XR44qXYRlN6-gG0yAMHTSt_mBbfbpt35uJ39jAnmFlS9SGgTfzAJdjoDzA6Vhq7_njab6Dkc9wmYuIAR4Q1fUEjIdkVb-558xlqegouUd4TNC855p6gwUoTLMZaNo1wGMHEa94HV37ECpGsQ2gSr4nEw29LQOHei96HfRuBdJa7lLhnuaqqKqE8tR9DuGVN5adtmC-AnSabRlkCgjM7KmB3b7BBndlRuG4ZcuARCCNvrbUM0N_Z43hL6PgEtSXFmxg"))// .setAuthentication(new AccessTokenAuthentication("eyJhbGciOiJSUzI1NiIsImtpZCI6ImQ4Slh0Mk9lMzd0TXNlZW9sbGRRMUVfRWtYSHVnNnFwMG11TmhYR3dWM2cifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi10b2tlbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJobC1hZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6Ijc4MDk1MDgwLWE2MWYtNGQ0Ni05YTUyLTYxYzMxOTAyYzIyMCIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTpobC1hZG1pbiJ9.Gy8xiiLngFopG6EJVAUIsP7n9jQqsP6rWEg8q6LcqpaQ42FXYVX01o1wsqi6u5l3H5D4_dI-GjOU1ajc8Y_g4lZu-ClCxn360tsoJ6ZaCg7fuW4LIA2Mr1gT-rv7yLKhYplF6LDwEwsqlAh3nZopoWvMPtAKWfUQ0rI6q3CoNbpben7DAoJljmZRTa63QSjpnYH8hyZGfkgtXYhe6NC1wF0Q3FQJ5yWO1-oaDpkus3sjFa34OJmWx_VR8g-bAUlkrC5GFVMSEFytXGb1MlYSP3W0muel6-C7d-dWZBT7GV_kQrkgP8PYQC1i3weoA19t8JqT2CX1G1WmKo_F2DFktw")).build();Configuration.setDefaultApiClient(client);System.out.println(client);CustomObjectsApi apiInstance = new CustomObjectsApi(client);try {String group = "monitoring.coreos.com"; // String | The custom resource's group nameString version = "v1"; // String | The custom resource's versionString plural = "prometheusrules"; // String | The custom resource's plural name. For TPRs this would be lowercase plural kind.Object body = null; // Object | The JSON schema of the Resource to create.String pretty = "true"; // String | If 'true', then the output is pretty printed.APIlistClusterCustomObjectRequest aPIlistClusterCustomObjectRequest = apiInstance.listClusterCustomObject(group, version, plural);Object result = aPIlistClusterCustomObjectRequest.execute();System.out.println(JSON.toJSON(result));System.out.println("-----------------------------");APIlistNamespacedCustomObjectRequest aPIlistNamespacedCustomObjectRequest = apiInstance.listNamespacedCustomObject(group, version, pretty, plural);result = aPIlistNamespacedCustomObjectRequest.execute();System.out.println(result);System.out.println("-----------------------------");} catch (ApiException e) {System.err.println("Exception when calling CustomObjectsApi#listNamespacedCustomObject");System.err.println("Status code: " + e.getCode());System.err.println("Reason: " + e.getResponseBody());System.err.println("Response headers: " + e.getResponseHeaders());e.printStackTrace();}catch (Exception e) {e.printStackTrace();}try {String group = "monitoring.coreos.com"; // String | The custom resource's group nameString version = "v1"; // String | The custom resource's versionString plural = "prometheusrules"; // String | The custom resource's plural name. For TPRs this would be lowercase plural kind.String pretty = "true"; // String | If 'true', then the output is pretty printed.String namespace = "monitoring";V1PrometheusRule v1PrometheusRule = new V1PrometheusRule();v1PrometheusRule.setKind("PrometheusRule");v1PrometheusRule.setApiVersion("monitoring.coreos.com/v1");V1ObjectMeta v1ObjectMeta = new V1ObjectMeta();Map<String, String> labelsMap = new HashMap<String, String>();labelsMap.put("prometheus", "k8s");labelsMap.put("ole", "alert-rules");v1ObjectMeta.setLabels(labelsMap);v1ObjectMeta.setName("custom-rule2");v1ObjectMeta.setNamespace("monitoring");v1PrometheusRule.setMetadata(v1ObjectMeta);V1PrometheusRuleSpec v1PrometheusRuleSpec = new V1PrometheusRuleSpec();List<V1PrometheusRuleSpecGroups> groups = new ArrayList<V1PrometheusRuleSpecGroups>();V1PrometheusRuleSpecGroups v1PrometheusRuleSpecGroups = new V1PrometheusRuleSpecGroups();v1PrometheusRuleSpecGroups.setName("disk");groups.add(v1PrometheusRuleSpecGroups);v1PrometheusRuleSpec.setGroups(groups);List<V1PrometheusRuleSpecRules> rules = new ArrayList<V1PrometheusRuleSpecRules>();V1PrometheusRuleSpecRules v1PrometheusRuleSpecRules = new V1PrometheusRuleSpecRules();v1PrometheusRuleSpecRules.setAlert("diskFree");Map<String, String> annotationsMap = new HashMap<String, String>();annotationsMap.put("value", "{{$value}}");annotationsMap.put("summary", "{{ $labels.job }}  项目实例 {{ $labels.instance }} 磁盘使用率大于 80%");annotationsMap.put("description", "{{ $labels.instance }}  {{ $labels.mountpoint }}  磁盘使用率大于80%  (当前的值: {{ $value }}%),请及时处理");v1PrometheusRuleSpecRules.setAnnotations(annotationsMap);v1PrometheusRuleSpecRules.setExpr("(1-(node_filesystem_free_bytes{fstype=~\"ext4|xfs\",mountpoint!=\"/boot\"} / node_filesystem_size_bytes{fstype=~\"ext4|xfs\",mountpoint!=\"/boot\"}) )*100 > 80");v1PrometheusRuleSpecRules.setFor("1m");Map<String, String> labelsMap2 = new HashMap<String, String>();labelsMap2.put("level", "disaster");labelsMap2.put("severity", "warning");v1PrometheusRuleSpecRules.setLabels(labelsMap2);rules.add(v1PrometheusRuleSpecRules);v1PrometheusRuleSpecGroups.setRules(rules);v1PrometheusRule.setSpec(v1PrometheusRuleSpec);APIcreateNamespacedCustomObjectRequest aPIcreateNamespacedCustomObjectRequest = apiInstance.createNamespacedCustomObject(group, version, namespace, plural, v1PrometheusRule);aPIcreateNamespacedCustomObjectRequest.pretty(pretty);Object result = aPIcreateNamespacedCustomObjectRequest.execute();System.out.println(JSON.toJSON(result));} catch (ApiException e) {System.err.println("Exception when calling CustomObjectsApi#createNamespacedCustomObject");System.err.println("Status code: " + e.getCode());System.err.println("Reason: " + e.getResponseBody());System.err.println("Response headers: " + e.getResponseHeaders());e.printStackTrace();}catch (Exception e) {e.printStackTrace();}try {String group = "monitoring.coreos.com"; // String | The custom resource's group nameString version = "v1"; // String | The custom resource's versionString plural = "prometheusrules"; // String | The custom resource's plural name. For TPRs this would be lowercase plural kind.String pretty = "true"; // String | If 'true', then the output is pretty printed.String namespace = "monitoring";String name = "";APIdeleteNamespacedCustomObjectRequest aPIdeleteNamespacedCustomObjectRequest = apiInstance.deleteNamespacedCustomObject(group, version, namespace, plural, name);Object result = aPIdeleteNamespacedCustomObjectRequest.execute();System.out.println(JSON.toJSON(result));} catch (ApiException e) {System.err.println("Exception when calling CustomObjectsApi#aPIdeleteNamespacedCustomObjectRequest");System.err.println("Status code: " + e.getCode());System.err.println("Reason: " + e.getResponseBody());System.err.println("Response headers: " + e.getResponseHeaders());e.printStackTrace();}catch (Exception e) {e.printStackTrace();}}/*** @param filename yaml文件名称* @return 返回yaml文件中对应的json数据*/public static String yamlToJson(String filename) {String jsonData;try {// 创建Yaml对象Yaml yaml = new Yaml();// 打开文件输入流FileInputStream input = new FileInputStream(filename);// 读取整个文件为一个Map对象,如果yaml文件为列表,则数据类型为listMap<String, Object> data = yaml.load(input);// 创建ObjectMapper对象用于将数据转换为JSONObjectMapper mapper = new ObjectMapper();// 启用格式化输出mapper.enable(SerializationFeature.INDENT_OUTPUT);// 将数据转换为JSON字符串jsonData = mapper.writeValueAsString(data);// 返回读取的数据return jsonData;} catch (Exception e) {e.printStackTrace();}return null;}
}

https://kkgithub.com/kubernetes-client/java/blob/master/kubernetes/docs/CustomObjectsApi.md#createClusterCustomObject

代码中需要用到的变量值查看

查看k8s的自定义资源

kubectl get customresourcedefinitions.apiextensions.k8s.io

查看自定义资源的group和version信息

kubectl explain prometheusrules.monitoring.coreos.com

查看自定义资源的plural信息

kubectl describe customresourcedefinitions.apiextensions.k8s.io  prometheusrules.monitoring.coreos.com

删除自定义资源的实例

kubectl delete prometheusrules.monitoring.coreos.com custom-rule -n monitoring

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

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

相关文章

超越OpenAI GPT-4o,Yi-Lightning指南:中国AI大模型新巅峰

Yi-Lightning 是零一万物公司最新发布的旗舰模型&#xff0c;它在国际权威盲测榜单 LMSYS 上超越了硅谷知名 OpenAI GPT-4o-2024-05-13、Anthropic Claude 3.5 Sonnet&#xff0c;排名世界第六&#xff0c;中国第一&#xff0c;这标志着中国大模型首次实现超越 OpenAI GPT-4o 的…

node.js下载安装以及环境配置超详细教程【Windows版本】

node安装以及环境变量配置 Step1&#xff1a;选择版本进行安装Step2&#xff1a;安装Node.jsStep3&#xff1a;环境配置Step4&#xff1a;检查node.js是否成功安装Step5&#xff1a;npm修改下载镜像 Step1&#xff1a;选择版本进行安装 Node.js 安装包及源码下载地址为 Node.…

从0到1搭建大数据平台v1.0

文章目录 一、 文看懂大数据的技术生态1 大数据2 大数据核心技术2.1 HDFS分布式文件系统2.2 MapReduce计算引擎2.3 Hive数据仓库2.4 快一点吧 Spark/Flink2.5 Oozie / Azkaban任务调度2.6 yarn资源管理器2.7 数据采集 Sqoop / Flume / DataX/Kafka 3 从0到1搭建大数据平台 二、…

【Qt6聊天室项目】 主界面功能实现

1. 获取当前用户的个人信息 1.1 前后端逻辑分析&#xff08;主界面功能&#xff09; 主界面上所有的前后端交互逻辑相同&#xff0c;分析到加载会话列表后其余功能仅实现。 核心逻辑总结 异步请求-响应模型 客户端发起请求&#xff0c;向服务器发送包含会话ID的请求服务端处…

Map(一)

HashMap 和 Hashtable 的区别 线程是否安全&#xff1a; HashMap 是非线程安全的&#xff0c;Hashtable 是线程安全的,因为 Hashtable 内部的方法基本都经过synchronized 修饰。&#xff08;如果你要保证线程安全的话就使用 ConcurrentHashMap 吧&#xff01;&#xff09;&…

C# 委托简述

1.委托 1.1什么是委托 委托委托 官网解释: 委托是安全封装方法的类型&#xff0c;类似于 C 和 C 中的函数指针。 与 C 函数指针不同的是&#xff0c;委托是面向对象的、类型安全的和可靠的。 委托的类型由委托的名称确定。 个人理解:委托就是一个方法的模板。它可以接收…

云渲染主要是分布式(分机)渲染,如何使用blender云渲染呢?

云渲染主要是分布式&#xff08;分机&#xff09;渲染&#xff0c;比如一个镜头同时开20-100张3090显卡的机器渲染&#xff0c;就能同时渲染20-100帧&#xff0c;渲染不仅不占用自己电脑&#xff0c;效率也将增加几十上百倍&#xff01; blender使用教程如下&#xff1a; 第一…

Ansible 的脚本 --- playbooks剧本

playbooks 本身由以下各部分组成 &#xff08;1&#xff09;Tasks&#xff1a;任务&#xff0c;即通过 task 调用 ansible 的模板将多个操作组织在一个 playbook 中运行 &#xff08;2&#xff09;Vars&#xff1a;变量 &#xff08;3&#xff09;Templates&#xff1a;模板 &a…

qt QMainWindow详解

一、概述 QMainWindow继承自QWidget&#xff0c;并提供了一个预定义的布局&#xff0c;将窗口分成了菜单栏、工具栏、状态栏和中央部件区域。这些区域共同构成了一个功能丰富的主窗口&#xff0c;使得应用程序的开发更加简单和高效。 二、QMainWindow的常用组件及功能 菜单栏&…

CSS的外边距合并规则

有时候&#xff0c;我们给组件设置了外边距&#xff0c;但是在实际运行可能和预期不符&#xff0c;这里有一个知识点叫外边距合并规则 比如我们这里有三个容器&#xff0c;A和B都设置了外边距10px&#xff0c;那他们在水平方向的间距是一个求和关系&#xff0c;一共是20px 但…

物联网之超声波测距模块、arduino、esp32

MENU 原理硬件电路设计软件程序设计 原理 超声波是一种频率高于20000Hz的声波&#xff0c;功率密度为p≥0.3W/cm&#xff0c;它的方向性好&#xff0c;反射能力强&#xff0c;易于获得较集中的声能。超声波用于许多不同的领域&#xff0c;比如检测物体和测量距离&#xff0c;清…

JAVA Maven 的安装与配置

一、下载地址 官方网站&#xff1a;Maven – Download Apache Maven 我这里是3.8.6版本 二、安装步骤 maven安装之前要先安装jdk&#xff0c;请确保你的系统已经安装了jdk环境。 1.将下载好的 Maven 进行解压 apache-maven-3.6.8-bin.zip 2.配置本地仓库:修改 conf/settin…

理解计算机系统_简述链接

前言 以<深入理解计算机系统>(以下称“本书”)内容为基础&#xff0c;对程序的整个过程进行梳理。本书内容对整个计算机系统做了系统性导引,每部分内容都是单独的一门课.学习深度根据自己需要来定 引入 源代码在机器层面,是以指令存在的.指令包含了指令码和操作…

vscode离线状态ssh连接不断输入密码登不上:配置commit_id

如题&#xff0c;vscode在一个离线服务器上&#xff0c;通过remote-ssh登录远程服务器&#xff0c;不断弹出密码框&#xff0c;总是进不去&#xff0c;后来了解到主要是不同vscode版本需要下载对应抑制commit-id的vscode-server-linux-x64.tar.gz包。 1&#xff09;vscode, 点…

html小游戏-飞机大战

敌机图片&#xff1a; 子弹图片&#xff1a; 我方飞机&#xff1a; 目录结构 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>飞机大战</title><style>* {margin: 0;padding: 0;}#ga…

WebView渲染异常导致闪退解决方案

背景&#xff1a; App主页面使用了大量WebView容器(10个以上)显示图表信息&#xff0c;最新发现bugly上面出现一些关于浏览器Native Crash&#xff0c;如下&#xff1a; 经排查&#xff0c;是WebView渲染失败导致Crash&#xff0c;可以通过webView.loadUrl("chrome://cra…

如何微调(Fine-tuning)大语言模型?

导读 本文介绍了微调的基本概念&#xff0c;以及如何对语言模型进行微调。 从 GPT3 到 ChatGPT、从GPT4 到 GitHub copilot的过程&#xff0c;微调在其中扮演了重要角色。什么是微调&#xff08;fine-tuning&#xff09;&#xff1f;微调能解决什么问题&#xff1f;什么是 Lo…

计算机网络:数据链路层 —— 以太网(Ethernet)

文章目录 局域网局域网的主要特征 以太网以太网的发展100BASE-T 以太网物理层标准 吉比特以太网载波延伸物理层标准 10吉比特以太网汇聚层交换机物理层标准 40/100吉比特以太网传输媒体 局域网 局域网&#xff08;Local Area Network, LAN&#xff09;是一种计算机网络&#x…

Newstar_week1_week2_wp

week1 wp crypto 一眼秒了 n费马分解再rsa flag&#xff1a; import libnum import gmpy2 from Crypto.Util.number import * p 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297…

PostgreSQL的学习心得和知识总结(一百五十六)|auto_explain — log execution plans of slow queries

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《PostgreSQL数据库内核分析》 2、参考书籍&#xff1a;《数据库事务处理的艺术&#xff1a;事务管理与并发控制》 3、PostgreSQL数据库仓库…