? go ?    发布于 2019-11-04   548人围观   0条评论

终端挂代理

因为electron-ssr已经提供了http的代理。
如需要在终端中挂上代理,输入

  1. export http_proxy="http://127.0.0.1:12333"
  2. export https_proxy="http://127.0.0.1:12333"

Go官网教程(A tour of Go)

从官网下载一个tour教程包

  1. 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. 可以避免值拷贝

接口:一些方法签名的集合。也可以看作是一种类型。当某些类型实现了接口中的方法,那么这些类型可以赋值给接口类型定义的变量。

如果某些类型拥有相同的方法集合,那么可以定义一个

查看更多
? linux ?    发布于 2019-07-31   700人围观   0条评论

epoll_create

  1. #include <sys/epoll.h>
  2. 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

  1. #include <sys/epoll.h>
  2. 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的定义

  1. typedef union epoll_data {
  2. void *ptr;
  3. int fd;
  4. uint32_t u32;
  5. uint64_t u64;
  6. } epoll_data_t;
  7. struct epoll_event {
  8. uint32_t events; // Epoll Events
  9. epoll_data_t data; // User Data Variable
  10. }

成员events的值

  • EPOLLIN 可读
  • EPOLLOUT 可写
  • EPOLLET 设置边缘触发。默认水平触发
  • ...其他

参考epoll_ctl - Linux manual page - man7.org

epoll_wait

  1. #include <sys/epoll.h>
  2. int epoll_wait(int epfd, struct epoll_event *events, int maxevents, i
查看更多
? linux ? ? vscode ? ? xelatex ?    发布于 2019-05-09   438人围观   0条评论

pre

  • 安装tex live并配置全局环境变量
  • 安装vscode

禁用fcitx的虚拟键盘

title

fcitx的虚拟键盘会占用编辑快捷键ctrl+alt+b

vscode 安装

安装插件Latex Workshop

title

magic comment

行首加上

  1. % !TEX program = xelatex

指定xelatex编译

这是使用xelatex > bibtex > xelatex > xelatex过程编译。如果不加则默认使用pdflatex。

官方文档中不建议这么做,兼容性成疑,这里使用下面介绍的方式

配置xelatex工具链

打开setting.json,加入

  1. "latex-workshop.latex.tools": [
  2. {
  3. "name": "latexmk",
  4. "command": "latexmk",
  5. "args": [
  6. "-synctex=1",
  7. "-interaction=nonstopmode",
  8. "-file-line-error",
  9. "-pdf",
  10. "%DOC%"
  11. ]
  12. },
  13. {
  14. "name": "xelatex",
  15. "command": "xelatex",
  16. "args": [
  17. "-synctex=1",
  18. "-interaction=nonstopmode",
  19. "-file-line-error",
  20. "%DOC%"
  21. ]
  22. },
  23. {
  24. "name": "pdflatex",
  25. "command": "pdflatex
查看更多
发布于 2019-05-05   211人围观   0条评论

冒泡排序

  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. /**
  5. * 冒泡排序
  6. * 平均时间复杂度: O(n^2)
  7. * 最坏时间复杂度: O(n^2)
  8. * 最好时间复杂度: 可以立一个flag标记有没有发生交换,如果有序,则不再继续冒泡,所以复杂度可以有O(n)
  9. * 空间复杂度: O(1)
  10. * 稳定性: 稳定
  11. * 排序方式: In-place
  12. * @param arr
  13. */
  14. void bubbleSort (vector<int>& arr) {
  15. int len = arr.size();
  16. for (int i=len-1;i>=0;i--) {
  17. for (int j=0;j<i;j++) {
  18. if (arr[j] > arr[j+1]) swap(arr[j], arr[j+1]);
  19. }
  20. }
  21. }
  22. int main() {
  23. vector<int> arr = {10, 9, 8, 7, 7, 6, 5, 11, 3};
  24. bubbleSort(arr);
  25. for (int &e: arr) cout << e << " ";
  26. }

选择排序

  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. /**
  5. * 选择排序
  6. * 平均时间复杂度: O(n^2)
  7. * 最坏时间复杂度: O(n^2)
  8. * 最好时间复杂度: O(n^2)
  9. * 空间复杂度: O(1)
  10. * 稳定性: 不稳定
  11. * 排序方式: In-place
  12. * @param arr
  13. */
  14. void SelectionSort (vector<int>& arr) {
  15. int len = arr.size();
  16. for (int i=0;i<len;i++) {
  17. int mn = arr[i];
  18. int index = i;
  19. for (int j=i+1;j<len;j++) {
  20. if (arr[j] < mn) {
查看更多
? linux ?    发布于 2019-04-02   703人围观   0条评论

安装aria2

  1. sudo add-apt-repository ppa:t-tujikawa/ppa
  2. sudo apt-get update
  3. sudo apt-get install aria2

安装tampermonkey扩展

chrome插件地址 tampermonkey

安装 EX-百度云盘

安装 EX-百度云盘
油猴脚本地址 EX-百度云盘

title

可看到EX 下载字样,在该选项上选择复制压缩链接得到一个下载链接。

aria2c直接下载

aria2c 后面跟上下载链接即可

  1. aria2c "download.url"
查看更多