2011年8月23日星期二

程序员装B指南


一、准备工作

“工欲善其事必先利其器。”
1.电脑不一定要配置高,但是双屏是必须的,越大越好,能一个横屏一个竖屏更好。一个用来查资料,一个用来写代码 。总之要显得信息量很大,效率很高。
2.椅子不一定要舒服,但是一定要可以半躺着。
3.大量的便签,各种的颜色的,用来记录每天要完成的事务,多多益善。沿着电脑屏幕的边框,尽量贴满,显出有很多事情的样子。
4.工具书,orelly的,机械工业,电子工业什么的都可以,能英文就英文,不行影印版的也可以,反正越厚越好,而且千万不要放在书架上,一定要堆在桌上,半打开状。

二、从进门开始

1.着装!着装!不管你是去实验室,或者去公司的大楼,在或者是小公司的民宅,或是自己创业的黑作坊;无论是春夏秋冬白天晚上刮风下雨电闪雷鸣台风龙卷风,一个装b的程序员都要十分在意自己着装!这里只提出参考建议。初级装:衬衣+牛仔裤+休闲鞋。中级装:T恤+宽松短裤+拖鞋。高级装:背心+宽松大花裤衩+人字拖。
2.得体的举止。在走廊以及任何形式的过道里,一定要双手插兜,走得像个痞子,至少要看起来有点反社会,如若不行,可走文弱天才型geek路线。。
3.如果有女性在你背后指指点点,小声嘀咕说这一定是一个技术男的时候,应该先低头,然后保持低头状态,缓缓回头,坏坏地蔑笑但是不要出声,然后快步前行。
4.进门后,一定不要跟任何人打招呼,笔直走向自己的位置,最多路过打一杯咖啡,千万不要有多余的动作,显示出自己的专注与心无旁骛。

三、坐下就不要再动了

1.坐下以后,姿势需要略微后仰,能翘着二郎腿最好了,然后在后仰的情况下低着头,以便看到屏幕,然后千万就不要再动了。
2.粗暴地把电脑前的大堆书推开一个口,然后摘下电脑上的一个便签,看一眼,不过3秒,可以开始coding了。
3.能不用IDE就不要用,实在装不了,无论IDE是什么,一定要调成DOS那种黑色背景的。
4.如果写前台界面,就不停地调试后台代码;如果写java,就在里面混编C;如果写C,就在里面混编汇编。不光要coding,还要时不时的翻出一本什么英文的书翻一翻,看不懂就看看插图,然后扔到面前假装懂了继续coding。
5.什么看起来高端就用什么,不要管实用不实用。例如对C++:switch统统重构成多态;如果有指针,统统改成智能的;C++一定要自己写 template;数字是全部要替换成宏的名字能起多长就起多长;struct就不要出现了,如果出现,也一定要用__attriburte__修饰一下;运算都是位操作的;操作符都是重载的;网络都是并发缓冲线程池的;int只用int32_t声明的;继承不用普通的,什么多继承虚继承啊;helloworld也要写捕获异常的;后人一看代码,中间一堆关键字 extern,asm,auto,XXXXX_cast,volatile,explicit,register,template,让一般总在敲 int,if,else,for的小程序员 顿时心生崇拜。
6.注释?算了吧。只有两个路线可以选:一,变量名起得巨长无比,看代码就和读英文文章一样顺畅,根本不需要加注释。 二,代码无比晦涩,加不加注释根本无影响。
7.千万不要用IM工具交流,千万不要问同事问题,显得自己没有水平,都是自己上网或者查书。
8.无论是同事间开玩笑或者发生任何群体性时间,不要抬头,更不要东张西望,即使地震火灾,也一定要先提交代码再行离开。

四、潇洒地离开

1.人走,主机是千万千万不能关的,至少要跑个daily build,实在不行正在svn提交也勉强算过关。
2.书应该已经又堆到屏幕前了,千万不要整理,明天再来推开。
3.不强求最后一个走,但一定要所有的非程序员,什么市场啊前台啊pm啊都走光了,才可以走。
4.走得时候一定要率性,千万不要收拾任何东西,站起来,出门,好的,就这样。
5.如果今天一定要说句话的话,找到那个最苦逼的程序员 ,跟他说,你进度太慢了啊,不要老让我等你。
就写这么些吧。最后,送上《苦逼的程序员之歌》 (来自为什么我们程序员晋升这么难 的网友评论):
在那山的这边海的那边有一群程序员,他们老实又胹腆,他们聪明又没钱。他们一天到晚坐在那里熬夜写软件,饿了就咬一口方便面~~哦苦命的程序员,哦苦逼的程序员,只要一改需求他们就要重新搞一遍,但是期限只剩下两天……

关于include_once的一个问题

include.php代码
<?php
$array = array(1,2,3,4,5);
?>
运行代码
<?php
// Is OK!
function for_include_once($include) {
  for($i=1;$i<4;$i++) {
    include_once $include;
    echo 'for'.$i;
    var_dump($array);
  }
}
// Is OK!
function foreach_include_once($include) {
  $a = array(1,2,3);
  foreach ($a as $v) {
    include_once $include;
    echo 'foreach'.$v;
    var_dump($array);
  }
}
$include = 'include/include.php';
// Is Not OK!
foreach_include_once($include);
for_include_once($include);
?>
单独运行foreach_include_once或者for_include_once都是OK
但是一起运行的话,后面的则得不到值.
在foreach内部include_once只有第一次include了.
其他的几次直接调用变量$array,没有include.
for的时候因为上面foreach已经include过,所以不会再include.
则得不到$array的值.

2011年8月22日星期一

项目中的“破窗效应”

  这篇文章里的话,正是我要说而没能表达出来的,特转载于此。    
国人开始抢购碘盐了,作为一个稍有思考能力的人,就会认为这是个神奇的国度,盐这个商品,在不缺货的情况下也能被疯抢。其实,这个现象不是中国特色的,最先还是由美帝国主义总结的理论。美其名曰:破窗效应。

     什么是破窗效应?
    
    一扇窗户被打破,如果没有修复,将会导致更多的窗户被打破,甚至整栋楼被拆毁。由美国政治学家威尔逊和犯罪学家凯琳观察总结的“破窗理论”指出环境可以对一个人产生强烈的暗示性和诱导性。
    当股票暴跌了,大家都抛售股票;当号称大豆缺货了,就开始豆你玩了;最有意思的一个故事是,瑞典某小银行的屋檐建的适合躲雨,结果一次下雨,跑到下面躲雨的人太多,大家还以为该银行要破产了,就疯狂的取钱,结果该银行还真的被取钱取的破产了。
    这下,我要用“不明真相”四个字来形容各类破窗效应的群体事件。在IT界,这样的事情其实也不少。
     业务:大家都在被云,被团,被微博
    各大厂商要是不带和cloud有关的产品,都不好意思出门参加会议。中国移动用hadoop搭建一个云平台,看看里面的内容,就感觉是一个皇帝的新装。因为潮流,所以大家都做,不做没有面子。
    90年代末的互联网,2005年开始的视频,2008年的云计算,2010年的团购……计算机世界的业务还真的如同女人的衣服,大家都跟着潮。
     架构:我的离子炮很牛B
    就是几个页面的小网站,用了spring,struts,ibatis,甚至还把nuts也搞上,美其名曰,我们需要……需要你妹!您是不是搞JEE忘记了有servlet,本来1天都可以搞定的,非要2天去研究,1天半去搞定。
    拓展性怎么办?
    我很想告诉大家的是90%多的互联网产品不需要拓展性,因为做出来根本没人会关注。后来就慢慢的淡下来了,再后来就消亡了。看到别人用的爽,你也非要在项目中实战一把。您就不能上班时间去看优酷么?
    前2年SOA火了,我们的架构是基于***,很好,很强大,那么,请问,***有哪几个分支,你们是基于那种类型的***的呢?恩,您的炮炸膛了。
     API:你不知道我知道你不知道
   private  Lock lock = new ReentrantLock();
   try{
         lock.lockInterruptibly()
         ……//业务处理
   }catch(InterruptedException e){
         logger.error(e);
  }
    看到这段代码,当时哥就抑郁了,用了lockInterruptibly为什么不优先处理Exception,反而跑过去悠闲的写自己的业务逻辑去了。系统中很多这样的代码,后来我问了下,原来,部门的某牛人写错了,所以大家跟着都这样写,很多人不问为什么要这样显示加锁,就是跟风去用下。
    还有就是ArrayList在系统中几乎应用到所有场景,有时候LinkedList更适合的场景,依然在被ArrayList。HashMap的命运也是这样的,当由于并发使用HashMap来玩锁的,我只能表示低调的路过了。是的,大家都这样玩,您为什么要搞特殊呢?
    Collections.synchronizedList真的能够把同步搞的万事大吉?不要等着被搞的抑郁了,才去看文档。因为自以为是,我也被系统耍过很多次,对API,不要简单的就从了别人的思路。
    走自己的路,不要去“抢购碘盐”。Kaopuability很好滴!

MySQL Optimize Table

Optimize Table是个好东西,很难说他能帮我们提高系统运行效率(具体的讨论可以到这里看:http://www.xaprb.com/blog/2010/02/07/how-often-should-you-use-optimize-table/),但明显的是可以帮我们回收更多的空间、减少碎片。
    官方是这么说的
OPTIMIZE TABLE should be used if you have deleted a large part of a table or if you have made many changes to a table with variable-length rows (tables that have VARCHAR,VARBINARYBLOB, or TEXT columns). Deleted rows are maintained in a linked list and subsequent INSERT operations reuse old row positions. You can use OPTIMIZE TABLE to reclaim the unused space and to defragment the data file. After extensive changes to a table, this statement may also improve performance of statements that use the table, sometimes significantly. 
1. 回收空间 Defragment
在InnoDB的维护过程中,我们总会遇到磁盘耗尽、或者InnoDB Tablespaces用完的情况。这时候,在考虑扩容等方案之前,最好先使用Optimize Table试试。如果你的表大字段(Text Blob Varchar),并且更新、删除较频繁的话,Optimize之后可能会腾出大量的空间。需要注意的是这仅仅是针对INNODB而言的
2. InnoDB 和 MyISAM
目前支持optimize命令的引擎有 MyISAM, InnoDB, and ARCHIVE,对于InnoDB,会将optimize命令映射为ALTER TABLE命令,该命令会重建数据表,更新索引统计信息、回收主键索引中空间。
     如果你的MySQL是有备库的,如果你只希望在主库上执行的话,那么可以加上关键字NO_WRITE_TO_BINLOG(或者LOCAL,意思完全相同)。

Memcached参数详解


Memcached参数中文详解

Status

参数描述
pidmemcache服务器进程ID
uptime服务器已运行秒数
time服务器当前Unix时间戳
versionmemcache版本
libeventlibevent版本
pointer_size操作系统指针大小
rusage_user进程累计用户时间
rusage_system进程累计系统时间
curr_connections当前连接数量
total_connectionsMemcached运行以来连接总数
connection_structuresMemcached分配的连接结构数量
cmd_getget命令请求次数
cmd_setset命令请求次数
cmd_flushflush命令请求次数
get_hitsget命令命中次数
get_missesget命令未命中次数
delete_missesdelete命令未命中次数
delete_hitsdelete命令命中次数
incr_missesincr命令未命中次数
incr_hitsincr命令命中次数
decr_missesdecr命令未命中次数
decr_hitsdecr命令命中次数
cas_missescas命令未命中次数
cas_hitscas命令命中次数
cas_badval使用擦拭次数
auth_cmds认证命令处理的次数
auth_errors认证失败数目
bytes_read读取总字节数
bytes_written发送总字节数
limit_maxbytes分配的内存总大小(字节)
accepting_conns服务器是否达到过最大连接(0/1)
listen_disabled_num失效的监听数
threads当前线程数
conn_yields连接操作主动放弃数目
bytes当前存储占用的字节数
curr_items当前存储的数据总数
total_items启动以来存储的数据总数
evictionsLRU释放的对象数目
reclaimed已过期的数据条目来存储新数据的数目

SETTINGS

参数描述
maxbytes最大字节数限制(0无限制)
maxconns允许最大连接数
tcpportTCP端口
udpportUDP端口
interIP地址
verbosity日志(0=none,1=som,2=lots)
oldest最老对象过期时间
evictions是否禁用LRU(on/off)
domain_socketSocket域名
umask创建Socket的掩码
growth_factor增长因子
chunk_sizechunk大小(key+value+flags)
num_threads线程数(默认4,可通过-t参数设置)
num_threads_per_udp每UDP Socket中的工作线程数
stat_key_prefixstats分隔符
detail_enabled显示stats细节信息(yes/no)
reqs_per_event最大IO吞吐量(每event)
cas_enabled是否启用CAS(yes/no,-C禁用)
tcp_backlogTCP监控日志
binding_protocol绑定协议
auth_enabled_sasl是否启用SASL验证(yes/no)
item_size_max数据最大尺寸

SLABS

参数描述
active_slabsslab数量
total_malloced总内存数量

参数描述
chunk_sizechunk大小(byte)
chunks_per_page每个page的chunk数量
total_pagespage数量
total_chunkschunk总数量(chunks_per_page*total_pages)
used_chunks已被分配的chunk数量
free_chunks剩余chunk数量
free_chunks_end分配完page浪费的chunk数量
mem_requested请求存储的字节数
get_hitsget命令命中数
cmd_setset命令请求数
delete_hitsdelete命令命中数
incr_hitsincr命令命中数
decr_hitsdecr命令命中数
cas_hitscas命令命中数
cas_badvalcas数据类型错误数

ITEMS

参数描述
number该slab中对象数(不包含过期对象)
ageLRU队列中最老对象的过期时间
evictedLRU释放对象数
evicted_nonzero设置了非0时间的LRU释放对象数
evicted_time最后一次LRU秒数
outofmemory不能存储对象次数
tailrepairs修复slabs次数
reclaimed使用过期对象空间存储对象次数

上海松善实业有限公司

    上海松善实业有限公司是一家集多品牌销售于一体的电线电缆骨干企业,公司成立于2016年。 公司拥有国内各大品牌:起帆、远东、上上、江南、胜华等。     主要产品有:高低压电力电缆、橡套电缆、控制电缆、架空绝缘电缆、塑胶电缆、电子计算机电缆、通讯电缆、...