1.给定一个字符串,输出本字符串中只出现一次并且最靠前的那个字符的位置?
比如“abaccddeeef”则是 b,输出 2 答:
int main()
{
char a[80] = "abaccddeeef\0";
char ch;
int i, m, b[80];
int flag = 0;
ch = getchar();//获取一个字符
m = strlen(a);
for (i = 0; i < m; ++i){
if (a[i] == ch){//找到了,直接判断是否相等
b[flag] = i+1;//记录位置
flag += 1;
}
}
if (flag == 0) printf ("no");
else {
printf ("%d\n", flag);
for (i = 0; i < flag; i++){//对位置进行输出,用循环
printf ("%d ", b[i]);
}
printf ("\n");
}
return 0;
}
2.实现一个冒泡排序或者快速排序
答:冒泡排序:
int array[5] = { 28,27,36,45,8};
for (int i = 0; i < 4; i++) {
for(int j = 0; j < 4; j++) {
if (array[j] > array [j + 1]){
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
for(int i = 0; i < 5; i++) {
printf("%d\n",array[i]);
}
3.请编写一个函数用于计算阶乘
答:
int f(int i){
int t=1,j;
for(j=1;j<=i;j++)
t=t*j;
return t;
}
4.Cocoa Touch 提供了几种 Core
Animation 过渡类? 答:Cocoa Touch 提供了 4 种 Core Animation 过渡类型,分别为:交叉淡化、推挤、显示和覆盖。
5.iOS 平台怎么做数据的持久化?coredata 和 sqlite 有无必然联系?coredata 是一个关系型数据吗?
答:数据的持久化本质上都是就是写文件,但从逻辑上又分成很多种,比如写入沙盒,比如存到网络上,比如写入数据库。
core data 是对 sqlite 的封装,因为 sqlite 是 c 语言的 api,然而有人也需要 obj- c 的 api,所以有了 core data ,另外,core data 不仅仅是把 c 的 api 翻译成 oc
的 api,还提供了一些管理的功能,使用更加方便。
• App 升级之后数据库字段或者表有更改会导致 crash,CoreData 的版本管理和数据迁移变得非常有用,手动写 sql 语句操作还是麻烦一些。
• CoreData 不光能操纵 SQLite,CoreData 和 iCloud 的结合也很好,如果有这方面需求的话优先考虑 CoreData。
• CoreData 并不是直接操纵数据库,比如:使用 CoreData 时不能设置数据库的主键,目前仍需要手动操作。
6.Object-c 的类可以多重继承么?可以实现多个接口么?category 是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-c 的类不可以多重继承;可以实现多个接口,通过实现多个接口可以
完成 C++的多重继承;Category 是类别,一般情况用分类好,用 Category 去重写类的方法,仅对本 Category 有效,不会影响到其他类与原有类的关系。
7.#import 跟#include 有什么区别,@class 呢?#import<>跟#import””有什么区别?
答: #import 是 Objective-C 导入头文件的关键字,#include 是 C/C++导入头文件的关键字,使用#import 头文件会自动只导入一次,不会重复导入,相当于#include 和#pragma once;@class 告诉编译器某个类的声明,当执行时,才去查看类的实现文件,可以解决头文件的相互包含;#import<>用来包含系统的头文件,#import””用来包含用户头文件。
8.属性 readwrite,readonly,assin,retain,copy,nonatomic 各是什么作用,在哪种情况下用?
答:
readwrite 是可读可写特性;需要生成 getter 方法和 setter 方法时 readonly 是只读特性只会生成 getter 方法不会生成 setter 方法;
不希望属性在类外改变assign 是赋值特性,setter 方法将传入参数赋值给实例变量;仅设置变量时;
retain 表示持有特性,setter 方法将传入参数先保留,再赋值,传入参数的retaincount 会+1;
copy 表示拷贝特性,setter 方法将传入对象复制一份;需要完全一份新的变量
时。
nonatomic 非原子操作,决定编译器生成的 setter
getter 是否是原子操作,atomic 表示多线程安全,一般使用 nonatomic
9.写一个 setter 方法用于完 @property (nonatomic, retain) NSString *name;写一个 setter 方法用于完成@property(nonatomic, copy) NSString *name;
答:
-(void)setName:(NSString *) str
{
[str retain];
[name release];
name = str;
}
- (void)setName:(NSString *)str
{
id t = [str copy];
[name release];
name = t;
}
10.对于语句 NSString *obj =[[NSData alloc] init]; obj 在编译时和运行时分别是什么类型的对象?
答:编译时是 NSString 的类型;运行时是 NSData 类型的对象
...
还有 94页,204道面试题。
如需要更多学习材料百度网盘链接地址,请到微信小程序搜索“斌雅资料”,序号:11,密钥:2233,查询资料获取。









网友评论