Memory

VS Code里设置tab转空格

怎么完美结合空格和tab的优点

header 用空格还是tab表示缩进一直都存在争议:)但是最近在vsocde里发现可以完美都结合的结合二者 body 先说说各自优缺点 tab的优点是方便,摁一下键盘就够了;缺点是不同的环境,tabsize不一定一样,有的是length = 4 spaces,有的是等于 8 spaces,可能在你的环境缩进正常,到了同事环境就乱掉了 空格的优点是:空格就是空格,到哪都不会变...

Python 多装饰器的执行顺序

当有多个装饰器时的执行过程

定义 首先定义两个简单的装饰器和一个被装饰的函数,代码如下: def wrap1(func): print("wrap1-1") def call1(): print("wrap1-2") func() return call1 def wrap2(func): print("wrap2-1") def call2(): print("wrap2-2") f...

Nginx 配置里 root 和 alias 的区别

root 和 alias 指令的差异

root 的写法 location /html/ { root /home/data/; } 当一个 URL 的路径部分为 /html/index.html的时候,则最终请求的资源的路径相当于/home/data/html/index.html alias 的写法 location /html/ { alias /home/data/; } 当一个 URL 的路径部分为 /...

(译)谨慎使用 format 格式化

之前的一篇渣翻

原文链接- http://lucumr.pocoo.org/2016/12/29/careful-with-str-format/ 前言 这个问题我本来应该早点发现的,但是直到今天早些时候我才真正地意识到 str.format 这个语法一旦被恶意用户利用将会有多么严重的后果。这个语法会被当作绕过 Jinja2 的沙盒检测(译者注:Jinja2 语法的一种安全措施)的一种手段,通过这种手段...

知乎和油管的彩蛋

有趣的vim彩蛋

这两天在两个网站上无意间接连发现了两个有趣的彩蛋,它们分别是: 知乎 在网页版的知乎上,j和k两个键位可以往下或者往上在答案之间移动 youtube 在看视频的时候,按j会回退10s,按i会前进10s,按k可以 播放/暂停 视频! 真是太有意思了,感觉应该是vimer故意设计的,hahaha~

交换值的有趣写法

如何不用中间变量即可交换变量值

在 Python 或者 Go 里,如果想交换两个变量的值可以直接一行搞定,非常方便 i, j = j, i 但是 C 里面没有这种写法,如果想交换两个变量一般都会声明个中间的临时变量,然后进行交换: temp = i; i = j; j = temp; 但是有种比较秀操作的写法,根本不需要第三个变量的参与,只需要这两个变量本身即可: i = i + j; j = i - j;...

c primer plus勘误

程序17.2的一处错误

逻辑错误 在《c primer plus》第六版第17章的第二个程序(17.2)里有一处释放堆的程序如下: /* 完成任务,释放已分配的内存 */ current = head; while (current != NULL) { current = head; head = current -> next; ...

说说C里的多维数组

好玩的多维数组

先看一段代码 输出 这段代码的输出在我的Mac上输出如下: x[0] = 0x7ffeecd3ca30, x = 0x7ffeecd3ca30, &x = 0x7ffeecd3ca30 x[0] + 1 = 0x7ffeecd3ca34, x + 1 = 0x7ffeecd3ca38, &x + 1 = 0x7ffeecd3ca40 解释 第一行的的三个值都是...

数据对齐的原理

从底层探究数据对齐

数据对齐 在x86-64硬件上写C的struct的时候,如果声明了如下结构: struct { int i; char c; int j; } S1; 从表面看,这个struct所占的内存空间应该是9(4+1+4)个bytes,但是实际上它却占了12bytes的空间。 之所以会出现这种现象,是因为编译器在字段c和j之间填充了3字节的间隙,这样的话j的偏移量就是8...

Django使用数据库事务

记一次Django的事务应用

需求 有个需求就是在Django的一次请求里,需要先创建域名,然后再创建配置信息并关联域名。 存在的问题 这种一次请求里涉及多次改变数据库的情况,一般都会有个大坑,就是前面的操作成功,然后中间出错导致后面的操作失败。比如域名的这个需求,如果域名创建成功,然后创建配置的时候出错,就会使得域名已存在但是配置不存在,如果想从头再来一次,很遗憾,域名是唯一的,不允许再创建相同的。 解决思路 ...