FB onsite过经

脸书的面试体验一级棒, hr也是基本最有效率的(跟google差不多, 至少当天回邮件), 但是谈起包裹来 套路也很多啊 呵呵…

总体感觉脸书的面试题不难, 经典题比较多, 但要求快, 准(少出错), 一般coding轮会问两道 所以抓紧时间

第一轮, 没想到上来就是system design 有点懵. new grad master面试应该没有, phd会有一轮
小哥应该是instagram组的, 问的是如何implement一个实时显示评论的feature. 比如你盯着一个photo看, 要是别人有新评论, 直接会显示出来, 你不用刷新.
我就说我也没design过这玩意, 但感觉挺像fb massenger, 实时聊天呗.
先扯了一下pull and push model, 可以隔一段时间request更新啊, 也可以用socket啊. 考官问了分别的优缺点, 然后让选一种implement
我当时选的pull, 就按思路说了说数据库要读写分离啊, 用cache提高速度啊. 考官应该具体做过这个, 所以问的比较细. 比如那master slave 读写数据库可能有consistent的问题怎么半, 还有cache的eviction policy是什么. 问得挺细的

system design面的懵懵的, 回去的飞机上还给面试官发了一封邮件, 把push方法也简单说了一下… (当然也说了理解这个面试已经结束了, 只是感觉这个很有意思…). 不知道有没有用, 但感觉要是再面一次, 不会干这事了, 万一邮件里有错误, 本来考官面试记忆不深刻了, 这写review前你给提了个醒, 会有副作用.

第二轮 coding
第一题不难 比如一个string “1232” 和target int 12, 问给每个digit前加+, -, 或者不加, 把所用能构成target的expression 打出来, 比如 1 2 * 32 等等
我答得有点细, 答完就剩15分钟了, 考官又问了一个题, 说答不完讲讲思路也行
直接来个hard… read 4, read n那道题. (改了一下变成read4096, read n, 其实一样的)
虽然前天刚做了, 装不懂, clarify一下细节之后, 先写了suedo code, 然后具体写了python code
15分钟搞定, 谦虚一下, “不好意思 时间紧 答得不好”. 考官大笑, “no no no 答得非常好”

午饭 国人妹子, 聊的挺开心, 谈谈加州房价, fb压力啥的. 午饭应该不在考察之内, 开心聊 开心吃

第三轮 bq
infra大佬, 说自己的open source project 中国一些公司比如baidu didi 都在用. 面完一查, 尼玛 distinguished software engineer…
大佬特别认真, 来之前已经在我简历后面写了20多个题. 不过都挺常规的, 不具体说了. 什么为什么读phd啊, 怎么处理跟老板同事conflict啊, 为什么来fb啊, …了解一下fb文化, 凸显自己积极进取. 他们文化是啥来着, move fast and be bold 好像. bq会有问你遇到一个没头绪的问题怎么处理. 你就别答成仔细考虑, 不想全面不动手…

第四轮 coding
国人妹子, 感觉是给我两个简单题, 也有hint
第一个 binary tree max path sum (可以拐歪那种, 没刷到的话就别问了, 好好刷吧, 应该前300),
第二题 感觉做过, 有点手生, 花了点时间.
是个有向图, 给了你其中一个node, 每个node代表一个char, 而且有parent, 有children, 比如

a              h
\           /
  b - e -g
/           \
c              m

没法表示箭头, 说一下, a->b, c->b, g->h, g->m, b->e, e->g
有些node可以合并, 变成(beg合并成一个node)

a        h
\     /
  beg
/     \
c       m

没法表示箭头, 说一下, a->beg, c->beg, beg->h, beg->m
应该是要自己找规律发现什么样的node可以合并. 我想的是tranverse一下, 如果当前node只有(且有)一个parent, 并且这个parent只有且有当前node这一个child, 就可以合并. 合并过程(把当前node的char加到parent node里, 当前node的chidlren都成了parent的children, 这些children的parent也变成了parent node, 类似于double link list remove node的过程).
最后return 一个合并好的图的任意node

最后hr说面的很好, 感觉直接给了一个别人要negotiate一两轮之后的包裹. 最后应该是去fb了