脸书iOS面经

背景:美国不知名大学气象博士+1年微型Startup做iOS开发+2年家庭煮夫(等待工卡)

猎头电面:先聊了下简历。然后问我选择swift还是objective-c,我选了swift。接着问了5个iOS和Swift常识问题,论坛上和Glassdoor上可以找到。让我选择算法电面还是take home project。我选择了take home project。猎头开玩笑强调不要以为做了project可以躲过去算法面试,我说我只是觉得做project可以得到些有用的反馈。
Take home project:给个Json文件,里面有一些events,每个event有标题,开始时间,结束时间。做个简单App读取Json显示events列表,列表需按events开始时间排序,并标明其中哪些event和其它events有时间冲突。需要详细解释为何选择采用的算法和时空复杂度。三天内完成。提交后第二天会有脸书engineer打电话过来讨论。

Take home project follow-up call:脸书engineer一上来先自我介绍,然后让我详细说一下我做这个project的思路。之后让我问问题。猎头效率很高,很快拿到反馈和我约了3个星期之后面试。

Onsite:一共4轮
1)Behavior+算法:白人小哥, 用时大概1个小时。大部分时间在问工作经历, 比如最自豪的工作,遇到的challenge,conflict之类的,要说详细。剩下15分钟左右出了个算法题,找出两个view的最近common parent view。
2)系统设计:印裔美国人小哥,设计一个Photo sharing App。主要页面有Follow的Album列表和每个Album里的photo列表。Photo下面可以点赞。需要考虑Offline情景。我首先说我会采用Coordinator+MVVM的App架构,详细说了这个架构的好处。然后我接着说User,Album, Photo这几个核心models。然后重点说了下Cache的设计,比如要有Memory cache和Disk cache,要把Data models的Cache和图片的Cache分开,图片的Cache也要按Size分开(thumbnail和大图),以减少Cache contention,然后估算了thumbnail和大图的bytes,估算分配多少Memory Cache和Disk Cache比较合理。如果Offline,需要用Queue来保存requests,等online之后再按顺序发送。然后又说到列表显示要用pagination, pagination的cursor用什么。然后又开始说怎么提高App的performance,比如尽量让第一个页面快速启动,显示图片用GCD,取消不再需要的diaptchWorkItem之类的。总之就是不要停,把你知道的用过的都扯上。我差不多说了45分钟,然后有10分钟问面试官问题。
3)iOS+算法:白人小哥,

补充内容 (2018-11-7 07:24):
这论坛不能编辑自己发的帖子??

两轮面完后到午饭时间,和一个ABC小哥吃了印度饭和冰激凌。

3)iOS+算法:白人小哥,大概45分钟。先问了我iOS里components之间通信/解耦的办法,就是delegate,block,notification center,KVC/KVO这几个,要细说一下各自的适用场景和使用时的注意事项。然后出了一个很简单的题,给一个数组代表楼的高度,假设右边是大海,输出能看到海的楼的index。第二个题是假设你的app里有一个feed页面,这个页面刷新时要从服务器得到了新的feeds(包括新发布的feeds和更新过的feeds),要你把这个新feeds和老的feeds合起来。主要考察如何O(N)时间把更新过的feeds从老feeds里删除掉(否则就重复了)。然后就是问面试官问题。

4)iOS+算法:印度大哥和疑似ABC妹子,45分钟。先问了iOS如何管理内存。然后出了第一题,给一个排过序的数组,把里面的重复数字移到数组尾部,然后输出没有重复数字部分的长度。第二个题,给一个matrix,打印从左上角到右下角的所有路径。推导时间复杂度。然后就是问面试官问题。

这几个算法题都不难,感觉面试官主要考察解题思路的建立过程,如何测试,还有交流是否顺畅。
整个面试流程中猎头从头至尾响应很快效率很高,面试官不管是白人,印度人还是ABC都是热情谦和,onsite结束后就想如果以后能来这工作真是太爽了!

差不多一周后拿到offer,猎头说本来是按E4给,hiring manager感觉面试反馈不错就给提到了E5. 兴奋了没几天就开始焦虑了,感觉我这水平E5扛不下,尽人事听天命吧。马上Bootcamp要开始了,希望能match到个好team!

补充内容 (2018-11-7 13:17):
刚想起来,第四轮打印路径的算法题中,路径只能往右或往下,往右打印“R”,往左打印“D”。

补充内容 (2018-11-10 02:26):
刚想起来,Facebook的技术博客里很强调immutable data models,所以我在系统设计轮强调了data models都用struct而不是class,这样可以利用immutability帮助保证thread safety,在需要data consistency的页面可以…

补充内容 (2018-11-10 02:26):
在需要data consistency的页面可以用基于notification center的consistency manager来更新页面显示的数据。总之,Facebook的技术博客非常有用,对面他们的系统设计帮助很大!另外Pinterest和linkedin的也不错。

同做iOS,看了楼主系统设计这一轮的描述终于明白为啥自己Facebook怎么面都是个低端E4了…楼主厉害!
哀兵必胜,拿出钻研面试的劲头FB E5肯定的活儿肯定没问题。

多谢多谢!很有帮助!

太强了楼主。。一年的经验直接到e5。。强强强。膜一个

基本一句看不懂,但是就觉得楼主好厉害啊啊啊!!!!

哪里找的猎头?

lz牛人,大赞~多谢分享

多谢多谢 很有帮助!!

两轮面完后到午饭时间,和一个ABC小哥吃了印度饭和冰激凌。

3)iOS+算法:白人小哥,大概45分钟。先问了我iOS里components之间通信/解耦的办法,就是delegate,block,notification center,KVC/KVO这几个,要细说一下各自的适用场景和使用时的注意事项。然后出了一个很简单的题,给一个数组代表楼的高度,假设右边是大海,输出能看到海的楼的index。第二个题是假设你的app里有一个feed页面,这个页面刷新时要从服务器得到了新的feeds(包括新发布的feeds和更新过的feeds),要你把这个新feeds和老的feeds合起来。主要考察如何O(N)时间把更新过的feeds从老feeds里删除掉(否则就重复了)。然后就是问面试官问题。

4)iOS+算法:印度大哥和疑似ABC妹子,45分钟。先问了iOS如何管理内存。然后出了第一题,给一个排过序的数组,把里面的重复数字移到数组尾部,然后输出没有重复数字部分的长度。第二个题,给一个matrix,打印从左上角到右下角的所有路径。推导时间复杂度。然后就是问面试官问题。

这几个算法题都不难,感觉面试官主要考察解题思路的建立过程,如何测试,还有交流是否顺畅。
整个面试流程中猎头从头至尾响应很快效率很高,面试官不管是白人,印度人还是ABC都是热情谦和,onsite结束后就想如果以后能来这工作真是太爽了!

差不多一周后拿到offer,猎头说本来是按E4给,hiring manager感觉面试反馈不错就给提到了E5. 兴奋了没几天就开始焦虑了,感觉我这水平E5扛不下,尽人事听天命吧。马上Bootcamp要开始了,希望能match到个好team!

请问 算法都是什么level的呢?可以把题目说一下吗?

都是LinkedIn上猎头联系我的,我LinkedIn开通了premium账户。

人品大爆发,面试遇到了对的人对的题,真实水平实在有限。我看Blind上晒出的e5基本上都是5年以上经验,真是担心进去后达不到预期被认定为水货。