zoukankan      html  css  js  c++  java
  • 常见的几个.NET 面试题

    详述.NET里class和struct的异同!
    class:放在 ? struct放在?struct值传递。
    类与结构有很多相似之处:结构可以实现接口,并且可以具有与类相同的成员类型。然而,结构在几个重要方面不同于类:结构为值类型而不是引用类型,并且结构不支持继承。结构的值存储在“在堆栈上”或“内联”。细心的程序员有时可以通过聪明地使用结构来增强性能。
     
    什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?
       
     操作系统和运行库环境通常会在应用程序间提供某种形式的隔离。例如,Microsoft Windows使用进程来隔离应用程序。为确保在一个应用程序中运行的代码不会对其他不相关的应用程序产生不良影响,这种隔离是必需的。应用程序域提供了一个更安全、用途更广的处理单元,公共语言运行库可使用该单元提供应用程序之间的隔离。应用程序域为安全性、可靠性、版本控制以及卸载程序集提供了隔离边界。应用程序域通常由运行库宿主创建,运行库宿主负责在运行应用程序之前引导公共语言运行库。应用程序域通过作为应用程序状态的容器,使应用程序得以隔离。应用程序域作为应用程序中和它使用的类库中所定义的类型的容器和边界。同一个类型若被加载到不同的应用程序域中就成为各自独立的客体,实由它们在各自应用程序域中产生的例亦不可直接共享。例如,对于这些类型的静态变量,每个应用程序域都有自己的副本,并且这些类型的静态构造函数在每个应用程序域中也要(最多)运行一次。
    以运行库为目标的代码称为托管代码。
    装箱就是把值类型转成引用类型,拆箱则反之。
    重载就是指一个方法名同,参数个数不同,返回值可以相同的方法.

    CTS(Common Type System)通用类型系统,CLS(Common Language Specification)公共语言规范,CLR(Common Language Runtime)是通用语言运行时,


    进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:

    简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 
    线程的划分尺度小于进程,使得多线程程序的并发性高。
    另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
    线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
    从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

    进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.
    线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.
    一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.

    -----------------------------------------------------

    线程的上下文是干什么用的?与WEB上的HttpContext有什么本质上的区别?

    哎..又是翻译的误导..   
      我以前听到上下文这个字,也是一头雾水啊...   
      不要管什么上下文啦...那时误导人的翻译。   
      "上下文"的原英文是Context,翻译过来应该是"相关"   
      线程Context   的意思是线程相关的对象。   
      例如你开了一个线程来做某些事情,   
      但是在现在的编程角度,同一种线程执行的是固定的代码,   
      而具体要做什么事情呢?这就是线程Context所指定的对象所包含的信息了。   
        
      一般你要开一个线程的话,你是需要告诉线程做什么的。   
      对于初学者,一般都是使用Global变量(到了dotNet就用静态变量)   
      但这不算Context   
        
      想象一下,你做一个批量搜索网络的软件。   
      那样你可能要同时开很多线程,其中的代码可能是:   
        
      public   void   SearchUrl(string   url)   
      //search   url="http://www.microsoft.com/"   
      MyThreadClass   tc=new   MyThreadClass();   
      tc.UrlToSearch=url;   
      Thread   t=new   Thread(new   ThreadStart(tc.Go));   
      t.Start();   
        
      这样,在tc.Go里面,它本身的类tc就有UrlToSearch这个属性(this.UrlToSearch)   
      而且,在不同的线程里面,this都不同。   
      那么这个this就是线程Context   
        
      dotNet使用delegate来启动线程,使Context可以简单地就包装在delegate的相关对象上了。.   
      (如果在Java,或MFC,必须要继承Thread类,然后在那子类上定义Context成员的)   
      ..   

    哦。.MyThreadClass是随手起的名字,不代表是继承Thread的。.   
      例如它的一个可能的定义是:   
        
      public   class   MyThreadClass   
      {   
              public   MyThreadClass(){}   
              public   MyThreadClass(string   url)   
              {   
                      UrlToSearch=url;   
              }   
              string   _url;   
              public   string   UrlToSearch   
              {   
                      get{return   _url;}   
                      set{_url=value;}   
              }   
      }

    ----------------------------------------

    应用程序域——由 AppDomain 对象来表示,为执行托管代码提供隔离、卸载和安全边界。多个应用程序域可以在一个进程中运行;但是,在应用程序域和线程之间没有一对一的关联。多个线程可以属于一个应用程序域,尽管给定的线程并不局限于一个应用程序域,但在任何给定时间,线程都在一个应用程序域中执行。应用程序域通过使用 CreateDomain 方法来创建。AppDomain 实例用于加载和执行程序集 (Assembly)。当不再使用 AppDomain 时,可以将它卸载。AppDomain 类实现一组事件,这些事件使应用程序可以在加载程序集、卸载应用程序域或引发未处理的异常时进行响应。

    ------------------------------------------------------------------------

    什么是应用程序域?
    应用程序域(通常是 AppDomain)是用于隔离应用程序的虚拟进程。在同一个应用程序作用域中创建的所有对象(换句话说,从该应用程序的入口点开始沿着对象激活序列的任何地方)都在同一个应用程序域中创建。多个应用程序域可以存在于一个操作系统进程中,使它们成为隔离应用程序的简便方式。

    操作系统进程通过使用各不相同的内存地址空间来提供隔离。尽管它是有效的,但也是代价昂贵的,并且不能达到大型 Web 服务器所需要的数量。与其相比,公共语言运行时通过管理在应用程序域中运行的代码的内存使用来强制进行应用程序隔离。这样就确保它不会访问应用程序域以外的内存。需要注意的是,只有类型安全的代码才能以这种方式管理(当在应用程序域中加载不安全代码时,运行时不能保证隔离)。 

    有待补充...
    .NET Framework 和Visual Studio为你提供了三种主要方法在应用程序中表示数据: 


    ADO.NET中的DataSet(包括有型别和无型别)和DataTable类 

    System.Xml命名空间中的XmlDataDocument和XmlDocument类 

    包含自定义属性的自定义类 

    尽管ADO.NET和System.Xml命名空间提供了标准的类来表示数据,但是, 
    ---强类型------- 
    是自定义类所具有的优势。它使得对象处理的数据更容易被理解,而不需要与ADO.NET和XML编程模型打交道。这在大型系统里是很有用的,特别是当设计者定义了由自定义类所组成的数据访问层,并把设计向组织内的其他程序员发布的时候。当然,现在自定义类的使用有下降的趋势:它们需要编更多的代码,因为你必须创建.NET Framework所缺少的对象关系映射层。

    强/弱类型是指类型检查的严格程度的。语言有无类型,弱类型和强类型三种。无类型的不检查,甚至不区分指令和数据。弱类型的检查很弱,仅能严格的区分指令和数据。强类型的则严格的在编译期进行检查。 

    C# 是强类型语言;因此每个变量和对象都必须具有声明类型。 

    为所有变量指定数据类型称为“强类型”。 

    在.NET中使用强类型有以下优点: 
    1.它为变量启用 IntelliSense® 支持。这允许您在输入代码时看到变量的属性和其他成员。 
    2.它会运用编译器类型检查。这将捕捉到因溢出等错误而在运行时失败的语句。这也可以在不支持方法的对象上捕捉对方法的调用。 
    3.使代码的执行速度更快


  • 相关阅读:
    hdu 5045 Contest
    hdu 4068 SanguoSHA
    TSP 旅行商问题(状态压缩dp)
    haoi2015 树上操作
    noi 2015 软件包管理器(树链剖分)
    zjoi2008 树链剖分
    读入优化
    动态规划类型总结
    有关Rujia Liu 动态规划的·一些总结
    输入优化
  • 原文地址:https://www.cnblogs.com/zhaobl/p/1445659.html
Copyright © 2011-2022 走看看