待办事项
课程作业:
科目 | 作业 | 期限 |
---|---|---|
电子商务安全* | none | |
人工神经网络 | none | |
网络协议逆向 | 期末项目 | 7.8 |
云计算技术* | none | |
计算机视觉 | hw3 & 论文 | 6.20 & wait |
专业综合实践 | none |
论文
夏令营
实习
课程作业:
科目 | 作业 | 期限 |
---|---|---|
电子商务安全* | none | |
人工神经网络 | none | |
网络协议逆向 | 期末项目 | 7.8 |
云计算技术* | none | |
计算机视觉 | hw3 & 论文 | 6.20 & wait |
专业综合实践 | none |
论文
夏令营
实习
课程作业:
科目 | 作业 | 期限 |
---|---|---|
电子商务安全 | none | |
人工神经网络 | 期末项目 | 6.18 |
网络协议逆向 | 期末项目 | 7.8 |
云计算技术 | 课程项目 | 7.2 |
计算机视觉 | hw3 | 6.20 |
专业综合实践 | none |
夏令营
实习准备
课程作业:
科目 | 作业 | 期限 |
---|---|---|
电子商务安全 | none | |
人工神经网络 | 期末项目 | wait |
网络协议逆向 | hw3 & 期末项目 | 5.30 & 7.8 |
云计算技术 | lab2 & lab3 | 6.7 & 6.7 |
计算机视觉 | hw3 | 6.20 |
专业综合实践 | 期末项目 | 6.3 |
夏令营
实习准备
课程作业:
科目 | 作业 | ddl |
---|---|---|
电子商务安全 | none | |
人工神经网络 | 期末项目 | wait |
网络协议逆向 | hw5 | 5.30 |
云计算技术 | lab1 | 6.7 |
计算机视觉 | hw3 | wait |
专业综合实践 | 期末项目 | 6.5 |
夏令营
实习准备
peaq网络基于polkadot,Polkadot是一个可扩展的异构多链区块链。由一个协作的去中心化区块链网络组成,这个网络叫做中继链,它与并行运行的分片链即平行链交互,所有平行链共享中继链的安全性。
一个基于rust的模块化的区块链框架
在WSL中安装,不要在windows下安装!!!由于windows环境和rust的版本会遇到很多坑!
先安装rust,然后clone模板,注意版本,git clone
完substrate-node-template和substrate-front-end-template后分别cargo build --release
和yarn install
在substrate-node-template中执行./target/release/node-template --dev --tmp
,开启一个临时节点
在substrate-front-end-template中执行yarn start
,打开可视化界面。
报错:build error: Rust WASM toolchain not installed, please install it!
解决办法:build前执行rustup target add wasm32-unknown-unknown --toolchain nightly
WebAssembly(缩写为Wasm)是一种基于栈式虚拟机的二进制指令集,可以作为编程语言的编译目标,使得程序可以在Web上进行客户端和服务器应用的部署
镜像和容器
使用步骤:
docker pull imageName:version
可设置镜像加速器
新建容器并启动:docker run imageName:version
,-i
保持io流对容器开放,-t
分配终端,--name
设置容器名
启动已有容器:docker start containerName
查看容器信息:docker ps -a
停止正在运行的容器:docker stop containerName
,-t
指定等待时间
Docker容器以sh为主进程,执行完启动命令,主进程将停止,容器也将自动终止。
容器启动后不立即停止:
docker run
中-d
可以使容器在后台运行
进入一个docker容器的几种方法:
ssh
登陆进容器;nsenter、nsinit
等第三方工具;docker
本身提供的工具:exec
和attach
先docker run
创建容器并让它在后台执行,在用docker attach
进入容器内部,其实就是进入容器启动命令的终端
docker exec
则可以在容器内部执行一条命令
删除终止状态的容器:docker rm containerName
删除运行状态的容器:
docker stop
,再docker rm
docker rm -f
查看所有容器ID:docker ps –a –q
docker run -p 80:80
将主机的80端口映射到容器的80端口
docker commit containerName imageName
将容器保存成镜像
保存镜像:docker save imageName1:version imageName2:version > tarName.tar
加载镜像:docker load < tarName.tar
把容器的文件系统保存为tar包:docker export containerName -o tarName.tar
从tar包导入镜像:docker import tarName.tar imageName:version
docker rmi image
,-f
表示强制删除
创建私人仓库:docker run -d -p 5000:5000 --restart=always --name registry registry:2
,-v
可以指定仓库位置
镜像加标签:docker tag imageName:version tagName
推送镜像到仓库:docker push tagName
,如果tagName正好是主机名:端口号则推送到私人仓库
从私人仓库拉取镜像:docker pull tagName
删除私人仓库:docker rm repoName
,-f
表示强制,-v
表示删除仓库的同时删除其中镜像
用于构建镜像
FROM imgaeName:version
指定构建镜像的基础镜像
RUN 命令
创建容器并执行命令,命令结束后提交容器为新镜像
构建镜像:docker build -t foo .
,-t
指定名字,-f
指定Dockerfile
COPY 源路径 目标路径
将源路径复制到目标路径,源路径必须为绝对路径
ADD 源路径 目标路径
COPY的加强版,可自动解压tar包,自动下载文件等等操作
CMD [命令,参数1,参数2]
设置容器启动时的默认命令,可被覆盖,可作为ENTRYPOINT的参数
ENTRYPOINT [命令,参数1,参数2]
设置容器启动时的默认命令,不可被覆盖
WORKDIR 路径
设置工作目录
ENV key value
设置环境变量
ARG argName
设置参数,可被之后指令及docker build
使用
EXPOSE port1
暴露端口,只是一个声明,仍需要在docker run
中用-p
指定端口
ONBUILD 其他指令
其他指令为RUN,COPY等等指令,当前镜像中不会使用,仅用于下一级镜像构建,不会被继承
VOLUME 路径
定义数据卷
none
docker volume create --name volName
创建数据卷
docker run -v /data
创建一个随机名字的数据卷,并挂载到容器的/data
docker run -v volName:/data
创建volName数据卷,并挂载到容器的/data
docker run --name containerName -v /host/dir:/container/dir
将主机的/host/dir挂载到/container/dir
docker run --name volName2 --volumes-from volName1
创建volName2并与volName1共享数据卷
docker inspect
可查看镜像,容器,数据卷等的具体信息
docker volume rm volName
若数据卷仍被使用则无法删除
docekr rm -v containerName
删除容器时同时删除数据卷,若数据卷仍被使用则无法删除
删除正在使用的数据卷:
docker rm -v containerName
解除数据卷和容器的关系docker volume rm volName
删除数据卷$(pwd)表示当前目录
docker run --volumes-from CONTAINER_NAME -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /path/to/data
将CONTAINER_NAME的/path/to/data备份到主机的当前目录
docker run --volumes-from dbcontainer2 -v $(pwd):/backup busybox tar -xvf /backup/backup.tar -C /dbdata
新容器,旧容器和主机一起实现的数据卷备份和恢复,新容器和旧容器共享,主机数据卷挂载到新主机。
课程作业:
科目 | 作业 | ddl |
---|---|---|
电子商务安全 | none | |
人工神经网络 | none | |
网络协议逆向 | hw5 | wait |
云计算技术 | lab2 & lab1 | 5.24 & 6.7 |
计算机视觉 | none | |
专业综合实践 | none |
区块链网络,类似物联网中的以太坊
cargo是rust的包管理器
宏规则
println!()
和print!()
:前面的换行
1 | print!("x = {0}", x) |
整型:i32有符号32位,u64无符号64位
浮点数:默认64位精度
布尔型
字符:一个char有4个字节,用utf-8表示
元组:()
数组:[]
传入参数时需指定类型
1 | fn foo(x:i32, y:u64){ |
函数体表达式:块中最后为一个没有;的表达式,用来返回值
1 | fn foo(x:i32) -> i32 { |
条件表达式必须为布尔型,不适用c++中的“非0即真”
可用if-else结构和函数体表达式实现a?b:c的效果
无for(int i=0; i<10; i++){}
的用法,用while i<10 {i=i+1}
代替
可以for x in array.iter(){}
或for x in 0..5 {}
无限循环:loop{break ret;}
,ret为返回值
重影:指变量的名称可以被重新使用的机制
不可变变量:let a = 123;
可变变量:let mut a = 123;
常量:const a = 123;
重影与可变变量:重影可改变变量的类型,可变属性和值,而可变变量仅可改变值
为了让 Rust 在编译阶段更有效地分析内存资源的有用性以实现内存管理而诞生的概念
所有权有以下三条规则:
变量范围:从声明变量开始有效直到变量所在域结束
1 | let a = xxx; |
对以上情况有:
对于上面堆中数据确实需要复制成两份的情况,可以这样做:
1 | let a = String::from("helloRust"); |
同移动,基本数据传完后依旧可以使用,不定长数据传完即被移动
1 | let s1 = String::from("hello"); |
这里s1并不会被释放,s2指向s1,s1再指向堆中的数据。
引用仅租借所有权,如果所有权移动了则需要重新租借。
可变引用可以修改原变量的值let b = &mut a;
可变引用不允许多重引用,但不可变引用可以。
指针指向NULL或者被释放的变量。
Rust中不允许垂直指针存在。
let part = &str[0..5];
切片结果必须是引用类型。
..y
,x..
,..
都是符合语法的。
被切片的变量禁止修改值。
String和str:不一样的类型,切片结果都是&str类型
可以通过&string[..]
将String转换成str
1 | struct Foo{ |
1 | //结构体更新 |
1 | //元组结构体 |
1 | //输出结构体 |
1 | //结构体方法 |
重要,但没细看qaq
1 | //生命周期注释 |
静态生态周期:’static,生命周期为程序运行期间
1 | //泛型+特性+生命周期 |
1 | //函数中泛型 |
1 | //特性 |
1 | //泛型+特性例子 |
课程作业:
科目 | 作业 | ddl |
---|---|---|
电子商务安全 | none | |
人工神经网络 | 期中项目 | 5.15 |
网络协议逆向 | hw5 | wait |
云计算技术 | lab2 | 5.24 |
计算机视觉 | hw2 | 5.20 |
专业综合实践 | jsp1 & jsp2 | 5.7 & 5.10 |