ShannonChenCHN/iOSDevLevelingUp

Daily Questions

ShannonChenCHN opened this issue · 10 comments

面试前必读

面试问题汇总

2020~2021年 iOS 面经

简书面试总结

一面(技术面+HR 面)

时间:2017.10.19

这是 1 年多来第一次出去面试,准备的也比较仓促。
下午过去面试的时候,经过他们的办公区,坐了大约 50 来人,但是很安静,可能正好是午休时间吧。

面试官的是他们的 2 个 iOS 开发(简书的 iOS 客户端就是他们俩负责开发和维护的),技术面时 HR 也在场旁听。

技术面试环节

项目经历

  • 图文快照部分

    回顾:大概讲了下功能和主要实现逻辑,其实答的不是很好,没有先理清楚再讲,最关键的地方也没讲到,里面既涉及到各个技术细节和优化点,还有架构方面的设计。面试官问的也不是很多,然后马上就换另外一个问题了。
    总结:下次一定要自己提前模拟一下。包括主要逻辑、涉及的技术点、架构设计,自己比较了解的、自己觉得做得比较好的、而且比较有价值的地方可以突出一下

  • JS Bridge 的应用

    回顾:面试官问的是对 WebViewJavaScriptBridge 的原理是否有了解,有些地方不太记得了,但因为自己仔细读过源码,所以按照大概思路讲了一下,回答的还算可以。然后还问了“除了 JS Bridge 这种方式,还有什么别的方式可以实现 JS 和 Native 的通信?” 我回答说还可以通过借助 JavaScriptCore 来实现,他补充了一下 WKWebView 中系统提供了 WKScriptMessageHandler 协议和 WKUserContentController 类可以实现,我补充了一下这个只能在 iOS 8.0 以上才能使用
    总结:WebViewJavaScriptBridge 的源码都看过了,但还是有些地方记得不太清了,导致讲的时候断断续续,主要原因还是在于面试前没有复习过。

  • 会员页的架构优化(POP、tableView、网络层的改进)

    回顾:面试官就问了下 POP (Protocol Oriented Programming)是什么,然后问对会员页的列表框架做了什么改进,网络层怎么优化的。我大概讲了一下我是怎么做的,然后他们也没追问什么。
    总结:对于这块,我还是比较有信心的,因为之前花了不少功夫去想、去调研并实践过的,但是每次一讲话就紧张,感觉讲的也比较急,应该也是因为没有预先演习过的原因,所以一讲起来就找不到节奏。

  • URL Routes

    回顾:只是简单地讲了下怎么用 JLRoute 框架,怎么定协议规则,实际上究竟怎么去设计路由还没搞明白
    总结:这部分的技术自己当时也只是简单用了一下,具体也没研究过,也没做过优化,其实应该要么不写,要么面试前自己花时间研究一下

  • AOP 埋点

    回顾:大概简单说了下 Aspects 中用到的 runtime 知识,面试官追问了一下是否读过 Aspects 的源码,但我并没有仔细读过,细节都不太知道
    总结:这部分也是没有做好准备,把自己的亮点或者研究说出来

  • UIWebView 中加载 WebP 图片

    回顾:大概讲了下实现的思路,基本上还是讲明白了,但是由于时间隔的比较旧了,所以最后提到的图片解码那部分没说清楚
    总结:同样是缺乏准备,所以讲起来不够丰富,不够透彻,另外对于图片处理这方面还是没有理解透,接口返回的图片数据是二进制数据,图片解码后的数据也应该是二进制数据

技术点

  • copy 和 mutableCopy

    回顾:这方面由于之前也没复习到,所以也不太理解,凭感觉说的,答得比较乱
    总结:复习,复习,复习,而且要理解,不然很快就忘了

  • 属性关键字有哪些,什么时候用?

    回顾:这部分基本上都答上来了
    总结:其实还可以研究的更底层些

  • block 相关

    回顾:面试官问了两个问题,一个是 block 属性的关键字为什么是 copy,另一个是 block 为什么不能直接修改捕获进来的变量的值。第一个问题答得还行,第二个问题答错了
    总结:还是需要复习+理解,block 几乎是面试必问

  • 是否了解过安全相关的问题

    回顾:我大概提了下接口加密,其他的也没做过
    总结:这个问题其实算是开放性的问题,自己如果平时了解的比较广泛的话,可以好好讲一讲的

收获/总结:

  • 面试并没有想象中的那么难,也没有那么简单
  • 项目经历里的【闪光点】很重要,也就是可以拿出来吹牛逼的东西
  • 平时要注意锻炼表达沟通能力
  • 平时一定要定期总结回顾、评估自己做的怎么样,平时遇到的比较重要的知识、源码,一定要去理解其原理
  • 面试前一定要复习好,做好简历上每个问题被追问的准备
  • 面试前最好提前做好准备,比如带上笔、模拟自我介绍、在手机上下载好要演示的 APP
  • 讲话做事不要太慌张,不要急躁,面试时连连字都写不好
  • 面试时,要学会去把控节奏,有意识地把面试官引导到自己擅长的地方
  • 后来我自己问了个不太好的问题——“你们 APP 中哪里用了 web view?我怎么没发现?”,他们告诉我在文章详情等不少页面都用到了,我感觉这是自己给自己减分。以后还是多注意下别人家的 APP 怎么实现的,至少面试前要去了解。

二面(CTO 技术面)

时间:2017.10.23

他们的 CTO 叫 Larry,是简书的联合创始人。我是晚上 7 点赶过去的,过去时看到他们公司的人几乎都走了,看来还真是不加班😀

CTO 问了我几个问题:

  • 最近的项目中做了些什么

    回顾:我大概讲了下最近做的会员页、Hybrid 优化和快照功能,他接着问了一下 web view 这方面的问题,中间也穿插了一些随机的问题
    总结:感觉自己没有说出什么两点来,仅仅是你问我答的状态

  • 刚开始做 iOS 开发工作时,是怎么上手的?

    回顾:一开始改小bug,然后是做一些专题首页,UIWebView 加载 WebP 图片,两个 APP 共享同一设备 ID 这些
    总结:正常回答就行了把

  • 曾经遇到过什么线上 bug?

    回顾:我大概讲了一下去年做 UIWebView 加载 WebP 图片时没清缓存的问题,后来他也提到这样的问题的确很难被发现,即便是专业的 QA
    总结:我也不知道到底怎么答才算好

  • 如何保证程序的质量?

    回顾:我简单说了一下,首先是仔细阅读文档、用正确的方式去实现,然后是代码要规范,最后是单元测试。这个我其实也没有提前准备,算是临场发挥了。我自己感觉还行,但是从他的表情来看,并不是很对味
    总结:这种问题主要还是靠平时的工作积累和自我要求了

  • Code Review

    回顾:他问我们团队现在做 Code Review 吗?我说看情况,不忙的时候就会做
    总结:如实回答应该就行了吧

  • 除了 iOS 之外,还实践过其他技术吗?

    回顾:我先问了一下他是指在工作中用的吗,他说是的,我就说曾经在 CI 中加过一段 sed 的脚本
    总结:其实我应该不要给自己加限制的,可以讲讲自己学过 React Native,JS/HTML/CSS 。另一方面,自己也确实需要学点其他领域的技术了,比如 h5、后端、Python 爬虫等等。

我问了他几个问题,其中印象比较深的一个问题是:
优秀的程序员应该是什么样的?
Larry 的回答是:

  • 核心/能力
    • 架构
    • 语言
    • 基础知识:数据结构、算法
  • 工作要求
    • 超出预期
    • 解决问题
    • 踏实,持续稳定,专业素养

总结、收获

  • 提前准备,做好模拟演习
  • 要有自信去展现现自己的能力,而不是表现得像个小白

腾讯全民 K 歌面试总结

时间:2017.11.02

JD:

  • 要求精通Objective-C,熟悉iOS平台并有良好的软件开发经验,基础扎实;
  • 熟悉https及流媒体上传下载协议,精通TCP/IP协议;
  • 熟悉音频/视频的编解码;
  • 有音视频直播相关经验者优先;
  • 良好的编码风格,以及足够的调试技术

由于投的是深圳那边的岗位,所以一面是电话面的,结果不出意料地一面就挂了。

自我介绍

一开始就是自我介绍,一开始介绍自己大学毕业后巴拉巴拉,结果被面试官直接打断了,说可以直接说重点😅

自我介绍,前面讲了一些废话,应该尽量压缩

项目经历

  • UIWebView 加载 WebP 图片,WKWebView 中可以实现吗?怎么实现?

    回顾:先大概说了下我当时是怎么实现的,然后提了一下 WKWebView 可以通过调用私有 API 来实现,具体哪个 API 我记不清了,反正也是注册 protocol 来拦截的
    总结:其实面试前应该自己先过一遍的,争取答得更有逻辑性,有亮点才行,比如当时遇到对的最大的难点是什么(好像是 UIWebView 的缓存问题),原理上的理解,WKWebView 的了解

  • 说说你是如何解决跑马灯导致机身发热这个问题的?

    回顾:其实这是给自己挖了个坑,因为自己对 profile 工具算不上熟悉,只是用过,我当时就说了下自己解决问题的一个大概过程:同事反映机身发热现象->定位触发场景->发现跟导航栏有关->用 profile 工具找出是哪个函数调用过多地占用了 cpu
    总结:思路基本上是讲出来了,但是也还是没讲出闪光点来,比如说说自己对 profile 工具的了解,机身发热和 cpu 有什么关系,为什么会出现这个问题,以后如何避免等等

  • 你是如何解决 UIWebView 加载 h5 出现崩溃的问题的

    回顾:大概说一下背景,因为只在 iOS 8.3 的系统上出现了奔溃,所以只针对该版本做了特殊处理——使用WKWebView,但是具体原因是什么,不清楚
    总结:这里同样是给自己挖了一个坑,因为都是凭记忆说了自己怎么做的,没有证明出来自己的亮点(牛逼之处)在哪里,还有些原理也没讲出来,做技术的就是要刨根问底,比如,为什么在 iOS 8.3 的系统上会奔溃, WKWebView 比 UIWebView 好在哪里

技术点

  • 做过比较难的问题吗?

    回顾:说了两点,一是 UIWebView 中针对 WebP 图片加载的处理,另一个是关于视频聊天功能的,给融云 SDK 添加自定义滤镜,谁知道这其实是自己给自己挖了个大坑

    总结:以后碰到这种问题,一定要提前做好功课,这种问题几乎是必问的,而且是开放式的,考察的就是解决难题的能力,更是展示自我的机会,所以要讲的话就讲的漂亮些,讲一些自己真正得意的经历,没啥亮点可讲的就不要给自己挖坑了。
    什么样的事情算是难得呢?难题就是你和你身边的人,都不是一下解决得了的问题,还以可能是因为以前就一直没人能解决的遗留问题。回顾一下我自己的一些经历,最难的有:
    - 美囤妈妈商品详情页 UIWebView 中加载 WebP 图片 ⭐️⭐️⭐️⭐️
    - 美囤妈妈专场详情页头图(UIWebView)的高度问题 ⭐️⭐️
    - 美囤妈妈 UIWebView 中加载全球购首页(h5)崩溃的问题⭐️⭐️
    - 美囤妈妈新版首页框架的实现 ⭐️⭐️⭐️
    - OnlyU 网络层的设计 ⭐️⭐️⭐️
    - OnlyU 第一版首页动效的设计(半成品)⭐️⭐️⭐️⭐️
    - OnlyU 视频聊天匹配逻辑的调试 ⭐️⭐️
    - OnlyU 视频聊天滤镜处理(半成品) ⭐️⭐️⭐️⭐️⭐️
    - YHOUSE 中 Hybrid 架构优化 ⭐️⭐️⭐️

  • (接上个问题)说说你是怎么实现视频聊天功能,给融云 SDK 添加自定义滤镜的?

    回顾:凭借记忆大概讲了下 yuv420 转 RGB 的过程,流程是讲明白了,但是原理还是云里雾里的,因为当时是在老司机的帮助下才弄出来的
    总结:这种自己不太明白的,其实也可以不引出来,不然就是在给自己挖坑

  • (接上个问题)在做添加滤镜功能时,格式转来转去的,估计效率会比较低,很耗性能,所以你有没有做过什么优化,优化的思路是什么?

    回顾:我一开始说,因为项目后来不做了,所以这个功能也就没再继续开发了,然后面试官直接说,“不管后面项目如何,我就问问你自己如果去做优化的话,该怎么做呢”,我只能说,我也不知道咯┑( ̄Д  ̄)┍
    总结:这个问题一方面是考察我对视频处理的了解,另一方面看面试者在平时开发中有没有做过或者去想过性能优化方面的问题

  • 你用过什么调试命令?平时断点是怎么用的?(Xcode 调试工具的使用)

    回顾:我只记得 po 命令和 expression 命令,断点的话就讲了下我自己用过的条件断点和 symbolic breakpoint
    总结:这其实是考察面试者平时对开发工具的了解,换句话说就看你专不专业了,越是了解开发工具就月有效率

  • Objective-C 内存管理机制

    回顾:我凭记忆说了一下 《Objective-C 高级编程》书上说的那几点
    总结:这个纯粹是送分题啊,但是好像说错了,凭记忆是不管用的啊,还是得提前做好准备啊

  • ARC 和非 ARC 的区别

    回顾:我说的是 ARC 下,编译器会在编译时自动插入 retain、release 这些语句,结果面试官说就只有这些吗?。。。。
    总结:这种问题我真是不太了解,还是书读得少啊😂

  • autorelease 的实现了解吗,看过相关的 oc 源码吗?

    回顾:我只能说不知道了。。。。。我说我只看过 GNUStep 的源码,结果被面试官反问道,“为什么放着苹果的源码不看,而去看别的源码呢”,不过我确实是没看过苹果的源码😂
    总结:以后还是花些功夫研究些底层实现吧。。。

  • 从底层讲讲系统中两条线程抢占资源的问题

    回顾:我哪懂什么底层啊,所以我直接说不知道了,面试官就跟我说,“你可以简单说说你自己的理解啊”,然后就跟他扯了在同一个窗口买火车票的问题,结果不出意料地又被鄙视了😂
    总结:还是准备的不够啊,基础知识也了解的不够,多少也要说些有料的东西来啊,以后还是要自己补补课了

  • (接上个问题)iOS 中提供了哪些方案可以解决这个问题

    回顾:我列举了一下 NSLock、GCD、@sychronize,面试官接着问 @sychronize 是怎么实现的,知道吗?我直接一脸懵逼。。。。。
    总结:其实跟前面是一样的 problem -->基础知识欠缺了解+底层原理欠缺了解+复习不到位

收获与总结:

  • 自己的 iOS 基础不扎实
  • 对计算机基础知识欠缺了解
  • 面试前一定要做好充分准备,该刷的题一定要刷
  • 简历上写的项目经历一定要非常熟悉,非常深入
  • 写的每一条都要做好被追问的准备
  • 不太了解的、没有深入研究过的,最好不要主动提出来,一旦被考官抓住,一问起答不上来,肯定会扣分的
  • 平时尝试做一些难的,深的
  • 刨根问底的精神
  • 读第三方库源码、读 Apple 开源代码

TutorABC 面试总结

一面

时间:2018.01.11

  1. 自我介绍

  2. 技术问题

  • block 属性的写法(白板面试),关键字为什么不用 assign
  • tableView cell 高度的计算
  • 圆角造成的卡顿,为什么,如何解决
  • Objective-C 和 JS 之间的交互
  • runtime 的应用,即兴发挥:运用 runtime 给一个 UIView 设置通用的点击事件,并使用 block 的回调方式进行回调(没太理解面试官要问的究竟是啥)
  • Core Animation 动画,加入购物车的动画
  • 如何应对用户反馈的 crash 问题
  • Swift 高阶函数,map、filter 的实现
  1. 项目经历
    居然没问,自我发挥的空间都木有了 😅

阿里国际技术事业部

一轮(电面)

时间:2018.01.22

  1. 自我介绍
  2. 项目经验(Hybrid、列表)
  3. 优化(SDWebImage 如何优化、Hybrid 优化)
  4. 简历、博客(SDWebImage 的优点、音视频、架构、网络层、年终总结和个人感受)
  5. 知识点考察(category 的注意点、多线程三种方式、优先级反转、JavaScriptCore、造成 NSTimer 停止的原因)
总结
  • 锻炼临场应变能力,提高心理素质
  • 锻炼表达能力
  • 理解之后、能用自己的话说出来,比硬写博客更有用
  • 平时复习

腾讯 SNG 移动端一面面经(来源:KrayC's Blog

一共 30 min

  1. 自我介绍
  2. 做过最困难/印象最深的项目是什么?困难是什么?怎么解决?
  3. MVC 和 MVVM 的区别?
  4. 请求的网络数据协议是什么?
  5. 应用的本地数据存储用什么方案?
  6. 你的 App 有多少用户量?
  7. 怎样提高应用加载速度?用什么工具调试?
  8. OC 中有什么属性修饰限定词?分别介绍一下
  9. autoreleasepool 的使用时机?
  10. 如何解决各类卡顿问题?
  11. 自动布局和手动布局的优缺点?
  12. UIView 在什么时机对 subviews 进行布局?
  13. OC 的消息派发过程?
  14. TCP 协议中的三次握手的过程?
  15. 快速排序的过程和时间复杂度?
  16. 如何寻找数组中第 k 大的数?
  17. 你有什么问题想问我们的?

腾讯 201718-iOS开发工程师(一面)

时间:2018.03.21

  1. 自我介绍一下
  2. 说一下项目中比较难的经历
  3. Objective-C 对象模型
  4. 性能优化的经历
  5. Instrument 的使用经历
  6. 解释一下离屏渲染是什么
  7. KVO 的实现
  8. 事件传递和响应
  9. 数据存储方式
  10. TCP 三次握手
  11. HTTPS
  12. Socket
  13. 对称加密和非对称加密
  14. 红黑树
  15. 排序算法
  16. 堆和栈的区别,全局变量是分配在栈上还是堆上?
  17. 多线程能共享局部产量吗
  18. 为什么选择来腾讯?
  19. 你有什么想问我的吗?

总结:
感觉计算机基础(网络、计算机系统、计算机组成原理、算法和数据结构)还是差了点,项目经历亮点、难点没有体现出来,iOS 基础算是刚过线。

booking.com(上海)

booking 的面试是典型的外企面试风格,考算法,对英文水平要求较高,整体流程比较规范(其实也是个缺点,个人觉得流程有些过于冗长了),HR 相当专业,每次面试前都会有很详细的建议,面试完也会有详细的反馈(这个必须点赞)。

booking 的面试流程如下:

  • 收到面试邀请邮件(05.11):说来比较有意思,booking 的面试机会其实不是来自于我自己投简历,听他们的 HR 说是看了我的 GitHub 后便给我发了面邀邮件。这说明什么问题呢?酒香还怕巷子深呢!更何况大多数人都是平庸的,你让招聘方怎么找到你?还是得多写写博客、做做开源的东西。
  • HR 电话沟通(05.14):介绍下他们公司的大概情况,了解我的求职意向,之后我再正式投递简历
  • Online Coding Challenge (05.20): HR 会发一套题给你做,也就是 HackerRank 上的 online coding test(就是在线考算法),难度到不难,一共三道题,前两道题很简单,如果你刷过不少题的话,第三道题也不难,只是逻辑稍微复杂了点,我当时是时间没把握好,第三道题没做完。
  • 第一轮(05.29):HR 电面,简单聊一聊个人经历,还问了些关于产品、A/B Testing、business model 的问题
  • 第二轮(06.01):跟阿姆斯特丹总部那边的工程师进行远程面试,也是考的算法,还有一个是改错题。算法题很简单,跟 iOS 开发实践结合得很好,改错题也不难,就是找出所有有问题的地方,改掉,然后再解释一下为什么这么改。我当时比较紧张,一上去就去改代码风格的问题去了,后面面试官提示了好几下,才反应过来。最后听 HR 说,整体还凑合,有一个关于 copy 关键字属性的问题是面试官提示的,另外还有一个 bug 没找出来。第二轮通过后,就要 onsite 面了,不过面试前要准备一份英文简历
  • 第三轮(06.07):onsite 面,booking 的上海办公室在静安寺旁边的越洋广场,当时因为有事耽误还迟到了,面试官超级 nice,帮我调整了一下面试流程。onsite 面也包括三小轮,全程英文:
    • 第一小轮是聊一些“软技能”方面的东西,包括产品、商业模式、运营、团队合作相关的东西。印象比较深的就是他们会问一些 A/B Test 和 business model 相关的东西。
    • 第二小轮是算法,我当时考的是一个关于 Trie 树的题目,因为之前也没接触过 Tire 树,所以在做题的时候,根本就没想到用这种数据结构来解决,只用了暴力解决法。
    • 最后是跟阿姆斯特丹总部那边的工程进行视频面,主要考察的是 iOS 开发相关的,说实话,这一下子就暴露了自己三脚猫的英语水平,面试官说话时完全就像我们平时聊天一样,与我们平时跟教英语的外教聊天完全不一样,我自己感觉像是全程在梦游,虽然我也很努力在听😂。印象中他们问了以下几个问题:
      • 内存管理,ARC
      • Child view Controller
      • 编程实战题,一边写一遍会穿插一些问题,包括网络层的设计、代码的严谨性、多线程

总结

  • 英语表达能力和听力水平还有待提高,很多东西不知道怎么表达,词汇量也不够,只好绕着弯子换一种很冗长的方式来表达,另一方面,听面试官讲时,不能马上反应过来,理解能力还差了点,主要还是不够熟练。 不过 HR 最终的反馈说,我的英语水平已经足够了。
  • 算法比较菜,这个还是得靠平时多练习。
  • 面试时,缺乏亮点,我自己分析觉得一是缺乏外企面试经验准备不足,面试时不知道聊什么,也不知道面试官的意图是什么,二是开发经验不足,深度和广度、基础知识都有待提高,肚子里有货,才有东西可讲。

携程(酒店研发部)

比想象中的要简单,不像一般公司问的那么细,主要还是偏向项目实践方面的。

一面(2018.05.22)

一面是 iOS 组长,主要是围绕简历问了项目经历,APM、性能优化、热修复、埋点相关的。

印象比较深的是,当时面试官问我们用的啥工具来检测内存泄漏,我说是微信读书团队开源的 MLeaksFinder,他接着问我知道它的实现原理吗,MLeaksFinder 的原理之前了解过,但是没看过源码,所以当时就想不起来了。

二面(2018.05.24)

二面是整个大前端的老大,主要也是围绕简历问了项目经历,看了下我的 GitHub 和博客,后来让我讲一下自己对于 MVC、MVP、MVVM 的理解,我在黑板上边写边吹了几分钟,最后扯到我自认为的亮点上来了——YHListKit,这招确实让面试官很买账😉
接着又问了一个关于设计模式的实际应用的问题,反正我是不敢说单例模式,就举了个类簇模式的例子。
最后一个是关于算法的问题:说出几个常用的排序算法,以及它们的时间复杂度。

总结:

  • 大厂一般比较注重性能、工具、整体架构,比较注重提供解决方案的能力
  • 自己在技术深度方面还需要多实践
  • 程序员一定要有自己的“作品”

哒哒英语

时间:2018.05.16

哒哒的面试效率很高,我说下午还有面试,他们的面试官和 CTO 特地安排中午就面完,当天就发了 offer。这里还是要感谢一下包哥的推荐🤝

一面

主要问的两个方面:

  • iOS 基础知识和计算机基础知识
    • 多线程:NSOperation 和 GCD、锁、死锁、多线程方面的实践
    • 内存管理:ARC 和 MRR、ARC 的实现
    • 设计模式的实践
    • HTTP、HTTPS 和 TCP/IP 协议、HTTP 2.0
  • 项目经历
    • YHListKit
    • 大概问了下 Swift
    • React Native 基本上没问

二面

因为 iOS 组长不在,所以他们的 CTO 就直接终面了,大概闲聊了下,后面讨论了几个技术细节:

  • 当时入门时是怎么学的 iOS
  • Apple 的官方文档看过哪些
  • WWDC 视频看过吗
  • ARC 的实现原理,weak 表的实现
  • Autolayout 的一个细节问题
  • HTTP 的断点续传
  • 场景题:如果现在有前端工程师反馈,他那边更新了图片资源,为什么 APP 里面的还是显示的旧图片?(关键点在于缓存,可能是服务端也有可能是客户端——但是我就没想到会有可能是 CDN 服务器缓存)
  • Socket

总结

  • 理论都能答得上来,但是还是缺少一些实践深度
  • WWDC 和官方文档读的有点少
  • 知识面还是差了点,计算机基础知识掌握的也还是不够牢固

blackboard

一面(电面,2018.05.17)

主要是问了一些 iOS 相关的基础知识:

  • Objective-C 的动态性
  • isa 的作用
  • KVO 的原理
  • Autolayout 自动计算 cell 高度
  • 多线程
  • 进程和线程
  • 不同的线程是否可以共享系统资源?
  • GCD
  • Runloop
  • Block 的本质
  • 常见的崩溃场景
  • 解决过的难题
  • 读过的开源项目源码

二面(onsite,2018.05.22)

  • setAssociatedObject 这个函数的几个参数分别是什么(第二个参数把我搞迷糊了)
  • Assets 的作用有哪些?
  • 要想实现 4 个并发任务执行完再执行最终任务,有几种方式
  • git 中 cherry pick 是干吗用的?
  • 要想在 Swift 中使用 Objective-C 的文件,Objective-C 头文件需要做什么?
  • 快速排序的平均时间复杂度是多少?
  • 什么是算法稳定性?
  • 说说你了解的几种断点,symbolic breakpoint 是用来干什么的,你用过吗?
  • HTTP 请求有几种请求方法Method
  • cookie 的出现是为了解决什么问题?
  • Autolayout 的 3 种 API
    • NSContraint
    • VFL
    • NSAnchor
  • Autolayout 自动计算 cell 高度
  • UIScrollView 中有一个 label,如何通过使用 Autolayout,使得 scroll view 的content size 的高度跟 label 一样高
  • 在一个 View 中放几个 view,如何通过 Autolayout 实现水平等间距排列,而且边距跟间距也相等。
  • 无限循环轮播图的实现
  • 如何解决嵌套的 scroll view 的手势识别问题(跟 delay touch 相关的 API)

总结

  • 总体来讲,基础理论知识还算可以
  • 基本功不够扎实,比如对于一些 C 相关的、多线程原理层面的都理解的不够透彻
  • 二面的面试官喜欢考 Autolayout,我也没办法呀😂
  • 在实践方面对于一些能提高效率的技术点掌握的还是不够熟练,比如 Autolayout 等
  • 对 Git 的使用了解的不够