iOS面试-今日头条

时间:2018年7月27日15:00
方式:视频面试
应聘岗位:iOS实习生

一面:
简单聊了一下(暖场),面试官说和我同专业(惊讶),人也非常随和,全程让人感觉很放松。

1.OC语言有什么特点?和其他语言(Java、Python)的区别?
答:动态语言、运行时特性、消息转发机制。

2.为什么说OC是动态的?
答:将对象类型的确定由编译期延迟到了运行时。

3.有没有用过分类?分类与扩展及匿名分类的区别?

4.self和super的区别?(super是保留关键字,不是指针)

5.定义一个对象,它的内存大小是多少?

6.能否动态地给对象添加属性?

7.atomic和nonatomic的区别?

8.@property(atomic,strong) NSMutableArray *array,这样写能否保证线程安全?答:
不能,atomic只针对getter和setter方法

9.如何保证线程安全?
答:使用信号量。

10.解释一下runloop。用runloop写个简单的接口(动手写代码,实现一个定位功能,要求单例、多线程实现、使用CLLocationManager。后来解释说因为我面试的时候使用的黑苹果,所以手写估计有点困难,故不了了之。面试官还说我们老板(导师)太抠了,额,我们导师挺好的)。

11.看你简历中有写道开发了两款小程序,那你知道小程序的实现原理吗?

二面:
同样,先问了个人情况,毕业后有什么打算(是否读博)?什么时候开始接触iOS的?什么时候能开始实习?(问到这我还以为这面是HR)

1.以下代码的输出结果?

dispatch_async(main_thread) {
      dispatch_sync (main_thread) {
          print("123")
      }
     print("456")
}

dispatch_async(main_thread) {
      dispatch_sync (global_thread) {
          print("123")
      }
     print("456")
}

2.说一下你做的APP中的功能亮点
答:聊天功能...

3.如何保证对方一定能接收到消息?
答:采用的轮询和远程推送

4.说一下远程推送的流程。

5.苹果怎么知道远程推送给哪台设备?又如何知道推送给哪个应用?

6.下面两段代码有什么问题吗?

//(这道题问的和前一个面试官一个)
@property(nonatomic, strong) NSArray *array;
@property(nonatomic, strong) NSObject *obj;
thread1: self.obj = [NSObject new];
thread2: [self.obj perform....];

[nil perform....];

7.APP里哪些地方用到了多线程(初始化应用数据)?如何保证线程安全?

8.编写一个函数,实现以下功能:“Float字符串 -> Float数字”。
题目不难,但写了得有半小时左右,还是基础不扎实。
答:

-(CGFloat)strToNum:(NSString *)str{
    CGFloat result=0.0f;
    CGFloat suffixNum=0.0f;
    bool isSuffix=false;
    int suffixCount=0;
    int pointCount=0;   
    NSArray *array=[NSArray arrayWithObjects:@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"."];
    for(int i=0;i1){
                return;
            }
        }
        else{
            int tNum=[c intValue];
            if(!isSuffix){//计算整数部分
                if(tNum>(CGFloatMax/10)){
                    return;
                }
                result=tNum+result*10;
            }
            else{ //计算小数部分
                suffixCount++;
                suffixNum=tNum+suffixNum*10;
            }
        }
    }
    suffixNum=suffixNum*1.0/(suffixCount);
    result=result+suffixNum;
    return result;   
}

面试官:
你写的代码里有几个问题:①判断非法字符的时候每次都要遍历,耗费资源,可以用ASCII码来判断;(我解释说起始开始有想到过,但是忘了具体怎么写了...)
②如果字符串中包含两个“.”呢?(这里面试官没有考虑周全,还应该判断字符串开头是否为“+”或“-”,以及是否包含多个这样的字符)
③没有考虑内存溢出的情况。如果是一个很长的字符串呢?如果小数部分很长呢?

9.最后问一个问题(转眼一看都快下午6点了):用过block吗?怎么解决循环引用的问题?
答:用weak属性

10.见过在block外面使用weak属性,然后在里面加strong的吗?为什么呢?
答:没见过。(一脸懵...)

总的来说,今日头条的面试体验还不错,面试官也都挺随和,注重面试者的基础。

你可能感兴趣的:(iOS面试-今日头条)