前言:面试
今天和你们分享一下,我从事iOS开发6年的面试心得。大大小小参加过不下30+公司的面试,其中不乏BAT、TMD等一线互联网公司,总结一下,发现大厂招聘都有一个共性。算法
对技术的要求很全面,有些同窗认为iOS掌握了基础的UI、网络、内存、多线程等等就够了,其实要想更好的应付iOS的面试,这些是远远不够的。好比对RunTime底层实现机制、RunLoop的用户态到核心态切换逻辑,设计模式、架构以及框架的考察,再好比,多是让不少同窗头疼的算法问题,然而算法问题是一线大厂的必考内容。因此咱们须要学习和掌握的还有不少。设计模式
做为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个个人iOS交流群:638302184,无论你是小白仍是大牛欢迎入驻
,分享BAT,阿里面试题、面试经验,讨论技术, 你们一块儿交流学习成长!但愿帮助开发者少走弯路。
在这里和你们分享下我总结的iOS技术知识体系,大体能够分为如下几个部分:数组
1、UI视图缓存
其中包括事件传递、视图响应、UI布局、绘制、Tableview重用机制的理解等基本技术点,也包括如离屏渲染、流式页面的性能优化、异步绘制、UI渲染机制等偏底层技术的考察。性能优化
2、Objective-C语言网络
其中包括如KVO、KVC、分类、扩展、关联对象等系统实现原理和机制,以及NSNotification、属性关键字等相关技术点的考察。多线程
3、Runtime架构
能够说是中级以及以上工程师的必备技术要求,面试官每每会考察你们对对象、类对象、原类对象的理解、消息传递机制、消息转发流程、Method-Swizzling、ISA-swizzling、动态方法解析、动态添加方法等。框架
4、内存管理
能够说是高阶考点,也是难点,中高级及以上没法回避的问题。考察内容基本包括:weak自动置nil、ARC、MRC、自动释放池的实现原理、循环引用、引用计数管理思想等。
5、Block
iOS当中很是重要的OC语言特性,天然也是面试常考点。其中包括截获变量特性、__Block关键字、Block的本质、Block的内存管理和循环引用等。
6、多线程
面试高级考点。iOS常见的多线程技术NSOperation&NSOperationQueue 、NSThread、以及快用烂了的GCD;那么面试过程中,每每会结合实际代码考察同窗们对多线程技术的掌握深度,包括对于常见锁的考察,如NSLock、递归锁、自旋锁、条件锁等等。
7、RunLoop
相信不少同窗知道RunLoop能够有事作事,没事休息?面试当中的考察可能要更深刻些,RunLoop为何会有事作事没事休息,系统是怎样实现的。哈哈,是否是有难度了,再好比怎样实现一个常驻线程、RunLoop和线程的关系是怎样的等等。
8、网络
其中包括HTTP相关的中间人攻击、HTTPS的链接创建流程、对称加密、非对称加密、DNS劫持、TCP的滑动窗口协议、可靠传输是怎样保证的,以及TCP的慢启动特色,Session/Cookie的区别等等,这些都是面试中高级岗位必考问题。
9、设计模式
其中包括常见的软件设计原则,责任链、适配器、桥接、命令、单例、策略模式等等,不要告诉我你只是看了几本书,面试官会让你结合实际业务场景,现场考察你对设计模式的运用和理解的。
10、架构/框架
其中包括常见的如怎样设计图片缓存框架、网络框架,客户端的总体架构怎样实现,常见的解耦方式有哪些,多数同窗都知道OPENURL是一种解耦方案,那依赖注入这种方式可能iOS的同窗会感到陌生,这也是面试官期许的答案。
11、算法
其中包括BAT、TMD常常考察的有序数组归并、链表反转、字符串反转、大数相加算法思想等等,这部分变化就不少了。
12、第三方
常见的AFNetworking、SDWebImageView、Reactive Cocoa、React Native等
大厂考察的深度也是使人眼前一亮的,下面列举几个高阶难点问题:
17.给你一个实际场景,让你们现场提出利用哪一个设计模式解决实际问题。
19.怎样设计一个图片缓存框架?
20.客户端的总体架构实现是怎样的,解耦方式都有哪些?
21.UIView和CALayer之间的关系是怎样的?请从设计原则的角度回答系统为什么这样设计?
22.UI卡顿、掉帧的原理是怎样的?
23.请解释一下你对isa指针的理解。
24.你是怎样理解引用计数机制的?(不少人会说什么retainreleasedealloc,彻底没有Get到面试官的考察意图)
以上24道面试题,同窗们看看本身能回答出多少个?其实我想说有的时候你的答案在你理解是正确的,在面试官看来可能很肤浅(原谅我这么直白。。。) 但愿此篇文章对你有帮助!
做为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个个人iOS交流群:638302184,无论你是小白仍是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 你们一块儿交流学习成长!但愿帮助开发者少走弯路。
谢谢!
文章来源于网络,若有侵权,请联系小编删除。