1.C语言有多少个关键字? 32
2.变量与常量的区别是什么?
// 变量可变 存在栈区 常量不可变 常量区
3.变量的命名遵循什么原则?
// 大小写 字母 数字 下划线 美元符 驼峰命名法,不能以数字开头
4.c语言有哪五大数据类型?
// 基本类型 空类型 结构类型 自定义类型
5.常见的运算有哪些?
// 数术 逻辑 关系 赋值
6.逻辑运算有哪几种?判断原则是什么?
// 逻辑与 && 逻辑或|| 逻辑非 !
7.存在多个运算符时,运算顺序由什么决定的?
// 先算高级运算 同等级 从左往右
8.计算机存储的数据本质上是什么?
// 二进制
9.流程控制有哪几种?
//顺序 判断 循环
10.选择结构有哪几种?
//if, if(){}else if(){}
11.switch语句如果case里没有break的执行流程是什么?
// 穿透
12.循环结构有哪些?
// while for do-while
13.什么时候适合用for什么时候适用用while?
// 当知道循环次数是 用for 当不知道次数是用 while
14.for与while能不能相互转换?
// for 循环 可以转换 while while 不一定能转换for
15.do while与while的区别是什么?
// do while 至少会执行一次
16.continue与break的作用及区别是什么?
// continue 是跳出本次循环 循环会继续执行 break 结束循环
17.什么是进制?
// 进制就给计算机识别的
18.计算机中常见的进制是有哪些?怎么表示?
// 二 八 O 十 十六 OX 进制
19.2进制有2吗?16进制每位最大是多少?
// 没有 F
20.常见的位运算有哪几种?判断逻辑是什么?
//与 或 异或 取反
21.函数可以分为哪几类?使用步骤是什么?
// 无参无返回值 无参有返回值 有参无返回值 有参有返回值 先声明 再调用
22.函数的作用域是什么?
23.函数声明的作用是什么?可以没有声名吗?
// 告诉编译器 可以在 主函数前面 没声明
24.函数的参数会开辟空间吗?
// 会
25.函数的参数传递的是实际是什么?
// 值传递 是把实参值传给形参
26.如果用函数改变一个局部变量的值?
27.什么是数组?什么时候用数组?
//数组是把相关相同的数据集合在一起 当要把相同的数据集合在一起的时候
28.数组常见的排序算法有哪些?
//冒泡排序 选择排序 快排
29.数组的元素的个数可以改变吗?
// 不可以
30.定义数组时可不可以不写长度?什么时候必须写长度?
// 当一维数组 定义同时赋值时不用 定义不赋值的时候
31.数组批量赋值要注意什么问题?什么情况下才可以批量赋值?
// 要注意数组长度 定义同时一起赋值
32.指针是什么?
// 指针是指 装地址的一个储存空间
33.指针可以进行什么运算?
// 加减运算 赋值
34.指针加1或减一时移动的字节数由什么决定?
// 是由当前的指针类型决定
35.如何确定一个指针的类型?
36.如何给一个数据类型定义指针?
37.什么叫野指针?
// 当定义一个指针没初始化,使用指针
38.什么叫常量指针?什么叫指针常量?
39.数组名代表什么?什么叫指针数组?什么叫数组的指针?
//代表数组的第一个元素首地址 指针数组是数组的每个元素
// 都是装指针的,数组的指针是指数组的首地址
40.C语言字符串有哪几种定义方式?各有什么区别?
// 两种 字符数组每个元素代表一个字符 有\0 字符串数组 系统默认加\0
41.什么叫结构体?
//是几个不同数据的集合
42.结构体的内存分配原则是什么?
// 在足够的储存的情况下 巡址是从高到低,结构体的数据类型所占的字节数是当前的最大数据类型 的整数倍
43.结构体名含有首元素的地址吗?
// 没有
44.枚举是什么?有什么作用?
//是一种数据类型 是把多个整形常量以自定义的形式封装成一个整体
45.typedef有什么作用?
// 是给数据类型 起别名
46.C预处理指令是什么?有哪几类?
/* 宏定义:#define 代码替换,为了出现符号的优先级,替换后的代码加(),
头文件包含:#inclde 文件复制,会把整个文件内容复制;
条件编译:#if #else 给定条件为真,则编译下面代码
*/
47.防止重复包含与交叉包含的方法是什么?
48.static与extern的区别是什么?
49.文件操作的步骤是什么?
// 打开文件 操作文件 关闭文件指针
50.文件操作的输入与输出怎么区分?是相对于什么而言?
OC 部分
1.OC对比C语言多了什么数据类型?
// BOOL block
2.#include与#import的异同点是什么?
/*
import 与include的区别
1.include是在C语言中.而import是在OC中,且仅在OC中使用,而include则C与OC都可以,因为OC兼容C.
2.include并没有做重复包含优化,需要自已用条件编译与宏定义去实现.而import自已内部已经实现了.
相同点:
1.都是预处理指令
2.都是文件内容拷贝
*/
2.OC是一门什么样的语言?面向对象与面象过程的区别是什么?
//面向对象的语言 面向对象是只关心找谁去完成 面向过程是自己怎么完成每一步的过程
3.什么是类,什么是对象?
//类是具体事物的抽象 对象是该类事物实实在在的个体
4.一个类主要有哪些部分组成?
//类声明与实现
5.一个类可不可以没有声名?可不可以没有实现?
// 可以没声明 但是不能没有实现
6.类的属性又称为什么?可不可以在定义时赋值?定义时默认是多少?
//实例变量 不可以在定义时同时赋值 0
7.方法有哪两种?有什么区别?
/*
两种
类方法以 + 开头,类方法是由类名调用,类名对是象名
2 对象方法以 - 开头,对象方法是由对象调用
类方法和对象方法可以同名
*/
8.方法与函数有什么区别?
9.用什么表示对象?什么叫匿名对象?
//匿名对象:仅用来实现对象方法或者作为方法的参数时使用的对象,只能在创建时使用一次,访问类的实例变量无意义
10.内存主要分为哪几个区?对象在哪个区?
//五大区 栈区 堆区 静态区 常量区 代码区 2堆区
11.属性的作用域由什么控制?分别是什么?
// 权限控制 @public @package @private @protected
12.面向对象的三大特性是什么?
//封装 继承 多态
13.什么是继承?继承必须满足什么条件?
// 当A对象拥有B对象的所有声明 属性 与方法 而且A对象拥有独有的属性和方法 子类是父类
14.什么是组合(关联)?什么是依赖?
// 1当A对作为B对象的属性时 2当A对作为B对象的方法的参数和局部变量是
15.OC是的方法可不可重写?可不可以重载?(方法名相同,参数不同称为重载)
// 可已 不可以
16.属性能不能重写?
// 不可以
17.self与super的作用及区别?
/*
/*self的用法
self 可以在类中用来表示调用者,去调用方法.或属性.
注意: 当self调用属性时,只在对象方法中.因为类方法中不能用属性.
self调用属性,只表示类的对象.
super
表示:调用父类中的方法.
使用场合:
当子类重写父类的方法后,在某些情况下,又需要用到父类方法的功能.
注意:对象方法中只能调用父类的对象方法.类方法只能调用对象的类方法.
如果子类没有重写父类的方法,没有必要用super.用self.
所以只有在子类重写了父类方法的时候,我们调用父类方法,才要用super.
属性不能用super.因为子类不能重写父类的属性.
*/
18.什么是多态?多态的有什么作用?
// 父类的指针向了子类的对象 代码的拓展性和复用性强
19.多态要满足什么条件?
// 有继承关系 当父类指针指向子类对象时,父类必须要强转
20.多态中父类能直接访问子类独有方法及属性吗?
// 不能 必须强转
21.id指针是什么?有什么作用?
// 是OC一个指针--万能指针 用于表示任意的对象.类似于NSObject*, id本身已经封装好了一个*.不用加!!!
//可以动态调用子类的方法.调用子类独有方法时,不需要强转!
//注意:点语法除外!! 也就是id指针无法通过点语法给独有属性赋值.如果要使用,必须强转
22.id指针能使用点语法吗?能用调用子类独有方法吗?
//id指针无法通过点语法给独有属性赋值.如果要使用,必须强转.
//可以动态调用子类的方法.调用子类独有方法时,不需要强转!
23.类的本质上是什么?类的方法与属性内存的同一片区域吗?
/*
本质上还是一个对象.叫类对象.这个对象的类型:Class
类对象是在程序启动的时候加载的,与对象创建无关.
加载的标志:是load方法.
对象是在它被创建的时候加载的.且必须在类对象加载完成后才会加载.
对象加载会执行initialize方法. 只会在对象第一次创建的时候执行.
init :构造方法
构造方法是在对象被创建的时候执行的.对象每次创建都会执行.
注意:
1.一个类的实例对象被创建,则其父类的对象也会被创建.(直接或间接父类都会被创建)
2.分类的load方法不会覆盖主类的.主类与分类的load方法在程序启动的时候都会执行.
*/
24.OC中封装主要指的是什么?
//对属性的封装
//让一个属性不能让外部直接访问,而是由我们提供set与get方法去访问.
//好处:
//提高安全性 隔离的变化 提高复用性 便于使用
25.点语法的本质是什么?用点语法访问与赋值底层做了什么操作?
// 属性的调用 编译器自动替换为set 和get
26.@property有什么作用?
//编译器启动生成 set和get 方法
27.什么时候@property不起作用?
// 当自己写出标准的set和get 方法时
28.动态类型与静态类型的区别?举例说明?
//动态类型:编译时类型不确定,运行时才检测的类型,例如: id obj = [Person new];
//静态类型:编译时已经确定的类型,例如: Person *per = [Person new];
29.构造方法有什么作用?
//是一个对象在初始化的时候执行的方法.
30.重写构造方法的好处是什么?缺点呢?
//给属性初始化时可以赋值,优点:实现简单. 不足:不能够根据不同对象赋不同的值,属性的值是固定的.
31.为什么要自定义构造方法?要注意哪些问题?
/*优点:使用灵活,可以根据不同的对象给属性设定不同的值. 不足:写法比较麻烦一些.
注意:
自定义构造方法必须以init开头.而且,第二个单词首字母必须大写.--规则!
子类继承父类自定义构造的写法.
在子类里自定义构造时,要调用父类的自定义构造,而不是NSObject的init.这样才能隔离父类的变化.
而且,父类的属性可以保持私有化private.
*/
32.OC内存管理的目的是什么?什么叫内存泄露?
// 防止内存泄露 当一个对象不在使用时,这个对象没有被销毁,空间没有释放时,这就叫内存泄露
33.OC内存管理分为哪两种?
// 手动管理 MRC 自动管理 ARC
34.MRC内存管理的目的及原则是什么?
//防止内存泄露,
//内存管理的原则:不再使用的对象必须销毁,释放内存.
35.ARC内存管理的机制是什么?
//以下添加或减少计数器值的方式,不再需要手动添加,全不能手动添加,编译器全部帮你实现.
36.内存管理的方法有哪些?这些方法能不能在ARC里使用?
//retain,release,dealloc
37.对象在释放时调用哪个方法?MAC与ARC下重写这个方法要注意什么问题?
//dealloc
38.什么叫僵尸对象?
//僵尸对象:当一个对象的引用计数变为0(MRC)或者没有被强指针指向时,其所占用的内存就会被系统回收.但是系统在没有新对象使用该空间前不会初始化该内存区域,原对象的数据信息仍会保留,通过原有的指针,可能仍可以访问到被释放对象的信息,这时候就称这个对象为"僵尸对象".对于僵尸对象,编译器并不会报错,需要在Xcode界面中设置开启僵尸对象检测
39.什么叫野指针?什么叫空指针?
//OC中的野指针就是指向僵尸对象的指针或者未赋值的指针(类似于C中的野指针)
40.什么叫强指针?什么叫弱指针?分别用什么表示?
ARC
//强指针:__strong 对象被销毁之后,指针仍然指向那片内存区域.成为野指针. (默认)
//弱指针:__weak 对象被销毁后,指针不再指向那片内存区域,成为空指针nil;
//注意:strong和weak都只能用于oc对象.非oc对象仍然用assign. 如:基本数据类型.
MRC
//强指针:retain :表示自动生成set方法的内存管理,表示会自动release旧值,retian新值 .只用于OC对象
//弱指针:assign: 不生成自动内存管理.非OC对象.(不加默认是这个)
42.@property的参数是要有哪几类?分别是什么?有什么作用?
/*
参数:
内存管理相关:
retain :表示自动生成set方法的内存管理,表示会自动release旧值,retian新值 .只用于OC对象
assign: 不生成自动内存管理.非OC对象.(不加默认是这个)
copy :表示自动生成set方法的内存管理,表示会自动release旧值,copy新值
强指针:__strong 对象被销毁之后,指针仍然指向那片内存区域.成为野指针. (默认)
弱指针:__weak 对象被销毁后,指针不再指向那片内存区域,成为空指针nil;
跟权限相关:
readonly:只读.不自动生成set方法,只生成get方法
readwrite:可读可写:自动生成set与get方法 (不加默认是这个)
跟多线程相关:
nonatomic:不同步,性能更高.--推荐
atomic:同步 性能更低. (不加默认是这个)
跟get与set方法命名相关:
getter=get方法名 表示生成你自定义的get方法名.不再是原有的以属性名命名的方法
setter=set方法名: 表示生成你自定义的set方法名.
注意这个一般不设置. BOOL型除外.
*/
下面的答案有错误的和不够完整的请见谅,本帖仅供参考。
如果想要更详细的,把问题放到百度
43.什么问题是ARC模式解决不了的?MRC与ARC如何解决循环引用的问题?
// 循环引用循环引用: 概念: 一个对象引了另一个对象, 而另一个对象中同样引用了这个对象.两个对象互相引用.
//MRC:一个retian 一个用assgin
//ARC:一个用strong 一个用week
44.@autoreleasepool有什么作用?
/*
作用:会把池内调用过autorelease的对象全部release一次.注意:是在这个池销毁的时候.
不足:控制不灵活,只能等释放池销毁才会release.
注意:不要把大对象放在这里auturelease.占用内存大的对象要手动release,在对象用完之后.
*/
45.autorelease的作用是什么?要注意什么样的问题?与release区别是什么?
/*
作用:把对象放到一个自动释放池里,则对象会被自动回收.
因为自动释放池销毁时会让对象调用release方法.
用法:
直接让对象创建后,调用一次autorelease方法.
这个方法会返回对象本身.
好处:
不用关心对象在什么时候释放.
注意:
1.不能再调用autorelease方法后,再调用release.
2.不能重复调用autorelease
*/
44.@class与#import有什么区别?
// @class 只会告诉编译器,这里要用到的是一个类,但是这个类里的属性与方法不知道,
//#import是会把整个头文件拷贝到当前文件,则这个类以及这个类的属性与方法都知道.
//@class不需要拷贝文件内容,执行效率更高.我们只需要在需要有到这个对象里的属性或方法时,再去导入头文件即可.(推荐)
//#import只要导入,就会拷贝,不管这个文件是否要用到对象属性或方法.效率更低,同时,只要头文件改动,全部需要重新拷贝,编译.
45.分类Category是什么?有什么作用?
/*
好处:
1.可以把一个类分模块,便于协同开发,并优化类的结构.
2.不改变类名,给类添加功能.
注意的问题:
1.分类不能写(添加)属性.只能(添加)写方法.
2.分类中的方法不能与主类或其它分类重复.即不能重写.如果重写了,那么会覆盖原来的方法.
3.分类中可以直接用主类的属性,但是属性的权限要>=@protected
4.不同分类中重写了同一个方法.那么哪个分类最后编译,则哪个分类的方法执行.
5.主类永远在分类之前编译
编译顺序: 父类-->主类-->分类(多个分类是可以调整顺序的)
*/
46.分类与子类的相同点和区别是什么?
47.协议是什么?有什么作用?
//协议就是一系列方法的列表.也是用来遵守的.如果一个类遵守了一份协议,就表示这个类拥有了这个协议里的所有方法.
48.协议中能定义属性吗?协议中有方法的实现吗?
//不能定义属性, 只有方法的声明 没有实现
49.协议中的方法一定要实现?通过什么来控制方法是否一定要实现?
//不一定要全部实现 取决于关键字 @optional: 不一定要实现 @required: 一定要实现
50.协议可以多遵守吗?可以协议遵守协议吗?
//可以多遵守协议 可以协议遵守协议
51.协议限定对象类型指的是什么?代码怎么体现?
//id 指针 id<ProtocolTest> ns
52.什么叫OC的代理模式?实现步骤是什么?
/*
1.找代理对象去帮我们做事情.
2.当一个对象A希望在做某些事情的时候,告诉另一个对象B.--可以让B成为A代理.
3.当一个对象B希望另一人对象A在做完某些事情时,自已能知道.----可以让B成为A的代理.
定义:
1.分析需求,看实现需求需要哪些行为.
2.定义协议:把这些行为声名在协议中.
3.定义需求类,在类中定义一个id属性,让这个id属性去遵守这个协议.(限定这个id指向的对象类型)
4.定义一个实现需求的方法声名在类中.
5.在类的实现里去实现这个需求.
6.在这个方法的具体实现中调用id属性去动态调用对应的方法.去实现具体需求.
使用:
1.让一个类去遵守这个协议.
2.同时实现这个协议里的所有方法.
3.创建这个类的对象.以及需求类的对象,赋值给需求类的id指针.
4.让需求类的对象调用自已实现需求的方法.(真实处理需求的是代理对象).
*/
53.block是什么?与函数有什么区别?
//作用:对代码的封装,可以在程序运行时动态封装调用.效率很高.
54.block能访问外部变量吗?能直接修改吗?怎么样才能?
//能访问外部变量 变量只有加了__block才能在block内部改变.默认不能改变外部的值,只能只读.
55.block可以当做哪些成分?要注意什么问题?
56.Foundation框架主要分为哪几大类?
//结构体 集合 字符串 字典 NSDate NSValue NSNumber 拷贝 description
57.结构体主要分为哪几大类?各有什么作用?
// NSRange 范围 NSPoint 坐标(X,Y) NSSize 宽高 W H NSRect 矩形 ( X,Y,W,H)
58.字符串主要分为哪两类?有什么区别?
// NSArray 不可变字符串:长度不可变 ;NSMutadleArray
//可变字符串,长度可变 NSMutadleArray 是NSArray 的子类
59.字符串主要有几种创建方式?
// 普通创建 动态创建 通过C语言字符串创建,将C语言字符串,转换成了OC字符串
// 从文件中读取创建 从URL读取.URL:
60.字符串输出的方法主要有哪几种?
// 把字符串输出到一个文件中 把字符串输出到一个 资源对象中(URL)
61.可变字符串常见操作有哪些?
// 1增加:在后面增加 2减少:在删除一定范围的字符串
// 3替换:把某一个范围内的字符串替换成别的字符串
62.字符串常见用法有哪些?
// 1 把字符串的所有的字符变成大写 ,2 把字符串的所有字符串的字符变成小写,
// 3追加:重新生成一个字符 4 两个字符串的比较大小 ;是否相等 5 截取;
63.集合框架是要有哪三类?
// NSArray NSSet NSDictiongary
64.Array集合是什么?分为哪两类?
// NSArray NSMutableArray
65.Array集合常见操作有哪些?
// 取值 遍历集合
66.Set集合是什么?分为哪两类?
// 无序 的集合 NSSet NSMutableSet
67.Set集合常见操作有哪些?
// 取值 遍历集合
68.Array与set集合是区别是什么?
// NSArray 是一个有序的集合 可以遍历取出每一个值
// NSSet是一个无序的集合 遍历只能随机取出一个值
69.字典是什么?主要有哪两类?
// 1 键值对 2 NSDictionary NSMutableDictionary
70.字典的常见操作有哪些?
// 创建 遍历取值 NSMutableDictiongary 可以增加 删除 修改
71.字典的key值能相同吗?value值呢?
// 不能 可以
72.NSNumber的主要作用是什么?
// 1把基本数据类型包成OC对象 2把OC对象拆成基本数据类型
73.NSValue的主要作用是什么?
// 1把结构体包装成OC对象 2把OC对象拆成 结构体
75.NSDate的主要作用是什么?
// 1获取当前时间,或者获取任意一个时间节点,并封装成对象
// 2把一个字符串的时间转换成NSDate的对象
// 3 把NSDate对象转换成对应格式的字符串
76.description的作用是什么?
// 1判断一个对象是否是一个类或者子类的对象 ,不包含父类
// 2判断一个对象是否是一个类的对象(实例) 不包含子类
78.copy的作用是什么?
// 拷贝数据
79.深复制与浅复制有什么区别?
//1.深复制:就是表示拷贝一个对象去生成一个新对象.也就是新对象与之前对象占用不同的空间,但内容一致.
//2.浅复制:就是表示拷贝一个对象指针对生成一个新的指针.这两个指针指向同一个对象.
80.可变字符串与不可变字符串,可变集合与不可以变集合深复制与浅复制的区别?
IOS学习之——面试问题集锦
最新推荐文章于 2024-05-06 14:20:55 发布