Unity3D实习生面试题总结-编程语言相关

编程语言相关


什么是面向对象

面向对象三大特性

封装:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

继承:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

多态:指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。

面向对象五大原则

单一职责原则:一个类应该只有一个引起他变化的原因。

开放封闭原则:对扩展是开放的,对更改是封闭的。

里氏替换原则:子类可以替换父类并且出现在父类能够出现的任何地方。

依赖倒置原则:传统的结构化编程中,最上层的模块通常都要依赖下面的子模块来实现,也称为高层依赖低层。所以依赖倒置原则就是要逆转这种依赖关系,让高层模块不要依赖低层模块。

接口隔离原则:使用多个专门的接口比使用单个接口要好的多。


C#常用容器及其数据结构

Array

System.Array命名空间,数组,在内存中是连续存储的。

ArrayList

属于System.Collections,不需要指定长度能动态扩容。所插入的数据为object类型,会发生装箱拆箱。类型不安全。

List<T>

属于System.Collections.Generic,底层数据结构是数组,避免了装箱拆箱,并且类型安全。

LinkedList<T>

属于System.Collections.Generic,底层数据结构是双向链表,类型安全,因为是链表实现的索引不用动态扩容

HashSet<T>

属于System.Collections.Generic,底层数据结构是哈希表,不能用索引访问,值不能重复且没有顺序。

HashTable

属于System.Collections,底层数据结构是哈希表,键值对均为object类型,发生装箱拆箱,key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。

Dictionary<T>

属于System.Collections.Generic,底层数据结构是哈希表,因为是泛型所以没有装箱拆箱。

总结

C#所有泛型容器都在System.Collections.Generic命名空间下,非泛型容器在System.Collections空间下。


结构体和类的区别

内存中的差别

类的实例一定在堆上,结构体的实例一般在线程栈上分配(虽然也可以作为字段嵌入引用类型的对象中)。

类的变量是实例在堆中的内存地址,结构体的变量中包含了实例本身的字段。这也是值类型和引用类型的区别。

字段的差别

结构体中不能设置字段默认值,类可以。

给字段设置默认值是inline内联的语法,我觉得这点差别是结构体不支持内联语法造成的。

默认构造器的差别

结构体和类都有默认的实例构造器,但结构体不能显式给出。

自定义构造器的差别

自定义的构造器,类定义了后默认的被隐藏,无参构造器就需要自己给出,不需要把所有字段初始化,结构体必须初始化所有实例字段和未初始化的非静态的字段。

声明实例时的差别

结构体在声明的时候就已经为其分配栈上的内存了,new只是初始化其字段,而类需要用new为其分配堆上面的内存。

可访问性的差别

所有值类型都隐式密封,目的是防止将值类型用作其他引用类型或值类型的基类型。

重载和重写区别

foreach实现

private、protected、public、internal区别

接口和类的区别

线程池相关

猜你喜欢

转载自www.cnblogs.com/errornull/p/10049693.html