面试滴滴+美团+阿里以后,总结了62道最新iOS面试题

前言:


每一年三四月份都是招聘高峰期,也就是咱们说的金三银四,不少想换工做的职场人士都会选择在此时换一份工做,毕竟一年之计在于春,对于公司和我的而言都是一个新的开始。ios

2021年,各行各业都举步维艰,然而作为iOS面试官的我也在精心准备的为公司招进优秀的iOS开发,期间收到了不少简历,也笔试了很多开发者,上一周咱们已经发了3个offer,因此先下手为强,咱们已经招满了人的职位,依旧陆陆续续也还有不少的简历投向咱们。程序员

前面一段时间给公司面试了10个iOS开发,本身总结了62道面试题,在此,我分享给你们,但愿你们在以后要找工做的朋友,个人这篇文章能给你有所帮助。面试

本文分为两大部分:(1-12题为详解题)(13-62为待解题)

1、如何绘制UIView?

绘制一个UIView最灵活的方法就是由它本身完成绘制。实际上你不是绘制一个UIView,而是子类化一个UIView并赋予绘制本身的能力。数据库

做为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个个人iOS交流群:834688868,无论你是大牛仍是小白都欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 你们一块儿交流学习成长!编程

当一个UIView须要执行绘制操做时,**drawRect:方法就会被调用,覆盖此方法让你得到绘图操做的机会。当drawRect:**方法被调用,当前图形的上下文也被设置为属于视图的图形上下文,你可使用Core Graphic或者UIKit提供的方法将图形画在该上下文中。swift

2、什么是MVVM?主要目的是什么?优势有哪些?

MVVM即 Model-View-ViewModelapi

  • 1.View主要用于界面呈现,与用户输入设备进行交互、缓存

  • 2.ViewModel是MVVM架构中最重要的部分,ViewModel中包含属性,方法,事件,属性验证等逻辑,负责View与Model之间的通信安全

  • 3.Model就是咱们常说的数据模型,用于数据的构造,数据的驱动,主要提供基础实体的属性。性能优化

MVVM主要目的是分离视图和模型

**MVVM优势:**低耦合,可重用性,独立开发,可测试


3、get请求与post请求的区别

1.get是向服务器发索取数据的一种请求,而post是向服务器提交数据的一种请求

2.get没有请求体,post有请求体

3.get请求的数据会暴露在地址栏中,而post请求不会,因此post请求的安全性比get请求号

4.get请求对url长度有限制,而post请求对url长度理论上是不会收限制的,可是实际上各个服务器会规定对post提交数据大小进行限制。

4、谈谈你对多线程开发的理解?ios中有几种实现多线程的方法?

好处:

1.使用多线程能够把程序中占据时间长的任务放到后台去处理,如图片,视频的下载;

2.发挥多核处理器的优点,并发执行让系统运行的更快,更流畅,用户体验更好;

缺点:

1.大量的线程下降代码的可读性;

2.更多的线程须要更多的内存空间;

3当多个线程对同一个资源出现争夺的时候要注意线程安全的问题。

ios有3种多线程编程的技术:1.NSThread,2.NSOperationQueue,3.gcd;

5、XMPP工做原理;xmpp系统特色

原理:

1.全部从一个client到另外一个client的jabber消息和数据都要经过xmpp server

2.client连接到server

3.server利用本地目录系统的证书对其认证

4.server查找,链接并进行相互认证

5.client间进行交互

特色:1)客户机/服务器通讯模式;2)分布式网络;3)简单的客户端;4)XML的数据格式

6、地图的定位是怎么实现的?

1.导入了CoreLocation.framework

2.ios8之后,若是须要使用定位功能,就须要请求用户受权,在首次运行时会弹框提示

3.经过本机自带的gps获取位置信息(即经纬度)

7、苹果内购实现流程

程序经过bundle存储的plist文件获得产品标识符的列表。

程序向App Store发送请求,获得产品的信息。

App Store返回产品信息。

程序把返回的产品信息显示给用户(App的store界面)

用户选择某个产品

程序向App Store发送支付请求

App Store处理支付请求并返回交易完成信息。

App获取信息并提供内容给用户。

8、支付宝,微信等相关类型的sdk的集成

1.在支付宝开发平台建立应用并获取APPID

2.配置密钥

3.集成并配置SDK

4.调用接口(如交易查询接口,交易退款接口)

9、 gcd产生死锁的缘由及解锁的方法

产生死锁的必要条件:1.互斥条件,2.请求与保持条件,3.不剥夺条件,4.循环等待条件。

解决办法:采用异步执行block。

10、生成二维码的步骤

1.使用CIFilter滤镜类生成二维码

2.对生成的二维码进行加工,使其更清晰

3.自定义二维码背景色、填充色

4.自定义定位角标

5.在二维码中心插入小图片

11、在使用XMPP的时候有没有什么困难

发送附件(图片,语音,文档...)时比较麻烦

XMPP框架没有提供发送附件的功能,须要本身实现

实现方法,把文件上传到文件服务器,上传成功后获取文件保存路径,再把附件的路径发送给好友

12、是否使用过环信,简单的说下环信的实现原理

环信是一个即时通信的服务提供商

环信使用的是XMPP协议,它是再XMPP的基础上进行二次开发,对服务器Openfire和客户端进行功能模型的添加和客户端SDK的封装,环信的本质仍是使用XMPP,基于Socket的网络通讯

环信内部实现了数据缓存,会把聊天记录添加到数据库,把附件(如音频文件,图片文件)下载到本地,使程序员更多时间是花到用户体验体验上。


待解题

基础:

一、如何令本身所写的对象具备拷贝功能?

二、说说你理解weak属性?

三、题目:Swift mutating关键字的使用?

四、UIView和CALayer是什么关系?

五、下面的代码输出什么?

六、@synthesize 和 @dynamic 分别有什么做用?

七、动态绑定

八、Category(类别)、 Extension(扩展)和继承的区别

九、为何代理要用weak?代理的delegate和dataSource有什么区别?block和代理的区别?

十、id和NSObject*的区别

十一、如何令本身所写的对象具备拷贝功能?

十二、使用系统的某些block api(如UIView的block版本写动画时),是否也考虑引用循环问题?

1三、用@property声明的NSString(或NSArray,NSDictionary)常用copy关键字,为何?若是改用strong关键字,可能形成什么问题?

1四、UIView和 CALayer是什么关系?

1五、static有什么做用?

底层:

1六、main()以前的过程有哪些?

1七、KVO基本原理?

1八、Swift 下的如何使用 KVC?

1九、:Swift有哪些模式匹配?

20、objc在向一个对象发送消息时,发生了什么?

2一、静态库的原理是什么?你有没有本身写过静态编译库,遇到了哪些问题?

2二、runloop是来作什么的?runloop和线程有什么关系?主线程默认开启了runloop么?子线程呢?

2三、不手动指定autoreleasepool的前提下,一个autorealese对象在什么时刻释放?(好比在一个vc的viewDidLoad中建立

2四、不手动指定autoreleasepool的前提下,一个autorealese对象在什么时刻释放?(好比在一个vc的viewDidLoad中建立)

2五、OC完整的消息转发机制+代码实现【暴击】

2六、、以+ scheduledTimerWithTimeInterval...的方式触发的timer,在滑动页面上的列表时,timer会暂定回调,为何?如何解决?

2七、如何手动触发一个value的KVO

2八、如何对定位和分析项目中影响性能的地方?以及如何进行性能优化?

2九、串行并行,异步同步的区别?

30、线程是什么?进程是什么?两者有什么区别和联系?

3一、RunLoop是什么?

3二、假设有一个字符串aabcad,请写一段程序,去掉字符串中不相邻的重复字符串,即上述字符串处理以后的输出结果为:aabcd

@autoclosure(自动闭包)

3四、iOS app启动如何优化?

3五、swift面试题:

3六、怎样防止反编译?

3七、UITableView性能优化,超实用

线程:

3七、 不要阻塞主线程

3八、谈谈你对多线程开发的理解?ios中有几种实现多线程的方法?

3九、进程和线程的区别?同步异步的区别?并行和并发的区别?

40、ViewController生命周期

4一、iOS 中的多线程

4二、内存管理的几条原则时什么?按照默认法则.那些关键字生成的对象

须要手动释放?在和property结合的时候怎样有效的避免内存泄露?

谁申请,谁释放

4三、dispatch_barrier_async的做用是什么?

4四、如何用GCD同步若干个异步调用?(如根据若干个url异步加载多张图片,而后在都下载完成后合成一张整图)

http:

4六、http与https的区别?

4七、服务器可否知道APNS推送后有没有到达客户端的方法?

app:

4八、1.什么方式能够看到上架App的头文件?

4九、iOS iAP内购审核可能失败的问题

50、IAP内购中虚拟货币致使审核没法经过的问题?