zoukankan      html  css  js  c++  java
  • 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空间下。


    结构体和类的区别

    内存中的差别,类的实例一定在堆上,结构体的实例一般在线程栈上分配(虽然也可以作为字段嵌入引用类型的对象中)。类的变量是实例在堆中的内存地址,结构体的变量中包含了实例本身的字段。这也是值类型和引用类型的区别。

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

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

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

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

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


    重载和重写的区别

    重载是对于同一类中的方法来讲:有相同的方法名,相同的返回值,只是参数不同

    重写是对继承来说,子类可以重写父类中的方法。要求方法名,返回值,参数都必须相同。


    foreach的实现

    能使用foreach的集合需要实现什么

    首先该集合要实现IEnumerable接口,该接口只有一个IEnumerator GetEnumerator方法,在该方法里返回一个实现了IEnumerator接口的类型的对象,该类型实现了IEnumerator接口以及其中的object Current属性,bool MoveNext方法,void Reset方法,在类中实现了遍历一个数组。该类型对象就会返回给集合的GetEnumerator方法。实现了这样方法的集合就可以使用foreach的语法来遍历了。

    foreach语句本质是如何获取集合中元素的

    将foreach语句翻译成代码就是声明一个IEnumerator接口类型的变量enumerator,调用集合的GetEnumerator方法返回值赋值给变量enumerator,然后使用while循环enumerator.MoveNext方法直到方法返回false即数组元素遍历结束,在循环中获取enumerator.Current即对应的数组成员。


    private、protected、public、internal之间的区别

    private是私有的,只有类自身成员可访问。

    protected是受保护的,只有类自身和派生类可访问。

    public是公有的,任何类和成员都可访问。

    internal是内部的,只有同一程序集内可访问。


    接口和抽象类的区别

    抽象类中可以有构造方法,接口不能有。

    抽象类中可以有普通成员变量,接口不能有。

    抽象类中可以包含非抽象的普通方法,接口不能有。

    抽象类中可以有静态方法,接口不能有。

    抽象类中抽象方法访问类型可以是public或protected类型的,但接口默认是public和abstract类型的。

    抽象类中静态成员的可访问性是任意的,接口中的默认只能是public static final类型。

    一个类可是实现多个接口,但只能继承一个抽象类。

    抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的。


    线程池相关

  • 相关阅读:
    在sql中日期转化
    SQL Server标准版企业版个人版区别
    Oracle 9i默认用户
    SQL Server和Oracle的常用函数对比
    Delphi6函数大全
    Oracle 不支持 TOP 关键字
    c#连接数据库
    VC6安装及打开工程文件问题的解决
    error C4430: 缺少类型说明符 假定为 int。注意: C++ 不支持默认 int
    VC++ dll导出类
  • 原文地址:https://www.cnblogs.com/errornull/p/10049693.html
Copyright © 2011-2022 走看看