一千个读者眼中有一千个哈姆雷特,一千名 iOS 程序员心目中就有一千套 iOS 高级面试题。本文就是笔者认为能够用来面试高级 iOS 程序员的面试题。git
这套题的题目跟公司和业务都没有关系,并且也并不表明笔者本人能够把这些题回答得很是好,笔者只是将一部分以为比较好的题从收集的面试题里面抽出来了而已。程序员
收集的面试题有如下三个来源:github
本文分为三个部分展开:面试
第一部分就是面试题了;第二部分给出了笔者喜欢考察和不喜欢考察的题以及缘由;第三部分是笔者建议你们准备数据结构和算法题的缘由。算法
Autoreleasepool
所使用的数据结构是什么?AutoreleasePoolPage
结构体了解么?class_ro_t
和 class_rw_t
的区别?class
方法和objc_getClass
方法有什么区别?objc_allocateClassPair
的方法名尾部为何是pair(成对的意思)?__block
修饰与否的区别?__weak
修饰的同时须要在内部使用__strong
修饰?不难看出,整套面试题中的iOS部分占比其实并不大(三分之一),由于笔者认为:编程
高级 iOS 开发 = 高级开发 + (高级) iOS 开发。设计模式
而其中高级开发的部分应该做为优先考核的内容,目的在于首先要验证面试者是否具有高级开发必备的基本素质。这部分知识的掌握程度会直接影响一个开发者的研究和设计能力,包括横向和纵向的。而笔者我的以为后面的(高级) iOS 开发的部分仅仅考查的是面试者对于 iOS 自己的理解程度(API,系统,开发工具等等)。数组
在这套里面,笔者我的最喜欢的几道题是:安全
- 这道题一举两得,不只考察了面试者对设计模式这种通用性知识的了解,还能够考察其对iOS SDK的熟悉和思考程度。这里能够简单提几个:单例:UIApplication;观察者模式:KVO;类簇:NSNumber;装饰者模式:分类;命令模式:NSInvocation;享元模式:UITableviewCell(UITableview的重用)。还有更多,有兴趣的读者能够看一下《Objective-C 编程之道》这本书,它介绍了不少在 iOS SDK中使用的设计模式。
- 这道题我看到网上有些答案是错的,说的大概的意思是“同一时刻只有一个线程访问”。可是若是按照这个定义的话,那么那些没法改变的常量就不算是线程安全的了,因此显然这类定义就是错的。因此说学东西要具有批判性思惟,尤为是看博客的时候,不少状况须要本身想一想,主动去认证,去思考。
- 致使app崩溃的缘由有不少,好比向某个对象发送其没法响应的方法,数组越界,集合类中添加nil对象,string访问越界,KVO不合理的移除关联key(KVO致使的崩溃不只仅这一种缘由)等。而崩溃很是影响用户体验,因此笔者认为一名高级 iOS 开发应该具有避免这些崩溃的能力,起码至少也要知道这些容易致使崩溃的场景。
- 看一些优秀开源框架的代码,梳理实现思路和细节能够帮助咱们提升在相似场景下设计系统的能力。其实道理很简单,小时候学习写做文的办法是什么?- 就是背诵课文而已啊。由于写做是一种输出,因此若是你没有好词好句的积累(输入),天然写不出辞藻丰富的文章。写代码也是同样的道理~
- 重构的能力是笔者很是看重的能力。其实笔者我的认为关于重构的技巧能够早早学习,在后面写代码的时候尽量作到一步到位(若是在排期容许的状况下),并且也对设计代码方面能力的提升有帮助:怎样才能设计出一个低耦合,高内聚,易扩展,易修改的系统?有专门的一本书来介绍重构:《重构 改善既有代码的设计》。
上面说了笔者喜欢考察的问题,下面说一下笔者不喜欢考察的是哪些问题:网络
笔者不考察这类问题的缘由有两个:
在本文的最后说一下数据结构和算法题。
这类问题是比较大的公司喜欢考核的内容,也就是说大部分公司其实并不考(可是若是了解的话是会加分的)。可是笔者我的认为若是时间上容许,多少仍是准备一些会比较好。除了应对面试,其实算法方面的学习会对编程能力的提升有帮助,这一点笔者本身深有体会:
笔者此次准备面试的过程当中,在LeetCode上面刷了一些道题,其中链表,数组,二叉树的题加起来有30道左右,并把这些题放在了我的仓库里面:awesome-algorithm-question-solution。欢迎PR Swift,Java的算法题和答案~
在刷题和学习的过程当中渐渐可以感受到对代码的理解能力提升了不少,尤为是链表题能够强化对指针操做的理解,并且对执行条件的检查,边界问题的处理能力也提高了一些~
好了,这套题就分享到这里了,在文章后面也建议你们平时注意数据结构和算法方面的学习。和上一篇同样,这篇博客主观方面的内容仍是多一些的,仍是但愿读者能够多多和我交流~
本篇已同步到我的博客:出一套高级 iOS 面试题
笔者在近期开通了我的公众号,主要分享编程,读书笔记,思考类的文章。
欢迎加入iOS开发交流学习群,咱们一块儿共同窗习,共同成长