白嫖阿里云实例到期后使用竞价实例迁移系统
写在前面
寒假嫖的阿里云2h4g实例到期了。因为配置了web服务器,嫌重新配置比较麻烦,听天天哥哥说竞价实例比较便宜,现利用竞价实例迁移系统。
创建自定义镜像:
这里注意一下你的实例地区,要和购买的竞价实例地区一致
迁移镜像到购买地区:
等待镜像创建、迁移完成。镜像创建和迁移都要等一段时间。
购买实例:
在创建实例界面选择抢式实例并选择地区和配置。
确认订单即可
写在最后
这样操作会直接将原系统迁移过来,大功告成
如何深入浅出的理解Kosaraju
如何深入浅出的理解Kosaraju
前言
今天想起来Kosaraju,网上关于这个算法的介绍比较少。(毕竟Tarjan太强了)。但是Tarjan和Kosaraju的复杂度都是O(V+E)O(V+E)O(V+E)的,Kosaraju的常数要大一点。(网上有的博客说kosaraju会卡爆栈,个人感觉不会,退化成链的情况Tarjan和Kosaraju都会一搜到底)。
那为什么Kosaraju常数大还要学它呢,用Tarjan不好吗?
因为它简单、好理解啊。毕竟Tarjan难理解是出了名的。
正题
一些必要概念
网上介绍各种概念五花八门,不够深入浅出。首先要理解这几个概念:
前序序列(从一点开始遍历,结点进入的序列)
后序序列(从一点开始遍历,结点退出的序列)
逆后序序列(就是后序序列的逆序,没什么高深的意思,所以百度搜不到)
图GGG
反图G′G'G′(将图GGG的各个边反过来重新建图,出边改入边)
强连通分量SCC(移步百度)
求前序序列和后序序列的代码(如果上面不理解,看看代码就懂了)
1234567891011121314151617int n, dcnt, fcn ...
如何快速理解并记住 C 语言中的 typedef
假设有如下代码,你声明了一个函数指针funa:
1int *funa (int k);
编译器就知道这一行声明了一个函数指针,其指向的函数接收一个int类型的参数,返回值为int。
现在项目经理给编译器作者说,“我要有一个typedef的功能,要能给某个类型起别名。”
编译器作者说:“你不早说,我代码都写完了”。
抱怨归抱怨,编译器作者但还是得写,那就用之前的轮子吧
1typedef int *Funa (int k);
项目经理说:“这不就何之前一样了吗”
编译器作者说:“谁让你不早说,这样我就能直接拿轮子了”
项目经理说:“也好,这样也好记住”。
那么:
12Funa p1;int *p2 (int k)
p1和p2是等价的。
因为Funa和int * (int k)是一个类型,p1和p2是一个类型。
参考
如何理解 C 语言中的 typedef ? - 霄池的回答 - 知乎
c++ 模板中 class T 和 typename T 的区别
c++ 模板中 <class T> 和 <typename T>的区别
前言
一直感觉template <class T>,今天查了一下。
总结
template<class T>和template<typename T>都可以用来定义函数模板和类模板,在使用上,他们俩没有本质的区别。
在模板声明中,typename 可用作 class 的代替品,以声明类型模板形参和模板形参 (C++17 起)。
在C++早期版本中,没有typename这个关键字,所以在模板定义的时候便使用了class。
因此现在使用typename更加合适。
typename的其它用法
在模板声明中,typename 可用作class的代替品,以声明类型模板形参和模板形参 (C++17 起)。
在模板的声明或定义内,typename 可用于声明某个待决的有限定名是类型。
在模板的声明或定义内, (C++11 前)typename 可在非待决的有限定类型名之前使用。此情况下它没有效果。
在类型要求的要求中。(C++20 起)
Django数据库操作 —— 干净的重置migration
前言
随着项目需求的增加:
Django的迁移文件越来越大,
并且遇到models文件中如果使用了自定义存储字段。不再使用后删除会报错的情况。
重置迁移文件后解决了上述问题。
情景一:不需要原有的数据库数据
首先删除数据库中的相关APP下的数据表
然后删除APP下的migration模块中的所有 文件,除了init.py 文件
执行下面的命令
12python manage.py makemigrationspython manage.py migrate
情景二:不想要删除现有的数据库,只是想重新建立 migration 文件
这个情况是开发中最为常见的,也是操作起来稍微复杂一点的情况,但是只要遵循下面的操作步骤,就不会引发任何错误。
首先要保证,目前的migration文件和数据库是同步的,通过执行
1python manage.py makemigrations
2.查看当前项目下所有APP对应的已经生效的(已经成功执行的)migration文件,命令如下:
1python manage.py showmigrations
结果如下图所示:
1234567891 ...
django 中优雅的使用 choice 字段
django 中优雅的使用 choice 字段
问题
django中如何比较优雅的对元组进行标记分类。可使用choice字段
choice字段
1234567891011121314151617# models.pyclass BookTagNum(object): OTHER = 1 SCIENCE = 2 SOCIAL_SCIENCES = 3 ECONOMIC = 4 COMPUTER = 5class BOOK(models.Model): TAG_NUM_CHOICE = ( (BookTagNum.OTHER, '其它'), (BookTagNum.SCIENCE, '科学类'), (BookTagNum.SOCIAL_SCIENCES, '社科类'), (BookTagNum.ECONOMIC, '经济类'), (BookTagNum.COMPUTER, '计算机类 ...
Django ManyToManyField - 插入 - ORM - admin中显示
综述
Django ManyToManyField的ORM操作和在admin中显示。
表结构设计
假设一个作者有多本书,一本书也可以有个作者,多对多关系。
1234567# 表结构设计class Book(models.Model): title = models.CharField(max_length=20)class Author(models.Model): name = models.CharField(max_length=20) books = models.ManyToManyField(Book)
在admin中显示
当数据过多时,django自带的ManyToManyField及其不方便。仅需在admin.py添加如下字段即可。
12# 修改前admin.site.register(Author)
使用filter_horizontal。在作多项选择的操作方便性,及单项选择太多时,会有极好的体验。
12345# 修改后class AuthorAdmin(admin.ModelAdmin): list_display = ['name ...
.git 文件过大 - 减小 .git 文件体积
.git 文件过大
综述
最近发现github上项目.git文件已经达到了2个G,整理了减小.git文件的方法。
.git文件是什么
一个管理git仓库的文件夹,这里包含所有git操作所需要的东西
方法
简单有效,减小体积
运行 gc ,生成 pack 文件(后面的 --prune=now 表示对之前的所有提交做修剪,有的时候仅仅 gc 一下.git 文件就会小很多)
1git gc --prune=now
克隆时只克隆一层
1git clone --depth=1
使用git-lfs管理文件
项目中有大量的图片文件,音频文件,二进制文件时,推荐使用第三方扩展插件git-lfs。
它将你所标记的大文件保存至另外的仓库,而在主仓库仅保留其轻量级指针
why?
二进制内容比较难压缩, 会导致整个仓库占用的空间飞速增长. 没多久你可能就会发现,10M的文件,100M的.git文件。也就是不能版本比较。
Getting Started
安装完成后在git bash中运行如下指令
1git lfs install
添加你要管理的文件
1234git lfs track &qu ...
【最小生成树】Kruskal - Prim - 堆优化的Prim
input
output
sample input
Sample Output
写在前面
整理了一份最小生成树算法板子
题目 C - 掌握魔法の东东 I
东东在老家农村无聊,想种田。农田有$ n$ 块,编号从 1~nnn。种田要灌氵
众所周知东东是一个魔法师,他可以消耗一定的 MP 在一块田上施展魔法,使得黄河之水天上来。他也可以消耗一定的 MP 在两块田的渠上建立传送门,使得这块田引用那块有水的田的水。 (1≤n≤3e2)(1 \le n \le 3e2)(1≤n≤3e2)
黄河之水天上来的消耗是WiW_iWi,iii 是农田编号 (1≤Wi≤1e5)(1 \le W_i \le 1e5)(1≤Wi≤1e5)
建立传送门的消耗是 PijP_{ij}Pij,iii、jjj是农田编号 (1≤Pij≤1e5,Pij=Pji,Pii=0)(1 \le P_{ij} \le 1e5, P_{ij} = P_{ji}, P_{ii} =0)(1≤Pij≤1e5,Pij=Pji,Pii=0)
东东为所有的田灌氵的最小消耗
input
第1行:一个数nnn
第2行到第n+ ...
python 访问文件夹下所有文件、图片
问题
如何使用python访文件夹下的所有文件?
解决
使用os.listdir(path)装载文件路径
使用os.path.join()可拼接获得完整路径,对于windows,需要补全文件夹名后面的/,否则python会错误的添加\(如:"./test\a.png”。
使用open()打开目标文件
图片类型
对于图片类型,以rb(只读二进制)打开,避免对图片错误写。一开始以w一直图片格式损坏,鼓捣半天才发现文件被写没了。
例子
path = "./test/"
files = os.listdir(path)
for filename in files:
f = open(os.path.join(path, filename),'rb')
print(filename)
print(os.path.join(path, filename))