关于日志
有些事情单独开一篇博客太浪费,但是确实不得不记录一下,所以有了这个日志。目前打算是按月开。
VSCode
远程连接到服务器上开发卡死
不要连接到东西太多的目录,有些插件会扫目录,消耗巨大多内存。
建议是单独开一个 workspace 来干活。
另外远程服务器起码有 4GB 内存,2GB 内存纯属冤大头。
Python slots
Python 的 __slots__
机制,可以限制实例的属性,只允许在创建实例时定义的属性,不允许动态添加属性。
如果尝试为没有在 slots 中声明的变量赋值,会引发
AttributeError。
git
拉取远端其它分支并与本地关联
1 git checkout -b feature-branch origin/feature-branch
git 删除分支
删除本地分支:
1 git branch -d feature-branch
删除远端分支:
1 git push origin --delete feature-branch
Python lambda 闭包问题
lambda
做函数绑定的时候变量是绑定到域 上的变量的,而不是绑定到值 上的。
例如下面循环的例子:
1 2 3 4 funcs = [] for i in range (10 ): funcs.append(lambda x: x + i) print (funcs[0 ](10 ))
输出是 19,而不是 10,因为查找到的 i 是循环结束后域里面的 9。
正确的做法是:
1 2 3 4 funcs = [] for i in range (10 ): funcs.append(lambda x, i=i: x + i) print (funcs[0 ](10 ))
C++ 全局变量的声明和定义
全局变量的声明和定义是分开的,声明是在 .h 中使用
extern 关键字,定义是 .cpp 中使用
= 赋值。
另外就算是用了 #ifdef XXX_H,也不能在 .h
里面定义。不然多个 .cpp 都包含了
.h,还是分开编译的,就会报重定义的错误。
类的静态成员变量是不允许在声明的时候初始化的,只能定义的时候初始化。
Python 线程独立资源
有时候每个线程需要一些独立的资源来执行一些操作,这个可以用
threading.local() 来实现。
一般需要配合 concurrent.futures 的线程池来使用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 def initializer (): """初始化线程独立资源""" driver = uc.Chrome(use_subprocess=True , options=options, driver_executable_path=DRIVER_PATH) def exact (i ): """任务""" driver.get(url) def crawler (): global driver_pools driver_pools = threading.local() with concurrent.futures.ThreadPoolExecutor(max_workers=5 , initializer=initializer) as executor: futures = [executor.submit(lambda i=i: exact(i)) for i in range (1 , 100 )] for future in concurrent.futures.as_completed(futures): future.result()
Python 异步任务、线程任务
这两个任务一般来说只要开始阻塞执行 后,都没办法强制中止的。
后台多线程任务可以设置成
daemon=True,关闭主程序的时候自动关闭后台任务。
异步任务一般要避免出现阻塞,否则主线程会卡死。
另外如果一定要强行中止线程,可以考虑 concurrent.futures
的 ThreadPoolExecutor._threads.clear 方法。
Python Queue
线程安全的 Queue.get
在使用的时候不管是不是保证有东西,最好都加点 timeout。
nullptr 和 iterator::end()
处理指针类型一定要想好有没有可能是 nullptr。
处理迭代器的时候一定要想好有没有可能是 end()。
C++ 容器
迭代的时候别TM的做删除操作 ,会漏内存。
git 设置代理
有时候 git 走不了系统代理,可以配置一个全局的代理设置:
1 2 git config --global http.proxy http://127.0.0.1:7890 git config --global https.proxy http://127.0.0.1:7890
C++ iostream
istream 和 ostream
是两个抽象类,不能直接实例化,用的时候应该把一个 ifstream
或者 ostream 的子类实例化,然后绑定到 istream
或者 ostream 上。
cerr, cout 这些都是 ostream
的子类,所以有时候
1 2 ifstream fin ("in.txt" ) ;istream &in = fin;
C++ Fsanitize
不要开 O2 优化,开了就定位不了错误。
VMWARE 无法打开内核设备
对应虚拟机 .vmx 文件中,将 vmci0.present 改为
"FALSE"
Win11 自定义快捷键反应慢
参考
就是开始菜单 (建议 Win+Q 搜索 设置)找到 "设置", 点击
"应用设置", 把 "后台组件权限" 改为 "从不" 即可。