NET初中高级开发人员面试题.docx

上传人:b****5 文档编号:30702759 上传时间:2023-08-19 格式:DOCX 页数:16 大小:27.66KB
下载 相关 举报
NET初中高级开发人员面试题.docx_第1页
第1页 / 共16页
NET初中高级开发人员面试题.docx_第2页
第2页 / 共16页
NET初中高级开发人员面试题.docx_第3页
第3页 / 共16页
NET初中高级开发人员面试题.docx_第4页
第4页 / 共16页
NET初中高级开发人员面试题.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

NET初中高级开发人员面试题.docx

《NET初中高级开发人员面试题.docx》由会员分享,可在线阅读,更多相关《NET初中高级开发人员面试题.docx(16页珍藏版)》请在冰豆网上搜索。

NET初中高级开发人员面试题.docx

NET初中高级开发人员面试题

初级.NET开发人员- 任何使用.NET的人都应知道的

1.描述线程与进程的区别?

进程是系统所有资源分配时候的一个基本单位,拥有一个完整的虚拟空间地址,并不依赖线程而独立存在。

进程可以定义程序的一个实例,但它只是占据应用程序所使用的地址空间。

为了让进程完成一定的工作,进程必须至少占有一个线程,这个线程即为主线程,默认程序的工作都在这个主线程中完成,可以通过程序创建多个线程,使多个线程可以同时运行(多CPU支持下),这就是多线程技术。

线程(Thread)与进程(Process)二者都定义了某种边界,不同的是进程定义的是应用程序与应用程序之间的边界,不同的进程之间不能共享代码和数据空间,而线程定义的是代码执行堆栈和执行上下文的边界。

同一进程中的不同线程共享代码和数据空间。

2.什么是Windows服务,它的生命周期与标准的EXE程序有什么不同?

Windows服务是运行在windows后台指定用户下(默认System)的应用程序,它没有标准的UI界面,相比标准的EXE程序,Windows服务是在服务开始的时候创建,而在服务结束的时候销毁,而且可以设置服务是否与操作系统一起启动,一起关闭。

它支持三种方式:

1)自动方式2)手动方式3)禁用。

自动方式下,Windows服务控制器将指导OS启动后自动启动服务并运行,而手动方式则必须手工启动服务,禁用的情况下服务将不能被启动。

另外标准的EXE默认使用的当前登录的用户,而Windows服务则默认使用System用户,这在对系统资源访问的时候特别需要注意。

3.Windows上的单个进程所能访问的最大存量是多少?

它与系统的最大虚拟存一样吗?

这对于系统设计有什么影响?

这个需要针对硬件平台,公式为单个进程能访问的最大存量=2的处理器位数次方/2,比如通常情况下,32位处理器下,单个进程所能访问的最大存量为:

232/2=2G。

单个进程能访问的最大存量是最大虚拟存的1/2,因为要分配给操作系统一半虚拟存。

4.EXE和DLL之间的区间是什么?

EXE文件有一个入口点,比如说Main()函数,这样CLR可以由此处执行这个EXE文件,而DLL不包含这样一个入口点所以不是可执行的。

DLL文件主要包含一些程序集供其它函数调用。

5.什么是强类型,什么是弱类型?

哪种更好些?

为什么?

强类型是在编译的时候就确定类型的数据,在执行时类型不能更改,而弱类型在执行的时候才会确定类型。

没有好不好,二者各有好处,强类型安全,因为它事先已经确定好了,而且效率高。

一般用于编译型编程语言,如C#、Java与C++等,弱类型相比而言不安全,在运行的时候容易出现错误,但它灵活,多用于解释型编程语言,如Javascript,VB等。

6.PID是什么?

在做系统的故障排除时如何使用它?

PID是进程编号,在系统发现故障的时候,可以根据它寻找故障所发生的具体进程。

可通过VisualStudio将故障进程附加到进程中进行调试。

7.单个TCP/IP端口上能够被多少个进程侦听?

1个

8.什么是GAC?

它解决了什么问题?

GAC是GlobalAssemblyCache,全局程序集缓存的简称。

它解决了几个程序共享某一个程序集的问题。

不必再将那个被共享的程序集拷贝到应用程序目录了,.NET应用程序在加载的时候,会首先查看全局应用程序集缓存,如果有就可以直接使用,没有再到应用程序目录进行查找。

GAC还有一个很重要的作用,所有被放入GAC的程序集都是强名程序集,这样可以保证相同文件名不同版本的程序集被正确的引用,这样解决了COM时代的DLL地狱问题。

同时强名还可以防止程序集伪造。

中级.NET开发人员

1.阐述面向接口、面向对象、面向方面编程的区别

面向接口更关注的是概念,它的原则是先定义好行为规,再根据行为规创建实现,严格的来说,面向接口应该是面向对象中的一部分,因为面向对象也强调的是本末倒置原则,也就是实现依赖于抽象,而抽象不依赖于具体实现。

面向对象是对复杂问题的分解。

面向方面的编程是一种新概念,它解决了很多面向对象无法解决的问题,比如面向对象技术只能对业务相关的代码模块化,而无法对和业务无关的代码模块化。

而面向方面正是解决这一问题的方案,它的关键思想是“将应用程序中的商业逻辑与对其提供支持的通用服务进行分离”。

2.什么是Interface?

它与AbstractClass有什么区别?

接口(Interface)是用来定义行为规的,不会有具体实现,而抽象类除定义行为规外,可以有部分实现,但一个类能实现多个接口,但只能继承一个父类。

Interface可以理解为是一种契约。

3.什么是反射?

程序集包含模块,而模块又包括类型,类型下有成员(这些信息存于元数据中),反射就是在运行时管理程序集,模块,类型的对象,它能够动态的创建类型的实例,设置现有对象的类型或者获取现有对象的类型,能调用类型的方法和访问类型的字段属性。

它是在运行时创建和使用类型实例。

反射功能的类主要在Sytem.Type命名空间下,使用这些类可以在运行时创建类型实例,然后调用其中方法或访问其成员对象。

4.使用ASMX的XMLWeb服务与使用SOAP的.NETRemoting的区别?

Web服务使用的SOAP协议,而Remoting采用的RPC。

WebService能用于不同平台,不同语言,Remoting只适用于.NET应用程序之间的通信。

效率上.NETRemoting高于WebService。

一般情况下WebService主要应用于互联网,.NETRemoting主要应用于局域网。

5.类型系统是由XMLSchema表示的吗?

CLS是XMLSchema表示的吗?

XmlSchema是一个特定的XML文档必须满足的一套标准。

这些标准能够描述不同的数据类型。

如xs:

decimal是一种XmlSchema数据类型,其他类型有像xs:

Boolean,xs:

Date,xs:

int等等。

CLS是公共语言规(CommonLanguageSpecification),它是任何.NET下语言(C#,VB.NET等)使用的一套数据类型。

如System.Double是一种CLS数据类型。

其他的包括System.Int32,System.Boolean等。

CLS与XMLSchema表述的相同的意思,但其在不同。

6.从概念上阐述前期绑定(early-binding)和后期绑定(late-binding)的区别?

这个就像是强弱类型的比较相似,前期绑定是在编译的时候就确定了要绑定的数据,而后期绑定是在运行的时候才填充数据。

所以前期绑定如果失败,会在编译时报编译错误,而后期绑定失败只有在运行时的时候才发生。

7.调用Assembly.Load算静态引用还是动态引用?

这种反射操作基本都是动态,即运行时引用。

8.何时使用Assembly.LoadFrom?

何时使用Assembly.LoadFile?

相比LoadFile,用LoadFrom加载程序集时,要求同时将此程序集所依赖的程序集加载进来。

而LoadFile加载程序集文件时,只将传入参数的文件加载,不考虑程序集依赖,但如果有相同实现,但位置不同的文件用LoadFrom是不能同时加载进来的,而LoadFile却可以。

由于LoadFile加载的是文件,所以调用它之后,可能因为缺少必要的依赖造成无法被执行。

9.什么叫AssemblyQualifiedName?

它是一个文件名吗?

它有什么不同?

它不是一个文件名,相比文件名,AssemblyQualifiedName(程序集限定名称),更能确定一个程序集,它包含文件名,但同时包含版本,公钥,和区域。

因为同样一个名称的文件可能有不同的版本和区域,此时单独靠文件名称,可能会造成不能确定程序集的正确性。

10.Assembly.Load("foo.dll");这句话是否正确?

错误,正确的应该是Assembly.Load("foo")或者Assembly.LoadFrom("foo.dll")

11.做强签名的assembly与不做强签名的assembly有什么不同?

强签名程序集可以安装到GAC中,而不做强签名的确不能。

强名程序集可以根据强名来区分相同文件名不同版本的程序集。

12.DateTime是否可以为null?

不能,因为DateTime为Struct类型,而结构属于值类型,值类型不能为null,只有引用类型才能被赋值null

13.什么叫JIT?

什么是NGEN?

它们分别有什么限制和好处?

JustInTime及时编译,它是在程序第一次运行的时候才进行编译,而NGEN是所谓的pre-jit,就是说在运行前事先就将程序集生成为本机镜像,并保存到全局缓存中,运用NGEN可以提高程序集的加载和执行速度,因为它可以从本机映像中还原代码和数据结构,而不必像JIT那样动态生成它们。

但是NGEN不能得到JIT编译时优化(如根据处理器)的好处,这是其有缺陷的一方面。

14..NETCLR中一代的垃圾收集器是如何管理对象的生命周期的?

什么叫非确定性终结?

垃圾收集执行的时机不定的,这个过程对于程序员是透明的,垃圾收集器自动控制着它。

垃圾收集器的执行原理:

周期性地遍历被应用当前引用的所有对象的列表。

在这个搜索过程中,凡是没有发现的被引用的对象,都将准备予以销毁(标记为0代)。

说明了对象在什么时候终结是不确定的,我认为这就是非确定性终结。

通常来说,堆的耗尽是收集清扫的触发条件。

15.Finalize()和Dispose()之间的区别?

Finalize()相当于析构函数,我们不能手动调用这个函数(但可以通过GC.SupperFinalize方法阻止CLR调用Finalize),CLR自动判断什么时候调用这个函数。

Dispose()同样用于释放托管资源,但是我们可以在任意时刻自行调用Dispose()方法。

总结就是Finalize自动释放资源,Dispose()用于手动释放资源。

16.using()语法有用吗?

什么是IDisposable?

它是如何实现确定性终结的。

有用。

using编译后的MSIL会调用该对象的Dispose方法,释放资源。

实现了IDisposable的类相当与一个契约,即说明这个类要实现Dispose()方法告诉CLR怎么释放它自身。

因为Dispose()方法释放的非托管资源,所以可以手工调用它来确定性终结一个非托管资源。

(托管资源都是非确定性终结,由CLR管理,没法改变)

17.tasklist/m"mscor*"这句命令是干嘛的?

列出所有使用了以"mscor"作为开头的dll或者exe的映像名称,PID和模块信息。

18.in-proc和out-of-proc的区别

in-proc是进程,进程能共享代码和数据块,out-of-proc是进程外,进程外的互操作需要用进程间通讯来实现。

19..NET里的哪一项技术能够实现out-of-proc通讯?

.NetRemoting技术或者WCF技术

20.当你在ASP.NET中运行一个组件时,它在WindowsXP,Windows2000,Windows2003上分别跑在哪个进程里面?

XP:

aspnet_Wp.exe、Windows2000:

aspnet_Wp.exe、Windows2003:

w3wp.exe。

XP与2000是IIS5.1,2003是IIS6.0所以有了上述差别。

高级.NET开发人员

1. DateTime.Parse(myString); 这段代码有什么问题?

A:

区域信息即CultureInfo没有指定。

如果不指定的话,它将采用默认的机器级的设置(见:

控制面板->区域和语言选项)并使用这个设置来决定这个字符串即myString怎样被解释。

所以如果你传入“5/2/2005”且你的区域设置为En-US,则它会被解释为May2nd2005,但是如果你的区域设置为Hindi-India,则它会被解释为5thFeb2005!

参考下面的代码示例:

stringsDate="5/2/2005";//本意是2005年5月2号

DateTime[]dt=newDateTime[3];

CultureInfo[]cf=newCultureInfo[3];

cf[0]=newCultureInfo("en-US",true);//指定为en-US,字符串将被解释为“MM/DD/YYYY”

dt[0]=DateTime.Parse(sDate,cf[0],DateTimeStyles.AllowWhiteSpaces);

dt[0]=dt[0].AddMonths

(1);//另日期变为2005年6月2日

Console.WriteLine(dt[0].ToString(cf[0]));

cf[1]=newCultureInfo("hi-IN",true);//这是印度格式,字符串被解释为“DD/MM/YYYY”

dt[1]=DateTime.Parse(sDate,cf[1],DateTimeStyles.AllowWhiteSpaces);

dt[1]=dt[1].AddMonths

(1);//让它变成2005年3月5日

Console.WriteLine(dt[1].ToString(cf[1]));

好了,这解决所有问题了吗?

没有!

如果时间放在一个文本框中–有些人输入了“2005/02/05”–我不知道我应该怎样解释这个输入呢!

“DateTime.ParseExact”要求你必须告诉计算机怎样处理输入的日期字符串它才可以处理。

//抛出FormatException

cf[2]=newCultureInfo("hi-IN",true);

dt[2]=DateTime.ParseExact(sDate,newstring[]{"d"},cf[2],DateTimeStyles.AllowWhiteSpaces);//抛出FormatException

dt[2]=dt[2].AddMonths

(1);

Console.WriteLine(dt[2].ToString(cf[2]));

第二个参数指定了输入字符串的格式–“d”意思是短日期–MM/dd/yyyy–查看.net文档中的DateTimeFormatInfo类中全部的格式。

上面的代码会抛出一个FormatException,因为你没有遵守规则。

好了,现在我们几乎完成了,如果想让一个字符串表达式被接受怎么办呢?

使用一个自定义表达式。

如下:

sDate="2005/05/02";

dt[2]=DateTime.ParseExact(sDate, newstring[]{"%yyyy/MM/dd"},CultureInfo.InvariantCulture,DateTimeStyles.AllowWhiteSpaces);

dt[2]=dt[2].AddMonths

(1);

Console.WriteLine(dt[2].ToString(cf[2]));

这样就可以接受了

2. PDB是什么东西?

在调试时它应该放在哪里?

A:

以下是摘自MSDN一段说明Aprogramdatabasefile(extension.pdb)isabinaryfilethatcontainstypeandsymbolicdebugginginformationgatheredoverthecourseofcompilingandlinkingtheproject.APDBfileiscreatedwhenyoucompileaC/C++programwith/ZIor/ZioraVisualBasic,VisualC#,orJScriptprogramwiththe/debugoption.Objectfilescontainreferencesintothe.pdbfilefordebugginginformation.Formoreinformationonpdbfiles,seePDBFiles(C++).ADIAapplicationcanusethefollowinggeneralstepstoobtaindetailsaboutthevarioussymbols,objects,anddataelementswithinanexecutableimage.

翻译后(部分):

程序数据库文件(扩展名:

pdb)是一个二进制文件包含了在编译和项目过程中收集的类型与符号调试信息。

PDB文件在你使用/ZI或/Zi参数编译一个C/C++程序或使用/debug参数编译一个VisualBasic,VisualC#或Jscript程序时生成。

目标文件含有到.pdb文件的引用以查找调试信息。

下面是查询此文件容的方法:

uAcquireadatasourcebycreatinganIDiaDataSourceinterface.

uCallIDiaDataSource:

:

loadDataFromPdborIDiaDataSource:

:

loadDataForExetoloadthedebugginginformation.

uCallIDiaDataSource:

:

openSessiontoopenanIDiaSessiontogainaccesstothedebugginginformation.

uUsethemethodsinIDiaSessiontoqueryforthesymbolsinthedatasource.

uUsetheIDiaEnum*interfacestoenumerateandscanthroughthesymbolsorotherelementsofdebuginformation.

调试时,PDB文件应该与待调试文件放在同一目录下。

3. 什么是圈复杂度(CyclomaticComplexity)?

为什么它很重要?

A:

圈复杂度一种代码复杂度的衡量标准,中文名称叫做圈复杂度。

在软件测试的概念里,圈复杂度“用来衡量一个模块判定结构的复杂程度,数量上表现为独立现行路径条数,即合理的预防错误所需测试的最少路径条数,圈复杂度大说明程序代码可能质量低且难于测试和维护,根据经验,程序的可能错误和高的圈复杂度有着很大关系”。

4. 写一个标准的lock(),在访问变量的前后创建临界区,要有“双重检查”。

A:

这即是JeffreyRichter在其经典著作CLRViaC#中提到的双检锁(double-checklocking)技巧。

如下是原书代码:

publicsealedclassSingleton

{

privatestaticObjects_lock=newObject();

privatestaticSingletons_value;

//私有构造器组织这个类之外的任何代码创建实例

privateSingleton(){}

//下述共有,静态属性返回单实例对象

publicstaticSingletonValue

{

get

{

//检查是否已被创建

if(s_value==null)

{

//如果没有,则创建

lock(s_lock)

{

//检查有没有另一个进程创建了它

if(s_value==null)

{

//现在可以创建对象了

s_value=newSingleton();

}

}

}

returns_value;

}

}

}

5.什么叫FullTrust?

放入CAC的assembly是否是FullTrust的?

FullTrust权限基本上允许跳过所有的CAS验证,持有该权限的程序集能够访问所有的标准权限。

GAC中的程序集是具有FullTrust权限的。

详细信息参见此文章。

6.代码加上需要安全权限的特性有什么好处?

A:

有可能会通过具有元权限程序集或permview.exe工具访问这些attribute及其参数。

有可能在程序集级别使用其中的一些attribute。

可以通过反射访问设置信息。

最关键一点使程序集开始执行时而不是在执行期间声明需要权限,这样可以确保用户不会在程序开始工作后遇到障碍。

7.gacutil/l|find/i“Corillian”这句命令的作用是什么?

A:

gacutil全称.NETGlobalAssemblyCacheUtility。

参数/l[]的作用:

列出通过筛选出的全局程序集缓存。

find命令作用:

在文件中搜索字符串,其参数/i作用是搜索字符串时忽略大小写。

所以这条命令的意思就是在所有的全局程序缓存中搜索名称包含字符串”Corillian”的程序集。

8.sn-tfoo.dll这句命令的作用?

A:

sn是.NETFramework强名称实用工具,其中参数-T[p]作用是显示的公钥的标记(如果使用了-Tp,则还同时显示公钥本身)。

此命令显示了foo.dll的公钥。

如果foo.dll非强名程序集产生如下提示:

未能将密钥转换为标记--程序集“(null)”的公钥无效。

9.DCOM需要防火墙打开哪些端口?

端口135是干嘛用的?

A:

DCOM动态的选择1024~65535之间的网络端口。

此外,DCOM要用135端口实现一些重要的功能。

DCOM是使用RPC进行通讯的。

利用RPC功能进行通信时,就会向对方电脑的135端口询问可以使用那个端口进行通讯。

这样,对方的电脑就会告知可以使用的端口号,实际的通讯将使用这个端口来进行。

135端口起的是动态的决定实际的RPC通讯使用的端口映射功能,主要用于使用RPC(RemoteProcedureCall,远程过程调用)协议并提供DCOM(分布式组件对象模型)服务。

10.对比OOP和SOA,它们的目的分别是什么?

面向对象主要用于对具体的事物进行抽象建模,而SOA的主要目的是定义部署和管理服务的方式,采用SOA的架构可以提高可重用性,降低总成本,提高快速修改与演化IT系统的能力。

11.XmlSerializer是如何工作的?

使用这个类的进程需要什么ACL权限?

XmlSerializer提供了方法,使你能够将自己的对象序列化和反序列化为XML,同时在这个过程中提供一定的控制。

这个过程由一些attribute来控制。

以下是代码示例:

序列化:

Theatertheater=…;

XmlSerializerxs=newXmlSerializer(typeof(Theater));

FileStreamfs=newFileStream(args[0],FileMode.Create);

xs.Serialize(fs,theater);

反序列化:

XmlSerializ

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1