【经验分享】容器云搭建的知识点
最近忙于备考没关注,有次点进某小黄鱼发现首页出现了我的笔记还被人收费了
虽然我也卖了一些资源,但我以交流、交换为主,笔记都是免费给别人看的
由于当时刚刚接触写的并不成熟,为了避免更多人花没必要的钱,所以决定公开出来
欢迎各位大佬指正文章内容
涉及技术比较多,只对技术进行简单介绍,不深入解释
概念
容器云(Container Cloud)是指基于容器技术提供的云计算服务,可以用于快速部署、管理和扩展应用程序。容器技术可以将应用程序和其依赖项打包到一个独立的可移植容器中,使得应用程序可以在任何环境中运行。容器云是一个概念,并不具体指什么。
kubernetes(K8s)是一个开源的容器编排引擎,用于自动部署、扩展和管理容器化应用程序。它可以帮助用户简化容器集群的管理,提高应用程序的可靠性和可扩展性。
kubeeasy是一个辅助工具,旨在简化 Kubernetes 的使用和管理。帮助用户更轻松地使用 Kubernetes,并且可以减少一些配置的复杂性,提高用户的工作效率。
详解:
kubernetes因为名字太长,又被称作k8s(因为中间有8个字母),它是作为容器编排工具存在的
我们常用的容器有docker、containerd,他们都有属于自己的客户端和服务器端
容器编排工具是为了提供统一的编排环境(编排工具不止有k8s,只是它最为出名)
在之前,我们需要在他们的客户端(如:crictl、nerdctl)进行我们的操作
同时有docker、containerd每一个容器都有自己的客户端很麻烦
k8s应用场景:
在传统部署项目中,所有功能都集成到一个服务器上,访问量一大就会大大增加服务器的负担
将功能分开来部署到多个服务器上,又造成了维护和更新的负担,需要到各个服务器上手动执行命令
k8s的出现,解决解决了这个麻烦的问题
k8s介于应用服务和服务器之间,能够运用策略,协调和管理多个应用服务
只需要一个yaml文件定义应用的部署顺序等信息,就能自动部署应用到各个服务器上,实现自动扩缩容、挂了后重新部署
k8s会将我们的服务器划分成两部分:控制平面(control plane)、工作节点(node)
控制平面负责控制工作节点,工作节点负责运行各个应用服务
k8s的服务原理
控制平面:
里面有一个api server 会提供一个api给我们
同时 api server 掌管着scheduler(调度器)、controller mgr(控制器管理器)
以前我们需要到处看哪台服务器资源充足,现在这个工作交给scheduler(调度器)完成
以前我们对服务器的创建、关闭服务,现在交给controller mgr(控制器管理器)完成
这些功能都会产生数据,这些数据都会保存至存储层(ETCD)
总的来说,控制平面内部有api server、scheduler、controller mgr、ETCD
工作节点:(可以是裸机服务器、虚拟机)
多个应用服务共享一台主机上的计算资源
只需将代码打包成容器镜像(将代码及其所需环境打包),就能一行命令将其部署
containerd runtime (容器运行时组件)负责下载和部署镜像
每一个应用服务都可以看成一个container
一般还搭配【日志收集器container】【监控采集器container】,这些container共同构成一个个pod
pod们运行在node上,pod可以从一个node调度到另一个node,还能进行重启、扩缩容的操作
所以pod是k8s中最小的调度单位
控制平面的controller mgr会控制node创建和关闭服务,kubelet就是node接收命令的组件
kube proxy是负责node之间的网络通信,负责将请求从节点级别路由到特定 Pod 中的容器
总的来说,工作节点内部有containerd runtime、kubelet、kubeproxy、pod
k8s的实际应用
控制平面和工作节点共同构成一个cluster(集群)
为了集群内部的服务能让外部用户使用,还需要提供一个ingress(入口控制器)
之前说到api server 提供了一个api给我们使用
我们可以通过kubectl来执行命令,kubectl会调用k8s的api部署服务
# 查看支持快速创建的资源
kubectl create --help# 重定向至yaml文件,并模拟执行
kubectl create deployment gitlab \
--image=gitlab/gitlab-ce:latest \
--port=80 \
--dry-run \
-oyaml > gitlab.yaml
kubectl apply -f xxx.yaml
kubectl会读取并解析yaml文件,发送给api server ,api server会驱使scheduler去通过ETCD提供的数据去寻找node,然后让control mgr 去控制node创建服务,kubelet收到control mgr的命令后,会驱使containerd runtime去拉取镜像、创建容器,最终完成pod的创建。完成部署
与传统服务部署的区别
传统部署方式,用户直接发送HTTP请求,就直接用到我们的服务,
k8s部署的服务,用户发送的请求会先到ingress(入口控制器)d到达k8s内部某个node的kube proxy上,再找到对应的pod,然后再转发到容器内的服务中,处理结果原路返回
个体由大到小为集群->node->pod->容器
本地实验注意:
在本地实验环境中,要添加网关,目前测试4G运存能够运行(开启SWAP,但是很慢)
如果要克隆,必须克隆《搭建本地训练环境知识点》中的【快照一:准备启动】快照
一、部署k8s集群
系统环境准备[两个节点都要做]
①setenforce 0
②sed -i “s/SELINUX=enforcing/SELINUX=disabled/g” /etc/selinux/config
③把网卡的UUID删除掉
本步骤是由官方提供的打包好的软件包,因此只需要做三步,关于k8s详细知识不在这里详述
上传软件包后,挂载到/mnt/,然后复制至/opt下(当然复制到哪里都行,只要能记住)
mount chinaskills_cloud_paas_v2.0.2.iso /mnt/
cp -rfv /mnt/* /opt/
# 取消挂载,养成习惯
umount /mnt/
mv /opt/kubeeasy /usr/bin/kubeeasy
kubeeasy是一个辅助快速部署k8s的工具,接下来使用工具快速部署
1,安装依赖
因为是两个节点都是一样安装依赖
所以参数host直接指明两个主机ip即可
[root@master ~]# kubeeasy install depend \
> --host 192.168.100.20,192.168.100.21 \
> --user root \
> --password 000000 \
> --offline-file /opt/dependencies/base-rpms.tar.gz
2,配置ssh免密钥
这里就要分清主次了,master就是master,worker就是worker
[root@master ~]# kubeeasy create ssh-keygen \
> --master 192.168.100.20 \
> --worker 192.168.100.21 \
> --user root --password 000000
3,安装kubernetes集群
这里也要分清主次
[root@master ~]# kubeeasy install kubernetes \
> --master 192.168.100.20 \
> --worker 192.168.100.21 \
> --user root \
> --password 000000 \
> --version 1.22.1 \
> --offline-file /opt/kubernetes.tar.gz
等待完成即可
二、部署Istio服务网格
文档官方中文文档
在刚刚的k8s中说到,k8s用于管理各个微服务,各个微服务都有一个代理接收apiserver的指令
istio其实也是一个代理,istio同样将服务网点分为控制平面和工作节点(Envoy Sidecar)
控制平面包括以下组件:
Pilot
:负责服务发现、流量路由和负载均衡。Mixer
:处理访问控制、日志记录和指标收集等策略和遥测功能。Citadel
:提供身份验证和授权功能。Galley
:负责配置管理和分发。
工作节点(称为Envoy Sidecar)则是每个微服务容器旁边的代理,它负责处理入站和出站的网络流量,并与控制平面进行通信。
工作节点的代理一般位于pod中,所有容器的流量进出都要经过他
--istio
表示部署istio
服务,而后面那个istio
表示名字,可自定义
kubeeasy add --istio istio
命名空间是 K8s
中用于隔离和组织集群资源的一种方式,可以更好地管理和组织您的应用程序和服务,就像文件夹一样,基于我们istio
的功能
kubectl create namespace images
kubectl label namespace images istio-injection=enabled
未来部署到这个namespace中的所有pod都将被注入Envoy代理
Istio的控制平面通过识别特定的标签来决定哪些Pod需要被注入Envoy代理
没有为命名空间添加相关标签,部署在其中的Pod将不会被自动注入Envoy代理,也无法享受到Istio提供的流量控制、安全性等功能。
三、kubevirt虚拟化
KubeVirt 是 Kubernetes 的虚拟化插件
应用场景:
虚拟机技术允许在物理硬件上创建一个或多个虚拟的计算环境,每个虚拟环境都可以运行自己的操作系统和应用程序,相互之间相互隔离,K8s最初是设计用于容器化应用程序的调度和管理,没有直接支持虚拟机的概念,所以在k8s集群中运行的传统虚拟机项目,仍然需要采取传统的运维手法,为了实现k8s统一调度管理,就需要安装KubeVirt插件
--virt
表明部署kubevirt,后面那个是名称,可自定义
kubeeasy add --virt kubevirt 运行它将执行:
1,检查必要的命令和连接是否存在。
2,应用kubevirt-operator.yaml文件来安装KubeVirt操作符。
3,等待KubeVirt组件的就绪状态。
4,应用kubevirt-cr.yaml文件来创建KubeVirt自定义资源。
5,等待KubeVirt组件的就绪状态。
6,应用multus-daemonset.yaml文件来安装Multus CNI插件。
7,等待Multus CNI插件的就绪状态。
8,应用multus-cni-macvlan.yaml文件来配置Macvlan网络。
9,检查KubeVirt组件的运行状态。
四、Harbor镜像仓库部署
Harbor 是一个开源的企业级容器镜像仓库,用于存储、分发和管理 Docker 镜像及其他容器相关的资源
Harbor 存储的是 Docker 镜像及其相关的资源,这些镜像可以由开发人员构建、推送到 Harbor,或者从外部镜像仓库拉取到 Harbor 中进行存储和管理。当容器运行时需要使用镜像时,它们可以从 Harbor 中拉取所需的镜像到节点的本地镜像存储中,并在容器内运行。
--registry
表示部署仓库服务,而后面那个harbor
表示部署什么仓库,不可随便自定义,必须在已配置的镜像仓库中,在文件config.yaml
中
[root@k8s-master-node1 ~]# kubeeasy config show
Current config:
default_registry: harbor.mydomain.com
registries:
- name: harborurl: https://harbor.mydomain.com
- name: dockerhuburl: https://registry.docker.com# 指定查看某个镜像仓库
[root@k8s-master-node1 ~]# kubeeasy registry show harbor
Registry Information:
Name: harbor
URL: https://harbor.mydomain.com
Credentials: username=xxxx password=xxxx
kubeeasy add --registry harbor运行它将执行:
1,检查 Docker 是否已安装,并显示 Docker 版本为 20.10.14。
2,检查 Docker Compose 是否已安装,并显示 Docker Compose 版本为 2.2.1。
3,加载 Harbor 镜像。
4,准备 Harbor 的配置文件。
5,启动 Harbor。
相关文章:
【经验分享】容器云搭建的知识点
最近忙于备考没关注,有次点进某小黄鱼发现首页出现了我的笔记还被人收费了 虽然我也卖了一些资源,但我以交流、交换为主,笔记都是免费给别人看的 由于当时刚刚接触写的并不成熟,为了避免更多人花没必要的钱,所以决定公…...
JAVA |日常开发中Websocket详解
JAVA |日常开发中Websocket详解 前言一、Websocket 概述1.1 定义1.2 优势 二、Websocket 协议基础2.1 握手过程2.2 消息格式2.3 数据传输方式 三、Java 中使用 Websocket3.1 Java WebSocket API(JSR - 356)3.2 第三方库(如 Tyrus&…...
30.攻防世界unserialize3
进入场景 解读一下 这个类 xctf 中有一个公共属性 $flag ,其值为 111 ,并且定义了一个 __wakeup 魔术方法,当对象被反序列化时会自动调用该方法,该方法会输出 bad requests 并终止程序的执行。 ?code提示了参数 <?php clas…...
IS-IS协议
IS-IS协议介绍 IS-IS(Intermediate System to Intermediate System)协议是一种链路状态的内部网关协议(IGP),用于在同一个自治系统(Autonomous System, AS)内部的路由器之间交换路由信息。IS-I…...
接口文档之swagger、kinife4j的基本使用
1.swagger3的使用: 1.1pom.xml中加入依赖: <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version> </dependency> <!--swagger的…...
Oracle plsqldev1106 安装及TNS配置
Oracle plsqldev1106 安装及TNS配置 下载好安装包,直接双击安装 点击 I Agree 默认是C盘的,我改了D盘,根据自己实际情况修改 这里用默认的for current user 也可以,我选了for all user 点Finish,等待安装完成即可 …...
[数据结构]无向图的深度优先非递归遍历
采用邻接表存储实现无向图的深度优先非递归遍历。 输入格式: 先输入两个整数(m,n)(分别表示待创建的图顶点数和边数),之后是m个顶点的信息,再之后是n 条边。 输出格式: 对每一组输入,在一行…...
Android后端签到flask迁移到rust的axum的过程-签到性能和便携
本次变更了以下内容: 为了使用之前ip2sta的ip到端点名的python,dic变量,将其存入redis hashset.使用地址/api/ip2dic 手动执行之.并且定义在/station/init,这个每天初始化redis的路径下.在rust axum使用redis 连接池在test中 ip2dic,IP转端点名,转本日此端网址.在前端的人名下…...
Android13开机向导
文章目录 前言需求-场景第三方资料说明需求思路按照平台 思路 从配置上去 feature换个思路,去feature。SimMissingActivity 判断跳过逻辑SetupWizardUtils 判断SIM 、 hasSystemFeature FEATURE_TELEPHONYPackageManager.FEATURE_TELEPHONYApplicationPackageManage…...
泷羽sec学习打卡-brupsuite6暴力破解与验证码识别绕过
声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都 与本人无关,切莫逾越法律红线,否则后果自负 关于brupsuite的那些事儿-验证码绕过以及字典爆破 如何利用brpsuite进行验证码绕过呢?1、下…...
vue季度选择器(antd2.0 版本无此控件,单独写一个)
vue季度选择器 效果显示 效果显示 <template><div><a-popoverplacement"bottom"overlayClassName"season-picker"trigger"click"v-model"showSeason"><template #content><div class"season-picker-b…...
Microsemi Libero使用技巧11——CoreUARTAPB RX管脚分配时不显示
调用串口IP核CoreUARTAPB,并例化到顶层设计,发现UART_RX管脚在进行管脚分配时没有显示出来,最后发现是CoreAPB3总线IP核配置不对导致,改为如下配置后正常。...
回归预测 | MATLAB实现SVM-Adaboost集成学习结合支持向量机多输入单输出回归预测
回归预测 | MATLAB实现SVM-Adaboost集成学习结合支持向量机多输入单输出回归预测 目录 回归预测 | MATLAB实现SVM-Adaboost集成学习结合支持向量机多输入单输出回归预测基本介绍程序设计基本介绍 SVM-Adaboost集成学习是一种将支持向量机(SVM)与AdaBoost算法相结合的集成学习…...
Keil-MDK开发环境编译后axf自动转换bin格式文件
编译选项添加如下,调用fromelf工具自动完成转换: fromelf --bin -o "$LL.bin" "#L"...
计算机组成原理(五):程序装载
在计算机组成原理中,程序装载(Program Loading)是指将程序从外存(如磁盘)加载到内存中,并为其运行做好准备的过程。程序装载是实现程序从静态存储状态到动态运行状态的关键环节,涉及地址映射、内…...
开发EDA工具常用的三方开源
EDA软件是制造芯片重要工具,是现在举国的大难题。这个工具难在哪里,几句话说不清,但它确实也有一些非常通用的功能,这些功能依赖一些成熟的轮子,这些轮子,就是三方的开源项目,下面列举一些常用的…...
微信小程序中 crypto-js 加解密全攻略
一、引言 在微信小程序开发中,数据的安全至关重要。加解密技术在保护用户数据和应用程序的安全性方面起着关键作用。小程序在与服务器进行数据交互时,面临着数据泄露、篡改等安全风险。为了确保用户信息的安全,选择合适的加解密算法变得尤为…...
Vue2 - 最新实现将多个文件批量导出为ZIP压缩包格式并下载功能,纯前端下载多个文件打包输出成zip格式,vue2将文件批量下载打包成ZIP下载保存本地(后端二进制文件流/base64图片/url
前言 Vue3 版本,请访问 这篇文章。 在 vue2 | nuxt2 项目开发中,详解实现把多个文件组合成一个ZIP压缩包格式下载到用户本地,将文件批量下载打包成zip格式并自定义压缩包命名名称,vue批量下载文件并导出为压缩包的功能,如何将后端返回的二进制文件流打包成zip格式,支持任…...
The Rise and Potential of Large Language ModelBased Agents:A Survey---摘要、背景、引言
题目 基于大语言模型的Agent的兴起与发展前景 论文地址:https://arxiv.org/pdf/2309.07864.pdf 项目地址:https:/github.com/WooooDyy./LLM-Agent–Paper-List 摘要 长期以来,人类一直在追求等同于或超越人类水平的人工智能(A),…...
【unity】从零开始制作平台跳跃游戏--界面的认识,添加第一个角色!
在上一篇文章中,我们已经完成了unity的环境配置与安装⬇️ 【Unity】环境配置与安装-CSDN博客 接下来,让我们开始新建一个项目吧! 新建项目 首先进入unityHub的项目页面,点击“新项目”: 我们这个系列将会以2D平台…...
Java中的Stream
1. 什么是 Stream? Stream 是 Java 8 引入的一种新方式,目的是帮助我们更简洁、更高效地处理集合(如 List、Set、Map 等)。你可以把 Stream 想象成一条“流水线”,数据就像是流水线上的原材料,经过流水线的…...
ARM学习(36)静态扫描规则学习以及工具使用
笔者来学习了解一下静态扫描以及其规则,并且亲身是实践一下对arm 架构的代码进行扫描。 1、静态扫描认识 静态扫描:对代码源文件按照一定的规则进行扫描,来发现一些潜在的问题或者风险,因为不涉及代码运行,所以其一般只是发现一些规范或则一些质量问题,当然这些可能存在潜…...
前端将base64转pdf页面预览
前端将base64转pdf页面预览 <embed :src"pdfList" width"100%" height"100%" type"application/pdf" />pdfList.value data:application/pdf;base64,${res}//后端传jpg或pdf格式可直接 :src“返回内容”显示...
Java-26 深入浅出 Spring - 实现简易Ioc-02 无IoC与AOP场景下实现业务
点一下关注吧!!!非常感谢!!持续更新!!! 大数据篇正在更新!https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了: MyBatisÿ…...
能不能用一句话或者简洁地凝练深度学习的本质和精髓?
深度学习就是学习输入与输出之间的映射关系。 深度学习模型本质上只是个参数量很大的函数,其中函数的参数可以通过训练样本进行调整。 根据训练样本的不同,进一步可以分为以下几类: 一、给定输入以及对应的输出,其中输出是唯一的…...
我的宝贵经验
在技术的浩瀚海洋中,一份优秀的技术文档宛如精准的航海图。它是知识传承的载体,是团队协作的桥梁,更是产品成功的幕后英雄。然而,打造这样一份出色的技术文档并非易事。你是否在为如何清晰阐释复杂技术而苦恼?是否纠结…...
发现一个对话框中的按钮,全部失效,点击都没有任何反应,已经解决
前端问题,技术vue2,ts。 发现一个对话框中的按钮,全部失效,点击都没有任何反应。 因为我只在template标签中加入下面这个代码,并没有注册。 只要有一个子组件没有注册,就会影响所有的按钮,使当前…...
深度学习中损失函数(loss function)介绍
深度学习中损失函数(loss function)介绍 在深度学习的宏伟城堡中,损失函数扮演着国王的角色,它决定了模型训练的方向和目标。损失函数,也被称为代价函数,是衡量模型预测与实际结果之间差异的函数。在深度学习的训练过程中&…...
【渗透测试】信息收集二
其他信息收集 在渗透测试中,历史漏洞信息收集是一项重要的工作,以下是相关介绍: 历史漏洞信息收集的重要性 提高效率:通过收集目标系统或应用程序的历史漏洞信息,可以快速定位可能存在的安全问题,避免重复…...
前端三大框架 Vue、React 和 Angular 的市场占比分析
一、引言 ?? 随着前端技术的迅速发展,Vue.js、React 和 Angular 已成为全球最受欢迎的三大前端框架。在国内外,不同的框架在市场中的占比和流行程度存在显著差异。本文将从全球和中国市场的角度,对这三大框架的市场占比进行分析࿰…...
Gitlab服务管理和仓库项目权限管理
Gitlab服务管理 gitlab-ctl start # 启动所有 gitlab 组件; gitlab-ctl stop # 停止所有 gitlab 组件; gitlab-ctl restart # 重启所有 gitlab 组件; gitlab-ctl status …...
MySQL ON DUPLICATE KEY UPDATE影响行数
目录 分析为什么Updates返回7 总结 数据库更新日志如下 insertOrUpdateList|> Preparing: INSERT INTO clue_user_tag (vuid, tag_id, tag_type, content) VALUES (?, ?, ?, ?) , (?, ?, ?, ?) , (?, ?, ?, ?) , (?, ?, ?, ?) ON DUPLICATE KEY UPDATE …...
美团2024年秋招第一场笔试【前端移动端】
美团2024年秋招第一场笔试【前端&移动端】 2024/12/12 1.在一个长度为28的数组中删除第5个元素时(元素序号:1~28),需要向前移动(23)个元素。 2.如下图一个树型结构,其结点E在树的中序遍历…...
【EXCEL】 获取多列中 不为空的那一个数据
从多个表格筛选出来的上班时间是下表这样的 我要把他们放在同一列,这样方便后续处理,合并列输入下面这个公式即可 日期不加 TEXT() 函数 转日期格式;将得到是一串数字 TEXT(TEXTJOIN(", ",TRUE,B2:F2),&qu…...
Qt 开发笔记2
1> 样式表加载 一定要在Ui 初始化之前调用, 之后调用会不生效。 2> 设置QlineEdit输入框 具体四周的间距: setTextMargins(m_nLeftTextMargin, m_nTopTextMargin, m_nRightTextMargin, m_nBottomTextMargin);3> 设置背景图(平滑不…...
R学习——数据框
目录 1数据框的合并 2数据框的访问 2.1 通过索引[] 2.2符号$访问 2.3 attach访问 2.4 with访问 1数据框的合并 当每个内容存储为单独的向量,data.frame可以进行这些内容单独数据框合并。 2数据框的访问 2.1 通过索引[] [i]输出对应的列 [i,]输出对应的行 …...
深入详解人工智能机器学习常见算法中的K-means聚类
目录 引言 1. K-means聚类的基本概念 1.1 K-means聚类的定义 1.2 K-means聚类的核心思想 1.3 K-means聚类的目标函数 2. K-means聚类的核心原理 2.1 初始化 2.2 分配 2.3 更新 2.4 迭代 3. K-means聚类的具体实现 3.1 K-means聚类的算法流程 3.2 K-means聚类的Pyt…...
TDengine SpringBoot操作
TDengine与Spring Boot的结合可以为开发者提供一个高性能、分布式的物联网、工业大数据处理平台,同时利用Spring Boot的简化配置和快速开发特性。以下是对TDengine与Spring Boot集成的详细解析: 一、TDengine简介 TDengine是由涛思数据开发的一款高性能…...
【sgFileLink】自定义组件:基于el-link、el-icon标签构建文件超链接组件,支持垃圾桶删除、点击预览视频/音频/图片/PDF格式文件
sgFileLink源代码 <template><div :class"$options.name"><el-link click.stop"clickFile(data)"><img :src"getSrc(data)" /><span>{{ getFileNameAndSize(data) }}</span></el-link><el-linkcl…...
C语言实验 函数一
时间:2024.12.14 6-1 弹球距离 double dist (double h,double p) {double sum = h,height;height = h*p;while(height>=TOL){sum += height * 2; //上行下行都算,所以是两倍的距离。height *=p;}return sum; } 6-2 使用函数输出一个整数的逆序数 错误代码:运行超…...
惠普Laser Jet MFP M437nda复印机成像装置严重不足及更换传输卷故障解决方法
惠普Laser Jet MFP M437nda复印机成像装置严重不足及更换传输卷故障解决方法,记录维修那点事儿,普通维修工的日常维修点滴; 惠普Laser Jet MFP M437nda复印机成像装置严重不足维修方法 如果复印及打印的效果没有问题的情况下我们也可以不更换套鼓及显影剂,那么不更换套鼓及…...
委托(Delegate)和事件(Event)-(下篇)
委托(Delegate)与事件(Event)-(上篇)-CSDN博客 上一篇内容! 一、创建非静态委托 在C#中,使用非静态委托意味着将委托绑定到类的实例方法上,而不是静态方法。这允许你通过委托调用特定对象上的方法&am…...
ios 开发配置蓝牙
如果使用了蓝牙功能, 又没有配置, 会出现以下错误: This app has crashed because it attempted to access privacy-sensitive data without a usage description. The apps Info.plist must contain an NSBluetoothAlwaysUsageDescription key with a string value explaini…...
JVM 栈帧结构详解
在 Java 虚拟机(JVM)中,栈帧(Stack Frame)是用于支持方法调用和方法执行的关键数据结构。每个方法从调用开始到执行完成,都对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。本文将详细介绍 JVM 栈帧的结构及…...
HTML和JavaScript实现商品购物系统
下面是一个更全面的商品购物系统示例,包含新增商品、商品的增加删除以及结算找零的功能。这个系统使用HTML和JavaScript实现。 1.功能说明: 这个应用程序使用纯HTML和JavaScript实现。 包含一个商品列表和一个购物车区域。商品列表中有几个示例商品&a…...
(长期更新)《零基础入门 ArcGIS(ArcMap) 》实验三----学校选址与路径规划(超超超详细!!!)
目录 实验三 学校选址与道路规划 3.1 实验内容及目的 3.1.1 实验内容 3.1.2 实验目的 3.2 实验方案 3.3 操作流程 3.3.1 环境设置 3.3.2 地势分析 (1)提取坡度: (2)重分类: 3.3.3 学校点分析 (1)欧氏距离: (2)重分类: 3.3.4 娱乐场所点分析 (1)欧氏距离…...
ip_done
文章目录 路由结论 IP分片 数据链路层重谈Mac地址MAC帧报头局域网的通信原理MSS,以及MAC帧对上层的影响ARP协议 1.公司是不是这样呢? 类似的要给运营商交钱,构建公司的子网,具有公司级别的入口路由器 2.为什么要这样呢?? IP地…...
Mysql体系架构剖析——岁月云实战笔记
1 体系架构 理论内容阅读了mysql体系架构剖析,其他的根据岁月云的实战进行记录。 1.1 连接层 mysql最上层为连接服务,引入线程池,允许多台客户端连接,主要工作:连接处理、授权认证、安全防护、管理连接等。 连接处理&a…...
【卷积神经网络】AlexNet实践
构建模型 模版搭建 # 定义一个AlexNet模型类def __init__(self):# 调用父类的构造函数(如果继承自nn.Module的话)super(AlexNet, self).__init__()# ReLU激活函数self.ReLU nn.ReLU()# 卷积层1:输入1个通道(灰度图)&a…...
LF CRLF
这个提示的含义是:Git 检测到你当前的 file3.txt 文件中使用了 LF(换行符,Line Feed,\n) 作为换行符,但在你系统的 Git 配置中,指定要将其转换为 CRLF(回车换行,Carriage…...