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

  • 相关阅读:
    WebService-01-使用jdk发布第一个WebService服务并调用
    Oracle触发器
    java调用存储过程、存储函数
    存储过程/存储函数
    SQL查询排名第二名的信息
    sql行转列
    SELECT列表中的标量子查询
    sql子查询在insert、update、delete中的应用
    sqlserver存储过程中,set rowcount 0是什么意思?
    固态硬盘安装系统
  • 原文地址:https://www.cnblogs.com/cricode/p/3826459.html
Copyright © 2011-2022 走看看