
一叶障目
不见泰山
记一次面试过程遇到的东西吧,总结一下
笔试题
###题1
int a[5]={1,2,3,4,5};int p=(int )(&a+1);问(a+1),(p-1)是多少
答:1
2
3
4
5
6
7
8
9
10
11
12
13
14*(a+1)就是a[1],*(p-1)就是a[4],执行结果是2,5
&a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int)
int *p=(int *)(&a+1);
则p实际是&(a[5]),也就是a+5
原因如下:
&a是数组指针,其类型为 int (*)[5];
而指针加1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同。
a是长度为5的int数组指针,所以要加 5*sizeof(int)
所以p实际是a[5]
但是p与(&a+1)类型是不一样的(这点很重要)
所以p-1只会减去sizeof(int*)
a,&a的地址是一样的,但意思不一样
a是数组首地址,也就是a[0]的地址,&a是对象(数组)首地址,
a+1是数组下一元素的地址,即a[1],&a+1是下一个对象的地址,即a[5].
题2
frame和bounds有什么不同,size是否会不同?
题3
readwrite,readonly,assign,retain,copy,nonatomic 属性的作用
答1
2
3
4
5
6
7
8
9@property是一个属性访问声明,扩号内支持以下几个属性:
1,getter=getterName,setter=setterName,设置setter与 getter的方法名
2,readwrite,readonly,设置可供访问级别
2,assign,setter方法直接赋值,不进行任何retain操作,为了解决原类型与环循引用问题
3,retain,setter方法对参数进行release旧值再retain新值,所有实现都是这个顺序(CC上有相关资料)
4,copy,setter方法进行Copy操作,与retain处理流程一样,先旧值release,再 Copy出新的对象,retainCount为1。
这是为了减少对上下文的依赖而引入的机制。
5,nonatomic,非原子性访问,不加同步,多线程并发访问会提高性能。注意,如果不加此属性,则默认是两个访问方法
都为原子型事务访问。锁被加到所属对象实例级(我是这么理解的...)。
题4
求2-100之间的素数(质数)和
答
1 | int num; |
逻辑题
逻辑题1
1 | 一层楼,有10级台阶,可以一步、二步或三步走,有几种走法? 具体地说 |
答
1 | 逐次累加法 |
逻辑题2
1 | 甲、乙、丙三人讨论一道题,当每一个人都把自己的解法说出后,甲说:“我做错了。”乙说:“甲做对了。”丙说:“我做错了。”老师看过他们的答案,并听了他们的上述意见后,说三个人中有一个答案正确,有一个意见正确。 ? ?由此可知,谁的意见正确 |
答
1 | 三个人的意见只有一人正确,首先可以看出甲和乙的意见矛盾,必有一真一假,据此推出丙的意见必然为假,即丙没做错,丙的答案是对的。三人中只有一人答案正确,据此可以推出甲说真话(甲的意见正确) |
逻辑题3
1 | 12个相同小球里面有一个重量不一样3次找出来 |
答
1 |