面试题库将来跳槽用interview

iOS 面试题累计 (三)

2017-08-30  本文已影响476人  天空中的球

PS 初衷: 记录面试题不仅仅是为了针对于我们的面试,而是在有时候可以提醒在我们用某些东东的时候会自主的想这是为什么,从而避免一些 BUG 产生。

以下是从 CocoaChina 招人的事结了,放出面试题,分享一下 看到的面试题,个人不知道学习啥的时候看看,尝试解答。


@property(nonatomic, assign) void(^block)();

- (void)viewDidLoad {
   [super viewDidLoad];
   int value = 10;
   void(^blockC)() = ^{
       NSLog(@"just a block === %d", value);
   };

   NSLog(@"%@", blockC);
   _block = blockC;

}

- (IBAction)action:(id)sender {
   NSLog(@"%@", _block);
}

@property(nonatomic, weak) void(^block)();

- (void)viewDidLoad {
    [super viewDidLoad];

    void(^ __weak blockA)() = ^{
        NSLog(@"just a block");
    };

    _block = blockA;

}

- (IBAction)action:(id)sender {
    _block();
}
id    name    salary    manager_id
1    Noah    70000    NULL
2    西兰花    80000    1
3    椰菜花    80000    NULL
4    没钱花    80000    3

输出格式为:

name
西兰花
[UIView animateWithDuration:1 animations:^{
    self.view.backgroundColor = [UIColor yellowColor];
}];

下面这段代码可以用 self 吗?为什么?

- (void)doSomething {
    [BlockClass doSomethingUseBlock:^{
        NSLog(@"%@", self);
    }];
}


对以上部分问题进行解答


1-2 、 对 Block 及其关键字的理解

1、在 ARC 下直接打印处两个不一样的 block, _block 还是其本身值。
在 MAC 下直接 崩溃,注意此处是 assgin 的关键字,此时 _block 相当于是已经被释放了。
2、此处直接打印 “just a block”,在ARC下,本类内该 block 是没有被释放的。

4、考察我们的函数思维
- (void)testGetValueNumber:(NSInteger)testNumber {
    while (testNumber >= 10) {
        testNumber = [self getTotalValueNumberWithTestNumber:testNumber];
    }
}

- (NSInteger)getTotalValueNumberWithTestNumber:(NSInteger)number {
    NSString *numberStr = [NSString stringWithFormat:@"%ld",number];
    // 如果是个位数则直接返回
    if (numberStr.length < 2) {
        return number;
    }
    NSInteger allValue = 0;
    // 获取每一项的数
    for (NSInteger i = 0; i < numberStr.length; i++) {
        NSInteger locationNumber = [[numberStr substringWithRange:NSMakeRange(i, 1)] integerValue];
        allValue += locationNumber;
    }
    return allValue;
}
5、通过 runtime 添加的“关联对象”和类的实例变量有什么区别, 考察 Associated Objects 的理解。

这个问题其实,按我的理解可以划分为两个问题:

先理解 Associated Objects 实现原理,首先可以再次回顾 雷纯锋 所画的图:

Associated Objects 的理解
PS : 图源自: Objective-C Associated Objects 的实现原理

简而言之的说,访问的方式不一样的,用的场景不一样。

7、线程间的通信

此处看经典的两个例子:

 dispatch_async(dispatch_get_global_queue(0, 0), ^{
      dispatch_async(dispatch_get_main_queue(), ^{
              //回到主线程更新
      });
 });
// 创建 dispatch_group
dispatch_group_t group = dispatch_group_create();
// 添加到 group 中
dispatch_group_async(group, queue, ^{
    NSLog(@"block 1");
});
dispatch_group_async(group, queue, ^{
    NSLog(@"block 2");
});
dispatch_group_async(group, queue, ^{
    NSLog(@"block 3");
});

dispatch_group_notify(group, dispatch_get_main_queue(), ^{
    NSLog(@"end");
});

NSLog(@"go");
8、使用快速枚举迭代一个可变数组时需要注意什么问题?怎么避免?

不要在可变数组中直接删除,通过 倒叙遍历的方式避免。

9、什么是面向对象的多态性?

直接的说:对于不同对象响应同一个方法时做出的不同反应。
常见的场景:不同的子类共用父类的方法,或者这么说他们各自以自己的方式响应相同的消息 。
明显的好处: 如果父类有的方法,那么子类不能调用,那么每次都得子类自己再写一个方法,就显的有点麻烦啦。

13、在iOS开发中遇到那些类族(Class Cluster) ?如NSNumber这种。为什么需要这种设计方式?
最常见的类簇 Number
NSNumber *testChar = [NSNumber numberWithChar:’t’];
NSNumber *testInt = [NSNumber numberWithInt:10];
NSNumber *testFloat = [NSNumber numberWithFloat:20.0];
NSNumber *testDouble = [NSNumber numberWithDouble:1.0];
16、使用了ARC 是不是就等于没有内存泄漏了?如果不是的话请举例。
CGBitmapContextCreate(, , , , , , )
CGImageRelease(CGImageRef image)

这两者都是配套使用的哦,这个可能平时直接使用的不多的。

18、进程的内存布局是怎样的?

这一块可以再次回顾内存相关的东东: 对于内存的几点笔记

19、在 GCD 中,那几种场景会出现死锁的现象?怎么避免?

这个问题看到一篇不错的文章总结,直接巧这里: 说说GCD中的死锁
文章中举例说明了,我们可能遇到的三种场景:

话说自己真的好像基本没有遇到过哎,😓😓😓

20、怎么用 NSOperation 封装一个异步请求?这个Operation 需要放到NSOperationQueue 里调度的?
NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(request) object:nil];
 [operationQueue addOperation:operation];
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^(){
    NSLog(@"Main :%@",[NSThread currentThread]);
}];
[operation addExecutionBlock:^() {
    NSLog(@"Excution:%@", [NSThread currentThread]);
}];
[operation start];
// 最大并发数为4
[operationQueue setMaxConcurrentOperationCount:4];
21、CoreFoundation 和 Foundation 有什么区别?
#import <Foundation/Foundation.h>
#import <CoreFoundation/CoreFoundation.h>

注意下,Core Foundation 中 __bridge 关键字, 很强大的。

25、OC的数组是怎么实现的?和C的数组区别在?简单说一下即可。

这个问题我是懵逼的,然后找到了一篇文章 NSMutableArray原理揭露, 才略微了解下的,这篇文章可以拜读下,哈哈。

27、setNeedLayout 的作用是什么?

简单的说,调用 setNeedLayout 之后,后续会调用 layoutSubviews, 然后陆续调整 当前视图及子视图的布局。

28、什么时候用NS_OPTIONS,NS_ENUM?

此处参考: 详解枚举NS_OPTIONS与NS_ENUM的区别与格式, 说的很详细。直接用时感觉就是第二个的区别,也就是 NS_OPTIONS 可以同时用多个枚举值,而NS_ENUM 只能用一个枚举值

Finally: 自我吐槽

发现自己从事 iOS 工作也算有一段时间啦, 发现现在和去年好像是差不多的水准,除了业务能力熟悉了下,技术水准貌似木有提高哎,涉及到稍微底层还是懵逼哦,😓😓😓,只能自我安慰其他非技术方面有些进步啦。。。

上一篇下一篇

猜你喜欢

热点阅读