每一年三四月份都是招聘高峰期,也就是咱们说的金三银四,不少想换工做的职场人士都会选择在此时换一份工做,毕竟一年之计在于春,对于公司和我的而言都是一个新的开始。ios
2021年,各行各业都举步维艰,然而作为iOS面试官的我也在精心准备的为公司招进优秀的iOS开发,期间收到了不少简历,也笔试了很多开发者,上一周咱们已经发了3个offer,因此先下手为强,咱们已经招满了人的职位,依旧陆陆续续也还有不少的简历投向咱们。程序员
前面一段时间给公司面试了10个iOS开发,本身总结了62道面试题,在此,我分享给你们,但愿你们在以后要找工做的朋友,个人这篇文章能给你有所帮助。面试
绘制一个UIView最灵活的方法就是由它本身完成绘制。实际上你不是绘制一个UIView,而是子类化一个UIView并赋予绘制本身的能力。数据库
做为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个个人iOS交流群:834688868,无论你是大牛仍是小白都欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 你们一块儿交流学习成长!编程
当一个UIView须要执行绘制操做时,**drawRect:方法就会被调用,覆盖此方法让你得到绘图操做的机会。当drawRect:**方法被调用,当前图形的上下文也被设置为属于视图的图形上下文,你可使用Core Graphic或者UIKit提供的方法将图形画在该上下文中。swift
MVVM即 Model-View-ViewModelapi
1.View主要用于界面呈现,与用户输入设备进行交互、缓存
2.ViewModel是MVVM架构中最重要的部分,ViewModel中包含属性,方法,事件,属性验证等逻辑,负责View与Model之间的通信安全
3.Model就是咱们常说的数据模型,用于数据的构造,数据的驱动,主要提供基础实体的属性。性能优化
MVVM主要目的是分离视图和模型
**MVVM优势:**低耦合,可重用性,独立开发,可测试
1.get是向服务器发索取数据的一种请求,而post是向服务器提交数据的一种请求
2.get没有请求体,post有请求体
3.get请求的数据会暴露在地址栏中,而post请求不会,因此post请求的安全性比get请求号
4.get请求对url长度有限制,而post请求对url长度理论上是不会收限制的,可是实际上各个服务器会规定对post提交数据大小进行限制。
1.使用多线程能够把程序中占据时间长的任务放到后台去处理,如图片,视频的下载;
2.发挥多核处理器的优点,并发执行让系统运行的更快,更流畅,用户体验更好;
1.大量的线程下降代码的可读性;
2.更多的线程须要更多的内存空间;
3当多个线程对同一个资源出现争夺的时候要注意线程安全的问题。
ios有3种多线程编程的技术:1.NSThread,2.NSOperationQueue,3.gcd;
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获取信息并提供内容给用户。
1.在支付宝开发平台建立应用并获取APPID
2.配置密钥
3.集成并配置SDK
4.调用接口(如交易查询接口,交易退款接口)
产生死锁的必要条件:1.互斥条件,2.请求与保持条件,3.不剥夺条件,4.循环等待条件。
解决办法:采用异步执行block。
1.使用CIFilter滤镜类生成二维码
2.对生成的二维码进行加工,使其更清晰
3.自定义二维码背景色、填充色
4.自定义定位角标
5.在二维码中心插入小图片
发送附件(图片,语音,文档...)时比较麻烦
XMPP框架没有提供发送附件的功能,须要本身实现
实现方法,把文件上传到文件服务器,上传成功后获取文件保存路径,再把附件的路径发送给好友
环信是一个即时通信的服务提供商
环信使用的是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异步加载多张图片,而后在都下载完成后合成一张整图)
4六、http与https的区别?
4七、服务器可否知道APNS推送后有没有到达客户端的方法?
4八、1.什么方式能够看到上架App的头文件?
4九、iOS iAP内购审核可能失败的问题
50、IAP内购中虚拟货币致使审核没法经过的问题?