c#高级程序员面试题(附部分参考答案)

c#高级程序员面试题(附部分参考答案)
c#高级程序员面试题(附部分参考答案)

1.简要说一下.Net的编译过程.

https://www.360docs.net/doc/a69973310.html, 必须首先将代码编译成一个或多个程序集。程序集即文件扩展名为 .dll 的文件。

您可以采用多种不同的语言来编写https://www.360docs.net/doc/a69973310.html, 代码,如Visual Basic、C#、J# 和其他语言。

当在编译代码时,会将代码翻译成一种名为Microsoft 中间语言(MSIL) 的与语言和CPU 无关的表示形式。运行时,MSIL 将运行在 .NET Framework 的上下文中,.NET Framework 会将MSIL 翻译成CPU 特定的指令,以便计算机上的处理器运行应用程序。

MSDN:https://www.360docs.net/doc/a69973310.html,/zh-cn/library/ms178466.aspx

https://www.360docs.net/doc/a69973310.html,与ASP的区别

1.开发语言不同

ASP仅局限于使用non-type脚本语言来开发,用户给WEB页中添加ASP代码的方法与客户端脚本中添加代码的方法相同,导致代码杂乱。

https://www.360docs.net/doc/a69973310.html,允许用户选择并使用功能完善的strongly-type编程语言,也允许使用潜加巨大的.NET Framework。

2.运行机制不同

ASP是解释运行的编程框架,所以执行效率加较低。

https://www.360docs.net/doc/a69973310.html,是编译性的编程框架,运行是服务器上的编译好的公共语言运行时库代码,可以利用早期绑定,实施编译来提高效率。

3.开发方式

ASP把界面设计和程序设计混在一起,维护和重用困难。

https://www.360docs.net/doc/a69973310.html,把界面设计和程序设计以不同的文件分离开,复用性和维护性得到了提高。

https://www.360docs.net/doc/a69973310.html,/question/2854823

3.谈一下https://www.360docs.net/doc/a69973310.html,页面生命周期

https://www.360docs.net/doc/a69973310.html, 页运行时,此页将经历一个生命周期,在生命周期中将执行一系列处理步骤。这些步骤包括初始化、实例化控件、还原和维护状态、运行事件处理程序代码以及进行呈现。了解页生命周期非常重要,因为这样做您就能在生命周期的合适阶段编写代码,以达到预期效果。此外,如果您要开发自定义控件,就必须熟悉页生命周期,以便正确进行控件初始化,使用视图状态数据填充控件属性以及运行任何控件行为代码。(控件的生命周期基于页的生命周期,但是页引发的控件事件比单独的https://www.360docs.net/doc/a69973310.html, 页中可用的事件多。)

https://www.360docs.net/doc/a69973310.html,/zh-cn/library/ms178472(VS.80).aspx

https://www.360docs.net/doc/a69973310.html,程序的运行机制。可以从一个页面的请求到返回的角度谈

https://www.360docs.net/doc/a69973310.html, 页运行时,此页将经历一个生命周期,在生命周期中将执行一系列处理步骤。这些步骤包括初始化、实例化控件、还原和维护状态、运行事件处理程序代码以及进行呈现。

了解页生命周期非常重要,因为这样做您就能在生命周期的合适阶段编写代码,以达到预期效果。

MSDN:https://www.360docs.net/doc/a69973310.html,/zh-CN/library/ms178472.aspx

博客园:https://www.360docs.net/doc/a69973310.html,/dy0768/archive/2009/02/12/1388937.html 5.Javascript中类库的制作和调用方法

创建外部JS文件,在JS文件中可以创建多个对象或类。一个JS文件可以看成是一个类库。

首先引用该JS类库,再实例化类库中的对象即可实现调用。

6.AJAX原理及你所知道和使用过的版本

简单的讲就是客户端通过javascript脚本获取服务器端的文本,通过解析返回值,更新部分的网页内容。

https://www.360docs.net/doc/a69973310.html,中AJAX版本:

?https://www.360docs.net/doc/a69973310.html, 2.0 AJAX Extensions 1.0

?https://www.360docs.net/doc/a69973310.html, AJAX 3.5

?Microsoft AJAX Library 3.5 SP1

?https://www.360docs.net/doc/a69973310.html, AJAX 4.0 Preview 3

7.WebService使用的协议及简述工作流程

封装必须是SOAP(Simple Object Access Protocol简单对象存取)协议

封装后的消息你可以通过各种已有的协议来传输,比如http,https,tcp/ip,smtp等

step 1:加入web 应用,将刚才发布的web服务加入,这时生成了上述web服务在本地的一个代理,我们假设为WebProxy。

step 2:客户端调用之前首先实例化一个该代理的对象,然后调用发布的方法

step 3:客户端将调用信息包括方法名和参数加入到soap消息中通过http传送给web service服务端

step 4:服务端从soap消息中获得调用信息,然后执行方法,将返回结果加入到soap 消息中然后通过http传回

step 5:客户端代理得到这个soap消息后解析处结果返回给调用客户端方法

8.谈一下WebService的安全性及相关技术

1.接收到来自网络的SOAP 请求。它是否包含身份验证凭证取决于所使用的身份验证类

型。

2.IIS 可以有选择地使用基本、摘要、集成(NTLM 或Kerberos)或证书身份验证对调用

者进行身份验证。在不能使用IIS (Windows) 身份验证的异类环境中,可以将IIS 配置为使用匿名身份验证。在这个方案中,可以使用消息级属性(例如,在SOAP 标头中传递的票证)对客户端进行身份验证。

3.IIS 也可以配置为只接受来自特定IP 地址的客户端计算机的请求。

4.IIS 将已验证的调用者的Windows 访问令牌传递给https://www.360docs.net/doc/a69973310.html, (如果将Web 服务配置

为使用匿名身份验证,则它可能是匿名Internet 用户的访问令牌)。

https://www.360docs.net/doc/a69973310.html, 对该调用者进行身份验证。如果将https://www.360docs.net/doc/a69973310.html, 配置为使用Windows 身份验证,

则此时不会进行任何其他的身份验证;IIS 对调用者进行身份验证。

如果使用的是非Windows 身份验证方法,则将https://www.360docs.net/doc/a69973310.html, 身份验证模式设置为“无”以使用自定义身份验证。

注Web 服务目前不支持表单和Passport 身份验证。

https://www.360docs.net/doc/a69973310.html, 通过使用URL 授权和文件授权来授权访问所请求的Web 服务(.asmx 文

件),文件授权使用与 .asmx 文件关联的NTFS 权限来确定是否将访问权限授予已验证身份的调用者。

注只能将文件授权用于Windows 身份验证。

对于细分的授权,还可以使用 .NET 角色(以声明方式或编程方式)确保授权调用者访问所请求的Web 方法。

7.Web 服务中的代码可以使用特定标识来访问本地和/或远程资源。在默认情况下,

https://www.360docs.net/doc/a69973310.html, Web 服务不执行任何模拟,因此,配置的https://www.360docs.net/doc/a69973310.html, 进程帐户提供该标识。也可以选择原调用者的标识或已配置的服务标识。

强悍的技术参考文章:https://www.360docs.net/doc/a69973310.html,/aivdesign/articles/1258795.html

https://www.360docs.net/doc/a69973310.html,/richardtsuis/articles/803766.html

https://www.360docs.net/doc/a69973310.html,/zh-cn/library/aa302390.aspx 9.事务操作的原理及同库事务及跨库事务的思路

首先题目问的有点模糊,事务有很多种。不知道出题者是要问具体的那种事务。此答案暂以NET中的事务处理作答!

事务处理协议分成两个阶段(准备阶段和提交阶段)

应用程序选择控制代理,即commit agent.

commit agent可以是参与的资源管理器之一,例如com+或者其他的资源管理器

下面是执行的步骤

1。评估每一个资源管理器的条件,以com+为例

2。启动每一个管理器将会处理的方法

3。确认方法已经启动

4。应用程序检察确保所有的管理器都成功的完成了他们的功能。

5。确认没有错误

6。把条件报告给com+

7.确认可以开始提交

8。发送提交,修改所有的数据

如果任何参与的资源管理器提交失败,应用程序必须在所有的资源管理器中中止事务处理

跨库事务处理思路:

首先进行本地的数据库提交,

如果本地失败,那直接进行回滚,

如果本地成功,则进行远程提交,捕获远程提交的结果,

如果抛出远程异常(remoteExcepiton),则进行回滚

如果成功,则进行提交.

9.简述你的一个项目,主要的流程及部署

可行性分析->招投标->需求分析->概要设计->详细设计->代码编写和单元测试->集成测试->部署试运行->验收->后期升级维护。

10.谈一下你对SOA的理解及熟习的SOA架构

SOA--Service-Oriented Architecture。

SOA 是一种IT 体系结构样式,支持将您的业务作为链接服务或可重复业务任务进行集成,可在需要时通过网络访问这些服务和任务。这个网络可能完全包含在您的公司总部内,也可能分散于各地且采用不同的技术,通过对来自纽约、伦敦和香港的服务进行组合,可让最终用户感觉似乎这些服务就安装在本地桌面上一样。

SOA优点:

﹡更高的业务和IT 一致性

﹡基于组件的系统

﹡松散耦合的组件和系统

﹡基于网络的基础设施,允许分散于各地且采用不同技术的资源协同工作

﹡动态构建的按需应用程序

﹡更高的代码重用率

﹡更好地标准化整个企业内的流程

﹡更易于集中企业控制

SOA主要特点:

●松耦合

服务请求方与服务之间应该是松耦合的。它们之间不是绝对相互依赖的关系,它们可能各自有自己的独立功能,有需要的时候一方向另一方请求服务以完成某项功能,但是如果访问不到该服务,也不会影响到请求方的其它功能的正常运作。这样降低了双方的耦合性,也就降低了系统间的相互间的不良影响的扩散,提高了整体的可靠性。

●明确定义的接口

服务交互必须是明确定义的。Web 服务描述语言(Web services Description Language,WSDL)是受到广泛支持的方法,用于描述服务请求者所要求的绑定到服务提供者的细节。服务描述的重点在于与下面几部分交互所用的操作:

服务

调用操作的消息

构造这种消息的细节

关于向何处发送用于构造这种消息的处理细节的消息的信息

WSDL 不包括服务实现的任何技术细节。服务请求者不知道也不关心服务究竟是由 Java 代码、C#、COBOL,还是由某种其他的程序设计语言编写的。WSDL 的通用定义允许开发工具创建各种各样类型的交互的通过接口,同时隐藏它是如何由应用程序代码调用服务的细节。

●无状态的服务设计

服务应该是独立的、自包含的请求,在实现时它不需要从一个请求到另一个请求的信息或状态。服务不应该依赖于其他服务的上下文和状态。

如果需要服务端保存每次客户端请求的状态,将会大大加大复杂性,也有悖松耦合的理念。实际中往往有需要在客户端多次访问服务端时保持状态,这时最好的处理方法是由客户端记住状态,下次请求服务时把状态发送到服务端,服务端在任何时候接收到请求都当作一个新的请求进行处理。

服务粒度

推荐使用粗粒度的接口,一般是把具有比较完整的功能包装成服务对外提供,这样可以体现服务的意义,才能称得上是服务。如果对外提供的服务粒度很细,每个服务提供一个简单的数据返回,要完成一个完整的功能,可能需要客户调用多次服务才能完成,这样的服务不但使用繁琐,也会增加不必要的网络通讯压力,这样的服务适合做内部的接口,不适合做对外的服务。

主流SOA架构:

微软:biztalk

IBM:WebSphere MQ以及WebSphere Business Integration Message Broker。

SAP:mySAP、SAP Business All-in-one、SAP Business one

ORACLE:Oracle SOA Suite

WebMethods:webMethods Integration Platform

BEA:AquaLogic(在2008年1月16日,以85亿美元被Oracle公司收购)

参考:https://www.360docs.net/doc/a69973310.html,/blog/405754

11.谈一下你对SaaS的理解

SaaS是Software-as-a-service(软件即服务)的简称,是随着互联网技术的发展和应用软件的成熟,而在21世纪开始兴起的一种完全创新的软件应用模式。它与“on-demand software”

(按需软件),the application service provider(ASP,应用服务提供商),hosted software(托管软件)所具有相似的含义。它是一种通过Internet提供软件的模式,厂商将应用软件统一部署在自己的服务器上,客户可以根据自己实际需求,通过互联网向厂商定购所需的应用软件服务,按定购的服务多少和时间长短向厂商支付费用,并通过互联网获得厂商提供的服务。

用户不用再购买软件,而改用向提供商租用基于Web的软件,来管理企业经营活动,且无需对软件进行维护,服务提供商会全权管理和维护软件,软件厂商在向客户提供互联网应用的同时,也提供软件的离线操作和本地数据存储,让用户随时随地都可以使用其定购的软件和服务。对于许多小型企业来说,SaaS是采用先进技术的最好途径,它消除了企业购买、构建和维护基础设施和应用程序的需要。

在这种模式下,客户不再象传统模式那样花费大量投资用于硬件、软件、人员,而只需要支出一定的租赁服务费用,通过互联网便可以享受到相应的硬件、软件和维护服务,享有软件使用权和不断升级,这是网络应用最具效益的营运模式。

参考:https://www.360docs.net/doc/a69973310.html,/a/20090709/1537.html

13.你是否在https://www.360docs.net/doc/a69973310.html,之外还会JAVA、PHP?

14.如果让你设计一个登录模块,你会怎么考虑和制作?

15.如果让你制作日志模块,你会怎么考虑和制作?

16.如果让你制作用户权限模块,你会怎么考虑和制作?

17.如果让你做文件上传模块,你会怎么考虑和制作?如果文件大于1G你会怎么考虑设计?

1.分割成多个块,压缩,上传,然后再合并

2.多线程上传

3.AJAX上传(问题多,慎用)

https://www.360docs.net/doc/a69973310.html,/JeffreyZhao/archive/2008/02/12/aspnet_upload.html https://www.360docs.net/doc/a69973310.html,/bashan/archive/2008/05/14/1196054.html

https://www.360docs.net/doc/a69973310.html,/art/201002/183218_1.htm

18.是否了解及使用过WCF、WF、WPF?

19.Web页面的打印及报表的输出思路?

20.报表的制作思路?

21.谈一下你对.Net中垃圾回收的理解?

博客园:https://www.360docs.net/doc/a69973310.html,/page/106720/

22.ADO和https://www.360docs.net/doc/a69973310.html,的区别?

ADO和https://www.360docs.net/doc/a69973310.html,的区别:

ADO使用OLE DB接口并基于微软的COM技术

而https://www.360docs.net/doc/a69973310.html,拥有自己的https://www.360docs.net/doc/a69973310.html,接口并且基于微软的.NET体系架构。

ADO以Recordset存储,而https://www.360docs.net/doc/a69973310.html,则以DataSet表示。

Recordset看起来更像单表,如果让Recordset以多表的方式表示就必须在SQL中进行多表连接。

反之,DataSet可以是多个表的集合。ADO 的运作是一种在线方式,这意味着不论是浏览或更新数据都必须是实时的。

https://www.360docs.net/doc/a69973310.html,则使用离线方式,在访问数据的时候https://www.360docs.net/doc/a69973310.html,会利用XML制作数据的一份幅本https://www.360docs.net/doc/a69973310.html,的数据库连接也只有在这段时间需要在线。

由于ADO使用COM技术,这就要求所使用的数据类型必须符合COM规范

而https://www.360docs.net/doc/a69973310.html,基于XML格式,数据类型更为丰富并且不需要再做COM编排导致的数据类型转换,从而提高了整体性能。

https://www.360docs.net/doc/a69973310.html,为.NET构架提供了优化的数据访问模型,和基于COM的ADO是完全两样的数据访问方式。

https://www.360docs.net/doc/a69973310.html,与ado存在着比较大的差异:

1.https://www.360docs.net/doc/a69973310.html,遵循更通用的原则,不那么专门面向数据库。

https://www.360docs.net/doc/a69973310.html,集合了所有允许数据处理的类。这些类表示具有典型数据库功能(如索引,排序和视图)的数据容器对象。

尽管https://www.360docs.net/doc/a69973310.html,是.net数据库应用程序的权威解决方案

但从总体设计上看,它不像ado数据模型那样以数据库为中心,这是https://www.360docs.net/doc/a69973310.html,的一大特点。2.目前,https://www.360docs.net/doc/a69973310.html,提供了两种数据库访问类库:一种用于sql server 7.0 或更高版本

另一种用于其他所有您可能已经安装的ole db提供程序。

在这两种情况下,您分别使用不同的类,但遵循相似的命名规则。

除前缀,名称都是相同的。前一种情况前缀为sql,后一种情况则是oledb。

同时,.net框架还提供了odbc .net的数据访问模式。

odbc .net data provider是 .net 框架的增强组件,它可以访问原始的odbc 驱动程序

就像ole db .net data provider 可以访问原始的ole db providers 一样。

目前它仅在下列驱动程序中测试过:

microsoft sql odbc driver,microsoft odbc driver for oracle,microsoft jet odbc driver。3.https://www.360docs.net/doc/a69973310.html,提供了两个队形来处理从数据源中抽取数据,它们是dataset和datareader对象。前者是记录在内存中的缓存,您可以从任何方向随意访问和修改。

后者是高度优化的对象,专为以仅向前方式滚动只读记录而设计。

4.https://www.360docs.net/doc/a69973310.html,统一了数据容器类编程接口,无论您打算编写何种应用程序,windows窗体,web 窗体还是web服务

都可以通过同一组类来处理数据。

不管在后端的数据源数sql server数据库,ole db,xml文件还是一个数组

您都可以通过相同的方法和属性来滚动和处理它们的内容。

5.在ado中,xml只不过是输入和输出格式。

然而在https://www.360docs.net/doc/a69973310.html,中,xml是一种数据格式,提供了操作,组织,共享和传递数据的手段。

ADO。NET相对于ADO等主要有什么改进?

1:https://www.360docs.net/doc/a69973310.html,不依赖于ole db提供程序,而是使用.net托管提供的程序,

2:不使用com

3:不在支持动态游标和服务器端游

4:,可以断开connection而保留当前数据集可用

5:强类型转换

6:xml支持

23.托管程序与非托管程序的区别

一般一个可执行文件的内部都包含一个PE头,系统根据PE的信息找到入口函数,在通过执行入口函数中的代码来执行可执行程序。托管程序的文件中相对于非托管程序还包含了一个CLR表头文件以及其他CLR需要的信息。

(1)非托管程序的执行过程

在非托管程序中,可执行里面保存的是机器代码,CPU可以直接加载并执行,当系统加载了可执行程序后,系统就将可执行文件的段基址加上偏移地址形成实际的物理地址,并直接加载到内存中运行。

(2)托管程序的执行过程

托管程序的可执行文件中,包含的是中间语言以及元数据,当然不能直接运行,必须启动CLR,由CLR对中间语言进行即时编译成机器代码,并加载到内存里面执行(具体过程:

程序在进入入口函数前会提前跳转到MSCoree.dll中,调用它的代码来启动CLR并完成一些初始化工作)。当然,IL中的方法并不是每次被调用都会被编译一次,而是它只有在第一次调用时才进行编译,即时编译器会将方法名称以及对应的入口地址存放在映射表中,当下次调用该方法时,会直接从映射表里去而不是再编译一次。

24.readonly 关键字与const 关键字

1. const 字段只能在该字段的声明中初始化。

readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。

2. const 字段是编译时常数,而readonly 字段可用于运行时常数。

3. const 默认就是静态的,而readonly 如果设置成静态的就必须显示声明。

4.const 对于引用类型的常数,可能的值只能是string 和null。

readonly可以是任何类型

25.反射和序列化

反射:程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性

序列化:序列化是将对象转换为容易传输的格式的过程。例如,可以序列化一个对象,然后使用HTTP 通过Internet 在客户端和服务器之间传输该对象。在另一端,反序列化将从该流重新构造对象。

26. ArrayList 类和Array类的区别

1Array位于system命名空间中,而ArrayList位于system.collections命名空间中。

2Array的容量是固定的,而ArrayList的容量是根据需要自动扩展的。如果更改了

arraylist.capacity属性的值,则自动进行内存重新分配额元素复制。

3ArrayList提供添加,插入或移除某一范围元素的方法。在Array中,只能一次获取或设置一个元素的值。

4使用Synchronized方法可以很容易地创建arraylist的同步版本。而array将一直保持它直到用户实现同步为止。

5ArrayList提供将只读和固定大小包装返回到集合的方法,而array不提供。

6另一方面,array提供arraylist所不具有的某些灵活性。

7可以设置array的下限,但arraylist的下限始终为零。

8array可以具有多个维度,而arraylist始终只是一维的

9特定类型的array具有比arraylist更好的性能,则是因为arraylist的元素属于object类型,所以在存储或检索值类型时通常发生装箱和取消装箱

相关主题
相关文档
最新文档