2020面试iOS真题,你能答出几道?

作者: lp_lp | 来源:发表于2020-11-11 15:36 被阅读0次

    事件起因

    含泪忠告:不要在周末没准备的情况下去luo面,不要去luo面,不要去luo面,不要去luo面。一旦被暴击,你的周末和自信心就彻底毁了。

    为啥我会这么说?到底咋回事呢?事情是这样的:

    这周双休,手机弹出某聘的消息,想着去看看目前iOS的概况,就投了简历,然后就开始愉快的玩手机,没一会儿,电话直接来了,问现在方便吗,想简单聊聊,了解一下。我一想,简单聊聊?可以啊,反正才一面,简单聊聊嘛。我就回了个:可以的。没想到,就是这三个字,让我的周末如坐针毡,内心受到了暴击。整个面试过程有的答案似是而非,有的只记得大概,有的直接挠头。到现在,我内心都还平静不下来,也急切的想把题目分享出来,让更多的人看到2020的真实情况。答案没有细细整理,只有思路,语言大家自己组织就好。

    注意了!目前正在准备面试和提升技术的iOS,可以加入!一起学习iOS交流技术 ,内推岗位!

    如果大家想加入的话,可以点击【社区】查看直接进入哦~

    来吧,一起来感受下我是如何受到暴击的吧!!!

    iOS面试题1∶谈谈你对KVC的理解?

    答:KVC|可以通过(key)直接访问对象的属性,或者给对象的属性赋值,这样可以在运行时动态的访问或修改对象的属性当调用setValue:属性值forKey: @"name"的代码时,,底层的执行机制如下∶

    1、程序优先调用set key>:属性值方法,代码通过(setter方法|完成设置。注意,这里的<key是指成员变量名,首字母大小写要符合(KVC)的命名规则,下同

    2、如果没有找到setName:|方法,KVC机制会检查(+(BOOL)accessInstancelariablesDirectly方法有没有返回VYES ,默认该方法会返回(VEs ,如果你重写了该方法让其返回NO的话,那么在这一步(KC 会执行(setValue: forUndefinedKey:)方法,不过一般开发者不会这么做。所以KVC机制会搜索该类里面有没有名为<kep)的成员变量,无论该变量是在类接口处定义,还是在类实现处定义,也无论用了什么样的访问修饰符,只在存在以<key命名的变量,KVC都可以对该成员变量赋值。

    3、如果该类即没有set<key>:方法,也没有(_<key>成员变量,KVC机制会搜索(_is<Key>)的成员变量。

    4、和上面一样,如果该类即没有set:方法,也没有_和_is成员变量,KVC机制再会继续搜索和is的成员变量。再给它们赋值。

    我的自信心 +1,心想,还行。

    iOS面试题2: oc中可修改和不可以修改类型?

    答:可修改不可修改的集合类,这个我个人简单理解就是可动态添加修改和不可动态添加修改
    一样。比如NSArray和NSMutableArray,前者在初始化后的内存控件就是固定不可变的,后者可
    以添加等,可以动态申请新的内存空间

    image

    iOS面试题3:熟悉哪些设计模式?

    答:眉头一皱,发现事情并不简单!!自信值开始降低~

    MVC 模式、单例模式、MVVM 模式、策略模式、适配器模式、模板模式、、、、、emmmm

    1.mvc 模式:model 保存应用模型和处理数据逻辑、view 负责 model 数据和交互控件的显示、
    controller 负责 model 和 View 之间的通讯
    2.单例模式:用一个静态方法返回这个类的对象。这个对象是全局唯一的。整个项目里面只开
    辟一块内层,比如登录之后获取的用户数据存储、NSNotificationcenter、NSUserdefaults,
    sharedApplication。
    缺点:这块内层直到项目推出时才能释放。
    优势:使用简单,延时求值,易于跨模块, 便于资源共享控制,方便传值和修改单例的属性

    iOS面试题4:怎么用 copy 关键字?

    答:用途:
    NSString、NSArray、NSDictionary 等等经常使用 copy 关键字,是因为他们有对应的可变类型:
    NSMutableString、NSMutableArray、NSMutableDictionary;
    block 也经常使用 copy 关键字,具体原因见官方文档:Objects Use Properties to Keep Track
    of Blocks:
    MRC 中,方法内部的 block 是在栈区的,使用 copy 可以把它放到堆区.在 ARC 中写不写都行:对于 block 使用 copy 还是 strong 效果是一样的,但写上 copy 也无伤大雅,还能时刻ᨀ醒我们:编译器自动对 block 进行了 copy操作。如果不写 copy ,该类的调用者有可能会忘记或者根本不知道“编译器会自动对 block进行了 copy 操作”,他们有可能会在调用之前自行拷贝属性值。这种操作多余而低效。
    copy 此特质所表达的所属关系与 strong 类似。然而设置方法并不保留新值,而是将其“拷 贝” (copy)。 当属性类型为 NSString 时,经常用此特质来保护其封装性,因为传递给设置方法的新值有可能指向一个 NSMutableString 类的实例。这个类是 NSString 的子类,表示一种可修改其值的字符串,此时若是不拷贝字符串,那么设置完属性之后,字符串的值就可能会在对象不知情的情况下遭人更改。所以,这时就要拷贝一份“不可变” (immutable)的字符串,确保对象中的字符串值不会无意间变动。

    image

    iOS面试题5:谈谈你对多线程开发的理解?ios中有几种实现多线程的方法?

    答:啊,这~,磨叽了半分钟,原理啊,记不太清了.....

    好处:
    1.使多线程可以把占据时间长的程序中的任务放到后台去处理
    2.用户界面可以更加吸引力,这样比如用户点击了一个按钮去触发某些事件的处理,
    可以弹出一个进度条来显示处理的进度
    3.程序的运行速度可能加快
    缺点:
    1.如果有大量的线程,会影响性能,因为操作系统需要在它们之间切换。
    2.更多的线程需要更多的内存空间。

    image

    iOS面试题6:ViewController生命周期?

    答:
    按照执⾏顺序排列:

    1. initWithCoder:通过nib⽂件初始化时触发。
    2. awakeFromNib:nib文件被加载的时候,会发生一个awakeFromNib的消息到nib
      文件中的每个对象。
    3. loadView:开始加载视图控制器⾃带的view。
    4. viewDidLoad:视图控制器的view被加载完成。
    5. viewWillAppear:视图控制器的view将要显示在window上。
    6. updateViewConstraints:视图控制器的view开始更新AutoLayout约束。
    7. viewWillLayoutSubviews:视图控制器的view将要更新内容视图的位置。
    8. viewDidLayoutSubviews:视图控制器的view已经更新视图的位置。
    9. viewDidAppear:视图控制器的view已经展示到window上。
    10. viewWillDisappear:视图控制器的view将要从window上消失。
    11. viewDidDisappear:视图控制器的view已经从window上消失。
    ![image](https://img.haomeiwen.com/i19704571/020e7fa4f456cffc.png?imageMogr2/auto-orient/strip|imageView2/2/w/234/format/webp)
    

    iOS面试题7:内存管理的几条原则时什么?按照默认法则.那些关键字生成的对象?

    答:
    需要手动释放?在和property结合的时候怎样有效的避免内存泄露?
    谁申请,谁释放
    遵循Cocoa Touch的使用原则;
    内存管理主要要避免“过早释放”和“内存泄漏”,对于“过早释放”需要注意@property
    设置特性时,⼀定要⽤对特性关键字,对于“内存泄漏”,一定要申请了要负责释放,
    要细心。
    关键字alloc 或new 生成的对象需要手动释放;
    设置正确的property属性,对于retain需要在合适的地方释放

    **........纯手打字

    本人自己整理的一些面试进阶资料,iOS底层视频+BAT面试专题PDF+核心笔记等资料+2020年《大厂最新常问iOS面试题+答案》希望能够帮助到大家提升技术。

    如果大家想要的话,可以点击【社区】查看直接哦~

    喜欢本文的话,不妨顺手给我点个小赞、评论区留言或者转发支持一下呗~

    相关文章

      网友评论

        本文标题:2020面试iOS真题,你能答出几道?

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