转:原文链接:http://blog.jobbole.com/18040/
导读:Cate 是一位加拿大的软件工程师,目前就职于 Google 。本文是他在 2010 年在 Google 面试后分享的文章。
也许你可能没有参加过谷歌面试(或者没能答出面试中的一些问题),这里我会分享一下上周我的面试经历。我个人感觉良好——至少已经全力以赴了,无论结果如何都会对我有很大的帮助。
由于已经签了保密协议,因此我不会写出面试的问题。然而,我会写一下我是如何得到这个面试机会以及准备面试的过程。
首先,面试的是谷歌。如果没有在Google工作的朋友和我谈起并推荐我,我是不会应聘的。因为我“离得比较近”,因而没有参加电话面试,直接进行了在线面试。我并不认为渥太华和滑铁卢(加拿大)离得很近(也许这是因为我没有加拿大人的距离感!),但是我确实认为与人面对面的交流会比电话面试好的多。那天我的运气特别的好,因为那天晚上的经历就像是“Ignite! Waterloo”活动,非常酷。
译注:Ignite! Waterloo:加拿大的一个社区活动,在广泛的议题上进行五分钟快速演示,展示了滑铁卢地区的极客文化。
首先,我和招聘专员简单聊了聊,他/她告诉我可以使用白板,并且介绍了整个面试流程。接下来我和两个软件工程师分别进行了45分钟一对一交流。我惊奇地发现原来面试也可以这么有趣!通常我在面试的时候都会非常紧张,然而这次没有与很弱的人一起扎堆面试,这真的很酷!第一长面试的问题非常简单,第二场虽然难一点但也面得不算太差。最困难的恐怕就是在白板上编程(不能用电脑!)——在白板上很难用TDD(测试驱动开发)!他们会告诉你不要穿正装,实际上最好也不要这么做——我费了不少时间坐在地板上写白板,身边到处都是各种记号笔。可以想象如果穿裙子会是怎样的情景!
他们提前会发一份面试需要准备的事项列表,这对我非常有帮助。虽然我大学的课程学得很好,但最好还是有针对性地复习一些专题。除了通常的准备,这里还有一些额外可以关注的内容——保持与最新的业界资讯更新,大量使用Google的产品,思考如何使用技术改变生活,撰写博客(是的,最后两项也很有帮助)。与此同时,我已经很好地掌握并运用Java 5扩展,像是范型、枚举、for-each等等。
下面是我用来准备的相关资料:
• 读《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接口就可以做到,这个我也是下午才刚学会。
• 复习函数库中的某些关键点——Arrays和Strings非常有用。
• 练习在白板或者纸上编程。你可能想当然地想在白板上插入一行或者进行重构,这可是非常困难。同样地,在白板上写代码很容易忘记写return语句。Eclipse从来不会让我自己写这些声明和reurn语句,并且会把我的代码放在函数的中间,而白板可做不到!
接下来该做什么?
• 等待。
• 等待。
• 等待!
• 无论结果如何,我都希望能得到一些反馈。
• 把面试的问题写成代码(同时写好测试用例!)
• 完成《Java解惑》中的问题。
• 整理面试经历——我花了很多时间准备这次面试,相信你可能已经收藏了这些面试题目。
• 寻找其它的机会。我对IBM特别感兴趣,找一些在那里工作的朋友看看有没有什么合适的机会。
• 和导师们谈谈这次面试经历。
英文原文:Cate 编译:伯乐在线 – 唐尤华
【如需转载,请标注并保留原文链接、译文链接和译者等信息,谢谢合作!】
分享到:
相关推荐
"IBM CATE教材(pdf版本)"是一本专门为准备CATE认证考试的人员编写的指导性资料,它包含了丰富的技术知识和实践指导。 这本41页的PDF教材涵盖了以下主要知识点: 1. **IBM产品和技术概述**:教材首先会介绍IBM的...
【标题】"v3_cate:gc v3 cate" 指的是一个可能与版本v3相关的分类或架构系统,其中“gc”可能是“Garbage Collection”的缩写,它在编程语言如PHP中指的是垃圾回收机制。这个项目可能涉及到对PHP程序中垃圾回收策略...
IBM+CATE认证是针对IBM AIX操作系统的专业认证,它证明了持证人在AIX系统管理、安装与迁移、安全、操作系统与设备管理、网络和通信管理以及性能管理等方面具备高级技能和知识。这个认证旨在确保IT专业人士能够有效地...
【IBM CATE题库详解】 IBM Certified Advanced Technical Expert(CATE)是IBM公司推出的一项高级技术专家认证,旨在验证专业人士在特定技术领域的深入理解和实践能力。2013年的IBM CATE题库是针对该认证的一项重要...
Cate代表基于 Continuation 的异步任务执行器。 它为并行任务调度提供了一些抽象,让您以类似同步的风格编写异步编程代码。 特征 Cate 使用Task抽象出一个最小的调度单元,它是用延续调度的。 任务可以组合在多个...
猫 ...代码结构(尤其是文件读取和保存功能)改编自。 要求 GCC 编译器(用于编译源 c 文件):参见。 示例数据集 ... 注意:在准备文本语料库时,请确保文件中的每一行都是一个文档/段落。 包含每个类别的
IBM认证题库,没问题过,本人空间还有IBM认证模拟题库
正宗的模拟题库,只要全部记住,没问题过了
要下载所有注释,请从 CATe 中针对特定术语练习规格表/模型答案,然后运行命令 `python LocalParser.py download` 从src文件夹中,再次为它提供所选的详细信息。 仅下载特定模块 要将下载限制为仅一个模块,只需将...
IBM CATE 000-221: AIX 7 Administration #### 考试问题1:错误日志中的问题处理 **问题描述**:在AIX系统的错误日志中报告了以下信息: 如何防止该错误再次发生? - **选项分析**: - A. 创建一个大于266MB的...
行业分类sql文件,基于58同城行业分类信息拓展,可以直接导入数据库
类别进行集成测试和验证任务的端到端测试。 happy_path包含所谓的Happy Path脚本,可用于集成测试和某些验证活动。... 要更新脚本和测试数据,请转到cate-e2e目录,然后从此处调用:$ git pull 人们还可
2019年1月发布的"tb_cate.rar"压缩包文件,包含了最新的淘宝类目分类大全,总计24031条数据,采用SQL格式,便于直接导入MySQL数据库使用。这个数据集具有完整的数据结构,确保了类目信息的准确性和完整性。 首先,...
Java 将 M3U8 格式转成视频文件的方法 Java 是当前最流行的编程语言之一,广泛应用于 Android 和 Web 开发中。在视频处理方面,Java 也提供了强大的支持。M3U8 是一种广泛使用的视频流格式,经常用于直播和点播等...
Pass4sure_223.doc文档可能包含具体的练习题、案例分析或考试准备资料,这将帮助你更好地理解和应用所学的AIX知识。文档内容可能涵盖以上所述的各个领域,包括理论知识、实际操作和问题解决策略。 总的来说,通过...
- 支持多个厂商的认证考试准备,包括但不限于 Adobe、Apple、Cisco、Citrix、Comptia、EMC、HP、Huawei、Juniper、LPI、Nortel、Oracle、SUN、Vmware 等。 - 旨在帮助考生在首次考试中通过 IT 认证。 ### 三、客户...
标题中的"IAPP:在 IAPP 中工作的脚本和程序(例如 CatE)-开源"指出,这是一款与Institut für Angewandte Photophysik(应用光物理研究所,简称IAPP)相关的开源软件项目。这个项目包含了用于处理和分析数据的脚本...
标题中的"TouJing.zip_cate3m_housesvx_透镜_透镜计算软件_透镜质量检测"表明这是一个关于透镜质量检测的软件压缩包,其中可能包含了一个名为"TouJing"的主程序或者相关文件。"cate3m"和"housesvx"可能是该软件的...
结合计量经济学理论,他们不仅可以估计平均值,而且可以估计个性化的治疗效果-条件平均治疗效果(CATE)。 在本教程中,我们概述了新颖的方法,对其进行了详细说明,并通过Quantlets将其应用于实际数据应用程序中。...
烽火资料-送给面试的童鞋们