注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号
x
大概说一下自己准备facebook的coding和system design的心得吧,希望对大家有一点帮助。面经在最后。
整体来说,facebook真的是考原题比较多,所以刷题很有必要。大家记得多和面试官交流,能够快速秒题目固然好,但是就算不能秒,他们也会认真评价你的thinking process。看到很多人论坛上说facebook每一轮必须做两题才行,但是我有一轮只做了一道题目,有一轮没写完第二道题目,但是feedback好像没有怎么影响。所以秒两个题目应该不是拿offer的必要条件。不管写什么代码,一定得跟着面试官的思路走,就算真想argue也要有道理,不然他们会觉得你不好相处。面试真的不是只看coding的,交流真的很重要,一定让他们觉得你很自信也很好相处。代码写的要简洁,刷题的时候多注意一下,不确定怎么写简洁的话可以多看看discussion学习别人的代码。
大家也请参考楼主的另外一个帖子哦,里面总结了三个月的所有面经,同时大家记得刷LeetCode的facebook tag下的高频题。
帖子传送门 https://www.1point3acres.com/bbs ... ewthread&tid=455624
再啰嗦一下system design。我感觉我遇到的面试官很专业,他就是想看你的思路、对常用系统和技术以及对各个tradeoff的理解。首先比如我说我想用HBase, 他就会装作不知道什么是HBase,然后问为什么用它?(small read/write requests + sstable for buffering + column family)?具体column family是什么意思,怎么设计具体的column family的scheme?再后来我说用consistent hashing做sharding,他就会让我解释什么是consistent hashing, 就当做他是个freshman。
其次楼主本身做system方向的研究,愚以为system的一大核心就是怎么样做tradeoff,所以很多时候都要考虑你要牺牲什么,来优化什么。比如牺牲点storage来减少latency,牺牲consistency来提高Availability。让面试官理解你的tradeoff很重要,不然他完全不知道你为什么这么做,或者他虽然知道但是你没有提出来,他就会觉得你logical thinking很差。如果他提问你为什么这么做,你一定得给出很充分的理由,不然他可能会觉得你根本没有真正理解其中的design principle,或者觉得和你交流有问题。怎么回答别人的问题是一个经验活,每个人提问之前其实都是有一个前提和假设的(assumption)。有些人会说这个假设,但是有些人不会说这个假设。最好的情况就是你得明白他做了什么假设,为什么他会做这个假设,然后你才能给出一两句就解决他的问题的答案。最坏的情况是你之前的解释让他做了错误的假设。所以多多理解他的问题吧,或者直接问问你是不是做了XXX假设所以才这么问的?
Grokking the system design里面的题目讲解其实很详细,大家可以买一下那个课,虽然详细到有点啰嗦。。。不过它帮我回忆起来了很多细节,不然这么多年了,我哪记得很久之前读的Big table/HBase/Cassendra的paper里面的设计细节是啥。面试时候我也不会一下想到用这三个系统的里面的一个做messenger的存储系统。
以下是面经
这周一告诉我周二hiring committee开会,然后周二下午发邮件暗示了一下讨论结果。最后今天(周三)下午打电话告诉正式结果。
大家觉得有用的话就加点米哈~最近在整理公司的薪资的表格,需要大量大米看帖子,整理好回头也分享给大家。谢谢。
补充内容 (2018-11-8 11:11):
大家看grokking的时候记得准备一个模板。想好白板上哪一块写Feature/use case,哪一块写API和data schema, 哪一块架构图之类的,包括架构图里面的各个部分的示意图(比如storage/LB/caching)。这些都是套路 |