Skip to content

{ Monthly Archives } 一月 2008

新浪年会

公历的年初,农历的年底。 公司选择在这样的一个时候在这样一个地点来开这样一个年会:没有其它公司员工都有的年终,没有年底双薪,有的只是中奖面不到 1% 的抽奖。 本来以为所谓的年会,应该是一个“会”,也就是领导们讲讲话,大家鼓鼓掌,然后一些员工代表什么也发发言,大家继续鼓鼓掌。哪知道一开始,就吓了一跳:艳舞,惊艳全场。音响,灯光,烟雾,口哨,尖叫,看架势,整个一娱乐晚会。 带了相机,却没有拍到什么好的照片——虽然坐在所谓的 VIP 区域,却是vip的最后一排。想要看拍的好的照片,点击 这里 吧:(http://photo.sina.com.cn/list/photo_s.php?uid=1400314314&ctg_id=99798) http://photo.sina.com.cn/list/photo_s.php?uid=1400314314&ctg_id=99798 http://photo.sina.com.cn/list/photo_s.php?uid=1151840394&ctg_id=100380 http://photo.sina.com.cn/list/photo_s.php?uid=1495295187&ctg_id=99867 http://photo.sina.com.cn/list/photo_s.php?uid=1400042283&ctg_id=100257 http://photo.sina.com.cn/list/photo_s.php?uid=1402618337&ctg_id=101469

新浪年会

公历的年初,农历的年底。 公司选择在这样的一个时候在这样一个地点来开这样一个年会:没有其它公司员工都有的年终,没有年底双薪,有的只是中奖面不到 1% 的抽奖。 本来以为所谓的年会,应该是一个“会”,也就是领导们讲讲话,大家鼓鼓掌,然后一些员工代表什么也发发言,大家继续鼓鼓掌。哪知道一开始,就吓了一跳:艳舞,惊艳全场。音响,灯光,烟雾,口哨,尖叫,看架势,整个一娱乐晚会。 带了相机,却没有拍到什么好的照片——虽然坐在所谓的 VIP 区域,却是vip的最后一排。想要看拍的好的照片,点击 这里 吧:(http://photo.sina.com.cn/list/photo_s.php?uid=1400314314&ctg_id=99798) http://photo.sina.com.cn/list/photo_s.php?uid=1400314314&ctg_id=99798 http://photo.sina.com.cn/list/photo_s.php?uid=1151840394&ctg_id=100380 http://photo.sina.com.cn/list/photo_s.php?uid=1495295187&ctg_id=99867 http://photo.sina.com.cn/list/photo_s.php?uid=1400042283&ctg_id=100257 http://photo.sina.com.cn/list/photo_s.php?uid=1402618337&ctg_id=101469

密码保护:又是一年春来到

无法提供任何摘要。这是一篇受保护的文章。

密码保护:被保护: 艰难的生活

无法提供任何摘要。这是一篇受保护的文章。

TCMalloc:线程缓存的Malloc

作者:Sanjay Ghemawat, Paul Menage 原文:http://goog-perftools.sourceforge.net/doc/tcmalloc.html 翻译:ShiningRay (http://shiningray.cn/tcmalloc-thread-caching-malloc.html) 动机 TCMalloc要比glibc 2.3的malloc(可以从一个叫作ptmalloc2的独立库获得)和其他我测试过的malloc都快。ptmalloc在一台2.8GHz的P4机器上(对于小对象)执行一次malloc及free大约需要300纳秒。而TCMalloc的版本同样的操作大约只需要50纳秒。malloc版本的速度是至关重要的,因为如果malloc不够快,应用程序的作者就很有可能在malloc之上写一个自己的自由列表。这就可能导致额外的代码复杂度,以及更多的内存占用――除非作者本身非常仔细地划分自由列表的大小并经常从自由列表中清除空闲的对象。 TCMalloc也减少了多线程程序中的锁争用情况。对于小对象,几乎已经达到了零争用。对于大对象,TCMalloc尝试使用粒度较好和有效的自旋锁。ptmalloc 同样是通过使用每线程各自的场地来减少锁争用,但是ptmalloc2使用每线程场地有一个很大的问题。在ptmalloc2中,内存可能会从一个场地移动到另一个。这有可能导致大量空间被浪费。例如,在一个Google的应用中,第一阶段可能会为其URL标准化的数据结构分配大约300MB内存。当第一阶段结束后,第二阶段将从同样的地址空间开始。如果第二个阶段被安排到了一个与第一阶段什?用的场地不同的场地,这个阶段不会复用任何第一阶段留下的的内存,并会给地址空间添加另外一个300MB。类似的内存爆炸问题也可以在其他的应用中看到。 TCMalloc的另一个好处是小对象的空间最优表现形式。例如,分配N个8字节对象可能要使用大约8N * 1.01字节的空间。即,多用百分之一的空间。而ptmalloc2中每个对象都使用了一个四字节的头,(我认为)并将最终的尺寸规整为8字节的倍数,最后使用了16N字节。

布什的陷阱

转载自: http://tech.idv2.com/2008/01/09/bash-pitfalls/ 感谢fcicq,他的new 30 days系列为我们带来了不少好文章。 今天想分析的是这篇Bash Pitfalls, 介绍了一些bash编程中的经典错误。fcicq说可能不适合初学者,而我认为, 正是bash编程的初学者才应该好好阅读一下这篇文章。 下面就逐个分析一下这篇文章中提到的错误。不是完全的翻译,有些没用的话就略过了, 有些地方则加了些注释。   1. for i in `ls *.mp3` 2. cp $file $target 3. [ $foo = "bar" ] 4. cd `dirname “$f”` 5. [ "$foo" = bar && "$bar" = foo ] 6. [[ $foo > 7 ]] 7. grep foo bar | while read [...]

php基础测试

如何改进以下的这行php代码?这段代码可以被用来测试php工程师应聘者。 < ? echo(“Search results for query: ” .$_GET['query'] . “.”); ? > 这段代码非常适合用来测试一个php开发人员是否合格。因为这段代码并没有要求太多记忆上的东西(例如函数的记忆),但是对安全,性能,兼容性上都做了考察。

MySQL的Query Cache

本文按署名·非商业用途·保持一致授权 作者: surfchen@gmail.com  原理 QueryCache(下面简称QC)是根据SQL语句来cache的。一个SQL查询如果以select开头,那么MySQL服务器将尝试对其使用 QC。每个Cache都是以SQL文本作为key来存的。在应用QC之前,SQL文本不会被作任何处理。也就是说,两个SQL语句,只要相差哪怕是一个字 符(例如大小写不一样;多一个空格等),那么这两个SQL将使用不同的一个CACHE。不过SQL文本有可能会被客户端做一些处理。例如在官方的命令行客户端里,在发送SQL给服务器之前,会做如下处理: 过滤所有注释 去掉SQL文本前后的空格,TAB等字符。注意,是文本前面和后面的。中间的不会被去掉。 下面的三条SQL里,因为SELECT大小写的关系,最后一条和其他两条在QC里肯定是用的不一样的存储位置。而第一条和第二条,区别在于后者有个 注释,在不同客户端,会有不一样的结果。所以,保险起见,请尽量不要使用动态的注释。在PHP的mysql扩展里,SQL的注释是不会被去掉的。也就是三 条SQL会被存储在三个不同的缓存里,虽然它们的结果都是一样的。 select * FROM people where name=’surfchen’; select * FROM people where /*hey~*/name=’surfchen’; SELECT * FROM people where name=’surfchen’; 目前只有select语句会被cache,其他类似show,use的语句则不会被cache。 因为QC是如此前端,如此简单的一个缓存系统,所以如果一个表被更新,那么和这个表相关的SQL的所有QC都会被失效。假设一个联合查询里涉及到了表A和表B,如果表A或者表B的其中一个被更新(update或者delete),这个查询的QC将会失效。 也就是说,如果一个表被频繁更新,那么就要考虑清楚究竟是否应该对相关的一些SQL进行QC了。一个被频繁更新的表如果被应用了QC,可能会加重数 据库的负担,而不是减轻负担。我一般的做法是默认打开QC,而对一些涉及频繁更新的表的SQL语句加上SQL_NO_CACHE关键词来对其禁用 CACHE。这样可以尽可能避免不必要的内存操作,尽可能保持内存的连续性。 那些查询很分散的SQL语句,也不应该使用QC。例如用来查询用户和密码的语句——“select pass from user where name=’surfchen’”。这样的语句,在一个系统里,很有可能只在一个用户登陆的时候被使用。每个用户的登陆所用到的查询,都是不一样的SQL 文本,QC在这里就几乎不起作用了,因为缓存的数据几乎是不会被用到的,它们只会在内存里占地方。 存储块 在本节里“存储块”和“block”是同一个意思QC缓存一个查询结果的时 候,一般情况下不是一次性地分配足够多的内存来缓存结果的。而是在查询结果获得的过程中,逐块存储。当一个存储块被填满之后,一个新的存储块将会被创建, 并分配内存(allocate)。单个存储块的内存分配大小通过query_cache_min_res_unit参数控制,默认为4KB。最后一个存储 块,如果不能被全部利用,那么没使用的内存将会被释放。如果被缓存的结果很大,那么会可能会导致分配内存操作太频繁,系统系能也随之下降;而如果被缓存的 结果都很小,那么可能会导致内存碎片过多,这些碎片如果太小,就很有可能不能再被分配使用。 除了查询结果需要存储块之外,每个SQL文本也需要一个存储块,而涉及到的表也需要一个存储块(表的存储块是所有线程共享的,每个表只需要一个存储 块)。存储块总数量=查询结果数量*2+涉及的数据库表数量。也就是说,第一个缓存生成的时候,至少需要三个存储块:表信息存储块,SQL文本存储块,查 询结果存储块。而第二个查询如果用的是同一个表,那么最少只需要两个存储块:SQL文本存储块,查询结果存储块。 通过观察Qcache_queries_in_cache和Qcache_total_blocks可以知道平均每个缓存结果占用的存储块。它们的 比例如果接近1:2,则说明当前的query_cache_min_res_unit参数已经足够大了。如果Qcache_total_blocks比 Qcache_queries_in_cache多很多,则需要增加query_cache_min_res_unit的大小。 Qcache_queries_in_cache*query_cache_min_res_unit(sql文本和表信息所在的block占用的 内存很小,可以忽略)如果远远大于query_cache_size-Qcache_free_memory,那么可以尝试减小 [...]

转:2008年Linux 12个热点提示

阅读、练习下面的指示,舒适的使用Linux; 1. 尽量不要使用命令Ctrl+D结束会话或关闭终端D    * set -o 忽略错误激活 Ctrl+D * set +o 忽略错误禁用 Ctrl+D 2. 别名 — 我们给一个命令引入别名,shell 会用这个值重编码它。 3. 最近高频使用命令 —在控制台执行以下指令: history|awk ‘{print $2}’|awk ‘BEGIN {FS=”|”} {print $1}’|sort|uniq -c|sort -rn|head -10 4. 杀死一个确定程序的所有进程 。 打开终端输入:ps aux c。如果你要杀死的程序比如是 Firefox,命令将会是这样: ps aux c | grep firefox ,然后kill -9。下一次你运行 ps aux c | grep firefox,这个程序再也不会出现了。 5. 获取基本系统信息 [...]

MYSQL 常用函数备查

一.             控制流程函数 1.CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result …] [ELSE result] END CASE WHEN [condition] THEN result [WHEN [condition] THEN result …] [ELSE result] END 该语句用于在不同情况时,执行不同的语句,实例如下: Eg1. SELECT CASE WHEN 1>0 THEN ‘true’ ELSE ‘false’ END; 输出:true Eg2. SELECT CASE BINARY ‘B’ WHEN ‘a’ THEN 1 WHEN ‘b’ THEN 2 END; [...]