又是一年春来到

每当到了一年的这个时候,从国家到老百姓都忙着回顾自己在过去的一年中的点点滴滴,展望新的一年的发展。或规划,或计划,总有说不完的内容。

对我来说,过去的2010年是忙碌又混乱的一年,实验室的工作,公司的实习,还有找工作的事情,这三座大山一度压得我喘不过气。最忙的时候甚至凌晨4点睡觉,第二天早上8点不到就起床了。那段时间的神经一直处于高度紧张的状态,学校实验室、实习的公司、面试的公司三地来回跑,有时甚至经常得用一个接一个的谎言来跟实验室、实习的公司请假,在三者之间保持着微妙的平衡,有时候真恨不得能能不吃不喝不睡觉,压力大得真的不是一点半点。庆幸的是,自己还是挺过来了,现在回头看看那段时间,真的感慨人的潜力总是被巨大的压力逼出来的。

先说说在过去的一年中的实习经历吧,在暑期之前就早早定下了去eBay CDC做实习生,在eBay我的工作是参与eBay的开放平台Open eBay的SDK的开发和测试工作,我的Mentor是一位曾经做过老师的工程师William,人相当的Nice,做事非常有条理,而且相当的细致认真。在他的手下干活你不需要考虑、担心太多的东西,只需要安安心心的把布置给你的任务给完成掉,最后把代码提交给他做Review就OK了。开发过程中一般不会碰到很大的问题,因为William总是冲在最前面,通常把很多拦路的巨石给清理掉了。这样的好处是,一直走在他的身后,碰到的东西就相对简单容易很多。而坏处就是,感觉学不到太多的东西,做的东西感觉像是在做课程设计 ,少了很多锻炼的机会,这也促使我在实习期3个月结束后离开了eBay。离开了德国中心的eBay已经是9月底开学了,找工作的事情也越来越急迫了,根据师兄们的建议,我开始寻找找一个能留下来的公司来实习,为自己的Job Hunting之旅提早做准备。这次我选择了两家国内的IT公司,盛大和百度。盛大我投的是创新院,百度是上海研发中心,得知创新院是源于在Twitter上follow了一批推友,其中一部分部分技术大牛纷纷跳槽去了盛大创新院,而之后的一次推友聚会也认识了一些在创新院工作的朋友。而百度上海研发中心是因为实验室的哥们在那边实习,内部给出来的消息说今年上海大规模扩张,实习生基本上都能留下来。说来也很巧,在经过创新院在一轮笔试和面试之和百度在一轮笔试和电面两轮之后,等来了创新院的实习Offer。而百度给的却是去On Site面试的通知。当初也不曾多想,一时脑热,拿了创新院的Offer后拒掉了百度的On Site面试。这或许是我今年做得最失误的一个决定,这也直接导致我在之后的Job Hunting中一路坎坷。在创新院实习主要是做桌游平台的游戏逻辑服务器的开发,其中的一些细节可能不便多讲,但是在这里要十分感谢我的Mentor李伟,其实,他是一个比我还小1岁的哥们,但是技术方面比我高好几个Level,他不管是在做人还是做事方面对我的影响都非常大,教会我很多以后在工作中会用到的技巧和方法,实在是获益匪浅。

接着说说找工作的经历吧,面试的面经估计可以写好多篇了,这篇流水帐就记录一下找工作的经历吧。因为本打算要留盛大创新院,所以实习和找工作就只好两个进程同时处理,当时创新院的项目进度要求紧,加班是在所难免的,迎着朝阳上班,看着星星下班是家常便饭(这完全与eBay那种能5、6点钟看着夕阳下班安逸的日子不同)。经常是回到租住的房间已经晚上9点半,10点的样子了,洗完澡就差不多可以上床睡觉了,所以找工作需要的复习和准备的时间就少了很多,复习准备都是在周末抽空挤出来的。更糟糕的是,在盛大的4季报出来后,因为业绩下滑,实习生留用也受到了明显的影响。实习生的转正比推到了12月底实习期结束的时候。而11月份的时候我在百度实习的同学就已经收到了实习转正的通知了。这让我彻底的“淡定不能了”。一路坎坷的面试下来,到了12月初,手上只拿到了腾讯和思科的两个小Offer,而此时同个寝室套间的兄弟们已经开始为卖身成功而bg了,在某天早上还在床上迷糊的时候意外的收到了大摩的电话,问我是否愿意参加招聘,愿意给我先安排一个电话面试。为什么说意外是因为,当初我投了大摩的简历之后,笔试那天因为和另一场笔试冲突并没有参加笔试。电话面试大概45分钟,全英文面试,这是我第一次用英语跟人聊这么长的时间,而后来才得知电面我的面试官Kevin是来自英国的一个工程师。电话面试之后2、3天就收到了On Site面试的通知,而发面试通知的当天就是思科Offer的Dead Line,于是又一个两难境地摆在我的面前了,要么和思科先签约,再去面试大摩,要么拒掉手上最后的思科Offer,冒着巨大的风险去面试大摩。平时一直是风险厌恶型的我,竟然选择了后者,最后蒙上帝眷顾竟然面试成功,当收到Nancy的电话时真的是喜出望外。这也算是今年自己最大的成绩了。

这篇流水帐写到这里已经够长了,对于新的一年,有太多事情值得我去为之努力了。首先,作为应届毕业生,顺利毕业是头等大事,在新年的最开始,希望毕业答辩能顺利通过。其次,要完成从学生到一个工作者的转变,适应新的岗位,因为从事的是金融IT的工作,希望在新的一年里能了解业务,将自己的金融知识补强。最后,在业余时间要完成一个自己的项目,一个能盈利的项目。暂时就列这么三条吧,愿新的一年里让自己的成长的脚印能清晰而扎实。

BTW,差点忘了,新的一年也祝愿自己不再高唱单身情歌啊:)

Posted in 杂乱有章 | Leave a comment

记录一下最近的情况

好久没照顾这个Blog了,忙得实在是不行,用流水帐记录一下最近的情况吧。

1. 实验室的新闻增量聚类系统基本上完成了,接下来就是要写论文了。

2. 参加了盛大校园牛人大赛的基于“云计算”概念性服务平台的比赛。因为白天没时间,东西是自己在每个晚上抽一两小时一点一点码出来的。如果能获奖算是我这个暑假最大的收获了吧,不仅自学了编译原理,还开发了一个类似编译器的程序,还能赚点外快。

3. 开始去创新院实习,工作是做游戏的后台。

4. 开始忙着准备看些算法复习准备接下来找工作了。

5. 买了个ramhost的vps,准备这个主机到期后搬家过去,又要折腾一阵服务的安装配置了。

唉,好多事情,好忙,好累

Posted in 杂乱有章 | Leave a comment

盛大笔试归来

今天去参加了盛大2010暑期实习生的笔试,我投的是创新院的软件开发。先说说这笔试卷子的开头部分吧,开始写名字的地方除了名字,联系方式之外。还让你填写两样东西,大家猜猜是啥子?

公布答案,第一项:技术blog的地址。说实话看到要填这玩意儿,才想起真的好久好久没来这写文章了,最近实在是太忙了,忙完了老板的私活,忙实验室的项目,忙完了实验室的项目忙着找实习。当初计划的把Solr和一些Linux下开发的东西做个总结都才写了个框架,还在后台打着草稿呢。想想上面都没写过啥子太有价值的东西,不过还是厚着脸皮把wangshun.org写上去了。

第二项:参与的开源项目的名称。看来现在的IT公司也越来越重视开源了。记得今年的QCon Beijing上冯推神(@fenng)就让各大公司非正式表态说要开源一些自己公司的产品。淘宝接下来要开源分布式存储系统。各大公司回馈社区的开源产品估计也会出来了。想想当初自己想开源的爬虫项目JCrawler因为和SourceForge上的一个项目同名而不能发布在Google Code上感觉实在是有些郁闷。最后没办法,随便起了个JCrawler2写上去了。sigh,今天等下把项目代码check in上去吧。

除了试卷的开头比较特别以外,试题倒是中规中矩。都是一些基础题。但是做下来还是发现自己有些地方没有掌握,那个第二个strcpy的题竟愣是没看出来,字符数组没有以’\0′结尾。还有那个位域的题目,实在记不得结构体里面先声明的位域是在高字节还是在低字节了,好端端的在刚开始写对的情况下,交卷前把改错了。回来一翻书郁闷鸟~另外Windows的东西实在是不懂,还好题目涉及到这方面的不多。

每次笔试都是一次打怪涨经验的机会。考完了就不管了,但愿能给个继续打怪升级的机会,到时候再去盛大见见上次推友会上见过一面的霍炬(@virushuo)和老赵(@jeffz_cn)。

下了,看书去鸟,明天还得打那只带围脖的“企鹅”呢。

Posted in 工作就业 | Tagged , | Leave a comment

CentOS 5.4 yum安装的libevent存在问题

前面在介绍安装Memcached的时候说安装libevent的共享库和头文件只需要:
yum install libevent libevent-devel

今天在使用libevent的库做开发的时候,发现编译的时候报了一大堆错误,诸如:
/usr/include/event.h:92: 错误:字段 ‘ev_timeout’
/usr/include/event.h:199: 错误:‘size_t’ 没有命名一个类型

奇怪了,怎么会报库文件的错误,检查了自己的代码,应该不是自己的原因。放狗搜了半天,发现这个是一个早期的libevent库存在的Bug。原因是event.h库依赖于sys/type.h但是没有声明。而CentOS通过yum安装的仍然是远古时期的1.1.a版本。
这个Bug的report在这里(需翻墙,忍不住爆粗口了,mail-archive这种网站盾个毛啊!):

解决方法:
http://www.monkey.org/~provos/libevent/下载最新的稳定版本,从源码安装。

Posted in Linux | Tagged , | Leave a comment

CentOS 5.4下Memcachedb安装

Memcachedb需要使用libevent和BerkeleyDB。

安装libevent:
前面的文章已经介绍过在CentOS下如何安装libevent。
只需要使用yum命令安装libevent-devel即可:

yum install libevent-devel

安装BerkeleyDB:
接下来安装BerkeleyDB,在我些这篇文章的时候,最新的BerkeleyDB版本是4.8.26
但是最新的Memcachedb 1.2.0在其配置文件configure中硬编码了BerkeleyDB的版本是4.7.*
所以,为了避免麻烦,还是下载4.7.25版本的BerkerlyDB。
下载地址:http://www.oracle.com/technology/software/products/berkeley-db/db/index.html

解压缩文件:
~ % tar zvxf db-4.7.25.tar.gz
配置:
~ % cd db-4.7.25
~ % cd build_unix
~/db-4.7.25/build_unix % ../dist/configure
编译:
~/db-4.7.25/build_unix % make
安装:
~/db-4.7.25/build_unix % su
Password:
/home/sc/db-4.7.25/build_unix # make install
如果没有指定特殊的安装路径,编译完成后,需要将BerkeleyDB的运行库所在的路径添加到系统配置里面
/home/sc/db-4.7.25/build_unix # echo “/usr/local/BerkeleyDB.4.7/lib/” >> /etc/ld.so.conf
重新载入系统运行库
/home/sc/db-4.7.25/build_unix # ldconfig

安装Memcachedb:
先下载最新版本的Memcachedb
下载地址:http://code.google.com/p/memcachedb/downloads/list

解压缩:
~ % tar zvxf memcachedb-1.0.3-beta.tar.gz
配置:
~ % cd memcachedb-1.0.3-beta
~/memcachedb-1.0.3-beta % ./configure #–enable-threads if you wanna thread version
编译:
~/memcachedb-1.0.3-beta % make
安装:
~/memcachedb-1.0.3-beta % su
Password:
/home/sc/memcachedb-1.0.3-beta # make install

启动Memcachedb
~ % memcachedb -p21201 -d -r -u root -H /test/data -N -v

注意:如果启动的时候报memcachedb: error while loading shared libraries: libdb-4.7.so: cannot open shared object file: No such file or directory,需将将BerkeleyDB运行库的路径加入到系统路径中(本人在这里碰到问题,在上面安装BerkeleyDB的时候把运行库载入后就不再报错了,所以没有做下面这一步)
~% export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/BerkeleyDB.4.7/lib

测试
另起一个终端,telnet到memcachedb上
~ % telnet 127.0.0.1 21201

Trying 127.0.0.1…
Connected to localhost.localdomain (127.0.0.1).
Escape character is ‘^]’.
set test1 0 0 10
testing001
STORED
get test1
VALUE test1 0 10
testing001
END
delete test1
DELETED
get test1
END

关闭Memcachedb
~ % killall memcachedb

Posted in Web开发 | Tagged , | Leave a comment

CentOS 5.4下TokyoTyrant安装

首先,到下面两个地址去下载Tokyo Cabinet和Tokyo Tyrant
http://1978th.net/tokyocabinet/
http://1978th.net/tokyotyrant/

Tokyo Tyrant是封装Tokyo Cabinet的网络接口,所以安装Tokyo Tyrant之前需要先安装Tokyo Cabinet:
tar -xzvf tokyocabinet-1.4.41.tar.gz
cd tokyocabinet-1.4.41/

Tokyo Cabinet需要库zlib和bzip2的支持,CentOS安装了zlib和bzip的二进制包,但没有安装开发用的头文件。
先用yum安装一下。
yum install zlib-devel
yum install bzip2-devel

下面是标准的三大步安装:
配置:
./configure
编译:
make
测试(可选)
make check
安装:
make install

接下来安装Tokyo Tyrant:
tar -xzvf tokyotyrant-1.1.39.tar.gz
cd tokyotyrant-1.1.39/

同样是标准的三大步安装:
配置:
./configure
编译:
make
安装:
make install

为了测试是否安装已经成功,启动服务器来测试一下
ttserfer

再另起一个终端,进入到刚才解压缩的tokyotyrant目录
make check

这时会制动运行一系列的测试,包括写入和读取的测试,并会在终端输出报告。
如果在测试期间并没有报错,那么Tokyo Tyrant已经安装成功了。

Posted in Web开发 | Tagged , , | Leave a comment

Python操作MySQL数据库

首先需要先有Python的MySQL连接模块MySQLdb
在CentOS 5.4下已经默认安装上了,Ubuntu下面没有,需要自己手动安装,下载地址如下:

下载地址:http://sourceforge.net/projects/mysql-python/

一个能覆盖80%使用场景的例子:

import MySQLdb

# 建立一个连结
con = MySQLdb.connect(host="127.0.0.1", port=3306, user="root", passwd="123456", db="test")
# 生成一个cursor,   用来执行sql语句
cursor = con.cursor()

# 执行sql语句
sql = "SELECT * FROM Users"
cursor.execute(sql)

# Fetch all results from the cursor into a sequence and close the connection
# 取得返回的值并关闭连接
results = cursor.fetchall()
Posted in MySQL | Tagged , , | Leave a comment

Memcached高级数据操作命令

有另外两个与数据相关的命令:gets和cas(表示Check And Set)。

gets和get具有相同的命令格式,但是会返回一个额外的唯一标识该数据的64位整型数据。

gets test1
VALUE test1 0 10 5
testtest01
END

上述命令中,gets返回了一个额外的CAS值5。
下面试用set来更新该条目

set test1 0 0 10
test01test
STORED
gets test1
VALUE test1 0 10 6
test01test
END

当数据更新完成后,再使用gets就会返回一个新的CAS值6。

CAS值的主要作用就是和cas命令一起使用。

首先,使用原先的cas值5去保存数据

cas test1 0 0 10 5
test02test
EXISTS

结果返回EXISTS表示没有成功地保存数据,因为提供的CAS值(5)和当前存在的CAS值(6)并不相同。

接着,再使用正确的CAS值传递给cas命令

cas test1 0 0 10 6
test03test
STORED
get test1
VALUE test1 0 10
test03test

这时memcached告知数据已经成功的STORED了。

从memcached上删除数据的方法是使用命令delete key。

set test1 0 0 10
testing001
get test1
delete test1
get test1

当一个数据对象过期或是使用delete命令删除后,并没有直接从内存中删除,而是memcached使该key不可用。这样处理主要是为了能使memcached尽可能的高效。只有当这部分对象所占用的内存需要被memcached使用时才会被删除。

当memcached需要内存,而又没有过期或是删除区域的内存可以重用的时候,memcached使用LRU算法将其认为没有必要再cache在内存中的数据剔除,以释放内存空间。
如果需要详细了解memcached剔除数据的相关内容,建议参考Tim老大的这篇文章:Memcached数据被踢(evictions>0)现象分析

Posted in Web开发 | Tagged | Leave a comment

Is it a burden

Before I found the following cartoon, I have just complained about the job I was assigned.
Now, maybe I should think about it twice.

*These pictures come from one of my high school classmates’ blog.
1
2
3 Read More »

Posted in 若有所思 | Leave a comment

我要的生活

被老板派出去On Site也有一周时间了,离开了自己以前整天抱怨的实验室,似乎是解脱了。然而很快就发现,自己似乎是从一个围城跳到了另一个围城。每天早上天刚刚亮,就要起床,匆忙收拾一下自己就得出门了。勉强挤上拥挤得像沙丁鱼罐头一样的地铁列车,辗转一路到漕河泾,还得再转一道公交才能到被派去的公司。

开机,收邮件,查看任务列表,安排一下今天各项任务时间分配,就这样又开始一天的忙碌了。中午吃过饭,通常只有不到半个小时的休息时间,上网晃悠一下很快就过了,如果困也就只能在这不到半个小时的时间里面打个小盹,12点半准时又要开始下午的工作了。到下午5点45下班从公司出来,天已经黑了。华灯初上,万家灯火,这个城市的繁华喧闹身边来往的人潮似乎与我毫不相关,只有独自一个人缓缓地混入夜色的怀抱。每每此时,心中总有一种莫名的悲凉,难道这就是我想要的生活?!

或许我会试着安慰自己,那是因为现在我所做的一切对我自己来说并不真正属于我自己。当有一天,找到自己追求的梦想,工作对于我来说并不仅仅是一种负担,而会是一种幸福。呵呵,梦想,我是否还记得儿时的梦想。。。是否还有勇气去追逐那属于我自己的梦。。。

Posted in 若有所思 | 3 Comments