.NET面试题
1.三层架构
表示层(UI):实现数据呈现,用户交互
业务逻辑层(BLL):业务表现层实现与表示层的沟通,业务规则层实现用户业务逻辑
数据访问层(DAL):对数据进行操作,实现数据的增删改查
优点:分工明确,条理清晰,易于调试,而且具有可扩展性
缺点:增加开发成本
2.类(class)与结构(struct)的异同
Class可以实例化,属于引用类型,是分配在内存中的堆上的。
类是引用传递 Struct属于值类型,是分配在内存的栈上。
结构是复制传递
3.堆跟栈的区别
栈是在编译期间就分配好的内存空间,局部值类型变量,值类型参数等都在栈内存中 堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要堆内存的大小
4.String s=new string("xyz");创建了几个String Object?
两个对象,一个是”xyz“,一个是指向”xyz“的引用对象
5.C#中的接口和类有什么异同?
不同点:
1.不能直接实例化接口;
2.接口不包括方法的实现;
3.接口可以多继承,类只能单继承
相同点:
1.接口,类和结构都可以从多个接口继承;接口类似于抽象基类;
2.继承接口的任何非抽象类型都必须实现接口的所有成员;
3.接口和类都可以包含事件,索引器,方法和属性;
6.抽象类和接口有什么区别?
相同点:
都不能被直接实例化,都可以通过继承实现其抽象方法
不同点:
1.接口支持多继承,抽象类不支持多继承;接口只定义行为,抽象类既可以定义行为,还可以提供实现
2.接口只包含方法(Method),属性(Property),索引器(index),事件(Event)的签名,但不能定义字段和包含实现方法;
3.抽象类可以定义字段,属性,包含实现方法;
7.new关键字的用法
new 运算符 用于创建对象和调用构造函数
new 修饰符 用于向基类成员隐藏继承成员
8.线程与进程的区别
进程定义的是应用程序与应用程序的边界,不同的进程不能共享代码和数据空间 线程定义的是代码执行堆栈和执行上下文的边界
9.DataReader和DataSet的异同?
DataReader使用时始终占用Sqlconnection,在线操作数据库,每次只在内存中加载一条数据,所以占用的内存很小
DataSet则是将数据一次性加载在内存中,抛弃数据库连接,读取完毕即放弃数据库连接,将数据全部加载在内存中,所以比较耗内存
10.简述private,protected,public,internal修饰符的访问权限
private:私有成员,在类的内部才可以访问
protected:保护成员,该类内部和继承类中才可以访问
public:公共成员,完全公开,没有访问权限
internal:在同一程序集内可以访问
11.列举ASP.NET页面之间传递值的几种方式
1.使用Querystring,如....?id=1;response.redirect()...
2.使用session变量
3.使用server.tranfer
4.使用Application
5.使用Cache
6.使用HttpContex的item属性
7.使用文件
8.使用数据库
9.使用Cookie
12.override与重载的区别
重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要
override是进行基类中虚函数或抽象函数的重写,用于实现多态
13.什么是装箱和拆箱?
装箱:从值类型转换到引用类型
拆箱:用引用类型转换到值类型
14..net中读写数据库需要用到哪些类?他们的作用?
DbConnection:数据库连接类
DataCommand:执行语句命令
DataSet:数据集
DataAdapter:数据适配器,用于填充数据到数据集
DataReader:数据读取器
15.在C#中,string str=null与string str=""请尽量使用文字或图像说明其中的区别
string str=null是不给他分配内存空间,而string str=""给它分配长度为空字符串的内存空间
16.面向对象的语言具有封装性,继承性,多态性
17.软件开发过程一般有几个阶段?每个阶段的作用?
可行性分析(风险控制),需求分析,架构设计,代码编写,测试,部署,维护