iOS 3月面试笔记

原创 2018年04月14日 22:02:23

前言

最近在面试,记录一些有意思的面试题,也会把自己理解的答案记下来
原文链接

C语法

  • 1描述下下列代码在C语言中会打印出来什么?为什么?

    struct Test{
        int a;
        int array[];
    };
    int main(int argc, const char * argv[]) {
    
        struct Test test_array[] = {{1}, {2}, {3}};
        int sum = test_array[0].array[0] + test_array[1].a + test_array[2].a;
        printf("%d\n",sum);
        return 0;
    }
    

答案:7;在C中,在至少含有一个命名成员对象的结构体中,最后一个成员可以是不完全数组类型,大部分情况下,结构体的大小不会吧这个数组计算在内,而这个数组的偏移量一般是结构体大小,即此处的test_array[0].array[0]实际是test_array[1].a;

2 + 2 + 3 = 7.

基础部分

  • 1描述一下下列代码会打印出来什么?

    - (instancetype)init{
        if (self = [super init]) {
            NSLog(@"1");
            self.view.backgroundColor = [UIColor greenColor];
        }
        return self;
    }
    - (void)viewDidLoad {
        [super viewDidLoad];
        NSLog(@"2");
    }
    - (void)loadView{
        [super loadView];
        NSLog(@"3");
    }
    

答案:132,没什么好讲的,控制器的生命周期

  • 2描述下下列代码会打印出来什么?

    - (void)test{
    
        dispatch_group_t taskGroup = dispatch_group_create();
        dispatch_group_enter(taskGroup);
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            NSLog(@"1");
            dispatch_group_leave(taskGroup);
        });
        dispatch_sync(dispatch_get_main_queue(), ^{
            NSLog(@"4");
        });
        dispatch_group_notify(taskGroup, dispatch_get_global_queue(0, 0), ^{
            self.view.backgroundColor = [UIColor greenColor];
            NSLog(@"2");
        });
        NSLog(@"3");
    }
    

答案:编译不通过,里面出现了死锁和在非主线程进行UI操作.

  • 3以下代码在mrc环境运行,请回答会打印出什么,不用考虑下列代码需要release等操作

    - (void)test{
    
        Person *obj = [Person new];
        obj.name = @"张三";
        NSLog(@"%ld",[obj retainCount]);
        //这里修饰属性的是strong
        self.obj = obj;
        NSLog(@"%ld",[obj retainCount]);
        [obj copy];
        NSLog(@"%ld",[obj retainCount]);
    }
    

    答案:122,想考察引用计数

  • 4 下面代码执行会有什么问题?

    NSObject *obj = [NSObject new];
    
    [[NSUserDefaults standardUserDefaults] setObject:obj forKey:@"haha"];
    
    [[NSUserDefaults standardUserDefaults] synchronize];
    

答案:不能直接存储对象,会导致崩溃.

  • 5 以下代码在iOS arc环境下有什么问题?向数组中添加和删除元素有什么问题? atomic能保证对象是线程安全的吗?为什么?

    @property (copy, atomic) NSMutableArray <TradeRecordArrayModel *>*dataArray;
    

答案:copy会将可变数组变为不可变数组,向数组中增加或删除元素会崩溃.atomic仅仅修饰的是指针的线程安全,这里如果想保证对象的线程安全必须加锁,这里可以引出进一步考察锁.

进阶

  • 1.iOS提供了哪些数据存储方式?它们都适用于哪些应用场景?
  • 2.通过runtime添加的“关联对象”和类的实例变量有什么区别?使用时要注意什么,你使用runtime做过什么?
  • 3.NSOperation和GCD的区别是什么?前者多用于什么场景?
  • 4.使用ARC是否等同于没有内存泄漏?如果不是的话请举例
  • 5.如果你是苹果的开发者,KVO,通知,weak这些如何去实现呢?大概说下思路就可以.
  • 6.有完整创建过苹果证书并发布吗?

算法

  • 1.如何把下面的这个json数据转化为我们要显示的页面,请使用效率最高的办法,伪代码即可.

json数据

需要展示的数据

答案:链接

  • 2.不使用苹果官方的sort,或者NSSet,请将下列数组随机排序,友情提示:(arc4random()函数可以生成随机数)

答案:

    - (NSArray *)p_getRandomArray:(NSArray *)originArray{

        NSMutableArray *dataArray = [NSMutableArray arrayWithArray:originArray];
        NSMutableArray *randomArray = [NSMutableArray array];

        //随机次数
        NSInteger enumCount = dataArray.count;
        //随机池
        NSInteger randomPoolCount = enumCount;
        for (int i = 0; i < enumCount; i ++) {
            NSInteger randomIndex = (NSInteger)arc4random() % randomPoolCount;
            FYNumberPadModel *randomModel = dataArray[randomIndex];
            [dataArray removeObject:randomModel];
            [randomArray addObject:randomModel];
            randomPoolCount --;
        }

        return [randomArray copy];
    }
  • 3现在有这样一个需求,银联大约有200家银行,每家银行卡美工要求对应不同的背景(一共是四种),excel文件如下,假设用户会绑很多卡,请问如何做效率最高.(提示:1,excel文件 2,用户有很多卡(很多cell))

下图是美工提供的excel,RGBY表示四种颜色,前方的字母表示银行缩写

美工提供的excel,RGBY表示四种颜色,前方的字母表示银行缩写

页面效果

答案:把excel读取成字典的形式.但这里有很多可以优化的地方,例如可以建一个管理类的单例,这样我们可以利用缓存,缓存查找不到从磁盘获取,磁盘查找不到从原文件获取,然后银行卡页面销毁后我们再销毁单例就可以了.可以考察的地方很多.

  • 多线程与线程安全

2018年3月17日学习笔记

1、nth.child(n)选择器使用方法  //选择父级的第n个子元素。2、nth.child(2n)==nth.child(odd)  nth.child(2n+1)==nth.child(eve...
  • weixin_41762365
  • weixin_41762365
  • 2018-03-17 21:57:19
  • 340

2018年3月20日学习笔记

css中的盒子模型分为两类,标准盒模型(W3C)和怪异盒模型(ie)。标准盒模型即:盒子宽度= width+(padding-left + padding-right)+(margin-left + ...
  • weixin_41762365
  • weixin_41762365
  • 2018-03-20 14:43:22
  • 129

2018.3.8自学笔记

今天是三八妇女节,首先祝广大的妇女们节日快乐!今天的课比较多,所以晚上就只学了一节的内容,现在已经学到了CSS样式优先级这部分,首先要搞清楚什么是标签,类选择器,ID选择器,这些东西的概念并不难,但是...
  • huhaha24
  • huhaha24
  • 2018-03-08 22:16:05
  • 103

2018年3月19日面试题之1。

    2018年3月19日经朋友介绍寻得一家公司,进行面试。    可惜多年未做,手脚生疏,未能及时解答,顾此面试应该flase.    面试题如下:    1,创建两张表,有部门表,有员工表,并有...
  • kira1999
  • kira1999
  • 2018-03-20 09:20:34
  • 15

2018年3月25日学习笔记

实现Product和Category多对一的关系1.在Product类中增加Category属性2.在Product.hbm.xml中设置Category多对一的关系&amp;lt;many-to-o...
  • qq_41893158
  • qq_41893158
  • 2018-03-25 14:13:31
  • 112

2018年3月21日学习笔记

    昨天理解了变量提升跟函数提升的概念。今天抽时间特意写下来把自己理解的内容梳理整合。   1、变量提升所有的变量声明都会被提升到代码顶部。比如x=2;console.log(x);var x;会...
  • weixin_41762365
  • weixin_41762365
  • 2018-03-22 14:28:01
  • 75

iOS面试那点事

我在面试中遇到的一些问题 希望分享出来对大家有用1、题目:求1+2+…+n, 要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。其...
  • Edison_hou
  • Edison_hou
  • 2016-05-20 17:20:26
  • 489

3月16日培训笔记

一、下载OracleXE112_Win32.zip 安装-》输入口令(也就是登陆密码)然后完成PL/SQL开发工具安装; 二、配置网路服务:D:\oraclexe\app\oracle\product...
  • Su_tianbiao
  • Su_tianbiao
  • 2015-03-16 16:31:38
  • 402

【日记】2018.3.8

今天周四,早晨起大早去早市买了苹果,十二快八个苹果,放在阿姨那儿,就去了教研室。结果今早是我开的门哎。早晨去教研室喝了个牛奶,然后开始干活,早晨效率很高,把多对一制导的内容写完了。中午十二点十分回到宿...
  • rememberamour
  • rememberamour
  • 2018-03-08 22:21:20
  • 59

2017-3-2学习笔记

数组交换算法 常量创建后不可更改,可共享(类地址共享); 常量池中的字符串是唯一的; 每new一次都在堆中新建一个; String str=new String(“abc”)==>等于新建了2...
  • urielzj
  • urielzj
  • 2017-03-02 14:50:15
  • 127
收藏助手
不良信息举报
您举报文章:iOS 3月面试笔记
举报原因:
原因补充:

(最多只允许输入30个字)