摘要:不得不说,Obj-C所谓的中缀表达式真的蛮奇怪的,当无参或者只有一个参数时看起来还不错://无参数的方法-(void) say;[employee say]; //只有一个参数的方法-(void) say (NSString *)name[employee say @"lishujun"]; 但是方法多个参数时看起来就比较乱了,居然能把一个方法名分成不同的部分我觉得这样似乎更自然一些:#import @interface Employee : NSObject{ }@end@implementation Employee-(void)say:(NSString *)firs
阅读全文
摘要:首先说两件事情,我发现不同能力的人能掌控的代码行数并不一样,例如我,能掌控的一个函数长度也就在80行,而某些大牛能掌控的代码行数是一个函数150~300行(不过大牛要求这个函数相对清晰,也就是说这个函数可以做多件事情,但是函数内每段代码都只做一件事情,所以即使在函数内,代码也是一块一块的,否则大牛也一样觉得不爽),超过各自掌控的代码行数,都会觉得难受所以在能力的掌控范围内,大牛并没有强烈的提取代码的需求,而我因为掌控能力不足所以即使在没有明显复用的情况下也有比较强烈的提取代码的需求,所以我重构的一些程序,往往重构后代码的长度并没有明显的减小(当然清晰程度是有所提升的)但是这样有一个问题,就是当
阅读全文
摘要:一般来说如果在echo里直接写上\n,他不会被转义,必须加上-e参数echo "hello\n morning"# 输出为 hello\n morningecho -e "hello\n morning"# 输出为 #hello# morning貌似如果带-e参数,!等符号也变成shell的运算符,所以-e还是不能滥用
阅读全文
摘要:尽管Thoughtworks的首席科学家Martion folwer为“持续集成” 下了定义,但由于自身背景与经历的不同,每个人对其都有不同的理解。从狭义上讲,持续集成可以认为是一种基于某种或者某些变化对软件系统进行的经常性的构 建活动(注:这里的构建活动不仅指编译打包工作,还包含各类自动化测试、部署及发布活动)。然而,它忽视了一点,即:任何实践中都应该包含“与人的交互” 这一因素。因此,从广意上讲,持续集成应该是软件开发团队在上述活动的约束下所采用的整个开发流程及活动。它强调开发团队与持续集成系统之间的互动性。我 们既见过持续集成做得非常成功的团队,也见过效果不佳的持续集成,甚至失败的案例.
阅读全文
摘要:http://www.bitstech.net/2014/01/07/log-best-practice/前言日志用来记录用户操作、系统运行状态等,是一个系统的重要组成部分。然而由于日志并非系统核心功能,通常情况下并不受团队的重视。在出现问题需要通过日志来定位时,才发现日志还存在很多问题。日志记录的好坏直接关系到系统出现问题时定位的速度,同时可以通过对日志的观察和分析,提前发现系统可能的风险,避免线上事故的发生。我们在开发和运维NOS(网易对象存储,Netease Object Storage)的过程中,对整个系统的日志进行了分析优化,积累出一些经验,归纳如下。相关问题经验整理1.关于日志级别
阅读全文
摘要://VC6.0下成功编译#include class X{public: void foo(int b,int c){ this->a=b*c; cout 左 4)被调函数进行栈清理*///BCB6.0 下成功编译#include class X{public: void foo(int b,int c){ a = b*c; cout<<"a="<<a<<endl; } int a;};int main(){ X x; //04 void (X::*pXfoo)(int,int);...
阅读全文
摘要:等价的SQL,性能差异极大,数据库里设计了一个字段存储日期时间,但不是datetime类型,用了时间戳(int 11), 下面有2个SQL语句用于查询数据库,一个是把时间戳转成date进行查询,一个是把日期转成时间戳,直接用时间戳进行比对,虽然没有统计差多少,但从直觉上发现至少能差10倍以上-- 性能较差的SQL,把数据库的时间戳转成datetime,用字符串比对select bid,price,platform from bc_user_charged_list_wap_merge where from_unixtime(charged_time) like '20140116%&#
阅读全文
摘要:首先是知道时间转成时间戳date -d "2014-01-16 12:30:11" +%s date -d "2014-01-16" +%s # 等价于2014-01-16 00:00:00date -d "20140116" +%s # 等价于2014-01-16 00:00:00其次是知道时间戳,想要知道当时的时间date -d '1970-01-01 UTC 1389801600 seconds'# 1389801600 是2014-01-16 00:00:00 时对应的时间戳# 输出:Thu Jan 16 00
阅读全文
摘要:当业务逻辑很复杂,涉及多个条件的真假,或者多种条件下都会执行同一动作时,如何编写紧凑的if语句呢?本文借由一个实际例子,利用数学的布尔逻辑整理条件,最终产生if语句。问题在《X3 重聚》里,宇宙是一个个星区由跳跃门连接起来的。大多数星区是相邻的,也有部分星区是非连通的。这是X3 重聚星系图,右下的红色星区就是非连通星区。飞船从一个星区到另一个星区有两种方法,一是老老实实飞过去,二是跃迁过去。跃迁的话飞船要装有跃迁引擎和足够能量。能量由发电机供应。跃迁是跃迁到目的星区的跳跃门,跳跃门那里不能太挤,否则飞船会和其他飞船相撞。去非连通星区只能靠跃迁。问题来了。给定一艘船和它的当前星区以及目的星区,求
阅读全文
摘要:// awk代码,当continue执行时说明书是免费的if(!(int(use_curr) == 0 || int(use_curr) == 30000)) { continue }这段代码大概是半年前写的,半年后过来读,发现已经不理解这段代码了,虽然理解当contniue执行时意味着书是免费的,但到底是use_curr等于0或30000免费,还是不等于时免费,已经迷糊了!这里需要进行仔细推导:0 进入表达式 -> use_curr==0 为真 -> 反转为假 -> continue不执行 -> 收费的 -> 0和30000是收费的,其他为免费if(int(us
阅读全文
摘要:伯乐在线导读:2009年1月28日Arec Barrwin在StackOverflow上提问,“有没有关于大O符号(Big O notation)的简单解释?尽量别用那么正式的定义,用尽可能简单的数学来解释”。在经过众多热心网友的修改更新后,最佳回复的得分已高达 3234 分,详细内容,请见下文。最佳回复所给出的大O符号的最简单定义如下:大O符号是一种算法复杂度的相对表示方式。这个句子里有一些重要而严谨的用词:相对(relative):你只能比较相同的事物。你不能把一个做算数乘法的算法和排序整数列表的算法进行比较。但是,比较2个算法所做的算术操作(一个做乘法,一个做加法)将会告诉你一些有意义的
阅读全文
摘要:我去,今天读了一下ob的源码,感觉有点乱啊!!!好吧,当作练手,我重构了一个函数void* ObMySQLCallback::decode(easy_message_t* m) { uint32_t pkt_len = 0; uint8_t pkt_seq = 0; uint8_t pkt_type = 0; ObMySQLCommandPacket* packet = NULL; char* buffer = NULL; int32_t len = 0; if (NULL == m) { TB...
阅读全文
摘要:最近要为某国大选做项目,得把项目中所有汉字翻译为西文。项目中java、js文件几千个,eclipse中\w是无法识别中文的。所以下面这两条正则就算救命的工具了。匹配中文字符的正则表达式:[\u4e00-\u9fa5]:\u表示unicode,4e00~9fa5是unicode的中文编码段。匹配双字节字符:[^\x00-\xff]:一个汉字占两个字节,这个就很明显了。
阅读全文
摘要:http://www.ibm.com/developerworks/cn/linux/l-clear-code/我学习编写、改善和维护代码的过程是很艰苦的。在过去的 12 年里,我一直在编写计算机游戏并通过曾红极一时的共享软件技术进行网络销售,并以此为生。这就是说,我常常要从空白的屏幕开始从头编码,当代码达到数万行之后才能拿去销售。这也就是说,如果我出了错,我必须要自己去解决问题。当我在凌晨三点还在竭力寻找 bug 的时候,看着这些不知所云的晦涩代码,我不禁自问:“我的天啊,这些垃圾代码究竟是哪个笨家伙写的啊?”,很不幸,问题的答案是 “我”。在学习了良好、正规的编码技巧之后,我大受其益。本文
阅读全文
摘要:http://www.cnblogs.com/qq78292959/archive/2011/07/06/2099427.htmltar-c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。-z:有gzip属性的-j:有bz2属性的-Z:有compress属性的-v:显示所有过程-O:将文件解开到标准输出下面的参数-f是必须的-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。# tar -cf all
阅读全文
摘要:自从 Facebook 的第一行PHP代码,第一句 MySQL 的 INSERT 语句,开源就已经是我们工程哲学中的一个重要的部分。现在,我们使用、维护并为大量的主要项目做出了贡献——涉及多种领域如手机工具、大数据系统、客户端的web库、后端的运行库和基础架构,也涉及到开放计算项目,服务器和存储硬件。2013 是我们开源项目具有重要意义的一年,我们拥有大量令人自豪的新项目,为正常运行和维护它们的更新承诺,和使用它们的充满活力的社区一起工作的愿望。仅在我们的Github账户上,我们现在已经有超过90个仓库,有超过40,000次的提交,一共被复制了15,000次。年末是一个很好的机会来回顾我们投入
阅读全文
摘要:http://www.infoq.com/cn/news/2013/10/facebook-development-deploymentFacebook是世界上最大的社交网站,有超过10亿用户每月至少要登录一次,他们每天要上传超过25亿内容,支持这样一个站点的运行,还要不断发布新的功能,Facebook的工程师是如何做到这一切的?目前就职于Facebook的极限编程创始人Kent Beck在近期发表的一篇与别人合著的论文里向大家详细介绍了Facebook的开发与部署流程。显而易见,Facebook的工程师们不会像传统软件行业那样使用瀑布模型进行开发,他们不断地开发新的功能,并迅速上线,让用户能
阅读全文
摘要:http://www.infoq.com/cn/news/2007/12/does-lines-of-code-killSteve Yegge最近的一个帖子触动了开发社区的神经。Steve主张将代码数量保持在一个绝对的最小值,是软件开发中最重要的事情。依他的看法,即便仅仅出于缩减代码行数的理由,你或许也该牺牲一些设计模式和避免一些重构。如果问题域太大,做不到这一点——那么你可以换到另一种编程语言。……我相信,相当坚定地相信,对于一个代码库来说,最坏的事情就是它的大小。Steve认为,代码大小有毁灭性的影响:多数人可能不认同我的观点:山一样的代码是一个人、一个团队、一家公司所能遭遇的最严重的灾害
阅读全文
摘要:http://www.cnblogs.com/coderzh/archive/2010/01/09/beautiful-testcase.html使用gtest也有很长一段时间了,这期间也积累了一些经验,所以分享一下。GTest为我们提供了便捷的测试框架,让我们只需要关注案例本身。如何在GTest框架下写出优美的测试案例,我觉得必须要做到:案例的层次结构一定要清晰案例的检查点一定要明确案例失败时一定要能精确的定位问题案例执行结果一定要稳定案例执行的时间一定不能太长案例一定不能对测试环境造成破坏案例一定独立,不能与其他案例有先后关系的依赖案例的命名一定清晰,容易理解案例的可维护性也是非常重要,如
阅读全文
摘要:ps -ef| grep "/work/stat/read/search/sphinx/book_search_content.sh"|awk '{print $2}'|while read pid; do kill -9 $pid; done
阅读全文
摘要:message.h#ifndef MESSAGE_H#define MESSAGE_H#define TRUE 1#define FALSE 0typedef struct { int sender; int isSend; int isCharge; char date[8];}Message;Message * makeMessage(const int sender, const char *date);void setSendFlag(Message * const message);void setChargeFlag(Message * const mess...
阅读全文
摘要:http://blog.csdn.net/shandongdaya/article/details/7282547一 有限状态机的实现方式有限状态机(Finite State Machine或者Finite State Automata)是软件领域中一种重要的工具,很多东西的模型实际上就是有限状态机。FSM的实现方式:1) switch/case或者if/else这无意是最直观的方式,使用一堆条件判断,会编程的人都可以做到,对简单小巧的状态机来说最合适,但是毫无疑问,这样的方式比较原始,对庞大的状态机难以维护。2) 状态表维护一个二维状态表,横坐标表示当前状态,纵坐标表示输入,表中一个元素存储
阅读全文
摘要:2011年,人们对乔布斯的去世记忆深刻,但这一年还有另一位本应获得同样关注的人物也与世长辞,他就是C语言之父丹尼斯·里奇(Dennis Ritchie)。不过,并非所有人都没能正确认识到里奇所曾作出的贡献。“乔布斯的逝世引起了一片哭声,那种情形非常动人,而且乔布斯受到这样的待遇也是合情合理的。但在事实上,里奇对这个世界的影响更大,然而公众却甚至都不知道他到底是谁。”编程领域中的传奇人物、目前供职于谷歌(微博)的罗伯·派克(Rob Pike)说道,他曾在贝尔实验室与里奇共事20年。在里奇去世时,派克在Google+社交网络上发帖宣布了这一噩耗。2011年10月8日,在经历了长
阅读全文
摘要:/*我用python重构了一把这个代码大家的反应似乎是过度设计了好吧,我决定不那么激进,采用更中庸一些的重构我也有些疑惑:是否如果重构后的代码比重构前要多,就算过度了呢?*/void main(){ Queue queue = new Queue(); while(Message message=queue.Get()) { process(message); }}void process(Message message){ if(isAllowSend(message, setChargeFlag) == true) { set...
阅读全文
摘要:原文in here:http://outofmemory.cn/wr?u=http%3A%2F%2Fblog.mycolorway.com%2F2013%2F05%2F01%2Ftower-refactor%2FTower.im上线已经快半年了,这半年来我们团队小步快跑,为 tower 增加了许多新的功能,使它渐渐完善起来,在这个过程中,tower 的代码量也逐渐增加,随着时间的流逝,系统中积淀的糟糕的代码渐渐增多,于是趁着节假日的到来,花了些时间对代码做了部分重构,在这里记录下来,和大家分享。我们知道,重构代码,目的是为了对内让代码变得更精简,提高阅读性和可维护性,而对外不改变旧有的功能,所
阅读全文
摘要:原文:http://www.oschina.net/translate/basic-rules-for-code-readability-and-the-if-statement代码应该是可阅读就像你的自然语言一样。我将从一个有趣的条件语句开始。if ( !notOk != false ) { userObj.ask();}这样的表达式有点混乱,你永远不会使用自然语言构建这样的表达式。通过几个步骤,这个问题可以很简单解决:( !notOk != false )( !notOk == true )( !notOk)现在你应该重新想一个变量名啦:isOk = !notOk这个结果更适合阅读:if.
阅读全文
摘要:追求代码质量貌似是连载在IBM开发者社区的系列文章http://www.ibm.com/developerworks/cn/java/j-cq/专栏作者Andrew Glover是Stelligent Incorporated的总裁,这家公司用有效的开发人员测试策略和能够让团队在早期经常地监视代码质量的持续集成技术,帮助企业解决软件质量问题。他是Java Testing Patterns(Wiley,2004 年 9 月)一书的合著者。本文的原地址http://www.ibm.com/developerworks/cn/java/j-cq06306/index.html#N1007A我毫不惭愧
阅读全文
摘要:#!/usr/bin/env pythonclass Processor: def __init__(self, processor): self.processor = processor def isAllowSend(self, message, setChargeFlag): passclass WhildListProcessor(Processor): def isAllowSend(self, message, setChargeFlag): print "WhildListProcessor.isAll...
阅读全文
摘要:#!/usr/bin/env pythonclass Processor: def __init__(self, processor): self.processor = processor def isAllowSend(self, message, setChargeFlag): passclass WhildListProcessor(Processor): def isAllowSend(self, message, setChargeFlag): if message.sender in (1,2): ...
阅读全文