常见笔试题(一)

1. 回答person的retainCount值,并解释为什么
Person * per = [[Person alloc] init]; 此时person 的retainCount的值是1self.person = per;
在self.person 时,如果是assign,person的 retainCount的值不变,仍为1
若是:retain person的retainCount的值加1,变为2
若是:copy person的retainCount值不变,仍为1

2、 这段代码有什么问题吗:
@implementation Person
- (void)setAge:(int)newAge {

self.age = newAge;
}

@end

会死循环,会重复调用自己!self.age 改为_age即可;

并且书写不规范:setter方法中的newAge应该为age

3、这段代码有什么问题,如何修改
for (int i = 0; i < someLargeNumber; i++) {
NSString *string = @”Abc”;
string = [string lowercaseString];
string = [string stringByAppendingString:@"xyz"];
NSLog(@“%@”, string);
}
会出现内存泄露
修改之后:
for(int i = 0; i<1000;i++){

NSAutoreleasePool * pool1 = [[NSAutoreleasePool alloc] init];
NSString *string = @"Abc";
string = [string lowercaseString];
string = [string stringByAppendingString:@"xyz"];
NSLog(@"%@",string);

//释放池

[pool1 drain];
}

延伸:堆栈的区别:

(1)管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生
memory leak。
(2)申请大小:能从栈获得的空间较小,堆是向高地址扩展的数据结构,是不连续的内存区域。堆的大小受限于计算机系统中
有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。
(3)碎片问题:对于堆来讲,频繁的new/delete势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低。
对于栈来讲,则不会存在这个问题,因为栈是先进后出的队列,他们是如此的一一对应,以至于永远都不可能有一个内存块
从栈中间弹出
(4)分配方式:堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。静态分配是编译器完成
的,比如局部变量的分配。动态分配由 alloca函数进行分配,但是栈的动态分配和堆是不同的,他的动态分配是由编译器
进行释放,无需我们手工实现。
(5)分配效率:栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈
都有专门的指令执行,这就决定了栈的效率比较高。堆则是C/C++函数库提供的,它的机制是很复杂的。4、写一个便利构造器

+(id)Person
{

Person *person=[Person alloc]init];
return [person autorelease]; 备注:ARC时不用 autorelease

}

5、截取字符串”20 | http://www.baidu.com”中,”|”字符前面和后面的数据,分别输出它们。

NSString * str = @"20 | http://www.baidu.com";
NSArray *array = [str componentsSeparatedByString:@"|"];
//这是分别输出的截取后的字符串

for (int i = 0; i<[array count]; ++i) {
NSLog(@"%d=%@",i,[array objectAtIndex:i]);

}

时间: 2024-12-12 23:28:56

常见笔试题(一)的相关文章

C#常见笔试题

1.产生20个不同的两位整数的随机数,并且对它们进行由小到大的排序.特别提醒:程序要自动生成20个不同的整数,而且这些整数必须是两位的,如:3不是两位整数,58是两位整数 List<int> numbers= new List<int>(); Random rnd = new Random(); int i = 0; while (i < 20) { int s = rnd.Next(10, 100); //注意s的值大于等于10小于100 if (!numbers.Cont

web前端常见笔试题总结

一.常见javascript笔试题 1.  var a = 1; delete a; console.log( typeof a); //number 显示生命的全局变量不能被删除 如果是 a = 1;   delete a; console.log(typeof a) //undefined; 隐式声明的全局变量可以删除 2.用一行代码实现字符串翻转 如: str="abcdefg",翻转后str="gfedcba"; var a = str.split('').

js作用域之常见笔试题,运行结果题

笔试题中经常有运行结果题,而大多体型都是围绕作用域展开,下面总结了几种相关的题: 外层的变量函数内部可以找到,函数内部的变量(局部变量)外层找不到. function aaa() { var a = 10; } alert(a);//Error a is not defined 由于a是函数内部定义的局部变量,根据作用域关系,外层(全局环境)访问不到局部变量.因此会报错 var a=10; function aaa(){ alert(a); } function bbb(){ var a=20;

[转] C语言常见笔试题大全1

点击阅读原文 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365UL) [此处对原文有改动]我在这想看到几件事情:1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的.3). 意识到这个表达式将使一个16位机的整型数溢

常见笔试题(三)

11.面向对象的三大特征,并作简单的介绍. 面向对象的三个基本特征是:封装.继承.多态. 封装是面向对象的特征之一,是对象和类概念的主要特性. 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的 数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏.隐藏对象的属性和实现细节,仅对外公开接口,提高代 码安全性,封转程度越高,独立性越强,使用越方便. 继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展. 通过 继承创建的新类称为"子类&q

数据结构与算法常见笔试题

一.算法的基本概念计算机解题的过程实际上是在实施某种算法,这种算法称为计算机算法.1.算法的基本特征:可行性,确定性,有穷性,拥有足够的情报.2.算法的基本要素:算法中对数据的运算和操作.算法的控制结构.3.算法设计的基本方法:列举法.归纳法.递推.递归.减半递推技术.回溯法.4.算法设计的要求:正确性.可读性.健壮性.效率与低存储量需求二.算法的复杂度1.算法的时间复杂度:指执行算法所需要的计算工作量2.算法的空间复杂度:执行这个算法所需要的内存空间三.数据结构的定义1.数据的逻辑结构:反映数

java常见面试题——java常见笔试题

注:转载自http://www.cnblogs.com/yhason/archive/2012/05/08/2489932.html,版权归其所有! 5.String是最基本的数据类型吗? 基本数据类型包括byte.int.char.long.float.double.boolean和short. java.lang.String类是final类型的,因此不可以继承这个类.不能修改这个类.为了提高效率节省空间,我们应该用StringBuffer类 6.int 和 Integer 有什么区别 Ja

Java常见笔试题&lt;四&gt;

1.以下Json格式数据,错误的是: A.{company:4399} B.{"company":{"name":[4399,4399,4399]}} C.{[4399,4399,4399]} D.{"company":{[4399,4399,4399]} E.{"company":{"name":4399}} 参考答案:AC 分析:A:Json对象要求属性必须有双引号:C:Json必须有一组有序的键值对组

常见笔试题总结

1.冒泡排序 1 int a[5] = {96,73,12,46,98}; 2 int i = 0,j = 0,t = 0; 3 4 for (j = 0;j < 4;j++) { 5 for (i = 0;i < 4 - j;i++) { 6 if (a[i] > a[i+1]) { 7 t = a[i]; 8 a[i] = a[i+1]; 9 a[i+1] = t; 10 } 11 } 12 } 2.操作系统中,进程可以分为(系统进程)和(用户进程)两类 3.ISO七层模型是什么?T

常见笔试题(二)

6.用obj-c写一个冒泡排序 -(void)mySort:(NSMutableArray *)mutArray { id tmpObj = nil; unsigned long flag = mutArray.count-1;//flag :最大脚标 while (flag > 0) { int k = flag; flag = 0; for (int j = 0 ; j < k ; j++) { int order = NSOrderedAscending;// 或 NSOrderedDe