62道经典 iOS面试题
前言:
每年三四月份都是招聘高峰期,也就是我们说的金三银四,很多想换工作的职场人士都会选择在此时换一份工作,毕竟一年之计在于春,对于公司和个人而言都是一个新的开始。
今年受疫情的影响,各行各业都举步维艰,然而做为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优点:低耦合,可重用性,独立开发,可测试
作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:413038000,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!
三、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框架没有提供发送附件的功能,需要自己实现
实现方法,把文件上传到文件服务器,上传成功后获取文件保存路径,再把附件的路径发送给好友
十二、是否使用过环信,简单的说下环信的实现原理
环信是一个即时通讯的服务提供商
环信使用的是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性能优化,超实用
线程:
37、 不要阻塞主线程
38、谈谈你对多线程开发的理解?ios中有几种实现多线程的方法?
39、进程和线程的区别?同步异步的区别?并行和并发的区别?
40、ViewController生命周期
41、iOS 中的多线程
42、内存管理的几条原则时什么?按照默认法则.那些关键字生成的对象
需要手动释放?在和property结合的时候怎样有效的避免内存泄露?
谁申请,谁释放
43、dispatch_barrier_async的作用是什么?
44、如何用GCD同步若干个异步调用?(如根据若干个url异步加载多张图片,然后在都下载完成后合成一张整图)
http:
46、http与https的区别?
47、服务器能否知道APNS推送后有没有到达客户端的方法?
app:
48、1.什么方式可以看到上架App的头文件?
49、iOS iAP内购审核可能失败的问题
50、IAP内购中虚拟货币导致审核无法通过的问题?
62道经典 iOS面试题相关推荐
- 71道经典Android面试题和答案,重要知识点都包含了
更多源码下载,请关注微信公众号:互联网技术分享 面试题 1. 下列哪些语句关于内存回收的说明是正确的? (b ) A. 程序员必须创建一个线程来释放内存 B.内存回收程序负责释放无用 ...
- 30道经典SQL面试题讲解(11-20)
本篇节选自书籍<对比Excel,轻松学习SQL数据分析>一书,主要讲解数据分析面试中常见的30道SQL面试题.1-10题见:30道经典SQL面试题讲解(1-10) 11 行列互换 现在我们 ...
- 20道经典Redis面试题
前言 整理了20道经典Redis面试题,希望对大家有帮助. 1. 什么是Redis?它主要用来什么的? Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开 ...
- 这八道经典指针笔试题你都会做嘛?
本文详细介绍了八大指针经典笔试题,内涵盖指针大部分的用法, 全部了解掌握其原理之后对指针的学习大有帮助!!! 对指针掌握 也就掌握了内存,C语言也就没有什么更绕的了 详解八道经典指针笔试题 一.八道经 ...
- 万字长文,62道Java核心面试题,一次性打包送给积极向上的你
先看再点赞,给自己一点思考的时间,微信搜索[沉默王二]关注这个靠才华苟且的程序员. 本文 GitHub github.com/itwanger 已收录,里面还有一线大厂整理的面试题,以及我的系列文章. ...
- 50道经典计算机网络面试题
50道经典计算机网络面试题 1. 说说HTTP常用的状态码及其含义? 思路: 这道面试题主要考察候选人,是否掌握HTTP状态码这个基础知识点. 不管是不是面试需要,我们都要知道,日常开发中的这几个状态 ...
- 备战金三银四,2021最全100道高频iOS面试题分享上(含答案)
原作者:执笔续春秋 iOS面试题 本面试题为个人使用版本,如后续流传出去,请转发的朋友务必注释一下,答案正确性有待商榷,本人的答案不代表权威,仅仅是个人理解. 文章内部有写混乱,将就着看吧.另外大部分 ...
- 100道经典软件测试笔试题(附答案)一次性查缺补漏个够
千呼万唤始出来,很多群友说我看了这么多面试题,但是公司要笔试怎么办?有没有能够笔试给我们练练手,这边我也是特意帮大家整理了这么100道软件测试的笔试题,答案在最后,试试自己能答对多少吧!需要更多的关于 ...
- 【Vue面试专题】50+道经典Vue面试题详解!
目录 前言 相关学习资源 01-Vue组件之间通信方式有哪些 02-v-if和v-for哪个优先级更高? 03-能说一说双向绑定使用和原理吗? 04-Vue中如何扩展一个组件 05-子组件可以直接改变 ...
最新文章
- 通过 Mysql 官网配置更新本地的mysql源
- Appium的环境搭建和配置
- 区块链:游戏规则的改变者
- Python中__str__和__repr__
- Java-二分查找算法
- python excel 模块 性能_【xlwings1】Python-Excel 模块哪家强
- jQuery 选择器和筛选
- Chronicle 已死,凶手是谷歌!
- 将指定文件中的空格或换行删除(可选是否创建一个新文件)
- 20191114每日一句
- 杀毒软件可能令企业用户陷入更大危机
- 联想台式计算机驱动程序,联想键盘驱动程序
- 1-7 华为HCNA认证eNSP基础A
- tpac100控制器设置教程_TP-link AC100控制器配置的详细方法
- Mac打开终端自动运行命令
- CTU Open Contest 2019 G. Beer Mugs 异或维护奇偶性
- xml与txt文件格式互换
- JavaSE习题 用Java打印九九乘法口诀表
- 一些android论坛
- ROS 通信机制(已整理)