1.三层架构
表现层(UI)
业务逻辑层(BLL):对数据层的操作,对数据业务逻辑处理
数据访问层(DAL):该层所做事务直接操作数据库
2.应用语言域(AppDomain)
一种边界,它由公共语言运行库围绕同一应用程序范围内创建的对象建立
3.类(class)与结构(struct)的异同
Class可以实例化,属于引用类型,是分配在内存中的堆上的。类是引用传递
Struct 属于值类型,是分配在内存的栈上。结构是复制传递
4.堆跟栈的区别
栈是在编译期间就分配好的内存空间,局部值类型变量、值类型参数等都在栈内存中
堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要堆内存的大小
5.String s = new String("xyz");创建了几个String Object?
2个 在栈中建了一个引用对象s 在堆中建了一个对象 xyz
引用又不是对象。第一个对象是字符串常量"xyz" 第二个对象是new String("xyz")的时候产生的,在heap中分配内存给这个对象,只不过这个对象的内容是指向字符串常量"xyz" 另外还有一个引用s,指向第二个对象。这是一个变量,在栈中分配内存
6.C#中的接口和类有什么异同。
不同点:1.不能直接实例化接口;2.接口不包括方法的实现;3.接口可以多继承,类只能单继承
相同点:1.接口、类和结构都可以从多个接口继承;接口类似于抽象基类:
2.继承接口的任何非抽象类型都必须实现接口的所有成员;
3.接口和类都可以包含事件、索引器、方法和属性;
7.抽象类和接口有什么区别?
相同点:都不能被直接实例化,都可以通过继承实现其抽象方法
不同点:1.接口支持多继承,抽象类不支持多继承;接口只定义行为,抽象类既可以定义行为,还可能提供实现;
2.接口只包含方法(Method)、属性(Property)、索引器(Index)、事件(Event)的签名,但不能定义字段和包含实现方法;
3.抽象类可以定义字段、属性、包含实现方法
8.new关键字的用法
(1)new 运算符 用于创建对象和调用构造函数。
(2)new 修饰符 用于隐藏基类成员的继承成员。
(3)new 约束 用于在泛型声明中约束可能用作类型参数的参数的类型。
new 运算符
1.用于创建对象和调用构造函数
例:Class_Test MyClass = new Class_Test();
2.也用于为值类型调用默认的构造函数
例:int myInt = new int();
myInt 初始化为 0,它是 int 类型的默认值。该语句的效果等同于:int myInt = 0;
3.不能重载 new 运算符。
4.如果 new 运算符分配内存失败,则它将引发 OutOfMemoryException 异常。
new 修饰符
使用 new 修饰符显式隐藏从基类继承的成员。若要隐藏继承的成员,请使用相同名称在派生类中声明该成员,并用 new 修饰符修饰它。
new 修饰符
使用 new 修饰符显式隐藏从基类继承的成员。若要隐藏继承的成员,请使用相同名称在派生类中声明该成员,并用 new 修饰符修饰它。
9.线程与进程的区别
进程定义的是应用程序与应用程序的边界,不同的进程不能共享代码和数据空间;
线程定义的是代码执行堆栈和执行上下文的边界
10.using关键字有什么用?什么是IDisposable?
using可以声明namespace的引入,还可以实现非托管资源的释放,实现了IDisposiable的类在using中创建,using结束后会自动调用该对象的Dispose方法,释放资源,等价于try... catch
11.string str = null 与 string str = “”说明其中的区别
一个是什么都没有,一个是空字符串,区别大了你定义了一个变量的引用strstring str=null 把这个引用指向了一个null,没有地址没有值的地方。。string str="" 把这个引用指向了一个地址,地址里面存的是空的字符。。
12.应用程序域:为安全性、可靠性、版本控制以及卸载程序集提供了隔离边界。应用程序域通常由运行库宿主创建,运行库宿主负责在运行应用程序之前引导公共语言运行库。
强类型语言:能够禁止任何违反类型系统的代码语言
13.什么是code-Behind技术。
就是代码隐藏,在ASP.NET中通过ASPX页面指向CS文件的方法实现显示逻辑和处理逻辑的分离,这样有助于web应用程序的创建
14.如果设treeView1=new TreeView(),则treeView1.Nodes.Add("根节点")返回的是一个TreeNode类型
15.StringBuilder 和 String 的区别?
String 在进行运算时(如赋值、拼接)会产生一个实例,而StringBuilder则不会。所以在大量字符串拼接或频繁对某一字符串进行操作时最好使用StringBuilder
16.const与readonly的区别:
const字段只能在该字段的声明初始化,readonly可以在声明或构造函数中初始化
17.ViewState是保持状态的一种机制,EnableViewState属性设置为false即可禁用
18.在什么情况下会用到虚方法?它与接口有什么不同?
子类重新定义父类的某个方法时,必须把父类的方法定义为virtual
在定义接口中不能有方法体,虚方法可以
实现时,子类可以不重新定义虚方法,如果一个类继承接口,必须实现该接口
19.DataReader和DataSet的异同?
DataReader使用时始终占用SqlConnection,在线操作数据库,每次只在内存中加载一条数据,所以占用的内存很小
DataSet则是将数据一次性加载在内存中,抛弃数据库连接,读取完毕即放弃数据库连接,将数据全部加载在内存中,所以比较耗内存
20.内存泄露是指一个不再被程序使用的对象或变量一直被占据在内存中