.NET面试题汇总

1、抽象类和接口的区别?

 抽象类接口
不同点 用abstract定义 用interface定义
  只能继承一个类 可以实现多个接口
  非抽象派生类必须实现抽象方法 实现接口的类必须实现所有成员
  需要override实现抽象方法 直接实现
相同点 不能实例化  
  包含未实现的方法  
  派生类必须实现未实现的方法  

2、什么是委托?

概念:委托是一种引用类型,表示对具有特定参数列表和返回类型的方法的引用

委托的好处:

1.相当于用方法作为另一方法参数(类似于C的函数指针)

2.在两个不能直接调用的方法中作为桥梁,如:在多线程中的跨线程的方法调用就得用委托

3.当不知道方法具体实现什么时使用委托,如:事件中使用委托

3、什么是泛型

概念:通过参数化类型来实现在同一份代码上操作多种数据类型,利用“参数化类型”将类型抽象化,从而实现灵活的复用。

优点:使用泛型类型可以最大限度地重用代码、保护类型的安全以及提高性能。泛型最常见的用途是创建集合类。

缺点:在性能上不如数组快

记:通过参数化类型来实现在同一份代码上操作多种数据类型,使用泛型类型可以最大限度地重用代码、保护类型的安全以及提高性能。

4、装箱和拆箱

装箱:值类型转引用类型

拆箱:引用类型转值类型

5、值类型和引用类型分别有哪些?

值类型:结构体(数值类型,bool型,用户定义的结构体),枚举,可空类型。

引用类型:数组,用户定义的类、接口、委托,object,字符串。

6、c#事件和委托的区别

使用位置不同:事件只能在本类型内部“触发”,委托不管在本类型内部还是外部都可以“调用”。

使用符号不同:在类的外部,事件只能用“+=”和“-=”去订阅/取消订阅,如果是委托的话还可以使用“=”。

7、MVC提交表单的几种方式

1、HtmlHelper方法

2、传统Form表单Aciton属性提交

3、Jquery+Ajax 提交表单

4、MVC Controller控制器和表单参数传递

8、NET中的错误处理机制是什么?

采用 try-catch-finally结构,发生错误时,层层上抛,直到找到匹配的catch为止。

9、什么是过滤器?

过滤器作用:  一般用于记录日志、异常处理、身份验证、行为记录等。

.Net MVC 常用的4种过滤器:

Action行为过滤器:在Action执行之前和执行之后调用

Result结果过滤器:在结果之前和之后调用。

Exception异常过滤器:在发生异常时调用。

Authorization权限效验过滤器:身份验证时调用。

10、垃圾(GC)回收机制

.net平台会自动把声明的那些不再使用的变量,或者是对象占用的空间释放, 而不用你自己书写代码实现这样的功能

11、C# 托管与非托管的理解

运行于.net平台上的代码,分配的资源一般会自动由平台的垃圾回收器释放,这样的资源就是托管资源。

但是一些例外的资源,如System.IO.StreamReader等各种流、各种连接所分配的资源,需要显式调用Close()或Dispose()释放,这种资源就叫做非托管资源。

12、a是10,b是15,不用中间变量交换 a ,b

a = a + b;

b = a - b;

a = a - b;

13、&和&&的区别

&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)

14、post、get的区别

1.post的参数不会显示在浏览器地址栏中,get的参数会显示在浏览器地址栏中

2.用post可提交较大的数据量,get提交的数据量则非常小(2k)

3.用post可进行文件的提交,而用get则不可以

15、try{}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

会执行,在return前执行。

16、StringBuilder 和 String 的区别?

1.StringBuilder 是可扩展的,在大量字符串拼接时使用

2.String 在进行运算时会产生一个新的实例

17、Equal与==的区别

==操作符判断的是堆栈中的值,Equlas判断的是堆中的值

18、=、==和===的区别

=是赋值的意思

==是判断等于的意思

===也是判断的,但是它要比==判断的严谨一点,它的判断必须什么都相等,比如说类型

19、ADO.NET中读写数据库需用到哪些对象?作用是什么

DataConnection 连接数据库

DataCommand 执行语句命令

DataSet 数据存储器

DataAdapter 适配器,用于填充数据

DataReader 数据读取器,用于向前只读的数据流

20、详细描述三层架构开发模式以及三层架构的好处?

界面层:设计界面,与用户交互;

业务逻辑层(BLL):维护界面层和数据访问层之间的安全性,对传送的数据进行判断分析,将正确值进行传送;

数据访问层(DAL):主要是存放对数据类的访问,即对数据库的增删改查的操作;

好处:目的是“高内聚,低耦合“的思想,分工明确,条理清晰,易于调试 ,而且具有可扩展性

21.重写和重载的区别?

重写:当一个子类继承一个父类,而子类中的方法与父类中的方法名称、参数个数、参数类型一致时,就说明这个子类重写了父类的方法;

重载:方法名称相同,参数类型不同。调用时,编译器会根据实际传入参数的形式,选择与其匹配的行。

22、数组和集合的区别?

数组声明元素类型,集合不声明;

数组定长,占用内存小,速度快,集合不定长,占用内存大,速度慢;

数组存放类型只能是一种,集合不止一种

23、值类型和引用类型的区别?

值类型:存放在堆栈中,存储空间小,调用速度快,直接存储其值,从System.ValueType中派生,内存自动释放,简单类型,枚举,结构;

引用类型:存放在堆中,存储空间大,调用速度慢,存储对值的引用,从System.Object中派生,由GC自动释放,接口类型,数组类型,委托类型;

值类型的变量直接存储数据

引用类型的变量持有的是数据的引用,数据存储在数据堆中

24、请详细描述C#中的访问修饰符都有哪些?

private:私有成员,类内部可访问;

protected:保护成员,类内部和继承类可访问;

public:公开成员,没有访问限制;

internal:同一程序集可访问;

protected internal/internal protected:同一程序集和子类可访问

25、设计模式六大设计原则

单一职责原则:一个类值负责一个功能的职责

开闭原则:扩展开放,修改关闭。

里氏代换原则:使用父类的地方都能使用子类对象

依赖倒转原则:针对接口编程,

接口隔离原则:针对不同部分用专门接口,不用总接口,需要哪些接口就用哪些接口

迪米特法则: 软件实体类,尽量不与其他实体类发生关系相互作用,对外都统一的暴露接口就行了

26、面向对象三大特性

封装、继承、多态

27、你是如何理解面向对象思想?

面向对象编程的本质就是:以类的方式组织代码,以对象的组织(封装)数据。
面向对象的特点:抽象,封装,继承,多态。

引用一段话:
假如我是上帝,我要造人(对象),首先,人要有思想,人要有肉体(这个过程就是抽象)
因为人数量大,我需要找别人帮我一起造人,但是我不想让知道我的技术,我可以把我的造人技术封装起来,他只知道他要做什么样的人类就好了【封装】
当我在造人的时候累了,我可能要用我之前造人的模板进行”复制“,”粘贴“。用模板造出来的人具有模板的特征,就像孩子一样具有父母的形状。【继承】
为了让人类更丰富一些,我们又对它进行了改变。这个过程叫多态【多态】

面向过程编程思想:

  1. 冰箱门打开,返回值是打开的冰箱门
  2. 大象装进去,返回值是打开的门,装进大象的冰箱
  3. 冰箱门关上,返回值是关着门装进大象的冰箱

面向对象的编程思想:

  1. 冰箱.开门()
  2. 冰箱.装进大象()
  3. 冰箱.关门()
  4. 万物皆对象

缺点:解决问题时候需要先创建对象
优点:更加贴近生活,解决问题。

posted @ 2022-04-21 08:55  时光博客  阅读(2793)  评论(0编辑  收藏  举报