面试题目总结1(自己面试时碰到的)

来源:互联网 发布:seo站长 编辑:程序博客网 时间:2024/05/16 02:05

1、0x0110 有几个 BYTE?有几个Bit?转换成10进制是多少?并写出二进制形式。

答:2个BYTE(字节),16Bit(位),转换成10进制:272,二进制: 0000 0001 0001 0000

2、填空 (0x12 & 0x34) = (   1   ),(0x12 && 0x34) = (    2    )

答:(1)0x10 ; (2) 1 ;

3、int x = 0x12345678; char *p = (char *) &x; 请问 p 指的是什么?(*p)的值是多少?为什么?

答:(1) p 存储 x 第一个字节的地址; 

       (2) *p 大端模式:0x12        小端模式:0x78

小端:较高的有效字节存放在较高的的存储器地址,较低的有效字节存放在较低的存储器地址。
大端:较高的有效字节存放在较低的存储器地址,较低的有效字节存放在较高的存储器地址
  

4、delegate  使用 assign or retain ? 简述理由

答:assign,防止出现循环引用;

5、NSString 与 NSData 之间的转换过程中要特别注意的事项是什么?

答:注意编码格式,如下采用 NSUTF8 转换:

    NSData *testData = [@"myTest" dataUsingEncoding:NSUTF8StringEncoding];    NSString *testStr = [[NSString alloc]initWithData:testData encoding:NSUTF8StringEncoding];

6、请用代码如何判断某个对象 obj 是否支持某个 method ?

答:(1)判断实例方法:if ( [obj respondsToSelector:@selector(method)] )

(2)判断类方法:if ( [obj instanceRespondToSelector:@selector(method)] )

7、请用简单的代码展示 @protocol 的定义及实现。

答:

(1)定义

@protocol TestClassDelegate- (void)testMethod:(NSString *)string;@end@interface TestClass : NSObject@property (nonatomic, assign) id <TestClassDelegate> delegate;@end
(2)实现

在定义 TestClass 的类中,设置代理对象:

TestClass *testClass = [[TestClass alloc]init];        testClass.delegate = self;//实现协议方法- (void)testMethod:(NSString *)string {    NSLog(@"%@", string);}

8、category 的用途?

答:类目,为已知的类增加新的方法;

9、请使用 GCD 完成如下任务:执行并发任务 task1,task1完成后 update UI。   dispatch_async(  //添加代码    );

答:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{        //task1:        NSLog(@"执行task1");                //更新UI        dispatch_async(dispatch_get_main_queue(), ^{            NSLog(@"更新UI");        });            });

10、为什么要在主线程更新 UI ?子线程中想要更新 UI 怎么做?

答:(1)在子线程中不能更新UI,除了极少数UI外,其他UI更新要等到子线程执行完毕后回到主线程中进行更新。如果子线程一直在运行,则子线程中UI更新的函数栈主线程无法得知,即UI无法更新;

(2)回到主线程中进行UI更新;

11、简述通过 storyboard 实现一个 tableview (自定义 cell )的关键步骤。

答:

12、如何生成同时支持多个架构(simulator,arm7,arm64)的通用静态库。

答: ValidArchitectures设置为:armv7|armv7s|arm64|i386|x86_64 ;

Architectures设置不变(或根据你需要):  armv7|arm64 ;

然后分别选择iOS设备和模拟器进行编译,最后找到相关的.a进行合包,使用lipo -create 真机库.a的路径 模拟器库.a的的路径 -output 合成库的名字.a ;

这样就制作了一个通用的静态库.a ;

13、请写出一个 xml 文件,用于描述一个书架,书架上有两本书,书本类别(category)分别是 cooking,children。要求 tag 中包含书名(title),作者(author)。类别(category)要用属性表示。

答:

    <book category = "cooking">        <title>书名1<\title>        <author>作者1<\author>    <\book>        <book category = "children">        <title>书名2<\title>        <author>作者2<\author>    <\book>

14、链表与数组的区别。

答:

  • 数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中。同样的道理,如果想删除一个元素,同样需要移动大量元素去填掉被移动的元素。如果应用需要快速访问数据,很少或不插入和删除元素,就应该用数组。
  • 链表恰好相反,链表中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起。比如:上一个元素有个指针指到下一个元素,以此类推,直到最后一个元素。如果要访问链表中一个元素,需要从第一个元素开始,一直找到需要的元素位置。但是增加和删除一个元素对于链表数据结构就非常简单了,只要修改元素中的指针就可以了。如果应用需要经常插入和删除元素你就需要用链表数据结构了。

   *C++语言中可以用数组处理一组数据类型相同的数据,但不允许动态定义数组的大小,即在使用数组之前必须确定数组的大小。而在实际应用中,用户使用数组之前有时无法准确确定数组的大小,只能将数组定义成足够大小,这样数组中有些空间可能不被使用,从而造成内存空间的浪费。链表是一种常见的数据组织形式,它采用动态分配内存的形式实现。需要时可以用new分配内存空间,不需要时用delete将已分配的空间释放,不会造成内存空间的浪费。
  (1) 从逻辑结构角度来看
     a, 数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费。
     b,链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项。(数组中插入、删除数据项时,需要移动其它数据项)
  (2)从内存存储角度来看
     a,(静态)数组从栈中分配空间, 对于程序员方便快速,但自由度小。
     b, 链表从堆中分配空间, 自由度大但申请管理比较麻烦.

15、什么是gcc?有没有用过

答:GCC(GNU Compiler Collection)是由 GNU 开发的编程语言编译器。详细介绍链接:http://www.cnblogs.com/ggjucheng/archive/2011/12/14/2287738.html

16、用C++写单例关键点

答:关键点:(1)设置私有构造函数保证其不会被随意创建;

(2)创建局部静态变量保证实例只有一个;

详细介绍链接:http://www.cnblogs.com/loveis715/archive/2012/07/18/2598409.html

0 0
原创粉丝点击