领英、脸书面试以及onsite小记(北美)

 

最近两个月忙于找工作,投了不少简历,比较牛逼的公司里面就领英和脸书理我了,都是同学朋友内推的功劳。没想到自己也比较争气,一路杀到了最后一轮,拿到了两家的offer。

先上一下小弟超菜的背景:

非CS科班出身,网络相关专业,国内本科,北美硕士加一年零几个月的工作经验,工作之前没有什么大型开源项目经验,学校课程项目也就只有屈指可数的一两个拿的出手。从我之前的博客其实也可以看出来,工作中主要是用Python开发Openstack Neutron的插件。C++,JAVA和Python几乎全靠自学(从本科开始),去Coursera上过一个Algorithm的在线课程,看过几本算法书,仔细看过www.cplusplus.com上的tutorial,刷了三四遍Leetcode,看过CC150。除此之外,偶尔泡泡highscalibility.com看一些系统架构的文章,还在onsite之前抱抱佛脚,狂看了一些脸书的系统设计面试题。

面试过程:

领英和脸书的面试流程都是一样的,一轮电话面试,通过之后就是一轮onsite。由于我现在的工作也是在硅谷,所以我要求把电话面试改成了面对面的面试。这个到底好不好也是智者见智。好处是当面交流比较方便,尤其是像我这样的母语非英语的同学,讲电话容易听不清和紧张。坏处是coding会要写白板,自然比在电脑上敲代码要慢很多,更容易出错。不过想到onsite的时候都是写白板,所以其实也不算太坏,就当提前体验了嘛。

第一轮:

两家的第一轮都是一个小时长度的面试。领英先花一半的时间问了些基础知识和项目相关的问题,最后半小时写了一个coding问题,类似于LRU Cache, Random Queue 之类的题目。需要定义数据结构和实现一些取和放的方法。

脸书的第一轮非常简单暴力,除了稍微聊了一会儿我的经历,直接就是两个coding题目。第一题比较简单,属于LC上面最简单的一类题目。第二题比较难,但是出现频率在脸书的面试中还是比较高的,可惜我之前没有看到。。。要求是用一个每次读4KB内容的方法定义一个类,并在其中实现一个可以读任意长度内容的方法,比如读1个字节,或者读1个GB的字节等。需要读取的长度是第二个方法的输入参数。

领英的第一轮是在一个周五进行的,在胆战心惊的度过一个周末后的周一就收到好消息,可以进入onsite轮啦。脸书的第一轮也是在一个周五,在又一次胆战心惊的度过一个周末之后的周三,收到消息说可以进入下一轮了。于是我再一次非常勇敢地把两家的onsite安排在了相邻的两周的周五。

onsite:

领英的onsite不得不说是非常的变态啊,早上9点半开始一直到晚上5点半才出来,除了中午吃饭一小时,就一直老老实实地呆在同一间小房间里被各种人蹂躏。当然,吃饭的那一个小时也没闲着,有一个比较友善的人一直问我一些相对这一天的问题来说非常“友善”的问题。。。onsite的每一轮都是一个小时,每一轮都有两个人来面,一轮完了马上就是下一轮,可以溜出去上个厕所作唯一的休息。。。所以除开吃饭轮一共是六轮面试,三轮系统设计,两轮coding,一轮行为问题,直接把人往死里轮的节奏。

第一轮一上来是行为问题,把我简历上的边边角角都问的非常仔细,包括我为什么做,怎么做,如果再来一次会怎么改进,将来有什么计划,甚至还来了一个场景题。。。这在以技术见长的公司里面还是比较少见的

第二轮是一个系统设计,上来先问了三个跟图有关的关联度问题的解法,比如如何判断两个人是不是同一个人的好友之类的。然后问复杂度,然后改进,一直改进到两位面试官们满意,这是已经过去好久了。接着又问如何扩展到多个机器,如何划分这个图的信息,等等。乱答之,完全是混过去。事后得知面试官也觉得我这部分答得不太好,但是一开始的解题还是可以的。基于我的经验不够,这样的表现还算是可以谅解。

第三轮吃饭,略。

第四轮coding,LC的原题两题,秒杀咯,到此终于略微舒了一口气,也为下一轮被虐到渣也不剩埋下了伏笔。。。写完之后有稍微讨论了一下复杂度和扩展到多个机器就放我过了。

第五轮系统设计,跟内存有关的一个设计。。。内存。。。不可以用已有的任何STL容器,因为这些容器需要分配多少内存空间是不太确定的,而且分配的内存地址也很可能不连续,所以要自己设计一个用且只用给定大小内存的信息读写系统。。。当然,内存的声明,使用,回收,寻址都要自己来设计啦。。。一上来毫无头绪,面试官大人也不屑于给我提点,只能挤牙膏一般这边挤一点,那边挤一点,顺便观察人家脸色,看到对路就继续往下猜,居然最后也七七八八混了个大概样子出来,不过卡在了寻址那里。面试官大人高抬贵手放我一马,接着问了问同步和锁的问题就算结束了。这里必须感谢国人面试官大哥,虽然我回答的不咋滴,但是他尽量挑我的闪光点说,还是给了一个积极的评价。

第六轮coding,LC的原题两题,继续秒之,找了一点自信回来。

第七轮系统设计,两个面试官里面有一个好像以前是谷歌的大牛,所以一上来就是讨论TCP的滑动窗口。我搜肠刮肚把以前还给老师的知识都一一抢回来才勉强通过,接着有讨论如何用这个滑动窗口实现可靠的多播,最后还问怎么用这玩意儿实现事务一致性。。。又被玩残了。。。

七轮结束之后,我咬着牙用毅力把自己残破的身心拖回了车里,修整了好一会儿才终于攒足了开回家的力气。。。

一周之后的周五我又准时来到了脸书的onsite战场。脸书相比领英好了不少,才四轮45分钟的面试。两轮coding,一轮系统设计,一轮行为问题加简单coding。

第一轮,系统设计,不过这次的设计比较简单,是一个网站系统的设计,讲讲基础架构,搞搞分表,哈希,索引,负载均衡啥的关键字忽悠,然后过一过大致工作流程就算过关啦。还稍微比较了正索引和逆索引的优劣。

第二轮,coding,与LC的原题很类似的一题,不幸的是我想偏了,其实挺简单的,结果花了好长时间,不过最终还是搞出来了。算复杂度也是算不出来,在一顿提醒之后终于是搞了出来。唉,不是科班出身理论方面就是比较弱啊。。。

中间和HR吃饭,略。

第三轮,行为问题,和领英差不多,为啥来脸书,为啥要离开原公司,之前干了啥,有啥比较自豪的项目,等等。最后来了一个coding,实在比较简单,略过。

第四轮,coding,LC的原题两题,外加一个引申题,算是三题,继续秒之。稍微问了下复杂度。

四轮之后,我就神清气爽的回家了。被领英暴虐之后果然被虐能力有了极大的提高,心理素质也好了不少。哦,还有一个因素就是在去脸书onsite之前的一天,领英的HR正好告诉我面试结果比较积极,很有希望拿offer,所以去脸书面试的时候就更加放松了,嘿嘿。

面试小节:

面试心得这个东西每个人都不一样,要说到底是什么因素使一个人能够拿到offer,我觉得也是没有一定答案的。但是其中非常重要的一点肯定是要让面试官爽啊。到不一定是为了让他给自己写个好评啥的,而是毕竟面试官找的是一个将来可能的同事,就算这个被面试的人超级牛逼,但是说话啊动作啊什么的让人很不爽,那面试官也肯定非常不希望和这样的人做同事,对吧?接下来我个人觉得很重要的一点就是基本功了,有时也被称之为感觉或者直觉。在面试的时候通常人都会比较紧张,一紧张就容易出错,平时想得到的东西也会忘记,这个时候基本功扎实就会比较占便宜,跟着感觉走,慢慢可能正确的思路就来了。基本功的还有另一个方面就是写干净正确的代码。虽然我的理论基本功不是很扎实,还好通过不断地练习,coding的基本功还可以,写出来的代码bug比较少,也比较整洁,我觉得这一点也是很关键的。最后就是自信了,哪怕被虐成渣,也要有自信,要抱着“不是爷不行,只是爷在这一块领域不太懂,给爷一些时间,说不定比你还厉害呢”的阿Q精神,千万不能怂了。

大致就是这样了。最后我还是选择了去领英,一来做的东西听上去更NB,二来感觉公司潜力更大,三来给的薪水也多了不少。至于薪水方面,由于我之前是传统软件行业,而领英属于是互联网企业,工资标准提高了不少,算上股票奖金啥的,这一跳几乎涨了70%,真是乐开了花儿。等我去领英正式入职之后再来向大家报告在领英工作是什么样的体验。

onsite的更多相关文章

  1. [tour]2019HUST onsite签到

    先定一个小目标,从签到题开始讲清楚 虽然因为我喜欢签到题的气球导致签到题并没有行使责任.. F.Mesh 和某CF题(我找不到了)完 全 一 致,由于某些玄学原因没有get到(orz谢罪) 给出一个6 ...

  2. Amazon onsite behavior question

    https://www.1point3acres.com/bbs/thread-307462-1-1.html http://kraftshala.com/how-to-raise-the-bar-i ...

  3. jingchi.ai 2017.11.25-26 Onsite面试

    时间:2017.11.25 - 11.26 地点:安徽安庆 来回路费报销,住宿报销. day1: 大哥哥问了我一个实际中他们遇到的问题.有n个点,将点进行分块输出,输出各个块的均值点.具体就是100* ...

  4. Petrozavodsk Summer-2016. Warsaw U Contest, XVI Open Cup Onsite.

    Petrozavodsk Summer-2016. Warsaw U Contest, XVI Open Cup Onsite. Problem A. Gambling Problem B. Colo ...

  5. 【论文笔记】A Survey on Federated Learning: The Journey From Centralized to Distributed On-Site Learning and Beyond(综述)

    A Survey on Federated Learning: The Journey From Centralized to Distributed On-Site Learning and Bey ...

  6. CROC 2016 - Final Round [Private, For Onsite Finalists Only] C. Binary Table FWT

    C. Binary Table 题目连接: http://codeforces.com/problemset/problem/662/C Description You are given a tab ...

  7. codechef [snackdown2017 Onsite Final] AND Graph

    传送门 题解给出了一个很强势的dp: i<K $$dp[i][len]*Fib[len+2-(t[i]==1)] -> dp[i+1][len]$$ $$dp[i][len]*Fib[le ...

  8. codechef [snackdown2017 Onsite Final] Fusing Weapons

    传送门 题目描述 大厨最近迷上了一款勇者斗恶龙的游戏. 游戏每局开始前,会有 N 件武器摆成一圈.每件武器有一个整数的等级.大厨可以选择两件 相邻的等级相同(不妨设同为 A 级)的武器,将它们合成.这 ...

  9. codechef [snackdown2017 Onsite Final] Minimax

    传送门 题目描述 考虑一个 N 行 N 列的网格,行列编号均为 1 ∼ N.每个格子中包含一个整数.记 ri 为第 i 行的最小值,Ci 为第 i 列的最大值.我们称一个网格为好的,当且仅当满足:$$ ...

随机推荐

  1. k8s with flanneld

    三台机器 kmaster 192.168.1.201 kslave202 192.168.1.202 kslave203 192.168.1.203 安装好k8s 1. 在Node机器上安装flann ...

  2. 【 D3.js 进阶系列 — 2.1 】 力学图的事件 + 顶点的固定

    本章讨论在力学图中经常使用到的事件( Event ),然后对[p=555">进阶 - 第 2.0 章]的人物关系图进行改进.使用户可以固定拖拽的对象. 在[入门 - 第 9.2 章]和 ...

  3. 深入理解Android View(转)

    做android其实也有一段时间了,我们每个人都会碰到一些这样或那样的问题,碰到问题了就拼命百度,可是发现,我们解决问题的能力并没有提升很多,所以我才有想总结一下我项目中所用过的相关知识,并了解一下A ...

  4. Python3.2官方文件翻译-工具列表和十进制浮点计算

    8.7 列表工具 许多数据结构需要通过内置列表类型来满足.但,有时候在不同的性能取舍需要选择一个实现. Array模块能提供一个像列表的array对象,它只能存储同类数据而且更加简洁. 接下来样例展示 ...

  5. 基于低压电力采集平台DW710C的基础开发

    实验课题 (1)自己定义通信规约,採用java或C++编写简单的PC端上位机软件,实现採集器与PC机的通信.实验可在DW710C-PCproject下进行. (2)实现LCD显示字符.数字.汉字和简单 ...

  6. Elasticsearch教程

    Elasticsearch教程 摘要: 参考资料Elasticsearch中文参考文档思维导图阅读全文 posted @ 2015-08-05 11:49 xingoo 阅读(18) | 评论 (0) ...

  7. Linux经常使用的命令-权利管理命令-权利管理命令chmod

    指令名字:chmod 命令英语的意图:change the permissions mode of a file 凡路径命令:/bin/chmod 语法:chmod [{ugoa}{+-=}{rwx} ...

  8. Linux互斥和同步应用程序(一):posix线程和线程之间的相互排斥

    [版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet 或 .../gentleliu,文章仅供学习交流.请勿用于商业用途] 有了进程的概念,为何还要使用线程呢? 首先,回 ...

  9. C#中反射的概念及其使用(转)

    提纲:1. 什么是反射2. 命名空间与装配件的关系3. 运行期得到类型信息有什么用4. 如何使用反射获取类型5. 如何根据类型来动态创建对象6. 如何获取方法以及动态调用方法7. 动态创建委托 1.什 ...

  10. centos6.5 x86_64安装oracle 11.2.0.3grid

     centos6.5 x86_64安装oracle 11.2.0.3grid 1.安装前的准备 工作 1.1.配置node1 1.1.1.配置虚拟机并安装centos 安装node1----- 1 ...