阿里云服务器项目部署docker-compose+vue+redis+nginx+minio+springboot

1 阿里云服务器项目部署-单机部署 docker-compose

1.1 搭建背景

服务器 阿里云服务器

前端 vue

后端 springboot

服务 redis 、nginx、minio 都做单机模式部署,不做集群部署

博客内容参考了其他博文,会贴出来

1.2 <重要>端口开放前提说明

任何开放的端口都需要先在阿里云控制台进行开放

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

1.2 docker搭建

两种方式安装

1、yum方式安装docker,我用的是这个

2、采用源码包方式安装,一般内网部署会用到,这个我不会

官方开发博客: https://docs.docker.com/engine/install/centos/

参考博文:https://blog.csdn.net/qq_42971035/article/details/121733265

操作步骤

# 1.卸载旧的版本
sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine# 如有需要,可以安装gcc
yum -y install gcc# 以及gcc-c++
yum -y install gcc-c++# 2.需要的安装包
sudo yum install -y yum-utils# 3.设置镜像仓库
sudo yum-config-manager \--add-repo \# 默认是国外的,不要使用https://download.docker.com/linux/centos/docker-ce.repo# 建议使用阿里云的镜像,十分快sudo yum-config-manager \--add-repo \http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 更新yum软件包索引(安装前的工作,非必须)
yum makecache fast
# yum makecache: error: argument timer: invalid choice: 'fast' (choose from 'timer')
# 安装报错了,yum makecache fast是centOS7的命令, 不使用8,可以直接使用
yum makecache # 或者
dnf makecache# 4.安装docker docker-ce:社区版的,docker-ee:企业版的
sudo yum install docker-ce docker-ce-cli containerd.io# 5.启动dockersystemctl start docker# 6.查看docker版本
docker version # 或者
sudo docker version# 7.测试Hello World
docker run hello-world # 或者
sudo docker run hello-world

当出现"Hello from Docker!”时,代表我们镜像安装成功。

# 8.查看下载的hello-world镜像
docker images #或者
sudo docker images

此时会有对应的镜像显示:

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   2 months ago   13.3kB

到了这里才真正代表着docker安装成功并成功拉取对应的镜像。

如果需要卸载docker的话:

# 1.卸载docker
yum remove docker-ce docker-ce-cli containerd.io# 2.删除资源
rm -rf /var/lib/docker# /var/lib/docker docker的默认工作路径

1.3 docker-compose搭建

也可以不用docker-compose 管理多个容器,自己选择

需要从github上下载docker-compose二进制文件安装

curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose

这个命令是用于从 GitHub 上下载 Docker Compose 的二进制文件,并将其保存到 /usr/local/bin/docker-compose 路径下。

下面是对该命令的解释:

  • curl:一个用于在命令行中进行网络请求的工具。它可以用于从远程服务器下载文件。
  • -L:在下载过程中,如果服务器返回重定向(HTTP 3xx 响应),则自动跟随重定向。
  • https://github.com/docker/compose/releases/download/1.16.1/docker-compose-uname -s-uname -m``:这部分是要下载的文件的 URL。其中,uname -s 返回当前操作系统的名称,uname -m 返回当前机器的架构。这样,URL 就会根据操作系统和机器架构自动选择相应的文件进行下载。
  • -o /usr/local/bin/docker-compose:指定下载的文件保存的路径和文件名。在这里,下载的文件将被保存为 /usr/local/bin/docker-compose

该命令的目的是将 Docker Compose 的二进制文件下载到你的系统中,以便你可以在命令行中直接使用 docker-compose 命令来管理 Docker 容器。完成下载后,可能需要给下载的文件添加可执行权限,才能在命令行中正常使用。例如,可以执行以下命令:

sudo chmod +x /usr/local/bin/docker-compose

请注意,该命令需要在具有适当权限的用户或使用管理员(root)权限下运行,以保证文件可以被保存到 /usr/local/bin/ 目录中。

查看docker-compose版本,是否安装完成

[root@iZbp1ao8rgk3c56ynu2aliZ /]# docker-compose -v
docker-compose version 1.29.2, build 5becea4c

在这里插入图片描述

以下的服务 我都安装在docker目录下了

在这里插入图片描述

1.3 mysql搭建

参考博客:https://blog.csdn.net/qq_34383510/article/details/130902638

1.3.1创建目录

-- 在root目录下创建docker目录
mkdir docker
-- 在docker目录下创建mysql目录
cd /docker
mkdir mysql

1.3.2创建docker-compose.yml

在docker目录下执行 vim docker-compose.yml

输入内容如下:

version: '3'
services:# mysql容器 - Mysql containermysql: # 这里mysql是服务名# 容器名container_name: container-mysql# 指定了容器的网络模式为桥接模式network_mode: bridgeenvironment:# 时区上海 - Time zone Shanghai (Change if needed)TZ: Asia/Shanghai# root 密码 - root passwordMYSQL_ROOT_PASSWORD: 你的密码#镜像image: mysql/mysql-server:8.0.28# 指定了容器停止后总是重新启动restart: always# 端口 定义了容器的端口映射,将容器内的 MySQL 服务的 3306 端口映射到主机的 13306 端口ports:- 13306:3306# 数据挂载 - Data mountingvolumes:# 将主机上的 /docker/mysql/data 目录挂载到容器内的 /var/lib/mysql 目录。这样做的目的是将 MySQL 数据目录与主机上的目录进行映射,使得数据在容器重启或删除后不会丢失- /docker/mysql/data:/var/lib/mysql# 将主机上的 /docker/mysql/conf/my.cnf 文件挂载到容器内的 /etc/my.cnf 文件。这样做的目的是将 MySQL 的配置文件与主机上的配置文件进行映射,以便在容器启动时加载自定义的 MySQL 配置。- /docker/mysql/conf/my.cnf:/etc/my.cnf# 将主机上的 /docker/mysql/log 目录挂载到容器内的 /var/log/mysql 目录。这样做的目的是将 MySQL 的日志文件与主机上的目录进行映射,以便在容器运行时可以方便地查看 MySQL 的日志信息。- /docker/mysql/log:/var/log/mysql#  将主机上的时间配置文件 /etc/localtime 挂载到容器内的 /etc/localtime 文件,并设置为只读模式。这样做的目的是让容器内的时间与主机上的时间保持一致,以避免时间不一致可能带来的问题。- /etc/localtime:/etc/localtime:ro

ports:
- 13306:3306

定义了容器的端口映射,将容器内的 MySQL 服务的 3306 端口映射到主机的 13306 端口,那么应该如最上面所说,在阿里云开放13306端口,在本地连接时,也应该用 公网ip:13306 连接服务器上的mysql,我自己嫌麻烦,用的都是3306

ports:

  • 3306:3306

执行命令启动:docker-compose up -d 或者 :docker-compose up

  • docker-compose up -d: 使用 -d 参数,表示以“后台模式”(detached mode)启动容器。这意味着容器将在后台运行,并且你可以继续使用终端窗口进行其他操作,而不会被容器的输出所阻塞。这在生产环境或需要长期运行的服务中很常见。
  • docker-compose up: 没有 -d 参数,表示以“前台模式”(foreground mode)启动容器。容器将在当前终端窗口中运行,并且你将看到容器的输出信息。如果你使用 Ctrl + C 组合键来终止命令,容器也将停止运行。这在开发和调试阶段通常更为方便,因为你可以立即看到容器的输出信息和错误提示。

如果你想让容器在后台运行,并且不希望终端被容器的输出所阻塞,可以使用 docker-compose up -d。如果你希望在当前终端中看到容器的输出信息,并且方便地终止容器的运行,可以使用 docker-compose up

如果 执行docker-compose up -d 启动,再输入 docker ps 查看启动的镜像

在这里插入图片描述

如果有mysql,那表示启动成功

关闭所有服务 docker-compose down

关闭某个服务 docker-compose stop 服务名 服务名不是容器名

1.3.3 mysql远程访问

本地打开mysql软件,用公网ip:开放的端口 密码 远程连接

连接失败解决方法

执行命令docker ps查询启动的镜像
docker exec -it 容器id bin/bash 进入容器
mysql -u root -p登录mysql
use mysql;切换数据库update user set host='%' where user='root';
grant all privileges on *.* to 'root'@'%';
flush privileges;

img

设置成功后,重新连接成功。
img

1.4 redis搭建

参考博客:https://blog.csdn.net/qq_34383510/article/details/131352344

在docker目录下创建redis目录
cd /docker
mkdir redis
在redis目录下创建data目录
cd redis
mkdir data

创建redis.conf

redis目录下,创建redis.conf配置文件

img

主要修改以下几项配置# 开启密码验证(可选),要是注释掉就不用密码登录了
# requirepass 123456
requirepass 123456# 允许redis外地连接,需要注释掉绑定的IP
# bind 127.0.0.1# 关闭保护模式 当 protected-mode 设置为 yes(默认值)时,Redis 服务器只允许通过本地环回地址(127.0.0.1)进行访问,并拒绝来自外部网络的连接请求。这样可以确保 Redis 服务器只能被本地应用程序访问,我们需要远程访问,所以修改为no
protected-mode no# 注释掉daemonize yes,或者配置成 daemonize no。因为该配置和 docker run中的 -d 参数冲突,会导致容器一直启动失败
daemonize no# 开启redis数据持久化, (可选)
appendonly yes

完成配置

 # bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
#bind 127.0.0.1protected-mode noport 6379tcp-backlog 511requirepass 123456timeout 0tcp-keepalive 300daemonize nosupervised nopidfile /var/run/redis_6379.pidloglevel noticelogfile ""databases 16always-show-logo yessave 900 1
save 300 10
save 60 10000stop-writes-on-bgsave-error nordbcompression yesrdbchecksum yesdbfilename dump.rdbdir ./replica-serve-stale-data yesreplica-read-only yesrepl-diskless-sync norepl-disable-tcp-nodelay noreplica-priority 100lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush noappendonly yesappendfilename "appendonly.aof"no-appendfsync-on-rewrite noauto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mbaof-load-truncated yesaof-use-rdb-preamble yeslua-time-limit 5000slowlog-max-len 128notify-keyspace-events ""hash-max-ziplist-entries 512
hash-max-ziplist-value 64list-max-ziplist-size -2list-compress-depth 0set-max-intset-entries 512zset-max-ziplist-entries 128
zset-max-ziplist-value 64hll-sparse-max-bytes 3000stream-node-max-bytes 4096
stream-node-max-entries 100activerehashing yeshz 10dynamic-hz yesaof-rewrite-incremental-fsync yesrdb-save-incremental-fsync yes

打开docker-compose.yml

输入以下内容 复制过去注意缩进,和 mysql是同级

    #redis容器 - Redis containerredis:image: redis:6.2.5container_name: container-redisports:- 6379:6379environment:# 时区上海 - Time zone Shanghai (Change if needed)TZ: Asia/Shanghaivolumes:# 数据文件 - data files- /docker/redis/data:/data:rw- /docker/redis/redis.conf:/usr/local/etc/redis/redis.conf- /docker/redis/data/logs:/logscommand: "redis-server /usr/local/etc/redis/redis.conf --requirepass 123456  --appendonly yes"privileged: truerestart: alwaysnetwork_mode: bridge

要去阿里云开放6379端口

再次执行docker-compose up -d,成功启动redis

在这里插入图片描述

1.5 minio搭建

打开docker-compose.yml

输入以下内容 复制过去注意缩进,和 mysql是同级 没有指定minio版本

minio:image: minio/miniohostname: "minio"ports:- 9000:9000 # api 端口- 9001:9001 # 控制台端口environment:MINIO_ACCESS_KEY: admin    #管理后台用户名MINIO_SECRET_KEY: admin123 #管理后台密码,最小8个字符volumes:- /docker/minio/data:/data               #映射当前目录下的data目录至容器内/data目录- /docker/minio/config:/root/.minio/     #映射配置目录command: server --console-address ':9001' /data  #指定容器中的目录 /dataprivileged: truerestart: always

要去阿里云开放9000端口

再次执行docker-compose up -d,成功启动minio

在这里插入图片描述

1.6 nginx搭建

参考博客:https://blog.csdn.net/PyongSen/article/details/123054599

# 切换目录
cd /docker
# 创建nginx文件交
mkdir nginx

创建nginx.conf

#user  root;
worker_processes  1;
events {worker_connections  1024;
}
http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {listen       8083; # 前端的端口server_name  localhost;location / {# 这里的root 是下面的docker-compose.yml实现了前端网页的挂载root   /usr/share/nginx/html;  # nginx 报404需要加下面这行try_files $uri $uri/ /index.html last; index  index.html index.htm;#nginx 报405加下面这行error_page 405 =200 http://$host$request_uri;}#nginx 报 连接错误 、没有数据(We’re sorry but “XXX” doesn’t work...放开下面的注释# 跨域location ^~/api/ {add_header Access-Control-Allow-Origin *;add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';add_header Access-Control-Allow-Credentials true;proxy_set_header X-NginX-Proxy true;		#rewrite    ^(.*)api(.*)$   $1/$2; break;proxy_pass http://公网ip:后端端口/;#rewrite ^/api/(.*) /$1 break;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
}

打开docker-compose.yml

输入以下内容 复制过去注意缩进,和 mysql是同级

    nginx: # 服务名称,用户自定义container_name: container-nginximage: nginx:latest  # 镜像版本ports:- 8083:8083  # 前端项目暴露的端口restart: always #docker启动的时候会自动启动这个服务#network_mode: host #不在对应某个端口,我认为的解释是对应所有端口了volumes: # 挂载 # html和nginx.conf 挂载# 将宿主机上的 /docker/nginx/logs 目录挂载到容器内的 /var/log/nginx 目录。这样做的目的是将 Nginx 的日志文件存储在宿主机上,以便于日志的管理和查看。- /docker/nginx/logs:/var/log/nginx# 将宿主机上的 /docker/nginx/html 目录挂载到容器内的 /usr/share/nginx/html 目录。这样做的目的是将网站的静态文件存储在宿主机上,从而实现网站内容的持久化和管理。- /docker/nginx/html:/usr/share/nginx/html# 将宿主机上的 /docker/nginx/nginx.conf 文件挂载到容器内的 /etc/nginx/nginx.conf 文件。这样做的目的是将 Nginx 的配置文件存储在宿主机上,并使之对 Nginx 服务产生影响,从而实现配置的持久化和灵活性- /docker/nginx/nginx.conf:/etc/nginx/nginx.confprivileged: true # 这个必须要,解决nginx的文件调用的权限问题

先不用启动,等前后端全部署好一起启动

1.7 jdk搭建

参考博客:https://blog.csdn.net/m0_49762804/article/details/132362282

下载地址:https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html

在这里插入图片描述

下载完上传,放在哪个文件交都行,我嫌麻烦,统一放在docker文件夹里

cd /docker
madir java
上传文件到 /docker/java
tar -zxvf jdk-8u381-linux-x64.tar.gz

接下来配置环境变量

vim命令打开/etc/profile

vim /etc/profile

添加下面内容

#Set Java_Environment
export JAVA_HOME=/docker/java/jdk1.8.0_381
export JRE_HOME=/docker/java/jdk1.8.0_381/jre
export CLASSPATH=.:$JAVA_HOME/lib$:JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin/$JAVA_HOME:$PATH

退出编辑模式

按 esc 按键
英文输入法状态下
输入 :wq
按回车

加载环境变量

source /etc/profile

验证是否安装成功

java -version

在这里插入图片描述

1.8 前端部署

前端是 vue 项目

在控制台 输入 npm run build

/docker/nginx/ 目录下创建 html文件交

cd /docker/nginx
mkdir html

前端打包好之后,会创建dist文件夹,将该文件夹下的文件都上传到 /docker/nginx/html路径下,这样前端就配置好了

在这里插入图片描述

前端部署好,这时候就能启动docker-compose了

docker-compose up -d

1.9 后端部署

我是把后端和服务分成了两个docker-compose.yml,可以不用这么做

一个yml用来启动服务,一个用来启动jar包

cd /docker
mkdir app

在这里插入图片描述

后端架包上传到该路径,创建Dockfile文件,该文件没有后缀名

Dockfile内容

#使用java 8 版本
FROM openjdk:8
# 将本目录下的park-0.0.1-SNAPSHOT.jar 复制到 /docker/app/,并重命名为 park-jar.jar
COPY  park-0.0.1-SNAPSHOT.jar /docker/app/park-jar.jar 
WORKDIR /docker/app
#对外暴露的端口
EXPOSE 8081ENTRYPOINT ["java", "-jar", "/docker/app/park-jar.jar" ]

创建docker-dompose.yml 编写内容

version: '3'
services:park-jar:container_name: container-park-jarrestart: alwaysimage: park-jarbuild:   # 表示以当前目录下的Dockerfile开始构建镜像context: .  #Dockerfile 所在目录dockerfile: Dockerfile ports:- 8081:8081 #后端项目暴露的端口privileged: true

启动后端

docker-compose up -d

然后再浏览器地址栏输入 公网ip:前端端口,就能正常访问项目了。

结束。

Ub-1712815960265)]

后端架包上传到该路径,创建Dockerfile文件,该文件没有后缀名

Dockerfile内容

#使用java 8 版本
FROM openjdk:8
# 将本目录下的park-0.0.1-SNAPSHOT.jar 复制到 /docker/app/,并重命名为 park-jar.jar
COPY  park-0.0.1-SNAPSHOT.jar /docker/app/park-jar.jar 
WORKDIR /docker/app
#对外暴露的端口
EXPOSE 8081ENTRYPOINT ["java", "-jar", "/docker/app/park-jar.jar" ]

创建docker-dompose.yml 编写内容

version: '3'
services:park-jar:container_name: container-park-jarrestart: alwaysimage: park-jarbuild:   # 表示以当前目录下的Dockerfile开始构建镜像context: .  #Dockerfile 所在目录dockerfile: Dockerfile ports:- 8081:8081 #后端项目暴露的端口privileged: true

启动后端

docker-compose up -d

docker ps
所有的镜像都在这里了
在这里插入图片描述

然后再浏览器地址栏输入 公网ip:前端端口,就能正常访问项目了。

结束。

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

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

相关文章

【迅为iTOP-4412-linux 系统制作(4)】ADB 或者 TF 卡烧写测试

准备工作 编译生成的内核镜像uImage 和设备树 dtb 文件“exynos4412-itop-elite.dtb”已经可以使用了。 把编译生成的uimage和dtb文件。拷贝fastboot工具。官方的u-boot-iTOP-4412.bin 也拷贝到 platform-tools 文件夹目录内。system.img 也拷贝到 platform-tools 文件夹目录…

11 nacos 的 配置获取 和 服务注册

前言 nacos 在微服务体系中有两大个功能, 作为配置中心 和 服务发现 最近碰到了一些 nacos 的相关问题, 整理了一下 这方面的东西 nacos client 的配置读取 这一系列主要是在 NacosManager 这个 bean 的相关业务流程的过程中处理的 NacosManager 初始化的时候, 会向 naco…

iOS 二进制重排

原理&#xff1a;减少page fault次数&#xff0c;将启动用到的代码都放到一个page里。 操作&#xff1a; 统计启动过程中用到的函数。 http://yulingtianxia.com/blog/2019/09/01/App-Order-Files/ Other C flag里加上-fsanitize-coveragefunc,trace-pc-guard&#xff0c;C/C…

力扣HOT100 - 48. 旋转图像

解题思路&#xff1a; 要求原地旋转 可以先上下翻转&#xff0c;再沿主对角线反转&#xff08;左上到右下的对角线&#xff09; class Solution {public void rotate(int[][] matrix) {int n matrix.length;// 上下翻转for (int i 0; i < n / 2; i) {for (int j 0; j &…

软考学习之路-系统集成项目管理工程师-考试要点记录1

软考学习之路-系统集成项目管理工程师-考试要点记录 前言介绍必考知识点1、项目管理五大过程组启动过程组规划规程组执行过程组监控过程组收尾过程组 2、项目整合管理3、项目范围管理4、项目时间管理5、项目成本管理6、项目质量管理7、人力资源管理8、项目沟通管理9、项目风险管…

YOLOv9最新改进系列:YOLOv9融合BoTNet模块,融合CNN+自然语言处理技术的优势,有效提升检测效果!

YOLOv9最新改进系列&#xff1a;YOLOv9融合BoTNet模块&#xff0c;融合CNN自然语言处理技术的优势&#xff0c;有效提升检测效果&#xff01; YOLOv9原文链接戳这里&#xff0c;原文全文翻译请关注B站Ai学术叫叫首er B站全文戳这里&#xff01; 详细的改进教程以及源码&…

LangChain - LLMs

文章目录 一、LLMs vs 聊天模型二、入门1、设置 OpenAI2、__call__: string in -> string out3、generate: batch calls, richer outputs 三、异步 API四、Custom LLM五、Fake LLM六、Human input LLM七、缓存 llm_caching1、内存缓存&#xff08;In Memory Cache&#xff0…

vue简单使用三(class样式绑定)

目录 对象的形式绑定&#xff1a; 数组的形式绑定&#xff1a; 内联样式Style 对象的形式绑定&#xff1a; 可以看到class中有两个值 数组的形式绑定&#xff1a; 可以看到也有两个值 内联样式Style style样式设置成功 完整代码&#xff1a; <!DOCTYPE html> <html…

QT 信号与槽的简单使用

文章目录 1.通过Singloat and Slots Editor 添加信号与槽2. 通过拖动动态添加3.通过转到槽方式添加&#xff08;自动关联&#xff09;4. 自定义信号与槽&#xff08;connect)4.1 connect方式4.2 自定义信号 1.通过Singloat and Slots Editor 添加信号与槽 点添加&#xff0c;然…

数据库:SQL分类之DML详解

1.添加数据&#xff08;insert&#xff09; 1.给指定字段添加数据 insert into 表名 (字段1&#xff0c;字段2&#xff0c;...) values (值1,值2,...); 例&#xff1a; insert into employee(id, worknumber, name, gender, age, identifynumber, worktime) values(1,1,itc…

nginx反向代理conf

打开nginx配置。 对登录功能测试完毕后&#xff0c;接下来&#xff0c;我们思考一个问题&#xff1a;前端发送的请求&#xff0c;是如何请求到后端服务的&#xff1f; 前端请求地址&#xff1a;http://localhost/api/employee/login 后端接口地址&#xff1a;http://localho…

学习Rust的第三天:猜谜游戏

Welcome to the third day of learning rust, I am referring to the book “The Rust Programming Language” by Steve Klabnik. Today we build a guessing game in rust. 欢迎来到学习Rust的第三天&#xff0c;基于Steve Klabnik的《The Rust Programming Language》一书。…

【Java】线程这个包裹的配送过程(线程生命周期)

理解版 如果要形象地理解线程从创建到终止的整个生命周期。我们可以把线程执行理解成一个包裹的运送过程。 包裹揽收&#xff08;New&#xff09;: 就像快递员接收到一个新的包裹&#xff0c;准备开始派送过程&#xff0c;线程在new关键字的作用下被创建。 CourierThread couri…

C语言经典例题(22) --- 学生基本信息输入输出、判断字母、字符金字塔、ASCII码、出生日期输入输出

文章目录 1.学生基本信息输入输出2.判断字母3.字符金字塔4.ASCII码5.出生日期输入输出 1.学生基本信息输入输出 题目描述&#xff1a; 依次输入一个学生的学号&#xff0c;以及3科&#xff08;C语言、数学、英语&#xff09;成绩&#xff0c;在屏幕上输出该学生的学号&#x…

云架构(四)异步请求-应答模式

Asynchronous Request-Reply pattern - Azure Architecture Center | Microsoft Learn 把后台处理和前端解耦&#xff0c;后台处理需要异步处理&#xff0c;但是也需要给前端一个清晰的回应。 背景和问题 在现代应用开发中&#xff0c;代码通常在浏览器中运行&#xff0c;依…

【C#】 删除首/尾部字符

代码 static void Main(string[] args){string str "123abc";string strdelete "abc";string str1 str.Trim(1);string strc str1.Trim(c);string str11 str1.TrimStart(1);string strcc str1.TrimEnd(c);string strabc str.Trim(strdelete.ToCharA…

Sorting Algorithms in Python (排序算法)

本篇文章主要介绍几种经典排序算法&#xff1a;冒泡排序、快速排序、选择排序、堆排序、插入排序、希尔排序、归并排序、桶排序和基数排序。并给出用python实现的算法代码。 目录 一、冒泡排序 二、快速排序 三、选择排序 四、堆排序 五、插入排序 六、希尔排序 七、归…

(非技术) 基因遗传相关知识学习笔记

目录 一、基因遗传名词解释 二、什么叫显性遗传和隐性遗传&#xff1f; 三、如何确定遗传性质呢&#xff1f;是显性还是隐性&#xff1f; 四、常规例子1&#xff1a; 五、常规例子2&#xff1a; 六、实际案例&#xff1a; 七、思考题&#xff1a; 八、参考&#xff1a; …

智慧InSAR专题———模拟数据实现现实场景异常形变点识别(项目讲解)

续上篇 文章目录 &#xff08;一项技术的复现&#xff0c;我们应该有打破砂锅问到底的态度&#xff0c;我找到了这篇文章的一些灵感来源&#xff0c;包括算法和编程以及专业知识等&#xff0c;对我而言也是受益匪浅&#xff09;1. 数据准备1.1 A deep learning approach to de…

MySQL选择普通索引还是唯一索引(2/16)

普通索引和唯一索引 基本概述 MySQL中可以创建普通索引与唯一索引&#xff0c;这两种索引的区别是&#xff1a; 普通索引&#xff08;Non-Unique Index&#xff09;&#xff0c;也称为非唯一索引&#xff0c;它允许索引中的条目具有重复的键值。普通索引的主要目的是加快查询…