计算机知识准备

• 读《Effective Java (第二版)》 –——作为一名合格的Java程序员没有任何理由不推荐这本书。

• 读《程序员面试攻略》 并运行所有书中的例子——对于回顾类似树、列表这样的数据结构基础概念非常有帮助。我不是很喜欢递归那一章(从我自己使用的角度),我更推荐使用迭代。尽管如此,它真的是一本非常有用的好书。

• 读《编程人生》 –——这本书中有很多人在谷歌工作,这从另一方面说明了谷歌的文化。书中同样还充满了很多我以前从未注意到的有趣编程故事,还有这些牛人是如何解决问题,讨论API以及增强程序扩展性等内容。

• 复习《Combinatorial Algorithms: Generation, Enumeration, and Search》中的背包问题(Knapsack),旅行商问题(Traveling salesman)以及NP完全问题(在秋季学期里我学了组合数学并且从头到尾读完了这本书)——坦率的说,我不很喜欢这本书。我感觉这更像是一本数学书。如果你是一名程序员而不是数学家,用实际的代码来解决这一类问题可能会更有帮助,而且Wikipedia读起来肯定更容易理解。

• 做一些《Java解惑》中的问题,这会帮助锻炼你阅读代码找错的能力。虽然我没有被问到这类问题,但是我确实需要仔细检查自己的代码。IBM在我的手机屏幕上给我出过电子商务的问题,我知道谷歌也会使用这类题目。

• 复习并发问题——死锁 活锁互斥量、 信号量等等。在Java中什么时候使用synchronized关键字?你怎么样避免死锁和活锁?

• 复习树的遍历 ——前序遍历、中序遍历和后续遍历,深度优先搜索 vs 广度优先搜索A*算法Dijkstra算法等等。

• 复习平衡二叉树——红黑树AVL树和 伸展树(Splay-tree)

• 复习——图的表示, 最小生成树,图的搜索等等。

• 算法复杂度分析

• 编程实现 6 种排序算法——包括算法复杂度为O(n log n)的那些算法,使用TDD风格编程(我使用的测试用例可以参考这篇博客)。

• 编程实现哈西表,要求只能使用数组。支持包括:范型,动态数组,延迟初始化,要求测试优先。

• 练习所有手头上能够找到的问题——搜索“Google interview questions”,不用有什么顾虑,可以看看这些问题。有时候我用Eclipse写代码,但也会用Google docs。我会找一个朋友审查我的代码并向我提问。

• 经常找在谷歌工作的朋友聊天,问很多问题。他非常棒,并且全力帮助我准备面试。不仅如此,通过理解他为什么认为我适合在谷歌工作,我也更深入地理解了自己想去谷歌工作的理由(是的,这的确有点迂腐。但是正如我的导师告诉我的,即使是谷歌,挑选你喜欢的公司和公司挑选你也是同样重要)。

 

虽然我自己认为只是准备充分,但在谷歌工作的朋友戏称我准备得“几近完美”。除了这些准备之外,我还能做些什么呢?

• 更多的代码分析实战 —— 尽可能多地找代码去分析。

• 计算数列的和。例如,你如何计算数字1-n的和?请给出证明。回顾我在第二场面试中的分析,我给出的答案是: (n-1)(n-2) + (n-2)(n-3) + … + (3)(2) + (2)(1)。当然,我没有及时地给出答案,所以我的时间复杂度上限是O(n³)。

• 复习Java函数库,数据结构。这个时候,我会认真地回答:“我知道有这样的数据结构不会接收重复的值,只是现在记不起来叫什么名字了”。实际上只要实现Set接口就可以做到,这个我也是下午才刚学会。

• 复习函数库中的某些关键点——ArraysStrings非常有用。

• 练习在白板或者纸上编程。你可能想当然地想在白板上插入一行或者进行重构,这可是非常困难。同样地,在白板上写代码很容易忘记写return语句。Eclipse从来不会让我自己写这些声明和reurn语句,并且会把我的代码放在函数的中间,而白板可做不到!

 

接下来该做什么?

• 等待。

• 等待。

• 等待!

• 无论结果如何,我都希望能得到一些反馈。

• 把面试的问题写成代码(同时写好测试用例!)

• 完成《Java解惑》中的问题。

• 整理面试经历——我花了很多时间准备这次面试,相信你可能已经收藏了这些面试题目。

• 寻找其它的机会。我对IBM特别感兴趣,找一些在那里工作的朋友看看有没有什么合适的机会。

• 和导师们谈谈这次面试经历。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值