EdgeGallery开发指南

API接口

简介

EdgeGallery支持第三方业务系统通过北向接口网关调用EdgeGallery的业务接口。调用流程如下图所示(融合前端edgegallery-fe包含融合前端界面以及北向接口网关功能,通过浏览器访问时打开的是融合前端的界面,通过IP:Port/urlPrefix的形式访问的是其作为北向接口网关的其它组件后端API):

目前由WebsiteGateway来承担北向接口网关的职责,具体是由通过WebsiteGateway运行起来的各业务平台前端来承担。 所以北向接口调用的Endpoint可以使用任意一个业务平台前端的Endpoint。如下:

平台

架构

endpoint

说明

EdgeGallery融合前端

融合

​​https://{PORTAL_IP}:30095​​

推荐使用该endpoint

AppStore平台前端

独立

​​https://{PORTAL_IP}:30091​​

Developer平台前端

独立

​​https://{PORTAL_IP}:30092​​

新版本1.5.2已弃用,访问会出现Bug

Mecm平台前端

独立

​​https://{PORTAL_IP}:30093​​

Atp平台前端

独立

​​https://{PORTAL_IP}:30094​​

通过北向接口调用各平台的业务接口时,URL按照如下格式调用:

https://x.x.x.x:30095/{urlPrefix}/{业务接口自身的URL路径}

其中urlPrefix是各平台在网关中定义的路由前缀,定义如下表所示:

平台

urlPrefix

AppStore

mec-appstore

Developer

mec-developer

Mecm-Inventory

mecm-inventory

Mecm-APPO

mecm-appo

Mecm-APM

mecm-apm

ATP

mec-atp

除了以上关于各业务平台以及MEO相关的URL以外,还有MEPM相关的URL,该URL通过Ingress访问,访问URL为:

https://10.8.59.12:31252/{urlPrefix}/{业务接口自身的URL}

其中urlPrefix是各平台在网关中定义的路由前缀,定义如下表所示:

平台

urlPrefix

Backend Service

mepm-fe

/

mepm-fe:8200

lcmcontroller

/lcmcontroller

mecm-mepm-lcmcontroller:8094

apprulemgr

/apprulemgr

mecm-mepm-apprulemgr:8096

rescontroller

/rescontroller

mecm-mepm-rescontroller:8098

EdgeGallery各个组件的Service/NodePort情况如下(仅供参考,新版本有一定变化):

Component

Pod Name

Service Name

Node Port

Internal Port

appstore-be

appstore-be-0

appstore-be-svc

ClusterIP

8099

appstore-fe

appstore-fe

appstore-fe-svc

30091

8443

appstore-be-postgres

appstore-be-postgres-0

appstore-be-postgres-svc

ClusterIP

5432

developer-be

developer-be-0

N/A

N/A

N/A

developer-fe

developer-fe

developer-fe-svc

30092

8443

developer-be-postgres

developer-be-postgres-0

developer-be-postgres-svc

ClusterIP

5432

file-system

file-system

file-system-svc

30090

9500

filesystem-postgres

filesystem-postgres

filesystem-postgres

ClusterIP

5432

healthcheck

healthcheck

healthcheck-svc

32759

9527

healthcheck-m

healthcheck-m

healthcheck-m-svc

32757

9529

user-mgmt

user-mgmt

user-mgmt-svc

30067

8067

user-mgmt-postgres

user-mgmt-postgres-0

user-mgmt-postgres-svc

ClusterIP

5432

user-mgmt-redis

user-mgmt-redis-0

user-mgmt-redis-svc

ClusterIP

6379

service-center

service-center

service-center

ClusterIP

30100

mecm-fe

mecm-fe

mecm-fe-svc

30093

8443

mecm-appo

mecm-appo

mecm-appo-svc

30201

8091

mecm-apm

mecm-apm

mecm-apm-svc

30202

8092

mecm-inventory

mecm-inventory

mecm-inventory-svc

30203

8093

mecm-north

mecm-north

mecm-north-svc

30303

8102

mecm-applcm-controller

mecm-applcm-controller

mecm-applcm-controller-svc

30204

8094

mecm-resource-controller

mecm-resource-controller

mecm-resource-controller-svc

31952

8098

mecm-applcm-k8splugin

mecm-applcm-k8splugin

mecm-applcm-k8splugin-svc

30205

8095

mepserver

mepserver-deploy

mepserver-service

ClusterIP

8080

mepauth

mepauth-deploy

mepauth-service

ClusterIP

8088

kong-apigw

apigw-kongy

kong-service

30443

8443

mep-postgre-db

pg-deploy

pg-service

ClusterIP

5432

ServiceComb端口列表:

Component

Service Name

REST Port

Spring Server Port (default 8080)

appstore-be

mec-appstore

8099

8099

appstore-fe

appstore-fe

8080

8443

developer-be

mec-developer

9082

9082

developer-fe

developer-fe

8080

8443

user-mgmt

user-mgmt-be

8067

8067

user-mgmt-fe

user-mgmt-fe

8080

8443

调用AppStore接口示例

使用前需要安装新版本的Postman,较老版本可能无法上传文件导致调用人脸识别API接口返回500错误,新版本下载链接如下:http://10.8.56.160:8082/Postman-win64-Setup.exe(文尾附带静态资源服务器的启动YAML文件)

使用前关闭SSL证书认证:

  1. 获取XSRF-TOKEN
GET https://10.8.59.12:30095/

在发送请求后依次在Postman界面中点击Cookies、XSRF-TOKEN,就可以看到XSRF-TOKEN了:

  1. 获取AccessToken
POST https://10.8.59.12:30095/mec-usermgmt/v1/accesstoken

需要传递的字段:

Name

Definition

Type

Required

X-XSRF-TOKEN

XSRF-TOKEN

Header

userFlag

登录凭证(用户名/邮箱/手机号)

Body

password

密码

Body

需要注意Body部分只支持JSON格式,不支持form-data:

  1. 调用业务接口查看AppStore里面的app列表:
#示例
GET https://10.8.59.12:30095/mec-appstore/mec/appstore/v1/apps

通过H "X-XSRF-TOKEN: xxxx" -H "X-ACCESS-TOKEN: xxxx"两个token访问业务

​​开发者指导 — EdgeGallery Documentation 0.0.1 文档​​

MECM API
APM(应用包管理器)开放API接口

​​Projects/MECM/MECM_APIs/apm-swagger-openapi.yaml · EdgeGallery/docs - Gitee.com​​

APPO(应用编排器)开放API接口

​​Projects/MECM/MECM_APIs/appo-swagger-openapi.yaml · EdgeGallery/docs - 码云 - 开源中国 (gitee.com)​​

Inventory(应用视图)开放API接口

​​Projects/MECM/MECM_APIs/inventory-swagger-openapi.yaml · EdgeGallery/docs - 码云 - 开源中国 (gitee.com)​​

MEP开放API接口(Mp1和Mm5)

EdgeGallery从1.3.0版本开始MEP已经完全实现ETSI接口规范,具体实现接口及规范如下:

MEP server 接口分为两类,一类为遵循 ETSI MEC 011 v2.1.1 标准的 Mp1 接口,主要为 App 提供服务注册发现,App 状态通知订阅,Dns 规则获取等功能;另 一类为 Mm5 接口,主要为 MECM/MEPM 提供配置管理功能。MEP auth目前主要作为鉴权模块,为App提供token申请发放功能。

使用 Mp1 接口 mec 应用程序可以查询和激活/停用与其关联的 dns 规则。 该接口的实现按照 ETSI GS MEC 011 V2.1.1 文档

使用 Mp1 接口,mec 应用程序可以查询和修改与其关联的流量规则。 该接口的实现符合 ETSI GS MEC 011 V2.1.1 文档

使用 Mm5 接口,MECM 可以创建、查询、更新或删除应用程序配置,其中包括与应用程序关联的多个 dns 和流量规则。 此接口的实现在 ETSI GS MEC 010-1 V1.1.1 和 ETSI GS MEC 010-2 V2.1.1 文档中指定

​​Projects/MEP/MEP_Interfaces.md · EdgeGallery/docs - 码云 - 开源中国 (gitee.com)​​

补充这份文档(Mp1接口调用以及MEP单独部署):​​本地开发验证说明书​​

MEP Auth(无法调用,现在只能通过mep-agent进行MEP的授权)
#Service Authentication Interface
POST /mep/token
#AK/SK configuration interface
PUT /mep/appMng/v1/applications/{appInstanceId}/confs
Provider APP服务注册

生产者APP通过mep-agent自动将发布的能力注册到MEP平台上,用户无需手动注册,只需要在应用孵化流程的能力中心上补充如下信息即可:

其中服务名称和内部端口号必须填上传YAML文件中Service的名称和Cluster端口号,Service名称不区分大小写

除了在界面上填写相关信息实现MEP平台服务的自动注册,也可以由应用调用相关API接口进行手动注册:

#为指定APP注册服务(一般使用mep-agent自动注册,简化服务注册流程)
POST /mep/mec_service_mgmt/v1/applications/{appInstanceId}/services
#为APP手动注册服务实例(无意义的调用,因为没有指定Endpoint等信息):
curl -XPOST https://mep-api-gw.mep:8443/mep/mec_service_mgmt/v1/applications/644c0b3d-3e31-492d-9c7a-2392589b0cff/services -k -H "Authorization: Bearer $TOKEN" -d '{"serName":"FaceService","version":"1.0","state":"ACTIVE","serializer":"JSON"}'#更新APP指定服务信息
PUT /mep/mec_service_mgmt/v1/applications/{appInstanceId}/services/{serviceId}#删除APP指定服务
DELETE /mep/mec_service_mgmt/v1/applications/{appInstanceId}/services/{serviceId}#应用发送确认消息,确保实例化和启动阶段成功完成
POST /mep/mec_app_support/v1/applications/{appInstanceId}/confirm_ready
Consumer APP服务发现和能力调用(服务管理相关接口)
  1. 部署Consumer APP
  2. 进入Consumer APP的容器进程网络栈
docker top `docker ps | grep mep-agent | awk '{print $10}'`
PID=xxx #该值为上一步命令返回结果中的PID值
nsenter -t $PID -n
  1. 通过mep-agent获取AccessToken
TOKEN=`curl -XGET -H "Content-Type: application/json" http://localhost:8080/mep-agent/v1/token | python3 -c "import sys,json;data=json.load(sys.stdin);print(data['access_token'])"`
  1. 获取当前MEP平台的Service列表

经测试,该URL仅仅能在Pod内部通过ServiceName或者Service的ClusterIP访问,在主机或者集群外访问会提示Unauthorized

#自动获取MEP平台API网关Service的Cluster IP
KONG_GW=`kubectl get svc -n mep | grep mep-api-gw | awk '{print $3}'`
#查看MEP平台的能力
curl -XGET https://$KONG_GW:8443/mep/mec_service_mgmt/v1/services -H "Authorization: Bearer $TOKEN" -k

以上方式查询MEP平台的所有Service是不推荐的,推荐使用mep-agent的API接口进行服务发现:

curl -XGET http://localhost:8080/mep-agent/v1/endpoint/face-recognition | python3 -c "import sys,json;data=json.load(sys.stdin);print(data['uris'][0])"

该接口调用后会返回JSON格式的Response,从Response中取出data["uris"][0]的内容即为服务对应的Endpoint

  1. 调用MEP平台提供的能力

通过上一步获取到的服务Endpoint中的URI + 应用服务本身的URI路径,即可访问该应用提供的API接口

curl -XGET https://$KONG_GW:8443/face-recognition1eae39e5618a11eda9d7/v1/face-recognition/ -H "Authorization: Bearer $TOKEN" -k

其它服务管理相关接口

#查询指定应用提供的服务
GET /mep/mec_service_mgmt/v1/applications/{appInstanceId}/services
#查询APP指定服务
GET /mep/mec_service_mgmt/v1/applications/{appInstanceId}/services/{serviceId}GET /mep/mec_service_mgmt/v1/services
事件订阅相关接口(未实验)
#查询指定APP的可用事件订阅信息
GET /mep/mec_service_mgmt/v1/applications/{appInstanceId}/subscriptions#为指定APP注册可用事件订阅
POST /mep/mec_service_mgmt/v1/applications/{appInstanceId}/subscriptions#删除指定可用事件订阅信息
DELETE /mep/mec_service_mgmt/v1/applications/{appInstanceId}/subscriptions/{subscriptionId}#查询指定ID的可用事件订阅信息
GET /mep/mec_service_mgmt/v1/applications/{appInstanceId}/subscriptions/{subscriptionId}#查询指定APP的终止事件订阅信息
GET /mep/mec_app_support/v1/applications/{appInstanceId}/subscriptions
#为指定APP注册终止事件订阅
POST /mep/mec_app_support/v1/applications/{appInstanceId}/subscriptions
#删除指定终止事件订阅信息
DELETE /mep/mec_app_support/v1/applications/{appInstanceId}/subscriptions/{subscriptionId}
#查询指定ID的终止事件订阅信息
GET /mep/mec_app_support/v1/applications/{appInstanceId}/subscriptions/{subscriptionId}
DNS规则API接口

GET /mep/mec_app_support/v1/applications/{appInstanceId}/dns_rules
#Query a specific dns rule
GET /mep/mec_app_support/v1/applications/{appInstanceId}/dns_rules/{dnsRuleId}
#Update a specific dns rule
PUT /mep/mec_app_support/v1/applications/{appInstanceId}/dns_rules/{dnsRuleId}
流规则(未实验)
GET /mep/mec_app_support/v1/applications/{appInstanceId}/traffic_rules
GET /mep/mec_app_support/v1/applications/{appInstanceId}/traffic_rules/{trafficRuleId}
PUT /mep/mec_app_support/v1/applications/{appInstanceId}/traffic_rules/{trafficRuleId}
消费者应用集成Mp1接口代码实现网络开放能力调用

clientsdk.py,实现通过服务名查找对应的mep endpoint url:

import requests
import restclientclientObjects = {}def get_service_endpoint(service):"""This is a get service endpoint method for getting endpoint information by using service name"""url = restclient.MEP_AGENT_URL + "/mep-agent/v1/endpoint/{0}".format(service)headers = {'Content-Type': "application/json"}if restclient.SSL_ENABLED:url = restclient.HTTPS_URL + urlresponse = requests.get(url, headers=headers, verify=restclient.SSL_CACERTPATH)else:url = restclient.HTTP_URL + urlresponse = requests.get(url, headers=headers)# extracting data in json formatif response:data = response.json()url = data["uris"]print("mep endpoint url = " + url[0])return url[0]return ""class ClientFactory:"""This is a class for client factory implementation."""#  constructordef __init__(self, list_of_services):self.update_client_object(list_of_services)@classmethoddef update_client_object(cls, list_of_services):"""This is a update client object method to get endpoint information"""for service in list_of_services:endpoint = get_service_endpoint(service)if endpoint != "" and "http" in endpoint or "https" in endpoint:clientObjects[service] = restclient.RestClient(endpoint)@classmethoddef get_client_by_service_name(cls, service):"""This is a get client by service name method to return client object by using service name"""return clientObjects[service]

restclient.py,实现获取Mp1接口Token和发起Mp1接口服务调用请求:

import os
import requestsHTTP_URL = "http://"
HTTPS_URL = "https://"
MEP_AGENT_URL = os.environ.get("MEP_AGENT", "127.0.0.1:8080")
SSL_ENABLED = False
ACCESS_TOKEN_ENABLED = False
CONTENT_TYPE = "application/json"
SSL_CACERTPATH = "/usr/app/ssl/ca.crt"def get_access_token():"""Get access token from mep-agent and return access token."""url = MEP_AGENT_URL + "/mep-agent/v1/token"headers = {'Content-Type': CONTENT_TYPE}if SSL_ENABLED:url = HTTPS_URL + urlresponse = requests.get(url, headers=headers, verify=SSL_CACERTPATH)else:url = HTTP_URL + urlresponse = requests.get(url, headers=headers)# extracting data in json formatdata = response.json()access_token = data["access_token"]return access_tokenclass RestClient:"""This is a class for rest client implementation."""# rest client constructordef __init__(self, endpoint):self.endpoint = endpoint@classmethoddef get(cls, url):"""This is a get method for calling mep service via kong"""access_token = get_access_token()access_token = "Bearer " + access_tokenheaders = {'Authorization': access_token}requests.packages.urllib3.disable_warnings() #disable warningsresponse = requests.get(url, headers=headers, verify=False)return response.json()def get_endpoint(self):"""This is a get endpoint method for getting endpoint information"""return self.endpoint

调用clientsdk,clientsdk再调用restclient实现人脸识别业务的调用:

import clientsdk
listofService = ["face-recognition"]
sdk = clientsdk.ClientFactory(listofService)
# 通过ServiceName得到url
face_client = sdk.get_client_by_service_name(listofService[0])
# 通过url等到response
print(face_client.get(face_client.get_endpoint() + "/v1/face-recognition"))

SDK安装和使用指南

开发者平台集成了API多语言SDK的生成,通过Swagger Codegen组件自动生成API的客户端源码,本地安装后更加方便的调用edgegallery平台提供的API能力,目前支持python、java、go语言。

以人脸识别的SDK为例,下面详细介绍SDK的安装和使用教程:

  1. 进入融合前端集成开发选项中的能力中心,找到并点击人脸识别的能力,点击在线模拟器按钮,会出现SDK的下载页面

下载python3的开发环境镜像,使用以下Dockerfile构建安装好人脸识别SDK的镜像:

FROM python:3.10-slim
ADD face-recognition.tgz test.py /
RUN https_proxy=http://10.8.59.173:10809 pip3 install python-dateutil certifi urllib3 -i https://pypi.douban.com/simple && cd /face-recognition && python3 setup.py install

上面的Dockerfile文件中使用到的test.py文件的内容如下:

#!/usr/bin/python3
import swagger_client
test = swagger_client.FaceRecognitionApi()
print(test.health_check_get())

在EdgeGallery的集群中运行刚刚构建的镜像,进行调试:

kubectl run -it face-client --image face-client --image-pull-policy Never -- bash#进入容器后执行test.py脚本,可以看到健康检查接口返回为1,表示人脸识别应用运行正常
python3 test.py

5G网络能力集成

MEP集成5G网络能力的步骤如下:

  1. 确定网络能力需求:首先需要明确需要集成哪些5G网络能力,例如UPF(User Plane Function)、AMF(Access and Mobility Management Function)、SMF(Session Management Function)等等。根据业务需求和网络架构,选择需要集成的网络能力。
  2. 集成网络能力模块:根据选择的网络能力需求,选择对应的网络能力模块进行集成。这些模块可以是标准化的3GPP网络功能模块(5GC网元),也可以是自定义的网络功能模块。将这些模块打包成Docker镜像或者Kubernetes应用程序,部署到EdgeGallery中的Kubernetes集群上。
  3. 实现网络能力接口:为了让其他应用程序可以使用集成的网络能力,需要实现对应的网络能力接口。这些接口可以是标准的3GPP接口,也可以是自定义的RESTful API接口等。开发者可以使用API网关等技术,将网络能力接口暴露给其他应用程序。
  4. 集成网络能力SDK:为了简化开发者集成网络能力的流程,可以提供网络能力SDK(Software Development Kit)。这些SDK包含了网络能力模块和对应的接口实现,以及相关的文档和示例代码等。开发者可以使用这些SDK,快速集成所需的网络能力。

集成5G网络能力需要明确网络需求,选择对应的网络能力模块进行集成,实现对应的网络能力接口,并提供网络能力SDK以方便开发者集成。EdgeGallery提供了开放的平台和相关工具,方便开发者集成和管理各种网络能力和应用。

MEP Pod网络详解

由于应用需要使用MEP平台开放能力或者暴露网络能力给MEP平台,因此对于应用来说,需要具有调用MEP平台API接口的能力,并将这部分调用MEP平台API能力的代码集成在自己的应用代码中,才能正常将应用集成到MEC平台上,而应用调用MEP平台的API是通过在应用内集成mep-agent实现的,具体实现流程如下:

图中MEP的Pod暴露了2个Service(其它Service如dnsserver等未列出),同时通过Multus使用默认Calico网络创建了Pod的默认网卡,MACVLAN驱动为该Pod另外创建两张网卡mp1和mm5,分别负责Mm5接口和Mp1接口的API调用。mep-mm5的Service虽然定义的是Mm5接口的Service,但实际调用的是MEP中默认的Calico网卡,而Pod中通过Macvlan创建的另一张Mm5网卡没有被其它应用或Service调用,不知道这个是EdgeGallery v1.5.2版本的Bug还是故意这么做的。

EdgeGallery代码重构裁剪

  1. Postgres向国产数据库迁移,包括所有使用数据库的组件代码修改,4人/月
  2. MECM,包含MEPM和MEO,因为暂时不做MEO,所以需要理清MEPM与B/OSS的交互流程,另外lcmcontroller和k8splugin问题较多,经常出现业务部署失败的情况,4人/月
  3. MEP,包含DNS Server、Kong、MEP Auth、MEP Server四个组件,目前该组件Bug较多,需要投入人力解决,2人/月
  4. Appstore,偶尔出现发布失败的问题,需要优化,1人/月
  5. Developer,Swagger界面无法使用的问题需要投入人力解决,1人/月
  6. ATP,无需重构,投入人力理解测试原理,1人/月
  7. User-Mgmt,无需重构
  8. 与5GC的联调,N33/N5/N6接口适配,2人/月
  9. 前端界面,包括Developer、MEPM、MECM、ATP、Appstore,部分界面已经弃用,需投入人力研究是否可以裁剪,2人/月
  10. 便捷部署,与Kubernetes适配,和信创操作系统适配,2人/月

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

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

相关文章

【力扣hot100】23 合并K个排序链表(c++)解析

23 合并K个排序链表(c)解析 题解 23 合并K个排序链表(c)解析1.1 暴力求解1.2 逐一比较1.3 优先队列1.4 逐一合并1.5 分治 在解决「合并K个排序链表」这个问题之前,我们先来看一个更简单的问题: 如何合并两个有序链表?…

libVLC 动态视频壁纸

在 Windows 上,你可能需要使用 Windows API 来设置壁纸,而在 Linux 上,你可能需要使用某种桌面环境特有的方法。在 macOS 上,这一功能可能受到限制。 效果图如下所示: 以下是一个简单的示例,说明了如何在 …

【前端学习——js篇】11.元素可见区域

具体见:https://github.com/febobo/web-interview 11.元素可见区域 ①offsetTop、scrollTop offsetTop,元素的上外边框至包含元素的上内边框之间的像素距离,其他offset属性如下图所示: 下面再来了解下clientWidth、clientHeight…

文章解读与仿真程序复现思路——中国电机工程学报EI\CSCD\北大核心《考虑长周期供需不平衡风险的新型电力系统规划方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

codesys通过moudbus TCP连接西门子1214c,西门子做客户端

思路在codesys中发送数据到西门子,西门子原封不动的将数据传回。 1.首先配置codesys; 我设置了500个,但是好像发不这么多,只能120多个。因为什么来我忘了。但是这里不影响。 2.配置映射: 3.写代码 PROGRAM PLC_PRG VARarySendDa…

生产调度问题分类——机器视角

获取更多资讯,赶快关注上面的公众号吧! 文章目录 单机调度并行机调度流水车间调度作业车间调度柔性作业车间开放车间总结 生产调度问题是实际工作中广泛存在的运筹学问题,可以描述为“给定若干加工任务,根据已有的生产条件&#…

JavaWeb学习笔记01

一、教程简介 全新JAVAWEB(里程碑版) 一套更适合后端工程师学习的WEB教程 All in Java 1、后端 ① Spring全家桶及微服务框架 ② 高性能数据库和消息组件 ③ Web攻击防护安全控制手段 ④ 其他第三方SDK生态环境 ...... 2、前端 ① 视图三大件&…

C是用什么语言写出来的?

C是用什么语言写出来的? C语言的起源和发展是一个迭代过程: 1. 最初的C语言编译器的开发始于对B语言的改进。B语言是由Ken Thompson设计的,它是基于BCPL语言简化而来的。在开始前我有一些资料,是我根据网友给的问题精心整理了一份「 C语言的…

Sublime 彻底解决中文乱码

1. 按ctrl,打开Console,输入如下代码: import urllib.request,os; pf Package Control.sublime-package; ipp sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHand…

16:00面试,16:06就出来了,问的问题有点变态。。。

从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到8月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%…

07_Response

文章目录 案例(请求分发案例) Response响应行响应头响应体特殊响应头refreshContent-typeContent-dispositionlocation 案例(登录案例) 案例(请求分发案例) 场景:有多个请求 Http://localhost:…

逐步学习Go-并发通道chan(channel)

概述 Go的Routines并发模型是基于CSP,如果你看过七周七并发,那么你应该了解。 什么是CSP? "Communicating Sequential Processes"(CSP)这个词组的含义来自其英文直译以及在计算机科学中的使用环境。 CSP…

day 36 贪心算法 part05● 435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间

一遍过。首先把区间按左端点排序,然后右端点有两种情况。 假设是a区间,b区间。。。这样排列的顺序,那么 假设a[1]>b[0],如果a[1]>b[1],就应该以b[1]为准,否则以a[1]为准。 class Solution { public:static bo…

Android中运动事件的处理

1.目录 目录 1.目录 2.前言 3.程序演示 4.第二种程序示例 5.扩展 2.前言 触摸屏(TouchScreen)和滚动球(TrackBall)是 Android 中除了键盘之外的主要输入设备。如果需要使用触摸屏和滚动球,主要可以通过使用运动事…

渐变色x轴换行柱状图

// 系统上云率const optionBar {title: {text: 系统上云率,left: left,textStyle: {color: "#fff",fontSize: 14,fontWeight: 650,align: "center",},},color: [#32C5FF, #00F766, #EECB5F],grid: {top: 40,bottom: 0,},legend: { // 控制图例组件show: …

K8s Pod亲和性、污点、容忍度、生命周期与健康探测详解(上)

🐇明明跟你说过:个人主页 🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅 🔖行路有良友,便是天堂🔖 在上一章节中,我们详细探讨了Pod的概念、创建、…

逐步学习Go-协程goroutine

参考:逐步学习Go-协程goroutine – FOF编程网 什么是线程? 简单来说线程就是现代操作系统使用CPU的基本单元。线程基本包括了线程ID,程序计数器,寄存器和线程栈。线程共享进程的代码区,数据区和操作系统的资源。 线…

数据结构——排序算法

1、排序的概念 排序是指的是将一组数据(如数字、单词、记录等)按照某种特定的顺序(升序或降序)进行排列的过程。排序算法是实现排序的程序或方法,它们在软件开发和数据处理中扮演着至关重要的角色。 排序算法可以根据…

servlet开发详解

一、什么是servlet,干什么用的??? tomcat作为一个web服务器,也称作servlet容器。servlet只有放在web服务器中才能运行,不能独立运行。tomcat这个容器要做三件事:接收请求、处理请求和响应请求。…

文生视频大模型Sora的复现经验

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的…