每天10道面试题2016.6.27

1、ios线程并发需要注意什么

(1)多线程
CPU在同一时间只能执行一个线程,之所以看起来多个线程能同时进行工作,
这是因为CPU在多个线程之间来回切换的原因,如果cpu来回切换的速度够快,
就造成了多线程并发执行的假象。(所以线程不能开太多)
(2)资源共享
1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源
比如多个线程访问同一个对象、同一个变量、同一个文件
当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题(卖票存取款)
  解决方案:
互斥锁:@synchronized(锁对象) { // 需要锁定的代码  }
注意:锁定1份代码只用1把锁,用多把锁是无效的

1)NSLock(互斥锁)

2) NSRecursiveLock(递归锁)

条件锁,递归或循环方法时使用此方法实现锁,可避免死锁等问题。

3) NSConditionLock(条件锁)

使用此方法可以指定,只有满足条件的时候才可以解锁。

4)NSDistributedLock(分布式锁)
(原来有这么多的锁)

提个问题:如果某个ViewController里运行了一个Thread,Thread还没结束的时候,
这个ViewController被Release了,结果会如何? 
经过的的测试,Thread不结束,ViewController一直保留,不会执行dealloc方法。

2、iOS图片缓存怎么操作

SDWebImage底层实现有沙盒缓存机制,主要由三块组成
1、内存图片缓存
2、内存操作缓存
3、磁盘沙盒缓存
先从内存图片缓存查找是否有图片,如果有显示,内存缓存没有的话,添加队列从硬盘查找图片是否有缓存。
如果读到了图片,将图片添加到内存缓存中(如果空闲内存过小,会先清空内存缓存)
然后显示图片。如果硬盘还是没找到,说明所有的缓存都不存在该图片,需要下载图片,
图片下载完成保存到SDImageCache,内存缓存和硬盘缓存同时保存。

3、如何做App内存优化和代码优化

内存优化:
1、ARC管理内存
2、cell的重用
3、不要阻塞主线程
4、懒加载
5、Cache(图片缓存)
6、优化UITableView
正确使用`reuseIdentifier`来重用cells
·尽量使所有的view opaque,包括cell自身
· 避免渐变,图片缩放,后台选人
· 缓存行高
· 如果cell内现实的内容来自web,使用异步加载,缓存请求结果
·使用`shadowPath`来画阴影
· 减少subviews的数量
· 尽量不适用`cellForRowAtIndexPath:`,如果你需要用到它,只用一次然后缓存结果
· 使用正确的数据结构来存储数据
· 使用`rowHeight`, `sectionFooterHeight`和 `sectionHeaderHeight`来设定固定的高,不要请求delegate
7、正确处理数据存储(缓存、沙盒、归档、CoreData,数据库)
代码优化:
1、封装

4、MVC的理解与使用

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写
C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。 

5、JS和OC的交互

这个代理函数的主要工作就是做本地拦截和处理,比如你跟服务端协商了一个协议,这个协议也就是当webview上点击了某个按钮后,服务器该如何发送一个requset,当我们在这个函数里发现了这个requestString,然后调用相应的OC代码,就可以了,注意return NO的意思就是不执行webview上本应该有的跳转。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {

NSString *requestString = [[[request URL]  absoluteString] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding ];

NSLog(@"requestString=%@",requestString);

return NO;

}



那么我们也会遇到怎么调用webview里的js呢,这个就可以使用

[webView stringByEvaluatingJavaScriptFromString:@"js函数"];

文/梅庆(简书作者)
原文链接:http://www.jianshu.com/p/72d33c6d88fa
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

6、浅复制和深赋值的区别

NSString s1=@”111”;
NSString s2=s1;
S2=@”222”;
浅复制: s1,s2 都发生改变
深复制:就s2发生改变
浅复制:共享同一个内存空间,若内容发生改变 则两个变量都改变
(在有指针的情况下,只是增加了一个指针指向一个已经存在的内存空间)复制指针
深复制:把这个内容复制一遍 并且开辟了一段新的空间 两个数是在不同的内存空间里面
(增加一个指针并且申请了一个新的内存)

7、利用Socket建立网络连接的步骤

(建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。

  套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。

  1、服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。

  2、客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。

  为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

  3、连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。

  而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。)

8、并发和并行

在单CPU系统中,系统调度在某一时刻只能让一个线程运行,虽然这种调试机制有多种形式(大多数是时间片轮巡为主),
但无论如何,要通过不断切换需要运行的线程让其运行的方式就叫并发(concurrent)。而在多CPU系统中
,可以让两个以上的线程同时运行,这种可以同时让两个以上线程同时运行的方式叫做并行(parallel)。

9、nil,Null的区别?

nil是OC的空 NULL是C语言的空(空对象是可以调用方法)
nil 只针对对象 
NULL 是针对指针
NSNull:在集合对象中,表示空值的对象
空指针是指该指针未指向一块有意义的内存区。如int *p; int *p = NULL;
Objective-C在C的表达不存在的基础上增加了nil。nil是一个指向不存在的对象指针。
Foundation定义了NSNull,即一个类方法+null,它返回一个单独的NSNull对象。NSNull与nil以及NULL不同,因为它是一个实际的对象,而不是一个零值。
Nil被定义为指向零的类指针。
http://www.cocoachina.com/industry/20140409/8128.html

10、id声明的对象有什么特征

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

推荐阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,107评论 29 470
  • 史上最全的iOS面试题及答案 iOS面试小贴士———————————————回答好下面的足够了----------...
    Style_伟阅读 2,338评论 0 35
  • ———————————————回答好下面的足够了---------------------------------...
    恒爱DE问候阅读 1,705评论 0 4
  • iOS面试小贴士 ———————————————回答好下面的足够了------------------------...
    不言不爱阅读 1,940评论 0 7
  • 1.OC的类可以多重继承吗?可以实现多个接口吗?要想实现类似多重继承如何实现?答:OC不可以实现多重继承。可以实现...
    欧辰_OSR阅读 1,960评论 0 30