版本1
1 | var isLeapYear = function(year) { |
1 | var isLeapYear = function(year) { |
一定一定要更具业务特点来划分出不同的队列,不能将所有的任务都让同一队列消费。
在实际使用异步任务的场景中,一定会有优先级不高的任务(如统计类)和优先级特别高的任务(如微信红包)。
若不划分队列,那么当统计类的异步任务很多很多的时候,
发送红包给微信用户的异步任务就要等待一段时间才能被执行到(任务多可能会等待十几分钟甚至一两个小时),这对用户体验来说是非常不友好的。
此时就可以将队列划分为low
,middle
,high
这几种队列,对于统计类的这些任务可以扔去low
的队列中,
而对于发送红包这种重要的任务就扔去high
队列中,确保尽可能快的被执行到。具体划分,需要更加业务场景来划分。
通过-Q
参数来指定队列名:
1 | celery -A proj worker -l info -Q low,middle,high |
1 | # 方式1 |
这里介绍使用pageres来进行网站截图。
安装
1 | npm install pageres |
使用
1 | const Pageres = require('pageres'); |
具体使用参考:pageres
安装
1 | npm install --global pageres-cli |
使用
1 | # pageres <url> <resolution> |
具体使用参考:pageres-cli
最近发现在使用node:8.9-alpine
全局安装`node-sass@4.8`时,安装总是失败:
1 | npm install -g node-sass@4.8 --sass-binary-site=https://npm.taobao.org/mirrors/node-sass/ |
执行结果如下:
1 | /usr/local/bin/node-sass -> /usr/local/lib/node_modules/node-sass/bin/node-sass |
配置Nginx+Gunicorn+Django时,发现所有请求都是返回Bad Request (400)
。
django的settings.py
配置ALLOWED_HOSTS = [*]
配置nginx反向代理proxy_set_header Host $host;
1 | proxy_redirect off; |
当访问http://example.com/a/abc.html
,
实际上方向代理到后端服务器http://10.0.x.x:8080/b/abc.html
,
那么可以按照以下方式进行配置:
1 | server { |
1 | # 缓存15分钟,也就是15分钟内不用重复输入帐号密码 |
1 | # 按时间正序排列 |
为修改已经存在的commit中的用户名和邮箱,必须重写整个git repo的提交历史。
警告:这种行为对提交历史具有破坏性,在无必要的情况下,不建议对其修改。
注意:完成重写后,任何fork或clone的人必须重新获取重写后的历史并把所有本地修改
rebase
入重写后的历史中。
复制以下脚本,并根据自己的需要修改以下变量:
OLD_EMAIL
: 要修改的邮箱CORRECT_NAME
: 修改之后的用户名CORRECT_EMAIL
: 修改之后的邮箱
脚本:
1 | #!/bin/sh |
执行脚本
常看历史有没有错误
将重写后的历史提交到Git远程仓库中:git push --force --tags origin 'refs/heads/*'
建议以上操作在一个新clone的仓库中进行,这样的话可以减少一些误操作。
Memoization
是一种将函数返回值缓存起来的方法。
Memoization
原理非常简单,就是把函数的每次执行结果都放入一个散列表(或数组)中,在接下来的执行中,
在散列表中查找是否已经有相应执行过的值,如果有,直接返回该值,没有才真正执行函数体的求值部分。
很明显,找值,尤其是在散列中找值,比执行函数快多了。现代JavaScript的开发也已经大量使用这种技术。
1 | var fib = (function() { |