### C#.NET 面试知识点详解 #### 1. 类和结构的区别 - **语法相似性**:类和结构的语法非常相似,都可以用来封装数据和行为。 - **存储方式**: - 结构(`struct`)是值类型,存储在栈中或作为值类型字段的一部分存储在堆中。 - 类(`class`)是引用类型,对象存储在堆上,引用则存储在栈中。 - **构造函数**: - 结构不能声明默认的构造函数,因为结构的副本是由编译器自动创建和销毁的。 - 类可以拥有默认构造函数以及自定义构造函数。 - **实例化**: - 结构实例化时不需要使用 `new` 关键字。 - 类实例化通常需要使用 `new` 关键字。 - **继承与接口实现**: - 结构可以直接包含数据和方法,但它们不支持继承。 - 类支持继承,并且可以实现一个或多个接口。 #### 2. 死锁的必要条件及解决方法 - **死锁条件**: - 互斥条件:资源一次仅能被一个进程使用。 - 请求与保持条件:已经保持至少一个资源的进程可能请求新的资源。 - 不剥夺条件:进程已获得的资源,在末使用完之前,不能被剥夺。 - 循环等待条件:存在一个进程等待链,链中每一个进程都在等待下一个进程所占有的资源。 - **解决方案**: - 避免:通过设计算法确保至少有一个死锁条件不会发生。 - 检测:定期检查系统状态以确定是否存在死锁,并采取行动解除。 - 忽略:在某些情况下,可以接受死锁的发生,但在设计时需考虑如何减少其发生的概率。 - 预防:确保所有死锁条件都无法同时满足。 #### 3. 接口、抽象类与继承 - **接口继承**:接口可以继承其他接口,继承后的接口可以添加新成员。 - **抽象类实现接口**:抽象类可以实现一个或多个接口,实现时需提供接口中所有成员的具体实现。 - **抽象类继承实体类**:抽象类可以从实体类继承,实体类需具备显式定义的构造函数。 #### 4. 构造器的继承与重写 - **构造器特性**:构造器不能被继承,因此也不能被重写。 - **重载**:构造器可以通过参数的不同来进行重载,以适应不同的初始化需求。 #### 5. 线程同步 - **线程安全性**:对象的方法在同一时刻只能被一个线程访问,这是通过同步机制来实现的,例如使用 `lock` 语句。 #### 6. 位运算 - **左移运算**:`2 << 3` 相当于将数字 2 的二进制表示向左移动 3 位,结果为 16。 #### 7. 内存操作 - **直接内存访问**:C# 支持使用指针进行直接内存操作,但需要在代码段前加上 `unsafe` 关键字。 - **垃圾回收**:.NET Framework 使用垃圾回收机制来管理内存,开发者不需要手动管理内存释放。 #### 8. 错误与异常的区别 - **Error**:通常表示一个严重的问题,难以通过程序逻辑恢复。 - **Exception**:表示程序运行过程中出现的可恢复错误。 #### 9. final, finally, finalize 的区别 - **final**:用于修饰类、方法或属性,表示不可更改。 - **finally**:用于异常处理中,确保代码块无论是否发生异常都会被执行。 - **finalize**:对象被垃圾回收前调用的方法,用于释放非托管资源。 #### 10. HashMap 与 Hashtable 的区别 - **线程安全性**:`Hashtable` 是线程安全的,而 `HashMap` 不是。 - **允许 null 值**:`HashMap` 允许 key 和 value 为 null,而 `Hashtable` 不允许。 #### 11. Collection 与 Collections 的区别 - **Collection**:接口类型,用于表示单个集合。 - **Collections**:工具类,提供了一系列静态方法用于操作集合。 #### 12. 委托与事件 - **委托**:类似于函数指针,用于封装方法引用。 - **事件**:基于委托的一种特殊形式,用于发布和订阅机制。 #### 13. Override 与 Overload 的区别 - **Override**:用于覆盖基类的虚方法,方法签名必须完全相同。 - **Overload**:用于重载方法,即同一类中同名方法,但参数列表不同。 #### 14. BS 结构中传递变量的方法 - **Server.Transfer**:服务器端跳转,用于在服务器内部页面间传递数据。 - **Querystring**:通过 URL 参数传递数据。 #### 15. 索引器实现 - **索引器**:不仅可以根据数字索引,还可以根据任何类型的键。 - **实现方式**:通过定义索引器,可以实现灵活的数据访问。 #### 16. new 的用法 - **实例化**:创建对象实例。 - **隐藏基类方法**:使用 `new` 关键字隐藏基类中的方法。 - **泛型类**:泛型类中的类型参数需要有公共无参构造函数。 #### 17. 数组复制到 ArrayList - **foreach 循环**:遍历数组并将每个元素添加到 ArrayList。 - **Add 方法**:直接使用 ArrayList 的 Add 方法添加数组元素。 #### 18. 反射与序列化 - **反射**:允许程序在运行时获取类型的信息,并创建对象、调用方法等。 - **序列化**:将对象的状态转换为可以存储或传输的形式的过程。 以上知识点涵盖了C#.NET开发中的常见概念和技术要点,对于准备面试的人来说是非常有价值的复习资料。
- 粉丝: 2
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助