从事iOS研发5年的面经

今天和大家分享一下,我从事iOS开发5年的面试心得。

大大小小参加过不下30+公司的面试,其中不乏BAT、TMD等一线互联网公司,总结一下,发现大厂招聘都有一个共性。

对技术的要求很全面,有些同学认为iOS掌握了基础的UI、网络、内存、多线程等等就够了,其实要想更好的应付iOS的面试,这些是远远不够的。比如对RunTime底层实现机制、RunLoop的用户态到核心态切换逻辑,设计模式、架构以及框架的考察,再比如,可能是让很多同学头疼的算法问题,然而算法问题是一线大厂的必考内容。所以我们需要学习和掌握的还有很多。

在这里和大家分享下我总结的iOS技术知识体系,大致可以分为以下几个部分:

一、UI视图

其中包括事件传递、视图响应、UI布局、绘制、Tableview重用机制的理解等基本技术点,也包括如离屏渲染、流式页面的性能优化、异步绘制、UI渲染机制等偏底层技术的考察。

二、Objective-C语言

其中包括如KVO、KVC、分类、扩展、关联对象等系统实现原理和机制,以及NSNotification、属性关键字等相关技术点的考察。

三、Runtime

可以说是中级以及以上工程师的必备技术要求,面试官往往会考察大家对对象、类对象、原类对象的理解、消息传递机制、消息转发流程、Method-Swizzling、ISA-swizzling、动态方法解析、动态添加方法等。

四、内存管理

可以说是高阶考点,也是难点,中高级及以上无法回避的问题。考察内容基本包括:weak自动置nil、ARC、MRC、自动释放池的实现原理、循环引用、引用计数管理思想等。

五、Block

iOS当中非常重要的OC语言特性,自然也是面试常考点。其中包括截获变量特性、__Block关键字、Block的本质、Block的内存管理和循环引用等。

六、多线程

面试高级考点。iOS常见的多线程技术NSOperation&NSOperationQueue 、NSThread、以及快用烂了的GCD;那么面试过程当中,往往会结合实际代码考察同学们对多线程技术的掌握深度,包括对于常见锁的考察,如NSLock、递归锁、自旋锁、条件锁等等。

七、RunLoop

相信很多同学知道RunLoop可以有事做事,没事休息?面试当中的考察可能要更深入些,RunLoop为什么会有事做事没事休息,系统是怎样实现的。哈哈,是不是有难度了,再比如怎样实现一个常驻线程、RunLoop和线程的关系是怎样的等等。

八、网络

其中包括HTTP相关的中间人攻击、HTTPS的连接建立流程、对称加密、非对称加密、DNS劫持、TCP的滑动窗口协议、可靠传输是怎样保证的,以及TCP的慢启动特点,Session/Cookie的区别等等,这些都是面试中高级岗位必考问题。

九、设计模式

其中包括常见的软件设计原则,责任链、适配器、桥接、命令、单例、策略模式等等,不要告诉我你只是看了几本书,面试官会让你结合实际业务场景,现场考察你对设计模式的运用和理解的。

十、架构/框架

其中包括常见的如怎样设计图片缓存框架、网络框架,客户端的整体架构怎样实现,常见的解耦方式有哪些,多数同学都知道OPENURL是一种解耦方案,那依赖注入这种方式可能iOS的同学会感到陌生,这也是面试官期许的答案。

十一、算法

其中包括BAT、TMD经常考察的有序数组归并、链表反转、字符串反转、大数相加算法思想等等,这部分变化就很多了。

十二、第三方

常见的AFNetworking、SDWebImageView、Reactive Cocoa、React Native等等

大厂考察的深度也是令人眼前一亮的,下面列举几个高阶难点问题:

1. UI视图的事件传递机制是如何实现的?

2. UI绘制原理是怎样的?

3. 请利用TableView的重用机制实现一个字母索引条。

4. 什么是离屏渲染?(其实可以从OPENGL的多通道渲染管线角度来回答

5. 什么是ARC? (可能有很多同学还不清楚ARC是编译器和Runtime的协作结果。很多同学在回答什么是ARC的时候往往会忽略掉Runtime在ARC当中所起到的重要作用。

6. AutoReleasePool的实现机制。(总结一句话:是以栈为结点构成的双向链表结构。

7. 循环引用相关的考察,NSTimer如果重复调用怎样解除循环引用?

8. __block关键字是否可以解决循环引用? (其实__block属性关键字在MRC下是可以解决循环引用的,相信很多同学还不知道吧,哈哈。

9. Block的本质是什么? (好多同学会说Block的本质就是函数指针,殊不知这样的回答不准确、不完善;其实Block的本质是带有函数执行上下文环境的结构体,其中包含被调函数指针这么一个东西。)

10. Block的截获变量的特性应该怎样解释,Block是怎样产生循环引用的?

11. 怎样利用iOS的多线程技术对共享变量实现多读单写操作呢?

12. 怎样理解自旋锁? 递归锁应该怎样使用?

13. 常见的线程同步问题该怎样解决?

14. 怎样解决DNS劫持?

15. TCP的慢启动特点是怎样的。

16. 你对HTTPS是怎样理解的?

17.给你一个实际场景,让大家现场提出利用哪个设计模式解决实际问题。

18. 怎样设计一个时长统计框架?

19.怎样设计一个图片缓存框架?

20.客户端的整体架构实现是怎样的,解耦方式都有哪些?

21.UIView和CALayer之间的关系是怎样的?请从设计原则的角度回答系统为何这样设计?

22.UI卡顿、掉帧的原理是怎样的?

23.请解释一下你对isa指针的理解。

24.你是怎样理解引用计数机制的?(很多人会说什么retain\release\dealloc,完全没有Get到面试官的考察意图

25. 请回答下面的代码输出结果:答案13

dispatch_async(global_queue, ^{

NSLog(@”1”);

[self performSelector : @selector(printLog)

withObject : nil

afterDelay : 0 ];

NSLog(@”3”);

});

- (void)printLog {

NSLog(@”2”);

}

以上25道面试题,同学们看看自己能回答出多少个?其实我想说有的时候你的答案在你理解是正确的,在面试官看来可能很肤浅(原谅我这么直白。。。)

如何写简历才能让面试官、HR眼前一亮?这个问题我们可能也要深思熟虑一下。

刚刚上线的一门iOS实战课程,学了的人都说好用!

最后附上课程链接:https://coding.imooc.com/class/202.html

BAT、TMD面试真题实战

一门比较有深度的课程,而且涵盖大量BAT、TMD面试真题。

也欢迎大家一起交流,qq群: 746077249

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,373评论 8 265
  • OC语言基础 1.类与对象 类方法 OC的类方法只有2种:静态方法和实例方法两种 在OC中,只要方法声明在@int...
    奇异果好补阅读 4,271评论 0 11
  • 面试题参考1 : 面试题[http://www.cocoachina.com/ios/20150803/12872...
    江河_ios阅读 1,735评论 0 4
  • 知道不会在一起,大道理我也懂,没关系。我只是不想做那种,在大道理面前,就放弃执着的人。 我希望你遇见的是一个不一般...
    一只六哥哥c阅读 175评论 1 0
  • 请晓威到我的办公室做客大概是两年前的冬季。他坐在单人沙发上,背景墙是我一个朋友帮我临摹的,法国大卫的那幅拿破...
    王河阅读 364评论 0 0