Mar 12, 2010
为了说明问题,我们看如下三个php文件:
//file: functions.php
require_once(’my_once.php’);
require_once(’my_once.php’);
function test()
{
require_once(’my_unonce.php’);
//require(’my_unonce.php’);
}
test();
test();
//file:my_once.php
printf(”%s\n”, ‘my_once’);
//file: my_unonce.php
printf(”%s\n”, ‘my_unonce’);
好,现在我们做一下测试:
php functions.php
输出结果如下:
my_once
my_unonce
这与我们期望的结果是不一致的,因为我们期望调用两次test函数,
即让test做两遍事情,但事实上只做了一次。
我们对functions.php改一下,require_once改成require(函数内部)
//file: functions.php
require_once(’my_once.php’);
require_once(’my_once.php’);
function test()
{
//require_once(’my_unonce.php’);
require(’my_unonce.php’);
}
test();
test();
再试一下,输出结果如下:
my_once
my_unonce
my_unonce
正是我们期望的结果。
时常听人说,即然有了require_once就不要再使require了,实不正
确的,各有各的用处点吧。
另外需要说明的是,实际效率也是不同的,require要比require_once快
好多。
多谢
张久安
If you enjoyed this post, make sure you subscribe to my RSS feed!
Mar 11, 2010
在面试过程中,我时常会问一道简单的题目:
请找出如下程序不妥之处:
void s_c(const char *s, const char *p)
{
while (*s) {
*p = *s;
}
}
首先,这道简单的题目考察的是找错能力,比如结束符和const的应用。
其次,考察的是接口设计能力,这也是重点。
没有返回值,因此对于一些异常现象不好对外表现,const是否应用正确,
函数名使用是否见其名知其意,函数参数是否见其名知其意,有没有对接
口的简述,指针,引用,就量传递使用是否正确等等。
比如改成如下:
/**
* brief: 拷贝字符串,从源串到目的串
* param[in]: src 源串地址
* param[out]: dest 目的串地址
* return: 成功 0
* 失败 错误码
[...]
Mar 10, 2010
TIOBE网站发布了最新的三月份编程语言排名,本月排名情况和上月相比并无显著变化。
比较有意思的是,Objective-C是上升势头最明显的编程语言,而Google推出的Go则经历了诞生后的首次略微下滑。此外,Fortran取代Lisp/Scheme挺进前20;Matlab则上升6位,接近成为主流编程语言。
Matlab是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,广泛用于科学计算,也可以用于算法开发、数据可视化、数据分析,是一种高级技术计算语言和交互式环境的组合,主要包括Matlab和Simulink两大部分。
与之前的排名相比,20到30名的名次变化较多,显示这些语言总体上都在伯仲之间。
按TIOBE自己的说明,TIOBE编程语言社区排行榜是编程语言流行趋势的一个指标。每月更新。这份排行榜排名基于互联网上有经验的程序员、课程和第三方厂商的数量。排名使用著名的搜索引擎(诸如Google、 MSN 、雅虎)以及Wikipedia和YouTube进行计算。请注意这个排行榜只是反映某个编程语言的热门程度,并不能说明一门编程语言好不好,或者一门语言所编写的代码数量多少。
这个排行榜可以用来考查你的编程技能是否与时俱进,也可以在开始开发新系统时选择语言时用来进行策略性的决策。排行榜的详细定义可以参考这里。
需要特别注意的是,这个排名并不反映国内编程语言的现状,相对国内,它往往显得比较超前,但它代表的趋势很有参考意义。
If you enjoyed this post, make sure you subscribe to my RSS feed!
Jan 22, 2010
上面搞了几篇休闲的文章,下面接着写篇技术方面的东西吧。
文件的合并与拆分是经常遇到的问题,比如为了对日志的统一管理及查询,
可能经常需要将许多日志合并成一个,然后对这一个文件作处理,这样可以
提高工作效率,下面来给大家先讲述如何利用awk来实现文件的合并。
利用awk命令实现文件的合并:
比如有文件f1, f2, f3,f4,可以利用下面的命令来实现文件的合并:
for i in `seq 1 4`; do awk ‘{print FILENAME ” ” $0;}’ f$i >> fall; done
好了,现在fall的第一个字段为文件名,后面为文件的内容,简单吧!
有时候又会遇到另外一个问题,比如定位问题的时候,我们知道它在哪
个文件出了错,想更细节的在这个文件去查找,但如果在fall内部查找,可能
会花大量的时候流费在定位出问题的点上。为了解决这个问题,就需要文件的
切分还原了。下面来介绍一下文件的拆分。
利用awk命令实现文件的拆分:
我们可以使用如下简单的合令来完成此项任务:
awk ‘{fname=$0; sub($1, “”, $0); print $0 >> fname;}’ fall
简单吧,快试验一下吧。
如果想了解更为详细的awk用法,请到这里转转吧:http://blog.niukey.com/2009/05/12/awk%E5%91%BD%E4%BB%A4%E4%BD%BF%E7%94%A8%E5%B0%8F%E8%8A%82/
多谢
张久安
awk ‘
If you enjoyed this post, make sure you subscribe to my RSS feed!
Jan 5, 2010
NLP Toolbox
CLT http://complingone.georgetown.edu/~linguist/compling.html
GATE http://gate.ac.uk/
Natural Language Toolkit(NLTK)
http://nltk.org
MALLET http://mallet.cs.umass.edu/index.php/Main_Page
OpenNLP http://opennlp.sourceforge.net/
English Stemmer
Snowball http://snowball.tartarus.org/
English POS Tagger
Stanford POS Tagger http://nlp.stanford.edu/software/tagger.shtml
TreeTagger http://www.ims.uni-stuttgart.de/projekte/corplex/TreeTagger/
TnT http://www.coli.uni-saarland.de/~thorsten/tnt/
English&Chinese Parser
Stanford Parser http://nlp.stanford.edu/software/lex-parser.shtml
Berkeley Parser http://nlp.cs.berkeley.edu/Main.html#Parsing
English Keyphrase Extractor
KEA http://www.nzdl.org/Kea/index_old.html
English Name Entity Recognizer
Stanford NER http://nlp.stanford.edu/software/CRF-NER.shtml
Chinese Word Segmentator 中科院ICTCLAS http://www.nlp.org.cn/project/project.php?proj_id=6
Stanford Word Segmenter http://nlp.stanford.edu/software/segmenter.shtml
Topic Modeling Tools
Matlab [...]
Dec 23, 2009
一般情况下,mysqldump数据时,需要锁表,以避免读赃数据。
但是今天需要dump一个长时间不变的数据,不需要锁表反道难住了。
最后查了一下,实际加一个参数就够了:
–lock-tables=0
一切DONE
多谢
张久安
If you enjoyed this post, make sure you subscribe to my RSS feed!
Jun 17, 2009
昨天自已也因为cvs的版本控制困惑了几个小时,查阅了相关资料,最终获得了自已想要的结果。实际整个流程梳理一下,很简单,不过对于当时不知道的情况下,就是一个很麻烦的事情了。现在以BLOG的形式记录如下,希望自已以后不再犯这样的困惑,也希望能给阅读了此篇文章的朋友有一点帮助。
背景:因为项目的并行开发,在主干上打了一个分枝作为其它项目的开发基线。现在主干已经上线,分枝也开发完毕。因此想将主干上的代码合并到分枝中来,以达到在上线的时候不复盖主干的代码的目的。
过程:查阅了相关的资料,有如下几个相关函数。cvs update -j(合并)cvs update -r (更新到某个版本) cvs tag -b (加某一分枝) cvs log 查看相关cvs log信息 cvs status当前版本状态。
为了便于说明与不涉及相关工作信息,下面以main代表主干,以branch代表分枝。首先在主干上打了main tag,命令如下:cvs tag main,添加一个test.txt,修改文件:
cat test.txt
aaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbb
ccccccccccccccccc
然后在这里打上分枝的tag,命令如下:cvs tag -b branch,现在修改test.txt文件:
cat test.txt
aaaaaaaaaaaaaaaaa
bbbbbbddddddddddd
ccccccccccccccccc
这样以保证主干和分枝是有充突的。
好下一步应该是合并了。操作命令如下:cvs tag -j main。结果不是想要的结果,并没有任何冲突,为什么呢?由此自已经过仔细思考和查阅相关资料,实现虽然打了分枝的tag,但实际并没有切到分枝,因此修改的仍旧在主干上。
为此做如下测试:
cvs tag mian; cvs status,可以看出是在主干上。cvs tag -b branch; cvs status,此时虽说打了分枝,但并没有切到分枝上,实际仍然在主干上开发。因此上面并不会充突。实际切到分枝也是很简单的。
cvs update -r branch,好了,此时再cvs update -j main,终于看到了可爱的<<<<<<<<<<<, >>>>>>>>>>>>冲突信息了。
多谢
张久安
If you enjoyed [...]