`
文章列表
引子 UT的重要性不言而喻,这里不用多说。但是,码农都知道,一段逻辑往往涉及到很多外部系统调用(不同的数据源、不同的服务等等),配合完成一段code真正想要完成的逻辑。 而UT(Unit Test)本身的重要思想之一,就是测 ...
为毛需要转换 历史原因,公司内部的source code中充斥着大量的GBK编码,但是明显UTF-8更适合国际化的字符需求。如果不转换,在IDE中各种字符编码切换,各种蛋疼。一不小心,多种编码一叠加,造成不可逆的乱码保存,那就永远乱码的噩梦了。当然,更好的国际化支持,除了统一用UTF-8保存文件之外,更好的做法是,source code中压根就不应该出现中文(当然,这点可能会被很多人喷,算了,这个不是重点,本文的重点是怎么转)。 如何转换 基本都是利用*nix系本身提供的iconv一行帮你搞定问题。 *nix
Apache常用的两种MPM 讨论这个问题时,有必要先界定Apache运行时到底load的是哪个MPM,prefork和worker毕竟运行时在Server端的资源消耗有一些差别。 prefork:典型的“一连接一进程”模式(每个进程内部就启动一个系统线程),在相同的并发连接情况下,显然要比worker模式消耗更多系统资源(最主要消耗的就是Server的RAM,其实很多时候,调优关注的焦点也是如何合理的利用RAM以控制不会因为过多进程存在而导致频繁使用swap)。不过正是因为他没有线程共享上下文的顾虑,很多时候使用他是最安全最方便的,因为你也不用操心你load的其他module里面是不 ...
传统VCS的回滚操作 对于版本控制系统VCS来说,回滚这个操作应该是个很普通也是很重要的需求。 如果你是传统VCS,比如SVN或者P4来说,revert是个最直观,也是最直接的手段,当然前提是你的修改还没有被提交到远程的中央仓库。 如果你已经ci了你的code到了远程中央仓库,那revert恐怕也无能为力,只能借助其他命令workaroud这个问题,比如:你用SVN的话,就得来个逆向merge操作,把所有的修改都merge回去。 但这样做也有一些弊端: 这次merge会作为一次全新的commit记录记录下来,也就是说它不能真正从你的历史记录里面抹掉你那次不想要的修改。通常情况下其实也 ...
这个东东有人把他直译为环视,到也还算贴切。因为本来这东西就分为head和behind两种类型。 分别表示找前面的和找后面的部分。然后又根据是想匹配括号里的内容还是不想匹配括号里的内容,分为了Positive和Negative两种。这样你就会发现目前已经分别在两个维度上有了分别两种分法,于是这就组合出了LookAround的全部四种情况: Positive Lookahead Negative Lookahead Positive Lookbehind Negative Lookhehind 看了上面说的东西,我自己都觉得晦涩,还是得上例子。 假设我一个文件,里面有N多的abc ...
公司内部一哥们发布到邮件列表中的一个小tip,挺有意思,属于程序员的“奇淫技巧”类吧,值得记录一下。 如果你在linux下工作,那用tail -f跟踪一个日志文件的输出内容应该是家常便饭了。 但是,有时你更关心的是一些敏感字词,希望能够在动态跟踪的同时,把这些字词高亮出来,比如日志中的ERROR关键字。 那么,一种思路就是把你tail输出的东西再做一次包装处理,这个很符合linux管道处理的思想。以高亮Log中的ERROR为例,你可以这样: tail -f xxx.log | perl -pe 's/(ERROR)/\e[1;31m$1\e[0m/g'  其中,xxx.log是你要跟 ...
中文乱码的那些事儿(一)中基本没提及任何乱码的事情,被骂标题挡了,本篇主要侧重乱码问题的排查过程,讨论一下处理这类问题的思路。 一次典型的B/S结构的Web请求过程大概是下面这个样子的: 浏览器发起request(第 ...
昨晚帮同组一个新入行的intern解决了一个中文乱码的问题,想想这个中国程序员几乎无法回避的问题,曾经引得多少程序员竞折腰!很多新人被搞的晕晕乎乎很大一部分原因是因为网上关于这个问题的“歪门邪道”的解法太多,各种场景,各种解法,有人蒙对了,问题解决了,happy ending!有人运气不好没碰上,只能抓狂了。。。 其实这个问题的根本原因不难,谁都都知道问题的关键就一点:编码字符集和解码的字符集不一致! 可是具体要找到怎么造成的不一致,这个过程往往没那么简单,你要熟悉你的字符在整个传输过程中,在哪些地方被编码了,又在哪些地方被解码了。在复杂一点的场景中,这些地方可能不止一处,甚至还会在中间 ...
.prop()这在1.6之后引入的方法在JQuery的官方文档上的解释的很坑爹,就是attribute和property的区别。 对于不清楚attribute和property的区别的人来说,根本看不出来啥区别。 找到两篇国外程序员兄弟的博客,写的不错,记录一下链接: http://techbrij.com/jquery-attr-vs-prop-difference http://jq4you.blogspot.com/2013/04/jquery-attr-vs-prop-difference.html   这位兄台从源码级别做了一些解释,也不错: http://www.ja ...
无过滤条件的LEFT JOIN SQL中最简单形式的LEFT JOIN,是直接根据关联字段,以左表为基准,对右表进行匹配。在SELECT语句中选取的字段,如果有右表的记录(一般都是需要右表的某些记录的),取出配对成功的右表记录中对应的这 ...
git作为DVCS的强大功能之一就是可以不用中心server节点,直接在developers之间的host同步源码。这个好处有很多,比如可以想到的一个比较明显的好处就是:可以在code尚未ready的情况下,随意在host之间同步,方便协作开发。(试想 ...
关于时区,其实应该是个地理概念。通常情况下,当我们跟别人说:“现在是上午11点23分”这句话时,隐含了一个信息,那就是我们做了一个假设:我们都处在同一个时区——标准时间东八区,或者是电视上常说的“北京时间 ...
while和foreach分别对应Perl的scalar context和list context。这点最大的区别就是:对应一个大文件的处理,在联合钻石操作符<>或文件句柄<fh>时,要格外小心。因为前者是读取文件一行,进入while循环处理这一行,然后再读取下一行,依次读取执行。后则,则是一次性读入文件所有内容,再进行foreach内部的循环,这样可能效率更高,但是遇到大文件时,又有可能撑爆内存。 print函数在后面紧跟参数不包括括号时,相当于list context;但是后面如果一旦出现左括号,就相当于scalar context了,他的参数也仅限于括号里面 ...
最近几天遇到了好几次Oracle的这个问题了,场景不太一样而已(注意:标题上的Y的单位是KB): insert into table1 values(...) select (...) from table2:(会占用temp tablespace,如果table2数据很大,temp tablespace不够大的话,可能会报出上面的问题) update table1 set is_deleted='Y':(因为在table1上建有物化视图,而这个视图要新增对应的物化视图的log表,由于这个log表对应的tablespace满了,导致上面的问题) insert into table1 v ...
J2EE Web应用的部署描述符DD对于Web开发人员通常都不会陌生,不过某些细节的问题,不好好研究一下Servlet的规范,就可能有些模糊了。 今天遇到个问题:当一个被请求的Web资源符合多个Filter配置的mapping规则时,这些Filter执行的顺序是怎样的?是根据filter标签本身在web.xml中定义的顺序执行,还是根据filter-mapping标签在web.xml中定义的顺序执行呢?   这个问题网上很多人的说法非常模糊,并没有清楚区分两者的顺序区别(其实在绝大部分场景中,两者的顺序通常是一致的)。终于在Sun当年给出的web.xml的XSD文件中,找到问题比较清楚的说 ...
Global site tag (gtag.js) - Google Analytics