(转) 坚持完成这套学习手册,你就可以去 Google 面试了

 

坚持完成这套学习手册,你就可以去 Google 面试了

系统 指针 value Google 面试

阅读6138 

 

这是?

这是我为了从 Web 开发者(自学、非计算机科学学位)蜕变至 Google 软件工程师所制定的计划,其内容历时数月。

 


 

这一长列表是从 Google 的指导笔记 中萃取出来并进行扩展。因此,有些事情你必须去了解一下。我在列表的底部添加了一些额外项,用于解决面试中可能会出现的问题。这些额外项大部分是来自于 Steve Yegge 的“得到在 Google 工作的机会”。而在 Google 指导笔记的逐字间,它们有时也会被反映出来。


目录

—————- 下面的内容是可选的 —————-


为何要用到它?

我一直都是遵循该计划去准备 Google 的面试。自 1997 年以来,我一直从事于 Web 程序的构建、服务器的构建及创业型公司的创办。对于只有着一个经济学学位,而不是计算机科学学位(CS degree)的我来说,在职业生涯中所取得的都非常成功。然而,我想在 Google 工作,并进入大型系统中,真正地去理解计算机系统、算法效率、数据结构性能、低级别编程语言及其工作原理。可一项都不了解的我,怎么会被 Google 所应聘呢?

当我创建该项目时,我从一个堆栈到一个堆都不了解。那时的我,完全不了解 Big-O 、树,或如何去遍历一个图。如果非要我去编写一个排序算法的话,我只能说我所写的肯定是很糟糕。一直以来,我所用的任何数据结构都是内建于编程语言当中。至于它们在背后是如何运作,对此我一概不清楚。此外,以前的我并不需要对内存进行管理,最多就只是在一个正在执行的进程抛出了“内存不足”的错误后,采取一些权变措施。而在我的编程生活中,也甚少使用到多维数组,可关联数组却成千上万。而且,从一开始到现在,我都还未曾自己实现过数据结构。

就是这样的我,在经过该学习计划后,已然对被 Google 所雇佣充满信心。这是一个漫长的计划,以至于花费了我数月的时间。若您早已熟悉大部分的知识,那么也许能节省大量的时间。

如何使用它

下面所有的东西都只是一个概述。因此,你需要由上而下逐一地去处理它。

在学习过程中,我是使用 GitHub 特殊的语法特性 markdown flavor 去检查计划的进展,包括使用任务列表。(注:因极客头条的 markdown 并不支持此语法,因此在下方做了删除处理)

更多关于 Github-flavored markdown 的详情

拥有一名 Googler 的心态

把一个(或两个)印有“future Googler”的图案打印出来,并用你誓要成功的眼神盯着它。

我得到了工作吗?

我还没去应聘。

因为我离完成学习(完成该疯狂的计划列表)还需要数天的时间,并打算在下周开始用一整天的时间,以编程的方式去解决问题。当然,这将会持续数周的时间。然后,我才通过使用在二月份所得到的一个介绍资格,去正式应聘 Google(没错,是二月份时就得到的)。

感谢 JP 的这次介绍。

跟随着我

目前我仍在该计划的执行过程中,如果你想跟随我脚步去学习的话,可以登进我在 GoogleyAsHeck.com 上所写的博客。

下面是我的联系方式:

 


 

不要自以为自己足够聪明

  • Google 的工程师都是才智过人的。但是,就算是工作在 Google 的他们,仍然会因为自己不够聪明而感到一种不安。
  • 天才程序员的神话

关于 Google

相关视频资源

部分视频只能通过在 Coursera、Edx 或 Lynda.com class 上注册登录才能观看。这些视频被称为网络公开课程(MOOC)。即便是免费观看,部分课程可能会由于不在时间段内而无法获取。因此,你需要多等待几个月。

很感谢您能帮我把网络公开课程的视频链接转换成公开的视频源,以代替那些在线课程的视频。此外,一些大学的讲座视频也是我所青睐的。

面试过程 & 通用的面试准备

为你的面试选择一种语言

在这,我就以下话题写一篇短文 —— 重点:为在 Google 的面试选择一种语言

在大多数公司的面试当中,你可以在编程这一环节,使用一种自己用起来较为舒适的语言去完成编程。但在 Google,你只有三种固定的选择:

  • C++
  • Java
  • Python

有时你也可以使用下面两种,但需要事先查阅说明。因为,说明中会有警告:

  • JavaScript
  • Ruby

你需要对你所选择的语言感到非常舒适且足够了解。

更多关于语言选择的阅读:

在此查看相关语言的资源

由于,我正在学习C、C++ 和 Python。因此,在下面你会看到部分关于它们的学习资料。相关书籍请看文章的底部。

在你开始之前

该列表已经持续更新了很长的一段时间,所以,我们的确很容易会对其失去控制。

这里列出了一些我所犯过的错误,希望您不要重滔覆辙。

1. 你不可能把所有的东西都记住

就算我查看了数小时的视频,并记录了大量的笔记。几个月后的我,仍然会忘却其中大部分的东西。所以,我翻阅了我的笔记,并将可回顾的东西制作成抽认卡(flashcard)(请往下看)

2. 使用抽认卡

为了解决善忘的问题,我制作了一些关于抽认卡的页面,用于添加两种抽认卡:正常的及带有代码的。每种卡都会有不同的格式设计。

而且,我还以移动设备为先去设计这些网页,以使得在任何地方的我,都能通过我的手机及平板去回顾知识。

你也可以免费制作属于你自己的抽认卡网站:

  • 抽认卡页面的代码仓库
  • 我的抽认卡数据库:有一点需要记住的是,我做事有点过头,以至于把卡片都覆盖到所有的东西上。从汇编语言和 Python 的细枝末节,乃至到机器学习和统计都被覆盖到卡片上。而这种做法,对于 Google 的要求来说,却是多余。

在抽认卡上做笔记: 若你第一次发现你知道问题的答案时,先不要急着把其标注成“已懂”。你需要做的,是去查看一下是否有同样的抽认卡,并在你真正懂得如何解决问题之前,多问自己几次。重复地问答可帮助您深刻记住该知识点。

3. 回顾,回顾,回顾

我留有一组 ASCII 码表、OSI 堆栈、Big-O 记号及更多的小抄纸,以便在空余的时候可以学习。

每编程半个小时就要休息一下,并去回顾你的抽认卡。

4. 专注

在学习的过程中,往往会有许多令人分心的事占据着我们宝贵的时间。因此,专注和集中注意力是非常困难的。

你所看不到的

由于,这个巨大的列表一开始是作为我个人从 Google 面试指导笔记所形成的一个事件处理列表。因此,有一些我熟悉且普遍的技术在此都未被谈及到:

  • SQL
  • Javascript
  • HTML、CSS 和其他前端技术

日常计划

部分问题可能会花费一天的时间去学习,而部分则会花费多天。当然,有些学习并不需要我们懂得如何实现。

因此,每一天我都会在下面所列出的列表中选择一项,并查看相关的视频。然后,使用以下的一种语言去实现:

C —— 使用结构体和函数,该函数会接受一个结构体指针 * 及其他数据作为参数。
C++ —— 不使用内建的数据类型。
C++ —— 使用内建的数据类型,如使用 STL 的 std::list 来作为链表。
Python ——  使用内建的数据类型(为了持续练习 Python),并编写一些测试去保证自己代码的正确性。有时,只需要使用断言函数 assert() 即可。
此外,你也可以使用 Java 或其他语言。以上只是我的个人偏好而已。

为何要在这些语言上分别实现一次?

因为可以练习,练习,练习,直至我厌倦它,并完美地实现出来。(若有部分边缘条件没想到时,我会用书写的形式记录下来并去记忆)
因为可以在纯原生的条件下工作(不需垃圾回收机制的帮助下,分配/释放内存(除了 Python))
因为可以利用上内建的数据类型,以使得我拥有在现实中使用内建工具的经验(在生产环境中,我不会去实现自己的链表)

就算我没有时间去每一项都这么做,但我也会尽我所能的。

在这里,你可以查看到我的代码:

你不需要记住每一个算法的内部原理。

在一个白板上写代码,而不要直接在计算机上编写。在测试完部分简单的输入后,到计算机上再测试一遍。

必备知识

算法复杂度 / Big-O / 渐进分析法

数据结构

更多的知识

树(Trees)

排序(Sorting)

图(Graphs)

图论能解决计算机科学里的很多问题,所以这一节会比较长,像树和排序的部分一样。

可以从 Skiena 的书(参考下面的书推荐小节)和面试书籍中学习更多关于图的实践。

更多知识

CSDN移动发布于GEEKNEWS 4小时前

分享到:  

评论

 

已有4条评论

  • 最新

码农丶 1小时前

首先你得会英语,这才是关键!

0


华溢澄 2小时前

英语是瓶颈

1


bokee 2小时前

疯狂,希望成功

0


pastoral523 3小时前

真的可以么?我一直想去谷歌面试呢,我做微信开发真的做够了http://www.xiangeang.com/

0

 

 

 

 

 

发布到 主题  发布 评论

  

 

时间: 2024-09-12 02:19:33

(转) 坚持完成这套学习手册,你就可以去 Google 面试了的相关文章

Google Interview University - 坚持完成这套学习手册,你就可以去 Google 面试了

本文讲的是Google Interview University - 坚持完成这套学习手册,你就可以去 Google 面试了, 这是我为了从 web 开发者(自学.非计算机科学学位)蜕变至 Google 软件工程师所制定的计划,其内容历时数月. 这一长列表是从 Google 的指导笔记 中萃取出来并进行扩展.因此,有些事情你必须去了解一下.我在列表的底部添加了一些额外项,用于解决面试中可能会出现的问题.这些额外项大部分是来自于 Steve Yegge 的"得到在 Google 工作的机会&quo

《ZEMAX光学设计超级学习手册》一一2.4 像分析

2.4 像分析 ZEMAX光学设计超级学习手册 图像分析在光学模拟过程中的使用是必不可少的,其中比较常用的分析功能有模拟图像(Image Simulation).双目分析(Biocular Analysis).计算(Calculations)等. 2.4.1 模拟图像 模拟图像(Image Simulation)菜单包括模拟图像.几何像分析.几何图像分析.部分相干像分析.拓展衍射像分析.IMA/BIM格式浏览文件等子菜单项,如图2-48所示. (1)模拟图像(Image Simulation):

《ZEMAX光学设计超级学习手册》一一2.1 外形图

2.1 外形图 ZEMAX光学设计超级学习手册 外形图(Layout)是指通过镜头截面的外形曲线图.主要有二维外形图.三维外形图.阴影图.原件图.二维外形图是通过镜头YZ截面的外形曲线图:三维外形图则显示镜头系统的三维空间外形:阴影图则表示阴影的立体模型:原件图能建立光学加工图. 2.1.1 二维外形图 二维外形图(2D Layout):通过镜头YZ截面的外形曲线. 打开二维外形图对话框"2D Layout → Settings",如图2-1所示. (1)First Surface:绘

《ZEMAX光学设计超级学习手册》一一1.2 用户界面

1.2 用户界面 ZEMAX光学设计超级学习手册 启动ZEMAX后将进入ZEMAX默认的工作界面.ZEMAX的基本界面比较简单,包括一系列菜单和工具按钮,以及一个透镜数据编辑界面,如图1-8所示. 1.2.1 窗口类型 ZEMAX软件有许多不同类型的窗口,每种窗口各有不同的用途,主要包括: (1)主窗口:此窗口包含一块很大的空面积,其上方有工作区.标题栏.菜单栏.工具栏等.菜单栏中的命令一般来说可作用于当前光学系统的整体. (2)编辑窗口:ZEMAX软件中有5个不同的编辑器,分别是镜头数据编辑器

《MATLAB R2012a超级学习手册》一导读

前言 MATLAB R2012a超级学习手册 MathWorks公司在1984年推出了一套高性能的数值计算和可视化软件--MATLAB.MATLAB全称"矩阵实验室"(Matrix Laboratory),是由著名的线性代数软件包LINPACK和特征值计算软件包EISPACK中的子程序为基础发展而成的一种开放式程序设计语言. MATLAB集数值计算.矩阵运算和可视化图形于一体,可方便地应用于算法开发.数据采集.数学建模.系统仿真.数据分析.科学和工程绘图.应用软件开发等方面.MATLA

《ANSYS CFX 14.0超级学习手册》——第2章 CFX软件简介2.1 CFX的软件构成

第2章 CFX软件简介 ANSYS CFX 14.0超级学习手册CFX软件是目前国际应用最广泛的商用CFD软件之一,可求解与流体.热传递及化学反应和燃烧等相关的工程问题.CFX具有丰富的物理模型.先进的数值方法以及强大的前后处理功能,在航空航天.汽车设计.石油天然气.涡轮机设计等方面有着广泛的应用.本章将介绍CFX软件的结构和文件类型. 学习目标: 掌握CFX软件的结构体系: 掌握CFX计算的分析过程中所用到的软件模块:前处理.求解管理及后处理: 掌握CFX整个分析过程中产生的文件类型及其内容.

《ABAQUS 6.14超级学习手册》——第1章 ABAQUS概述1.1 ABAQUS简介

第1章 ABAQUS概述 ABAQUS 6.14超级学习手册ABAQUS是一款功能强大的有限元分析软件,其核心是求解器模块,ABAQUS/Standard和ABAQUS/Explicit是互相补充的.集成的分析模块.本章将简要介绍ABAQUS的使用环境和软件发展历程.ABAQUS提供了强大的帮助文件系统,并且包含一套完整的帮助文档.通过本章的学习,读者能够了解利用ABAQUS软件进行有限元分析的一般步骤和其特有的模块化的处理方式. 学习目标 (1)了解ABAQUS的简介和使用环境. (2)掌握A

《FLUENT 14.0超级学习手册》——2.3 FLUENT 14.0的功能模块

2.3 FLUENT 14.0的功能模块 FLUENT 14.0超级学习手册一套传统的FLUENT软件包含两个部分,即Gambit和FLUENT.Gambit的主要功能是建模几何和划分网格,FLUENT的功能是流场的解算及后处理.此外还有专门针对旋转机械的几何建模和网格划分模块Gambit/Turbo以及其他具有专门用途的功能模块. 说明:ANSYS收购FLUENT以后,FLUENT被集成到ANSYS Workbench中,越来越多的用户选择使用ANSYS Workbench中集成的网格划分工具

PostgreSQL学习手册(目录)

原文地址:http://www.cnblogs.com/stephen-liu74/archive/2012/06/08/2315679.html     事实上之前有很长一段时间都在纠结是否有必要好好学习它,但是始终都没有一个很好的理由说服自己.甚至是直到这个项目最终决定选用PostgreSQL时,我都没有真正意识到学习它的价值,当时只是想反正和其它数据库差不多,能用就行了.然而有一天晚上,自己也不知道为什么,躺在床上开始回想整个项目的实施过程,想着想着就想到了数据库选型这一问题上了.事情是这