星期二, 五月 29, 2007

生活不是诗

生活不是诗
长河落日大漠孤烟掩不去生存的悲凉
生活不是诗
爬满青苔充满斑驳的青砖空叹岁月的轮转
生活不是诗
夜夜辗转前路茫茫月上是否有我起舞弄清影的空间
生活不是诗
形影相吊庸庸碌碌日日往返于简单的三点一线
生活不是诗
喜怒哀乐也会伴随股市奏出杂乱无章的曲线
生活不是诗
在一个描述为诗一样的环境里
我们渐渐懂得
生活不是诗
-----------------------------------------------------------
做事要有条有理,稳重大度;
做人要谦虚戒躁,谦和平淡。

星期五, 五月 25, 2007

MS面试题

来源:smth
问题:编写atoi,即将字符串转为整型。

分析:这个问题其实很easy,任何一个人都能写出那么几句,可实际上MS却喜欢能handle各种情况的版本。下面我编写的这个版本能将" 123 ", " +123 "," -123"," 1 2 3 "
全部转为123。
int atoi_mine(char* string)
{
int i;
int val;
for ( i = 0; isspace(string[i]); i++)
;

int sign = (string[i] == '-') ? -1 : 1;

if('-' == string[i] || '+' == string[i]) i++;

for(val = 0; string[i] != '\0';i++)
{
if( isspace(string[i]) ) continue;
if(isdigit(string[i]))
{
val = string[i] - '0' + 10*val;
}
}
return val * sign;
}
问题一:将空格为分隔符的字符串逆序打印,但每个token不逆序。例如 "Hello world I am william",那么打印出的结果为"william am I world Hello"

C程序:
// IN means, enter the word
#define OUT 0
#define IN 1
// print
static void printIJ(char* string, int i, int j)
{
int k;
for(k = i; k <= j; k++)
printf("%c", string[k]);
}
// reverse function
void Reverse_Sentence(char* string)
{
int n ;
int state = OUT;
int i;
int j;
for(n = strlen(string) -1; n > 0; n--)
{
if(isspace(string[n]))
{
if( IN == state)
{
i = n + 1;
printIJ(string, i, j);
}
printf("%c", string[n]);
state = OUT;

}else if (OUT == state)
{
state = IN;
j = n; // right side
}

}
if(i > j) printIJ(string, 0, j);
}

星期三, 五月 23, 2007

TCP/IP的三次握手[转载]

TCP是面向连接的,所谓面向连接,就是当计算机双方通信时必需先建立连接,然后数据传送,最后拆除连接三个过程

并且TCP在建立连接时又分三步走:

第一步是请求端(客户端)发送一个包含SYN即同步(Synchronize)标志的TCP报文,SYN同步报文会指明客户端使用的端口以及TCP连接的初始序号;

第二步,服务器在收到客户端的SYN报文后,将返回一个SYN+ACK的报文,表示客户端的请求被接受,同时TCP序号被加一,ACK即确认(Acknowledgement)。

第三步,客户端也返回一个确认报文ACK给服务器端,同样TCP序列号被加一,到此一个TCP连接完成。 然后才开始通信的第二步:数据处理。

这就是所说的TCP三次握手(Three-way Handshake)。

简单的说就是:(C:客户端,S:服务端)

C:SYN到S

S:如成功--返回给C(SYN+ACK)

C:如成功---返回给S(ACK)

以上是正常的建立连接方式,但如下:

假设一个C向S发送了SYN后无故消失了,那么S在发出SYN+ACK应答报文后是无法收到C的ACK报文的(第三次握手无法完成),这种情况下S一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒-2分钟);一个C出现异常导致S的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况,S将为了维护一个非常大的半连接列表而消耗非常多的资源----数以万计的半连接,即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。实际上如果S的TCP/IP栈不够强大,最后的结果往往是堆栈溢出崩溃---即使S的系统足够强大,S也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求(毕竟C的正常请求比率非常之小),此时从正常客户的角度看来,S失去响应,这种情况我们称作:服务器端受到了SYN Flood攻击(SYN洪水攻击)。

以上的例子常被称作DoS(拒绝服务攻击)与DDoS(分布式拒绝服务攻击)

注意:其中这儿的C和S都是相对的,对于现在的计算机来讲,只要自己的计算机建立任一服务,在一定情况下都可被称为S

解决办法:在你的计算机上安装防火墙

个人防火墙一般我们可采用学习模式来让防火墙自己来进行分析

有一点得说明,防火墙是无杀毒功能的,同时也无法清除垃圾邮件,简单点讲它只起到一个过滤作用

星期二, 五月 22, 2007

Google Intern 笔试题

题不是特别难,但考的很宽泛,涉及离散数学,数据结构,算法,C(指针),网络,编译原理,做好还真不容易。估计自己是分母了,记录下来学习之。
编译:上下文无关文法和正则文法的优劣比较,孰优孰劣?
网络:分组是从哪里开始?源主机,目标主机?交换机?路由器?
数据结构:表示n次多项式的数据结构的接口,分别利用这些接口实现多项式相加和相乘。
最后一道算法题
A,B两个数组,元素相同,数组大小相同,但是顺序不同,现在可以执行的操作是任取A中元素和B中元素,可以比较Axmx>xBxnx,Axmx<xBxnx,Axmx=xBxnx.
但是A中元素不能比较,B中元素也不能自己比较。
要求的操作是配对,即配对A中和B中相同的元素。给出算法思想并分析算法时间复杂度。
和此题类似的BMY上曾讨论过的题(可惜我上算法版比较少:()
有N个坚果,N个瓶子,N个坚果的大小都不同,N个瓶子都大小都不同,但是每个坚果都有
一个和它大小相同的瓶子。现在只能把坚果放进瓶子来看坚果大小是否比瓶子大,小,
或者刚好相同,不能比较坚果和坚果,瓶子和瓶子的大小。要求把坚果都装进与它大小相同的瓶子里面。(要求平均比较nlongn)

星期一, 五月 21, 2007

激情之后的空洞

激情之后,是不是觉得空洞,继而空虚。
失意的时候,燃烧了激情,却是无尽的苍白,使人辗转煎熬,走不出内心设定的阴霾。
盘点缺失,bless自己!

星期四, 五月 17, 2007

MSRA实习面试侧记

[注]MSRA:微软亚洲研究院


怀着惴惴不安的心,我的呼吸也随之局促起来,我无奈地求助Min Qin,他帮我去探听the last decision,这几天这个困扰一直萦绕在我心头,MSRA 是reject了我还是还在思量.我想我大概是被鄙视了,因为我觉得MSRA的效率不会这么低,而且我也不是那么出众,我该为自己的实习生电面写下一些总结的文字了,anyway。我知道我错过了一个证明自己的机会,尽管我一直想证明自己,也许也本不需要证明。

感谢Min Qin的帮助,我一直打扰他,感谢三位面试官,尤其感谢第一位,给我很多的教诲和建议,而且最终还是推荐了我进行下一轮面试。I will sharp myself all the while.I will never forget it.因为我实在是没有天分,而且code基础薄弱。

首先我能够这么快进入面试环节得益于Min Qin 将我的简历直接转发给他的mentor,很快我就收到了一份英文的Email.花了一个晚上回复Email之后,我开始复习《算法导论》和《算法分析与设计》。周五下午,面试不期而至,一个区号是010的电话使我兴奋不已,接着是一番对自己的吹捧和推销,面试官早已对这一套不耐烦了,直接让我写一个JS的程序。我几乎花了两小时才把程序写出来,而且没有做边界条件判断和约束,有着许多的bug,尽管如此,面试官说很快会有下一位面试官来面我,这使我隐约觉得有一点希望。
度过了一个焦灼的周末之后,周一中午突然第一位面试官杀了个回马枪过来。他说我自己写的程序就那么几行,很奇怪怎么写了那么久,于是问我是不是我自己写的。我坦承时参考了一个程序,他对我的能力有极大的怀疑了。于是对我简历上所写的精通一一批来,我是尴尬不已,无奈地用苍白的语言为自己申辩。之中考了我数学题和排序,我把排序悉数一遍。总之对我很怀疑,最后给我布置了一道纯C的编程题。
在我刚写完程序准备提交时,另一个电话轰炸过来。我开始了数据结构和算法考试,感觉自己答得很糊涂,但有很多还是说出了自己的想法,至今想来,其实我可以表现得更好。不过我语言表达的还算不错,至少能命中点要害,不枉我读了几本算法书。感觉数据结构和算法,操作系统,多线程编程都是来源于平时的积累。
表达我的抱歉后,赶紧提交了我的程序。另一个电话打来,我想应该是HR的,这会nice了许多,问了我简历上相关的经历,问了一些自己的看法和观点。就这样·,我走完了一个面试流程,之后却为之焦虑不安起来,因为我渴望这个offer。

星期三, 五月 16, 2007

回家--聚首

曾经写的一篇文章,整理出来体会当时的心情,与君共勉:)

带着没有整理的心情,踏上了返家的列车。也许有太多的故事,也许又有对未来的诸多期许,回家可以和同学聚首,也意味着和“狐朋狗友”(^_^亲切不? hoho,其实是兄弟)们彻夜长谈,毕竟生活的氛围还是有差异的,彼此之间的交流也会有许多启发和感悟,不至于成为“井底之蛙”。只是假日太短,尚且有很多同学也不在服务区了(因工作没有回家或很少联系),生活的圈子也越来越小。基本上可以诠释生活吧!
redan在fudan比我要成功的多,比我提前2年进入软件,又是fudan“爱尔兰”班的尖子,在学习上也是惊人的勤奋,觉醒的也远比我早,获得过诸多奖学金,在fudan的Campus IT里很活跃,在SAP实习过,正是他的积极主动,有一个光明的前路,可以用“杰出”来形容。而nju的全兄(四年未见,终须如愿)也是一样的刻苦,博览群书,思想也犀利深刻起来。这些都是我的朋友,我的兄弟。
可能正如redan所言“朋友之间,并不需要经常发短信”,是相互激励,是在一起偷偷说曾经的暗恋故事,是在一起开诚布公地分享生活的经历,偶尔能噗哧噗哧毫无顾忌地调侃,正如我所每每侃redan“这小子对某MM蓄谋已久(应该讲高中时候口水差点流下来)”,曾经是多么值得追忆。可以记得高中时候中午不知疲倦徒步去买复习资料,可以记得偷个中午一起打篮球在化学老师的眼皮底下频频“点头”(我当时坐在第一排),曾经的Fighting,曾经的眼泪。四年过去了,我们都有改变,变的是我们长大了,成熟了,在一起吃饭的时候会加上啤酒做调料。我觉得不变的还是那份真诚,对朋友可以执言,可以对我说“我不够自信”的缺点,可以警醒“缺乏平常心”的我,可以一起肯定“积极主动”的态度。有时候自己有很多困惑,需要朋友点醒,并不一定要说服。人,只有自己才能说服自己,这也是我们的结论。一如我们共同认同的《高效能人士的七个习惯》所言“谁也无法说服他人改变。我们每个人都守着一扇只能从内开启的改变之们,不论动之以情,或说之以理,我们都不能替别人开门”。感情故事也是不可或缺的话题,许多意想不到的事情和意想不到的结果都只能让我们这样说“看不出来啊”,还有许多困惑,也许会有心理上暗示的安慰。
未完待续。

Sigh~In despair

Am I rejected?Is all over?
Factually I just want to prove myself.I have tried my best to do it,can I have the chance?I am in deep despair.Please don't frustrate me.I have a keen desire to get a offer.Pleaese,u know,I need it~~~