C#(转)
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 中,您通过数据适配器(OleDbDataAdapter 、SqlDataAdapter 、OdbcDataAdapter 或 OracleDataAdapter 对象)与数据库通信,这将调用 OLE DB 提供程序或基础数据源提供的 API 。ADO 和 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. 什 么叫应用程序域?什么是受管制的代码?什么是强类型和强类型系统?什么是装箱和拆箱?什么是重载?CTS 、CLS 和CLR 分别作何解释?
答:
(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 )重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不 同)。
(6 )CLR 的全称是公共语言运行库(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 中 读写数据库需要用到哪些类?他们的作用
答:
(1 )DataSet 用来无连接的储存多个表的数据,并包含表与表之间的关联关 系
(2 )DataTable 用来存储一个表的数据
(3 )SqlConnection 用来创建一个到数据库的连接
(4 )SqlCommand 用 来执行SQL 语句
(5 )SqlDataReader 用 来顺序读取数据
(6 )SqlDataAdapter 用来将数据填充到DataSet 或DataTable
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. 解 释一下UDDI 、WSDL 的意义及其作用。
答:
UDDI
统一描述、发现和集成协议(UDDI , Universal Description, Discovery and Integration) 是一套基于Web 的、分布式的、为Web 服务提供的信息注册中心的实现标准规范,同时也包含一组使企业能将自 身提供的Web 服务注册以使得别的企业能够发现的访问协议的实 现标准。UDDI 提供了一组基于标准的规范用于描述和发现服务,还提供了一组基于因特网的实现。
WSDL
WSDL 描 述Web 服务的公共接口。这是一个基于XML 的关于如何与Web 服务通讯和使用的服务描述;
22. 什 么是SOAP, 有哪些应用。
答:
SOAP (Simple Object Access Protocol )简单对 象访问协议是在分散或分布式的环境中交换信息并执行远程过程调用的协议,是一个基于XML 的协议。使用SOAP , 不用考虑任何特定的传输协议(最常用的还是HTTP 协议),可 以允许任何类型的对象或代码,在任何平台上,以任何一直语言相互通信。这种相互通信采用的是XML 格式的消息
SOAP 是一种轻量级协议,用于在分散型、分布式环境中交换结构化信息。 SOAP 利用 XML 技 术定义一种可扩展的消息处理框架,它提供了一种可通过多种底层协议进行交换的消息结构。 这种框架的设计思想是要独立于任何一种特定的编程模型和其他特定实现的语 义。
23. 如 何部署一个ASP.net 页面。
答:
VS 2005 和VS 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. 一列数的规则如下: 1 、1 、2 、3 、5 、8 、13 、21 、34...... 求 第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 结 构的系统中需要传递变量值,但是又不能使用Session 、Cookie 、Application ,您有几种方法进行处理?
答 :
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. 用.net 做B/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 (疑问咨询QQ 1163551688)
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 中 有两个字段 ID 、LastUpdateDate ,ID 表示更新的事务号, 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 ,那么死锁会发生) (疑问咨询QQ 1163551688)
48. 简 要谈一下您对微软.NET 构 架下remoting 和webservice 两项技术的理解以及实际中的应用。
答: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 上?
答:switch (expr1 )中,expr1 是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int 、 short 、 char 或 者 byte。long,string 都不能作用于swtich 。
63. 当一个线程进入一个对象的一个synchronized 方 法后,其它线程是否可进入此对象的其它方法?
答: 不能,一个对象的一个synchronized 方法只能由一个 线程访问。
64.abstract 的method 是否可同时是static, 是否可同时是native ,是否可同时是synchronized?
答:都不能。
65.List, Set, Map 是 否继承自Collection 接 口?
答:List ,Set 是Map 不是
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() 是线程交互时,如果线程对一个同步对象x 发出一个wait() 调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。
69.short s1 = 1; s1 = s1 + 1; 有 什么错? short s1 = 1; s1 += 1; 有 什么错?
答:short s1 = 1; s1 = s1 + 1; 有错,s1 是short 型,s1+1 是int 型, 不能显式转化为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 块(如果有的话)。(疑问咨询QQ 1163551688)
finalize— 方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必 要的清理 工作。这个方法是由垃圾收集器在确定这个对 象没有被引用时对这个对象调用的。它是在 Object 类中 定义的 ,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个 对象调用的。
71. 如何处理几十万条并发数据?
答:用存储过程或事务。取得最大标识的时候同时更新.. 注意主键不是自增量方式这种方法并发的时候是不会有重复主键的.. 取得最大标识要有一个存储过程来获取.
72.Session 有 什么重大BUG , 微软提出了什么方法加以解决?
答:是iis 中由于有进程回收机制,系统繁忙的话Session 会丢失,可以用Sate server 或SQL Server 数据库的方式存储Session 不过这种方式比较慢,而且无法捕获Session 的END 事件。
73. 进程和线程的区别?
答:进程是系统进行资源分配和调度的单位;线程是CPU 调度和分派的单位,一个进程可以有多个线程,这些线程共享这个进程的 资源。
74. 堆 和栈的区别?
答:
栈:由编译器自动分配、释放。在函数体中定义的变量通常 在栈上。
堆:一般由程序员分配释放。用new 、malloc 等分配内存函数分配得到的就是在堆上。
75. 成员变量和成员函数前加static 的作 用?
答:它们被称为常成员变量和常成员 函数,又称为类成员变量和类成员函数。分别用来反映类的状态。比如类成员变量可以用来统计类实例的数量,类成员函数负责这种统计的动作。
76.ASP 。NET 与ASP 相比,主要有哪些进步?
答: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];