A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kfz0507 中级黑马   /  2017-6-15 22:55  /  1509 人查看  /  2 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

********************C语言*********************

1,1个C程序从编写到执行,有哪几步?
编写代码--编译---链接---执行


2,do-while循环和while循环的区别
    do-while循环无论条件成立与否都会执行一次循环体,
    while循环严格按照先判断再确定是否执行循环体


3.什么是函数
函数就是一段实现了特定功能的代码


4,全局变量和局部变量的异同点
  1)相同点
        都是变量,都是用来存储数据的.
  2)不同点
    1.定义的位置不同
        局部变量:定义在函数内部
        全局变量:定义在所有函数外部
     2.作用域不同
        局部变量"最多"只能在函数的内部访问
        全局变量:从定义的位置开始,从定义的这一行以下都能访问
     3.初始值不同
        局部变量:初始是垃圾值
        全局变量:一般是0
    4)创建和回收的时间不同
        局部变量:程序运行到局部变量那一行代码的时候才会创建,在作用域结束回收
        全局变量:程序一启动就会创建,在程序运行结束回收

4,函数根据参数和返回值分为哪几类
    无参无返回值函数
    有参无返回值函数
    有参有返回值函数
    无参有返回值函数


5,如何分模块开发?
    1>要提供2个文件
        1).h文件 --函数的声明
        2).c文件 --函数的实现
    2,调用的时候,只需要包含模块的头文件就可以


6,什么是位运算?
是直接对整数在内存中的二进制位进行操作的运算(只能操作整形数据)


7,按位左移和右移区别
    左移
    1). 左移运算有可能会改变其正负性.
    2). 将1个数左移n位,相当于将这个数乘以2的n次方.
    右移
    1). 右移运算不会改变正负性.
    2). 将1个数按位右移n位.相当于这个数除以2的n次方.


8,当数组作为函数的参数,会不会丢失长度,怎么解决
当数组作为函数的参数的时候. 会丢失数组的长度,如果需要用数组长度要额外传递


9,基本数据类型作为函数的参数和数组作为函数参数传递有什么区别
    基本数据类型作为函数的参数是值传递
    数组作为函数参数是地址传递


10,指针概念
指针是一个数据类型,这数据类型可以用来定义变量,这个变量是专门用来保存地址的!


11.字符串数据在C语言中的存储.
    1, 使用字符数组来存储.  char name[] = "jack";
    2,使用字符指针来存储字符串数据.  char* name = "jack";


12,以字符指针的形式存储字符串的时候,字符串数据能不能修改,为什么?
不能修改,因为它是存在常量区的.


13,内存的五块区域?
    a. 栈
    是专门用来存储局部变量的.所有的局部变量都是声明在栈区域中的.
    b. 堆
    允许程序员手动的从堆申请空间来使用.(对象)
    c. BSS段
    是用来存储未初始化的全局变量和静态变量.
    d. 数据段/常量区
    用来存储已经初始化的全局变量、静态变量.还有常量数据.
    e. 代码段
    用来存储程序的代码/指令.


14,指针作为函数的参数可以实现的效果
    1.在函数的内部可以通过这个参数指针去修改实参变量的值.
    2.可以实现函数有多个返回值


16,字符串处理函数, strcpy,   strcmp,   strcat


17,结构体数组
    本质是一个数组,数组里面的每一个元素都是结构体


18,什么时候自己要定义枚举?
    变量的取值有限定的几个范围,就可以用枚举


19,#define  和  typedef 的区别
    1).#define是1个预处理指令.在预编译的时候执行. 在预编译的时候会吧宏名换成宏值.
    typedef 是1个C代码. 在运行的时候才会执行.
    2).#define 可以将任意的C代码取1个标识名.
    typedef只能为数据类型取名字.


20,static与extern修饰全局变量
    static:表示变量只能被当前文件访问.
    extern:所有文件共享.


21,static和extern修饰函数
    static修饰函数:表示函数为内部函数只能被本文件访问.
    extern修饰函数:表示函数为外部部函数能被程序的所有文件访问.(默认)


22,static和extern修饰局部变量:
    static:表示延长变量生命周期至程序结束.
    extern不能修饰局部变量


23,预处理指令的分类
    1>文件包含指令  #include
    2>宏定义  #define    (用来替换代码)
    3>条件编译 #if  (满足一定的条件才编译)





********************oc基础*********************

1,类和对象
    类:一类事物的特征和行为的抽象(模板)
    对象:满足类的特征的一个个体 (模板创建出来的对象)
    举例:
    汽车图纸----类
    根据汽车图纸造出来的车----对象


2,面向过程与面向对象的区别
    面向过程:完成一件事情,需要哪些步骤
    面向对象:完成一个事情,需要多少个对象来做

    面像对象:就是我们要找对象,找不同的对象,找合适的对象,帮你去做你应该做的事情
    面向过程:是啥事都要自己干!


3,HMPerson *p1 = [HMPerson new];后面的[HMPerson new]做了哪些事情
    new做了4件事
    1,申请空间
    2,创建对象
    3,初始化属性
    4,返回地址



4,#import和#include的区别
    相同点: 都是预处理指令,都是将指定的文件的内容拷贝到写指令的地方
    不同点: #import可以防止重复包含


5.对象和类方法的区别
    对象:以减号开头
    只可以被对象调用,可以访问成员变量
    类:以加号开头
    只能用类名调用,对象不可以调用
    类方法不能访问成员变量


6.方法和函数的异同
    1)相同点:
        1>方法和函数都是为了实现某一个功能
        2>方法和函数不调用,都不会起作用

    2)不同点:
        1>语法不同
        2>定义的位置不同
        3>归属感不同
        4>调用形式不同

7.什么是匿名对象?
    我们创建一个对象,但是并没有用指针去存储这个对象的地址。(或者直接说没有名字的对象,也对)


8.self 与 super区别
    self代表当前方法的调用者
        在对象方法中,调用的就是当前对象的对象方法
        在类方法中,调用的就是当前类的类方法
    super代表父类
        在对象方法中,调用的就是父类的对象方法
        在类方法中,调用的就是父类的类方法


9.实现多态的3个前提条件
    1,继承关系
    2,方法的重写
    3,父类的指针指向子类对象


10.私有属性和方法
    1. 私有属性
    被@private修饰的属性,叫做私有属性.

    2,真私有属性
    将属性定义在我们的@implementation中,那么它就是真的私有属性了。

    3.私有方法.
    方法只写实现,不写声明. 那么这个方法就是1个私有方法,只能在类的内部调用.



11,instancetype 和id 的区别与联系
    instancetype 只能作为方法的返回值。可以自动检测返回值和接收类型是否一致.
    id既可以做为返回值使用,也可以定义变量或者作为方法的参数


12,面向对象设计三个主要特征:
封装,继承,多态
    1)封装的好处:
    将变化隔离。(不管里面怎么变,使用者不需要知道)
    便于使用。(使用者只需按照一定的方法使用就可以了)
    提高重用性。(任何人都可以对已封装好的功能进行操作)
    提高安全性。(由于暴露给使用者的只是一些外在的操作环节,而不是里面本质的东西,所以就提高了对他的维护性,也就是安全性)

    2)继承  子类拥有了父类的所有属性和方法
    3)多态  父类的指针指向了子类的对象(如果存在多态,父类就可以访问子类的特有方法;如果不存在多态,父类就不可以访问子类的特有方法)



13.实例变量的修饰符 作用范围
    @puplic (公开的) 作用于当前类
    @protected  (受保护的) 作用于当前类,子类(派生类)
    @private (私有的)作用于当前类
    @package (框架级别的)  作用于框架级别的


14,点语法
    使用点语法的前提:首先得先有 get和set方法
    点语法实质:调用get和set方法


15.@proprety增强做的三件事
    1)在.h文件中帮我们自动生成get和set方法声明
    2)在.m文件中帮我们生成私有的实例变量(前提是没有在.h文件中没有手动生成)
    3)在.m文件中帮我们是实现get和set方法的



16.只读封装:属性的封装只有getter 没有setter
    只能调用getter方法取值.不能调用setter方法赋值. 因为没有setter方法

17.只写封装:属性的封装只有setter 没有getter
只能调用setter方法赋值.不能调用getter方法取值.因为没有getter方法



18.类与类之间的关系
    1. 组合关系
    2. 依赖关系
    3. 关联关系
    4. 继承关系(这个加不加都没事!!!)


19,oc中self的作用
    谁调用当前方法,self就代表谁
    self在对象方法中,self代表当前对象
    self在类方法中,self代表当前类



20,oc中如何自定义打印的类型,比方打印一个对象,可以把它的所有属性输出
重写系统的description,就可以打印出自己想要的东西



21,动态类型和静态类型
1). 静态类型: 指针指向的对象是1个本类对象
HMPerson *p1 = [HMPerson new];
2). 动态类型: 指针指向的不是1个本类对象
HMPerson *p1 = [HMStudent new];


22,什么是构造方法?
用来给对象的实例变量初始化的方法就是构造方法(init方法)




****************oc加强***********************


1,内存管理范围:管理任何继承NSObject的对象,基本数据类型不需要内存管理。


2,内存管理的原则
    1)谁创建,谁release
    2)谁retain,谁release
    阐述:
        只要还有人在使用某个对象,那么这个对象就不会被回收;
        只要你想使用这个对象,那么就应该让这个对象的引用计数器+1;
        当你不想使用这个对象时,应该让对象的引用计数器-1;

3,set方法的内存管理
1)基本数据类型:直接赋值
2)OC对象类型:先判断是不是新传进来的对象, 对旧对象做一次release,对新对象做一次retain


4,野指针
没有初始化的指针变量 或 指向的内存空间已经被释放的指针变量

5,僵尸对象
本质是一个对象,这个对象已经被回收


6,什么是内存泄露
该回收的对象没有被回收,就产生了内存泄露


7,循环retain
两个类相互包含,就会出现无法释放的问题,解决方案:一边用retain 另一边用assign


8.import和@class的区别
    1)#import是1个预处理指令. 将文件的内容拷贝到写指令的地方.
    2)@class不是1个预处理指令. 不会将任何文件的内容拷贝进来.仅仅是告诉编译器这是1个类.


9,autorelease是什么?
简单来说,就是一个池子,当我们的这个池子释放的时候,它会将它里面的所有对象做一次release操作


10,ARC的判断准则: 只要没有强指针指向对象,对象就会被立即释放


11,强指针和弱指针
    在ARC环境下,对于OC对象
    用__strong修饰的指针叫强指针(默认)
    用__weak修饰的指针叫弱指针


12,ARC机制下的循环引用:一端使用strong 一端使用weak


13,@proprety参数
    1)原子性:atmoic(原子性)noatmoic(非原子性)
    2)读写属性:readwrite和readonly
    3)set方法的处理:assign(修饰基本数据类型)retain(用来修饰OC对象)
    以上是MRC的情况下  ARC的情况下多两个(strong(强指针)weak(弱指针))



14,分类的作用:在不改变原有类的基础上,为一个已经存在的类扩充方法


15,分类和继承:分类用来添加新的方法不可以改变原方法,继承可以添加改变原方法并可以增加属性


16,延展(Extension)概念
    延展可以认为是1个匿名的分类,它只有声明没有实现.和本类共享1个实现.


17,什么是非正式协议
第一种答法:给系统的类增加的分类叫非正式协议
第二种答法:凡是给NSObject或者其子类Foundation框架中的类增加的类别都是非正式协议.


18,block概念:block是一个类型,这个类型可以定义变量,这个变量是用来存储一段代码的


19,block能不能修改外面的局部变量
    默认情况下,block 内部不能修改外面的局部变量
    给局部变量加上_block,这个局部变量就可以在block内部改变


20,block与函数的异同
    1.相同点
    都可以封装成一段代码

    2.不同点
    1>block是一种数据类型,函数是一种不是,函数是一段具有特定功能的代码段
        所以有block类型的变量,没有函数类型的变量
    2>block可以直接做参数传递,函数不能


21,协议的概念
协议: 一些方法的声明,写在.h文件中,供其他的类去遵守.


22,代理设计模式的场合:
   * 当对象A发生了一些行为,想告知对象B (让对象B成为对象A的代理对象)
   * 对象B想监听对象A的一些行为 (让对象B成为对象A的代理对象)
   * 当对象A无法处理某些行为的时候,想让对象B帮忙处理 (让对象B成为对象A的代理对象)

        1)通知的场合
        * Baby发生了一些行为,想告知保姆
        2)监听器的场合
        * 保姆想监听Baby的一些行为
        3)有些事情,不想自己处理,想交给别人处理
        * Baby发生了一些行为, 但是自己不会处理, 可以交给保姆处理


23,Foundation框架
Foundation框架是系统提供的一些基本的类的集合,是OC中最基础的类

2 个回复

倒序浏览
谢谢大神分享
回复 使用道具 举报
大神等等我啊,怎么就多我3分了.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马