研究生自救指南.md
[**研究⽣⾃救指南由B站Up,⽔论⽂的程序猿,https://space.bilibili.com/383
研究⽣⾃救指南
⼀、引⾔
研究⽣的处境
研究⽣的基调
写这份指南的动⼒
⼆、第⼀个暑假规划
引⾔
未找导师
已找导师
未定⽅向
已定⽅向
总结
三、毕业⽬标的选择
为什么要定⽬标
主要⽬标分类
考公
考编
⺠办⾼校
国央企
⼤⼚
中⼩⼚
读博
没有毕业⽬标选哪个⽬标好
⼀定要有毕业⽬标吗
对于⽬标种类的选择
总结
四、如何选合适的导师
引⾔
导师类型简介
学术型
项⽬型
半放养型
指导型
纯放养型
如何选合适的导师
总结
五、与导师的相处
示弱
为什么示弱
如何示弱
示弱的副作⽤
交好
为什么交好
如何交好
沟通
和导师之间的沟通
和辅导员之间的沟通
和师兄姐之间的沟通
莫较真
⽃争
总结
六、选错了导师怎么换
什么是互选
互选前
⾮必要不换导师
以德服⼈和装可怜
互选后
怎 ...
webserver
serverrrrrrrrrrrrrrrrrrrrrr–
IO 多路复用 VS 多进程/多线程IO 多路复用不用维护线程进程,大大减小了系统的开销。
多路复用的实现主要基于 select、poll、epoll
select12345#include <sys/select.h>#include <sys/time.h>int select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset, const struct timeval *timeout);// return:表示此时有多少个监控的描述符就绪,若超时则为0,出错为-1。
调用过程:
1)用户进程需要监控某些资源 fds,在调用 select 函数后会阻塞,操作系统会将用户线程加入这些资源的等待队列中。
2)直到有描述副就绪(有数据可读、可写或有 except)或超时(timeout 指定等待时间,如果立即返回设为 null 即可),函数返回。
3)select 函数返回后,中断程序唤起用户线 ...
cmake的使用
cmakeeeee
1.一个简单的CMake项目
cmake 支持大写,小写,混合,建议小写
每个CMake项目顶层文件夹都有cmakelists.txt文件,最简单的cmakelists.txt可以只包含三条命令。如下:
cmake_minimum_required(),这指定了最低的版本,
project(),指定了项目的名字以及其他信息
add_executable(),告诉cmake使用特定的源文件创建可执行文件
指定c++标准
两个特殊的用户可设置变量,分别是
CMAKE_CXX_STANDARD
CMAKE_CXX_STANDARD_REQUIRED
可以通过指定这两者来指定需要的C++标准
添加版本信息&配置头文件
有时候在cmakelists.txt定义一个变量,然后在.c文件使用,这是很有意义的,如何实现:
使用配置头文件,
install_and_uninstall
make install, make程序会按照命令执行安装
通过make安装软件分为如下几个部分:
下载源码,github之类的
配置,通常下载的源码(tar.gz)有些配置文件,比如 configure, cmakelists.txt等,可以传递参数来自定义安装路径和编译选项,配置好之后,运行./configure, cmake -B xxx -S xxx .来生成makefile文件
编译,执行make命令后,会读取makefile文件,根据其中的规则执行编译任务,比如可以调用gcc将源代码编译成可执行二进制文件。
安装,执行make install命令,编译好的二进制文件被复制到系统的指定位置(这个位置写在makefile中的),通是/usr/local/bin、/usr/local/lib
卸载,执行make uninstall命令,按照预定义的规则将安装的文件删除。
通过make安装的软件,
不会自动检测依赖,必须保证所有的依赖库已经正确安装
升级复杂,无法处理残留文件和依赖关系
文件分散,难以追踪 ...
effective_cplusplus
条款29
函数要达到异常安全,需要满足两个条件:
不泄露资源
不允许数据败坏(至少需要数据是有效的)
异常安全函数通常可以达到如下几个等级
基本承诺,异常被抛出,程序的任何事物仍然是有效地(比如计数器失效,有序数组失序),但当前程序的现实状态不确定,可能是几种状态之一。
强烈保证,只有未执行和执行两种状态,失败则会返回到未执行状态。
不抛掷保证,承诺不抛出异常,内置类型的所有操作都提供不抛掷保证,所以无法捕获到这些异常,如:
12345678910111213 try{ int a = 0; int b = 5; int c = b / a; } catch(exception e){ cout << "ztj: " << e.what(); } return 0;}没有捕获到异常:(yolo) tangjie.zhang@moveai415:effective_cpp$ ./bFloatin ...
more_effective_cpulsplus
1. 指针与引用在这样情况下,使用指针:
可能存在不指向任何对象的可能
需要在不同时刻指向不同的对象。
在这样情况下,使用引用:
上述的其他情况
重载操作符时,返回值用引用
2.c++风格类型转换static_cast ,很多类型转换的工作
const_cast, 去掉const 或 volatileness 属性
dynamic_cast, 安全的沿着类的继承关系向下进行类型转换
reinterpret_cast, 指针之间转换(通常不可移植)
3.多态与数组不应该一起使用如果创建了派生类数组,将其传给基类数组形参,虽然不会报错,但内存分布有很大的问题,派生类一般大于基类,而基类数组间隔小于派生类数组间隔,会导致错误。有很大的潜在问题:
12345678910111213141516171819202122#include <iostream>using namespace std;class Base{ public: int a = 6;};class Der: public Base{ public: ...
cplusplusprimer
输入运算符必须处理输入可能失败的情况,而输出运算符不需要。
至于为什么,个人看法,操作系统分层,从硬件到系统到应用程序,数据是一步步传输的,哪里产生的错误由哪里处理,输出时,程序可以保证数据的类型和格式一致(如果和预期不一致,那是你写错了),而之后的错误进入到了操作系统层,不应该由用户处理。至于输入,操作系统应该能保证输入没问题,到软件层,再进行错误检测。
面对对象程序设计(oop)三个基本概念:数据抽象、继承、动态绑定。
数据抽象:将类的接口与实现分离
继承:定义相似的类型,并对其相似关系建模
动态绑定:一定程度上忽略相似类型的区别,用统一的方式使用对象。
前向声明类(仅声明的类)可以应用的场景:
指针和引用
作为函数参数或返回类型
用在模板参数中,如:class A; vector<A> vec;
作为静态成员变量的类型,(像那种不允许实例化的类,一般都会存一个自己)
PyTorch_h
Tensor & autogradTensor支持gpu加速,可以在ipython/notebook使用<function>? 查看帮助文档,也可以在代码中用help(function)这里的function就不用加小括号了,如
12torch.ones? #仅用于notebook/ipython#help(torch.ones)
基础操作从接口,对tensor操作分为两类(torch.sum(a, b), a.sum(b)):
torch.function, 如torch.save (torch 是导入的模块名)
tensor.function, 如tensor.view (tensor代表的是创建的tensor对象名,)
从存储,对tensor操作分为两类:
不会修改自身数据,如a.add(b),会返回一个新的tensor
会修改自身数据,如a.add_(b)
创建tensor方式:
Tensor函数是最复杂多变的方式,可以接收list,可以指定形状,可以传入其他的tensor,或者torch.Size类别。
1234a = t.Ten ...
经验记录
linux相关
kill多个进程ps -ef | grep -v grep | grep tcp | cut -c 9-15 | xargs kill
ps -ef 列出所有进程,grep -v grep 去除和grep相关进程,grep xxx查找带有xxx字符串的进程,cut -c 11-15取出每行11-15,刚好是进程id,xargs kill,使用之前的内容为参数,由kill来执行。
映射端口到本地(jupyter)
服务器上使用jupyter notebook后,将可以在服务器上通过localhost:port访问代码。但是本地上确访问不了服务器的代码。通过端口映射将服务器端口映射到本地参考文章:
1ssh -p 3090 -NfL 10086:202.115.17.239:10086 ming.xing@202.115.17.239
-p 指定端口,是指访问服务器的端口,平时访问服务器时也必须使用ip+port(202.115.17.239:3090)访问,此处也必须指明端口。否则都找不到服务器。(与后处的10086端口有区别,后面的10086指服务器系统里 ...
bug记录
1
stm32f103
错误现象:不使用 freertos 时,可以完成外设初始化,可以完成点灯,串口发送数据。使用 freertos 时,即使把外设初始化函数放到 main 函数最前面,然后立刻点灯,串口发数据,都看不到效果。使用 freertos 时,但删除掉 xTaskCreate 函数(包含heap初始化代码)后,可以点灯,收到数据。
错误原因:在使用 freertos 操作系统时,如果开启了动态创建任务,需要加入内存管理文件(我的是 heap_4.c ),需要定义一个数组供其使用
123456 static uint8_t ucHeap[ configTOTAL_HEAP_SIZE ];/*config.h*///系统所有总的堆大小#define configTOTAL_HEAP_SIZE ((size_t)(5*1024)) //stm32f103x8 似乎最大只有 20k //这里被设置成了5k,需要注意的是,虽然sram容量大于10k,但如果设为10k没法运行 //sram大小好像是20k
需要注意的是,对应不同芯片,配置的值 ...