我不喜欢这个东西的原因仅仅是他用了python
http://www.douban.com/group/topic/9551477/
DevOps
我不喜欢这个东西的原因仅仅是他用了python
http://www.douban.com/group/topic/9551477/
大致的原则是在js中基本别使用use strict, 比较详细的说明:
http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/
目前使用的scmascript 为4, 更多参考:
http://www.ecmascript.org/
http://zh.wikipedia.org/zh/ECMAScript
http://www.jslint.com/
1. 使用dot引用要比下表引用的效率高; 如: arr["a"] 不如 arr.a的效率高,只是如果下表是数字就不能使用dot来引用了
2. for in 与 if hasOwnProperty
Array.prototype.a = function(){alert(‘a’);};
var arr = ["a","b"];
for (var i in arr) {
if (arr.hasOwnProperty(i)) {
alert(arr);
}
}
对于一个数组,你可能希望使用for in来遍历,但是里面总是有一些其他的东西,使用hasOwnProperty就可以搞定了
今天一个同事打电话说他在退出的时候会出现一个confirm("您确定要退出吗");的提示,他又确信没有写这段代码。
我使用httpwatch抓到所有页面的内容之后,使用httpwatch的find功能,查找到了confirm是出现在一个不太相关的js中,内容包含:
1 |
$("#logout").click(function(){if(confirm("您确定要退出吗?"))...<br /><br /><br /><font size="3"><font face="Verdana">很明显,这里发生了元素ID污染的现象了,两个地方使用了相同的元素ID了。<br /><br />所以,页面中一定要注意全局污染的问题:<br /></font></font> |
1 |
<br /><font><font><font size="3"><font face="Verdana"><br />检查你的js中有多少全局变量: http://mankz.com/code/GlobalCheck.htm</font></font></font></font><br /><br /><br /><font size="3" face="Verdana">在处理这个问题的同时,也领教了httpwatch的find的好处,它就是页面的grep,很好很强大</font> |
http://baike.baidu.com/view/905669.htm
1.int main() {
fork();
fork()&&fork()||fork();
fork();
}
问:共创建了多少进程?
这道题我第一个映像就是短路求值,然后又想到了几何级数,以及fork函数,fork后还有fork
我的答案是20-1=19。前边的20是进程总数,后边-1是创建进程数
第一个fork完后共用2个进程(ID=1,ID=2),第二个fork,当返回值为0时,即子进程时,直接调用倒数第二个fork,于是ID=1,ID=2分别调到第二个fork,然后各调到倒数第二个fork,共形成了8个进程
第二个fork不为0时,即进程为母进程或第一个子进程时,则要看第二个fork如果第二个fork也不为0的话,则不用考虑第三个进程,最先存在两个进程调用最后的fork,然后形成了4个进程
第二个fork!=0,第三个为0时,则需要调用后边两个fork,则为2X2X2=8
所以除去最开始的进程,一共创建19个进程
2.#define NELE(a) (sizeof(a) / sizeof(a[0]))
int main() {
char str[] = {‘E’, ‘M’, ‘C’};
for (int d=-1; d<=(NELE(str)-2);d++)
printf("%c",str[d+1]);
return 0;
}
问:输出结果
什么都没输出,根据C99文档,sizeof是无符号的数,当表达式中出现了个无符号的数时,所有有符号转化成无符号,则-1将变成一个巨大的值,那么直接return了
3.int i=1;
printf("%d,%d\n",sizeof(i++),i);
问:输出结果
4,1
sizeof()在编译前就处理了,因此sizeof(xxx)就是求的是int的大小,而++被忽略了。。。
4.#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)
int main() {
printf("%s\n",g(f(1,2)));
printf("%s\n",h(f(1,2)));
return 0;
}
问:输出结果
12
ascii12代表字符
a##b字符12
#define g(a) #a引用字符12
#define h(a) g(a) g(a)被字符12代替,然后理解为了数字12
大网站一般都是用F5或其它的负载均衡设备,用户的每次请求落在那台real server都是不一定的,一次偶然的机会,发现相同的一个资源在两次访问时,http头中的etag是不相同的,主要是该资源一定是没有被修改的,于是想到etag的算法中可能使用到了资源在不同real server上可能不同的因子,于是参考了一下apache的文档(因为我们使用的是apache),文档地址:
http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/core.html#fileetag
默认情况下,etag和资源的inode有关系,而inode在不同的real server上基本是不相同的,于是,这样的etag还不如没有,因为这样该资源是每次都要返回全部信息的,可以修改apache配置文件,添加如下配置:
FileETag MTime Size
这样修改后,如果文件没有发生变化,则只需要返回304就行,不需要返回所有内容了。
如果不做这样的设置,对于使用f5的情况,etag或许还不如没有。
关于apache中etag的算法,可以参考源码: src/main/http_core.c 中的函数set_etag_bits
那么,你的apache是怎么配置的呢?随便访问一个能返回etag的资源,etag类似:
ETag: "1e50006-22d0-4ba718e6"
如果是“-”分隔的3部分,字基本是包含inode、mtime、size了,如果是两部分,那就是其中的两项了,注意,每一项产生的长短不是固定的,不能按照长短来分析。
一次在使用PHP的memcache-2.2.4模块访问mc时,不小心把含有tab的字符串做了key,在跟踪时发现我的key中出现tab的地方都成了“_”了,于是怀疑memcache-2.2.4对我的key做了处理了,于是看了memcache-2.2.4的源码,才发现如下函数,该函数里面将assii码小于空格的字符都要转换成“_”的。
int mmc_prepare_key_ex(const char *key, unsigned int key_len, char *result, unsigned int *result_len
TSRMLS_DC) /* {{{ */
{
unsigned int i;
if (key_len == 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Key cannot be empty");
return MMC_REQUEST_FAILURE;
}
*result_len = key_len < MMC_KEY_MAX_SIZE ? key_len : MMC_KEY_MAX_SIZE;
result[*result_len] = ‘\0’;
for (i=0; i<*result_len; i++) {
result = ((unsigned char)key) > ‘ ‘ ? key : ‘_’;
}
return MMC_OK;
}
今天突然又想起来了lvs,因为不需要硬件,就想自己也安装一个体验一下,由于windows上都不支持,所以就选择了我的Ubuntu;看了一些文档,发现安装太挺麻烦,都需要给内核打补丁,后来在新德里软件包管理器里找了一下,发现里面有了ldirectord,就是我要找的lvs, 还有pptpd,就是我要找了vpn server了,先不管怎么编译了,安装上试试吧。
今天太晚了,以后再研究吧。
今天发现一个进程在
futex(0x33a120, FUTEX_WAIT, 2, NULL <unfinished …>
处“阻塞”,反正不往下运行了,就暂且叫“阻塞”吧,而且ps时发现进程状态为“Ss”,看到“s”,我以为是一个deamon,这是一个PHP程序,我 看了看代码,发现里面没有任何关于deamon的处理,也没有while、for等循环语句,怀疑不是一个deamon,但是“s”是怎么出现的呢?
后来发现该进程是从crontab启动的,难道crontab启动的进程都会有“s”,测试了一个程序,确实是这样的。
至于为什么在futex处阻塞,明天再仔细看看源码吧。
关于futex (‘Fast Userspace muTexes’)的相关资料:
http://linux.die.net/man/7/futex
http://javadino.blog.sohu.com/99256728.html