【大数据处理】【2022秋】【待整理】

零、文件共享

链接:https://pan.baidu.com/s/1buhCri6L_US6LUup8QNyCg?pwd=1111
提取码:1111(自动填充)
在这里插入图片描述

一、Linux的基本使用

1.1 软件的介绍

  1. Vmware15破解版.rar
    虚拟机软件,在本机上虚拟出一台空白电脑。
  2. CentOS-7-x86_64-DVD-1503-01.iso
    Linux操作系统,CentOS是Linux发行版的一种。
  3. Xshell&Xftp.rar
    远程连接工具,连接到远程的服务器,就如同在本地使用是一样的。
  4. jdk-8u172-linux-x64.tar.gz
    Java8编译和运行环境。
  5. apache-maven-3.6.0-bin.tar.gz
    Java项目的编译与打包环境。
  6. apache-tomcat-8.5.31.tar.gz
    Javaweb项目的运行服务器。

1.2 软件的安装

VMware的安装

  1. 【VMware Workstation Pro 16】安装【Deepin-15.11】/CSDN@爱笑的冷面鬼

  2. 【实用软件】VMware 15安装教程/Bilibili@不迷路资源库

CentOS7的安装

CentOS是免费的、开源的、可以重新分发的开源操作系统,CentOS(Community Enterprise Operating System,中文意思是社区企业操作系统)是Linux发行版之一。

  1. 创建新的虚拟机。

  2. 选择“典型”和“下一步”。

  3. 选择“安装光盘映像文件”,并浏览到CentOS7的iso文件位置,点击“下一步”。(VMware Workstation Pro会识别到系统版本并简易安装,可按照以下图片操作,忽略步骤3、4)

  4. 选择虚拟机安装位置并为虚拟机命名。

  5. 选择磁盘占用空间大小,默认最大占用为20G。

  6. 点击“完成”,进行操作系统的安装。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    右键该系统 → \rightarrow 设置 → \rightarrow 使用ISO映像文件
    在这里插入图片描述

  7. 开机后选择“install CentOS7”(光盘安装可能出现数据丢失,才需要点击第二个测试)

  8. 选择“英语”。
    在这里插入图片描述

  9. 选择安装目标:选择安装在哪一个硬盘上。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  10. 设置root用户密码。
    在这里插入图片描述
    点击左上角“Done” → \rightarrow finish configration

  11. “Reboot”,重启虚拟机。
    在这里插入图片描述
    在这里插入图片描述

1.3 Linux的文件系统

Linux文件系统是一个倒置的树状结构,有且仅一个根(/)。
绝对路径:以根目录(/)开头的路径叫绝对路径,例如:/usr/tmp
相对路径:以当前路径开头的路径叫相对路径,例如:…/…/tmp

绝对路径:进入没有共同祖先的节点方便些(直接写路径)
相对路径:进入兄弟节点方便些
在这里插入图片描述
Linux有且仅有一个根目录
如果有新的盘符,只能挂载到树某个目录下

Linux文件的权限

linux文件权限三位一组进行区分:
第1位:l-软链接,快捷方式,d-目录,-为普通文件
第234位:本人权限,r-读 w-写 x-可执行的
第567位:本组人的权限
第8910位:其他人权限。
lrwxrwxrwx: 此文件为一个软链接,本人、本组和其他人都能读、写、执行。权限为777。
-rwxr-xr-x:普通文件,本人可读可写可执行,本组及其他人可读可执行。权限为755。
-rw-r–r–:普通文件,本人可读可写,本组及其他人只读。权限为644。

Linux的基本使用

[目录]是可有可无的
目录 是必须有的

~:个人主目录
个人文件放到个人文件夹下,尽量不影响其他文件夹

命令功能
ls[目录]
ls[目录] -a同时显示隐藏文件(all)
ls[目录] -l显示文件详情信息(long:长格式)
ls[目录] -a -l多参数
ls[目录] -al
ll[目录]相当于ls[目录] -l
cd[目录]
cd . .进入当前目录的父目录(返回上一级)
pwd显示当前路径
cp 源文件 目标文件(如果是文件,即重命名;如果是文件夹,)copy
rm 文件删除文件
rm -rf 目录将目录下面的子目录及文件全部删除,不需要进行确认。-r:递归删除,-f:删除时不需要进行确认
rm -rf /删除整个文件系统(尽量不要试)
mkdir 目录
rmdir 目录删除空目录,不空报错
mv 源文件 目标文件移动,即剪切

在这里插入图片描述

  1. ls [目录]:查看目录当中的文件和文件夹,如果不输入目录,则是查看当前目录。
    ls [目录] -a:显示目录当中包括隐藏文件在内的所有文件和文件夹。a(all):所有的。
    ls [目录] -l:显示文件的详细信息,l(long):长格式。
    ls [目录] -al:相当于ls [目录] -l -a。
    ll [目录]:相当于ls [目录] -l。
  2. cd [目录]:进入目录中,如果不输入目录,则是进入用户的个人主目录。
    cd …:进入当前目录的父目录。
  3. pwd:显示当前所在目录。
  4. cp 源文件 目标文件:拷贝源文件至目标文件中。
  5. rm 文件:删除文件。
    rm -rf 目录:将目录下面的子目录及文件全部删除。-r:递归删除,-f:删除时不需要进行确认。
    rm -rf /:删除整个文件系统(非常危险!)
  6. mkdir 目录:新建目录。
  7. rmdir 目录:删除空目录,目录不为空则报错。
  8. mv 源文件 目标文件:将源文件移动至目标文件中。
    如果源文件与目标文件都是文件,则是改名。
    如果源文件是文件,目标文件是目录,则是将文件移动至目录中。
    如果源文件和目标文件都是目录,目标文件不存在则是改名,若存在则是移动至目标目录中。

Linux编辑器vi的使用

点击i进入INSERT模式,可以插入文字
按ESC退出编辑

:+命令

CentOS系统的网络设置

ip addr
lo:localhost
在这里插入图片描述

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

远程桌面工具XShell、Xftp

根据上面打开的网卡ip地址,设置XShell:192.168.20.140
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
或者这样直接连接:
在这里插入图片描述

二、CentOS环境中的项目部署

即运行Java文件

2.1 JDK8的安装

用Xftp传输文件
用XShell解压
移动到usr/local(共享用)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 配置环境变量

/etc/profile

  1. 备份配置文件
  2. 修改文件
    在这里插入图片描述
    在这里插入图片描述

$PATH:引用PATH的值
:加上
$JAVA_HOME/bin:引用值
在这里插入图片描述

  1. 刷新环境变量

source /etc/profile

  1. 验证

java -version

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

如果没有成功
echo $JAVA_HOME
echo $PATH
查看路径是否正确

2.3 Maven的安装

  1. Xftp复制
    在这里插入图片描述

  2. 解压
    在这里插入图片描述

  3. 复制
    在这里插入图片描述

  4. 配置环境变量
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  5. Maven配置本地仓库与中央仓库(设置一个保存文件的仓库)
    新建repository
    在这里插入图片描述

修改setting.xml
在这里插入图片描述

上面是注解
在这里插入图片描述

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

中央仓库地址
7. 使用Maven创建Java项目

mvn archetype:generate

会从中央仓库下载很多包
中途默认选7
组织机构名称:cn.kgc(用Maven进入Java时需要输入组织机构名称)
项目名称 mvn-app
版本 1.0
package 回车
回车接受

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

可在Xftp中查看项目结构

进入项目cd mvn-app
mvn clean package
(清除并打包)
每次修改都需要清除打包
在这里插入图片描述
在这里插入图片描述

我的笔记
yum install tree
使用maven创建web项目
回看
选择10回听

2.4 安装Tomcat(用Tomcat查看JavaWeb运行情况)

我的笔记

  1. 上传
  2. 解压
  3. 移动
    删压缩包
    不用环境变量
  4. 运行
  5. 开启端口/防火墙(Linux默认把所有端口关闭,如果想访问数据,需要开启)
    仅TCP的8080端口开放
  6. 浏览器访问

运行web的war包
修改后打包并移动

  1. 将压缩包apache-tomcat-8.5.31.tar.gz上传至服务器。
  2. 解压缩包:
    tar -xzvf apache-tomcat-8.5.31.tar.gz
  3. 将解压出的文件夹移动至/usr/local下:
    mv apache-tomcat-8.5.31 /usr/local/tomcat
  4. 启动tomcat:
    cd /usr/local/tomcat/bin/
    ./startup.sh
  5. 打开防火墙:
    firewall-cmd --zone=public --add-port=8080/tcp --permanent
    firewall-cmd --reload
  6. 通过浏览器访问:
    http://ip:8080/

2.5 通过yum安装软件

我的笔记
手动复制可能导致依赖无法自动安装

查看所有已经打出的命令

yum在本地有默认的仓库

yum简介
基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且
一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
在这里插入图片描述

2.6 安装MySQL

我的笔记
把MySQL的(下载位置)安装地址告诉yum,MySQL是第三方,不会存在于CentOS中(就是安装到本地回听11:23
约40包、依赖包
没有密码不能用代码连接数据库

yum的配置文件在etc里面

  1. 通过网络下载yum源:
    wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
  2. 安装yum源:
    rpm -ivh mysql-community-release-el7-5.noarch.rpm
  3. 通过yum安装Mysql:
    yum install mysql-community-server
  4. 启动mysql服务:
    systemctl start mysqld
  5. 通过客户端连接mysql服务:
    mysql -u root -p
  6. mysql设置密码:
    use mysql;
    update user set password=password('123456') where user='root'; #修改用户密码
    flush privileges; #刷新用户权限
  7. 设置mysql字符集:
    打开mysql配置文件:vi /etc/my.cnf
    在[client]一节加入:
    default-character-set=utf8
    在[mysqld]一节加入:
    character-set-server=utf8
    collation-server=utf8_general_ci
    重启服务:
    systemctl restart mysqld

2.7 MySQL的基本使用

XShell字符编码换成UTF-8就可打中文

2.8 导入已有的数据库

数据存到db,打包成war,用tomcat查看,浏览器查看

2.9 部署到其他机器(MySQL-New)

我的笔记
用CentOS7连接MySQL-New

两个报错常见

开启MySQL-New的数据库权限打开

注意在216上设置的是谁的账号密码 区分

三、Docker的基本使用

解决运行文件时 不同版本的问题

3.1 什么是Docker

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

3.2 Docker与虚拟机

虚拟机(virtual machine)是在操作系统中模拟硬件设备,然后运行另一个操作系统,比如在Windows系统里面运行CentOS系统,这样就可以运行任意的CentOS应用了。而Docker仅仅是封装函数库,并没有模拟完整的操作系统。
在这里插入图片描述
在这里插入图片描述

3.3 Docker中的概念

  1. 镜像(Image):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。
  2. 容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器进程做隔离,对外不可见。
  3. 中央仓库:开源应用程序非常多,打包这些应用往往是重复的劳动。为了避免这些重复劳动,人们就会将自己打包的应用镜像,例如Redis、MySQL镜像放到网络上,共享使用,就像GitHub的代码共享一样。
    在这里插入图片描述
  4. Docker是一个CS架构的程序,由两部分组成:
  • 服务端(server):Docker守护进程,负责处理Docker指令,管理像、容器等。
  • 客户端(client):通过命令或RestAPI向Docker服务端发送指令。可以在本地或远程向服务端发送指令。

3.4 Docker的安装

  1. 安装依赖包:
yum install -y yum-utils device-mapper-persistent-data lvm2
  1. 安装本地yum源:
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  1. 查看Docker版本:
yum list docker-ce --showduplicates | sort -r
  1. 安装最新版:
yum install -y docker-ce
#yum install -y docker-ce-18.09.9-3.el7
  1. 启动docker服务:
systemctl start docker
  1. 查看版本号:
docker -v
  1. 查看详细信息:
docker info
  1. 配置镜像加速器:
    参看:加速器使用:加快镜像下载速度/博客园@优雅转身

3.5 Docker的基本命令

项目不能随着容器删除而删除(容器内外共享文件夹)

不能经常手动修改IP地址(回看出发点:9:15)

  1. 镜像命令:
  • docker images
    查看本地库中的镜像。

  • docker search 镜像名
    在中央仓库中查找镜像。
    示例:docker search tomcat

  • docker pull 镜像名:版本号
    从中央仓库拉取镜像至本地。
    示例:docker pull tomcat:8

  • docker inspect 镜像名
    查看镜像详情。

  1. 容器命令:
  • docker ps
    查看运行中的容器。

  • docker ps -a
    查看运行中和停止中的所有容器。

  • docker run 镜像:版本
    创建并运行容器。
    示例:docker run tomcat:8

  • docker run -d -p 宿主机端口:容器端口 -v 宿主机目录:容器内目录 镜像:版本
    在后台以守护进程模式运行容器。
    -d:以守护进程模式运行
    -p:为端口映射
    -v:将容器外目录挂载至容器内。
    示例:

docker run -d -v /var/local/tomcat_webapps:/usr/local/tomcat/webapps -p 8081:8080 tomcat:8
  • docker rm 容器ID或容器名
    删除容器。
    示例:docker rm 3e

  • docker exec -it 容器ID或容器名 /bin/bash
    进入容器中,以交互模式运行容器。
    -it:以交互模式运行
    /bin/bash:进入容器后运行的程序。
    示例:docker exec -it 2b /bin/bash

  • docker stop 容器ID或容器名
    停止容器。
    示例:docker stop 2b

  • docker start 容器ID或容器名
    启动容器。
    示例:docker start 2b

  • docker inspect 容器ID或容器名
    查看容器的详细信息。
    示例:docker inspect mysql-1

  • docker cp 源文件 容器ID或容器名:容器内目标路径
    将源文件拷贝至容器内的目标路径中,也可以将容器内的文件拷贝至容器外。
    示例:

docker cp userdb.sql mysql-1:/root/
  • docker logs 容器ID或容器名
    查看容器启动的输出日志。
  1. 网络命令:
  • docker network ls
    列出所有的网络。

  • docker network create --subnet 子网/掩码 网络名
    创建网络,并指定子网及掩码。
    示例:

docker network create --subnet 172.18.0.0/16 new-network
  • docker network inspect 网络名
    查看网络详情。
    示例:docker network inspect new-network

  • 运行示例:

docker run -d -v /var/local/tomcat_webapps:/usr/local/tomcat/webapps --network new-network --ip 172.18.0.11 --name=tomcat-1 -p 8081:8080 tomcat:8

docker run -d --name=mysql-1 -e MYSQL_ROOT_PASSWORD=123456 --network newnetwork --ip 172.18.0.12 centos/mysql-57-centos7
  1. Dockerfile简介:
    Dockerfile就是用来构建docker镜像的构建文件,命令参数脚本。
  • FROM:指明基础镜像,一切从这里开始构建。
  • WORKDIR:镜像的工作目录,进入容器时的默认位置。
  • COPY:将文件拷贝至镜像中。
  • ENTRYPOINT:容器启动时运行的指令。
  • EXPOSE:申明容器使用的端口。
  • 镜像的构建:
    docker build -t 镜像名称 .
    示例:docker build -t user-project .

3.6 JavaWeb项目的部署

3.7 Docker下运行Springboot项目

通过Docker File制作镜像

四、MySQL数据库的分库、分表

4.1 MySQL的主从复制

  • 数据库的读写压力不均衡
  • 主机写、从机读
  1. 启动两个MySQL容器,作为主从复制的一主一从:
docker run -d --name=mysql-101 -e MYSQL_ROOT_PASSWORD=123456 --network new-network --ip 172.18.0.101 centos/mysql-57-centos7

docker run -d --name=mysql-102 -e MYSQL_ROOT_PASSWORD=123456 --network new-network --ip 172.18.0.102 centos/mysql-57-centos7
  1. 将配置文件my.cnf拷贝至两个容器中,然后重启两个容器。
docker cp my.cnf mysql-101:/etc/
docker cp my.cnf mysql-102:/etc/
docker restart mysql-101
docker restart mysql-102
  1. 登录容器,查看字符集是否为utf8:
docker exec -it mysql-101 /bin/bash #登录至容器内
mysql -u root -p #登录Mysql,容器内登录不需要密码
mysql> status; #执行命令status
  1. 修改两个容器内的my.cnf,在[mysqld]一节中加入以下内容:
log-bin=mysql-bin #开启二进制日志,二进制日志名为mysql-bin
server-id=101 #服务器的id,在一组主从服务器中唯一即可
  1. 在主机上创建复制账号:
    将本机所有库所有表的从机复制权限赋给slave-user,slave-user可以在172.18.0.102上以密码123456登录
grant replication slave on *.* to 'slave-user'@'172.18.0.102' identified by
'123456';

flush privileges;

replication slave:从机的复制权限。

  1. 在从机上设置同步参数:
change master to master_host='172.18.0.101',master_user='slaveuser',master_password='123456',master_log_file='mysqlbin.000002',master_log_pos=606;

master_host:主机的ip地址,master_user:主机创建的从机复制使用的账号,
master_password:从机登录主机使用的密码,master_log_file和master_log_pos为主机二进制
日志的名称和当前位置,在主机使用命令show master status查看。

  1. 开启同步状态:
start slave;
  1. 查看同步状态:
show slave status\G;

查看Slave_IO_Running和Slave_SQL_Running两项是否都为yes。

  1. 若主从同步状态不为yes,则重新执行change master语句,更新同步状态。

4.2 Mycat的安装

原因:从机的表不好找,开发难
机制:将多个MySQL(数据库)合成一个数据库来用≈Oracle商用数据库性能

  1. 下载镜像:
docker pull longhronshens/mycat-docker
  1. 运行镜像:
docker run -d --name=mycat longhronshens/mycat-docker
  1. 拷贝出容器中的三个核心配置文件:
docker cp mycat:/usr/local/mycat/conf/server.xml /var/local/mycat_config/
docker cp mycat:/usr/local/mycat/conf/schema.xml /var/local/mycat_config/
docker cp mycat:/usr/local/mycat/conf/rule.xml /var/local/mycat_config/

4.3 Mycat分库的配置

  1. 在三个mysql容器中创建三个数据库,数据库名为newsdb。

  2. 修改配置文件server.xml,将两个用户管理的数据库都修改为news。

<user name="root">
    <property name="password">123456</property>
    <property name="schemas">news</property>
</user>

<user name="user">
    <property name="password">user</property>
    <property name="schemas">news</property>
    <property name="readOnly">true</property>
</user>
  1. 修改配置文件schema.xml,将四个表分别配置位于三个dataNode上。
<schema name="news" checkSQLschema="false" sqlMaxLimit="100">
    <table name="article" dataNode="dn1" />
    <table name="category" dataNode="dn1" />
    <table name="author" dataNode="dn2" />
    <table name="comment" dataNode="dn3" />
</schema>

<dataNode name="dn1" dataHost="host1" database="newsdb" />
<dataNode name="dn2" dataHost="host2" database="newsdb" />
<dataNode name="dn3" dataHost="host3" database="newsdb" />

<dataHost name="host1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1"
slaveThreshold="100">
    <heartbeat>select user()</heartbeat>
    <writeHost host="hostM1" url="172.18.0.51:3306" user="root"
password="123456"></writeHost>
</dataHost>

<dataHost name="host2" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1"
slaveThreshold="100">
    <heartbeat>select user()</heartbeat>
    <writeHost host="hostM1" url="172.18.0.52:3306" user="root"
password="123456"></writeHost>
</dataHost>

<dataHost name="host3" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1"
slaveThreshold="100">
    <heartbeat>select user()</heartbeat>
    <writeHost host="hostM1" url="172.18.0.53:3306" user="root"
password="123456"></writeHost>
</dataHost>
  1. 登录进入mycat,导入数据:
mysql -u root -p -P 8066 -h 127.0.0.1 #登录mycat
mysql> source /root/news.sql; #导入数据

4.4 分表

原因:表很大

五、

六、

七、

八、

九、项目作业

9.1 项目一部署步骤

系统部署图

在这里插入图片描述

实现步骤

  1. 运行【三个mysql容器】,分别作为mycat的三个物理节点。

  2. 将【数据库通过mycat导入】,【分库】规则如下:
    doctor、office、title位于节点hospital-1上,patient位于hopital-2上,booking位于hospital-3上。

  3. 运行一个【单机版的redis】,不需要做主从和哨兵。

  4. 【编译并运行】应用系统。

    • 修改系统配置文件,src/main/resources/application.properties。
      spring.datasource.url:mycat地址。
      spring.redis.host:redis地址。
      spring.redis.port:redis端口。
    • 通过maven命令mvn clean package打包。
    • 通过Dockerfile构建镜像。
      FROM openjdk:8
      COPY *.jar /root/user.jar
      WORKDIR /root
      EXPOSE 8080
      ENTRYPOINT ["java", "-jar", "/root/user.jar"]
      
    • 根据镜像运行容器。

【检验】

  1. 访问测试,看能否返回Json格式的数据:
    • http://宿主机IP:8080/doctors
      返回医生列表
    • http://宿主机IP:8080/doctors/1
      返回医生详情
    • http://宿主机IP:8080/bookings?patientId=1
      返回患者的预约
    • http://宿主机IP:8080/patients?username=zhangsan
      返回患者详情
  2. 登录redis,查看其中是否有医生信息的缓存。

9.2 项目二部署步骤

系统部署图

在这里插入图片描述

实现步骤

  1. 运行三个mysql容器,在三个数据库中分别导入hospital-1.sql、hospital-2.sql、hospital-3.sql。

  2. 运行一个单机版的redis,不需要做主从和哨兵。

  3. 编译并运行应用系统。

    • 修改三个子系统(doctor-module,patient-module,booking-module)配置文件,配置文件位于三个子系统的src/main/resources/application.properties。

      spring.datasource.url:mycat地址。

      spring.redis.host:redis地址。

      spring.redis.port:redis端口。

    • 在项目根目录下通过maven命令mvn clean package打包。

    • 通过Dockerfile构建三个子项目的镜像。

      FROM openjdk:8
      COPY *.jar /root/user.jar
      WORKDIR /root
      EXPOSE 8080
      ENTRYPOINT ["java", "-jar", "/root/user.jar"]
      
    • 根据镜像运行容器。

  4. 运行一个Nginx容器,并作反向代理配置:

    /doctors:转发至doctor-module项目中。

    /patients:转发至patient-module项目中。

    /bookings:转发至booking-module项目中。

  5. 访问测试,看能否返回Json格式的数据:

    • http://宿主机IP/doctors

      返回医生列表

      • http://宿主机IP/doctors/1

        返回医生详情

      • http://宿主机IP/bookings?patientId=1

        返回患者的预约

      • http://宿主机IP/patients?username=zhangsan

        返回患者详情

  6. 登录redis,查看其中是否有医生信息的缓存。

十、相关资源

链接:https://pan.baidu.com/s/13xElgR5ttbdmK3KQfuElzA?pwd=1111
提取码:1111

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值