美国软件工程师求职小记
背景 & 瞎扯
刚来美国的时候,根本没想到会有一天拿到 f, g 两家 dream company, 以及热门 startup SnapChat 的 offer。能拿到这个意料之外的结果,运气固然重要,但实力也是不可缺少的。下面给大家分享一下找工作的历程。
本人 2014 Fall 开始在美国某校读硕。来美国之前,拿到某校的通信工程本科学位。通信工程是 EE 的分支之一,主要课程都是与电路、信号、数学有关的,因此平时都在搭电路、写 MATLAB。大一学过 C++ 和数据结构,然而编程作业基本都是抄好基友的,以至于至今对 C++ 的模板、友元等概念只停留在知道名词的层次。之后三年基本没写过除了 MATLAB 之外的代码。大四下拿到某校 ad 之后开始通过刷题学 Java。
到美国后开始努力刷题,在第一学期刷完 leetcode 一遍~然后寒假时面试 Google 的 summer internship 并顺利拿到 offer。2015年暑假在 Google HQ 实习,并顺利拿到 return offer。 在等 return offer 的过程中,面试了大约十家公司,拿到了 facebook 和 Snapchat 两个offer。
结果
- Offer: facebook, Snapchat, Google (return offer)
- withdraw:Two Sigma, Pure Storage, Fitbit, Microsoft, Amazon, Uber, Coursera
- 电面拒:Palantir, Airbnb, Houzz
- onsite拒:Bloomreach, Shopkick, Pinterest
- 简历拒:medallia(海投), linkedlin(内推)
面试细节
-
houzz :第一次电面,不太熟悉流程以至于非常紧张。面试官还是蛮 nice 的。题目已经不太记得了。印象深刻的是,面试官问我多久能配置好 LAMP 的全套环境。答曰:一天之内。面试官对我的回答很不满意:“一天?你一小时难道搞不定这些吗?” 总之他们家想要的是入职第一天就能干活的新手。
-
Airbnb:遇到了一道面经上的题。这道题已经被 Airbnb 用了半年多了,各大论坛上有铺天盖地的解答。想必大多数人都能迅速写出 bugfree 的代码。我没看过面经,写出了一个 bug,于是第二天收到了拒信。 (经验:一定要看面经)
-
Bloomreach 面试:最不开心的一个面试。他家给我的总体感觉就是:他们根本不 care 你在说什么。一开始跟 HR 聊天的时候,她自己 blahblah 地讲,根本不给我说话的机会。最后跟 CTO 聊天的时候,CTO 也是完全不听我解释,以至于曲解了我对项目的描述。总之是一次非常不开心的面试经验。 即使给 offer 也肯定不会去。
-
shopkick 面试:应该是 behavior 挂了。HR 问我如果 �shopkick 给我 offer,我会不会在一周之内签。我告诉他我会等 Google 的 return。挂。
-
Pinterest 面试:最开心的一个 onsite。P 家的工程师质量很高,妹子质量也很高。HR 很有效率,面试的节奏也很快。最后一面的面试官是一个很漂亮的 ABC姐姐。她之前在 f g rocketfuel 实习过,毕业后在 quora 全职工作一年,然后毅然加入当时只有10个人的 Pinterest。
-
linkedin:实习被拒简历,全职又被拒简历。不 match。
-
pure storage:八月一号在 techfair 上去了他家的 booth 做题,一周后被告知题目做得很好,要让我去 onsite。然而当时我实习快要结束,忙着赶项目,没有时间去 onsite,于是跟 HR 发邮件表示希望能在实习结束后,回匹兹堡之前去 onsite。然后石沉大海。。。直到快两个月了才收到回复。总之对 HR 的印象很差。
-
facebook: 貌似很喜欢 Google 的 intern。今年 Google 的 intern 几乎人手一个 facebook onsite。题目就不说了,总之都是 lc 原题,medium 难度。写出 bugfree 即可。
总结
facebook 非常注重代码的简洁程度。在不降低可读性的前提下,尽量用短小精悍的代码来解决问题。比如
int a;
if (isTrue()) {
a = 1;
} else {
a = 0;
}
可以用
int a = isTrue() ? 1 : 0;
来表示。以及
for (int i = 0; i < len; ++i) {
sum += nums[i];
}
可以写为
for (int num : nums) {
sum += num;
}
facebook 也很在意代码的时间复杂度。在白板上写代码的同时,别忘了记录每一行代码的复杂度。如果这一行的复杂度可以优化,不妨在旁边做一个标记,等完成全部代码之后再修改。值得一提的是,多了解几种 O(n) 的排序算法有奇效。
最后,�快速准确地写出高效优雅的代码固然重要,与面试官的交流也必不可少。
总结
心态
准备面试的过程中,尤其在拿到第一个 offer 之前,难免对自己有一些怀疑。这是很正常的。但不要因此变得消极。
教训
一定要看面经!
刷题
刷题不是万能的,但不刷题是万万不能的。
面试
八月初,我参加了 greylock techfair。这个techfair帮我拿到了70%的面试。
在 techfair 期间,通过跟公司代表聊天,我拿到了 Pinterest,Airbnb,Houzz,Shopkick,Fitbit 等公司的面试。techfair 结束之后,陆陆续续有 Facebook,Palantir 的 HR 来联系我(他们从 techfair 的简历簿里找到我的简历)。
实习/工作经历
在我看来,实习/工作经历是简历上最为重要的一项。今年各大公司普遍缩招,相应地bar也提高了一些。有一个好的实习经历无疑是一个巨大的plus。几乎所有面试官都会问我:你在Google实习做了什么呀?当然由于我的代码还没被launch,我只好笑着告诉他们我不能说。
今年facebook改了招聘战略:喜欢从实习生里招人。自家的实习生不够,就去抢隔壁Google的实习生。
课程和项目
对于转行的同学:一定要了解一些系统级的知识点。听说过有同学做出了算法题但挂在了系统知识题上,甚是惋惜。
最后的最后
一定要早准备!
时机很重要。今年linkedin的实习生可以refer。有同学被refer之后第二天拿到电面。我比该同学晚了一周招人,结果简历被秒拒。拒linkedin的员工透露,今年实习生refer得太多,导致到了后期没有headcount了,只好拒掉。
瞎扯
面试时刷题的最大动力就是为了能有朝一日与面试官谈笑风生,当然最后也实现了(笑)