Unity面试题 每日5题 01

1. 虚函数的实现原理,父类和子类的内存布局

虚函数的实现原理

每一个含有虚函数(无论是其本身的,还是继承而来的)的类都至少有一个与之对应的虚函数表(多继承有多个。同时第一个为主基类),其中存放着该类所有的虚函数对应的函数指针。
有虚函数的类内部有一个称为“虚表”的指针,指向该表。

如果类没有重写虚函数,那么直接拷贝继承来的虚函数到虚函数表中。
如果类重写了虚函数,需要在虚函数表中覆盖对应的虚函数。
同名虚函数在虚函数表中的偏移量相同。(如果类是个多继承,且都有虚函数,那么他就有多个虚函数表指针,为了使偏移量相等。)

2. 协程和进程的区别

协程和进程区别:

1) 一个线程可以多个协程,一个进程也可以单独拥有多个协程。
2) 线程进程都是同步机制,而协程则是异步。
3) 协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态。
4)线程是抢占式,而协程是非抢占式的,所以需要用户自己释放使用权来切换到其他协程,因此同一时间其实只有一个协程拥有运行权,相当于单线程的能力。
5)协程并不是取代线程, 而且抽象于线程之上, 线程是被分割的CPU资源, 协程是组织好的代码流程, 协程需要线程来承载运行, 线程是协程的资源, 但协程不会直接使用线程, 协程直接利用的是执行器(Interceptor), 执行器可以关联任意线程或线程池, 可以使当前线程, UI线程, 或新建新程.。
6)线程是协程的资源。协程通过Interceptor来间接使用线程这个资源。

3. Struct和class的区别,值类型和引用类型区别

Struct和class的区别

1)类型不同,struct是值类型。class是对象类型;

2)访问权限不同,struct默认访问权限为public,class默认访问权限为class;同样,默认了继承的访问权限,struct默认访问权限为public,class默认访问权限为private;

3)Class使用前必须用new关键字实例化,struct不需要;并且实例化一个class,它将创建在堆上。而实例化一个struct,它将创建在栈上。

值类型和引用类型区别:

1)值类型存取速度快,引用类型存取速度慢。

2)值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用。

3)值类型继承自System.ValueType,引用类型继承自System.Object

4)值类型的数据存储在内存的栈中,引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址。

5)值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的地址,即对象的引用。

6)值类型变量直接把变量的值保存在堆栈中,引用类型的变量把实际数据的地址保存在堆栈中,而实际数据则保存在堆中。

4. C#装箱和拆箱

1) 装箱是将值类型转换为引用类型 ;拆箱是将引用类型转换为值类型。

    

 2)为什么需要装箱/拆箱;

需要将一个值类型传入容器时,就需要使用到装箱了。装箱后的对象看上去和一个对象一样,拥有方法,可以当作object处理,拆箱后的变量,看上去又如同C语言中的那些变量、结构体一样,可以直接参与运算和处理。

5. Inline函数有啥作用,和宏定义有啥区别

Inline函数有啥作用

inline函数(摘自C++ Primer的第三版) 在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联.inline函数的主要作用 引入内联函数的目的是为了解决程序中函数调用的效率问题。

和宏定义有啥区别

1)宏定义不会进行类型的判断;
2)inline是函数,宏定义不是函数。
3)宏返回值不能强制转换成合适的类型,inline返回值可以。

4)inline是在编译时展开的,宏定义是在预编译是展开

5)宏在定义的时候容易出现二义性,inline不会。

Unity面试题 每日5题 02

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值