文章标题

1.OC里用到集合类是什么?
基本类型为:NSArray,NSSet以及NSDictionary
可变类型为:NSMutableArray,NSMutableSet以及NSMutableDictionary
2.用OC写一个快速排序

-(void)quickSortWithArray:(NSMutableArray *)aData left:(NSInteger)left right:(NSInteger)right{
if (right > left) {
NSInteger i = left;
NSInteger j = right + 1;
while (true) {
while (i+1 < [aData count] && [aData objectAtIndex:++i] < [aData objectAtIndex:left]) ;
while (j-1 > -1 && [aData objectAtIndex:–j] > [aData objectAtIndex:left]) ;
if (i >= j) {
break;
}
[self swapWithData:aData index1:i index2:j];
}
[self swapWithData:aData index1:left index2:j];
[self quickSortWithArray:aData left:left right:j-1];
[self quickSortWithArray:aData left:j+1 right:right];
}
}

-(void)swapWithData:(NSMutableArray *)aData index1:(NSInteger)index1 index2:(NSInteger)index2{
NSNumber *tmp = [aData objectAtIndex:index1];
[aData replaceObjectAtIndex:index1 withObject:[aData objectAtIndex:index2]];
[aData replaceObjectAtIndex:index2 withObject:tmp];
}

3.viewController中didReceiveMemoryWarning什么时候调用,默认如何处理
在程序收到内存警告的时候会调用该方法
默认操作为检查controller是否可以安全地释放它的view),比如view本身没有superview并且可以被很容易地重建(通过nib或者loadView函数)

4.OC中frame与bounds有什么不同
Frame指的是:该view在父view坐标系统中的位置和大小(参照点是父类的坐标系统)
Bounds指的是:该view在本身坐标系统中的位置和大小(参照点是本身的坐标系统)

5.OC中有无多重继承,如何实现多重继承
没有多重继承。
cocoa中所有的类都是NSObject的子类,多继承在这里是用protocol 协议来实现的,所以我们不用去考虑繁琐的多继承、虚基类的概念,多态特性在oc中拖过委托来实现。

6.用OC写两个线程,对同一个变量 分别进行+/-操作

//首先创建一个线程锁
NSLock *_lock = [[NSLock alloc] init];
//创建两个工作线程 访问同一个资源 类的对象的变量_value
[NSThread detachNewThreadSelector:@selector(thread1:) toTarget:self withObject:@(10)];
[NSThread detachNewThreadSelector:@selector(thread2:) toTarget:self withObject:@(10)];
}
//第一个工作线程 中会调用的函数
- (void)thread1:(id)obj{
//我们需要当前线程 对_value进行 连续+10的操作 每次递增10

@autoreleasepool {
    int num = [obj intValue];
    [_lock lock];//加锁  修改之前加锁
    for (int i = 0 ; i < num; i++) {

        _value += 10;
        NSLog(@"thread1_value:%d",_value);
        [NSThread sleepForTimeInterval:0.5];
    }
    [_lock unlock];//修改完毕要解锁

}

}
//第二个线程中调用的函数
- (void)thread2:(id)obj{

@autoreleasepool {
    int num = [obj intValue];
    [_lock lock];//加锁
    for (int i = 0 ; i < num; i++) {
        _value -= 10;
        NSLog(@"thread2_value:%d",_value);
    }
    [_lock unlock];//解锁
}

}

7.OC中如何创建一个线程,要求可以一直工作,不会只执行一次就结束

@synthesize name;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(threadFunc) object:nil];
[thread start];
}
static bool over = NO;
- (void)threadFunc
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
while (YES) {
@synchronized(name){
name = @”Frank”;
[NSThread sleepForTimeInterval:2];
if ([NSThread isMultiThreaded]) {
NSLog(@”%@ isMultiThreaded”,name);
}
if (over) {
break;
}
}
}
[pool release];
}

8.在7的基础上如何结束一个线程
a)break;
  b)[thread cancel]
9.写一个你所经历的项目架构或者cocoa里面的mvc模式

二. c/c++
1.得到一个field在结构体中的偏移量

define OFFSETOF(type, field)  ((size_t)&(((type *)0)->field))

2.引用和指针的区别
1 .从现象上看:指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变。引用访问一个变量是直接访问,而指针是间接访问。
2.从内存分配上看:程序为指针变量分配内存区域,而引用不分配内存区域
3.从编译上看:程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名及变量所对应地址。指针变量在符号表上对应的地址值为指针变量的地址值,而引用在符号表上对应的地址值为引用对象的地址值。符号表生成后就不会再改,因此指针可以改变指向的对象(指针变量中的值可以改),而引用对象不能改

3.写出float X 与零值比较的if语句
const double EPSILON = 1.00e-07;
if (x

include

include

define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL

下面是笔试常靠题
a) int a; // An integer
b) int *a; // A pointer to an integer
c) int **a; // A pointer to a pointer to an integer
d) int a[10]; //一个有10个指针的数组,该指针是指向一个整型数的。
e) int *a[10]; //一个有10个指针的数组,该指针是指向一个整型数的。
f) int (*a)[10]; //一个指向有10个整型数数组的指针
g) int (*a)(int); //一个指向函数的指针,该函数有一个整型参数并返回一个整型数。
h) int (*a[10])(int); //一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数。

1。assign和retain,copy的区别
assign就是和普通语言的赋值一样
retain 在一个对象中保存该对象需要拥有的对象
对该对象进行应用计数+1
@property (retain) 为了写程序方便
copy主要是赋值
一般 代理的申明都是assign 为什么
原因有2个,
1 根本就没有必要把代理的计数器+1
2. 主要是为了避免引用技术嵌套,递归
2。如何持久保存数据
NSUserDefaults, Plist, SQLite3, file
3。网络方面得 比如如何检测联网 http xml等
ASIHTTPRequest Reacheable.[hm]
原理是ifconfig 是不是有ip地址
Reachability
来判断是否有网络3G Wifi
4。类之间得继承关系 比如UIview得父类是哪一个等等?
UIResponder,处理触摸,
touchBegin, touchEnd, nextResponder
5。异常处理
@try {} @catch{}

在同一个类A中,有方法a和方法b,方法b如何调用方法a?
[self a];
有A、B两个类,B类继承于A类,都实现了方法xx。创建B类实例b,如何让b调用A类?
[super a];
const和Volatile分别代表什么意思?
Volatile表示每次都从内存取数据
类型id代表什么意思?

面向对象包含哪些元素?
继承和分类的区别?
Catogory
Catogory实现起来麻烦一些,但是使用方便
NSSet类的作用是什么?
集合
编写一个完整程序,在控制台打印字符串“HelloWorld!”
用递归实现计算n的阶乘。(用objective-c语法实现)
//

static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
C语言中讲讲static变量和static函数有什么作用
static关键字有两种意思,你看上下文来判断
1,表示变量是静态存储变量
表示变量存放在静态存储区.
2,表示该变量是内部连接
(这种情况是指该变量不在任何{}之内,就象全局变量那样,这时候加上static)
,也就是说在其它的.cpp文件中,该变量是不可见的(你不能用).
当static加在函数前面的时候
表示该函数是内部连接,之在本文件中有效,别的文件中不能应用该函数.
不加static的函数默认为是全局的.
也就是说在其他的.cpp中只要申明一下这个函数,就可以使用它.
1、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
答:全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。
从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。
static函数与普通函数作用域不同。static函数仅在本文件中使用。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件
static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;
static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;
static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

2、如何引用一个已经定义过的全局变量?
答:extern
可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间 会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。

3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?
答:可以,在不同的C文件中以static形式来声明同名全局变量。
可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。

什么是UDP和TCP的区别是什么?
TCP的全称为传输控制协议。这种协议可以提供面向连接的、可靠的、点到点的通信。
UDP的全称为用户数据报协议,它可以提供非连接的不可靠的点到多点的通信。
用TCP还是UDP,那要看你的程序注重哪一个方面?可靠还是快速?

TCP/IP 建立连接的过程
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送连接请求到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到客户端连接请求,向客户端发送允许连接应答,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的允许连接应答,向服务器发送确认,客户端和服务器进入通信状态,完成三次握手。
(所谓的三次握手就是要有三次连接信息的发送/接收过程。TCP连接的建立需要进行三次连接信息的发送/接收。)

-(void) print:(NSString*) msg
{
NSLog(@”%@”,msg);
}

printf(“%d,%c\n”,i,c)

char str[10]=”,str2[]={“China”};
strcpy(str1,str2);

printf(“%d”,max(a,b));
把 max(a,b)作为printf函数的一个参数。

obj-c有多重继承么?不是的话有什么替代方法?
cocoa 中所有的类都是NSObject 的子类,多继承在这里是用protocol 委托代理来实现的。你不用去考虑繁琐的多继承,虚基类的概念。多态特性在 obj-c 中通过委托来实现。

线程与进程的区别和联系?

进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。

程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

自动释放池是什么,如何工作?
当您向一个对象发送一个autorelease消息时,Cocoa就会将该对象的一个引用放入到最新的自动释放池。它仍然是个正当的对象,因此自动释放池定义的作用域内的其它对象可以向它发送消息。当程序执行到作用域结束的位置时,自动释放池就会被释放,池中的所有对象也就被释放。

  1. ojc-c 是通过一种”referring counting”(引用计数)的方式来管理内存的, 对象在开始分配内存(alloc)的时候引用计数为一,以后每当碰到有copy,retain的时候引用计数都会加一, 每当碰到release和autorelease的时候引用计数就会减一,如果此对象的计数变为了0, 就会被系统销毁.
  2. NSAutoreleasePool 就是用来做引用计数的管理工作的,这个东西一般不用你管的.
  3. autorelease和release没什么区别,只是引用计数减一的时机不同而已,autorelease会在对象的使用真正结束的时候才做引用计数减一。

什么是KVC和KVO?答:KVC(Key-Value-Coding)内部的实现:一个对象在调用setValue的时候,(1)首先根据方法名找到运行方法的时候所需要的环境参数。(2)他会从自己isa指针结合环境参数,找到具体的方法实现的接口。(3)再直接查找得来的具体的方法实现。KVO(Key-Value-Observing):当观察者为一个对象的属性进行了注册,被观察对象的isa指针被修改的时候,isa指针就会指向一个中间类,而不是真实的类。所以isa指针其实不需要指向实例对象真实的类。所以我们的程序最好不要依赖于isa指针。在调用类的方法的时候,最好要明确对象实例的类名。

kvc 就是一种通过字符串去间接操作对象属性的机制。
iphone中,自定义协议?
Protocol , 看代理 viewController
协议在oc中主要用在代理中
绑定的概念?
代理的概念?对它怎么理解?
为了模块之间的松耦合
网络编程中协议的概念。
NetworkDataDelegate;
3个函数理解 didReceive,
苹果上架流程?

怎么样编一个通话软件只能在iphone上运行,在itouch上不能运行 如何实现

UIDevice *dev = [UIDevice currentDevice];
if ([[dev model] isEqualToString:@"iPhone"]) {

} else if ([[dev model]  isEqualToString:@"iPod touch"]) {

}
if([dev userInterfaceIdiom] == UIUserInterfaceIdiomPad) {

}

两个上海的朋友给的他们公司自己的面试题,大部分也都是旧题,我自己整理了下答案。。

面试题:
1.viewwillAppear  viewWillDisapper, viewDidLoad 他们在什么时候使用。
viewwillAppear:视图即将可见时调用,默认情况下不执行如何操作。
viewWillDisapper:视图消失时,覆盖或以其他方式隐藏时调用,默认不执行任何操作。
viewDidLoad:在视图加载后调用,如果是在代码中创建的试图加载器,它将在loadView方法后被调用,如果是从nib视图页面输出,它将会在视图设置好后被调用。

2.frame和bounds的区别
frame:该view在父view坐标系统中的位置和大小,参照点是父视图的坐标系统。
bounds:该view在本身坐标系统中的位置和大小,参照点是本身坐标系统。

3深拷贝和浅拷贝的区别,并简述如何实现一个NSObject子类的深拷贝。
浅拷贝:复制一个对象为副本。
深拷贝:开闭一块新的内存来存储副本对象。
想要实现深拷贝需要遵循和协议,并实现代理方法。

4描述UITableViewCell的复用机制。
简单来说我认为这个复用机制是为了节省系统资源的开支。
就是我们在展示tableView的时候系统并不会一次把所有的cell给创建出来,而是创建一部分(具体是多少,我测试过是你能同时看到最多几个cell,就会创建几个cell)。这样当你滑动tableview的时候,一端的cell会滚出视图,另一端会出现新的cell。这个滚出视图的cell,在滚出视图后并没有被闲置,而是被放进了tableview的复队列中,与此同时,另一端出现的新的cell,就会从这个复用队列中取,若无则创建一个新的,若有则使用之。

5.写出三种常用的设计模式。
  代理模式:一般和协议一块使用完成某些传值。例如tableview的delegate。
  观察者模式:例如通知中心,注册通知中心,任何位置可以发送消息,注册观               察者的对象可以接收。
  单例模式:确保应用整个生命周期中,某个类只有一份实例,用于共享资源数据的控制。
 

6.NSarray *array = @[@“a”,@“b”,@“c”,@“a”,@“d”….],里面有N个string元素,求出array中唯一元素,要求复杂度为N。
如,@[@“a”,@“b”,@“b”,@“c”],输出结果为@“abc”;
      @[@“a”,@“a”,@“b”]   输出结果为@“ab”;
      @[@“a”,@“a”,@“a”]  输出结果为@“a”;
(ps:就是把重复的元素去掉拼成一个字符串)
代码实例:NSArray *arr = @[@”a”,@”b”,@”b”,@”c”];
    NSString *resultStr = [arr objectAtIndex:0];
    for (NSString *str in arr) {
        if ([resultStr rangeOfString:str].location == NSNotFound) {
            resultStr = [resultStr stringByAppendingString:str];
        }
    }
    NSLog(@”%@”,resultStr);

1.#include和#import有什么区别,@class呢,#import<>跟#import“”又有什么区别
include和import都是导入某个文件,但import可以防止重复导入的问题。
@class  值是告诉编译器,这是个类,可以声明一个此类的对象指针,但是具体类里边有什么属性,接口编译器不知道。

import<> 适用于导入系统的头文件

import“”适用于导入自定义的头文件

2.OC的类可以多继承么?Category是什么,使用过吗?
不可以。但是可以通过协议间接实现。
category,我们也叫做类别,就是可以为某个类增加额外的方法,包括系统的类和自定义的类。

3.编写一个blocks使用的例子,尽可能体现出block编程的语法和优势
 定义一个带参数的blocks:
void (^logBlock)(NSString *msg);
    logBlock = ^(NSString *str){
        NSLog(@”%@”,str);//line 3
    };
使用blocks:
logBlock(@”hello”);//相当于把line 3的代码放在这里执行。

4.在iPhone应用总如何保存数据?有几种方式。
临时数据:数组,字典等。
持久化存储:Plist,数据库,沙盒。

5.c/c++/oc怎么混编,要注意什么?
可以参考http://blog.csdn.net/gf771115/article/details/9664393

我之前公司的面试题,整理了下答案
1、ObjC中,与alloc语义相反的方法是dealloc还是release?与retain语义相反的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是dealloc还是release,为什么?

alloc与dealloc语意相反,alloc是创建变量,dealloc是释放变量。 retain 对应release,retain 保留一个对象。调用之后,变量的计数加1。或许不是很明显,在这有例为证:
- (void) setName : (NSString*) name { [name retain];
[myname release];
myname = name;
}
我们来看一看newname的计数是怎么变化的。首先,它被alloc,count = 1; 然后,在setName中,它被retain, count = 2; 最后,用户自己释放newname,count = 1,myname指向了newname。这也解释了为什么需要调用[myname release]。我们需要在给myname赋新值的时候,释放掉以前老的变量。retain 之后直接dealloc对象计数器没有释放。alloc 需要与release配对使用,因为alloc 这个函数调用之后,变量的计数加1。所以在调用alloc 之后,一定要调用对应的release。另外,在release一个变量之后,他的值仍然有效,所以最好是后面紧接着再var = nil。

2、在一个对象的方法里面:
self.name = “object”;和
name =”object”
有什么不同吗?

self.name = “object”会调用对象的setName()方法,name = “object”会直接把object赋值给当前对象的name 属性。

3、这段代码有什么问题吗:
@implementation Person
- (void)setAge:(int)newAge {
self.age = newAge;
}
@end
会进入死循环
4、什么是retain count?

引用计数(ref count或者retain count)。对象的内部保存一个数字,表示被引用的次数。例如,某个对象被两个指针所指向(引用)那么它的retain count为2。需要销毁对 象的时候,不直接调用dealloc,而是调用release。release会 让retain count减1,只有retain count等于0,系统才会调用dealloc真正销毁这个对象。

5、以下每行代码执行后,person对象的retain count分别是多少
Person *person = [[Person alloc] init]; 1
[person retain]; 2
[person release]; 1
[person release]; 1
6、为什么很多内置类如UITableViewController的delegate属性都是assign而不是retain的?
会引起循环引用
7、定义属性时,什么情况使用copy,assign,和retain
assign用于简单数据类型,如NSInteger,double,bool,retain 和copy用于对象,copy用于当 a指向一个对象,b也想指向同样的对象的时候,如果用assign,a如果释放,再调用b会crash,如果用copy 的方式,a和b各自有自己的内存,就可以解决这个问题。retain 会使计数器加一,也可以解决assign的问题。另外:atomic和nonatomic用来决
if (property != newValue) { [property release];
property = [newValue retain]; }

8、autorelease的对象是在什么时候被release的?
autorelease实际上只是把对release的调用延迟了,对于每一个Autorelease,系统只是把该Object放入了当前的Autorelease pool中,当该pool被释放时,该pool中的所有Object会被调用Release。对于每一个Runloop,系统会隐式创建一个Autorelease pool,这样所有的release pool会构成一个象CallStack一样的一个栈式结构,在每一个Runloop结束时,当前栈顶的Autorelease pool会被销毁,这样这个pool里的每个Object(就是autorelease的对象)会被release。那什么是一个Runloop呢?一个UI事件,Timer call, delegate call, 都会是一个新的Runloop。

9、这段代码有什么问题,如何修改
for (int i = 0; i < someLargeNumber; i++) {
NSString *string = @”Abc”;
string = [string lowercaseString];
string = [string stringByAppendingString:@”xyz”];
NSLog(@“%@”, string);
}

内存泄露
NSAutorelease * pool1 = [[NSAutoreleasePool alloc] init];  
NSString *string = @”Abc”;
string = [string lowercaseString];
string = [string stringByAppendingString:@”xyz”];
11、autorelease和垃圾回收机制(gc)有什么关系?

12、IPhone OS有没有垃圾回收(gc)?
没有
13、什么是Notification?
观察者模式,controller向defaultNotificationCenter添加自己的notification,其他类注册这个notification就可以收到通知,这些类可以在收到通知时做自己的操作(多观察者默认随机顺序发通知给观察者们,而且每个观察者都要等当前的某个观察者的操作做完才能轮到他来操作,可以用NotificationQueue的方式安排观察者的反应顺序,也可以在添加观察者中设定反映时间,取消观察需要在viewDidUnload 跟dealloc中都要注销)。参考链接:http://useyourloaf.com/blog/2010/6/6/delegation-or-notification.html
14、什么时候用delegate,什么时候用Notification?
delegate针对one-to-one关系,并且reciever可以返回值给sender,notification 可以针对one-to-one/many/none,reciever无法返值给sender.所以,delegate用于sender希望接受到reciever的某个功能反馈值,notification用于通知多个object某个事件。
15、什么是KVC和KVO?
KVC(Key-Value-Coding)内部的实现:一个对象在调用setValue的时候,(1)首先根据方法名找到运行方法的时候所需要的环境参数。
(2)他会从自己isa指针结合环境参数,找到具体的方法实现的接口。(3
)再直接查找得来的具体的方法实现。
KVO(Key-Value-Observing):当观察者为一个对象的属性进行了注册,被观察对象的isa指针被修改的时候,isa指针就会指向一个中间类,而不是真实的类。所以isa指针其实不需要指向实例对象真实的类。所以我们程序最好不要依赖于isa指针。在调用类的方法的时候,最好要明确对象实例的类名。
16、Notification和KVO有什么不同?
17、KVO在ObjC中是怎么实现的?
18、ViewController 的 loadView, viewDidLoad, viewDidUnload 分别是在什么时候调用的?在自定义ViewController的时候这几个函数里面应该做什么工作?
当view为nil时调用loadView,view完成加载调用viewDidLoad,view释放时调用viewDidUnload.

viewDidLoad在view 从nib文件初始化时调用,loadView在controller的view为nil时调用。此方法在编程实现view时调用,view 控制器默认会注册memory warning notification,当view controller的任何view 没有用的时候,viewDidUnload会被调用,在这里实现将retain 的view release,如果是retain的IBOutlet view 属性则不要在这里release,IBOutlet会负责release 。
19、ViewController 的 didReceiveMemoryWarning 是在什么时候被调用的?默认的操作是什么?
内存超过阙值,尝试释放view.
默认调用 [super didReceiveMemoryWarning] 
 
20、UITableViewController中,创建cell时,initWithStyle:reuseIdentifier中,reuseIdentifier有什么用?简述复用原理。

21、UIView和CALayer有什么区别?
一个UIView包括CALayer树,CALayer是一个数据模型,听说iPhone。包括了一些用于显示的对象,但本身不用于显示。 CALayer相当于photoshop的一个层,很多动画可以通过设置CALayer来完成。据说有人用CALayer显示图片来播放视频。Coresome kind ofimation应该是用CAlayer来完成各种动画。
22、以UIView类 animateWithDuration:animation:为例,简述UIView动画原理。
1、Object-C有多继承吗?没有的话用什么代替?

没,protocol. cocoa中所有的类都是NSObject 的子类 多继承在这里是用protocol委托代理 来完成的 你不用去思索繁琐的多继承 虚基类的概念 ood的多态特性在 obj-c中通过委托来完成.
2、Object-C有私有方法吗?私有变量呢?

没,有。objective-c -类里面的方法唯有两种 静态方法和实例方法. 这似乎就不是完整的面向对象了按照OO的原则就是一个对象只暴露有用的东西.如果没有了私有方法的话 对付一些小局限的代码重用就不那么利市了. 在类里面声名一个私有方法
@interface Controller :NSObject { NSString *something; } 
+(void)thisIsAStaticMethod; 
-(void)thisIsAnInstsome kind ofceMethod; 
@end 
@interface Controller(private) - 
(void)thisIsAPrivateMethod; 
@end 
@private
可以用来修饰私有变量在Objective‐C中,所有实例变量默认都是私有的,所有实例方法默认都是公有的
3、#import和#include的区别,@class代表什么?

import 能防止重复引用,#include 不能,@class 前置声明一个类。

4、Object-C的内存管理?

引用计数器。

5、为什么很多内置的类,如TableViewController的delegate的属性是assign不是retain?

防止循环引用。

6、定义属性时,什么情况使用copy、assign、retain?

copy:拷贝对象。assign:传值,一般用于基础类型。retain:传地址,引用计数器加一。
9、请简述iPhone数据持久化的种方法?
答:属性列表、对象归档、iPhone的嵌入式关系数据库(SQLite3)和拷久性工具Core Data。

IOS开发面试题
1、请手工书写@property(nonatomic,retain)NSString *name;的get与set方法。

getter 

- (NSString *)name { return _name; } 
 
setter 
 -(void)setName:(NSString *)aName 
 {  
if (name != aName)  
{  
[name release];  
name = [aName retain];  

 } 

2、请描述object c内存管理机制、以及一般原则?
1)当你使用new,alloc和copy方法创建一个对象时,该对象的保留计数器值为1.当你不再使用该对象时,你要负责向该对象发送一条release或autorelease消息.这样,该对象将在使用寿命结束时被销毁.
2)每retain一次会使引用系数就加1,相应地要在适当位置release
内存管理原则
1. 谁创建,谁释放(“谁污染,谁治理”)。如果你通过alloc、new或者(mutable)copy来创建一个对象,那么你必须调用release或autorelease。或句话说,不是你创建的,就不用你去释放
2. 一般来说,除了alloc、new或copy之外的方法创建的对象都被声明了autorelease(autorelease是延迟释放内存,不用你自己去手动释放,系统会知道在什么时候该去释放掉它。)
3. 谁retain,谁release。只要你调用了retain,无论这个对象是如何生成的,你都要调用release

3、nil与NULL的区别?
nil是一个对象,而NULL是一个值
4、如何判断一个对象是否属于某个类?
respondsToSelector ,performSelector,conformstoProrocol,isKindofClass,isMemberofClass
5、object c如何实现私有方法?
在object-c中没有私有方法,只有静态方法和实力方法.但是可以用@private修饰私有变量.用.m文件中使用catogory来实现私有方法.
6、IBOutlet UIVIew *v:
@property(nonatomic,retain)*V:
这个v对象需要release吗?如果需要怎么release?

需要release 在类的dealloc 中release
6、BOOL与bool区别?
BOOL 只是一个宏,不是基本的数据类型,BOOL实际上=char,占1字节空间。
bool 是C++的基础数据类型,占用1个字节。
对于BOOL类型,当值为1时为真,即YES;当值为0时为假,即NO;
YES和NO都是宏。
对于bool类型,值只要不是0就是为真,即true;当值为0时为假,即false
7、用NSLog函数输出一个浮点类型,结果四舍五入,并保留一位小数。
NSLog(@”%.1f”,3.14);
8、用object-c或者C语言写一个方法判断20120101 !(阶乘)在十进制、二进制下分别为几位数?

static double PI = 3.141592653589793239;
static double E = 2.718281828459045;
int mul10(int n){
return (int)(log10(sqrt(2*PI*n))+n*log10(n/E))+1;
}
二进制下

int mul2(int n){
return (int)(log2(sqrt(2*PI*n))+n*log2(n/E))+1;
}

10、用c语言写一个函数判断两个链表(每个链表不存在环)是否相交?

————————————————————————————
IOS开发工程师笔试题(请在30分钟内做完)
1、Objective-C有私有方法么?私有变量呢?
2、关键字const有什么含义?
3、关键字volatile有什么含义?并给出三个不同的例子;
4、线程与进程的区别和联系?
5、简单阐述堆和栈的区别;
6、简单阐述一下Objective-C内存管理;
7、为什么很多内置类如UITableViewController的delegate属性都是assign而不是retain的?
防止相互引用

————————————————————————————
仙掌软件C语言试题2011(V0.01)
1、编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。如输入2004
年12月31日23时59分59秒,则输出2005年1月1日0时0分0秒
2、设x=2,则表达式(++x)*3的值是( )。
3、设x=2,则表达式(++x)/3的值是( )。
4、栈操作数据的原则是_,队列操作数据的原则是_
5、用最有效率的办法来计算2乘以8等于几。
6、请写出代码使用位运算来交换整数变量x,y的值。
7,编写代码实现同一平面内两圆是否碰撞,其中:
第一个圆圆心坐标为(x1,y1),半径是r1, 第二个圆圆心坐标 为(x2,y2),如果碰撞返回1,否则返回0
函数声明如下:
int colliswith(int x1,int y1,int rl,int x2,int y2,int r2){}
8、编写代码实现输入一个整数,求该整数的二进制表达中有多少个1。例如输入10,其二进制表示为1010,有两个1,因此输出2。
9、下面是C语言中两种if语句判断方式,请问哪种写法更好?为什么?
int n;
if(n==10)//第一种判断方式
if(10==n)//第二种判断方式
10、i最后等于多少?
int i = 1;
int j = i++;
if((i>j++)&&(i++==j) i+=j;
11、用预处理指令#define 声明一个常数,用以表明一年中有多少秒(忽略闰月)。
12、说说下面两个声明语句的区别?
1)char const *p
2)char * const p
13、int(*[10])(int)表示的是什么?
14、c和c++中的struct有什么不同?
15、有以下表达式:
int a=248;b=4;
int const c=21;
const int*d=&a;
int*const e=&b;
int const*fconst=&a;
请问下列表达式哪些会被编译器禁止?为什么?
*c=32;d=&b;*d=43;e=34;e=&a;f=0x321f;
16、你的程序需要用到一个数据文件,不行的是,由于容量的问题,你不得不事先将其压缩,游戏运行时再解压。

由于该数据文件的特点是,它的每个字节只用到了最后5位(即每个字节的值都小于32),并且连续相同的字节数不超过7个,你决定采取这样的压缩算法:对于连续相同的n个字节,压缩成一个字节,前3位存储n,后5为存储实际数据。
(1)现在已经从文件中读出了len个字节到字节数组file中,写一个函数把它压解到另一个字节数组data。
(2)在什么情况下,这种压缩算法的压缩率较低?
18、简述A*算法的核心思想(或者用伪码实现)

北京诚信迪赛科技.jpg
1、编写一个标准strepy函数。
2、描述vector,list,map各自使用情形。
3、如何将单链表倒转?
4、如何判断字符串是否为回文?比如“abcba”就是一个回文。
5、找出一个整数数组中第二大的数,尝试处理各种输入异常。
6、写段代码,去掉一个有英文字母组成的字符串中的重复字符。
7、写出快速排序或冒泡排序的代码。

品科艺IOS开发面试题

1、在objective-c中,说明一下你如何让一个函数或类变量成为一个私有的函数或类变量。
@private 可以修饰 成员变量 成为私有的
成员方法可以在类的.m文件实现在.h不能声明就可以实现类似私有的方法

2、描述一个UIView框架(UIView frame)和边界(bounds)之间的差异。如果一个固定大小的UIView被做成动画来回移动,这个框架或边界会不会变化?
frame:该view在父view坐标系统中的位置和大小,参照点是父视图的坐标系统。
bounds:该view在本身坐标系统中的位置和大小,参照点是本身坐标系统。
Frame会变 bouns不会变
3、描述什么会在UIViewController中触发(void)didReceiveMemoryWarning函数,你怎么在View controller中重写(override)这个函数。
当发生内存警告时会调用

iOS6之前需要调用didReceiveMemoryWarning 内部写self.view = nil; 并且再调用viewDidUnload 并且在里面释放子视图
iOS6之后在didReceiveMemoryWarning中不需要调用viewDidUnload,需要手动写self.view = nil 并且释放子视图
4、若有一个表有1000行,每一行包含一个不同的图像,每一个图像都是从不同的网址URL下载的(例如http://www.test.com/test123.jpg),您将采取什么办法,以确保表内图像滚动尽可能顺利?
1.使用第三方开源库SDWebimage
2.异步下载,保存每一个图片的cell所在行,另外在本地以图片网络地址加密进行本地保存,下次加载从本地获取
5、描述在声明一个@property时关键字之间的差异
weak
strong
copy
assing
retain
6、写一个函数,当你有一个字符串数组,例如:
Input NSArray content (@“1apple”,@“2banana”,@“3oranges”)
要输出一个NSDictionary object,其中每一个字符串的第一个字母是key,剩下的是value/object,例如:
NSDictionary content(“1”=>“apple”,“2”=>“banana”,“3”=>“orange”)
void arrayChangeToDictionary(NSArray *arr) {
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
for (NSString *str in arr) {
[dict setObject:[str substringFromIndex:1] forKey:[str substringToIndex:1]];
}
NSLog(@”dict:%@”,dict);
}
7、当具有a class @interface RadioTuner:NSObject时,写出.h文件和.m文件,以证明使用Singleton设计模式。
@interface Singleton : NSObject
+ (Singleton *)sharedSingleton;
@end

import “Singleton.h”

@implementation Singleton
//定义静态全局变量
static Singleton * single = nil;

  • (Singleton *)sharedSingleton{
    //考虑线程安全
    @synchronized(self){
    if (single == nil) {
    single = [[self alloc] init];
    }
    }
    return single;
    }
    9.写一个objective-c的函数来找到第N个素数。

  • (BOOL)isPrimeNumber:(NSInteger)number {
    BOOL isPrime = YES;
    for (int i = 2; i <= number/2; i++) {
    if (number % i == 0) {
    isPrime = NO;
    break;
    }
    }
    return isPrime;
    }

  • (NSInteger)prime:(NSInteger)n {

    NSInteger count = 0;
    NSInteger i = 2;
    while(1) {
    if ([self isPrimeNumber:i]) {
    count++;
    }
    if (count == n) {
    return i;
    }
    i++;
    }
    }

10、写一个objective-C的函数来测试一个字符串是否是回文(回文是一个字符串,在阅读是前进和后退是相同的,例如:racecar,level)。
- (BOOL)isLoopNumber:(NSString *)str {

NSString *newStr = @"";

for (NSInteger i = str.length-1; i >= 0; i--) {
    unichar c = [str characterAtIndex:i];
    newStr = [newStr stringByAppendingFormat:@"%C",c];
}
if ([newStr isEqualToString:str]) {
    return YES;
}else{
    return NO;
}

}

—————————————————————————————
网络题
1、画出TCP/IP四层模型或IOS的七层模型。
2、IP地址头部都有哪些字段?简单描述其作用。
3、IPv6与IPv4的区别?
4、简述TCP协议链接的建立过程,断开链接的过程,以及端口的作用。
5、Qos用来干什么的?
6、请尽可能的写出你对WLAN的了解。

软通动力IOS开发面试题
一、用预处理指令#define定义求两个数中的较大值。
二、Objective-C有私有方法么?私有变量呢?
三、阐述static关键字的作用。
四、Objective-C有多重继承么?不是的话有什么替代方法?
五、#import跟#include的区别,@class呢?
六、简单阐述一下Objective-C内存管理。
七、定义属性时,什么情况使用copy,passing,和retain?
八、你是怎么理解MVC的
九、Objective-C中得protocol、selector、category是什么?
协议 选择器 类别(类目)

代码题:

一、这段代码的意义,有没有问题
-(void)setName:(NSString*)name {
[myname release];
[name retain];
myname=name;
}

这段代码最好加一个判断

-(void)setName:(NSString*)name {
if(myname!=name){
[myname release];
[name retain];
myname=name;
}
}
二、self.name=“object”;和name=“object”有何不同?
三、以下代码有没有问题?有没有内存泄露?
for(inti=0;i

import

import “A.h”

@implementation A
- (void)delegateGoToWork {
if ([self.delegate respondsToSelector:@selector(work)]) {
[self.delegate performSelector:@selector(work)];
}
}
@end
B.h

import

import “A.h”

@interface B : NSObject

@end
B.m

import “B.h”

@implementation B
- (void)work {
NSLog(@”B is Working”);
}
@end

import “A.h”

import “B.h”

int main(int argc, const char * argv[])
{

@autoreleasepool {
    A *a = [[A alloc] init];
    B *b = [[B alloc] init];

    a.delegate = b;
    [a delegateGoToWork];
    [a release];
    [b release];
}
return 0;

}

上机题
1、写一个iPhone程序,有navigation 导航栏,内容是一个table,table的第一行放1行文字(文字内容来源于项目里新建的plist文件),第二行放一个文本框;点击每一行会弹出不同的提示信息。
2、写一个iPhone程序,有2屏,可以通过滑动切换,第二屏有一个webview,读取本地的html文件。Html文件中会加载一个本地的xml文件,获取xml文件中的数据内容并显示。(可选:html中加载本地的js文件)

——————————————————————————————

产研中心技术部招聘面试题
1、描述UITableView的重用机制。
2、ViewController 从创建到显示在屏幕上分别调用了哪些函数?
3、NSArray和NSMutableArray有什么区别?
4、编程题:定义一个委托,并调用、实现它。
5、编程题:写一个异常处理代码块。
6、编程题:写一个block代码块。
7、编程题:实现一个view使其可以在view controller 里使用,里面由上到下放标签,字体颜色蓝色;一个输入框;一个圆角按钮,按钮文字是“发送”;
8、Can we use one tableview with two different datasources?(可用中文回答)
9、Difference between frame and bounds ?(可用中文回答)
10、实例化一个UITableView对象 要求写出关键语句

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值