写点什么

12 个 iOS 技术面试题及答案总结

  • 2022 年 3 月 12 日
  • 本文字数:2101 字

    阅读完需:约 7 分钟

前言

随着移动互联网科技不断的发展和创新,如今无论是公司还是开发者或设计师个人而言,面试都是一项耗时耗钱的项目,而面对 iOS 开发者及设计师在面试时可能会遇到的问题进行了筛选与汇总。下面我们一起来一下看看吧。

摄图网_500084346_wx.jpg

一、如何绘制 UIView?

绘制一个 UIView 最灵活的方法就是由它自己完成绘制。实际上你不是绘制一个 UIView,而是子类化一个 UIView 并赋予绘制自己的能力。当一个 UIView 需要执行绘制操作时,drawRect:方法就会被调用,覆盖此方法让你获得绘图操作的机会。当 drawRect:方法被调用,当前图形的上下文也被设置为属于视图的图形上下文,你可以使用 Core Graphic 或者 UIKit 提供的方法将图形画在该上下文中。

如果你正在面试,或者正准备跳槽,不妨看看我精心总结的 iOS 大厂面试资料https://gitee.com/Mcci7/i-oser 来获取一份详细的大厂面试资料 为你的跳槽加薪多一份保障

 二、什么是 MVVM?主要目的是什么?优点有哪些?

MVVM 即 Model-View-ViewModel

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

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

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

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

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

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

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

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

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

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

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

好处:

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

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

缺点:

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

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

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

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

 五、XMPP 工作原理;xmpp 系统特点

原理:

1.所有从一个 client 到另一个 client 的 jabber 消息和数据都要通过 xmpp server

2.client 链接到 server

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

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

5.client 间进行交互

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

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

1.导入了 CoreLocation.framework

2.ios8 以后,如果需要使用定位功能,就需要请求用户授权,在首次运行时会弹框提示

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

 七、苹果内购实现流程

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

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

App Store 返回产品信息。

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

用户选择某个产品

程序向 App Store 发送支付请求

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

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

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

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

2.配置密钥

3.集成并配置 SDK

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

 九、 gcd 产生死锁的原因及解锁的方法

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

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

 十、生成二维码的步骤

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

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

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

4.自定义定位角标

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

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

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

XMPP 框架没有提供发送附件的功能,需要自己实现

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

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

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

2016 年前环信使用的是 XMPP 协议,它是再 XMPP 的基础上进行二次开发,对服务器 Openfire 和客户端进行功能模型的添加和客户端 SDK 的封装,基于 Socket 的网络通信环信内部实现了数据缓存,会把聊天记录添加到数据库,把附件(如音频文件,图片文件)下载到本地,使程序员更多时间是花到用户体验体验上。

16 年环信开发了基于私有 sync 协议的 IM 3.0,基于 TCP 研发的二进制私有协议“msync”更省流量更高效。

**环信V3.0 版本对 SDK 和通讯协议进行了全面深度的改造与优化:**
复制代码

全新的通信协议:全新的基于消息同步的私有协议,在不稳定网络环境下更稳定更省流量,确保消息投递的可靠、顺序以及实时性,并具有更高的安全性。同时提供了更好的扩展性,将支持更多的对接和设备同步场景。

全新的 SDK:全面重构,将核心通信模块做了更好的封装;简化了接口,结构更清晰,集成更容易;提升了登录速度和弱网络环境下的可靠性。

总结

以上就是这篇文章的全部内容了,希望本文的内容对各位 iOS 开发者们在面试的时候能有所帮助,如果有问题大家可以留言交流。

用户头像

公众号:iOSer 2019.03.12 加入

专注移动端新技术和行业发展,不定期推送最新的 iOS资讯以及精品技术文章。

评论

发布
暂无评论
12个iOS技术面试题及答案总结_ios_原来是泽镜啊_InfoQ写作平台