前言:

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

今年受疫情的影响,各行各业都举步维艰,然而做为iOS面试官的我也在精心准备的为公司招进优秀的iOS开发,期间收到了很多简历,也笔试了不少开发者,上一周我们已经发了3个offer,所以先下手为强,我们已经招满了人的职位,依旧陆陆续续也还有很多的简历投向我们。
前面一段时间给公司面试了10个iOS开发,自己总结了62道面试题,在此,我分享给大家,希望大家在之后要找工作的朋友,我的这篇文章能给你有所帮助。

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

一、如何绘制UIView?

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

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

二、什么是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的数据格式

答案:

由于答案太多,我做了一个PDF文档,由于简书不能上传文件,,由于文章有限,需要这些文档的,

点击

资料收录

自取吧

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

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框架没有提供发送附件的功能,需要自己实现

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

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

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

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

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

待解题

基础:

1、如何令自己所写的对象具有拷贝功能?

2、说说你理解weak属性?

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

4、UIView和CALayer是什么关系?

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

6、@synthesize 和 @dynamic 分别有什么作用?

7、动态绑定

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

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

10、id和NSObject*的区别

11、如何令自己所写的对象具有拷贝功能?

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

13、用@property声明的NSString(或NSArray,NSDictionary)经常使用copy关键字,为什么?如果改用strong关键字,可能造成什么问题?

14、UIView和 CALayer是什么关系?

15、static有什么作用?

底层:

16、main()之前的过程有哪些?

17、KVO基本原理?

18、Swift 下的如何使用 KVC?

19、:Swift有哪些模式匹配?

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

21、静态库的原理是什么?你有没有自己写过静态编译库,遇到了哪些问题?

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

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

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

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

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

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

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

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

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

31、RunLoop是什么?

32、假设有一个字符串aabcad,请写一段程序,去掉字符串中不相邻的重复字符串,即上述字符串处理之后的输出结果为:aabcd
@autoclosure(自动闭包)

34、iOS app启动如何优化?

35、swift面试题:

36、怎样防止反编译?

37、UITableView性能优化,超实用

线程:

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

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

40、ViewController生命周期

41、iOS 中的多线程

42、内存管理的几条原则时什么?按照默认法则.那些关键字生成的对象
需要手动释放?在和property结合的时候怎样有效的避免内存泄露?
谁申请,谁释放

43、dispatch_barrier_async的作用是什么?

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

45、 不要阻塞主线程

http:

46、http与https的区别?

47、服务器能否知道APNS推送后有没有到达客户端的方法?
app:

48、1.什么方式可以看到上架App的头文件?

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

50、IAP内购中虚拟货币导致审核无法通过的问题?

资料收录

一个正在努力的iOS开发者!

喜欢iOS的关注我一起学习交流!

面试了12名开发者后,总结了60道 iOS面试题(建议收藏)相关推荐

  1. 面试被问Mysql没答上来?阿里P5:总结了55道常见面试题,收藏一波

    转载自  面试被问Mysql没答上来?阿里P5:总结了55道常见面试题,收藏一波 正文开始前,分享阿里 P8 高级架构师吐血总结的 <Java 核心知识体系&面试资料.pdf>, ...

  2. 经过阿里,百度一面,二面后,我总结了150道iOS面试题

    经过阿里,百度一面,二面后,我总结了150道iOS面试题. 金三银四已经过去,根据统计,很多人都会选择在三月四月跳槽,原因有很多,企业年后会有大量员工离职,员工觉得老公司待遇不怎么样?薪资不够高,想换 ...

  3. 作为一名软件测试工程师,需要具备哪些能力?(建议收藏/深度好文)

    2020年,软件测试行业还值得入行吗? 行业的现状及前景 那么处于2020年,软件测试这个行业又将如何发展呢?我谈一下几点,如果你处在这个行业,一定能体会到我说的对不对. 1. 表面"衰落& ...

  4. 调查了6万多名开发者后,我们发现了这些...

    关注.星标公众号,直达精彩内容 作者 |  Naina Chaturvedi 译者 |  Rayden 策划 |  褚杏娟 近十年来,Stack Overflow 的年度开发者调查一直是针对全球编码人 ...

  5. 经典Android开发教程!面试字节跳动两轮后被完虐,附面试题答案

    前言 说起IT行业,大多数人脑海里反应出的第一个标签一定是"高薪",而说起程序员,大家更多想到的可能是: 秃顶.木讷.格子衫: 加班多.能赚钱.不花钱: 没对象-- 这难道就是传说 ...

  6. “睡服”面试官系列第十八篇之generator函数的语法(建议收藏学习)

    目录 1简介 1.1基本概念 1.2yield 表达式 1.3与 Iterator 接口的关系 2. next 方法的参数 3. for...of 循环 4. Generator.prototype. ...

  7. Java 面试问题总结(详细) —— MySql 模块(MySQL高级)(建议收藏)

    文章前言: 此篇文章为 MySql 模块复习,亦可以当做 MySQL 高级的学习,下面列出了一些常见的面试问题,不同于简单的增删查改,面试常问的更偏向于 MySQL 的底层,所以需要具体的去了解一下其 ...

  8. “睡服”面试官系列第二十篇之generator函数的异步应用(建议收藏学习)

    目录 1. 传统方法 2. 基本概念 2.1异步 2.2回调函数 2.3Promise 3. Generator 函数 3.1协程 3.2协程的 Generator 函数实现 3.3Generator ...

  9. PCB布线及后仿真验证过程(干货满满,建议收藏)

    一.布线的基本要求 布线次序考虑 1) 规则驱动布线遵循的基本步骤 定义禁布区,或控制区 若有规则约束,要求设置规则 试布线,评估单板是否可以布通,若不能布通,需要采用策略 Fanout后对覆盖率检查 ...

最新文章

  1. 转_前端开发技术概要
  2. 15.2. NFS Client Configuration
  3. 电脑服务器信息,电脑服务器怎么看模块信息
  4. 基于Echarts的HTML5 Canvas折线图柱状图DEMO演示
  5. dos命令操作mysql数据库的常用语句
  6. 移动端上传大文件到服务器,android上传大文件到服务器地址
  7. __setattr__,__getattr__,__getattribute__
  8. maven依赖下载失败问题
  9. 如何写出优雅的跨平台的C/C++代码
  10. Excel中的图片,突然全部消失不见,如何解决
  11. odoo开发笔记 -- 附件上传
  12. 数据安全风险分析及应对策略研究
  13. matlab中geoshow函数的使用/属性设置
  14. HTML+CSS实现炫酷的登录界面
  15. 在编程中常见的一些英语词汇
  16. 显示pycharm地图
  17. 游玩3ds游戏的N种方法
  18. java 游戏 弓箭手 法师 战士_酷酷爱魔兽战士弓箭手法师阵容搭配及职业特点介绍...
  19. 学习英语的好网站推荐
  20. 从零开始学习Ada(入门)

热门文章

  1. 千锋云计算毕业设计论文:论文选题开题报告二
  2. 如何设计高精度温度传感电路
  3. 【数据分发服务DDS】软件定义汽车【一】- 概述
  4. python链接hbase模块_利用python访问Hbase(Thrift模块安装与测试)
  5. 信创版本电脑使用心得
  6. 电脑文件软件搬家迁移十大工具
  7. Crack the fySystem.dll
  8. 诺顿,扯你妈家的柴鸡蛋
  9. 做一次实实在在交互设计竞品分析吧
  10. 爬虫获取王者荣耀全英雄皮肤