.NET⾯试题及答案详解
.NET⾯试题及答案详解
C#
1. 类和结构的区别?
类是引⽤类型,结构是值类型。
类可以继承,也可以实现接⼝;结构不能继承,但可以实现接⼝。
类可以有显式声明的⽆参数构造函数;结构不能包含显式的⽆参数构造函数。
结构中不能有实例字段初始值设定,但类没有任何限制。
类的构造函数⾥⾯可以不⽤对所有字段进⾏初始化;结构的构造函数⾥⾯必须对所有字段进⾏初始化。
类可以有析构函数,但结构不⾏。
2. C#中类成员的访问修饰符有哪些?
public:公有的,任何位置都可以访问。
private:私有的,只有类的⾃⾝才能访问。
protected:受保护的,只有类的⾃⾝及其派⽣类才能访问。
internal:内部的,同⼀个程序集⾥⾯的任何位置都能访问。
protected internal :内部受保护的,同⼀个程序集⾥⾯的任何位置,或者不同程序集中的派⽣类可以访问。3. ⾯向对象的三⼤特征是什么?
封装: “封装”意味着将⼀组相关属性、⽅法和其他成员视为⼀个单元或对象。
继承: “继承”描述基于现有类创建新类的能⼒。
多态: “多态”意味着可以有多个可互换使⽤的类,即使每个类以不同⽅式实现相同属性或⽅法。4. 抽象类和接⼝的区别?
相同点:
  不能被直接实例化。
  可以包含任意个抽象成员。
不同点:
  抽象类也是类,具有类的共同特点:单基类继承,多接⼝实现;接⼝不是类,只能继承多个接⼝。
  抽象类中可以包含已经实现的⾮抽象成员;接⼝中所有的成员都是抽象的、没有实现的。
5. 接⼝可以包含哪些成员?
⽅法、属性、事件、索引器
6. 什么是装箱和拆箱?
装箱:将值类型转换为 object 类型或由此值类型实现的任何接⼝类型。
拆箱:将object类型或接⼝类型转换为实际的值类型。
7. C#中,哪些类型是值类型?哪些类型是引⽤类型?
值类型:结构、枚举。
引⽤类型:类、接⼝、委托、数组、字符串。
8. 值类型和引⽤类型的区别?
⼀般情况下,值类型的数据存储在栈上,引⽤类型的数据存储在堆上。
值类型的变量,变量本⾝存储的就是实际的数据;引⽤类型的变量,变量本⾝存储的仅仅是实际数据的引⽤地址,⽽实际的数据存储在托管堆上。
在作为⽅法的参数进⾏传递时,值类型参数传递的是值的副本,在⽅法中对该值进⾏修改不会影响原始值;引⽤类型参数传递的是参数的引⽤地址,在⽅法中对该参数进⾏修改会对托管堆上该地址的实际数据进⾏修改,从⽽会影响原始值。
9. C#中的基本数据类型有哪些?
值类型:
  有符号整数(由⼩到⼤):sbyte、short、int、long
  ⽆符号整数(由⼩到⼤):byte、ushort、uint、ulong
  浮点型:float、double、decimal
  布尔型:bool
  字符型:char
引⽤类型:
  string、objectjava重写和重载的区别
10. 重写和重载的区别?⽅法的override和overload有什么区别?
重写(override):⼦类对基类中的虚成员(虚⽅法、虚属性等)或抽象成员(抽象⽅法、抽象属性等)进⾏覆盖,重新实现。
重载(overload):同⼀个类中,同名的⽅法具有不同的参数签名的实现。重载的必要条件是⽅法具有不同的参数签名。
⽅法的参数签名是指⽅法的参数个数、参数的数据类型、参数是否有ref、out、params修饰(⽅法的返回值类型不属于⽅法的参数签名)。
11. 构造函数是否可以被继承?是否可以被重写?
 不能被继承,也不能被重写,但是在创建类的实例时会⾸先调⽤其基类的⽆参数构造函数。
12. C#中,运算符"?“和”??"的区别是什么?
是和:结合在⼀起使⽤的,?:称为条件运算符(或三⽬运算符),该运算符根据布尔型表达式的值返回两个值之⼀。条件运算符的格式如下:
condition ? first_expression : second_expression;
如果条件condition为 true,则计算第⼀表达式first_expression并以它的计算结果为准;如果为 false,则计算第⼆表达式
second_expression并以它的计算结果为准。只会计算两个表达式其中的⼀个。
运算符称为 null 合并运算符,⽤于定义可以为 null 值的类型和引⽤类型的默认值。如果此运算符的左边不为 null,则此运算符将返回左边的值;如果此运算符的左边为null,则返回右边的值。
13. C#中,⽤const和readonly修饰的字段有什么区别?
const:表⽰常量,其修饰的值是在编译期间确定的,因此在声明时只能通过常量表达式指定其值。
readonly:表⽰只读字段,其修饰的字段的值是在运⾏时计算的,在对象的实例构造函数或类的静态构造函数⾸次被调⽤时计算,之后字段的值便不能被更改。
14. string s = “” 和string s = null的区别?string s,string s="",string s=null,string
s=string.Empty.
string s = “” :字符串变量s指向了空字符串,表⽰给变量s分配了内存空间,只不过s指向了⼀个长度为零的空字符串对象。
string s = null :字符串变量s指向了空引⽤null,表⽰s没有引⽤任何对象,即没有给变量s分配内存空间。
15. C#中,new有⼏种⽤法?
⽤于创建对象和调⽤构造函数。
⽤于创建匿名类型的实例。
在⽤作修饰符时,new 关键字可以显式隐藏从基类继承的成员。
16. C#中,ref 和 out 在修饰⽅法参数时有什么区别?
ref和out都可以实现将⼀个指定的参数按照引⽤进⾏传递:
ref 参数在传⼊⽅法之前必须进⾏初始化;⽽ out 参数在传⼊⽅法之前可以不⽤初始化。
ref 参数在⽅法内部可以直接使⽤;⽽ out 参数在⽅法内部不能直接使⽤。
ref 参数在⽅法内部可以使⽤也可以不使⽤;⽽ out 参数在⽅法返回之前必须对其赋值。
17. C#中,using有⼏种⽤法?
导⼊和引⽤命名空间。
给类型起别名。
使⽤using声明的对象,可以确保在using代码块结束时,该对象所使⽤的资源被⾃动释放。
18. C#中,&和&&,| 和 || 有什么区别?
&:按位与,表⽰对两个整数进⾏按位与运算。
&&:逻辑与,表⽰对两个布尔型进⾏逻辑与操作,即当且仅当两边的条件都为true时,表达式才返回true。
|:按位或,表⽰对两个整数进⾏按位或运算。
||:逻辑或,表⽰对两个布尔型进⾏逻辑或操作,即只要两边的条件中有⼀个为true,表达式就返回true。
19. C#中,is和as有什么区别?
is:⽤于检查对象是否与给定的类型兼容。
as:⽤于对引⽤类型的变量进⾏类型转换。
20. 什么是GC?为什么要⽤到GC?
GC:垃圾回收器(Garbage Collection)
计算机程序在运⾏过程中要使⽤内存,需要向操作系统申请内存空间。由于内存空间是有限的,所以
程序在使⽤完内存之后要释放内存。垃圾收集器就是⼀种⾃动进⾏内存管理的机制,使得程序员不需要每次⼿动去分配和释放内存,由垃圾收集器全权负责内存的管理⼯作。这样可以使程序员的关注点转移到程序的功能和业务逻辑,提⾼了程序的安全性、稳定性、及开发效率。
21. 什么是委托?事件跟委托是什么关系?
委托:表⽰具有⼀类相同签名的⽅法的封装类型。定义委托的关键字:delegate
事件也是⼀种委托。
22. ADO.NET中访问数据库的基本步骤是什么?
创建数据库连接对象。
打开连接。
创建命令对象,执⾏SQL语句。
关闭连接。
23. ADO.NET中,DataSet和DataReader的区别是什么?
DataSet(断开式的):数据集,表⽰内存中的“数据库”。DataSet在从数据库中读取数据时是“⾯向⾮连接的”,即DataSet在读取数据的那⼀刻会与数据库进⾏连接,然后会⼀次性把数据库中所有的表以及数据读取到内存中,然后便断开数据库连接。
DataReader(连接式的):数据读取器。DataReader在从数据库中读取数据时是“⾯向连接的”,即DataReader在读取数据时是从数据库中⼀⾏⼀⾏读取,每次只会从数据库中读取⼀⾏数据(类似于数据库游标的⾏为),直到读完最后⼀⾏之后,才断开数据库连接。
在整个读取的过程中,必须保持与数据库的连接处于打开状态。
24. ADO.NET中常⽤对象有哪些?
SqlConnection:连接对象,⽤于执⾏与数据库的连接。
SqlCommand:命令对象,⽤于对数据库执⾏SQL语句。
SqlDataAdapter:适配器对象,⽤于填充数据集和更新数据库。
SqlParameter:参数对象,⽤于执⾏参数化SQL语句。
SqlDataReader:读取器对象,⽤于从数据库中快速逐⾏读取数据。
SqlTransaction:事务对象,⽤于执⾏数据库事务。
25. 谈谈 final, finally, finalize 的区别。
final— 修饰符(关键字)如果⼀个类被声明为 final ,意味着它不能再派⽣出新的⼦类,不能作为⽗类被继承。因此 ⼀个类不能既被声明为 abstract 的,⼜被声明为 final 的。将变量或⽅法声明为 final ,可以保证它们在使⽤中 不被改变。被声明为 final 的变量必须在声明时给定初值,⽽在以后的引⽤中只能读取,不可修改。被声明为 final 的⽅法也同样只能使⽤,不能重载
finally— 再异常处理时提供 finally 块来执⾏任何清除操作。如果抛出⼀个异常,那么相匹配的 catch ⼦句就会 执⾏,然后控制就会进⼊ finally 块(如果有的话)。
finalize— ⽅法名。 Java 技术允许使⽤ finalize() ⽅法在垃圾收集器将对象从内存中清除出去之前做必要的清理 ⼯作。这个⽅法是由垃圾收集器在确定这个对象没有被引⽤时对这个对象调⽤的。它是在 Object 类中定义的 ,因此所有的类都继承了它。⼦类覆盖finalize() ⽅法以整理系统资源或者执⾏其他清理⼯作。 finalize() ⽅法是在垃圾收集器删除对象之前对这个对象调⽤的。
26. 进程和线程的区别?
进程是系统进⾏资源分配和调度的单位;线程是 CPU 调度和分派的单位,⼀个进程可以有多个线程,
这些线程共享这个进程的资源。
27. 什么是反射?
动态获取程序集信息
28. HashMap 和 Hashtable 的区别。
HashMap 是 Hashtable 的轻量级实现(⾮线程安全的实现),他们都完成了 Map 接⼝,主要区别在于 HashMap 允许空( null )键值( key ) , 由于⾮线程安全,效率上可能⾼于 Hashtable.
29. 概述反射和序列化?
反射:要给发射下⼀个定义还是⽐较难的,这⾥先说说我的理解。反射提供了封装程序集,模块和类型对象,可以⽤反射动态地创建类型的实例,将类型绑定到现有对象,或者从现有对象类型⾥获取类型,然后调⽤类型的⽅法或访问字段和属性。
序列化:将对象转换为另⼀种媒介传输的格式过程。如,序列化⼀个对象,⽤Http通过internet在客户端和服务器之间传递该对象,在另⼀端⽤反序列化从该流中重新得到对象。
ASP.NET
1. ASP.NET中的⾝份验证有那些?
Windows验证:ASP.NET会结合Internet信息服务(IIS),为每个⽤户开启Windows账户,通过Windows账户验证⽤户⾝份。
Forms验证:ASP.NET通过Web表单,为每个⽤户创建⼀个⽤cookie保存的⾝份验证票据,通过该票据验证⽤户⾝份。
Passport验证:由 Microsoft 提供的集中⾝份验证服务,通过将每个⽤户的信息提交给Passport 登录服务⽹站进⾏⽤户⾝份的验证。
None验证:⾃定义⾝份验证⽅式。
2. Server.Transfer与Response.Redirect有什么区别?
Server.Transfer:服务器端重定向,在服务器内部将请求从A页⾯重定向到B页⾯。由于是在服务器内部进⾏重定向,浏览器端并不知道服务器内部发⽣了重定向,因此浏览器的地址栏显⽰的URL不变,仍是最初请求的A页⾯。服务器端重定向不能跨站点。
Response.Redirect:客户端重定向,服务器向客户端浏览器发送⼀个重定向信号和重定向的URL地址,
浏览器收到该信号后,重新去请求要重定向的URL地址。由于重定向是发⽣在浏览器端,因此浏览器的地址栏会变成重定向后的URL。浏览器端重定向可以跨站点。
3. ASP.NET 中页⾯之间传递值的⼏种⽅式?
QueryString(查询字符串):通过URL中的查询字符串(Default.aspx?id=5&name=abc)传值。
优点:简单便捷。
缺点:安全性差,且长度⼤⼩有限制。
Session:通过会话状态传值。
优点:当前会话中的所有页⾯均可使⽤,且能够传递任何对象。
缺点:可能会丢失(Session过期或失效等情况)。
Cookie:通过客户端Cookie传值。
优点:读取该Cookie的所有页⾯都可以使⽤。
缺点:只能够存储⽂本信息(字符串),且⼤⼩不能超过4KB。
Application:通过全局应⽤程序对象传值。
优点:整个应⽤程序都可以使⽤,且能够传递任何对象。
缺点:可能会产⽣并发问题。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。