(一) 我的这几年
首先说一下我的背景, 我在美国加州 top30 某校读计算机科学本科, 今年大三. 写下这篇博客是因为几天前我翻到自己 17 年初刚到美国的时候曾写下的一张打鸡血便利贴:
所以我突然就想, 为什么不分享一下这段经历呢? 也许就能给跟自己经历相似的人一点勇气去坚定做自己喜欢做的事情了呢? 认识我的人可能知道, 我一路非常曲折. 我参加过高考, 休过学, 退过学. 我本科的第一个专业并不是计算机也不是数学 -- 因为我的家人一开始并不理解我, 他们觉得我作为一个女生, 就不该去学理工科的专业. 在我的第一个本科学校, 因为这个原因我经历过中度抑郁, 休学, 跟家人发生的激烈矛盾, 也无数次想过自杀. 我曾经一度觉得未来是黑暗的, 而计算机和数学是照进我世界的那一道光. 在一开始没有机会进入科班学习的时候, 我大部分关于计算机知识的获得, 困难的解决都来源于其他人的分享 (免费博客, 教程, 公开课). 我所用到的大部分学习资源, 都是免费的, 开源的. 这也是我现在只要有空依然喜欢写博客的原因之一.
这两年来, 我觉得自己的一些想法其实潜移默化地对自己产生了很大影响:
不止步于课内, 去积极主动做更多: 实习, 科研, 读相关的技术书籍, 写算法题, 自己感兴趣的项目, 去上比较有难度但有价值的课. 我来到美国后一直在努力让自己的每一个暑假不被浪费. 有的东西当时做的时候看起来没有什么特别大用处, 但是都在之后某个关键节点给了我很大的帮助.
对自己的专业抱有热爱, 激情与执着: 坚定而且热爱自己所做的事情.
不怕失败, 敢想, 敢做: 99 个公司拒绝了你都没有关系, 只要有一个要你了, 你就成功了. 永远要敢于为自己争取机会.
今年秋招我投了至少 100 + 份简历, 最丧的两周邮箱里疯狂收到拒信, 心灰意冷, 觉得秋招自己要完蛋了. 起起落落, 最终尘埃落定.
(二) 面试
回归正题, 今年北美谷歌 Software Engineer Intern 的招聘流程主要是:
投简历 - 做 OA - 背靠背电面, 共两轮面试 - Hiring Committee(HC) - Project Search(这里可能会有几轮 intern placement interview) - Offer approved
[投简历]
这一轮最好在前一年的 7 月进行, 比如我要找 2019 年 summer 的实习, 那么最好能在前一年的 7 月就找到学长或者学姐内推. 如果投得晚了, 很容易出现的一个情况就是 project 都被 match 得差不多了, 那么即使你能过得了 HC 也没有太多 project 剩余了, 这时候如果你 match 不到 project, 那么也没有办法拿到 offer. 投简历这关能找内推就尽量找内推.
这里推荐一个会议叫 grace hopper celebration, 很建议女生去参加, 每年在这个会议上会有三天的 career fair, 会有很多公司去招人, 基本上 google Facebook linkedin 微软这些公司都会去, 拿到面试的概率很高. 除此之外, 你还可以听到很多人分享她们的故事.
简历上写什么? 在北美一定不要放的是: 照片, 生日, 婚姻状况, 性别这种乱七八糟的东西. HR 过你的简历用的时间一般不会超过 45 秒, 所以对于找技术实习的人来说, 最重要的是: 学校, 专业, 学位, 预计毕业时间, 过去的实习科研经历. 除此之外还可能看的部分是: GPA(一般来说 3.0 + 就行), 做过的项目, 打过的比赛 (ACM, 信息竞赛, Kaggle), 开源项目贡献, 拿过的课程, GitHub,skills(编程语言, 框架).
[OA 和电面]
今年谷歌实习生招聘有 OA 一轮, 电面两轮, 主要考察的内容还是数据结构与算法, 包括算法的设计与算法的分析 (主要是时间复杂度和空间复杂度), 基本不会出现系统设计. 写题可以参考 leetcode, 把 leetcode 题做到 500 + 就会相对来说比较稳. 但是写 leetcode 题要注意的一点就是, 不能死写, 要自己能分析出自己设计的算法的时间和空间复杂度, 以及思考有没有提升的空间. 刷算法题的时候注意总结规律, 举个例子, 比如说 linked list 里面, 最容易出现的问题之一就是对头节点的处理, 这个时候一般要怎么处理?
另外, 谷歌电面的代码都是在 Google docs 上写的, 这跟平常我们用的编辑器可能会很不同, 所以建议要提前适应不用 IDE, 而用 google docs 写题的感觉.
据说电面的代码是要提交给 HC 看的, 所以代码规范非常重要. 所以如果平常写代码不遵守代码规范的, 这一部分可能要吃很大亏. 因此我会建议平常刷题就应该遵守自己写的编程语言的代码规范, 比如我写 Python, 我就会搜类似 "Python 风格规范 - Google 开源项目风格指南" 的文章去阅读. 此外我列了一些点:
保持代码的整洁, 比如尽量少出现一个 function 中有很长很冗杂的代码.
保持代码的可读性, 比如命名是否 meaningful.
代码是否能够 handle edge case 和异常输入, 这个地方可以跟面试官先确认, 输入是否都合法, 如果不合法要怎么处理.
面试的时候要注意跟面试官的沟通, 尤其是思路卡住或者是想优化解法的时候, 面试官的每一句话可能都是一个潜在的 hint, 面试官给 hint 我们就要接住 hint. 有一个常见的误区就是以为解出题就能过面试, 但是其实并不是这样的, 面试是一个综合考察, 包括你的表达能力, 别人是否想与你一起工作.
此外面试如果实在想不出优化解法, 那么最差最差也要把暴力解法写出来. 如果想写优化解法但是时间又不够写完优化解法, 一定不要把之前写的暴力解法删掉, 至少要保证有一个可行解法在你的 google docs 上.
大部分公司技术面最后都会有个提问环节, 你可以问面试官一些问题, 这是展现你技术热情很好的时机. 这个时候要问的问题一定要是事先准备过的. 千万不要在这个时间问面试官给你什么 feedback, 因为在很多公司这是不允许的. 我面 Hulu 的时候题很快就写完了, 然后就到提问环节了, 刚好面试官组里在做的东西我有经验, 于是聊的很开心, 隔天就发了 offer.
建议各位如果以前没有参加过英文的技术面试, 正式去面试前可以至少找人 mock interview 3 次.
最后感恩秋招一路上帮忙的学长和朋友, 祝大家 2019 年找工顺利~
来源: https://www.cnblogs.com/rgvb178/p/10422161.html