首页 > 代码库 > .NET 面试题(1)
.NET 面试题(1)
面试题可见一斑,理解记忆,切忌不要死记硬背。
1、简述 private、 protected、 public、 internal 修饰符的访问权限。
private:私有成员,在类的内部才能访问
protected:保护成员,在该类内部和继承本类的子类中可以访问
public:公共成员,完全公开,没有访问限制
internal:在当前程序集中可以访问
2、ADO.NET中的五个主要对象
Connection:链接对象 用于与特定的数据源建立链接
Command:命令对象 主要可以用来对数据库发出一些指令,例如可以对数据库下达查询、新增、修改、删除数据等指令
DataReader:数据流对象 一个向前的只读数据流
DataAdapter:适配器对象 主要是在数据源以及DataSet 之间执行数据传输的工作,它可以透过Command 对象下达命令后,并将取得的数据放入DataSet 对象中。
DataSet:数据集对象 这个对象可以视为一个暂存区(Cache),可以把从数据库中所查询到的数据保留起来,放在内存中。相当于内存中的一张表或多张表
3、列举ASP.NET 页面之间传递值的几种方式。
1.使用QueryString, 如....?id=1; response. Redirect()....
2.Application 对象 服务器上
存储: Application["name"]="张三":
获取: string name=Application["name"].ToString();
3.Session 对象 服务器上
存储: Session["name"]="张三":
获取:string Session["name"].ToString();
4.Cookie:是个字符串 存在在客户端上
存值:
HttpCookie cookie=new HttpCookie(string name,string value)
cookie.Expires.AddDay(7); //Expires 过期时间
Response.Cookies.Add(cookie);
获取:
HttpCookie cookie=Request.Cookies[string name];
string s=cookie.Value;
或
string s=Request.Cookies[string name].value;
5.Server.Tranfer //地址栏上不会显示target.aspx,而response. Redirect() 会在地址栏上显示target.aspx
Server.Transfer( "target.aspx?param1=1111¶m2=2222 ")
接收页面: string str = Request[ "param1 "]
4、new有几种用法
1, 运算符 用于创建对象和调用构造函数。
Class cl=new Class();
int i=new int();
i=0;
2,修饰符 可以显式隐藏从基类继承的成员。
●若要隐藏继承的成员,请使用相同名称在派生类中声明该成员,并用 new 修饰符修饰它。
●要想访问被隐藏的基类的成员变量、属性或方法,办法就是将子类造型为父类,然后通过基类访问被隐藏的成员变量、属性或方法。
3,约束 约束指定泛型类声明中的 任何类型参数 都必须有公共的无参数构造函数。
Class ItemFactory<T> where T:new()
ItemFactory<Student> Student中必须要无参数构造函数
5、用sealed修饰的类有什么特点
sealed 修饰符用于防止从所修饰的类派生出其它类。(不能继承) 如果一个密封类被指定为其他类的基类,则会发生编译时错误。
6、请编程遍历页面上所有TextBox控件并给它赋值为string.Empty?
// 1,如果没指定是那里面的Controls ,需要遍历两边 foreach(Control item in Controls) { foreach(Control con in item.Controls) { TextBox tb=con as TextBox;//把con作为TextBox控件 if(tb!=null) tb.Text=String.Empty; } }
//2,指定是Form里面的Controls 一遍即可 foreach(Control item in this.Form.Controls) { TextBox tb=item as TextBox;//把con作为TextBox控件 if(tb!=null) tb.Text=String.Empty; }
7、在.net中,配件的意思是?
程序集(Assembly)。(中间语言,源数据,资源,装配清单)
8、装箱和拆箱
.net包含一个特殊的Object类,可以接受任意的数据类型的值
装箱:从值类型接口转换到引用类型。
拆箱:从引用类型转换到值类型。
object obj = null;//引用类型 obj = 1;//装箱,boxing。把值类型包装为引用类型。 int i1 = (int)obj;//拆箱。unboxing
9、如何理解三层架构
1.用户界面表示层(UI);2.业务逻辑层(BLL);3.数据访问层(DAL); 目的即为了“高内聚,低耦合”的思想。
1,表现层(UI):调用业务逻辑层(BLL)里面的方法来呈现数据给用户看 实质:具体解决做什么的问题
2,业务逻辑层(BLL) :主要针对具体的问题的操作 实质:负责处理U层的问题
3,数据访问层(DAL) :对数据的操作具体为BLL层提供服务 实质:就是对数据库的类容的增,删,改,查 封装的SQLHelper类
4,实体层(Model) :原始数据 实质:完成数据库与实体类对应的功能,一个类是一张表,一个属性是一个字段
三层结构是N层结构的一种,一般来说,层次之间是向下依赖的,下层代码未确定其接口(契约)前上层代码是无法开发的,下层代码接口(契约)的变化将使上层的代码一起变化。
优点: 分工明确,条理清晰,易于调试,而且具有可扩展性。
缺点: 增加成本。
10. 能用foreach遍历访问的对象的要求
需要实现IEnumerable接口或声明GetEnumerator方法的类型
11. GC是什么? 为什么要有GC?
GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。
GC只能处理托管内存资源的释放,对于非托管资源则不能使用GC进行回收,必须由程序员手工回收,一个例子就是FileStream或者SqlConnection需要程序员调用Dispose进行资源的回收。
要请求垃圾收集,可以调用下面的方法:GC.Collection()一般不需要手动调用GC.Collection()。
12. 介绍几个开源的项目
13. 说出五个集合类
任何集合类都实现了IEnumerable接口,所以任何集合类对象都有一个GetEnumerator()方法,该方法可以返回一个实现了 IEnumerator接口的对象,这个返回的IEnumerator对象既不是集合类对象,也不是集合的元素类对象,它是一个独立的类对象。通过这个对象,可以遍历访问集合类对象中的每一个元素对象
我们经常用的foreach即是一种语法糖,实际上还是调用Enumerator里面的Current和MoveNext实现的遍历功能。
List<T> 泛型类
Stack<T> 堆栈 后进先出的访问各个元素
Dictionary<TKey, TValue> 字典类, key是区分大小写;value用于存储对应于key的值
HashSet<T> 此集合类中不能有重复的子元素
SortedList<TKey, TValue> 排序列表, key是排好序的数组。
14. 什么是code-Behind技术。
将ASP.NET程序需要呈现的一个网页分为*.aspx和*.cs这两个文件,即代码分离技术,实现了HTML代码和服务器逻辑代码的分离,这样更方便于代码编写、整理及调试。
15. using关键字有什么用?什么是IDisposable?
1,引用命名空间 using System.Text;
2,为命名空间或类型创建别名 为了避免出现名称冲突,可以通过设定别名来解决.
3,using 语句
using语句允许程序员指定使用资源的对象应当何时释放资源.using语句中使用的对象必须实现IDisposable接口.此接口提供了Dispose方法,该方法将释放此对象的资源
a, using语句只能用于实现了IDisposable接口的类型,
b,using语句适用于清理单个非托管资源的情况,而多个非托管对象的清理最好以try-finaly来实现
在程序编译阶段,编译器会自动将using语句生成try-finally语句,并在finally块中调用对象的Dispose方法,来清理资源.所以,using语句等效于try-finally语句
IDisposable接口定义一种释放分配的非托管资源的方法,GC只对托管对象释放内存,而对非托管对象资源不能操作。
16、不是说字符串是不可变的吗?string s="abc";s="123"不就是变了吗?
String类型数据每次重新赋值都是开辟一个新的内存空间新的数据放在里面,变量的引用重新指向新空间中的的地址,原来的数值还在内存中并没有变化通过CG回收。
s不指向原来那个对象了,而指向了另一个 String对象,内容为"123",原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。
17、是否可以从一个static方法内部发出对非static方法的调用?
不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部发出对非static方法的调用
18、说出一些常用的类、接口,请各举5个
常用的类:StreamReader、WebClient、Dictionary<K,V>、StringBuilder、SqlConnection、FileStream、File、Regex、List<T>
常用的接口:IDisposable、IEnumerable、IDbConnection、IComparable、ICollection、 IList、IDictionary
19、传入某个属性的set方法的隐含参数的名称是什么?
value,它的类型和属性所声名的类型相同。
20、C#支持多重继承么?
不支持。可以用接口来实现。
21、C#中所有对象共同的基类是什么?
System.Object
将ASP.NET程序需要呈现的一个网页分为*.aspx和*.cs这两个文件,即代码分离技术,实现了HTML代码和服务器逻辑代码的分离,这样更方便于代码编写、整理及调试。
.NET 面试题(1)