[关闭]
@Rookie 2017-07-28T06:29:22.000000Z 字数 4692 阅读 1204

基础面试题1

未分类


1,说说你认识的Swift是什么?
Swift是苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Objective-C共同运行于MAC OS和iOS平台,用于搭建基于苹果平台的应用程序。
2,Swift比Objective-C有什么优势?
Swift全面优于Objective-C语言,性能是Objective-C的1.3倍,上手更加容易。
3,Swift的内存管理是怎样的?
Swift 使用自动引用计数(Automatic Reference Counting, ARC)来简化内存管理
4,Swift 支持面向过程编程吗?
它采用了 Objective-C 的命名参数以及动态对象模型,可以无缝对接到现有的 Cocoa 框架,并且可以兼容 Objective-C 代码,支持面向过程编程和面向对象编程
5,举例说明Swift里面有哪些是 Objective-C中没有的?
Swift引入了在Objective-C中没有的一些高级数据类型,例如tuples(元组),可以使你创建和传递一组数值。wift还引入了可选项类型(Optionals),用于处理变量值不存在的情况。可选项的意思有两种:一是变量是存在的,例如等于X,二是变量值根本不存在。Optionals类似于Objective-C中指向nil的指针,但是适用于所有的数据类型,而非仅仅局限于类,Optionals 相比于Objective-C中nil指针更加安全和简明,并且也是Swift诸多最强大功能的核心。
6,Swift 是一门安全语言吗?
Swift是一门类型安全的语言,Optionals就是代表。Swift能帮助你在类型安全的环境下工作,如果你的代码中需要使用String类型,Swift的安全机制能阻止你错误的将Int值传递过来,这使你在开发阶段就能及时发现并修正问题。
7,用Swift 打印一段代码?
println("hello, world”)
8,Swift中如何定义变量和常量?
使用let来声明常量,使用var来声明变量
9,用Swift定义一个数组和字典?
let emptyArray = String
let emptyDictionary = Dictionary()
10,为什么要在变量类型后面加个问号?
用来标记这个变量的值是可选的

1.delegate中的property使用以下哪个属性()

A.assign

B.retain

C.copy

D.strong

  1. A (正确)
  2. 避免循环引用!那么就要知道循环引用是怎么来的?比如,使用 tableview 的时候我们会设置他的 delete;可能一般情况下是你的 viewcontroller 对象;viewcontroller 持有着这个 tableview,如果 tableview 不使用 assign arc 使用 weak 的话,那么就造成了 tableview 持有viewcontroller,即 相互持有,最终结果是 viewcontroller 内存泄露,释放不掉了;这是一个很严重的问题!viewcontroller 是一个很大的对象!

2.关于Objective-C中属性的说明,以下错误的是()

A.readwrite是可读可写特性,需要生成getter方法和setter方法

B.readonly是只读特性,只有getter方法,没有setter方法

C.assign是赋值属性,setter方法将传入参数赋值给实例变量

D.retain表示持有特性,copy属性表示拷贝属性,都会建立一个相同的对象

  1. D (正确)

3.NSRunLoop的以下描述错误的是()

A.Runloop并不是由系统自动控制的

B.有3类对象可以被run loop监控:sources,timers,observers

C.线程是默认启动run loop的

D.NSTimer可手动添加到新建的NSRunLoop中

  1. C (正确)
  2. - 只有主线程默认启动run loop,子线程等需要手动启动,且在特定的场景下需要启动:需要使用NSTimer等。

4.iOS中导航设计模式有几种?()

A.平铺导航

B.标签导航

C.树形导航

D.模态视图导航

  1. ABC (正确)
  2. 平铺导航( UITabbarController ) 标签导航( UINavigationController ) 树形导航(UIPageViewController)

5.已知数据元素为(34,76,45,18,26,54,92,65),按照依次插入节点的方法生成一棵二叉排序树,则该树的深度为()

A.7

B.6

C.4

D.5

  1. D(正确)
  2. 根据二叉排序树的性质:
  3. 1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  4. 2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  5. 3)左、右子树也分别为二叉排序树;
  6. 所以根据性质:第一个数34为根节点;
  7. 第二个树:76>34,所以为34的右孩子;
  8. 第三个数45:因为34<45<76,所以4576的左孩子;
  9. 4个数1818<34所以为根节点的左孩子;
  10. 第五个数26:因为18<26<34,所以26在根节点的左子树上且为节点18的右孩子;
  11. 第六个数54:因为54>34,所以在根节点的右子树上,又45<54<76,所以5445的右孩子;
  12. 7个数92:因为92>76>34,所以9276的右孩子;
  13. 8个数65:首先64>34,所以为右子树上的节点,又65<76,所以为76左子树上的节点,又65>54>45,所以为54的右孩子

6.输入序列是ABC,输出序列变为BCA时,经过的栈操作为()
A.push,push,push,pop,pop,pop

B.push,push,pop,push,pop,pop

C.push,pop,push,push,pop,pop

D.push,push,pop,pop,push,pop

  1. 正确答案: B

7.关于内存管理,下列说法错误的是

A.谁申请,谁释放

B.内存管理主要要避免“过早释放”和“内存泄漏”,对于“过早释放”需要注意@property设置特性时,一定要用对特性关键字,对于“内存泄漏”,一定要申请了要负责释放。

C.关键字alloc 或new 生成的对象可以自动释放;

D.设置正确的property属性,对于retain需要在合适的地方释放

  1. 正确答案: C
  2. allocnew生成的对象不会自动释放,要自动释放需要调用autorelease方法。

8.以下哪一段代码不会抛出异常()
A.NSArray *array=@[1,2,3];NSNumber * number=array[3];

B.NSDictionary *dict=@{@"key":nil};

C.NSString *str=nil;NSString *str2=[str substringFromIndex:3];

D.NSString *str=@"hi";NSString *str2=[str substringFromIndex:3];

  1. 正确答案: C
  2. A 因为数组下标越界,下标从0~2有三个元素,下标3已经不在这个范围
  3. B 因为字典和数组中对于nil有特殊的含义,它表示元素个数的终止标记,不会被保存进字典或数组,要表示空可以使用[NSNull null]对象代替nil
  4. C正确 因为向nil发送的任何消息都不会被响应也不会报错
  5. D 因为下标越界。

9.实现多线程都有哪几种方法?()

A.使用@synchronized(self)

B.使用GCD

C.使用NSOperationQueue

D.使用@thread

  1. 正确答案: B C

10.关于浅复制和深复制的说法,下列说法正确的是()
A.浅层复制:只复制指向对象的指针,而不复制引用对象本身。

B.深层复制:复制引用对象本身。

C.如果是浅复制,若类中存在成员变量指针,修改一个对象一定会影响另外一个对象

D.如果是深拷贝,修改一个对象不会影响到另外一个对象

  1. 正确答案: A B C D

11.iOS单元测试框架有哪些?()
A.OCUnit

B.GHUnit

C.OCMock

D.NSXML

  1. 正确答案: A B C

12.下面程序段的输出结果是什么:

  1. int a = 10;
  2. NSNumber *b = [[NSNumber alloc] initWithInt:a];
  3. NSLog(@"%d", a+++b);

A.21

B.20

C.30

D.编译错误

  1. 答案:(D
  2. // 输出时类型不匹配,b是一个对象

13.关于类目、延展的描述错误的是:

A.延展主要为类提供“私有”方法

B.类目、延展不但能为类添加方法,而且都可以添加新的实例变量

C.无论能否拿到类的源码,类目都可以对其扩展

D.类目和延展声明语法不同

  1. 答案:(B
  2. //类目不能添加实例变量

14.声明一个返回值为NSArray,并且带两个字符串对象的BLOCK类型变量:

A.NSArray (*aBlock)(NSString * str,NSString *str2)

B.NSArray ^(*aBlock)(NSString * str,NSString *str2)

C.NSArray (^aBlock)(NSString * str,NSString *str2)

D.NSArray *(^aBlock)(NSString * str,NSString *str2)

  1. 答案:(D
  2. //block用^来修饰

15.下面程序段的输出结果是什么:
NSMutableArray * arr1 = [[NSMutableArray alloc] initWithObjects:@"1",@"2",@"3", nil];[arr1 addObject:@"0"];
[arr1 replaceObjectAtIndex:2 withObject:@"3"];
NSLog(@"%@",arr1);

A.0,1,2,3

B.1,2,3,0

C.1,3,3,0

D.0,3,2,3

  1. 答案:(B
  2. //下标为2的对象是@"3",替换的对象还是@"3"

16.使用imageNamed方法创建UIImage对象时,与普通的init方法有什么区别?()

A. 没有区别,只是为了方便

B. imageNamed方法只是创建了一个指针,没有分配其他内存

C. imageNamed方法将图片加载到内存中后不再释放

D. imageNamed方法将使用完图片后立即释放

  1. 答案: C

17.C和Objective-C的混合使用,以下描述错误的是()
A.cpp文件只能使用C/C++代码

B.cpp文件include的头文件中,可以出现objective-C的代码

C.mm文件中混用cpp直接使用即可

D.cpp使用objective-C的关键是使用接口,而不能直接使用代码

  1. 正确答案: B

18.关于NSOperation queue的说法,正确的是?()

A.主要用于多线程并发处理

B.它是一个队列,有严格的先进先出

C.它不会遵守严格的先进先出

D.NSOperationQueue可以通过调整权重来调整队列的执行顺序

  1. 正确答案: A C D

19.为什么说Object-C是runtime language?()

A.将数据类型的确定由编译时,推迟到了运行时

B.运行时机制使我们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方法。

C.驾驶A继承了B类,那么在编译时就已经生成了A的实例

D.多态是指不同对象以自己的方式响应相同的消息的能力

  1. 正确答案: A B D

20.能够匹配 [a-zA-Z]([a-zA-Z]|\d|_){7,9} 此正则表达式的字符串是 ()

A.TTON.CO.123

B.TTON_CO

C.TTON_CO123

D.TTON_CO.TTON.CO123

  1. 正确答案: C
  2. 长度为8-10位的用户密码,以字母开头,包含字母、数字、下划线的组合
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注