WSL2和Docker for Windows
Linux | WSL | windows | Docker

一、Docker和WSL2概述

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

  • DockerClient客户端
  • Docker Daemon守护进程
  • Docker Image镜像
  • DockerContainer容器

在windows下配合VS code的Remote - Containers插件,使用体验很不错,缺点就是不像WSL2一样可以在资源管理器中直接处理文件。

但是,Docker本身是基于Linux的。为了让windows用户能够体验docker的便利,docker for windows应运而生。而它则是基于windows subsystem for linux(WSL)的。启动docker可以发现WSL多了docker-desktopdocker-desktop-data两个wsl分发版。而docker就在此基础上运行。(当然最初的docker for windows后端并不是直接使用WSL)。

Windows Subsystem for Linux(简称WSL)是一个在Windows 10上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层。它是由微软与Canonical公司合作开发,其目标是使纯正的Ubuntu、Debian等映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行。如果使用Windows 10 2004以上,可以通过WSL 2来窗口化运行桌面应用,也不需要另外安装其他的X 服务器。

阅读全文
GNN学习笔记

一、图的概述

在图论中,图(Graph)指的许多节点及其相互关系。而我们传统的图像可以看着是一种特殊的图——像素点及其之间的关系。如果有点集$V={V_1,V_2,…,V_n}$
和他们之间的关系边集$E={e_1,e_2,…,e_n}$。那么我们一般用下列数学表达式来表示一个图。

  1. 有向图VS无向图
    有向图的边具有方向性,$e_{ij}$表示从$v_i$指向$v_j$的有向边。但注意有向图不一定所有边都是有向边。
    无向图的边没有方向性。

  2. 加权图VS非加权图

    加权指的是两点之间的边有权重。而非加权图则相当于时权重相等的加权图

  3. 连通图VS非连通图

    任意两个节点都有通路,称为连通图。反之则称为非连通图。非连通图中有许多连通分量。连通分量自身是图的最大连通子图。连通图的连通分量是自己。

  4. 子图

    子图从直观来看是图的裁剪区域。从数学表达来看,子图的边集和点集均为图的边集和点集的子集,即

  5. 通路与距离

    通路也称路径,对于两个点,他们的通路就是连通它们的边的序列集合。

    两点间的距离指的是两点间最短通路的边数

    k阶邻居:指的是两点的距离为k,此时两点互为k阶邻居(无向图)。

    k阶子图:指的是任意两点之间距离最大为k的子图。

  6. 邻接矩阵VS关联矩阵

    邻接矩阵表达的是点与点之间存在连接,即边。关联矩阵表达的是点和边之间存在关联,即点是边的端点。两种矩阵都能够表达图中的关系。

  7. 同构图VS异构图

    同构图中所有节点的类型都是相同的,边的类型也是相同的。而异构图则不一定。异构图更有现实意义。

阅读全文
Git学习笔记

一、Git命令

git clone

用于从远程仓库克隆项目。

  • HTTPS git clone https://github.com/GCS-ZHN/IDRBonline.git
  • SSH git clone git@github.com:GCS-ZHN/IDRBonline.git

可以选择只克隆指定分支

1
git clone --single-branch --branch main_dev https://github.com/GCS-ZHN/SoCube.git

git init

在当前文件夹建立git本地仓库,会出现.git本地文件夹。

git add

添加本地文件夹进入仓库。git init后需要add到index区域(一个压缩包文件)才能将内容递交加入仓库。添加本文件夹git add .。没有add的文件称为unstagegit status可以看到状态。add后称为stage

1
git add . # 将当前目录及其子目录的修改或新增加入

git commit -m

git add只是将项目加入暂存区index,利用commit最终将项目递交到本地仓库。参数为提交的备注评论。

git commit -am <COMMIT>可以用于删除。

阅读全文
java学习笔记

一、JavaDoc

javadoc是为java开发者提供程序注释工具,通过采用规范的javadoc语法对java源码进行注释,并利用提供的javadoc工具快速生成标准的javadoc文档。当其他人使用开发者发布的工具包时,可以通过javadoc文档阅读,快速学习了解相应的应用程序接口(api)。

1.1 注意点

javadoc默认Console输出编码采用系统默认,在涉及中文编码时会产生乱码,通过配置环境变量JAVA_TOOL_OPTIONS=--Dfile.encoding=UTF-8解决

二、函数式接口与Lambda表达式

2.1 java 8 函数式接口概述

函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口, 其用@FunctionalInterface标注。可以由Lambda表达式转化创建。这种接口一般用于功能的自定义实现。在Java 8以前,想要达到目的必须使用接口的显式类或匿名内部类的形式,如创建一个新的线程:

1
2
3
4
5
6
new Thread(new Runnable(){
@Override
public void run(){
System.out.println("Hello World");
}
}).start();

在java 8中引入了著名的Lambda表达式,对于函数式接口,可以通过Lambda表达式迅速创建,减少了语法冗余。
1
2
3
4
5
//相当于创建了一个Runnable接口实例,并传入
new Thread(()->{System.out.println("Hello World");}).start();

//这样也是可以的
Runnable runnable = ()->{System.out.println("Hello World");};

阅读全文
C++学习笔记
C++ | cpp

一、Dev C/C++编译器gcc/g++

1.1 常见编译参数与相关文件

参数名 描述
-c 仅编译,不链接
-o 输出文件名
-l 链接库文件名,动态库(.so(linux)/.dll(win))、静态库(.a),仅用于链接时寻找库,而可执行文件寻找动态库仍然依据系统环境变量。
-L 链接库所在路径文件夹
-I 头文件所在文件夹
名称 描述

.dll|动态库(dynamic linked library)文件
.h/.hpp|头文件,由于预编译时被“#include”指令包含

1.2 编译过程概述

1.预编译器执行#include、#define等编译指令对源文件进行预处理,include指令的作用等同于jsp:include,即文本替换包含进源文件。

如果一个文件中包含许多头文件,编译器为了优化编译速度,会预编译头文件为.h.gch文件,下次将会加载.h.gch文件。当修改.h文件时需要删除.h.gch文件。

阅读全文
Cython学习笔记
python | cpp | cython | c++ | c | 扩展

一、Cython安装与编译

Cython能够扩展Python,使用C/C++代码来实现对C/C++的调用。

  • pyx文件:cython源代码文件
  • pxd文件:cython自己的库文件,通过cimport进行调用
  • pyd文件:cython编译后产生的python库,python中import进行使用,主要用于定义C/C++类型
  • pxi文件:类似于C/C++的头文件,通过include进行文本包含
  • setup.py:将cython编译的工具

1.1 Cython安装

通过pip命令安装

1
pip install Cython

1.2 Cython编译

(1)通过setup.py工具编译,文件代码如下

1
2
3
4
5
6
7
8
from setuptools import setup
from Cython.Build import cythonize

setup(
name='Hello world app', //对应最后生成的python库名
ext_modules=cythonize("hello.pyx"), //对应cython源文件名
zip_safe=False,
)

阅读全文