复杂面试归纳

1.简述你对缓存的实现和管理

首先:介绍一片博客里面对iOS的缓存做了很详细的说明:http://www.cnblogs.com/qiqibo/p/3520635.html

TCP和UDP

1.在通信协议中,TCP和UDP属于传输层协议  socket只是一种连接模式

2.TCP和UDP和最基本通信协议,其他协议基本上是基于这两个协议的,而用socket可以创建tcp和udp协议

3.tcp和udp 的主要区别是tcp可以提供可靠的数据选择

4.TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。

5.UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快


Cookies 和 Session的区别和共同点:

1.cookie和session的共同之处在于:cookie和session都是用来跟踪浏览器用户身份的会话方式。

2.cookie和session的区别是:

1)cookie数据存放在客户的浏览器上,session数据放在服务器上

2)cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,如果主要考虑到安全应当使用session

3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用cookie

4)单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。

5)如何选择:一般将登陆信息等重要信息存放为SESSION;其他信息如果需要保留,可以放在COOKIE中

手写单例的实现

+(AccountManager *)sharedManager {

static AccountManager *sharedAccountManagerInstance = nil; static dispatch_once_t predicate;

dispatch_once(&predicate, ^{

sharedAccountManagerInstance = [[self alloc] init];

});

return sharedAccountManagerInstance;

}

问题一: 遇到APP闪退问题怎么处理?

1.可以通过第三方查看奔溃日志,定位奔溃位置;

2.查看客户的测试环境和我们的测试环境差异,排除系统版本和软件版本的差异

3.排除是否存在内存溢出的问题,系统版本不匹配造成API使用不当的奔溃

4.自己重新测试复现,打断点查看,leak工具查看

问题二: 远程推送的原理步骤

原理: 公司服务器通过APNs服务器找到装有我们APP的设备,并给设备上面的这个应用推送消息; 我们需要配置推送证书获得DeviceToken,推送证书需要知道我们的BundleID和UDID,还有服务器的UDID    证书申请步骤(1.注册一个苹果远程通知证书,2.绑定BundleID和苹果ID,并添加我们需要的服务3.配置推送证书;4.需要导入一个crs签名文件;5,在钥匙串中下载好crs文件,load进行配置,配置好了就直接下载下来;6.双击进行安装,在代理方法中就可以获得tokenID)

问题三:kvc和kvo底层实现原理

kvc :键值编码

kvo:键值监听

kvo是基于runtime实现的,也是kvc 关键技术之一,是一种观察者模式,利用它可以很容易的实现视图组件和数据模型的分离,当数据模型的属性值发生改变之后,监听器的视图组件就会被激活,激发时回调监听器自身

kvc 设置属性时,会优先调用set方法,如果没有该方法,则优先考虑搜索带下划线的变量,如果仍然没有则搜索成员变量,如果也没有,则会抵用undefinekey方法,如果没有实现这个方法,则会直接奔溃

kvc 读取属性时,会优先调用getter方法,如果没有则会优先搜索带下划线的成员变量,如果没有则会调用同名成员变量,最后还没有搜索到的话,则会调用undefinekey这个方法,如果没有实现,就会奔溃

kvc 可以用来访问系统的私有属性 (列如 tabbar)

问题四:sqlite异步请求数据  ??

1.直接在请求数据时,开启一个异步线程进行数据请求,数据请求回来之后,通过线程间的通信回到主线程刷新UI

问题二:怎么样对tableview进行性能优化

1.适当的对cell进行复用

2.正确的缓存,复用图片和数据

3.在调用比较频繁的方法中,尽量减少逻辑计算时间 (把一些计算属性交给模型处理

,cell只负责展示数据)

4.对cell的高度进行缓存,不要重复计算(在模型中重写cellHeight的getter方法)

5.尽量避免在cell上使用图形特效 (图形越多,cell上面的UI组件渲染越慢)

6.减少cell的层次结构,可以使用coreText进行绘图,cell的内容为图片显示.

7.减少不必要的cell 显示和网络请求


问题七:SDWebImage的底层实现

SDWebImage开始下载任务,先进入SDWebImageManager-downloadWithURL:delegate:options:userinfo:   交给SDImageCache从缓存中查找图片是否已经下载,queryDiskCacheForKey:delegate:userinfo ;如果缓存中有图片,就会通过代理回调给SDWebImage并通过UIImage+webCache等前端展示图片;  如果缓存中没有,那么会生成NSInvocationOperation添加到队列中开始去沙盒中查找,在沙盒中是根据图片的URLKey进行图片的读取的,这一步是在NSOperation子线程中进行操作的,所以如果读取到沙盒中有图片,会回到主线程结束回调 ;如果沙盒中读取不到图片,说明所有的缓存和沙盒中都没有该图片,需要下载图片,接着回调imageCache:didNotFindImageForKey:userInfo; 并重新生成一个下载器SDWebImageDownloader开始下载图片;图片下载是由NSURLConnection来完成的,实现相关的delegate来判断图片下载状态

问题八:AFNetworking的底层实现

首先,AFNetworking这个库是在NSURLSession和NSURLConnection的基础上进行封装的,逻辑简单清楚,设计思想也比较好;,

NSURLConnection是苹果IOS2.0之后推出的用于加载URL资源的API,使用比较简单,分为同步和异步请求,同步请求和异步请求的底层实现都是一样的,都是告诉系统请求一个URL资源,系统会有自己的私有线程去load资源,在load完成之后告诉调用者.唯一的不同是,同步会阻塞线程,然后程序一直等待,直到load完成,一般不会再主线程中调用同步方法,这样会阻塞用户的交互.  而异步方法,在程序调用完成之后就不用管了.程序还会继续往下执行,在load 完成之后会通知调用者,通知调用者的方式有两种,一种是通过代理,系统会在connection的调用线程中通知代理,第二种是queue方式,系统会在指定的queue中通知调用者

AFNetworking是利用异步加载数据的方法,通过代理方式放回给调用者;首先请求调用必须有一个线程来执行.那么我们必须要处理这个请求在哪个线程中执行,因此AFNetworking就包含有connection和nsoperation;当然只满足于这两点显然是不够的,线程的并发数难以控制,这样就得引入NSOperationQueue来管理线程并发,然而在数据量比较大,线程比较多的情况下,线程之间的load速度不一样,一个线程的load任务完成之后,就只能等待其他线程的执行,比较浪费时间,因此可以让NSOperation去通知一个共同的线程去执行NSOperation的load方法;最后AF的模型为 NSConnection+NSOperation+NSOperationQueue+CommentNSTread

我的理解:

AFNetworking内部由NSURLSession实现,AFHTTPSessionManager的接口GET/POST,其内部实现如下:

1、调用AFURLRequestSerialization的接口,对参数进行处理

2、拿到参数已经处理好的NSURLRequest,调用父类AFURLSessionManager的接口,创建任务

3、resume

注:在执行resume方法时,此处用到Swizzling Method,详情见AFURLSessionManager.m文件中的_AFURLSessionTaskSwizzling类

其中第2步的父类接口内部实现如下:

1、直接拿到NSURLSession执行task(在AFURLSessionManager的构造方法中,给它设置了NSURLSession属性,并且设置了NSOperationQueue且最大并发数为1,设置为NSURLSession的代理)

2、将NSURLSession与AFURLSessionManagerTaskDelegate相关联(通过NSProgress关联),进行上传/下载进度回调

3、当NSURLSession任务执行完毕后,AFURLSessionManager将代理任务下发给AFURLSessionManagerTaskDelegate,TaskDelegate调用AFURLResponseSerialization的接口进行JSON解析,进行失败/成功回调

其中AFURLResponseSerialization的接口内部由NSXMLParser/NSJSONSerialization实现,根据我们服务器数据的不同进行不同解析。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,184评论 11 349
  • 一、深复制和浅复制的区别? 1、浅复制:只是复制了指向对象的指针,即两个指针指向同一块内存单元!而不复制指向对象的...
    iOS_Alex阅读 1,358评论 1 27
  • 如果你以为明星只会拍戏,唱歌,那你就错了,如今,娱乐圈不少明星开始在淘宝上开店。 吴昕―― 小飞象Orfila 淘...
    娱乐快讯阅读 292评论 0 0
  • 01/ 故事的起因是上个周末因为很偶然的原因,在医院顺手做了一个乳腺检查。 起初我是拒绝的,一方面是性格比较害羞,...
    南蓂阅读 5,425评论 129 125
  • 嗯,没什么想写的,脑子很乱,不同的人有不同的活法,我不能勉强南行的人陪我向北,有些路自己走,虽然孤独,但可贵的也是...
    我会发光啊idol阅读 179评论 0 0