【原创】.NET之我见

最近在准备面试,自己也顺带巩固了下基础,加上自己对码农的一些理解都写在这里了,水平不行,欢迎吐槽

//.NET基础

1.Class 和struct 区别

类是一种“引用类型”。创建类的对象时,对象赋值到的变量只保存对该内存的引用。将对象引用赋给新变量时,新变量引用的是原始对象。通过一个变量做出的更改将反映在另一个变量中,因为两者引用同一数据。

结构是一种值类型。创建结构时,结构赋值到的变量保存该结构的实际数据。将结构赋给新变量时,将复制该结构。因此,新变量和原始变量包含同一数据的两个不同的副本。对一个副本的更改不影响另一个副本。

 

 2.值类型和引用类型:

常见的值类型: int, 在定义是必须初始化,分配在栈(Stack)上

常见的引用类型:string, 在定义时可以初始化为null, 分配在堆(Heap)上

 

 3.装箱和拆箱

装箱:从值类型转为引用类型。装箱列子: int i=0; String s= (string)i;

拆箱:引用类型转化为值类型。拆箱例子: int i=0; Object obj=i; int j =(int)obj;

 

4. 异常的作用是什么?.NET BCL中有哪些常见的异常?在代码中您是如何捕获/处理异常的?在“catch (ex)”中,“throw”和“throw ex”有什么区别?您会如何设计异常的结构,什么情况下您会抛出异常?

Throw 和 Throw ex 差别

 

Throw 和 Throw ex 差别 http://www.cnblogs.com/JerryTian/archive/2012/09/24/2699459.html

5. Dispose ,Close, set object= null 区别?

从内存角度来看, 举个例子:

var frm1 = New Form(); //在内存 0x000022~0x0000088 开辟了一块内存放置frm1, 如果调用 frm.Close(); 则该内存区域扔被frm1占用,下次再frm.Open()就会很快。如果调用frm.Dispose() 方法则从释放这段内存,并立即调用GC回收这段内存。

frm =null; 则只是释放这段内存,等待GC回收。

这里顺便说下.NET提供的using语法, 它可确保在实现了IDisposeable接口的对象的引用超出作用域时,在该对象上自动调用Dispose方法。

Or just a general statement. With the connection object calling Close() will release the connection back into the pool. Calling Dispose() will call Close() and then set the connection string to null.

 

6.什么是.NET?什么是CLI?什么是CLR?IL是什么?JIT是什么,它是如何工作的?GC是什么,简述一下GC的工作方式?

.NET是一个微软的开发应用层程序的框架.CLI 是公共语言接口,CLR是公共语言运行时,IL是中间语言,JIT 即时编译? GC垃圾回收器,定是运行,回收没有被用的内存资源

 

7. 什么是扩展方法,能带来哪些好处?

扩展方法就是在不改变原有代码的情况下,给一个已经存在的类扩展一些方法。

 

8.List<int> 和 int[] 区别?

 

9.关于并行编程:

1.异步委托: 定义一个委托,将要异步之行的方法指向该委托,委托调用BeginInvoke来异步之行该方法(返回一个IAsyncResult的对象到主线程),可以判断IAsynResult的行为,或者直接之行一个回调方法来使用异步方法返回的IAsyncResult的结果。

2.Thread类:

    前台线程和后台线程:

    Thread类创建的线程总是前台线程(除非指定IsBackgroundThread = true),线程池创建的线程总是后台线程, 有时程序已经关掉,进程没有被杀掉就是因为UI线程结束了,但是创建的其他前台线程还没有结束,所以。。。。但是如果创建的是后台线程,则后台线程会随着前台线程的结束而结束。 

 3.ThreaPool

ThreadPool总是创建的后台线程,而且不能指定优先级,一般用于之行耗时比较小的任务。如果是耗时比较久,则创建Thread类的实例比较好。

10.关于性能优化:

自己总结的一点工作经验:

1.避免在迭代里查询数据库,这样会增加I/O

2.不用的非托管资源及时回收

3. IEnumerable和IQueryable 区别:

IEnumerable<T>查询必须在本地执行.并且执行查询前我们必须把所有的数据加载到本地.而且更多的时候.加载的数据有大 量的数据是我们不需要的无效数据.但是我们却不得不传输更多的数据.做更多的无用功.而IQueryable<T>却总能只提供你所需要的数 据.大大减少了数据的传输.这就好比我们在小作坊下订单.小作坊老板跟我们说.他的货刚好比你所需要的多出一些.你只能要了它.不然剩下一点他不好卖等 等.而大工厂却不会出现这种状况.

 //数据库

聚集索引和非聚集索引区别

聚集索引类似电话簿,数据按照聚集索引顺序排列,一个表只能有一个聚集索引,但该索引可包含多个列。

非聚集索引类

 

//Web

1.Authentication 与Authorization 区别

Authentication, “你是谁”的问题,Authorization “你能做什么“的问题。

posted @ 2016-04-11 11:15  Mac_Lee  阅读(195)  评论(0编辑  收藏  举报