当我看完别人在准备google的面试经历之后,深有感触。也许最终的目的地是否能到达并不重要,重要的是这个过程中,会让你更接近你想要成为的那个人。作为程序员,我想,花2年时间来塑造这样的一个自己,没有做什么事情比这更值得的了,因此,在这里我想给自己定个时间。

目标: 从2019.10.23日–2021.10.23日,我将追逐成为一个googler

时间 目标已学习时间 实际学习时间 差值 备注
2019.10.28 20h 12h -8 需补上

google 想要的是什么样的人

我看过一些视频和文章,来描述了谷歌需要什么样的人,总结为以下几点:

  • 学历不是硬性标准
  • 非常精通一门语言:Java 、C++、Python 将会是不错的选择。
  • 对计算机基础科学非常熟悉:数据结构、算法、系统设计、(计算机组成、计算机网络)、进程、线程、可伸缩性、数据处理,具体可看github内容
  • 聪明、努力、快速上手能力、快速成长、沟通能力
  • 有自己的项目、自己的github、自己的重要的工作经历
  • 大量的编码练习:leetcode
  • 英语

获取面试以及面试准备:

  • 和朋友练习面试

  • 寻找关系人获得面试机会

  • meetup

  • 根据github那个google面试,了解google的东西

    我的计划

    总目标: 2019.10.23日–2021.10.23日
    阶段性目标:

    时间 目标 详细
    2020.8.1日 第一次面试谷歌申请 准备好基础的能力: 语言 + 计算机科学 + leetcode
    2020.12.1日 第二次面试谷歌申请 备战自已一面的不足: 技能 + 沟通 + 读书 + leetcode + 自己的项目 + 复习
    2021.5.1日 第三次面试谷歌申请 继续备战: leetcode + 自己的项目 + 读书 + 复习
    2021.9.1日 第四次面试谷歌申请 继续备战: leetcode + 自己的项目 + 读书 + 复习
    2021.12.1日 第五次面试谷歌申请 继续备战: leetcode + 自己的项目 + 读书 + 复习

    第一阶段 - 2019.10.23日 - 2020.9.1日(10个月)

    学习计划:

    时间段 时间
    每天早上 6:30 ~ 8: 30
    每天中午 12:30 ~ 1: 00
    每天晚上 7: 00 ~ 12: 00
    周末 4:00 ~ 12: 00 抽选1天

    每周算5天: 4 x 6 + 8 = 32h (8小时那天是复习当周所学)
    每月: 32 x 4 = 128h
    12月: 128 x 12 = 1536h
    24月: 1536 x 2 = 3072h

    需要学习的内容(优先学习github上提及内容):

    内容 详情 时间 备注
    英语 1. 每天读懂、说一篇文章 2. 每周写一篇文章 - 16 x 12 x 2 = 384篇(第二个月开始加上)
    数据结构与算法 1. 优先学习github 2. 2 本书 2020.12.23日(256h) 学完核心的数据结构和算法,并leetcode练习
    操作系统、计算机网络 1. 优先网络视频 2. 2本书 2020.1.23日(128h) 优先网络资源,其次书、习题练习、笔记复习
    leetcode 算法、数据结构 - 平均每天4题 共计768题
    递归 1. 视频 2. 刷题 2020.1.26日(20h) -
    动态规划 1. 视频 2. 刷题 2020.2.4日(30h) -
    组合(Combinatorics) (n 中选 k 个) & 概率(Probability) 1. 视频 2. 刷题 2020.2.9日(30h) -
    NP, NP-完全和近似算法 1. 视频 2. 刷题 2020.2.14日(30h) -
    缓存(Cache) 1. 视频 2. 刷题 2020.2.18日(20h) -
    系统设计、可伸缩性、数据处理 1. 视频 2. 刷题 2020.2.26日(40h) -
    测试 1. 视频 2. 刷题 2020.3.5日(64h) -
    调度 1. 视频 2. 刷题 2020.3.15日(64h) -
    实现系统例程 1. 视频 2. 刷题 2020.3.25日(64h) -
    字符串搜索和操作 1. 视频 2. 刷题 2020.4.5日(64h) -
    Java学习(我选择java,因为最熟悉) 1. head first java 2. thinking in java (Java 编程思想) 3. Effective Java 4. Spring揭秘 5. 深入理解 Java 虚拟机 6. 分布式 Java 应用:基础与实践 7. Java编程思想(第4版) 8. JAVA 2核心技术 卷II:高级特性(原书第7版) 2020.5.23日(128h) 按顺序能读多少读多少, 并整理笔记
    自己的项目 自己感兴趣的东西 2020.7.5日2个月(256h) -
剩余时间弥补前面未学习的内容、刷题、直到10月

数据结构和算法的学习计划 - 2019.12.23日(256h) – 20h 学习法则,从入门到非常熟练,你需要20h

内容 详细 时间 完成度
数组 4h学习+4h leetcode 8h 完成
链表 4h学习+4h leetcode 8h -4h
堆栈 4h学习+4h leetcode 8h -
队列 4h学习+4h leetcode 8h -
算法复杂度 / Big-O / 渐进分析法 - 12h
- 30h
排序 - 24h
- 30h
其余根据书本来定重要的 - 128h

第一周的学习 - 2019.10.24日 ~ 2019.10.27日(6 x 2 + 8 = 20h)

内容 详细 时间 是否完成
数组 学习4h + 2h leetcode 2019.10.24日 学习了数组的特性、练习了一道数组,明白了时间、空间复杂度(少学了2个小时,因为加班)
数组 + 链表 数组(2h leetcode) + 链表学习(4h) 2019.10.25日 晚起了13分钟,准备整理、时间空间复杂度计算
链表 + 堆栈 链表(4h leetcode) + 堆栈学习(4h) 2019.10.27日 否,链表学习完毕

第一周周末忙于Python编辑器,延迟了8h的链表学习。

第二周学习计划 - 2019.10.28日 ~ 2019.11.3日(6 x 4 + 8 = 32h)

这周主要目标:排序(7)+补学习时间

内容 详细 时间 是否完成
排序 排序(4h leetcode) + 排序学习(2h) 2019.10.28日 -
排序 排序(2h) + leetcode(4h) 2019.10.29日 -
排序 排序(4h) + leetcode(2h) 2019.10.30日 -
算法复杂度 排序(leetcode 2h) + 补前面时间 2019.10.31日 -