Asp.Net面试题

多线程同步:
1、Lock,lock的参数必须是基于引用类型的对象
2、System.Threading.Interlocked,对于整数数据类型的简单操作,可以用 Interlocked
3、ReaderWriterLock
需要读取资源的数据,而不是修改资源的数据,在这种情况下获取资源的独占权无疑会影响运行效率,因此.Net提供了一种机制,使用ReaderWriterLock进行资源访问时,如果在某一时刻资源并没有获取写的独占权,那么可以获得多个读的访问权,单个写入的独占权,如果某一时刻已经获取了写入的独占权,那么其它读取的访问权必须进行等待
4、SynchronizationAttribute
类的实例在同一时刻只能被一个线程访问时,我们可以直接将类标识成Synchronization的
5、MethodImplAttribute
整个方法内部的代码都需要上锁的话,使用MethodImplAttribute属性会更简单一些

跨线程访问UI线程
子线程中调用Invoke方法,将子线程挂到主线程去操作。

线程池ThreadPool:
自动创建、管理、运行线程。无需关注具体复杂细节。

线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程.每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中

不能使用线程池的情况:

要使一个任务具有特定优先级
具有可能会长时间运行(并因此阻塞其他任务)的任务

Task:任务相比线程池有很小的开销和精确的控制

Task跟线程池ThreadPool的功能类似,异步执行,可以很好的控制task的执行顺序,让多个task有序的工作。
Task.Wait,Task.WaitAll,Task.WaitAny,Task.ContinueWith

两种创建方式:

Task t1 = new Task(MyMethod);
Task t1 = Task.Factory.StartNew(MyMethod);
t1.Start();

t1.Wait();
Console.WriteLine(t1.Result);

出错:
Task的异常还会重新抛到Wait和AllWait中

http://www.cnblogs.com/SkySoot/archive/2012/04/01/2429259.html

创建线程的几种方式:
直接 thread t=new thread(new threadstart() )
线程池自动创建线程
Task创建任务
异步编程async await

Asp.net页面生命周期:
1、Init:PreInit,Init,Init Complete,初始化控件,初始化默认值,ViewSate,创建页面类对象,创建HttpContext请求上下文对象。
2、Load:PreLoad,Load,LoadComplete,加载控件,加载ViewState,加载数据。
3、Render:PreRender,Render,生成html并返回到客户端。
4、Unload:卸载页面类对象

Redis数据类型:
String:可以存储C#所有类型,Get Set方法
List:链表结构,入队出对,push,pop操作。
Set:无序集合,可以求交集,并集,差集。
SortedSet:有序集合,可以指定顺序。
Hash:用来存储对象,可以方便存取,节约内存开销。

WebForms 和 MVC的区别:

WebForms:接收到请求某个页面的命令后,创建类对象,并调用类的PR方法,执行生命周期过呈,

MVC:直接 接收到请求某个类的某个方法,更直接。

两者共用一套请求管道,请求管道执行一些列事件,在第7个事件中,根据URL去匹配路由表中的路由规则,如果没有匹配到,就是普通aspx,然后继续进行第8个事件。如果匹配到了,第7个事件就会创建一个MvcHandler存在HttpContext中。

控制反转IOC:

IoC也称为好莱坞原则(Hollywood Principle):不要给我打电话,我会给你打。
对象的控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。
比如控制权交给了IoC容器,它就是一个创建工厂,你要什么对象,它就给你什么对象,有了IoC容器,依赖关系就变了,原先的依赖关系就没了,它们都依赖IoC容器了,通过IoC容器来建立它们之间的关系。

依赖注入(DI Dependency Injection)

所谓依赖注入,就是由IoC容器在运行期间,动态地(通过反射)将某种依赖关系注入到对象之中。

依赖关系可以通过配置文件进行配置,只需要修改配置文件,就修改了依赖关系。

依赖注入机制减轻了组件之间的依赖关系,同时也大大提高了组件的可移植性。

如,BLL具体调用哪个 数据库Dao操作层,由配置文件来决定。

—-**生鲜面试—-
1、C#中 Hashtable和Dictionary的区别?Hashtable和Dictionary是线程安全的吗?

1.HashTable不支持泛型,而Dictionary支持泛型。
  2.Hashtable 的元素属于 Object 类型,所以在存储或检索值类型时通常发生装箱和拆箱的操作,所以你可能需要进行一些类型转换的操作,而且对于int,float这些值类型还需要进行装箱等操作,非常耗时。
  3.单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分。多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读取, 对 Hashtable 进一步调用 Synchronized() 方法可以获得完全线程安全的类型. 而 Dictionary 非线程安全, 必须人为使用 lock 语句进行保护, 效率大减。

没有更多推荐了,返回首页