面试大计切勿怕你说的面试官听不懂就重复解释,一定要言简意赅的回答。
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.所有的逻辑操作符将falsenil视为假其他都为真。
2. 对与操作符and来说,如果第1个操作数为假,就返回第1个操作数。
3. 对与操作符or来说,如果第1个操作数为真,就返回第1个操作数。
二、简述元表:
三、Lua如何实现面向对象:
unityC#语言高级教学pan.baidu.com提取码:qinf
王者荣耀全栈开发视频pan.baidu.com提取码:dhhc