美文网首页面试iOS Developer
每天10道面试题2016.6.27

每天10道面试题2016.6.27

作者: 三秒嗨 | 来源:发表于2016-06-27 20:06 被阅读173次

    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*万能指针相似
    具有运行时的特点,运行时候才确定对象的类型
    编译的时候不会报错。
    

    相关文章

      网友评论

        本文标题:每天10道面试题2016.6.27

        本文链接:https://www.haomeiwen.com/subject/kuuzdttx.html