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

这是之前自己整理在CSDN上的部分面试题,现抄录至简书。。。。。。


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 ( [Class 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

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 3,660评论 0 12
  • Java中如何实现代理机制(JDK、CGLIB) JDK动态代理:代理类和目标类实现了共同的接口,用到Invoca...
    Y了个J阅读 1,586评论 1 12
  • Java8张图 11、字符串不变性 12、equals()方法、hashCode()方法的区别 13、...
    Miley_MOJIE阅读 1,631评论 0 6
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 406评论 0 1
  • 2014,完成了久拖未决的几件事情,度过了十几年来最愉快的时光,想通了人生的断舍离,翻篇了若干不值得交往的人和不值...
    小鲁阅读 31评论 0 1