1.堆和栈
c#的两大数据类型分别为值类型和引用类型。值类型包括简单类型、结构体类型和枚举类型,引用类型包括自定义类、数组、接口、委托等。
值类型通常分配在线程的堆栈上,作用域结束时,所占空间自行释放,效率高,无需进行地址转换,而引用类型通常分配在托管堆上,由GC来控制其回收,需要进行地址转换,效率降低
2.session(几种状态,区别)
三种模式的Session比较
InProc | StateServer | SQLServer | |
存储物理位置 | IIS进程(内存) | Windows服务进程(内存) | SQLServer数据库(磁盘) |
存储类型限制 | 无限制 | 可以序列化的类型 | 可以序列化的类型 |
存储大小限制 | 无限制 | ||
使用范围 | 当前请求上下文,对于每个用户独立 | ||
生命周期 | 第一次访问网站的时候创建Session超时后销毁 | ||
优点 | 性能比较高 | Session不依赖Web服务器,不容易丢失 | |
缺点 | 容易丢失 | 序列化与反序列化消耗CPU资源 | 序列化与反序列化消耗CPU资源,从磁盘读取Session比较慢 |
使用原则 | 不要存放大量数据 |
3.Application domain:
ApplicationDomain可以看作是一个Assembly的逻辑容器。在程序执行过程中,如果遇到需要的Type并没有定义在已经加载的Assemblies中,CLR会把相应的Assembly加载的该Application Domain中。每个ApplicationDomain都有一个属于自己的加载器堆(Loader Heap),用于维护从ApplicationDomain创建以后所用到的所有的Type,以及这些Type对应的方法表——维护这样一个Mapping:定义在Type中的所有方法和经过JIT编译后x86代码(只考虑32bit处理器)。
4.httphandle and httpmodule:
ASP.Net处理Http Request时,使用Pipeline(管道)方式,由各个HttpModule对请求进行处理,然后到达HttpHandler,HttpHandler处理完之后,仍经过Pipeline中各个HttpModule的处理,最后将HTML发送到客户端浏览器中。
HttpModule用于页面处理前和处理后的一些事件的处理,HttpHandler进行真正的页面的处理。httpmodule中定义了在页面处理前(后)要进行权限,角色,session等等的检查和控制,而httphandler则定义了,对于不同的页面请求(根据后缀名判断),执行对应的处理程序.如.aspx, .asmx,.skin等等都有对应的type定义处理程序.
5.多线程:
Thread t = new Thread(ThreadStart(fun));
t.start();
了解线程生产者,消费模式
6.事件event,委托delegate :
委托是指具有相同属性(也称具有相同的函数签名:返回类型相同,参数类型、参数顺序及参数个数相同)的函数或方法的抽象,关键字为delegate。主要用途是三个:1)函数回调;2)传递方法;3)事件机制;事件是委托的一种实例。
7.什么是反射:
反射(Reflection)是.NET中的重要机制,通过反射,可以在运行时获得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还可以获得每个成员的名称、限定符和参数等。
8.设计模式:
单例模式,抽象工厂模式,工厂方法模式,策略模式,观望者模式