终端挂代理
因为electron-ssr已经提供了http的代理。
如需要在终端中挂上代理,输入
export http_proxy="http://127.0.0.1:12333"
export https_proxy="http://127.0.0.1:12333"
Go官网教程(A tour of Go)
从官网下载一个tour教程包
go get golang.org/x/tour
工作路径bin目录下会出现tour二进制,运行tour程序会打开一个本地站点
分三部分
1. 基本语法和数据结构
2. 方法和接口
3. 并发原语
学习过程中的一些笔记
第一部分
Go项目均由packages构成, 项目从main包开始运行
如果变量名以大写字母开头,则该变量对外可见,即导出。否则,外界不可见,且无法使用
为何go变量的类型声明与c系语言不同?go的类型声明在做复杂的函数签名时更易读
slice与array
map特性
make方法,既可以用来创建slice,也可以用来创建map
第二部分
方法:Go中没有类的概念,但是可以在函数的基础上得到方法。即,在func和函数名之间插入某个类型的调用者(receiver)。本质上,还是一个函数。等价于将receiver作为第一个参数传入函数。receiver的类型定义必须在同一个package中
接收器分为两种value receiver和point receiver。方法中对value receiver的修改不会影响到方法外,对point receiver的修改会影响到方法外
value receiver的调用可以被转换为对point receiver的调用
point receiver的调用可以被转化为对value receiver的调用
使用point receiver的两个优点:
1. 该方法需要修改receiver指向的值
2. 可以避免值拷贝
接口:一些方法签名的集合。也可以看作是一种类型。当某些类型实现了接口中的方法,那么这些类型可以赋值给接口类型定义的变量。
如果某些类型拥有相同的方法集合,那么可以定义一个
epoll_create
#include <sys/epoll.h>
int epoll_create(int size);
epoll_create()创建一个新的epoll对象,并返回一个文件描述符指向该epoll对象。
size表示,该epoll对象可能要监听的文件描述符数量,内核会使用该建议值分配内部的数据结构,当然之后如果空间不够用,内核会分配更多的空间。
linux2.6.8之后,size参数被忽略(但是仍然必须大于0)。
参考epoll_create - Linux manual page - man7.org
epoll_ctl
#include <sys/epoll.h>
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
epfd即epoll_create返回的描述符,用于管理用户关心的文件描述符。epoll_ctl用于添加、修改、删除epoll对象中的fd及该fd关联的事件监听。
op的值:
- EPOLL_CTL_ADD
- EPOLL_CTL_MOD
- EPOLL_CTL_DEL
event的定义
typedef union epoll_data {
void *ptr;
int fd;
uint32_t u32;
uint64_t u64;
} epoll_data_t;
struct epoll_event {
uint32_t events; // Epoll Events
epoll_data_t data; // User Data Variable
}
成员events的值
- EPOLLIN 可读
- EPOLLOUT 可写
- EPOLLET 设置边缘触发。默认水平触发
- ...其他
epoll_wait
#include <sys/epoll.h>
int epoll_wait(int epfd, struct epoll_event *events, int maxevents, i
pre
- 安装
tex live
并配置全局环境变量 - 安装
vscode
禁用fcitx的虚拟键盘
fcitx的虚拟键盘会占用编辑快捷键ctrl+alt+b
vscode 安装
安装插件Latex Workshop
magic comment
行首加上
% !TEX program = xelatex
指定xelatex
编译
这是使用xelatex > bibtex > xelatex > xelatex
过程编译。如果不加则默认使用pdflatex。
官方文档中不建议这么做,兼容性成疑,这里使用下面介绍的方式
配置xelatex工具链
打开setting.json,加入
"latex-workshop.latex.tools": [
{
"name": "latexmk",
"command": "latexmk",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"-pdf",
"%DOC%"
]
},
{
"name": "xelatex",
"command": "xelatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOC%"
]
},
{
"name": "pdflatex",
"command": "pdflatex
冒泡排序
#include <iostream>
#include <vector>
using namespace std;
/**
* 冒泡排序
* 平均时间复杂度: O(n^2)
* 最坏时间复杂度: O(n^2)
* 最好时间复杂度: 可以立一个flag标记有没有发生交换,如果有序,则不再继续冒泡,所以复杂度可以有O(n)
* 空间复杂度: O(1)
* 稳定性: 稳定
* 排序方式: In-place
* @param arr
*/
void bubbleSort (vector<int>& arr) {
int len = arr.size();
for (int i=len-1;i>=0;i--) {
for (int j=0;j<i;j++) {
if (arr[j] > arr[j+1]) swap(arr[j], arr[j+1]);
}
}
}
int main() {
vector<int> arr = {10, 9, 8, 7, 7, 6, 5, 11, 3};
bubbleSort(arr);
for (int &e: arr) cout << e << " ";
}
选择排序
#include <iostream>
#include <vector>
using namespace std;
/**
* 选择排序
* 平均时间复杂度: O(n^2)
* 最坏时间复杂度: O(n^2)
* 最好时间复杂度: O(n^2)
* 空间复杂度: O(1)
* 稳定性: 不稳定
* 排序方式: In-place
* @param arr
*/
void SelectionSort (vector<int>& arr) {
int len = arr.size();
for (int i=0;i<len;i++) {
int mn = arr[i];
int index = i;
for (int j=i+1;j<len;j++) {
if (arr[j] < mn) {
安装aria2
sudo add-apt-repository ppa:t-tujikawa/ppa
sudo apt-get update
sudo apt-get install aria2
安装tampermonkey扩展
chrome插件地址 tampermonkey
aria2c直接下载
aria2c 后面跟上下载链接即可
aria2c "download.url"