您的位置:首页 > 职场人生

想成为Google工程师?先回答这15个面试问题

2012-02-07 10:10 399 查看
(Google面试问题)

1.请写出一个整数乘法的算法

(这是一个相当开放的问题,设计初衷是看看工程师是否会定义参数)

答:编程语言是什么,汇编吗,如果不是,那可就简单了。直接把数字带入运算即可,因为大多数编程语言支持整数乘法。

2.合并两个排序链表

(这类问题是Google面试问题的一个共同趋势:找出解决问题的有效办法。)
合并两条链表一般会发生“冲突”(因为它们各自有特定的次序,而你的合并会把次序搞乱)。必须找出一种算法快速消除那些冲突。

3.给出一组区间(以秒计),让你找出重叠的部分

(Google一般也会要你解决一堆数学问题。)

这些设计的意图是让工程师对问题进行有效的思考,而不是仅仅知道如何对每个问题进行编码。

此处的问题会要你实现一个聪明的数学技巧。

4.如果你有n个节点的列表,对于一个有向无环图来说,最多可以有几条边?

(这是一个不要求你找出聪明的数学算法而是要你拓展思路的数学问题。)
你必须在节点间画线,条件只有一个:无论你从哪里开始,永远不要回到原点
答案:严蔚敏《数据结构》里面讲过的,答案是: n-1。 因为如果边的条数大于等于n,则一定有环。
(看来面试之前好好复习数据结构、算法等知识非常必要)

5.在Java里面,finally、final和finalize的区别是什么?
(看看你知不知道这些术语。比方说,Finalize处理的是“垃圾回收”,而Finally则是指向一个特定的错误。)
注:谷歌可能出这么简单的问题吗?不过,看了看google的招聘要求,确实提到了对编程语言语法的考察。

6.从一大块文本中去掉重复的行
(一个基本问题,看你是不是能估算出问题是否可以在有限的时间内解决。)
这样的问题通常可以采取暴力攻击手段,但却有可能永远都无法解决

7.给你一串字符,要你找出包含有给定字符集的最小窗口

挑战: 此类问题有许多解决方式,这完全取决于你选择的算法是什么。
Google要找的是能选出更快算法的工程师。

8.写一段程序计算出某字符串(/矩阵)是否另一字符串(/矩阵)的旋转(/转置)
注:《编程珍珠》里面有向量旋转算法,应该就是这个问题

9.旧金山能容纳多少个气球?

(此类问题Google的面试官一般都会问到,目的是想看看你设定的“边界条件”是什么样的。)

这个问题有许多解决方式,可以通过添加限定条件来进行简化—比如说旧金山的面积,这种限定在进行编程的时候是很重要的。

注:以前我看微软面试问题的时候,好像是类似的问题。当时的答案似乎是“很多”。

10. 粘滞位是什么?为什么要用?

(粘滞位是一个跟设置和权限有关的系统管理员术语。)

Unix/Linux 系统的常识,粘滞位就是一个文件的权限位(chmod +s filename)

11.给出一组整数,值范围在很窄的区间,但是区间未明,如何找出其中位数?

挑战: 又是一个要你实现聪明的数学技巧的问题,离散数学课你有没有认真听?
这可不是什么简单问题。

12.给出一组区间,找出交集数最多的一个

挑战: 现在Google要你确信知道自己检查的是问题的正确部分,无视没有价值的部分,这样才能够令算法更高效。

13.100个整数组成的数组,次序被打乱。其中有一个数被拿掉了,把它找出来

回答: 难道又是《Programming Pearls》里面的例子,好像是用二分搜索来解决。

14.判断某个数独解决方案是否正确

挑战: 这个要你想出办法用另一种数学技巧从算术上快速检验解决方案。

15.给你一支股票的日价,找出一次买卖交易(buy-sell trading)如何操作才会损失最大

挑战: 这个问题非常棒,你必须竭尽所能,把所有的知识本领都用上。
看看边界条件(即挑出变动最大的股票价格点)然后有效地算出波动最大的一次。
我们能想到的唯一像样一点的办法是暴力计算,把每一个股价都遍历一遍。

总结: 从网上摘来的文章,仔细研究了一番。不知道这些是别人编的还是真的就是google面试问过的问题,研究一下吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: