给我十个可爱的订阅的粉丝带来的一篇iOS面经。。。。

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

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

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

小编有个自己学习交流群681503716(验证编号:大鲨)在iOS学习道路上的小伙伴可以加一下哦~

在这里和大家分享下我总结的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. 什么是离屏渲染?

5. 什么是ARC? (可能有很多同学还不清楚ARC是编译器和Runtime的协作结果)

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

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

8. __block关键字是否可以解决循环引用?

9. 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”);

}

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java架构

每个 JavaScript 工程师都应当知道的 10 个面试题以人为本1. 能说出来两种对于 JavaScript 工程师很重要的编程范式么?2. 什么是函数式编程?3. 类继承和原型继承有什么区别?

2786
来自专栏青玉伏案

设计模式(一):“穿越火线”中的“策略模式”(Strategy Pattern)

在前段时间呢陆陆续续的更新了一系列关于重构的文章。在重构我们既有的代码时,往往会用到设计模式。在之前重构系列的博客中,我们在重构时用到了“工厂模式”、“策略模式...

2156
来自专栏葡萄城控件技术团队

Visual Studio 2015速递(1)——C#6.0新特性怎么用

系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 Visual Studio 2015速递(2)——提升效率和质量(VS20...

1908
来自专栏圣杰的专栏

DDD理论学习系列(11)-- 工厂

1.引言 在针对大型的复杂领域进行建模时,聚合、实体和值对象之间的依赖关系可能会变得十分复杂。在某个对象中为了确保其依赖对象的有效实例被创建,需要深入了解对象实...

25410
来自专栏FreeBuf

扒一扒基于词法分析和语法分析的SQL注入攻击检测

周末了,又到了一星期中的美好时刻,因为期待,因为渲染在时光中的慵散。本周,Black Hat大会,应该是安全界中的大事件。 这不,经过一番紧锣密鼓的搜罗,发现了...

5468
来自专栏微信公众号:Java团长

什么才是Java的基础知识?

近日里,很多人邀请我回答各种j2ee开发的初级问题,我无一都强调java初学者要先扎实自己的基础知识,那什么才是java的基础知识?又怎么样才算掌握了java的...

691
来自专栏程序工场

什么才是java的基础知识?

1436
来自专栏Java架构师学习

2017年终巨献阿里、腾讯最新Java程序员面试题,准备好进BAT了吗

Java基础 进程和线程的区别; Java的并发、多线程、线程模型; 什么是线程池,如何使用? 数据一致性如何保证;Synchronized关键字,类锁,方法锁...

3735
来自专栏数据结构与算法

BZOJ1026: [SCOI2009]windy数(数位dp)

932
来自专栏牛客网

阿里一面 京东一面+二面

3504

扫码关注云+社区

领取腾讯云代金券