zoukankan      html  css  js  c++  java
  • 【原创】.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 “你能做什么“的问题。

  • 相关阅读:
    Android 4.0锁屏机制类之间的调用关系
    给盲目兴奋的程序员们的建议
    Hadoop相对于RDBMS、HPC、志愿计算的比较
    vmware7.1.14的vmware tools不支持opensuse12的解决过程
    集群的分类
    Suse linux和OpenSuse的区别和联系
    Apache Hadoop项目
    linux下安装JDK
    sudo的详细用法
    ubuntu和debian环境下vmware虚拟机共享目录无法挂载的问题解决办法
  • 原文地址:https://www.cnblogs.com/successliwei/p/5377538.html
Copyright © 2011-2022 走看看