阅读 1389

萌新iOS面试官迷你厂第一视角

今年的环境很差,很多大厂继去年的寒冬之后,今年又裁了一波(本地就有两个大厂上了新闻-。-),我有两个哥们也是最近进入了找工作的状态。由于我之前做过一段时间的面试官,负责了一段时间iOS端的技术招聘,他们也咨询了我不少关于这方面的细节,借着这个机会,以一个初级面试官第一视角介绍下招聘方的想法。


其实距离现在已经有段时间了,大几个月前吧,那是在我还在前东家的时候,前东家是一家规模不大的公司,两层的写字楼,百来号人,环境算偏一线吧,但是名气不大,不算好招人。然后有一天,老大突然和我说,再招两个人吧,我们要扩一条产品线,做一个类似迷你版滴滴的新产品。(这是背景)


那时候其实我们组就我一个 iOS 开发,当时已经有一个 App 上架了, 突然扩招两个人其实对我们当时的项目来说,其实算比较大的人力扩充了。没办法,大佬都发话了,硬着头皮上了,扩招的两个人,想招一个高级的比较有经验的,3~5年的,另一个1~3年的就行,如果有比较好的应届生其实也可以,这样,我一个才刚毕业2年的小菜鸡,大概率要遇到一堆经验远比我丰富的人的毒打,压力不可谓不大。


小公司的面试流程一般比较简单,第一轮技术面(就是本弟弟), 第二轮我们老大面进行 (大佬后来去了阿里,所以他这轮也不算很好过),第三轮就是和HR谈钱了,基本上半天搞定。当然,怕有的大佬看到要做笔试题扭头就跑,所以一般是没有笔试题。算法的话一般也不怎么考,一般是确定他淘汰了,才会出一题来劝退。


从我们发出招聘之后,第二天就开始陆续有简历收到了。第一个哥们就是来面高级岗的,接近四年经验,当时拿到简历其实心里有点虚,怕hold不住,所以那天拿到他简历之后,认真地过了一下他写的技术点(>.<)因为一般招人,是面试者写什么我们问什么,我们是要发现面试者会什么,而不是出一些只有我们自己会的很冷门的东西去刁难面试者,那样对面试者其实有点不友好。(招人,不就是想招一个能展示)


第二天那个小哥就来了,我先给他倒了一杯水,其实第一次有点紧张,所以我先让他做一下自我介绍,小哥介绍得特别的简短,三句话概括完。然后我事先有先去看了一下他项目,让他展示一下他做的 App,让他从最擅长的地方上手,问一些比较有技术难度的。老实说,那哥们的项目还可以,但是我问到项目中技术点的实现的时候,他的回答都是使用XXX第三方库,但是并不知道具体实现原理,他的回答都是 “这个很简单,用XXX,一行代码集成搞定“ 之类的,以我当时的面试官视角,感觉他是个比较熟悉API调用的,其他技术细节也不够深入,最后遗憾道别。


以一个普通开发者视角来看,我们平时遇到的需求,也不一定说全部的第三方库都能完美解决,所以我们有时候一些功能不得不自己实现,而如果招一个基本只会用第三方库的同事,想必他很难 hold 得住一个全新的项目。


第一次面试之后,面试起来比较得心应手了,但是这里还是要友情提示一下,HR和面试者约的是几点,面试者在那个时间点提前10分钟到就行,太早到。那时候有个哥们,约的下午1点30面试,11点多就来了,我们是12点到1点30休息,一般我中午是有午休的,那哥们这一来,虽然最后还是1:30面试,但是我一中午没睡,有点伤。还有那哥们的一个操作,也是差点把老夫秀翻,那时候正在面试ing…, 突然他电话响了,他说他接个电话,然后走开离我差不多三米的地方,和对方约第二天下午的面试。。。😆


其实面了三四个的时候,就有一个哥们,很合适了,我使劲浑身解数尽量往深度问,发现他都能答上来,反正技术肯定甩我好几个身位的,然后我也如实和我们老大说了,由他进行二面,但是最终这哥们还是理智地选择了大厂🤣~


小厂招聘有一个劣势,就是比如你钱和大厂一样,甚至稍高一点,别人也大概率会选择大厂,光环在那,但是小厂毕竟资金有限,所以其实有时候就陷入一种境地,要的人他不来,想来的又达不到要求。陆陆续续面了可能半个多月吧,发现如果不降低面试要求,就我们厂应该很难抢到别人要的人了,最后把目标锁定在 => 经验丰富,能干活的就行。


最终有两个哥们入围了决赛圈,如果仅从短暂的面试来看,实力应该差不多,期望薪资有点差距,最终 HR 从经济的角度出发,选择了那个性价比较高的,(当然那哥们那时候的工资也远超过我🥺)但是这里确实有一个很血粼粼的现实问题出现了,当两个人水平相当的时候,确实招聘方从成本角度出发,可能会优先考虑要价低的,所以有时候你面试的时候,对方说几天内给你消息,这时候可能就是在权衡性价比🤣



理想目标

面试官招人要说合格的话,最理想的目标应该是符合以下几个标准:

  • 要基础扎实,头脑灵活聪明的
  • 思维清晰,善于沟通的
  • 和团队风格匹配的
  • 喜欢钻研,对技术有追求的

敲黑板!重点来了

这段时间,看了不下一百分简历,面了也有一二十个人,简历合格的其实不多,这里有几个小小的建议:

  • 简历可以直接用 markdown 格式的

    • 接到过好多word格式的,打开排版全乱了
  • 简历不要写太多,一般 2 页够了,不要从网上抄一大堆 JD,不要有错别字

  • 简历实事求是,别太浮夸

    • 收到过好几个哥们简历 5 年经验,面试表现不如实习生的,感觉水分可能还是有一点
  • 写进简历的,都要对他负责任,做好准备

    • 完全不懂的就不要写
    • 慎用精通!
    • 用技术亮点吸引面试官
  • 要有亮点

    • 大厂背景
    • 名校背景
    • 都没有的话,GitHub && 技术博客很重要
      • (如果想进大厂的话,这个很重要!)
  • 面试前,准备工作要先准备好

    • 把要演示的 App 先安装好,面试官如果要看能直接演示的
      • 遇到过不止一个被问到能否演示的时候,才去 App Store 下载的
    • 如果你是iOS开发,尽量用 iPhone 手机演示
      • 遇到过用安卓手机演示的,说iOS的和这个都一样,有点醉
    • 来之前检查下手机电量
      • 遇到过3%电的,我首页点了没两分钟,直接没电了😹
    • 注意App的版本是否正确
      • 遇到过一个 App 一划就crash的,最后得出的结论,是版本装错了,其实这个bug修复了~ 😹
  • 回答问题简明扼要,挑重点回答

    • 不要问你 who,你回答 how。 问你 where,你回答 when (英语老师饶命😝)
    • 不要回答一大堆毫不相干的,一句话能表述的,说一两百字,但是回答不到重点的
  • 要掌握主动权

    • 从自我介绍开始,挑一些自己比较擅长的领域,引导面试官来问你
    • 如果面试官进入到自己熟悉的领域,由浅入深慢慢引导其继续发问
      • 🌰: KVO -> isa混写 -> 底层原理 ->。。。
    • 如果正好问到知识盲区,虚心请教,让面试官给点提示引导下~
  • 其实面试过没过,面试结束的时候,凭自己的感觉,也能猜到个八分了,如果全程无障碍沟通,对方问的问题也都能答得上七七八八,准备接offer吧兄弟~



面试考点(根据简历由浅入深提问)

初级

  1. copy 和 mutablecopy 的区别
    • NSarry 用 copy 和 mutablecopy 修饰的不同
    • NSMutableArry 用 copy 和 mutablecopy 修饰的不同
  2. 介绍一下 TableView 的代理和数据源方法
    • 讲一下他们的调用顺序
  3. 介绍控制器的声明周期
  4. 介绍下通知,代理 和 block,使用的场景分别是什么
  5. 代理修饰为什么用weak,
    • 扩展:知道什么是循环引用吗
  6. 属性的关键字都有哪些,默认的是哪些
  7. 使用 #import 跟 #include 、@class 的区别是什么,分别在什么情况下使用
    • 扩展:在.h 文件中一般使用哪个,为什么
  8. 原子(atomic)跟非原子(non-atomic)属性有什么区别?
    • atomic一定是线程安全的吗?
  9. 浅复制和深复制的区别? 可以举个🌰吗
  10. category 和 extensions 的区别,在项目中使用过吗
    • category 可以添加属性吗
  11. 了解KVO 和 KVC 吗?
  12. 对于单例的理解
  13. frame和bounds有什么不同
  14. iOS 中的多线程有哪些
    • GCD的一些常用的函数(group,barrier,信号量,线程同步)
  15. 实现数据持久化的几个方案
    • 介绍一下沙盒模型,存储的位置
  16. 用过 UICollectionView 吗?如何实现一个流水布局
    • 一般是根据项目问
  17. 了解 svn, git 等版本控制工具么
    • 如果有写git,可以拓展一下 git 的一些指令问题(merge 和 rebase 区别等等)
    • 分支管理
    • 一次发版的流程
  18. 简述内存分区情况
  19. 队列和栈有什么区别
  20. Http请求了解吗
    • 知道什么是Restful API 吗
    • GET 和 POST 请求的区别
    • 特殊的状态码,比如401、503,201的意义
      • 或者直接问 4XX 是哪端的错误

中级

  1. 讲述类和结构体的区别,了解什么是 isa指针吗
  2. 消息查找的顺序
    • 子类调用父类的对象方法,执行的流程是如何的?
  3. 如何实现消息转发
  4. 给一个nil对象发消息会crash吗
  5. 有使用过分类吗
    • 分类会"覆盖" 原来的方法吗
    • 分类可以添加属性吗,了解关联对象吗
    • 分类的内部结构是什么
  6. 各种Block
    • 有遇到过内存泄漏吗
  • Block的几种类型
    • Block的变量捕捉
  • __block中的 _ forwarding 指针
    • ARC下和MRC下,__block的区别
  1. KVO & KVC 细问

    • 什么是 isa 混写

    • 如何手动触发一个 value 的 KVO

    • KVC修改属性是否会触发KVO

  2. 为什么 delegate 设置为 weak 就不会有循环引用

    • 了解什么是哈希表吗
    • 弱引用表做了什么
  3. 对UITableView有做过什么优化吗

    • UITableView 为什么会卡顿
    • 如何避免卡顿
  4. 最熟悉的第三方库是什么

    • 99.9%是回答 SDWebImage
      • 问一下 SDWebImage 的缓存机制
      • 如果设计一个图片下载框架
      • 引导对方说出 LRU 算法
    • 万一回答 AFNetworking
      • 问下 AFNetworing 有遇到内存泄漏吗
      • 有没有对 AFNetworing 进行二次封装过
      • 有没有对 AFNetworing 中的常驻现场有了解
      • 有办法自己写一个常驻线程吗
    • 如果回答 Masonry
      • 问一些自动布局相关的
      • 两个label相互挤压拉伸的
      • 让几个控件平等均匀分布的
      • 原生的autolayout了解吗
  5. RunLoop (除非对方有写,不然不建议问!!)

    • 介绍下主线程的 RunLoop

    • RunLoop有几种mode

    • 为什么 ScrollView 滚动的时候图片轮播器会停止

      • 如果面试者项目中有这个情况
  6. 内存管理可以问一问(如果他有写)

    • 定时器target的内存泄漏
    • autorelease的原理
    • weak 和 assign 的原理
    • 引用计数器的存储

高级

没有😹(本人水平有限,距离高级距离太远,就不嫌丑了)



闲聊

沟通能力,理解能力其实都算软实力,在面试过程中如果对面试官的问题理解不过来的,可以多和面试官多沟通,一定要等真正get到考点的时候再答,不要乱答一气。(其实很多题目就是让你回答不上来的,面试官有时候并不是真的要考你某个很深的知识点,是想看你思维能力,能否在他引导之下给出他想要的答案,哪怕是错的,有很多时候其实也过了~)

有没有开源精神其实在面试中也是很加分的。不过确实很多面试者没有写博客的习惯,也不少人不了解 GitHub 是啥。如果是大厂,对这方面要求会比较高,然后问下

当然和team风格是否合拍也特别重要,如果你在面试过程中觉得特别不舒服,一般这个团队就不适合你,毕竟面试也算双向选择(虽然企业相对来说处于领先的位置)。

老实说,一个人面试者过来合不合适,聊个5~10分钟其实在面试官心里就能看个七七八八了。一个人还没来面试前,从他的简历上其实也很多时候能看个五五六六了😹,所以简历和第一印象真的非常重要哈~

总的来说,今年的大环境确实不太好,但是还是希望大家可以找到一个心仪的工作~


打个广告,如果是厦门地区的,有打算换工作的,Ringcentral了解一下,955榜上有名的,简历可以发我内推,成功之后请你吃大餐😹 (2020年Q1前能入职的,送air pod pro!!)