320bd609953b62201f2a637de6d61fc3
硬币的两面——国内企业与外企的面试经验

引言

由于一线城市生活成本居高不下,不少 iOS 同行都已经调转枪头物色国外的公司了。

本文的标题为硬币的两面,代表着国内和国外公司面试时的侧重点是不一样的。那么对于 iOS 开发者来说,国内公司的面试和外企的面试究竟有什么区别呢?如何准备国内公司/外企的面试呢?有没有什么推荐的复习资料呢?

就今年春季,笔者分别面了几家国内公司以及一家外企,就此谈一下感受,也希望能给读者一定的收获。

正文

国内的面试

国内公司的面试,尤其是大厂,有一定的套路。今年春天最有代表性的就是今日头条了,笔者这次也面了一下头条,认为头条的面试是非常典型的国内大厂面试,可以拿来当做例子。

头条今年普遍开出了很高的薪水,吸引了身边大批优秀的工程师。头条在简历筛选上门槛较高,面试难度也属于中等偏上,但走的仍然是国内大厂典型的面试套路,因此对于大多数掌握了套路的同学来说并不难。

算法

头条的算法属于《剑指offer》的难度,笔者面到的两个算法题,一题为书中原题,一题为其变种。想要准备算法的同学可以仔细看看这本书,考到原题确保能写出来。对于变种的题目就只能临场发挥了,基本没法准备。

由于需要白纸写代码,Objective-C 的 API 太长不容易写出来,因此建议 iOS 的同学复习一下C语言基础库,如 stdio、string 等。基本常用的功能在基础库中都有,API 也很短,容易记住。避免出现下不了笔的情况。

推荐复习书籍:《剑指offer》

操作系统

考察的也是一些常规问题,如线程与进程的概念、通信。内存区域,可执行文件结构,静态链接动态链接等。

推荐复习书籍:《程序员的自我修养》

网络

网络方面考察的也比较常规,HTTP 握手、HTTPS 相关问题等。

网络方面问题需要真正理解网络模型,而不是背书。由于网络模型的复杂性,很多方面的问题可以一直一直深入往下问。在看书时候想想根据这个模型,在各个环节如果出现意料之外的事后会发生什么。面试通常会考察某些特殊情况下网络模型会如何应对。

推荐复习书籍:《图解HTTP》、《图解TCP/IP》

iOS 基础

iOS 基础中,runloop、runtime、autorelease、block、KVO、GCD 等基础是必须要准备的,也请务必完全理解模型,最好深入到实现。面试非常喜欢问某些环节发生意料之外的情况时会发生什么,如果没有理解模型是回答不出来的。

《Objective-C 高级编程》是我每次面试前都会复习的书,书中一共三章,分别把引用计数、block、GCD 讲清楚了,强烈推荐。不过有一点需要注意的是,书中的内容由于是拿 XNU 源码讲的,部分内容和现在 iOS 的实现有出入。

另一方面就是事件传递链、渲染、动画等一些顶层的内容。已经有很多文章讲这方面了,笔者就不再扩展了。

推荐复习书籍:《Objective-C 高级编程》

其他

笔者的一面过程中有个小插曲,面试官丢给我一个 Crash 日志让我找问题。发现是比较刁钻的 0x8BADF00D Crash(ate bad food),这是一个由看门狗引起 Crash,常见于主线 block 或死锁的情况。对于没有见过这个 Crash 的同学来说当场回答出问题是比较困难的。这个问题有点不按套路。

剩下的就是项目相关的问题以及职业规划了,这些就不再举例了。

小结

头条的面试总体还是非常典型的国内大厂的面试。

算法方面并不会考太难,操作系统基础方面也比较常规,侧重的是网络、iOS 基础以及对 iOS 上各个组件的模型原理。

那么,该如何准备国内企业的面试呢?

  • 计算机基础准备一下常用的技术,如进程间通信等。
  • 深入理解网络模型,清楚各环节出问题时会发生什么。
  • 准备一下《剑指offer》这种 Level 的算法。
top Created with Sketch.