今天上午听了从 Udacity 的 Full stack 课程学出来的学员王子豪,讲如何学习以及如何进入 google 的情况。他说北理工2010-2014年的机械专业学生,大四交换去了伯克利学习,在那边开始学习 cs。工作一年之后开始学习 udacity 的 full stack 课程,相当于转专业并且边工作边学习最后进入了 google。Udacity 中国组织了一个沙龙,其实就是线上的一个直播活动,在红点直播,根据他的一些经验,我听得过程中简单总结了几点,记录下来:

  1. google 只面试算法,不面其他的内容。
  2. 算法主要做了 leetcode 上面的内容
  3. google 面试当时面了5轮,5轮基本都是算法题。在美国面试 facebook 和 google, 必须学会算法,比如tree map, hash map这些,会问你为什么会选这个数据结构而不选另外一个数据结构,为什么用 dfs 而不用 bfs,这其实就是考你对这些数据结构和算法的一个真正的了解程度。最后要达到的效果是,比较难得算法,聊着聊着 20 min 能出来结果,如果是简单的算法则基本上10分钟之内要写出代码,很快给出思路。举了一个例子,比如24的所有组合情况,1x24, 2x12, 3x8, 2x2x6, 用 DFS,因为是包含了所有的可能性,两个数相乘,三个数相乘都有。但是如果要所有两个数的组合则用 BFS。
  4. 为什么从 python 转了 java:因为python 的 api 太多了,会把所有的东西直接给你了,很多东西不需要你知道算法,直接调用 api 就可以了。所以从 python 转 java。而之所以没选 c,是因为java 又没有 c 那么基础,最后取了个中间的,就是 java。而且 google 内部 java, python, c++ 比较主流,而 java 最主流。
  5. 对于国内来说,基本上要拿到 acn(acm?) 竞赛的人才能拿到国内 google 的面试机会。
  6. 美国会对转专业的计算机学生会有偏见吗?会!
  7. 为什么选 udacity:感觉udacity 的课程比 courseera 好,因为 courseera 讲解的比较基础,但是 udacity 讲解实际应用方面的比较多,很多讲师本来就是 google facebook 的工程师,所以讲解的比较实际。我修的课程是 udacity 的 full stack。
  8. 如何找工作:我是通过有朋友内推进去的,但是其实你也可以在 linkedin 在上面找找你想去的公司的人,然后给他发简历,发邮件说你想去,会有些人会帮忙,但也不一定。
  9. 假如你在准备图(一种数据结构?不知道,map吗?),bfs 和 dfs,给你一个矩阵 matrix, n*n, 有些是 1 有些是0, 1连起来的是岛, 有三个问题:1.有多少座岛。2.问你湖的面积有多少(被岛围起来的就是湖)。3. 我现在要填海造陆,或者填湖造陆,问你每一步动态变化的时候岛和陆地怎么变化。
  10. 面 yellowpage(也是一个网络公司?) 和 google 的时候都是白板写代码, 前提是你的交流要很好,而且对整个算法很了解,不能在白板上东写一块西写一块,而且又会擦来擦去,最后的效果就不好了。
  11. 美国对三年以下工作经验的人基本不会问设计方面的问题,比如线程的具体实现,以及本质这些。
  12. 如何刷算法题:leetcode 至少要做到 300 多道题,而且要做到两遍以上。我加了一个算法的培训班,很贵,但是挺好的,先不做广告了,可以加微信再聊。
  13. 很多 python 的算法,直接调用 api 就可以了。但是 java 不是,比较系统。sort 总共有多少种?每种都是什么优劣,以及使用的场景等等。