Legend Since 1984
Cruising between Fantasy and Reality...

Sunday, September 24, 2006

大学阶段比较失误的一件事

被Google面完才知道,其实自己大学阶段有一件很重要的东西忽略了。那就是算法!

大二大三的时候看见有人搞ACM(就是一种注重算法的程序设计比赛),觉得没有什么意思。都是运用别人早就研究出来了的算法。而且一天就整那些题也非常的枯燥。作为我自己来讲,我更感兴趣的是搞些工程方面的东西,最喜欢的是做实现。所以尽管都是在学计算机都是在编程,但是搞ACM的和我这种搞工程的实际上有很大的区别。他们注重的怎样套用现有的算法去解决一些范围比较窄的问题,涉及的东西比较少,更计算机打交道的也仅限于程序设计语言。搞工程的就不一样,它需要在一个现实的计算机系统上搭建一个功能完整、运行可靠的平台/系统,所以跟计算机有关的方方面面都会有所涉及,什么操作系统、网络、系统调用、界面设计、数据库连接,甚至是硬件。

很难说谁更加重要。因为这两方面都是计算机科学的组成部分。光有算法,不懂怎样和底层OS打交道,不懂怎样高效设计系统的架构,计算机系统不会这样普及;只会设计系统框架,落实到每一个具体的细节却非常的低效,这样的系统也不会成功。所以作为一名计算机科学的专业人员,不管是系统实现还是具体算法都不能忽视。这一点Google的研发团队做得很好,他们的理念是Research=Development,即既要有idea,同时又要有能实现这样的idea的编程能力。

我想算法方面是我一直以来比较忽视的东西。也许Google不会再给我第二轮面试的机会,不过我倒是借此了解到自己的不足,所以也算是一种收获吧。

Labels:

Saturday, September 23, 2006

Google~First Interview

今天下午终于收到了Google面试的电话了...

在寝室稍稍整理了一下着装,携带简历和成绩单出发了。到了华容饭店,已经有不少师兄在等待了。去了才知道一共四轮面试,好多研究生师兄多是三面四面了。

面试之前签署了一份Google保密协议。所以面试题就不便透露了。粗略来说,首先问了一下简历上自己写的东西。这一点我还是比较有信心的。接着是两道编程题。具体题目不表。这一点上面感觉不是特别理想。第一题比较简单,不过在一个小细节上没有处理好,有一种情况没有优化;第二题是到算法题,就像笔试那道题一样,方法我是想出来了,但是诟病就是时间复杂度不够低。像今天的第二题,我的方法是时间复杂度O(n^2),空间O(n),但是面试官告诉我其实不需要额外空间,时间复杂度也只是O(n)而已。

总之,感觉Google面试的时候对编程算法要求挺高的,而且在细节上也不能马虎。大概是跟Google海量数据的特性有关的吧,所以任何优化的手段都可能有重大的影响:一个100以内的数组可能看不出来差异,但是试想100000000的数组呢?这方面做过ACM的人应该比较有优势的。

唉,不知道还有没有二面的机会,期待明天的电话...