1.音视频方向有了解过什么东西么?
2.简历中写了足迹绘制多边形的,介绍下如何绘制的。曲线是怎么绘制的?
使用CAShapeLayer进行绘制,比如使用
3.简历中写了动态贴纸相关的,介绍下实现原理。
4.有一个列表页,数据有很多种类型,类型在产品迭代中会增加,对应的每个cell上都会有很多种操作(比如cell会代理出去),设计一种模式,要求简洁,实现这种结构。
可以通过工厂模式进行设计,然后通过分类,或者将方法抽离成一个工具类,进行方法的操作和扩展。
5.介绍简历中写的直播业务中相对复杂业务的实现逻辑。中间穿插几个问题:1、如果送礼后,网络比较差,服务端没有收到,这时候又送了一个礼物,如何处理?2、IM长连接你们用的什么协议?3、设置mask设置透明度有什么影响?
6.写快排。时间复杂度?什么时候时间复杂度是n2?
快速排序其实就是分而治之的方法。
7.堆的数据结构有什么特点?怎么去实现一个堆?如果有一个堆对象,它会有哪些方法,每个方法的参数、返回值和对应的功能是啥?
堆就是用数组实现的二叉树,所以它没有使用父指针或者子指针。堆根据“堆属性”来排序,“堆属性”决定了树中节点的位置。
算法题:
8.一个栈中元素的类型为整型,现在想将该栈从顶到底按从大到小的顺序排序,只许申请一个栈(也就是有两个栈)。除此之外,可以申请新的变量,但不能申请额外的数据结构。如何完成排序?例:输入[5,8,4,3,6],输出[8,6,5,4,3]
9.多线程有什么实际的应用么?
10.主线程同步sync到主线程为什么死锁?
11.什么队列可以死锁?
造成死锁的原因,串行中同步,还有就是线程互相依赖。
12.并发队列可以死锁么?
13.非主线程async到主队列中,这种场景为了啥,可以举几个例子。
为了在主线程中刷新UI。
安全+效率:因为UIKit框架不是线程安全的框架,当在多个线程进行UI操作,有可能出现资源抢夺,导致问题。其实:在子线程是不能更新UI的, 看到能更新的结果只是个假象。
比如addObject必须在一个线程进行操作,NSMutableArray是线程不安全的,当有多个线程同时对数组进行操作的时候可能导致崩溃或数据错误。
14.为啥不能在分类中添加属性?
ivars是objc_ivar_list(成员变量列表)指针;methodLists是指向objc_method_list指针的指针。在Runtime中,objc_class结构体大小是固定的,不可能往这个结构体中添加数据,只能修改。所以ivars指向的是一个固定区域,只能修改成员变量值,不能增加成员变量个数。methodList是一个二维数组,所以可以修改*methodLists的值来增加成员方法,虽没办法扩展methodLists指向的内存区域,却可以改变这个内存区域的值(存储的是指针)。因此,可以动态添加方法,不能添加成员变量。
15.以下代码的执行结果
并不会产生死锁,顺序执行,并且在dispatch_async
会开辟一个新的线程,同步执行,所以应该是10分钟。