[转].net程序员面试题

原文地址:http://www.cnblogs.com/pponline/archive/2009/12/05/1617639.html

 

1.重载(Overload )和覆写(override)的区别


答:

方法重载:当类包含两个名称相同但签名不同(方法名相同,参数列表不相同)的方法时发生方法重载。用方法重载来提供在语义上完成相同而功能不同的方法。
覆写:在类的继承中使用,通过覆写子类方法可以改变父类虚方法的实现。

 
2.
接口与继承的区别?什么时候使用接口,什么时候使用继承?


答:

      1 接口定义一个类型需要实现的方法,属性,索引和事件,包括可能的参数类型和返回值类型,而把具体的实现交由相应的类或结构来做,从而为组件提供多态能力。
     
2 继承常用于在一个现有父类的基础上的功能扩展,往往是我们将几个类中相同的成员提取出来放在父类中实现,然后在各自的子类中加以继承。
     
3 接口可以实现多接口继重,而继承只能实现单继承。
     
4 实现继承可继承父类型的实现,由于接口中没有定义方法的实现,因此必须实现继承后该接口的所有方法。 
     
5 为父类型添加方法可能不影响使用继承自该类型实现的用户,而为接口添加方法导致用户必须为新方法添加实现。 
      
6 当派生类和基类是is-a的关系是使用"继承",典型案例"苹果 is-a 水果",存在can-do的关系时使用"接口"

     

3.ado,ado.net的区别

答:

您可以通过将 ADO.NET 的各项功能与 ActiveX 数据对象 (ADO) 的特定功能进行比较来理解 ADO.NET 的功能。

数据的内存中表示形式

ADO 中,数据的内存中表示形式为记录集。在 ADO.NET 中,它为数据集。它们之间有重要的差异。

表的个数

记录集看起来像单个表。如果记录集将包含来自多个数据库表的数据,则它必须使用 JOIN 查询,将来自各个数据库表的数据组合到单个结果表中。

相反,数据集是一个或多个表的集合。数据集内的表称为数据表;明确地说,它们是 DataTable 对象。如果数据集包含来自多个数据库表的数据,它通常将包含多个 DataTable 对象。即,每个 DataTable 对象通常对应于单个数据库表或视图。这样,数据集可以模仿基础数据库的结构。

数据集通常还包含关系。数据集内的关系类似于数据库中的外键关系,即它使多个表中的行彼此关联。例如,如果数据集包含一个有关投资者的表和另一个有关每个投资者的股票购买情况的表,则数据集可能还包含一个关系来连接投资者表的各个行和购买表的对应行。

由于数据集可以保存多个独立的表并维护有关表之间关系的信息,因此它可以保存比记录集丰富得多的数据结构,包括自关联的表和具有多对多关系的表。

数据导航和游标

ADO 中,您使用 ADO MoveNext 方法顺序扫描记录集的行。在 ADO.NET 中,行表示为集合,因此您可以像依次通过任何集合那样依次通过表,或通过序号索引或主键索引访问特定行。DataRelation 对象维护有关主记录和详细资料记录的信息,并提供方法使您可以获取与正在操作的记录相关的记录。例如,从 Investor 表的"Nate Sun"的行开始,可以定位到 Purchase 表中描述其购买情况的那组行。

"游标"是数据库元素,它控制记录导航、更新数据的能力和其他用户对数据库所做更改的可见性。ADO.NET 不具有固有的游标对象,而是包含提供传统游标功能的数据类。例如,在 ADO.NET DataReader 对象中提供只进、只读游标的功能。有关游标功能的更多信息,请参见数据访问技术。

将打开连接的时间降至最低

ADO.NET 中,打开连接的时间仅足够执行数据库操作,例如"选择"(Select) "更新"(Update)。您可以将行读入数据集中,然后在不保持与数据源的连接的情况下使用它们。在 ADO 中,记录集可以提供不连接的访问,但 ADO 主要是为连接的访问设计的。

ADO ADO.NET 中的不连接处理之间存在一个显著差异。在 ADO 中,通过调用 OLE DB 提供程序来与数据库通信。但在 ADO.NET 中,您通过数据适配器(OleDbDataAdapterSqlDataAdapterOdbcDataAdapter OracleDataAdapter 对象)与数据库通信,这将调用 OLE DB 提供程序或基础数据源提供的 APIADO ADO.NET 之间的主要区别在于:在 ADO.NET 中,数据适配器允许您控制将对数据集所做的更改传输到数据库的方式,方法是实现性能优化、执行数据验证检查或添加其他任何额外处理。

注意   数据适配器、数据连接、数据命令和数据读取器是组成 .NET Framework 数据提供程序的组件。Microsoft 和第三方供应商可能会提供其它提供程序,这些提供程序也可集成到 Visual Studio 中。有关不同 .NET 数据提供程序的信息,请参见 .NET 数据提供程序。

在应用程序间共享数据

在应用程序间传输 ADO.NET 数据集比传输 ADO 不连接的记录集要容易得多。若要将 ADO 不连接的记录集从一个组件传输到另一个组件,请使用 COM 封送。若要在 ADO.NET 中传输数据,请使用数据集,它可以传输 XML 流。

相对于 COM 封送,XML 文件的传输提供以下便利之处:

更丰富的数据类型

COM 封送提供一组有限的数据类型(由 COM 标准定义的那些类型)。由于 ADO.NET 中的数据集传输基于 XML 格式,所以对数据类型没有限制。因此,共享数据集的组件可以使用这些组件一般会使用的任何丰富的数据类型集。

性能

传输大型 ADO 记录集或大型 ADO.NET 数据集会使用网络资源;随着数据量的增长,施加于网络的压力也在增加。ADO ADO.NET 都使您可以最大限度地降低所传输的数据。但 ADO.NET 还提供另一个性能优势:ADO.NET 不需要数据类型转换。而需要 COM 封送来在组件间传输记录集的 ADO,则需要将 ADO 数据类型转换为 COM 数据类型。

穿透防火墙

防火墙可以影响试图传输不连接的 ADO 记录集的两个组件。请记住,防火墙通常配置为允许 HTML 文本通过,但防止系统级请求(如 COM 封送)通过。

因为组件使用 XML 交换 ADO.NET 数据库,所以防火墙可以允许数据集通过。

     

     

4.asp.net页面在什么时候产生?又在什么时候销毁?

 答:

    (1)Page_Init();---初始化对象
这一过程主要是初始化包括页面本身的所有控件,每次的页面载入就会执行一次初试过程,而在这里面访问到的也是控件的初始值。还有就是可以通过OnInit()来重载初试化事件。


    (2) LoadViewState---
导入Viewstate数据
在初试化事件后,在loadvireState事件中所有控件将获得他们的第一个属性ViewState属性,这个属性最终将被返回给服务器以判断这个页面是已经被用户访问完毕还是仍然在被用户所访问。也可重载loadvireState事件对相应的控件进行值设定。


    (3) Load Postback data;---
LoadPostData处理Postback数据
Postback
数据也可以理解成就是服务器页面提交的表单数据,每一次表单数据的提交都会触发执行IPostBackDataHandler接口操作的控件。


    (4) Page_Load();---
导入对象
这个过程就比较熟悉了,也是在页面的每次载入时一定会执行,但是注意和PageInit()之间的区别,所有的对象第一次被布置在DOM页面(在Asp.net中称控件树)里了并且可以通过代码或是相关的位置被引用。这样,对象就可以很容易的从客户端获得诸如宽度、高度、值、可见性等在Html中的属性值。经常会用到的Page.IsPostBack()指示该页是否正为响应客户端回发而加载,或者它是否正被首次加载和访问.


    (5) Handle control events;---
具体的控件事件
这个过程执行的是相应具体控件事件,比如按钮事件..等。


    (6) Page_PreRender();---
预先呈递对象
预先呈递对象可以改变对象并将改变保存的最后时刻.可以对控件的属性、控件树的结构等做出最后的修改,同时还不用考虑Asp.net对其作出任何改变,因为此时已经脱离了数据库调用以及viewstate更新了,也可以通过OnPreRender来重载。


    (7) Page_Render();---
呈递对象呈递页面
所有对页面控件的修改完成后viewstate就被保存了。运用Html创建给浏览器输出的页面的时候Render事件就发生了。在Render事件过程中,页面调用其中的对象将它们呈递给Html。然后,页面就可以以Html的形式被用户的浏览器访问了。当Render事件被重载时,开发者可以编写自定义的Html代码使得原先生成的Html都无效而按照新的Html来组织页面。Render方法将一个HtmlTextWriter对象作为参数并用它将Html在浏览器上以网页的形式显示。这时仍然可以做一些修改动作,不过它们只是客户端的一些变化而已了。亦可以重载Render事件。


    (8) Unload event;---
卸载对象
当想服务器请求一个对象的时候,就会在内存里生成一个继承页面对象,也就是页面的类,它继承自System.Web.UI.Page.
当页面对象从内存中卸载时发生,将触发该事件.


    (9) Dispose method called
在呈递给Html完成后,所有的对象都应被销毁。在Dispose事件中,你应该销毁所有在建立这个页面时创建的对象。这时,所有的处理已经完毕,所以销毁任何剩下的对象都是不会产生错误的,包括页面对象。你可以重载Dispose事件。

     

     

5.Session,ViewState,Application,cookie的区别?

答:
       Session:Session
用于保持状态的基于 Web 服务器的方法。Session 允许通过将对象存储在Web 服务器的内存中在整个用户会话过程中保持任何对象。主要用于保持代码隐藏类中对象的状态。为每个用创建的,用于存储单个用户,因为他是相对每个用户的.所以可能来取得在线人数等。
      ViewState:
主要用于保持 Web 页上控件的状态。当 Web 页上的控件被绑定到代码隐藏类中的对象。
      Application
用于存储所有用户都可视的信息.所以它存储的是要让所有用户共享的一些信息.如总访问数等;
      Cache:
页面缓存。
      cookie:
通常我们都把它放在客户端,也可以存储在服务器端。主要用它存储用户的个性设制,和登陆信息。

     

     

6.面向对象的思想主要包括什么?

 答:

      开发人员应该熟悉面向对象软件开发(OOP)基本概念,熟悉面向对象软件开发中的类、继承、封装、多态等概念,具备良好的面向对象软件开发思想和设计原则。

     

7.什么是ASP.net中的用户控件?

答:

      用户控件。用户控件是能够在其中放置标记和 Web 服务器控件的容器。然后,可以将用户控件作为一个单元对待,为其定义属性和方法。

     

8.什么叫应用程序域?什么是受管制的代码?什么是强类型和强类型系统?什么是装箱和拆箱?什么是重载?CTSCLSCLR分别作何解释?

答:

    1)应用程序域为隔离正在运行的应用程序提供了一种灵活而安全的方法。

     

  (2)受管制的代码:.NET环境中运行的任何代码都称为受管制的代码(unmanaged code).NET外部的其他代码也运行在Windows上,这些代码称为未受管制的代码(unmanaged code)

     

  (3)强类型和弱类型的区别在与,在编码过程中是否要指定数据类型,作为强类型必须指定数据类型,编译器为其分配相应的存储空间(如   c   ,pascal   )否则编译出错。   而弱类型不一定需要指定数据类型,编译器会用相同的空间去分配各种类型,除非你指定了(如basic)   作为强类型语言,在编译阶段的安全性要高于弱语言型。

        强类型系统:RTTI:类型识别系统。 

  (4)装箱就是隐式的将一个值型转换为引用型对象。比如:
  int i=0;
  Syste.Object obj=i;

  这个过程就是装箱!就是将i装箱!
  拆箱就是将一个引用型对象转换成任意值型!比如:
  int i=0;
  System.Object obj=i;
  int j=(int)obj;

  这个过程前2句是将i装箱,后一句是将obj拆箱!
  再写个代码,看看进行了几次装拆箱!
  int i=0;
  System.Object obj=i;
  Console.WriteLine(i+","+(int)obj);

  其中共发生了3次装箱和一次拆箱!^_^,看出来了吧?!
  第一次是将i装箱,第2次是输出的时候将i转换成
string类型,而string类型为引用类型,即又是装箱,第三次装箱就是(int)obj的转换成string类型,装箱!
  拆箱就是
(int)obj,将obj拆箱!!

     

  (5)重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。

      

    6CLR的全称是公共语言运行库(Common Language Runtime),读者可以把CLR理解为一个包含运行.NET程序的引擎和一堆符合公共语言基础结构的类库的集合。CLR是一个规范的实现,我们开发的几乎所有的.NET程序都基于CLR的类库来实现,并且运行在      CLR提供的运行引擎之上。所谓.NET框架,指的就是公共语言运行库。
公共语言基础(CLI)是微软公司向ECMA提交的一份语言和数据格式规范,CLR是目前为止唯一一个公共语言基础的实现版本。
   CTS的全称是通用类型系统(Common Type System)。前文已经介绍了公共语言基础(CLI)的概念,微软公司提交的CLI规范,包括了公共类型系统(CTS)、公共中间语言(CIL)、底部文件格式以及元数据格式等。公共类型系统定义了一个能够在CLR上运行的语言规范。尽管有很多语言本身不符合CTS规范,但是通过加强编译器,改变语言附加规范等手段,使得许多语言能够编写出能在CLR上运行的程序。

    一种语言编写的程序编译能够在CLR上运行,并不代表这种语言本身完全符合CTS的规范。例如C++语言,仍然保持了其不符合CTS规范的部分,并且在编译时把这部分不符合CTS的代码编译成原始代码而非中间代码。  
    最后来看一下CLS的概念。公共语言规范(CLS)是CTS的一个子集,它定义了希望编写在.NET平台上运行的程序的语言所需符合的最小规范。正因为.NET允许由不同语言编写的程序一起执行,所以才制定出CLS规范,用以避免不同语言特性产生的错误。

     

9.列举一下你所了解的XML技术及其应用

答:

      xml可以用来做网页(xslt) xml可以当作数据库 xml可以用来保存对象的系列化

     

10.值类型和引用类型的区别?写出C#的样例代码。

答:

      值类型包括简单类型、结构体类型和枚举类型,引用类型包括自定义类、数组、接口、委托等

     

11.ADO.net中常用的对象有哪些?分别描述一下。

答:

        ado.net 我直接用 sqlhelper connection command 还有参数

12.如何理解委托?

答:

       简单的说:委托是一种方法容器,里面可以装载若干个具有相同签名的方法引用地址,那么调用委托,就相当于同时调用了该容器内的所有方法。

13.C#中的接口和类有什么异同。

答: 

    区别一,两者表达的概念不一样。抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于"是"的关系;而接口是定义行为规范,因此对于实现接口的子类来说,相对于接口来说,是"行为需要按照接口来完成"。

    区别二,抽象类在定义类型方法的时候,可以给出方法的实现部分,也可以不给出;而对于接口来说,其中所定义的方法都不能给出实现部分。

    
区别三,继承类对于两者所涉及方法的实现是不同的。继承类对于抽象类所定义的抽象方法,可以不用重写,也就是说,可以延用抽象类的方法;而对于接口类所定义的方法或者属性来说,在继承类中必须要给出相应的方法和属性实现。

    区别四,在抽象类中,新增一个方法的话,继承类中可以不用作任何处理;而对于接口来说,则需要修改继承类,提供新定义的方法。

     如下给出两者的简单对比表格。

   

接口

抽象类

多继承

支持

不支持

类型限制

没有

有,只能是引用类型

方法实现

继承类型中必须给出方法实现

继承类中可以不给出

扩展性

比较麻烦

相对比较灵活

多层继承

比较麻烦,需要借助虚函数

比较灵活

     

14..net中读写数据库需要用到哪些类?他们的作用

答:

     1DataSet 用来无连接的储存多个表的数据,并包含表与表之间的关联关系
    
2DataTable 用来存储一个表的数据
    
3SqlConnection 用来创建一个到数据库的连接
    
4SqlCommand 用来执行SQL语句
     
5SqlDataReader 用来顺序读取数据
    
6SqlDataAdapter 用来将数据填充到DataSetDataTable

     

15.UDP连接和TCP连接的异同。

答:

       TCP是传输控制协议,提供的是面向连接的,是可靠的,字节流服务,当用户和服务器彼此进行数据交互的时候,必须在他们数据交互前要进行TCP连接之后才能传输数据。TCP提供超时重拨,检验数据功能。UDP是用户数据报协议,是一个简单的面向数据报的传输协议,是不可靠的连接。

16.ASP.net的身份验证方式有哪些?分别是什么原理?

答:

      Windows 身份验证提供程序:
提供有关如何将 Windows 身份验证与 Microsoft Internet 信息服务 (IIS) 身份验证结合使用来确保 ASP.NET 应用程序安全的信息。
      Forms 身份验证提供程序
提供有关如何使用您自己的代码创建应用程序特定的登录窗体并执行身份验证的信息。使用 Forms 身份验证的一种简便方法是使用 ASP.NET 成员资格和 ASP.NET 登录控件,它们一起提供了一种只需少量或无需代码就可以收集、验证和管理用户凭据的方法。
      Passport 身份验证提供程序
提供有关由 Microsoft 提供的集中身份验证服务的信息,该服务为成员站点提供单一登录和核心配置

     

17.进程和线程分别怎么理解?

答:

进程是比线程大的程序运行单元,都是由操作系统所体会的系统运行单元,一个程序中至少要有一个进程,有一个进程中,至少要有一个线程,线程的划分尺度要比进程要小,进程拥有独立的内存单元,线程是共享内存,从而极大的提高了程序的运行效率同一个进程中的多个线程可以并发执行。

18.什么是code-Behind技术。

答:

       就是代码隐藏,在ASP.NET中通过ASPX页面指向CS文件的方法实现显示逻辑和处理逻辑的分离,这样有助于web应用程序的创建。比如分工,美工和编程的可以个干各的,不用再像以前asp那样都代码和html代码混在一起,难以维护。

19.活动目录的作用。

20..net中读写XML的类都归属于哪些命名空间?

答:      System.Xml;

21.解释一下UDDIWSDL的意义及其作用。

答: 

UDDI

统一描述、发现和集成协议(UDDI, Universal Description, Discovery and Integration)是一套基于Web的、分布式的、为Web服务提供的信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web服务注册以使得别的企业能够发现的访问协议的实现标准。UDDI 提供了一组基于标准的规范用于描述和发现服务,还提供了一组基于因特网的实现。

WSDL

WSDL描述Web服务的公共接口。这是一个基于XML的关于如何与Web服务通讯和使用的服务描述;

     

     

22.什么是SOAP,有哪些应用。

:

SOAPSimple Object Access Protocol )简单对象访问协议是在分散或分布式的环境中交换信息并执行远程过程调用的协议,是一个基于XML的协议。使用SOAP,不用考虑任何特定的传输协议(最常用的还是HTTP协议),可以允许任何类型的对象或代码,在任何平台上,以任何一直语言相互通信。这种相互通信采用的是XML格式的消息

SOAP 是一种轻量级协议,用于在分散型、分布式环境中交换结构化信息。 SOAP 利用 XML 技术定义一种可扩展的消息处理框架,它提供了一种可通过多种底层协议进行交换的消息结构。 这种框架的设计思想是要独立于任何一种特定的编程模型和其他特定实现的语义。

     

23.如何部署一个ASP.net页面。

 答:

VS 2005VS 2003都有发布机制。2003可以发布然后再复制部署。

VS2005基本上可以直接部署到对应位置。

     

24.如何理解.net中的垃圾回收机制。

答: 

NET Framework 的垃圾回收器管理应用程序的内存分配和释放。每次您使用 new 运算符创建对象时,运行库都从托管堆为该对象分配内存。只要托管堆中有地址空间可用,运行库就会继续为新对象分配空间。但是,内存不是无限大的。最终,垃圾回收器必须执行回收以释放一些内存。垃圾回收器优化引擎根据正在进行的分配情况确定执行回收的最佳时间。当垃圾回收器执行回收时,它检查托管堆中不再被应用程序使用的对象并执行必要的操作来回收它们占用的内存。

     

25.常用的调用webservice方法有哪些?

答:1.使用WSDL.exe命令行工具。
    2.
使用VS.NET中的Add Web Reference菜单选项

 26.简述 private protected public internal 修饰符的访问权限。
答:

private :   私有成员在类的内部才可以访问。 
     protected : 
保护成员,该类内部和继承类中可以访问。 
     public :    
公共成员,完全公开,没有访问限制。 
     internal:   
在同一命名空间内可以访问。

27.
列举ASP.NET 页面之间传递值的几种方式。 

1.使用QueryString,  ....?id=1; response. Redirect().... 
    2.
使用Session变量 
    3.
使用Server.Transfer
28. 
一列数的规则如下: 112358132134......  求第30位数是多少, 用递归算法实现。
答:

public class MainClass 
    { 
        public static void Main()   
        { 
            Console.WriteLine(Foo(30)); 
        } 
        public static int Foo(int i) 
        { 
            if (i <= 0) 
                return 0; 
            else if(i > 0 && i <= 2) 
                return 1; 
            else return Foo(i -1) + Foo(i - 2); 
        } 
    } 

   

30.C#中的委托是什么?
       
委托可以把一个方法作为参数代入另一个方法。
委托可以理解为指向一个函数的引用。
是,是一种特殊的委托

31.override
与重载的区别
 
override 
与重载的区别。重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要
Override 
是进行基类中函数的重写。为了适应需要。

32.
如果在一个B/S结构的系统中需要传递变量值,但是又不能使用SessionCookieApplication,您有几种方法进行处理?
 
this.Server.Transfer

33.
请编程遍历页面上所有TextBox控件并给它赋值为string.Empty
答:
      foreach (System.Windows.Forms.Control control in this.Controls)
      {
if (control is System.Windows.Forms.TextBox)
{
    System.Windows.Forms.TextBox tb = (System.Windows.Forms.TextBox)control ;
    tb.Text = String.Empty ;
}
      }

34.
请编程实现一个冒泡排序算法?
答:
        int [] array = new int [*] ;
int temp = 0 ;
for (int i = 0 ; i < array.Length - 1 ; i++)
{
for (int j = i + 1 ; j < array.Length ; j++)
                {
                    if (array[j] < array[i])
                        {
                            temp = array[i] ;
                            array[i] = array[j] ;
                            array[j] = temp ;
                        }
                }
        }

35.
描述一下C#中索引器的实现过程,是否只能根据数字进行索引?
答:不是。可以用任意类型。

36.
求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m
答:
    int Num = this.TextBox1.Text.ToString() ;
     int Sum = 0 ;
     for (int i = 0 ; i < Num + 1 ; i++)
        {
            if((i%2) == 1)
            {
                Sum += i ;
            }
            else
            {
                Sum = Sum  - I ;
            }
        }
    System.Console.WriteLine(Sum.ToString());
    System.Console.ReadLine() ;

37.
.netB/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层?
答:一般为3
        
数据访问层,业务层,表示层。
       
数据访问层对数据库进行增删查改。 
        
业务层一般分为二层,业务表观层实现与表示层的沟通,业务规则层实现用户密码的安全等。
       
表示层为了与用户交互例如用户添加表单。
优点:  分工明确,条理清晰,易于调试,而且具有可扩展性。
缺点:  增加成本。

38.
在下面的例子里
     using System;
     class A
     {
          public A()
           {
                PrintFields();
           }
          public virtual void PrintFields(){}
      }
      class B:A
      {
           int x=1;
           int y;
           public B()
   {
               y=-1;
           }
           public override void PrintFields()
           {
               Console.WriteLine("x={0},y={1}",x,y);
           }
当使用new B()创建B的实例时,产生什么输出?
答:X=1,Y=0;x= 1 y = -1

39.net
中读写数据库需要用到那些类?他们的作用?
答:DataSet:数据存储器。
    DataCommand:
执行语句命令。
    DataAdapter:
数据的集合,用语填充。

40.
.net中,配件的意思是?
答:程序集。(中间语言,源数据,资源,装配清单)

41..net Remoting 
的工作原理是什么?
答:服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。

42.
C#中,string str = null  string str = "" 请尽量使用文字或图象说明其中的区别。 
答:string str = null 是不给他分配内存空间,string str = "" 给它分配长度为空字符串的内存空间。

43.
请详述在dotnet中类(class)与结构(struct)的异同?
答:Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的

44.
根据委托(delegate)的知识,请完成以下用户控件中代码片段的填写: 
namespace test 

public delegate void OnDBOperate(); 
public class UserControlBase : System.Windows.Forms.UserControl 

public event OnDBOperate OnNew; 
privatevoidtoolBar_ButtonClick(objectsender,System.Windows.Forms.ToolBarButtonClickEventArgs e)

if(e.Button.Equals(BtnNew)) 

//
请在以下补齐代码用来调用OnDBOperate委托签名的OnNew事件。


}
答:if( OnNew != null )  
    OnNew( this, e ); 

45.
分析以下代码,完成填空 
string strTmp = "abcdefg
某某某"; 
int i= System.Text.Encoding.Default.GetBytes(strTmp).Length; 
int j= strTmp.Length; 
以上代码执行完后,i= j= 

答:i=13,j=10 

46.SQLSERVER
务器中,给定表 table1 中有两个字段 IDLastUpdateDateID表示更新的事务号, LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号
答:Select ID FROM table1 Where LastUpdateDate = (Select MAX(LastUpdateDate) FROM table1) 

47.
根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?并简要说明理由。
public void test(int i) 

   lock(this) 
 { 
   if (i>10) 
   { 
     i--; 
     test(i); 
   } 
 } 
}
答:不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,那么死锁会发生)

48.
简要谈一下您对微软.NET 构架下remotingwebservice两项技术的理解以及实际中的应用。
答:WS主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传送提高效率。



49.
公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达到以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进行重排视图中的所有行 (排序的方式如DataGrid相似)。根据您的知识,请简要谈一下您的思路
答:根据点击的列头,包该列的ID取出,按照该ID排序后,在给绑定到ListView中。

50.
给定以下XML文件,完成算法流程图。
<FileSystem> 
< DriverC > 
<Dir DirName="MSDOS622"> 
<File FileName =" Command.com" ></File> 
</Dir> 
<File FileName ="MSDOS.SYS" ></File> 
<File FileName =" IO.SYS" ></File> 
</DriverC> 
</FileSystem> 
请画出遍历所有文件名(FileName)的流程图(请使用递归算法)
答:
void FindFile( Directory d )

   FileOrFolders = d.GetFileOrFolders(); 
   foreach( FileOrFolder fof in FileOrFolders )  
   { 
     if( fof is File )  
     You Found a file; 
     else if ( fof is Directory )  
     FindFile( fof ); 
    } 
}

51.
写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的。
答:

1:  select top 10 * from A where id not in (select top 30 id from A) 

2: 

 select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A) 

52.
面向对象的语言具有________性、_________性、________
答:封装、继承、多态。

53.
能用foreach遍历访问的对象需要实现 ________________接口或声明________________方法的类型。
答:IEnumerable  GetEnumerator

54.GC
是什么为什么要有GC?
答:GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一: 
  System.gc()
  Runtime.getRuntime().gc()

55.String s = new String("xyz");
创建了几个String Object?
答:两个对象,一个是"xyx",一个是指向"xyx"的引用对象s

56.启动一个线程是用run()还是start()?
答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。

57.
接口是否可继承接口抽象类是否可实现(implements)接口抽象类是否可继承实体类(concrete class)?
答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。

58.
构造器Constructor是否可被override?
答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading

59.
是否可以继承String?
答:String类是final类故不可以继承。

60.try {}
里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
答:会执行,在return前执行。

61.
两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
答:不对,有相同的hash code

62.swtich
是否能作用在byte上,是否能作用在long上,是否能作用在String?
答:switchexpr1)中,expr1是一个整数表达式。因此传递给 switch  case 语句的参数应该是 int short char 或者 bytelong,string 都不能作用于swtich

63.
当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
答:不能,一个对象的一个synchronized方法只能由一个线程访问。

64.abstract
method是否可同时是static,是否可同时是native,是否可同时是synchronized?
答:都不能。

65.List, Set, Map
是否继承自Collection接口?
答:ListSetMap不是

66.Set
里的元素是不能重复的,那么用什么方法来区分重复与否呢是用==还是equals()? 它们有何区别?
答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。
equals()
==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

67.
数组有没有length()这个方法? String有没有length()这个方法?
答:数组没有length()这个方法,有length的属性。String有有length()这个方法。

68.sleep() 
 wait() 有什么区别?
答:sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)"醒来"的线程具有更高的优先级
(b)
正在运行的线程因为其它原因而阻塞。
wait()
是线程交互时,如果线程对一个同步对象发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。

69.short s1 = 1; s1 = s1 + 1;
有什么错? short s1 = 1; s1 += 1;有什么错?
答:short s1 = 1; s1 = s1 + 1;有错,s1short型,s1+1int,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) short s1 = 1; s1 += 1正确。

70.
谈谈final, finally, finalize的区别。
答:
    final—
修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此     一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中     不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为     final的方法也同样只能使用,不能重载
    finally—
再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会     执行,然后控制就会进入 finally 块(如果有的话)。
    finalize—
方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理     工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的     ,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize()      方法是在垃圾收集器删除对象之前对这个对象调用的。

71.
如何处理几十万条并发数据?
答:用存储过程或事务。取得最大标识的时候同时更新..注意主键不是自增量方式这种方法并发的时候是不会有重复主键的..取得最大标识要有一个存储过程来获取.

72.Session
有什么重大BUG,微软提出了什么方法加以解决?
答:是iis中由于有进程回收机制,系统繁忙的话Session会丢失,可以用Sate   serverSQL   Server数据库的方式存储Session不过这种方式比较慢,而且无法捕获SessionEND事件。

73.
进程和线程的区别?
答:进程是系统进行资源分配和调度的单位;线程是CPU调度和分派的单位,一个进程可以有多个线程,这些线程共享这个进程的资源。

74.
堆和栈的区别?
答:
    
栈:由编译器自动分配、释放。在函数体中定义的变量通常在栈上。
    
堆:一般由程序员分配释放。用newmalloc等分配内存函数分配得到的就是在堆上。

75.
成员变量和成员函数前加static的作用?
答:它们被称为常成员变量和常成员函数,又称为类成员变量和类成员函数。分别用来反映类的状态。比如类成员变量可以用来统计类实例的数量,类成员函数负责这种统计的动作。

76.ASP
NETASP相比,主要有哪些进步?
答:asp解释形,aspx编译型,性能提高,有利于保护源码。

77.
产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。
    int[] intArr=new int[100];
    ArrayList myList=new ArrayList();
    Random rnd=new Random();
    while(myList.Count<100)
        {
              int num=rnd.Next(1,101);
              if(!myList.Contains(num))
              myList.Add(num);
        }
       for(int i=0;i<100;i++)
            intArr[i]=(int)myList[i]; 

 

posted @ 2009-12-06 03:44  老Z  阅读(400)  评论(0编辑  收藏  举报