zoukankan      html  css  js  c++  java
  • iOS面试

    1假设有三个对象,一个父类的父类,一个父类和一个子类。父类的父类持有父类的引用(retain),父类持有子类的引用(retain),子类持有父类的引用(retain)。父类的父类释放(release)父类,解释下会发生什么。

    BC循环引用。

    2一个空指针(nil pointer)调用了一个方法会发生什么?野指针错误

    3为什么retainCount绝对不能用在发布的代码中?请给出两个相对独立的解释

    因为retaincount受到时间和framework影响太大不能准确反映内存的引用计数。

    retaincount在arc中没有可用的API。

    4请说明一下你查找或者解决内存泄露的处理过程。这个可以深入了解面试者对内存管理方面的知识,instruments的运用及其调试的处理过程

    5解释下自动回收池(autorelease pool)在程序运行时是如何运作的

    6当处理属性申明的时候,原子(atomic)跟 非原子(non-atomic)属性有什么区别?

    7在C语言中,你如何能用尽可能短的时间来倒转一个字符串?

    8遍历一个NSArray和一个NSSet,哪一个更快?nsset,因为hash实现查找。

    9解释代码签名(code signing

    10Objective-C中的posing指的是什么?扮演。

    11列举标准Xcode版本中的6个工具

    12copy跟retain有什么区别?

    13

    执行如下的代码会发生什么情况?
     
    1. Ball *ball = [[[[Ball alloc] init] autorelease] autorelease]; 

    14另一个内存相关的问题,这个问题的答案不能单用会崩溃来回答,我想要知道为什么崩溃,何时会崩溃。

    15列举5个iOS app的状态。未运行;未激活;激活;后台;挂起;

    16你认为这次面试能很好的体现出来你作为开发者的能力么?

    Checklist

    总结过些面试题,没坚持下去,后来把这些当 checklist,面试的时候实在没话聊的时候做个提醒,语言、框架、运行机制性质的:

    [※]@property中有哪些属性关键字?

    [※]weak属性需要在dealloc中置nil么?

    [※※]@synthesize和@dynamic分别有什么作用?

    [※※※]ARC下,不显示指定任何属性关键字时,默认的关键字都有哪些?

    [※※※]用@property声明的NSString(或NSArray,NSDictionary)经常使用copy关键字,为什么?如果改用strong关键字,可能造成什么问题?

    [※※※]@synthesize合成实例变量的规则是什么?假如property名为foo,存在一个名为_foo的实例变量,那么还会自动合成新变量么?

    [※※※※※]在有了自动合成属性实例变量之后,@synthesize还有哪些使用场景?

    [※※]objc中向一个nil对象发送消息将会发生什么?

    [※※※]objc中向一个对象发送消息[obj foo]和objc_msgSend()函数之间有什么关系?

    [※※※]什么时候会报unrecognized selector的异常?

    [※※※※]一个objc对象如何进行内存布局?(考虑有父类的情况)

    [※※※※]一个objc对象的isa的指针指向什么?有什么作用?

    [※※※※]下面的代码输出什么?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @implementation Son : Father
    - (id)init
    {
        self = [super init];
        if (self) {
            NSLog(@"%@", NSStringFromClass([self class]));
            NSLog(@"%@", NSStringFromClass([super class]));
        }
        return self;
    }
    @end

    [※※※※]runtime如何通过selector找到对应的IMP地址?(分别考虑类方法和实例方法)

    [※※※※]使用runtime Associate方法关联的对象,需要在主对象dealloc的时候释放么?

    [※※※※※]objc中的类方法和实例方法有什么本质区别和联系?

    [※※※※※]_objc_msgForward函数是做什么的,直接调用它将会发生什么?

    [※※※※※]runtime如何实现weak变量的自动置nil?

    [※※※※※]能否向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实例变量?为什么?

    [※※※]runloop和线程有什么关系?

    [※※※]runloop的mode作用是什么?

    [※※※※]以+ scheduledTimerWithTimeInterval...的方式触发的timer,在滑动页面上的列表时,timer会暂定回调,为什么?如何解决?

    [※※※※※]猜想runloop内部是如何实现的?

    [※]objc使用什么机制管理对象内存?

    [※※※※]ARC通过什么方式帮助开发者管理内存?

    [※※※※]不手动指定autoreleasepool的前提下,一个autorealese对象在什么时刻释放?(比如在一个vc的viewDidLoad中创建)

    [※※※※]BAD_ACCESS在什么情况下出现?

    [※※※※※]苹果是如何实现autoreleasepool的?

    [※※]使用block时什么情况会发生引用循环,如何解决?

    [※※]在block内如何修改block外部变量?

    [※※※]使用系统的某些block api(如UIView的block版本写动画时),是否也考虑引用循环问题?

    [※※]GCD的队列(dispatch_queue_t)分哪两种类型?

    [※※※※]如何用GCD同步若干个异步调用?(如根据若干个url异步加载多张图片,然后在都下载完成后合成一张整图)

    [※※※※]dispatch_barrier_async的作用是什么?

    [※※※※※]苹果为什么要废弃dispatch_get_current_queue?

    [※※※※※]以下代码运行结果如何?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        NSLog(@"1");
        dispatch_sync(dispatch_get_main_queue(), ^{
            NSLog(@"2");
        });
        NSLog(@"3");
    }

    [※※]addObserver:forKeyPath:options:context:各个参数的作用分别是什么,observer中需要实现哪个方法才能获得KVO回调?

    [※※※]如何手动触发一个value的KVO

    [※※※]若一个类有实例变量NSString *_foo,调用setValue:forKey:时,可以以foo还是_foo作为key?

    [※※※※]KVC的keyPath中的集合运算符如何使用?

    [※※※※]KVC和KVO的keyPath一定是属性么?

    [※※※※※]如何关闭默认的KVO的默认实现,并进入自定义的KVO实现?

    [※※※※※]apple用什么方式实现对一个对象的KVO?

    [※※]IBOutlet连出来的视图属性为什么可以被设置成weak?

    [※※※※※]IB中User Defined Runtime Attributes如何使用?

    [※※※]如何调试BAD_ACCESS错误

    [※※※]lldb(gdb)常用的调试命令?

    这些小题可以做为讨论的入口,根据面试者的回答再继续聊下去。其中一些题比较底层,是留给屌屌的面试者或者试探评级用的,一般情况并不是重点的考察内容。

    一个区分度很大的面试题

    考察一个面试者基础咋样,基本上问一个 @property 就够了:

    • @property 后面可以有哪些修饰符?

    • 什么情况使用 weak 关键字,相比 assign 有什么不同?

    • 怎么用 copy 关键字?

    • 这个写法会出什么问题: @property (copy) NSMutableArray *array;

    • 如何让自己的类用 copy 修饰符?如何重写带 copy 关键字的 setter?

    这一套问题区分度比较大,如果上面的问题都能回答正确,可以延伸问更深入点的:

    • @property 的本质是什么?ivar、getter、setter 是如何生成并添加到这个类中的

    • @protocol 和 category 中如何使用 @property

    • runtime 如何实现 weak 属性

    每个人擅长的领域不一样,我们一般会从简历上找自己写擅长的技术聊,假如自己并不是很熟,最好别写出来或扯出来,万一面试官刚好非常精通这里就露馅了。

  • 相关阅读:
    flex + bison multiple parsers
    Educational Codeforces Round 95 (Rated for Div. 2)
    python学习笔记 day20 序列化模块(二)
    python学习笔记 day20 常用模块(六)
    python 学习笔记 常用模块(五)
    python学习笔记 day19 常用模块(四)
    python学习笔记 day19 常用模块(三)
    python学习笔记 day19 常用模块(二)
    python学习笔记 day19 作业讲解-使用正则表达式实现计算器
    python学习笔记 day19 常用模块
  • 原文地址:https://www.cnblogs.com/linxiu-0925/p/5637994.html
Copyright © 2011-2022 走看看