zoukankan      html  css  js  c++  java
  • 如何用一个月的时间准备google的技术面试

    如何用一个月的时间准备google的技术面试 - 第1张  | 快课网题图:正在滴血的谷歌

    最近google在我大陆又火了一把,谷歌不能用了,哎呀,尼玛。还让不让程序员活了。在这个节骨眼上,我也来凑个热闹,对于广大需要谷歌的程序猿们,送上两个字:呵呵

    昨天在csdn上看到一位兄台的文章《给所有面试官》,吐槽了下极品面试经历。对于这位兄台所遇到的极品面试官,本人同样送上两个字:呵呵

    我曾经也参加过一些大大小小的公司笔试、面试,牛掰如阿里百度腾讯,犀利如Google,Mircosoft,盛大研究院,无一例外,均将我秒杀。让我一度怀疑自己是否是程序员的料,幼小的心灵从那时起,留下了巨大的阴影。当然,N次大公司的面试失败以后,归结成两条经验教训:缺乏笔试面试的技巧,非科班出身(实质是计算机知识不成体系)。

    关于面试笔试,就六个字:技巧+实力+运气。本文只涉及四个字:技巧+实力。当然,本文的技巧,不同于一般意义的“技巧”。

    面试笔试是需要技巧的

    面试是需要技巧的,这一点没有人否认。笔试、面试时有相当比例的题目的是跟程序员相关,但又没那么紧密相关的东西。比如考察逻辑思维能力、抽象思维能力的题目,大公司尤其注重这一点,感觉有点测试智商的味道。好吧,我承认,我的智商有时候不够用。不可否认有极个别的聪明人存在,这些天才,思维活跃,面对一些极品难题,他们都能佛挡杀佛。但事实上大部分人的逻辑思维能力,都是通过平时有意识的锻炼出来的,而不是与生俱来的。想看看自己的智商有多少漏洞,请点这里:门萨-智商黑洞

    我想说的是:只要你不笨,只要你有意识去锻炼自己这方面的能力,这个东西其实跟你的知识体系的建立是一样的,得靠积累。如果你没事只知道刷微博,刷朋友圈,你的“智商”也永远是停留在那个水平。

    曾遇到一个面试官问了这么个题目,至今印象深刻,分享给大家,看看自己的脑袋还够用不。

    题目:

    给你两个一模一样的玻璃球,已知这种玻璃球,从一栋总共有一百层楼的高楼的某一层楼X扔下来,刚好破碎(即在X层以下不会摔碎,在X层以上均会摔碎)。让你用最少的次数找出这个临界楼层。(注意:你只有两个玻璃球,所以只有两次蛋碎的机会。并假设,每扔一次球,如果球没碎,它的坚硬程度不发生改变)。

    最差答案:

    一种最差的解法如下:从第一百层楼开始扔玻璃球,如果没有摔碎,则跑到第99层楼扔,以此类推,最坏的情况是,在第一层楼扔的时候球才摔碎。因此最大需要扔100次才能找出临界楼层。(这种解法,我们只用了一个玻璃球,另外一个玻璃球还没用上啊!)

    若有兴趣,可以看看苹果公司的这几个面试题目:苹果向求职者抛出的8大难题

    面试笔试是需要实力的

    程序员面试笔试,考察的技术相关的东西主要有:编程语言、算法、设计模式、操作系统、项目经验等等。基本功扎实了,面试笔试就有底气了,如果再多点实际工程经验,那么面试对你来说,就是五个字:那都不是事

    ===========华丽丽的分割线============

    废话说了这么多,进入本文主题,如何用一个月的时间去准备google的技术面试??

    这个问题已经被问过无数多遍,也被无数人回答过。我结合自身的经验教训,来梳理总结一下。

    1.1过一遍常用的数据结构:链表、二叉树、堆树(Tree+Heap)、(红黑树、AVL)(可选)。队列、堆、栈、hash表。

    1.2 研究一下上述数据结构在你熟悉的编程语言中是如何实现的。例如,如果你熟悉Java,可以学习下HashMap、LinkedHashMap、TreeSet、HashSet等等这些常用数据结构的实现。

    1.3自己动手编码实现这些数据结构,而不是仅仅写出伪代码就完事了。

    2.1过一遍你课堂上学过的经典算法:各种排序算法、图的遍历算法、最短路径算法等等。

    2.2 知道怎么求一个算法的时间复杂度。

    2.3 写代码时,有意识的关注程序的空间复杂度,这点在实际工作中很有用。因为内存很多时候会不够用。

    3.1 用你熟悉的编程语言实现第一、第二两部分。在编码实现的过程中,试着不借助任何参考资料来完成。

    3.2 在完成3.1所说的编码后,试着从时间、空间两个维度去优化你所写的程序。

    练习面试问题。选择一本面试相关的书,例如《Cracking the coding interview》,亲手练习一下书中的题目,在纸上书写或在IDE中编写都行。(PS:很多面试官都喜欢让你在纸上写程序,所以,有意识的练习练习吧,不要太依赖IDE了)。在解答相关面试题时,注意不断改进、优化你的解法。例如,将时间复杂度从n*n优化到nlogn。

    练习在白板上分析、解决问题,并能够将你解决问题的思路清晰的表达出来。(这一点要求比较高,尤其对一些“羞射”的程序员们)。在解决某一个给定问题时,对于你给出的解决方案,你得有充分的理由。你为什么选用这种数据结构,这种算法来解决这个问题。

    上述五大点是真的很重要,我自己曾经在这上面就犯了眼高手低的错误,只亲手实现了其中的一部分。在只有一个月时间的情况下,时间安排如下:

    1)最多用1.5周的时间完成第一点和第二点。

    2 )至少花一周的时间彻底搞懂你尚未明白的问题。

    3 )然后剩下的时间,在白板上编码实现吧。

    翻译自:Quora

  • 相关阅读:
    JavaScript模态对话框类
    事件模块的演变(1)
    html5中可通过document.head获取head元素
    How to search for just a specific file type in Visual Studio code?
    What do 'lazy' and 'greedy' mean in the context of regular expressions?
    正则非获取匹配 Lookahead and Lookbehind ZeroLength Assertions
    regex length 正则长度问题
    Inversion of Control vs Dependency Injection
    How to return View with QueryString in ASP.NET MVC 2?
    今天才发现Google Reader
  • 原文地址:https://www.cnblogs.com/cricode/p/3826459.html
Copyright © 2011-2022 走看看