找回密码
 立即注册
查看: 399|回复: 0

unity游戏公司面试问题总结

[复制链接]
发表于 2020-11-27 20:54 | 显示全部楼层 |阅读模式
面试大计切勿怕你说的面试官听不懂就重复解释,一定要言简意赅的回答。
C#篇
一、请简述ArrayList和List的主要区别?
    ArrayList就是一个List<Object>而已,泛型集合的优势就是类型安全和无装箱。
二、请简述nternal的作用
    internal:只能在包含该类的程序集中访问该类
三、请简述sealed关键字用在类声明时与函数声明时的作用
    sealed修饰的类为密封类,类声明时可防止其他类继承此类,在方法中声明则可防止派生类重写此方法。
四、函数参数中的this
    这个叫做扩展方法,扩展方法能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用,扩展方法可以写入最初没有提供该方法的类中。还可以把方法添加到实现某个接口的任何类中,这样多个类可以使用相同的实现代码。
public static class StringExtension
{
    public static void Foo(this string s)
    {
        Console.WriteLine("Foo invoked for {0}", s);
    }
}
string s="Hello"; s.Foo();
    结果在控制台上显示Foo invoked for Hello ,因为Hello是传送给Foo方法的字符串。
五、请描述Interface与抽象类之间的不同
    抽象类表示该类中可能已经有一些方法的具体定义,但接口就是公公只能定义各个方法的界面 ,不能具体的实现代码在成员方法中。抽象类是子类用来继承的,当父类已经有实际功能的方法时该方法在子类中可以不必实现,直接引用父类的方法,子类也可以重写该父类的方法。实现接口的时候必须要实现接口中所有的方法,不能遗漏任何一个。
六、ref参数和out参数是什么?有什么区别?
    ref和out参数的效果一样,都是通过关键字找到定义在主函数里面的变量的内存地址,并通过方法体内的语法改变它的大小。不同点就是输出参数必须对参数进行初始化。ref必须初始化,out 参数必须在函数里赋值。ref参数是引用,out参数为输出参数。
七、C#的委托是什么?有何用处?
    委托类似于一种安全的指针引用。用处:使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法。
八、简述StringBuilder和String的区别?
    String 在进行运算时(如赋值、拼接等)会产生一个新的实例,而 StringBuilder 则不会。
九、C#中四种访问修饰符是哪些?各有什么区别?
    1.属性修饰符 2.存取修饰符 3.类修饰符 4.成员修饰符。属性修饰符:
Serializable:按值将对象封送到远程服务器。
STATread:是单线程套间的意思,是一种线程模型。
MATAThread:是多线程套间的意思,也是一种线程模型。
    存取修饰符:
public:存取不受限制。
private:只有包含该成员的类可以存取。
internal:只有当前工程可以存取。
protected:只有包含该成员的类以及派生类可以存取。
    类修饰符:
abstract:抽象类。指示一个类只能作为其它类的基类。
sealed:密封类。指示一个类不能被继承。理所当然,密封类不能同时又是抽象类,因为抽象总是希望被继承的。
    成员修饰符:
abstract:指示该方法或属性没有实现。
sealed:密封方法。可以防止在派生类中对该方法的override(重载)。不是类的每个成员方法都可以作为密封方法密封方法,必须对基类的虚方法进行重载,提供具体的实现方法。所以,在方法的声明中,sealed修饰符总是和override修饰符同时使用。
delegate:委托。用来定义一个函数指针。C#中的事件驱动是基于delegate + event的。
const:指定该成员的值只读不允许修改。
event:声明一个事件。
extern:指示方法在外部实现。
override:重写。对由基类继承成员的新实现。
readonly:指示一个域只能在声明时以及相同类的内部被赋值。
static:指示一个成员属于类型本身,而不是属于特定的对象。即在定义后可不经实例化,就可使用。
virtual:指示一个方法或存取器的实现可以在继承类中被覆盖。
new:在派生类中隐藏指定的基类成员,从而实现重写的功能。 若要隐藏继承类的成员,请使用相同名称在派生类中声明该成员,并用 new 修饰符修饰它。
十、值类型和引用类型有何区别?
1、速度上的区别
值类型存取速度快,引用类型存取速度慢。
2、用途上的区别
值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用。
3、来源上的区别
值类型继承自System.ValueType,引用类型继承自System.Object
4、位置上的区别
值类型的数据存储在内存的栈中,引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址。
5、类型上的区别
值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的地址,即对象的引用。
6、保存位置上的区别
值类型变量直接把变量的值保存在堆栈中,引用类型的变量把实际数据的地址保存在堆栈中,而实际数据则保存在堆中。
Lua篇
一、lua中1or2和1and2输出什么为什么
1or2输出:1
1and2输出:2
原因:1.所有的逻辑操作符将false\nil视为假其他都为真。
2. 对与操作符and来说,如果第1个操作数为假,就返回第1个操作数。
3. 对与操作符or来说,如果第1个操作数为真,就返回第1个操作数。
二、简述元表:
三、Lua如何实现面向对象:
提取码:qinf


提取码:dhhc

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-20 06:14 , Processed in 0.116423 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表