.NET面试题涵盖了许多核心概念,对于准备.NET面试的求职者来说,这些都是必须掌握的基础知识。以下是对这些面试题目的详细解答:
1. **重载与覆盖的区别**:
- 重载(Overloading)发生在同一类中,是水平关系,通过参数列表的不同来区分不同的方法。
- 覆盖(Overriding)发生在子类和父类之间,是垂直关系,子类的方法必须与父类被覆盖的方法有相同的签名(方法名、参数列表和返回类型)。
2. **<%# %> 和 <% %> 的区别**:
- `<%# %>` 用于数据绑定表达式,它会在控件的数据绑定期间被解析和执行。
- `<% %>` 是服务器端代码块,它会直接执行服务器端的C#代码。
3. **error 和 exception 的区别**:
- error 表示难以恢复的严重问题,如系统资源耗尽,通常不能由应用程序直接处理。
- exception 是程序设计或实现时的异常情况,预期在正常程序流程中不会发生,可以通过try-catch语句进行处理。
4. **& 和 && 的区别**:
- & 是位运算符,用于按位与操作,而在逻辑表达式中,它也会进行短路运算。
- && 是逻辑与运算符,仅在必要时才计算右侧表达式,也支持短路运算。
5. **代码错误分析**:
- 在抽象类B中,`abstract override`是不合法的,因为抽象方法不能被覆盖,只能被实现。可以改为`new abstract void F();`
6. **[Serializable] 标记**:
.NET中,所有可序列化的类都会被标记为`[Serializable]`,表明该类的对象可以序列化和反序列化。
7. **装箱**:
当整数a赋值给一个object对象时,会发生装箱操作,将值类型转换为引用类型。
8. **向服务器发送请求的方式**:
主要有GET和POST两种方式,GET将数据附在URL后面,适合小量数据且不敏感的信息;POST将数据放在请求体中,适合大量或敏感数据。
9. **随机插入数组**:
可以使用Random类生成1-100的随机数,确保不重复地填充长度为100的数组。
10. **abstract class 和 interface 的区别**:
- 抽象类可以包含字段、构造函数、方法(包括抽象方法)等,可以提供部分实现。
- 接口只包含方法签名,不允许有任何实现。接口允许实现多继承。
11. **String对象创建**:
`String s = new String("xyz");` 创建了两个对象:一个字符串"xyz"常量池中的对象,另一个是引用这个字符串的s对象。
12. **泛型**:
泛型提供了类型安全和效率,可以在类、接口和方法中使用。在例子中,`GenericList<T>`是一个泛型类,`T`是类型参数,可以是任何类型。`list1`、`list2`和`list3`分别实例化了不同类型的`GenericList`。
总结来说,.NET面试题主要考察开发者对语言基础、面向对象特性、异常处理、网络通信、数据结构和泛型等关键概念的理解和应用能力。熟练掌握这些知识将有助于在面试中表现出色。