minio存储

单机测试

minio对象存储:

编译安装:

minio 服务器安装

git clone https://gitee.com/mirrors/minio.git
cd minio
go build
cp minio /usr/local/bin/

minio客户端安装

git clone git clone https://github.com/minio/mc.git
cd mc
go build
cp mc /usr/local/bin/
单机性能测试:

启动minio服务器

root@ubuntu:/home/work/minio# minio server data
Endpoint:  http://10.1.30.31:9000  http://172.17.0.1:9000  http://172.30.0.1:9000  http://127.0.0.1:9000
AccessKey: minioadmin
SecretKey: minioadmin Browser Access:http://10.1.30.31:9000  http://172.17.0.1:9000  http://172.30.0.1:9000  http://127.0.0.1:9000        Command-line Access: https://docs.min.io/docs/minio-client-quickstart-guide$ mc alias set myminio http://10.1.30.31:9000 minioadmin minioadminObject API (Amazon S3 compatible):Go:         https://docs.min.io/docs/golang-client-quickstart-guideJava:       https://docs.min.io/docs/java-client-quickstart-guidePython:     https://docs.min.io/docs/python-client-quickstart-guideJavaScript: https://docs.min.io/docs/javascript-client-quickstart-guide.NET:       https://docs.min.io/docs/dotnet-client-quickstart-guide
Detected default credentials 'minioadmin:minioadmin', please change the credentials immediately using 'MINIO_ACCESS_KEY' and 'MINIO_SECRET_KEY'

mc客户端写入数据

root@ubuntu:/home/work/minio# dd if=/dev/zero of=random bs=10M count=10241024+0 records in
1024+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 56.3821 s, 190 MB/s
root@ubuntu:/home/work/minio#
root@ubuntu:/home/work/minio# ll random
-rw-r--r-- 1 root root 10737418240 Oct 27 16:58 random
root@ubuntu:/home/work/minio# mc cp ./random data/
./random:                 10.00 GiB / 10.00 GiB ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 1.09 GiB/s 9s
root@ubuntu:/home/work/minio# ll /home/work/minio/data/
total 10485772
drwxr-xr-x 3 root root        4096 Oct 27 17:00 ./
drwxr-xr-x 6 root root        4096 Oct 27 16:57 ../
drwxr-xr-x 6 root root        4096 Oct 27 16:47 .minio.sys/
-rw-r--r-- 1 root root 10737418240 Oct 27 17:00 random
root@ubuntu:/home/work/minio# ll /home/work/minio/data/ -h
total 11G
drwxr-xr-x 3 root root 4.0K Oct 27 17:00 ./
drwxr-xr-x 6 root root 4.0K Oct 27 16:57 ../
drwxr-xr-x 6 root root 4.0K Oct 27 16:47 .minio.sys/
-rw-r--r-- 1 root root  10G Oct 27 17:00 random
root@ubuntu:/home/work/minio#

linux文件系统拷贝性能测试

root@ubuntu:/home/work/minio# rm random
root@ubuntu:/home/work/minio# ll
total 28
drwxr-xr-x  7 root root 4096 Oct 27 17:18 ./
drwxr-xr-x  5 root root 4096 Oct 27 16:26 ../
drwxr-xr-x  3 root root 4096 Oct 27 17:00 data/
drwxr-xr-x  3 root root 4096 Oct 27 16:55 dir1/
drwxr-xr-x  2 root root 4096 Oct 27 16:58 dir2/
drwxr-xr-x  8 root root 4096 Oct 27 17:13 mc/
drwxr-xr-x 12 root root 4096 Oct 27 16:33 minio/
root@ubuntu:/home/work/minio# time cp data/random .real    0m8.067s
user    0m0.064s
sys 0m8.002s
root@ubuntu:/home/work/minio#

挂载
准备密码文件:

echo ACCESS_KEY_ID:SECRET_ACCESS_KEY > ${HOME}/.passwd-s3fs
chmod 600 ${HOME}/.passwd-s3fs

挂载:

root@ubuntu:/home/work/minio# ls /mnt/
root@ubuntu:/home/work/minio# s3fs data/
.minio.sys/ random
root@ubuntu:/home/work/minio# s3fs data /mnt/
s3fs: credentials file /root/.passwd-s3fs should not have others permissions.
root@ubuntu:/home/work/minio# chmod 600 /root/.passwd-s3fs
root@ubuntu:/home/work/minio# s3fs data /mnt/
root@ubuntu:/home/work/minio#

写入测试:

root@ubuntu:/home/work/minio# cd /mnt/
root@ubuntu:/mnt# time dd if=/dev/zero of=file1 bs=2M count=1024
1024+0 records in
1024+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 1.43733 s, 1.5 GB/sreal  0m1.440s
user    0m0.000s
sys 0m1.440s
root@ubuntu:/mnt#
集群性能测试:

docker 容器形成集群

集群测试

测试硬件环境:

用docker 创建4节点的集群,每个节点两个挂载点。共8个挂载点。

1 准备yaml文件:

Administrator@DESKTOP-CU3KA28 MINGW64 ~/Desktop/minio
$ cat docker-compose.yaml
version: '3.7'# starts 4 docker containers running minio server instances.
# using nginx reverse proxy, load balancing, you can access
# it through port 9000.
services:minio1:image: minio/minio:RELEASE.2020-10-27T04-03-55Zvolumes:- data1-1:/data1- data1-2:/data2ports:- "9001:9000"environment:MINIO_ACCESS_KEY: minioMINIO_SECRET_KEY: minio123command: server http://minio{1...4}/data{1...2}healthcheck:test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]interval: 30stimeout: 20sretries: 3minio2:image: minio/minio:RELEASE.2020-10-27T04-03-55Zvolumes:- data2-1:/data1- data2-2:/data2ports:- "9002:9000"environment:MINIO_ACCESS_KEY: minioMINIO_SECRET_KEY: minio123command: server http://minio{1...4}/data{1...2}healthcheck:test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]interval: 30stimeout: 20sretries: 3minio3:image: minio/minio:RELEASE.2020-10-27T04-03-55Zvolumes:- data3-1:/data1- data3-2:/data2ports:- "9003:9000"environment:MINIO_ACCESS_KEY: minioMINIO_SECRET_KEY: minio123command: server http://minio{1...4}/data{1...2}healthcheck:test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]interval: 30stimeout: 20sretries: 3minio4:image: minio/minio:RELEASE.2020-10-27T04-03-55Zvolumes:- data4-1:/data1- data4-2:/data2ports:- "9004:9000"environment:MINIO_ACCESS_KEY: minioMINIO_SECRET_KEY: minio123command: server http://minio{1...4}/data{1...2}healthcheck:test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]interval: 30stimeout: 20sretries: 3## By default this config uses default local driver,
## For custom volumes replace with volume driver configuration.
volumes:data1-1:data1-2:data2-1:data2-2:data3-1:data3-2:data4-1:data4-2:Administrator@DESKTOP-CU3KA28 MINGW64 ~/Desktop/minio

2 启动minio容器

Administrator@DESKTOP-CU3KA28 MINGW64 ~/Desktop/minio
$ docker-compose up -d
Found orphan containers (minio_nginx_1) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
Removing minio_minio1_1
Recreating f417a19c3491_minio_minio1_1 ... done
Recreating minio_minio3_1              ... done
Recreating minio_minio2_1              ... done
Recreating minio_minio4_1              ... doneAdministrator@DESKTOP-CU3KA28 MINGW64 ~/Desktop/minio

3 查看容器状态

Administrator@DESKTOP-CU3KA28 MINGW64 ~/Desktop/minio
$ docker container ps
CONTAINER ID        IMAGE                                      COMMAND                  CREATED             STATUS                            PORTS                    NAMES
24d62d1addba        minio/minio:RELEASE.2020-10-27T04-03-55Z   "/usr/bin/docker-ent鈥?   9 seconds ago       Up 7 seconds (health: starting)   0.0.0.0:9004->9000/tcp   minio_minio4_1
8a47cc4ce634        minio/minio:RELEASE.2020-10-27T04-03-55Z   "/usr/bin/docker-ent鈥?   9 seconds ago       Up 7 seconds (health: starting)   0.0.0.0:9002->9000/tcp   minio_minio2_1
631afe2b9c3d        minio/minio:RELEASE.2020-10-27T04-03-55Z   "/usr/bin/docker-ent鈥?   9 seconds ago       Up 7 seconds (health: starting)   0.0.0.0:9003->9000/tcp   minio_minio3_1
a32e5216c29b        minio/minio:RELEASE.2020-10-27T04-03-55Z   "/usr/bin/docker-ent鈥?   9 seconds ago       Up 7 seconds (health: starting)   0.0.0.0:9001->9000/tcp   minio_minio1_1Administrator@DESKTOP-CU3KA28 MINGW64 ~/Desktop/minio

在浏览器输入登录地址:http://127.0.0.1:9000/minio/login

MINIO_ACCESS_KEY: minio
MINIO_SECRET_KEY: minio123

创建桶,桶名为group1,在桶下面创建文件夹20200807,上传文件到该文件夹。

上传一张图片到桶:

4.验证数据损坏恢复

4.1验证方案

数据块,指文件分割成N块后分别存储在不同硬盘的数据,在硬盘内的文件名为part.1,part.2…

  1. 4台服务8(N)个数据块,根据纠删码的原理,只要保证至少4(N/2)个硬盘的数据完整,文件就可以正常访问,且可以对损坏数据块进行恢复。
  2. 分别上传2个文件,一个文件用于验证损坏超过4个硬盘数据时文件能否正常访问,另一个文件用于验证坏不超过4个硬盘时,是否可以进行文件恢复。

4.2 验证损坏超过N/2个数据块

  1. 上传文件test.jpg。

  2. 进入docker容器中,删除5个( 5 > N/2 )数据块

    此处删除容器2两个数据块,容器4两个数据块,容器3一个数据块

  3. 先删除容器2上面的data1、data2数据块

# 进入容器2
C:\Users\Administrator>docker exec -it minio_minio2_1 /bin/sh
/ # ls
CREDITS  data     data2    etc      lib      mnt      proc     run      srv      tmp      var
bin      data1    dev      home     media    opt      root     sbin     sys      usr
/ ## 进入data1/group1/20200807/目录,删除数据块1上面的图片
/ # cd data1/group1/20200807/
/data1/group1/20200807 # ls
Sketchpad.png  cfg.json       test.jpg
/data1/group1/20200807 #/data1/group1/20200807 # ls test.jpg/
d83cf1b6-be3a-4f7c-8533-1a31ff1e80d8  xl.meta
/data1/group1/20200807 # ls test.jpg/d83cf1b6-be3a-4f7c-8533-1a31ff1e80d8/
part.1
/data1/group1/20200807 #/data1/group1/20200807 # rm -rf test.jpg/
/data1/group1/20200807 # ls
Sketchpad.png  cfg.json
/data1/group1/20200807 ## 进入data2/group1/20200807/目录,删除数据块2上面的图片
/ # cd data2/group1/20200807/
/data2/group1/20200807 # ls
Sketchpad.png  cfg.json       test.jpg
/data2/group1/20200807 # rm -rf test.jpg/
/data2/group1/20200807 #

此时正常数据块6块,损坏数据块2块(上面删除的两块数据块),此时在web客户端查看刚才上传的test.jpg文件,是可以正常显示的。

  1. 依此类推,删除容器4所有的数据块,此时正常数据块4块,损坏数据块4块,再次访问test.jpg文件,仍然可以正常显示。
C:\Users\Administrator>docker exec -it minio_minio4_1 /bin/sh
/ # ls
CREDITS  data     data2    etc      lib      mnt      proc     run      srv      tmp      var
bin      data1    dev      home     media    opt      root     sbin     sys      usr
/ # rm -rf data1/
.minio.sys/  group1/
/ # rm -rf data1/group1/20200807/
Sketchpad.png/  cfg.json/       test.jpg/
/ # rm -rf data1/group1/20200807/test.jpg/
/ # rm -rf data2/group1/20200807/test.jpg/
/ # exitC:\Users\Administrator>
  1. 再次删除9003节点的data1后,此时正常数据块3块,损坏数据块5块,再次访问test.jpg,发现文件已经不见了,说明当损坏超过N/2个数据块时,文件就无法访问。
C:\Users\Administrator>docker exec -it minio_minio3_1 /bin/sh
/ # ls
CREDITS  data     data2    etc      lib      mnt      proc     run      srv      tmp      var
bin      data1    dev      home     media    opt      root     sbin     sys      usr
/ # rm -rf data1/group1/20200807/test.jpg/
/ # rm -rf data1/group2/20200807/test.jpg/
/ # exitC:\Users\Administrator>

验证损坏不超过N/2个数据块,数据恢复

  1. 上传Sketchpad.png文件
  2. 按照上面的的步骤,删除4个数据块(容器3和容器4上面的数据块)
C:\Users\Administrator\Desktop\minio>docker exec -it minio_minio3_1 /bin/sh
/ # rm /data1/group1/20200807/
cfg.json/  test.jpg/
/ # rm /data1/group1/20200807/cfg.json/
rm: '/data1/group1/20200807/cfg.json' is a directory
/ # rm -rf /data1/group1/20200807/cfg.json/
/ # rm -rf /data2/group1/20200807/cfg.json/
/ # exitC:\Users\Administrator\Desktop\minio>docker exec -it minio_minio4_1 /bin/sh
/ # rm -rf /data1/group1/20200807/cfg.json/
/ # rm -rf /data2/group1/20200807/cfg.json/
/ #
  1. 此时正常的数据块4块,损坏的数据块4块。
  2. 通过minio的heal命令,对损坏的文件进行恢复,同样基于容器进行操作,此处需要运行新的容器minio/mc,以下方案为恢复整个服务器的数据,也可以按bucket或者object进行恢复,此处不作演示,可自行查询官方文档
# 拉取mc的镜像
PS C:\Users\Administrator\Desktop\minio> docker pull minio/mc
# 运行mc容器
docker run -it --entrypoint=/bin/sh minio/mc
PS C:\Users\Administrator\Desktop\minio> docker run -it --entrypoint=/bin/sh minio/mc# 设置mc客户端参数,使其可以连接到minio集群(其中:172.16.200.23是docker宿主机的ip地址)
/ # mc config host add minio2 http://172.16.200.23:9000 minio minio123 --api s3v4
Added `minio2` successfully.
/ # mc policy set public minio2/group1
Access permission for `minio2/group1` is set to `public`
/ # mc admin heal -r minio2◓  group1/20200807/cfg.json1/1 objects; 653 B in 1s┌────────┬───┬─────────────────────┐│ Green  │ 3 │ 100.0% ████████████ ││ Yellow │ 0 │   0.0%              ││ Red    │ 0 │   0.0%              ││ Grey   │ 0 │   0.0%              │└────────┴───┴─────────────────────┘
/ ## 重新进入9001容器的data1/group1文件夹中,发现test2.jpg文件夹重新出现了,说明数据恢复成功。在最新版本的minio中,数据恢复是自动发现和触发修复的。

进度条显示,本次成功恢复了一个group1桶下面的20200807/cfg.json对象,恢复进度为100%。恢复后的对象大小为653 Byte。

查看集群信息

查看桶和桶下面的目录

/ # mc ls minio2
[2020-10-28 03:58:55 UTC]     0B group1/
/ #
/ # mc tree minio2
minio2
└─ group1└─ 20200807
/ #
/ # mc admin info minio2
●  minio2:9000Uptime: 1 hourVersion: 2020-10-27T04:03:55ZNetwork: 4/4 OKDrives: 2/2 OK●  minio3:9000Uptime: 1 hourVersion: 2020-10-27T04:03:55ZNetwork: 4/4 OKDrives: 2/2 OK●  minio4:9000Uptime: 1 hourVersion: 2020-10-27T04:03:55ZNetwork: 4/4 OKDrives: 2/2 OK●  minio1:9000Uptime: 1 hourVersion: 2020-10-27T04:03:55ZNetwork: 4/4 OKDrives: 2/2 OK27 KiB Used, 1 Bucket, 2 Objects
8 drives online, 0 drives offline
/ #

大文件测试

生成大文件

/ # time dd if=/dev/zero of=/tmp/file bs=32M count=1024
1024+0 records in
1024+0 records out
real    0m 23.23s
user    0m 0.01s
sys     0m 23.14s
/ #

32GB数据上传测试

/bin/sh: ll: not found
/ # ls /tmp/file -lh
-rw-r--r--    1 root     root       32.0G Oct 28 09:40 /tmp/file
/ #
/ # time mc cp -r /tmp/file minio2/group1/

删除大文件

C:\Users\Administrator\Desktop\minio>docker exec -it minio_minio3_1 /bin/sh
/ # rm -rf data1/group1/file
/ # rm -rf data2/group1/file/
/ # exitC:\Users\Administrator\Desktop\minio>docker exec -it minio_minio4_1 /bin/sh
/ #
/ # ls data1/group1/
20200807  file
/ # ls data1/group1/file/
1003d24c-fcbe-4829-8804-2e52b7efe14d  xl.meta
/ # rm -rf data1/group1/
20200807/  file/
/ # rm -rf data1/group1/file
/ # rm -rf data2/group1/file
/ #

恢复大文件

/ # mc admin heal -r minio2

进入容器查看大文件恢复情况:

C:\Users\Administrator\Desktop\minio>docker exec -it minio_minio3_1 /bin/sh
/ # ls /data1/group1/ -lh
total 8K
drwxr-xr-x    4 root     root        4.0K Oct 28 09:28 20200807
drwxr-xr-x    3 root     root        4.0K Oct 28 11:11 file
/ #
/ # ls /data2/group1/ -lh
total 8K
drwxr-xr-x    4 root     root        4.0K Oct 28 09:28 20200807
drwxr-xr-x    3 root     root        4.0K Oct 28 11:11 file
/ #
/ # exitC:\Users\Administrator\Desktop\minio>docker exec -it minio_minio4_1 /bin/sh
/ # ls /data1/group1/ -lh
total 8K
drwxr-xr-x    4 root     root        4.0K Oct 28 09:28 20200807
drwxr-xr-x    3 root     root        4.0K Oct 28 11:11 file
/ # ls /data2/group1/ -lh
total 8K
drwxr-xr-x    4 root     root        4.0K Oct 28 09:28 20200807
drwxr-xr-x    3 root     root        4.0K Oct 28 11:11 file
/ #

对比可见minio的数据恢复速度比较快:

32GB数据恢复时间是8min。32GB数据写入时间是32min。

minio是gluster团队把glusterfs卖给红帽后,新创建的项目。全部用golang实现,由gluster创始人主导minio的开发工作。

优点

  • 读写速度极快。MinIO号称是世界上速度最快的对象存储服务器。在标准硬件上,minio对象存储的读/写速度最高可以达到183 GB/s和171 GB/s。

minio有以下特点

  • 运维简单

  • 简洁易用,部署方便

  • 原生支持k8s docker

  • 支持纠删码,支持bit rot位保护(磁盘比特位衰减)

  • 支持scal out

  • 故障可以精确到对象,单个对象的恢复不影响其他对象

局限性

  • minio设计目标是amazon s3兼容的对象存储,目前版本不支持fuse mount,需要借助s3-fuse第三方工具挂载到系统目录。

  • 文档相对于ceph较少

  • 搭建集群后,不允许扩容。MinIO一旦集群搭建成功后,就不可以更改集群节点数。因为存在在MinIO的对象到底存储在哪个Set,是通过名字做Hash去找的,一旦节点数变了落点就错乱了。

  • 大集群最大节点数为32。MinIO实现了一个峰值锁叫DSync。它在节点数量少时,性能非常高;但节点数量过多时,性能就下降了。功能实现的最大节点就是32,所以导致MinIO单个集群的最大节点数也是32。官方回复是,他们十年做GlusterFS的经验看,一个超大的集群是难以维护的,尤其是宕机之后的恢复时间也特别长,所以他们在做MinIO的时候一个核心设计理念就是存储组件要变得简单可控,易于维护。进群容量问题,可以通过应用层来解决。

扩容方案

1、可同时向多个集群写入

2、当集群容量达到阈值,从写集群中剔除,变成只读

3、读取的时候,根据编码到文件名上的集群信息,从而路由到正确的集群。

MinIO本身提供一个叫联合模式的方式来组建集群,但是要额外引入其他依赖。可以考虑在LB层根据其请求里面的一些header信息做流量转发。

当配置多个集群的时候,可以先从配置中获取可用的集群,再从LB上根据请求的header信息,可控制向哪个集群写。当某个集群的容量达到阈值时,可以从配置中剔除该集群,把他变成只读集群。读取的时候把集群ID或信息码编码到文件名上去,这样可以通过解析文件名就能获取到对应的集群。

压测工具

采用 cosBench 工具做压测,cosBench是专门对对象存储做压测的工具。

参考文献:

minio集群搭建:

https://blog.csdn.net/kea_iv/article/details/108061337

minio中文文档:
http://docs.minio.org.cn/docs/master/minio-erasure-code-quickstart-guide

minio英文文档:
https://docs.minio.io/docs/minio-admin-complete-guide.html

minio分布式集群搭建完全教程(纠删码,数据恢复)相关推荐

  1. Minio分布式集群搭建

    一.分布式Minio快速入门         分布式Minio可以让你将多块硬盘(甚至在不同的机器上)组成一个对象存储服务.由于硬盘分布在不同的节点上,分布式Minio避免了单点故障. 1.分布式Mi ...

  2. Minio分布式集群搭建部署

    分布式 Minio 可以让你将多块硬盘或者多台服务器组成一个对象存储服务.由于硬盘分布在不同的节点上,分布式 Minio 避免了单点故障.Minio分布式模式可以帮助你搭建一个高可用的对象存储服务,你 ...

  3. Hadoop分布式集群搭建完全教程

    Hadoop分布式集群环境搭建步骤如下 实验环境: 系统:win7 内存:8G(因要开虚拟机,内存建议不低于8G) 硬盘:建议固态 虚拟机:VMware 12 Linux:Centos 7 jdk1. ...

  4. CentOS7安装笔记:minio分布式集群搭建

    文章目录 准备机器 部署(所有机器均执行) 创建挂载磁盘路径 挂载磁盘路径到文件系统 创建minio目录 下载minio安装包 创建启动脚本 创建启动服务 启动测试(所有机器执行) 重新加载服务的配置 ...

  5. minio分布式集群部署

    minio分布式集群部署 分布式 Minio 可以让你将多块硬盘或者多台服务器组成一个对象存储服务.由于硬盘分布在不同的节点上,分布式 Minio 避免了单点故障.MinioMinio分布式模式可以帮 ...

  6. Hadoop-HDFS详解与HA,完全分布式集群搭建(细到令人发指的教程)

    前言 本篇篇幅较长,有许多集群搭建干货,和枯燥乏味但是面试可能问到的理论知识. 思来想去不知道怎样才能鼓励自己加油学习,想想要面对的生活还是假吧意思打开学习视频吧. 目录 一.引入 hdfs是什么 h ...

  7. 大数据开发·关于虚拟机Hadoop完全分布式集群搭建教程

    hadoop完全分布式集群搭建 一.搭建准备 1.安装VMware虚拟机 2.Xshell 7 远程客户端及Xftp 7安装 3.搭建模板虚拟机hadoop100 配置虚拟机网络 为虚拟机普通用户配置 ...

  8. 手把手教你搭建MinIO分布式集群

    手把手教你搭建MinIO分布式集群 要求: MinIO集群规格:2节点2个磁盘. Minio域名:test_minio.com 数据目录:/opt/minio/data1,/opt/minio/dat ...

  9. Hadoop完全分布式集群搭建详细图文教程

    本文所使用的环境及版本: CentOS Linux release 7.9.2009 (Core) jdk1.8.0_291 hadoop-3.2.2 一.安装模板机 1.安装CentOS 7.9并配 ...

最新文章

  1. TableView/CollectionView 滑动顶部效果优化
  2. 图像分类:常用分类网络结构(附论文下载)
  3. linux硬件 软件raid,Linux下软件RAID的实现
  4. 计算机答辩答不上来怎么回答,答辩答不上来怎么办
  5. NetTiers模板中各个选项的一些解释
  6. 2017.10.23 卡牌游戏 失败总结
  7. API RSA签名颁发证书
  8. 扩散模型的matlab编程,Matlab 实现气体高斯扩散模型模拟
  9. Matlab 边界提取
  10. 通用对话框Dialog
  11. 命令行查询ip所在地——Nali
  12. matlab 找最小值位置,matlab 向量最小值位置
  13. python怎样使用各个日期赤纬_行星的上合、下合、大冲、大距、方照、逆行、合月时间计算...
  14. Cesium结合高德SDK路径规划
  15. 数据结构个人笔记 第12课 数组
  16. 端口渗透—23端口Telnet
  17. 用while和for循环分别计算100以内奇数和偶数的和,并输出。(Java)
  18. 织信informat低代码平台怎么样?
  19. Redis中间件总结
  20. IEEE,Elsevier投稿网站

热门文章

  1. (转载)虚幻引擎3--【UnrealScript教程】章节一:11.Struct结构体
  2. 图片压缩-speedpdf免费无损在线压缩图片
  3. java ygc逐步增加,【jvm学习笔记五】G1-YGC分析
  4. 微信小程序面向个人开放-附超详尽申请教程
  5. 个体户如何注册和认证自己的微信小程序
  6. 单片机的智能垃圾桶设计
  7. stm32开发3D打印机(零)——打印板配置(未完成)
  8. jstack 命令的使用和问题排查分析思路
  9. 熵,条件熵,相对熵,互信息的相关定义及公式推导
  10. 微信小程序 如何返回上一个页面并实现刷新