1.三层架构
表现层(UI)
业务逻辑层(BLL):对数据层的操作,对数据业务逻辑处理
数据访问层(DAL):该层所做事务直接操作数据库
2.应用语言域(AppDomain)
一种边界,它由公共语言运行库围绕同一应用程序范围内创建的对象建立
3.类(class)与结构(struct)的异同
Class可以实例化,属于引用类型,是分配在内存中的堆上的。类是引用传递
Struct 属于值类型,是分配在内存的栈上。结构是复制传递
4.堆跟栈的区别
栈是在编译期间就分配好的内存空间,局部值类型变量、值类型参数等都在栈内存中
堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要堆内存的大小
5.String s = new String("xyz");创建了几个String Object?
两个对象,一个是“xyz”,一个是指向“xyz”的引用对象。
6.C#中的接口和类有什么异同。
不同点:1.不能直接实例化接口;2.接口不包括方法的实现;3.接口可以多继承,类只能单继承
相同点:1.接口、类和结构都可以从多个接口继承;接口类似于抽象基类:
2.继承接口的任何非抽象类型都必须实现接口的所有成员;
3.接口和类都可以包含事件、索引器、方法和属性;
7.抽象类和接口有什么区别?
相同点:都不能被直接实例化,都可以通过继承实现其抽象方法
不同点:1.接口支持多继承,抽象类不支持多继承;接口只定义行为,抽象类既可以定义行为,还可能提供实现;
2.接口只包含方法(Method)、属性(Property)、索引器(Index)、事件(Event)的签名,但不能定义字段和包含实现方法;
3.抽象类可以定义字段、属性、包含实现方法
8.new关键字的用法
new 运算符 用于创建对象和调用构造函数
new 修饰符 用于向基类成员隐藏继承成员
9.线程与进程的区别
进程定义的是应用程序与应用程序的边界,不同的进程不能共享代码和数据空间;
线程定义的是代码执行堆栈和执行上下文的边界
10.using关键字有什么用?什么是IDisposable?
using可以声明namespace的引入,还可以实现非托管资源的释放,实现了IDisposiable的类在using中创建,using结束后会自动调用该对象的Dispose方法,释放资源,等价于try... catch
11.string str = null 与 string str = “”说明其中的区别
string str=null是不给它分配内存空间的,而string str="" 给它分配长度为空字符串的内存空间。string str=null没有string对象,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.内存泄露是指一个不再被程序使用的对象或变量一直被占据在内存中