zoukankan      html  css  js  c++  java
  • 【转】Google面试总结

     Google面试总结

    终于把Google的面试给搞完了,感觉可以算是Tech Interview的顶峰了。这里主要写一下大概流程和内容,给大家以后interview一个参考。

    G的full time面试一般3个,2个phone+1个onsite。到我这儿只有1个phone的,原因不太清楚,可能是他们急着招人,也可能是Waterloo Master的牌子,反正少一个我也乐的省心。从开始递简历开始到email接触到最后onsite完差不多快2个月。这个速度似乎在大公司里面算快得了,反正至今MS啊Amazon啊这些都还没理我伤不起……

    先说说所有用到的知识点吧。Google的面试题总结起来2个词:宽!深!覆盖的知识面之广,基本把我知道的全给挖出来了。然后最后都会考到很难很难的点上,杀个几百万脑细胞。总的来说,我面试用到了以下所有的东西

    Data Structure:

    • Linked List
    • Tree / Binary Search Tree
    • Vector / ArrayList
    • Queue & Stack
    • Heap
    • Stream (以前完全没用过这种东西啊!!!!)

    Algorithm:

    • Output Sensitive Algorithm
    • Dynamic Programming
    • String Matching / Auto-Completion
    • Merge of Sorted Lists (2 or more)
    • Random Generation
    • Avg. and Wostcase Runtime / Space Analysis

    Others:

    • Polymorphism
    • Design Patterns
    • Huffman Optimization (这个都快忘了)
    • Architechture Design
    • Exception and Handling (这个完全给跪了)

    基本就这些了。有些东西真的是太久没见过,都忘了。还有些东西想都没想过。Onsite最后一个人一上来问说:Suppose I dereferenced a random pointer in C++ program, and then I got an error and back to OS, can you tell me what happened there? 我当时整个人都囧了,这NM简直是结合了Complier, Exception和OS等多个方面的问题,太综合了点吧!

    总的来说,一般都会有好几个面试官,然后每个面试官喜欢出写跟自己这在做的工作相关的。第一个面试官是搞Speech-to-text的,然后就问了两个word auto complete的问题。然后着重问了些设计上的细节,比如说哪个地方用那种data structure; search的时候用什么algorithm。后面还有面试官直接说“我现在正在用一个神马神马东西,你帮我设计一个”之类的。当然,也可能跟resume有关。我resume上面写了好几个project,碰到类似部门的面试官就会先问我写这方面的问题。

    以前看到过很多人说这种tech interview会让你手写code,然后R和YJ也告诉我会写一堆code。本来我蛮紧张的,怕给个难题写出来一堆bug。结果发现,会让你写code的肯定都是简单的题啊!总共写了4段code:

    • Find mininum element in a linked list
    • reverse a linked list
    • merge multiple sorted linked lists.
    • check if there is a cycle in a linked list

    这4个的code大二的学生就会写了有没有!前三个我们学校大一就会学有没有!其实我觉得这种code就是考你个基本功,看你是不是会一种编程语言。真正考人的地方还是在后面设计和算法上面,重点还是看你的思考能力。面试官想看到的是,当给你一个你们见过的问题时,你会怎么处理。

    下面说说面试流程。先说电话面试吧。网上都说电话面试的时候会先问点behaviour question,来缓解一下紧张的气氛。关于这点,我只能说:呵呵~。我电话面试就是:hi Wendell? OK, Let's start. Tell me some detail you did in this project...说好的behaviour question呢?这简直是直入正题,连寒暄都没有!

    算上onsite的4个面试官和1个电话面试官,我见过5个面试官。有三个开头是tell me about a project you did (or this project on your resume)。所以说做一些这方面的准备还是很重要的。还好我对自己做得东西还算熟,加上像AI的project专业性比较强,可以没事儿吐几个貌似很高深的专业词汇,装装B还是可以的。建议大家以后面试的时候准备1,2个这种Project,被问到的几率还是蛮大的。

    如果开篇没问这些,就是直接进入正题了。一般来说,都会问个问题,然后问你怎么解。如果是个简单的问题,会让你写code。如果是比较困难的问题,多半是不会写code的,而你也会花大多数时间解释。比较经典的流程是给个问题,然后问can you improve this。我现在听到这句话都想死有木有啊!!!因为除非你能给个formal proof说没有更好的算法了,不然面试官会一直问到死啊!当然,另外一点就是what is the runtime。其实这个一般不是很难,但有时候面试官会让你用固定的变量,比如我面试的时候把一个词典做成了prefix tree,然后面试官让我把retrive a subtree的runtime和词典里词的数量联系起来,当时分体的我个蛋疼。当然,还有些时候会让你分析space,还有些时候是worst case and average case……总而言之,建议大家多作这个的练习吧,肯定跑不掉的。

    最后说一下,有些面试官会很贱的误导你!我最后一个面试,那个面试官特别拉风,右边脸颊和脖子上有纹身,然后右手背上纹了个“独”字,左手背上纹了个“孤”字。问了我一道random generation的东西,然后试着误导我,说:我给你个提示,你可以这样这样,你不觉得很有用吗?然后我看半天不知道怎么接下去,因为出来的东西都是不对的!最后他告诉我,其实这道题测的是看你会不会让这个random的几率不平均。我擦,还好我是学AI的,半只脚踩在stat上的,不然还真说不定被你匡进去了!

    面试的最后,有时候会给你点问问题的时间。据说这个也是面试官看重的一部分。我的一般做法是,问问面试官什么team的,问问他们的产品,问问他们team和其他team的联系。我问过技术相关的地方,好些东西都有保密机制,问不出个啥,还容易尴尬,不如问些什么一星期开几次会啊,要给其他team合作时候怎么办啊之类的问题。

    最后说说面试题目吧。其实Google的面试题是要求保密的,我也就不说太详细,也不放答案了,你们就当练习题做好了

    1. 给你个BST/Min-Heap,找第K小的数
    2. 前面说的4个linked list problem
    3. 用linked list编一个stack,除了push和pop,还有min(),返回stack里面最小的element
    4. 现在程序要merge n个sorted list,但list很长会花非常多的时间,那我怎样设计程序达到高效率
    5. 假设现在有很大量的数据,99%是8-bit integer,1%是64-bit integer,如何记录这个
    6. given a set of intergers,the range of the set is defined at [low,high] where low is the smallest nubmer in the set and high is the largest number in the set. randomly generate a number such that in (low,high) but not in the set.
    7. Given an array of integers, and a difference d, produce the longest arithmetic progression chain from the array with the given difference.

    神啊,让Google给我个offer吧

  • 相关阅读:
    16. 3Sum Closest
    17. Letter Combinations of a Phone Number
    20. Valid Parentheses
    77. Combinations
    80. Remove Duplicates from Sorted Array II
    82. Remove Duplicates from Sorted List II
    88. Merge Sorted Array
    257. Binary Tree Paths
    225. Implement Stack using Queues
    113. Path Sum II
  • 原文地址:https://www.cnblogs.com/wingjay/p/3900813.html
Copyright © 2011-2022 走看看