Fork me on GitHub

iOS 面试总结 - 2019

前言

  2019 年个人面试已经基本告一段落,由于个人规划的一些问题,整个过程下来还是经历了一些曲折。先从 P2P 暴雷开始,受到母公司挤兑危机的影响,我们公司日子明显十分难熬。迫于无奈,还是要在这个寒冬中继续前行,由于杭州的落户政策更加宽松,后续的发展是优先考虑去杭州,但是由于学历、工作年限、大厂经验等方面没有突出的优势。薪资水平方面杭州整体水平要落后于上海,所以在杭州并没有找到合适的机会。

  经过一番思想斗争,还是选择继续留在上海,提升技术的同时,积累一些资本。感觉上今年的四月比三月机会要更多一些,可能是一些企业受去年年底裁员潮的影响,一季度没有开放 HC。

  面试中一些问题,在竞争激烈的情况下,经验显得尤为重要,一份漂亮的履历是打开机会的敲门砖。阿里和网易通过内推和猎头渠道都没有能够获得面试机会,面的几家印象比较深刻的应该是 浙江大华、腾展叮咚、哈罗单车、浦发信用卡、杭州有赞、bilibili 等几家公司。这里也总结了一些比较有代表性的问题,和大家共同学习。

  纸上学来终觉浅,自知此事要躬行。做软件开发,实践是非常重要的一环,只看一遍博客或者 Google 到解决方案直接 copy 到项目中,后面再遇到大概率还是要查资料,理解+实践才是高效学习的方式。

面试问题

  需要注意的是,这里列出来的的每一个问题,可能只是一系列问题的入口,面试官很可能根据面试者的回答即兴进行延伸,所以在准备面试的时候,需要追本溯源,真正的把一个问题研究透彻。

代表性问题

  • 在使用 Hybrid 开发的时候,H5 和原生如何进行交互?

  • 除了使用 UIWebView 和 H5 进行交互,有没有尝试或者研究 WKWebView 与 H5 的交互,使用过程中会遇到什么问题?

  • 在使用 weex 的时候有没有遇到什么问题?

  • 简单介绍一下 Runtime

  • 可以在运行时给类添加成员变量吗?为什么不能?(为什么成员变量列表设计成只读的,出于什么考虑?)

  • 我们都知道在分类里可以添加方法,那么能否在分类中添加成员变量?为什么?

  • 多线程开发时使用 NSOperation 比 GCD 的优势在哪里?

  • NSOperation 有哪几种状态?

  • 在使用 NSOperationQueue 的时候,如何获取队列中 NSOperation 的状态?

  • 给类添加属性时使用 atomic 有什么作用?它能否保证

  • 在对类簇进行方法交换的时候,需要注意哪些问题

  • 深拷贝和浅拷贝

  • +load 方法执行在 main 函数之前还是之后?

  • 父类、子类、子类的 Category 中 +load 方法按照什么顺序调用?

  • 说一下 KVO,使用 KVC 的方式赋值会不会触发 KVO?

  • 项目中做了哪些性能方面的优化

  • MVC 和 MVVM

  • MVVM 中用到的 RAC 中,热信号和冷信号

  • 组件化的时候同层级模块间如何通信及调用

  • 组件化的时候使用 CTMediator 方案有什么弊端?

  • 有没有了解过使用其他的方式进行模块间通信?比如 URL 这种方式,简单介绍一下

  • 介绍 UIViewController 的生命周期

  • 事件传递链和事件响应链

  • 利用 GCD 实现异步线程任务 A 和 B 执行完成后执行任务 C

  • 使用 - performSelector:afterDelay: 方法的时候,需要注意什么问题

一些基本的算法问题

  • 二叉树的遍历

  • 如何从二叉树中快速查找到第二大的数

  • SDWebImage 中用到的缓存策略,如何做到最少使用的最先被清理出缓存?

  • 如何设计一个读写锁

项目中涉及到的问题

  除了这些常见的面试问题,面试官有时候会问到一些算法相关的问题,以及根据简历中的项目进行提问,大家除了练好基本功,对经历过的项目也要重温一下,避免面试官问了答不上来就会给面试官留下不好的印象。有些技术点需要实践一下,看看自己是否切实掌握,不能眼高手低,到面试官问的时候卡壳了,尴尬的还是自己😂。

总结

  现在的移动端开发市场已经趋于稳定,大家招人都不再局限于做业务,还会去考察求职者的基本功是否扎实,以及对底层开发的钻研深度。平时对自己要求高一些,不能浅尝辄止。

------------- 本文结束感谢您的阅读 -------------