可以做业务推广的网站有哪些/优化关键词的方法包括
基于 Debain11 构建 asp.net core 6.x 的基础运行时镜像
- Linux 环境说明
- Debian 简介
- Debian 发行版本
- 关于 Debian 11
- Linux 常用基础工具
- Dockerfile 中 RUN 指令
- RUN 语法格式
- RUN 语义说明
- 编写 Dockerfile 构建 Runtime 基础镜像
- ASP.NET Core Runtime 基础镜像
- Dockerfile 编写
- Windows 环境使用 WSL2 安装 Docker Desktop 工具
- docker build 构建 image 镜像
- 查看 docker 镜像信息
- 总结
Linux 环境说明
此处我们基于 Debian11
的 Linux
发行版,实现目标是编写 Dockerfile
构建 asp.net core 6.x
框架的 runtime
基础镜像。
在 Docker 容器化运行环境中,应用程序运行中存在异常情况,此时可以借助一些常用的基础工具方便排查,因此我们需要在 asp.net core 6.x runtime
基础镜像添加 linux 环境常用的基础工具。
注意:基础镜像的构建需要考虑镜像的体积和打包工具的安全隐患,此处不做过多讨论。
Debian 简介
1、Debian 是一个社区
来自世界各地的数以千计的志愿者共同为 Debian
操作系统工作,注重自由和开源软件。认识 Debian
计划。
2、Debian 是一个操作系统
Debian
是一个自由的操作系统,由 Debian
计划开发和维护。Debian
是一个自由的 Linux
发行版,添加了数以千计的应用程序以满足用户的需要。
关于 Debian 更多信息,请查看 => https://www.debian.org/intro/index.zh-cn.html
Debian 发行版本
Debian
一直维护着至少三个发行版本:稳定版(stable),测试版(testing)和不稳定版(unstable)。
1、稳定版(stable
- 稳定版包含了 Debian 官方最近一次发行的软件包。
- 作为 Debian 的正式发行版本,它是我们优先推荐给用户您选用的版本。
- 当前 Debian 的稳定版版本号是 11,开发代号为
bullseye
。最初版本为 11.0,于 2021 年 08 月 14 日发布,其更新 11.6 已于 2022 年 12 月 17 日发布。
2、测试版(testing)
- 测试版包含了那些暂时未被收录进入稳定版的软件包,但它们已经进入了候选队列。使用这个版本的最大益处在于它拥有更多版本较新的软件。
- 想要了解 什么是测试版以及 如何成为稳定版的更多信息,请看
Debian FAQ
。 - 当前的测试版版本代号是
bookworm
。
3、不稳定版(unstable)
- 不稳定版存放了 Debian 现行的开发工作。通常,只有开发者和那些喜欢过惊险刺激生活的人选用该版本。推荐使用不稳定版的用户订阅 debian-devel-announce 邮件列表,以接收关于重大变更的通知,比如有可能导致问题的升级。
- 不稳定版的版本代号永远都被称为 sid。
4、发行生命周期
Debian 通常会按照一定的规律每隔一段时间发布一个新稳定版。 对每个稳定发行版本,用户可以得到三年的完整支持以及额外两年的长期支持。
请查看 Debian Releases
维基页面和 Debian LTS
维基页面以了解详细信息。
更多详细信息,请查看 => https://www.debian.org/releases/
关于 Debian 11
Debian 11
带有 Linux 5.10
内核,这是一个长期支持(LTS
)版本。一个新的内核显然意味着对硬件有更好的支持,特别是较新的硬件以及性能的改进。
这里我们使用 Debian 11
,代号为 bullseye
,网络安装,用于 64 位 PC(amd64) debian-11.6.0-amd64-netinst.iso
。
关于 Debian 11 更多信息:
- 【debian-11.6.0-amd64-netinst.iso】下载地址 => https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-11.6.0-amd64-netinst.iso
- 新发布的 Debian 11 “Bullseye” Linux 发行版的 7 大亮点 => https://linux.cn/article-13695-1.html
Linux 常用基础工具
当在 Linux
服务器执行 telnet
命令时,如果提示 command not found: telnet
,说明服务器上并未安装 telnet
命令,需要安装此命令。
下面介绍在 linux
服务器如何安装 telnet、curl、ifconfig、vim、ping
等工具。
首先,介绍一个安装工具时必须的命令 apt install
。apt install
是应用程序管理器,用于一键安装软件包,与源码安装不同的是,该指令会自动检测并安装依赖,而且用 apt
安装的包都是成熟的软件包,基本不存在安装包有严重 bug 或者文件缺失的情况。
# 1、首先执行如下命令,更新相关资源。将所有包的来源更新,也就是提取最新的包信息,这一命令使用率非常高。
apt update# 2、安装 telnet
apt install telnet# 3、安装 curl
apt install curl# 4、安装 ifconfig
apt install net-tools# 5、安装 vim
apt install vim# 6、安装ping
apt install inetutils-ping# 7、安装 ipaddr
apt install iproute2
上面这些基础工具的安装,可以整合一条命令,执行操作如下:
apt update && apt install -y net-tools iproute2 iputils-ping telnet curl vim
执行上面命令,如果不是 root
用户,需在前面添加 sudo
提权,继续执行操作。
Dockerfile 中 RUN 指令
上面我们介绍了 linux
环境中常用的基础工具,此处我们 app
应用程序是容器化运行环境,为了方便排查异常信息,通常会在 runtime
基础镜像中添加一些常用工具。
在编写 Dickerfile
构建 asp.net core runtime
镜像环境时,我们先来了解下 Dockerfile
中的 RUN
指令。
RUN 语法格式
在 Dockerfile
中 RUN
指令的编写格式有两种:
-
【shell 形式】,命令在
shell
中运行,默认情况下,Linux
是/bin/sh -c
、Windows
是cmd /S /C
; -
【exec 形式】,按照
JSON Array
格式解析,意味着必须使用双引号【"】包含参数,而不能使用单引号【’】;
RUN 语义说明
RUN
指令在当前镜像的顶层上新建层执行命令,同时提交执行结果。提交的结果会在接下来的 Dockerfile
处理。
分层 RUN
指令和生成提交符合 Docker
的核心理念,即:提交便利,容器可以依据任意历史镜像构建,像源代码管理一样。
- exec 形式能够避免 shell 形式表达含义模糊的问题,同时能够在一个不包含 shell 命令的基础镜像上执行 RUN 指令。
- shell 形式的默认 shell 可以通过 SHELL 修改。
- shell 形式中,若是指令参数过长,可以使用符号【\】换行显示。
# RUN 参数不换行.
RUN /bin/bash -c 'source $HOME/.bashrc; echo $HOME'
# RUN 参数换行.
RUN /bin/bash -c 'source $HOME/.bashrc; \
echo $HOME'
- exec 形式是按照
JSON Array
格式解析,必须使用双引号【"】包含参数。
与 shell 形式不同,exec 形式不会调用 shell 命令行,意味着不会进行 shell 处理。
=> 例如:运行 `RUN ["echo", "$HOME"]` 不会对 `$HOME` 进行变量替换。
如果需要 shell 处理,那么可以使用 shell 形式或直接执行 shell;
=> 例如:`RUN["sh","-c","echo $HOME"]`。
当使用 exec 形式直接执行 shell 时,与 shell 形式类似,应用的 shell 是宿主机而非 Docker。
- exec 形式中的
JSON
,必须转译反斜杠【\】。Windows
系统中,反斜杠【\】是路径分隔符,是需要特别关注的。否则,由于不是有效的 JSON,执行时会出现异常从而失败。
# 错误写法
RUN ["c:\windows\system32\tasklist.exe"]# 正确写法
RUN ["c:\\windows\\system32\\tasklist.exe"]
- RUN 指令的缓存不会在下次构建时自动失效。
RUN apt dist-upgrade -y 指令的缓存将在下次构建时重用。
RUN 指令的缓存可以通过使用 `--no-cache` 标志置为无效,例如:docker build --no-cache
- RUN 指令的缓存可由
ADD
和COPY
指令置为无效。
编写 Dockerfile 构建 Runtime 基础镜像
在 Docker
中,编写 Dockerfile
是有个细节需要注意,RUN
指令执行多个命令时,可以合并写成一个,在 Dockerfile
中每执行一个指令都会对应的生成一个层,相应的构建镜像的体积也会随之增加。
ASP.NET Core Runtime 基础镜像
- 微软 MCR 容器镜像仓库,ASP.NET Core Runtime
访问地址:https://mcr.microsoft.com/en-us/product/dotnet/aspnet/about
Dockerfile 编写
上面我们介绍了 RUN 指令的语法格式,同样的这里我们为了尽量建设镜像构建的层,通常情况我们会把多个命令整合为一个 RUN 指令执行,完整 Dockerfile 编写如下:
FROM mcr.microsoft.com/dotnet/aspnet:6.0
# Debian 源添加参考
# https://developer.aliyun.com/mirror/debian?spm=a2c6h.13651102.0.0.3e221b1137LtM1
# https://mirrors.ustc.edu.cn/help/debian.html
# https://mirrors.tuna.tsinghua.edu.cn/help/debian/# RUN 使用 shell 语法
RUN sed -i -E 's/(deb|security).debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list
RUN sed -i 's/snapshot.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
RUN apt update && apt install -y net-tools iproute2 iputils-ping telnet curl vim# RUN 使用 exec 语法
#RUN ["apt", "update"]
#RUN ["apt","install","-y","vim","curl","telnet","iputils-ping","iproute2","net-tools"]
Windows 环境使用 WSL2 安装 Docker Desktop 工具
注意:在 windows 环境使用 Dockerfile 构建镜像,需要安装 Docker Desktop 工具并启动运行。
Windows
环境安装 Docker Desktop
工具,推荐使用 WSL2
模式运行。此处不过多讲解安装细节,请自行查看资料镜像安装。
Docker Engine
添加如下信息:
{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"dns": ["8.8.8.8","8.8.4.4"],"experimental": false,"features": {"buildkit": true},"insecure-registries": ["https://hub.atguigu.com"],"registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://mirror.ccs.tencentyun.com","https://docker.mirrors.ustc.edu.cn","https://cr.console.aliyun.com/"]
}
docker build 构建 image 镜像
- 执行
docker build
构建命令:
docker build -t aspnet:6.0-debian11-amd64 ./
- 输出如下
image
镜像构建步骤信息:
[+] Building 0.6s (9/9) FINISHED=> [internal] load build definition from Dockerfile 0.0s=> => transferring dockerfile: 32B 0.0s=> [internal] load .dockerignore 0.0s=> => transferring context: 2B 0.0s=> [internal] load metadata for mcr.microsoft.com/dotnet/aspnet:6.0 0.4s=> [1/5] FROM mcr.microsoft.com/dotnet/aspnet:6.0@sha256:a4ac0ac8b96842c3d4161339e641d335e44f52647bdeb4ed619ac83 0.0s=> CACHED [2/5] RUN sed -i -E 's/(deb|security).debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list 0.0s=> CACHED [3/5] RUN sed -i 's/snapshot.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list 0.0s=> CACHED [4/5] RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list 0.0s=> CACHED [5/5] RUN apt update && apt install -y net-tools iproute2 iputils-ping telnet curl vim 0.0s=> exporting to image 0.0s=> => exporting layers 0.0s=> => writing image sha256:8e4e01b9340eef513279899468870ff57826a1e4f3a6f0b3689212d88f3119eb 0.0s=> => naming to docker.io/library/aspnet:6.0-debian11-amd64 0.0sUse 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
从上面输出的信息可以看出,Dockerfile 文件中每一行单独编写的命令,都会当做一个步骤执行,一共执行 [5/5] 个步骤。
查看 docker 镜像信息
此时我打开 Docker Desktop
桌面端工具,选择 Images ,搜索框输入 tag
名称【aspnet-debian11-amd64:6.0
】就可以看到刚才构建的镜像,体积 270.54 MB
。
和原生【mcr.microsoft.com/dotnet/aspnet:6.0
】镜像相比,体积增加 170.51 MB
,新增的这部分体积,主要是我们在这个镜像的基础上,添加了一些 linux
环境的常用小工具(net-tools、iproute2、iputils-ping、telnet、curl、vim
)。
我们可以点击【aspnet-debian11-amd64:6.0
】镜像,即可进入镜像查看构建的层信息,如下所示:
查看上面的镜像层信息,同样的我们也可以使用命令操作查看,操作如下:
docker inspect
: 获取容器/镜像的元数据。
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
OPTIONS 说明:
- -f :指定返回值的模板文件。
- -s :显示总的文件大小。
- –type :为指定类型返回JSON。
具体命令如下:
docker inspect aspnet:6.0-debian11-amd64
输出如下信息:
[{"Id": "sha256:8e4e01b9340eef513279899468870ff57826a1e4f3a6f0b3689212d88f3119eb","RepoTags": ["aspnet:6.0-debian11-amd64"],"RepoDigests": [],"Parent": "","Comment": "buildkit.dockerfile.v0","Created": "2023-02-19T07:44:04.106566658Z","Container": "","ContainerConfig": {"Hostname": "","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"Tty": false,"OpenStdin": false,"StdinOnce": false,"Env": null,"Cmd": null,"Image": "","Volumes": null,"WorkingDir": "","Entrypoint": null,"OnBuild": null,"Labels": null},"DockerVersion": "","Author": "","Config": {"Hostname": "","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"Tty": false,"OpenStdin": false,"StdinOnce": false,"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","ASPNETCORE_URLS=http://+:80","DOTNET_RUNNING_IN_CONTAINER=true","DOTNET_VERSION=6.0.14","ASPNET_VERSION=6.0.14"],"Cmd": ["bash"],"Image": "","Volumes": null,"WorkingDir": "","Entrypoint": null,"OnBuild": null,"Labels": null},"Architecture": "amd64","Os": "linux","Size": 270542384,"VirtualSize": 270542384,"GraphDriver": {"Data": {"LowerDir": "/var/lib/docker/overlay2/z1zc2q5ucw0srd1q6fz9dv5zs/diff:/var/lib/docker/overlay2/4vf1uowirpwps4nw4guvfr610/diff:/var/lib/docker/overlay2/xzob6lo9w8ita21r9o6qdowh3/diff:/var/lib/docker/overlay2/1a04b4cea9f8ea832c5f91a20d4ddd4f29f6ec5acb8ebbda6848282ec8159590/diff:/var/lib/docker/overlay2/5036b7ee8c50e873affdb40f9d1fd0e37573631587ed6b1f45347a10995ad935/diff:/var/lib/docker/overlay2/f7d1f588113cb3de37d0cd574614db511a098ba64e18f02ade45cb4b1d431fb6/diff:/var/lib/docker/overlay2/f0c4b961c76c425d8383575ca78c176a890d78d871a5cf60daab2ddc96ffee8d/diff:/var/lib/docker/overlay2/f7c839b494ad006d157084d919c15e812e10e57a8ac1c5cdda4d0150bf494f21/diff","MergedDir": "/var/lib/docker/overlay2/9zxjyc54rcaf107f6cj6fhiax/merged","UpperDir": "/var/lib/docker/overlay2/9zxjyc54rcaf107f6cj6fhiax/diff","WorkDir": "/var/lib/docker/overlay2/9zxjyc54rcaf107f6cj6fhiax/work"},"Name": "overlay2"},"RootFS": {"Type": "layers","Layers": ["sha256:4695cdfb426a05673a100e69d2fe9810d9ab2b3dd88ead97c6a3627246d83815","sha256:f30d150c01520fbbbdd1bedcef3f940d809c82a46e08301dcc713903d7272ba3","sha256:fe674e2b138caf1ef6a67419d5fb0a9081ca0759d97ce711be80d5d4d67145e1","sha256:ff13768cb51ea8fe1831d93c2d18690c3fdca8cfee40b75a738f62b133413573","sha256:355b7bb8c23e0d867141b0af69ecb6df39730bcd1b6c754cfae9ad36ca3f5572","sha256:8d56eaae8bfea0a5eac4caf4350fa1987c162cd7dba828aa292cc15c3e90d91b","sha256:b7d0c701d1f04294b2b98d3103c3856c9cbabc592cde48d3e07eb03bff7cb18a","sha256:46ef367d7575beda39ffd3774b4d47b29c2fe0b628f1269b4626053ca44169d5","sha256:6809bcac556f83ca4489ba09980a5bef05c9bc7463a45e4dac7fb600beec1c4e"]},"Metadata": {"LastTagTime": "2023-02-19T08:46:50.196739744Z"}}
]
镜像构建后,此时如果有镜像仓库(腾讯云平台准备 Docker 私有镜像仓库或者 IDC 机房搭建),确保 vm 和宿主机之间通信可以正常登录访问,此处以腾讯云 Docker 私有镜像仓库为例:
# 登录腾讯云docker registry
sudo docker login --username=[user] ccr.ccs.tencentyun.com
# 提示输入对应的密码即可# 从 registry 拉取镜像
sudo docker pull ccr.ccs.tencentyun.com/dotnet/image-name:[tag]# 将镜像推送到 registry
sudo docker login --username=[user] ccr.ccs.tencentyun.com
sudo docker tag [ImageId|image-name:tag] ccr.ccs.tencentyun.com/dotnet/aspnet:6.0-debian11-amd64
sudo docker push ccr.ccs.tencentyun.com/dotnet/aspnet:6.0-debian11-amd64
到这里我们就演示完 Dockerfile
的编写,以及 image
镜像构建的全过程。
总结
掌握 Dockerfile
文件语法格式的编写,熟悉 RUN
指令中多个命令的编写方式(减少 image
镜像构建层,相应的减少镜像体积大小),顺便熟悉下 Docker
镜像的构建 docker build
和 镜像的 push(推送)和 pull(拉取)
基本操作,感兴趣的小伙伴可以跟随上面描述动手实践起来,可以加深对 Docker
镜像构建的理解。
相关文章:

基于 Debain11 构建 asp.net core 6.x 的基础运行时镜像
基于 Debain11 构建 asp.net core 6.x 的基础运行时镜像Linux 环境说明Debian 简介Debian 发行版本关于 Debian 11Linux 常用基础工具Dockerfile 中 RUN 指令RUN 语法格式RUN 语义说明编写 Dockerfile 构建 Runtime 基础镜像ASP.NET Core Runtime 基础镜像Dockerfile 编写Windo…...

【无人机路径规划】基于IRM和RRTstar进行无人机路径规划(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

Spring Boot中使用@Autowire装配接口是怎么回事?
在学习使用Spring Boot框架时候,发现了一个特别的现象UserMapper是一个接口,在另一个类中好像直接使用Autowired装配了一个UserMapper对象???我纳闷了一会儿,接口居然可以直接实例对象吗?根据我…...

23种设计模式介绍(Python示例讲解)
文章目录一、概述二、设计模式七种原则三、设计模式示例讲解1)创建型模式1、工厂模式(Factory Method)【1】简单工厂模式(不属于GOF设计模式之一)【2】工厂方法模式2、抽象工厂模式(AbstractFactory&#x…...

初识Hadoop,走进大数据世界
文章目录数据!数据!遇到的问题Hadoop的出现相较于其他系统的优势关系型数据库网格计算本文章属于Hadoop系列文章,分享Hadoop相关知识。后续文章中会继续分享Hadoop的组件、MapReduce、HDFS、Hbase、Flume、Pig、Spark、Hadoop集群管理系统以及…...

加油站会员管理小程序实战开发教程14 会员充值
我们上篇介绍了会员开卡的业务,开卡是为了创建会员卡的信息。有了会员卡信息后我们就可以给会员进行充值。当然了充值这个业务是由会员自主发起的。 按照我们的产品原型,我们在我的页面以轮播图的形式循环展示当前会员的所有卡信息。这个会员卡信息需要先用变量从数据源读取…...

leetcode 1792. 最大平均通过率
一所学校里有一些班级,每个班级里有一些学生,现在每个班都会进行一场期末考试。给你一个二维数组 classes ,其中 classes[i] [passi, totali] ,表示你提前知道了第 i 个班级总共有 totali 个学生,其中只有 passi 个学…...

15-基础加强-2-xml(约束)枚举注解
文章目录1.xml1.1概述【理解】(不用看)1.2标签的规则【应用】1.3语法规则【应用】1.4xml解析【应用】1.5DTD约束【理解】1.5.1 引入DTD约束的三种方法1.5.2 DTD语法(会阅读,然后根据约束来写)1.6 schema约束【理解】1.6.1 编写schema约束1.6.…...

13:高级篇 - CTK 事件管理机制(signal/slot)
作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 在《12:高级篇 - CTK 事件管理机制(sendEvent/postEvent)》一文中,我们介绍了如何进行插件间通信 - sendEvent()/postEvent() + ctkEventHandler。然而,除了这种方式之外,EventAdmin 还提供了另一种方…...

群晖-第1章-IPV6的DDNS
群晖-第1章-IPV6的DDNS 方案:腾讯云群晖DS920 本文参考群晖ipv6 DDNS-go教程-牧野狂歌,感谢原作者的分享。 这篇文章只记录了我需要的部分,其他的可以查看原文,原文还记录了更多的内容,可能帮到你。 一、购买域名 …...

centos7系统-kubeadm安装k8s集群(v1.26版本)亲测有效,解决各种坑可供参考
文章目录硬件要求可省略的步骤配置虚拟机ip设置阿里镜像源各服务器初始化配置配置主节点的主机名称配置从节点的主机名称配置各节点的Host文件关闭各节点的防火墙关闭selinux永久禁用各节点的交换分区同步各节点的时间将桥接的IPv4流量传递到iptables的链(三台都执行…...

帮助指令 man ,help及文档常用管理指令
帮助指令 man,help 1. man 当我们想要了解某个命令如何使用,及选项的含义是什么以及配置文件的帮助信息时,可以使用 man [命令或配置文件],这样便可以获得到帮助提示信息了。 语法格式:man [命令或者配置文件] 比如…...

电子科技大学操作系统期末复习笔记(五):文件管理
目录 前言 文件管理:基础 基本概念 文件 文件系统 文件系统的实现模型 文件的组成 文件名 文件分类 文件结构 逻辑结构 物理结构 练习题 文件管理:目录 文件控制块FCB FCB:File Control Block FCB信息 目录 基本概念 目…...

SpringBoot+ActiveMQ-发布订阅模式(生产端)
SpringBootActiveMQ-发布订阅模式(生产端)Topic 主题* 消息消费者(订阅方式)消费该消息* 消费生产者将发布到topic中,同时有多个消息消费者(订阅)消费该消息* 这种方式和点对点方式不同…...

Android实例仿真之三
目录 四 Android架构探究 五 大骨架仿真 六 Android实例分析思路拓展 四 Android架构探究 首先,Android系统所带来的好处,就在于它本身代码的开放性,这提供了一个学习、借鉴的平台。这对分析仿真而言,本身就是一大利好…...

关于MySQL的limit优化
1、前提 提示:只适用于InnoDB引擎 2、InnoDB存储特点 它把索引和数据放在了一个文件中,就是聚集索引。这与MyISAM引擎是不一样的。 3、SQL示例 -- 给cve字段建立索引 select * from cnnvd where cveCVE-2022-24808 limit 300000,10;由于M…...

Java-Stream流基本使用
collection.stream将会破坏原有的数据结构,可以通过collect方法收集,可以用Collectors提供的构造器,add等方法构造形成新的数据结构。 HashSet<List<Integer>> rs new HashSet<>(); rs.stream().toList();Collection集合转…...

Liunx(狂神课堂笔记)
一.常用命令 1. cd 切换目录 cd ./* 当前目录cd /* 绝对路径cd .. 返回上一级目录cd ~ 回到当前目录pwd …...

【史上最全面esp32教程】点灯大师篇
文章目录前言ESP32简介认识arduino的两个函数点灯步骤函数介绍LED灯闪烁流水灯总结前言 esp32有很多的功能,例如wifi,蓝牙等,这节我们学习最简单的点灯。 提示:以下是本篇文章正文内容,下面案例可供参考 ESP32简介 …...

【Java 面试合集】内存中为什么要区分栈和堆
内存中为什么要区分栈和堆 1. 概述 嗨,大家好Java 面试合集又来了,今天我们分享的主题很大众化以及普通。无论是Java 语言本身还是别的语言都会有所涉及,但是今天我们从Java角度来讲下 2. 分析 今天我们会从多个方向来分享这个话题 2.1 栈是…...

【NLP实战】Python字符串处理
一、Python字符串基本操作 1. 去掉前后的特殊字符(strip) Python的strip操作可以去除字符串前后的空格(不改变原串)下例将前后的空格均删掉👇 str 人工智能 str.strip() # OUT:人工智能rstrip删除右边的空格&a…...

17.CSS伪类
举一个简单的例子来说明什么是伪类? 从之前的代码中,如下图,我们像给这两个列表中的某一列单独设置样式,我们该如何做呢? 我们肯定会选择在li标签上添加class去实现,如下 开始标记结束标记实际元素 <…...

数据链路层
一.以太网数据链路层考虑的是相邻两个节点(通过网线/光纤、无线直接相连的两个设备)之间的传输,这里的典型协议中最知名的就是“以太网”这个协议了数据链路层,也规定了物理层的内容以太网帧格式:IP地址用来描述整个传…...

投票需要什么流程微信投票互助平台的免费投票平台搭建
“最美家政人”网络评选投票_免费小程序投票推广_小程序投票平台好处手机互联网给所有人都带来不同程度的便利,而微信已经成为国民的系统级别的应用。现在很多人都会在微信群或朋友圈里转发投票,对于运营及推广来说找一个合适的投票小程序能够提高工作效…...

数据结构——算法的时间复杂度
🌇个人主页:_麦麦_ 📚今日名言:生命中曾经有过的所有灿烂,都终究需要用寂寞来偿还。——《百年孤独》 目录 一、前言 二、正文 1.算法效率 1.1如何衡量一个算法的好坏 1.2算法的复杂度 2. 时间复杂度 2.1时间复杂度的…...

Go基础-类型
文章目录1 bool2 有符号整数3 无符号整数4 浮点数5 复数6 string7 关于类型转型1 bool bool类型有两个值,一个是true,一个是false。 测试 package mainimport "fmt"func main() {a : trueb : falsec : a && bd : a || bfmt.Println(a…...

良许翻天覆地的2022年
大家好,我是良许,新年快乐呀~ 在我女室友坚持不懈的努力之下,2022年的最后一天我终于被她传染了,阳了~ 此时的我,正顶着37多度的低烧写下这篇年终总结。 2022年,对于大多数人而言,封控是主旋…...

node+vue微信小程序的社区后勤报修系统
社区后勤报修系统小程序进行总体设计和详细设计。总体设计主要包括小程序功能设计、小程序总体结构设计、小程序数据结构设计和小程序安全设计等:详细设计主要包括社区后勤报修系统小程序数据库访问的实现,主要功能模块的具体实现,模块实现关键代码等。最后对社区后…...

WSL(Windows Subsystem for Linux)
一、WSL优势 •传统方式:获取Linux操作系统环境,必须安装完整的虚拟机,如VMware•WSL:以非常轻量化的方式,得到Linux系统环境总结:WSL更方便,简单、好用、轻量化、省内存 二、什么是WSL ①不…...

华为OD机试题 - 单词反转(JavaScript)
最近更新的博客 华为OD机试题 - 任务总执行时长(JavaScript) 华为OD机试题 - 开放日活动(JavaScript) 华为OD机试 - 最近的点 | 备考思路,刷题要点,答疑 【新解法】 华为OD机试题 - 最小步骤数(JavaScript) 华为OD机试题 - 任务混部(JavaScript) 华为OD机试题 - N 进…...