美文网首页面试
iOS 2019年招人面试题以及答案

iOS 2019年招人面试题以及答案

作者: __西门吹雪 | 来源:发表于2019-02-14 16:58 被阅读201次

    看到一篇文章,里边木有面试题答案,就小总结了一下。传送门

    初次编写,如有不对之处请下方留言共同学习,拜谢了~!!!

    希望对大家有所帮助,对我自己有所帮助

    话不多说直接正题:

    1、我们说的Objective-C是动态运行时语言是什么意思?
          首先,这个问题涉及到两个概念,运行时和多态。
          简单来说,运行时机制使我们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方法。 
          好吧,上边是我复制的。我认为就是OC的动态特性。主要是:动态类型(如id),动态绑定,动态加载。之所以叫动态,
    就是必须运行到时(run time)才会去做一些事情。
    

    2、讲一下MVC和MVVM,MVP?
       好吧这个就是没吃过猪肉还没见过猪跑嘛?我最常用的是MVC。^^.
       简单来说MVC(Model View Controller)就是模型(Model)- 视图(View)-控制器(Controller)的缩写,
    Model是用来处理数据,View是用来展示界面,Cotroller是用来调节他们两者之间的交互。
    这个是最常用的。但是View和Model之间的直接交互,就导致了View和Model之间的耦合性比较大。
       MVP (Model View Presenter)是MVC模式的变种,使用Presenter代替了Controller,而且改变了数据流向
    View和Model之间不再直接进行交互,而是通过Presenter来进行的。总体来说Presenter同时持有View和Model。
    优点:整体框架分层清晰,降低了耦合度。
    缺点:需要加入Presenter来作为协调Model和View的桥梁,同时也导致了Presenter的臃肿。在维护起来不方便。
       MVVM(Model View View-Model ViewModel)其实是对MVP的一种改进,他将Presenter替换成ViewModel,
    并通过双向数据绑定来实现视图和数据的交互。
    优点:使其数据流向更加清晰(脑补一下就是云对雨,x对风,大陆对长空)。一一对应起来。
    缺点:这种架构没有统一的实现方式,每个人各有特色。我接触过得各有不同。而且有一定的学习成本。(不懂得人去学习也得一周左右吧,不抬杠,学过之后再来回话。"大牛请忽略")
    

    3、为什么代理要用weak?代理的delegate和dataSource有什么区别?block和代理的区别?
      3.1 因为用weak修饰的对象引用计数不会+1.好吧。说白了就是不会造成循环引用。0.0~!
      3.2 delegate偏重于用户交互的回调。dataSource偏重于数据的回调。
      3.3 首先共同点都是实现回调的方式。算了直白点说就是一个一对一,一个一对多。一个编写简单,一个实现繁复。
    对于什么时候用block什么时候用代理简单来说就是公共接口,方法较多,回调类型较多可以选择用代理。对于异步和简单的回调用block好一点。
    

    4、属性的实质是什么?包括哪几个部分?属性默认的关键字都有哪些?@dynamic关键字和@synthesize关键字是用来做什么的?
      好吧。这个题很low,但是很考验人。不关心这些一般不知道
    4.1 属性的实质,包含哪些:
      @property = ivar + getter + setter;
      利用class_copyPropertyList 查看类的所有属性
      利用class_copyIvarList查看类的所有成员变量
      利用class_copyMethodList查看类的所有方法
    4.2 属性默认的关键字有哪些   (好吧,我也不知道。本体底部会有传送门)
      @dynamic告诉编译器,属性的setter与getter方法由用户自己实现。
      @synthesize的语义是如果你没有手动实现setter方法和getter方法,那么编译器会自动为你加上这两个方法。
    

    4.2请看这里 属性的默认关键字有哪些


    5、NSString为什么要用copy关键字,如果用strong会有什么问题?
      copy修饰的是深拷贝,改变源字符串,不影响copy的属性内容。
      strong修饰的属性就随着源字符串改变而改变了。
      这些都是说修饰可变类型字符串。当然不可变的就随意发挥了。尽量还是用copy。因为什么呢?因为如果你来回转换呢?哈哈
    
    

    7、如何令自己所写的对象具有拷贝功能?
      实现NSCoping协议。如果自定义的对象分为可变版本与不可变版本,那么就要同时实现 NSCopying与 NSMutableCopying协议。
    

    8、简述kvo、kvc、Delegate、通知,他们之间的区别?
      1、代理的效率比通知要高。
      2、代理比通知更加直接。
      3、kvo和通知,代理一样,都是负责通信的。kvo和通知没有返回值,而代理有返回值。
      4、代理是一对一,通知,kvo是一对多。
    

    9、include与#import的区别?#import与@class的区别?
      怎么说呢, include 是C预言中用来引用的关键字。反正我是没用过
      #import 是OC中用来代替 include的关键字。#import确保了同一个文件只能被导入一次,从而别面了使用 #include容易引起的重复导入问题。
      @class只是告诉编译器,后边遇到的这名称是类名,至于这个类是如何实现的暂时不考虑,用来解决线程锁死的问题。
      就相当于一个军队遇见了另外一个军对,打不打不无所谓,然后两军衣服不一样。纵横过去。
    

    10、nonatomic和atomic的区别?atomic是绝对的线程安全么?为什么?如果不是,那应该如何实现?
      nonatomic和atomic用来决定编译器生成的getter和setter操作是否为原子。
      atomic不是绝对的线程安全。因为什么呢,因为atomic的本意是指属性的存取方法是线程安全的,不是保证整个对象是线程安全的。
    

    如果不是,那应该如何实现?传送门

    是不是很枯燥无味?嗯,你被辞职了嘛?工作找好了嘛?


    11、Objective-C与C、C+++之间的联系和区别?
      OC与C的区别:OC中兼容C两者可以混合编程。OC是面向对象的,有类,对象的概念,C却木有。
      C是面向过程的语言。
      OC与C++的区别:
      1、继承。OC不可以多重继承,C++却可以
      2、函数调用。OC需要通过消息传递机制调用函数,C++却可以直接调用
      3、定型。OC是动态定型。C++是等着你去找他。是静态类型。
      4、接口。OC采用的是protocol协议。C++采用虚函数的形式。
      5、方法重载。OC不允许有同一个类中出现两个相同的方法名。C++中允许两个方法名相同。
      好吧。其实我也不知道,我百度的。 -_-!
    

    12、UICollectionView自定义layout如何实现?
      额。这个问题,不知道怎么说好。如何自定义。不就是继承UICollectionViewFlowLayout类实现字节想要实现的东西吗?
    

    13、进程和线程的区别?同步异步的区别?并行和并发的区别?
      这个问题怎么说呢,一步一步说
      进程和线程的区别:进程是资源分配和调度的一个独立单元。就相当于是公交车调度站。一个进程里边可以有多个线程,
    一个进程里边至少有一个线程,就相当于一个公交车调度站里最少有一辆公交车,也可以有多个公交车。
      同步异步的区别:同步是进程之间的关系不是相互排斥临界资源的关系,而是相互依赖的关系。
      异步是和同步相互对立的,同步是顺序执行,而异步是相互独立的。
      并行:并行是同是发生多个并发事件,具有并发的含义,但并发不一定并行。
    这个并行并发我也不太懂,应该是这样的。不对的话请自行百度。
    

    14、线程间通信?
      比如说,一个线程传递数据给另一个线程。
            一个线程执行完特定的任务后,转到另一个线程继续执行。
      比如最常见的sd图片加载。(脑补画面)好了,完成。
    
    

    15、GCD的一些常用的函数?(group,barrier,信号量,线程同步)
      下边有传送门,我常用的就是定时器,回到主线程,开一个分线程。搞一个runLoop。等等
    

    出现吧,皮卡丘

    16、如何访问并修改一个类的私有属性?
      1、通过KVC访问并修改。
      2、通过runtime访问并修改。
    

    通过kvc访问并修改 通过runtime访问并修改


    17、数据持久化的几个方案?
      1、plist文件 2、preference 3、归档 4、SQLite3(fmdb) 5、CoreData 
    

    18、说一下AppDelegate的几个方法?从后台到前台调用了哪些方法?第一次启动调用了哪些方法?从前台到后台调用了哪些方法?
      这个问题没什么说的,全靠自己平时积累。其实这个问题问了无非就是考验一下你有没有看过appDelegate而已。有没有做过启动页,有没有处理过其他事件。
      自行回去学习。
    

    19、NSCache优于NSDictionary的几点?
     1、 NSCache是线程安全的。
     2、当内存不足时NSCach会自动释放内存。
     3、NSCache可以指定缓存的限额,当缓存超出限额自动释放内存
    

    20、知不知道Designated Initializer?使用它的时候有什么需要注意的问题?
    这个问题可能好多人都不知道,也不理解他是啥意思,其实这个就是(指定初始化器)如果不懂,不知道,不清楚。
    而你又很想知道是撒,请读下文。
    

    耐心读完吧。亲


    21、实现description方法能取到什么效果?
      布吉岛。知道的请留言告知。谢谢。我理解的是用NSLog输出的时候会调用description的方法。具体能得到什么效果,自己试验一下吧。
    
    22、OC使用什么机制管理对象内存?
      这题应该考的是OC的内存管理,ARC和MRC。经过排查我看到了说是通过retainCount来管理的。布吉岛,我感觉这两点答上来应该不会差。
    

    OK!!!这个初级面试题基本就是这样。后续会有中级,高级的。如果有不同意见,或见解,请提出!共同进步。谢谢!

    相关文章

      网友评论

        本文标题:iOS 2019年招人面试题以及答案

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