程序员级别鉴定书(.NET 面试问答集锦)

程序员级别鉴定书(.NET 面试问答集锦)

原创
2014/06/11 12:00
阅读数 724

作为一个.NET 程序员,应该知道的不仅仅是拖拽一个控件到设计时窗口中。就像一个赛车手,一定要了解他的爱车 � 能做什么不能做什么。

本文参考 Scott Hanselman 给出的.NET 问题列表,整理如下。包括 WinForms,ASP.NET,XML 以及 C# 和.NET 基础相关的问题,有兴趣的自我检测一下吧~

参考答案另附在文章末尾,由于水平有限,难免有谬误,欢迎指正。

 

所有号称会写代码的人

  • 进程和线程之间的区别?

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

  • Windows 单进程可寻址的最大内存是多少? 他们如何影响系统应用软件设计?

  • EXE 和 DLL 之间的区别?

  • 强类型和弱类型的区别,以及其优缺点?

  • 什么是 PID, 在解决系统问题时有用吗?

  • 一个 TCP/IP 端口可以被多少个进程分享?

  • 什么是 GAC?使用 GAC 给我们带来哪些好处?

中级.NET 开发者

  • 面向接口、面向对象和面向方面编程的区别

  • 接口和类的区别?

  • 什么是反射?

  • XML web service 跟 .NET Remoting 的不同。

  • early-binding 和 late-binding 的区别是什么?

  • Assembly.Load 是静态引用还是动态引用?

  • Assembly.LoadFrom 和 Assembly.LoadFile,2 者使用的时机有何不同?

  • 什么是 Assembly Qualified Name? 一个文件名吗? 有何不同?

  • 这里问的是强名称概念。Assembly.Load ("foo.dll") 加载程序集的方法是否正确?

  • 强签名的程序集与非强签名的程序集有何不同?

  • DateTime 可以为 null 吗?

  • 什么是 JIT? 什么是 NGEN? 分别的优势和劣势是什么?

  • 如何在.NET CLR 的分代垃圾收集器管理对象的生命周期?什么是不确定性的终结?

  • Finalize () 和 Dispose () 的区别?

  • Using () 模式有用吗? IDisposable 是什么? 它如何支持确定性的终结?

  • tasklist /m "mscor*" 命令行的作用是?

  • in-proc 和 out-of-proc 之间的区别是什么?

  • out-of-proc 是基于什么技术实现的?

  • 当你在 ASP.NET 中运行一个组件时,它在 Windows XP, Windows 2000, Windows 2003 上分别跑在哪个进程里面?

高级开发者及架构师

  • DateTime.Parse (myString) 是否正确?

  • PDBs 是什么? 什么场景下为了调试需要加载它?

  • 什么是圈复杂度,以及为什么它很重要?

  • 写一个标准的 lock () 编码方法,以及 “双重检查” 代码

  • 什么是 FullTrust? GAC 下的程序集拥有 FullTrust 吗?

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

  • gacutil /l | find /i "Corillian" 作用是?

  • 这行命令的功能 sn -t foo.dll

  • DCOM 穿过防火墙,哪些端口需要打开?135 端口的目的是什么?

  • 对比 OOP 和 SOA。各有什么原则?

  • XmlSerializer 工作原理是什么?当进程使用它时需要什么 ACL 权限?

  • 为何 catch (Exception) 的使用通常都不是一个好办法?

  • Debug.Write 和 Trace.Write 的区别是什么?应在什么时候使用它们?

  • Debug 和 Release 编译有何不同? 对于程序运行速度而言是否有明显区别?为什么用,或为什么不用它?

  • JIT 是以 assembly 为单位发生还是以方法为单位发生?这对于工作区有何影响?

  • 抽象基类 (abstract base class) 和接口 (interface) 对比

  • a.Equals (b) 与 a == b 的区别?

  • 在对象比较中,对象一致和对象相等分别是指什么?

  • 如何实现.NET 中的深复制操作?

  • 对 IClonable 接口的理解应为?

  • 什么是拆箱和装箱操作?

  • string 是值类型还是引用类型?

  • XmlSerializer 所使用的 “PropertySpecified” 模式的意义是什么?它试图要解决什么问题?

  • 为什么说 out 参数是.NET 的败笔?它究竟怎么样?

  • 可以把特性(attributes)放在方法的具体参数中吗?这有什么用?

C# 控件开发者

  • Override 关键词 new 的含义? 有何副作用?

  • 解释 virtual, sealed, override, 和 abstract 关键字。

  • 解释一下这个字符串中的各个部分:Foo.Bar, Version=2.0.205.0, Culture=neutral, PublicKeyToken=593777ae2d274679d。

  • public, protected, private 和 internal 之间的区别?

  • 使用 Primary Interop Assembly (PIA) 有什么好处?

  • NUnit 采用何种机制进行单元测试?

  • catch (Exception e){throw e;} 和 catch (Exception e){throw;} 的区别?

  • typeof (foo) 和 myFoo.GetType () 之间的区别?

  • 解释一下第一个构造函数的调用顺序:

  • public class c {public c (string a) : this () {;}; public c () {;} } 这个构造函数有用吗?

  • This 是什么?可以在静态方法中调用 this 吗?

ASP.NET (UI) 开发者

  • 描述一下如何使用基于 Form 表单 Post 提交模拟 Button1_OnClick 操作。

  • 什么是 PostBack?

  • ・ 什么叫作 ViewState?是什么编码?加密了吗?到底是谁在使用 ViewState?

  • <machinekey> 元素是做什么的?它在 ASP.NET 下是做什么用的?

  • 说出 ASP.NET 1.1 中三种 Session State 提供程序及优缺点。

  • ASP.NET 会重用多个请求之间的线程吗?是否每个 HttpRequest 都有自己的线程?你是否应该用 ASP.NET 的 Thread Local 存储?

  • 能否举例说明如何利用 HttpHandler 检查客户端上传图片格式。

  • HttpModule 订阅的是什么类型的事件?这对于实现有何影响?如果不打算重新编译 ASP.NE 应用程序,应该怎么做?

  • 简述从任意客户端请求路由到 ASP.NET 的过程。

  • 简述 cookies 是如何工作的,给出一个 cookies 滥用的例子。

  • 解释 HttpRequest.ValidateInput () 的重要意义?

  • 那些数据是通过 Http Header 传递的?

  • 说出 Head 中的 GET 和 POST 的区别。

  • 说出至少 6 个状态码的名称及其含义

  • If-not-modified-since 是如何工作的,如何实现?

  • VaryByCustom 是如何工作的?

使用 XML 的开发者

  • XML Namespaces 的作用是什么?

  • DOM 适合的使用场景是什么?是否有尺寸限制?

  • 什么是 WS-I 基本配置,以及为什么它很重要?

  • 写一个使用默认命名空间和限定(前缀)命名空间一个小的 XML 文档。包括从两个命名空间的元素。

  • 什么是元素和属性之间的根本区别?

  • 格式完好的 XML 和有效的 XML 之间的区别是什么?

  • 使用.NET 你会如何验证 XML?

  • 为什么这句代码通常是不好的?什么时候好?

  • 和 eventing-readers (Sax) 这两者间的异同。

  • XPathDocument 中和的 XmlDocument 之间有什么区别?详细说明,其中一个应该被使用在其他情形。

  • “XML 片断” 与 “XML 文档” 有什么区别

  • 规范化形式的 XML ,这是什么意思?

  • XML InfoSet 规范与 Xml DOM 有什么不同?InfoSet 是要解决什么问题?

  • 比较 DTD 和 XSD,它们的相似点与区别分别是什么?哪个更好些?为什么?

  • System.Xml 支持 DTDs 吗?怎么支持?

  • XML Schema 能够表示为对象图?对象图能够表示为 XML Schema?

 

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

下面是参考答案

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

 

所有号称会写代码的人(参考答案)

  • 进程和线程之间的区别?

一个程序至少有一个进程,一个进程至少有一个线程。线程的划分尺度小于进程,使得多线程程序的并发性高。

这个解释很形象:链接

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

Windows 服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。

EXE 可执行程序通常有一个用户界面,Console 或 GUI,通常由用户来启动或停止。

  • Windows 单进程可寻址的最大内存是多少? 他们如何影响系统应用软件设计?

以 32 位操作系统为例,最大寻址是 4G (含虚拟内存),是通过 2 的 32 次方计算的;当物理内存小于 4G 时,进程访问的内存量随着虚拟内存的增加而增加,直到 4G; 4GB 内存实际上包含了程序的所有部分 -- 包括可执行代码,代码加载的所有 dll,以及程序运行时使用的所有变量的内容。这个 4GB 内存称为虚拟地址空间,或虚拟内存。

对设计有明显影响的有 2 点:

在.NET 中区别最明显的是 int 的使用,在 32 位下和 64 位下存储的数据不一样 (int  4 个字节 32 位,8 个字节 64 位);另外一个是编译的程序为 X86 则可在 32、64 位下同时运行。

  • EXE 和 DLL 之间的区别?

DLL 中虽然包含了可执行代码却不能单独执行,而应由 Windows 应用程序直接或间接调用。EXE 就不用说了吧~

  • 强类型和弱类型的区别,以及其优缺点?

强类型是指尽量早的检查变量的类型,通常在编译的时候就检查.

弱类型是指尽量推后对变量类型的检查,通常在运行时检查。

到底哪个好?其实各有各的好,像 ruby, javascript, 都属于 week-typing, 好处是写代码的时候比较快. C# 属于 strong-typing, 好处是如果变量类型不对的话,编译不会通过,Visual Studio 还会有提示。至于写代码的速度上讲,自从 C# 3.0 以来,使用 var 来定义变量,简单了很多。

  • 什么是 PID, 在解决系统问题时有用吗?

PID 全称是 Process Identifier, 就是进程的一个号码,通常当系统哪个程序不听使唤的时候,可以用它来把这个程序关闭。而且 Debug 的时候,也有用。

  • 一个 TCP/IP 端口可以被多少个进程分享?

可能只有一个。

  • 什么是 GAC?使用 GAC 给我们带来哪些好处?

GAC 是指 Global Assembly Cache, 用处是放在这里的程序集可以被多个程序共同调用,.NET 中的大部分程序集都在这里。解决的问题是节省硬盘空间以及防止 Dll Hell。

中级.NET 开发者(参考答案)

  • 面向接口、面向对象和面向方面编程的区别

面向接口:定义要实现某类功能应该遵循的统一规范,而具体实现过程由实现该接口的类型决定。

面向对象:强调对具有相同行为和属性事物的封装,更注重封装的完整性和功能的完整性。

面向方面:主要提供与业务逻辑无关的操作。比如系统中有多个地方都用到文件上传功能,可以使用面向方面的思想在所有上传文件之前对文件的大小、格式等信息进行过滤操作,而不是在每处上传代码里面完成对这些信息的过滤。

  • 接口和类的区别?

接口 (Interface): 不能实列化,自己没有状态,方法也没有具体的实现,被继承时,继承类需要实现接口的所有方法。接口就像租房时网上下载的一个租房合同模板。

类 (Class): 可以被实例化,有状态,被继承时,继承类也不需要重新实现被继承类中的方法。但是如果被继承类的方法中有 abstract 修饰的,继承类则需要实现这个方法。类像是已经被填上内容的租房合同的模板。

  • 什么是反射?

代码在运行过程中动态获取程序集的信息,对象的信息,或者直接调用对象的方法或属性。 e.g. var i = 100; i.GetType (); 输出 System.Int32。

  • XML web service 跟 .NET Remoting 的不同。

XML Web service: 是开放标准,使用 Http/SOAP 协议交互。    
.NET Remoting: 是微软自己的技术,只能在.NET 里面使用。

  • early-binding 和 late-binding 的区别是什么?

early-binding: 是指编译的时候绑定,late-binding 是指运行时绑定。

  • Assembly.Load 是静态引用还是动态引用?

动态引用。

  • Assembly.LoadFrom 和 Assembly.LoadFile,2 者使用的时机有何不同?

Assembly.LoadFile 只载入相应的 dll 文件,其他文件并不会被载入。

Assembly.LoadFrom 会载入 dll 文件及其引用的其他 dll

  • 什么是 Assembly Qualified Name? 一个文件名吗? 有何不同?

这里问的是强名称概念。

它不是一个文件名,相比文件名,Assembly Qualified Name 更能确定一个程序集,它包含文件名,但同时包含版本,公钥,和区域。因为同样一个名称的文件可能有不同的版本和区域,此时单独靠文件名称,可能会造成不能确定程序集的正确性。

  • Assembly.Load ("foo.dll") 加载程序集的方法是否正确?

不对,正确方式为:Assembly.Load ("foo, Version=1.0.2004.0, Culture=neutral, PublicKeyToken=8744b20f8da049e3")

  • 强签名的程序集与非强签名的程序集有何不同?

通过签发具有强签名的程序集合,可以确保名称的全局唯一性!因为强名称是依赖于唯一的密钥对来确保名称的唯一性,其他人不会生成与你相同的程序集名称(不同的私钥产生的名称不同)。强名称保护程序集的版本沿袭,因为强名称的唯一性能够确保没有其他人能够生成你的程序集的后续版本。强名称提供可靠的完整性检查,通过.NET Framework 安全检查后,可以确保程序集内容在生成后未被更改过!

  • DateTime 可以为 null 吗?

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

  • 什么是 JIT? 什么是 NGEN? 分别的优势和劣势是什么?

JIT (Just In Time), 这是我们通过.NET 编译器生成的应用程序最终面向机器的编译器

本机映像生成器 (Ngen) 是一种提高托管应用程序性能的工具。 Ngen.exe 创建本机映像(包含经编译的特定于处理器的机器代码的文件),并将它们安装到本地计算机上的本机映像缓存中。运行时可从缓存中使用本机映像,而不必使用实时 (JIT) 编译器编译原始程序集。

由于 JIT 编译器会在调用程序集中定义的单个方法时将该程序集的 MSIL 转换为本机代码,因而必定会对运行时的性能造成影响。在大多数情况下,这种性能影响是可以接受的。更为重要的是,由 JIT 编译器生成的代码会绑定到触发编译的进程上。它无法在多个进程之间进行共享。为了能在多个应用程序调用或共享一组程序集的多个进程之间共享生成的代码,公共语言运行库支持一种提前编译模式。此提前编译模式使用本机映像生成器 (Ngen.exe) 将 MSIL 程序集转换为本机代码,其作用与 JIT 编译器极为相似。但是,Ngen.exe 的操作与 JIT 编译器的操作有三点不同:

・ 它在应用程序运行之前而不是运行过程中执行从 MSIL 到本机代码的转换。

・ 它一次编译一个完整的程序集,而不是一次编译一个方法。

・ 它将本机映像缓存中生成的代码以文件的形式持久保存在磁盘上。

  • 如何在.NET CLR 的分代垃圾收集器管理对象的生命周期?什么是不确定性的终结?

.NET 的垃圾回收分为 3 代,可通过 GC.Collect 强制处理。

一个对象实例没有被任何地方引用时就称为垃圾,当内存不够是 GC 就会将该对象实例占用的空间清理出来

  • Finalize () 和 Dispose () 的区别?

Finalize 只释放非托管资源;

Dispose 释放托管和非托管资源

Finalize 和 Dispose 共享相同的资源释放策略,因此他们之间也是没有冲突的。

  • Using () 模式有用吗? IDisposable 是什么? 它如何支持确定性的终结?

有用,限定资源作用域并自动释放。

IDisposable 是一个接口,有一个方法 Dispose (),可以在对象出作用域的时候调用,如在 Using 出界后调用这个接口。

  • tasklist /m "mscor*" 命令行的作用是?

列出所有使用符合引号内 pattern 的 dll 的进程.

  • in-proc 和 out-of-proc 之间的区别是什么?

In-proc 发生在一个进程之内, Out-of-proc 发生在不同进程之间。

  • out-of-proc 是基于什么技术实现的?

.NET remoting

  • 当你在 ASP.NET 中运行一个组件时,它在 Windows XP, Windows 2000, Windows 2003 上分别跑在哪个进程里面?

Xp : aspnet_Wp.exe

Windows 2000 : inetinfo.exe

Windows 2003 : w3wp.exe

高级开发者及架构师(参考答案)

  • DateTime.Parse (myString) 是否正确?

一般使用 DateTime.TryParse 解析。

  • PDBs 是什么? 什么场景下为了调试需要加载它?

PDBs 是源码编译文件 - 全称 Program Database,这个文件主要会存储对应模块 (dll 或者 exe) 内部的所有符号,以及符号对应的地址、文件名和行号。调试的时候应用程序和源文件之间的一个桥梁。

  • 什么是圈复杂度,以及为什么它很重要?

一种代码复杂度的衡量标准。

可以用来衡量一个模块判定结构的复杂程度,数量上表现为独立现行路径条数,也可理解为覆盖所有的可能情况最少使用的测试用例数。圈复杂度大说明程序代码的判断逻辑复杂,可能质量低且难于测试和维护。程序的潜在风险和高的圈复杂度有着很大关系。

  • 写一个标准的 lock () 编码方法,以及 “双重检查” 代码

lock 关键字可确保当一个线程位于代码的临界区时,另一个线程不会进入该临界区。 如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。

public class MySingleton {
private static object myLock = new object();
private static volatile MySingleton mySingleton = null;
private MySingleton() {
}
public static MySingleton GetInstance() {
if (mySingleton == null) { //第一次检查
lock (myLock) {
if (mySingleton == null) { // 第二次检查
mySingleton = new MySingleton();
}
}
}
return mySingleton;
}
}
  • 什么是 FullTrust? GAC 下的程序集拥有 FullTrust 吗?

FullTrust 即为完全信任,也称为盲目信任.

GAC:有 FullTrust 权限

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

更加灵活的设置对代码的访问权限,实现代码级保护,防止被移动代码恶意利用

  • gacutil /l | find /i "Corillian" 作用是?

全局程序集缓存中如果有 Corillian 就更新该程序集,没有就安装。

  • 这行命令的功能 sn -t foo.dll

显示程序集的公钥标记。

  • DCOM 穿过防火墙,哪些端口需要打开?135 端口的目的是什么?

因 DCOM 的端口号是随机分配的,默认情况下,会分配 1024 以上的端口号,所以默认情况下,DCOM 不能穿越防火墙。

135 是远程过程调用 (RPC) 的默认端口

  • 对比 OOP 和 SOA。各有什么原则?

OOP 是一种编程模型,将复杂的逻辑分解出小的模块,特性是继承,封装和多态。而 SOA 是一个技术框架。 SOA 的思想是将业务逻辑封装成服务或者中间件提供给应用程序来调用,当然其组件化思想是继承和发扬了 OOP 的优点。

  • XmlSerializer 工作原理是什么?当进程使用它时需要什么 ACL 权限?

XmlSerializer 是将对象的属性和字段进行序列化和反序列化的,序列化成为 xml 数据,反序列化再将 xml 转换成对象。应该至少需要 ACL 权限中的读权限。

  • 为何 catch (Exception) 的使用通常都不是一个好办法?

因为 try-catch 有性能损失,在性能要求高的场景下,频繁使用效果很差。同时,catch (Exception) 后,可能会破坏程序的正常执行逻辑,导致阅读、调试代码难度增大。

Catch 的时候应该捕捉具体的 Exception 类型,而不是通用的 Exception

  • Debug.Write 和 Trace.Write 的区别是什么?应在什么时候使用它们?

Debug 只在 debug 状态下会输出,Trace 在 release 下也会输出,在 release 下 Debug 的内容会消失。Debug 会产生 pdb 文件,release 不会。

  • Debug 和 Release 编译有何不同? 对于程序运行速度而言是否有明显区别?为什么用,或为什么不用它?

Debug 和 Release 编译产出物不一样,Release 下无调试信息,如 Assert 无法使用。对程序运行速度而言,无明显区别。建议在开发环境下用 Debug 编译,发布环境下用 Release,为了使用 Assert 断言。

  • JIT 是以 assembly 为单位发生还是以方法为单位发生?这对于工作区有何影响?

方法,因对于一次运行,很可能只用到一个程序集中极少数类型和对象,而大部分可能并不会被使用。

  • 抽象基类 (abstract base class) 和接口 (interface) 对比

接口 (Interface) 是用来定义行为规范的,不会有具体实现,而抽象类除定义行为规范外,可以有部分实现,但一个类能实现多个接口,但只能继承一个基类。接口是是一种契约,定义了继承它的类必须声明接口中的方法。

区别:

接口只有方法、属性、事件和索引符;类除了这四种成员之外还可以别的成员 (如字段)。接口没有构造函数,类有构造函数。

接口不能进行运算符的重载,类可以进行运算符重载。

接口的成员没有任何修饰符,其成员总是公共的,而类的成员则可以有修饰符。派生于接口的类必须实现接口中所有成员的执行方式,而从类派生的则不然。

  • a.Equals (b) 与 a == b 的区别?

equals:比较两个变量的内容是否相等

==:操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。

  • 在对象比较中,对象一致和对象相等分别是指什么?

对象一致指的是引用相同。对象相等指的是内容相等。

  • 如何实现.NET 中的深复制操作?

深复制将会在新对象中创建引用类型字段引用的所有对象,改变新对象中引用的任何对象,不会影响到原来的对象中对应字段的内容。

  • 对 IClonable 接口的理解应为?

ICloneable 接口可以提供创建现有对象中复制的自定义实现。

  • 什么是拆箱和装箱操作?

拆箱就是引用类型转换为值类型,通常伴随着从堆中复制对象实例的操作

装箱就是值类型数据转换为 Object 类型的引用对象

  • string 是值类型还是引用类型?

引用类型

  • XmlSerializer 所使用的 “PropertySpecified” 模式的意义是什么?它试图要解决什么问题?

把不参与序列化的对象标注出来,只序列化有用的数据,而不是序列化整个对象。去除没必要的数据冗余,和提升序列化时的性能。

  • 为什么说 out 参数是.NET 的败笔?它究竟怎么样?

之所以说 out 参数不好,是因为通过 out 参数传值,间接了破坏了封装性和函数的可读性。但笔者认为有的时候还是很实用很方便的。

  • 可以把特性(attributes)放在方法的具体参数中吗?这有什么用?

可以。至少比较省事。

/// <summary>The EnableWindow Function.</summary>
[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
public static extern bool EnableWindow(System.IntPtr hWnd, [MarshalAs(UnmanagedType.Bool)]bool enable);

C# 控件开发者

  • Override 关键词 new 的含义? 有何副作用?

override new 在基类没有 virtual 关键字的情况下必须使用。副作用是破坏了继承关系。

  • 解释 virtual, sealed, override, 和 abstract 关键字

virtual:virtual 关键字用于修饰方法、属性、索引器或事件声明,并使它们可以在派生类中被重写。例如,此方法可被任何继承它的类重写。

sealed:当对一个类应用 sealed 修饰符时,此修饰符会阻止其他类从该类继承。

override:要扩展或修改继承的方法、属性、索引器或事件的抽象实现或虚实现,必须使用 override 修饰符。

abstract:abstract 修饰符可以和类、方法、属性、索引器及事件一起使用。在类声明中使用 abstract 修饰符以指示某个类只能是其他类的基类。标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。

  • 解释一下这个字符串中的各个部分:Foo.Bar, Version=2.0.205.0, Culture=neutral, PublicKeyToken=593777ae2d274679d

Foo.Bar: 程序集名称

Version=2.0.205.0: 程序集版本

Culture=neutral: 区域

PublicKeyToken: 程序集 public 密钥

  • public, protected, private 和 internal 之间的区别?

public:  对任何类和成员都公开,无限制访问;

protected: 仅仅对该类以及该类的派生类公开;

private: 仅仅对该类公开;

internal: 只能值包含该类的程序集中访问该类 (只是单独的项目,而不是整个解决方案)

  • 使用 Primary Interop Assembly (PIA) 有什么好处?

主互操作程序集 (PIA) 指的是官方发布的互操作程序集,如果电脑中安装了 PIA,当你添加对类库的引用时,那么 Visual Studio 会自动加载 PIA,微软为 Office 应用程序提供了 PIA,如 EXcel PIA 就是 Microsof.Office.Interop.Excel.dll, 其他应用程序也类似。详见:http://msdn.microsoft.com/zh-cn/library/aax7sdch(v=vs.110).aspx

  • NUnit 采用何种机制进行单元测试?

.NET 反射,为测试方法加了 Attribute

  • catch (Exception e){throw e;} 和 catch (Exception e){throw;} 的区别?

throw e;   //CLR 认为这里是异常的起始点

throw;  //CLR 不会重新设置异常的起始点

  • typeof (foo) 和 myFoo.GetType () 之间的区别?

Typeof () 是运算符而 GetType 是方法

GetType () 是基类 System.Object 的方法,因此只有建立一个实例之后才能够被调用(初始化以后)

Typeof () 的参数只能是 int,string,String, 自定义类型,且不能是实例

  • 解释一下第一个构造函数的调用顺序:

public class c {public c (string a) : this () {;}; public c () {;} } 这个构造函数有用吗?

先调用了 this (),即无参构造函数,再调用了自身的有参的构造函数。

因为未对 a 参数进行处理,故无用。

  • This 是什么?可以在静态方法中调用 this 吗?

This 用于调用当前实例,无法在 static 方法中调用 this。

ASP.NET (UI) 开发者(参考答案)

  • 描述一下如何使用基于 Form 表单 Post 提交模拟 Button1_OnClick 操作。

aspx
<form method=”post” action=”test.aspx”>
<input name=”Button1” type=”submit” />
</form>
Cs
protected void Page_Load(object sender, EventArgs e)
{
if (Request["Button1"] != null)
{
//Button1_OnClick Function Code
}
}
  • 什么是 PostBack?

页面数据从客户端通过 Form 的 Post 方法传输到服务器端的过程叫做 PostBack。

・ 什么叫作 ViewState?是什么编码?加密了吗?到底是谁在使用 ViewState?

保存服务器控件在 PostBack 时状态不变的技术叫做 ViewState。这些状态信息被保存在前台的 hidden 元素中。默认为 Base64 编码,默认不会 ViewState 被加密。在页面中所有开启了 ViewState 的服务器控件会使用到它。 参考

  • <machinekey> 元素是做什么的?它在 ASP.NET 下是做什么用的?

Machinekey 是添加在 web.config 中 <system></system > 之间的一个标签。它保证 cookies、viewstate 加密解密时的数据不会被篡改。参考

  • 说出 ASP.NET 1.1 中三种 Session State 提供程序及优缺点。

Process:优点:进程内。速度比较快,但比较难适应大型应用。

ASP.NET State Service: ASP.NET 状态服务。速度,容量上折中。如果使用专用的状态服务器则可以扩展。

SQL Server Session State Management: 速度较慢。但可靠性是最强的。而且也有很高的扩展性,适合大型应用。

  • ASP.NET 会重用多个请求之间的线程吗?是否每个 HttpRequest 都有自己的线程?你是否应该用 ASP.NET 的 Thread Local 存储?

当使用线程池中的线程进行异步请求操作时,多个请求间的线程是能够重用的。每个 HttpRequest 都有自己的线程。当线程重用时,应该使用 Thread Local 存储。

  • 能否举例说明如何利用 HttpHandler 检查客户端上传图片格式。

检查 ContentType 即可。更安全的做法是解析 HttpHandler。

  • HttpModule 订阅的是什么类型的事件?这对于实现有何影响?如果不打算重新编译 ASP.NET 应用程序,应该怎么做?

  • 简述从任意客户端请求路由到 ASP.NET 的过程。

用户输入 URL,路由将该次请求转到 DNS 服务器,DNS 服务器将请求转向 URL 所指向的服务器 IP,如果 IIS 中某个站点包含所请求主机头信息,则请求成功。

  • 简述 cookies 是如何工作的,给出一个 cookies 滥用的例子。

服务器在告诉客户端,需要将需要一些服务器必要信息存成 cookies 保存在客户端中,而每次客户端访问服务器时会将 cookies 中的信息通过请求发送给服务器。滥用的例子比如:Cookies 中保存敏感信息,用户密码。

  • 解释 HttpRequest.ValidateInput () 的重要意义?

验证用户输入的所有内容,保证服务器的安全性和健壮性。

  • 那些数据是通过 Http Header 传递的?

Header 共包括通用头、请求消息、响应消息及消息实体等数据。

  • 说出 Head 中的 GET 和 POST 的区别。

Get 方法为 URL 传值,POST 为 Form 表单传值。

  • 说出至少 6 个状态码的名称及其含义

200 访问成功、301 永久重定向、302 暂时重定向、304 服务器已缓存、404 访问资源不存在、500 服务器出错、504 网关超时。

  • If-not-modified-since 是如何工作的,如何实现?

if-not-modified-since 及 last-modified 是保存在 Request http header 中的两个信息,客户端在访问资源时,对比两个信息,就能确定需要读取缓存文件还是更新本地缓存文件。Response.Content.Headers    
Explain <@OutputCache%> and the usage of VaryByParam, VaryByHeader.

  • VaryByCustom 是如何工作的?

VaryByCustom,我们可以自定义输出缓存要求的任意文本。除了在 OutputCache 指令里面申明该属性之外,我们还得在应用程序的 global.asax 文件的代码声明块中,重写 GetVaryByCustomString 方法来为自定义字符串指定输出缓存的行为。

Eg:

<%@ OutputCache VaryByParam="none" VaryByCustom="CategoryPageKey" Location="server" Duration="43200" %>

这里的 VaryByCustom 定义的为 CategoryPageKey,那么在 global.asax 里面我们必须定义 CategoryPageKey 这个字符创输出缓存的行为,见下面代码。

public override string GetVaryByCustomString(HttpContext context, String arg)
{
…
}

使用 XML 的开发者(参考答案)

  • XML Namespaces 的作用是什么?

提供避免元素命名冲突的方法

  • DOM 适合的使用场景是什么?是否有尺寸限制?

DOM 是一种与浏览器,平台,语言无关的接口,使你可以访问页面其他的标准组件。 DOM 解决了 Netscape 的 Javascript 和 Microsoft 的 Jscript 之间的冲突,给予 web 设计师和开发者一个标准方法,让他们来访问他们站点中的数据、脚本和表现层对像。

DOM 尺寸不受限制。

  • 什么是 WS-I 基本配置,以及为什么它很重要?

它由一组非专有的 Web 服务规范以及对这些旨在促进互操作性的规范的说明和修正组成

为相关 Web 服务更好的一起互操作的使用提供了实现的指导方针

  • 写一个使用默认命名空间和限定(前缀)命名空间一个小的 XML 文档。包括从两个命名空间的元素。

<?xml version="1.0" encoding="UTF-8"?>
<note>
    <to>a</to>
    <from>b</from>
</note>
  • 什么是元素和属性之间的根本区别?

数据本身应当存储在元素中,而有关数据的信息(元数据)应当存储在属性

属性不能很好地保持原文的结构

元素允许包括元元数据(有关信息的更深层次的信息)。

每个人对元数据和非元数据的理解是不一样的。

面对以后的变化,元素更具扩展性。

对于非常简单并且不随文档改变其形式的信息,使用属性较好。特别是样式信息和链接信息,作为属性执行起来很顺利

  • 格式完好的 XML 和有效的 XML 之间的区别是什么?

格式完好的 XML 不是有效的 xml

不仅要格式完好而且还要遵循一定的顺序规则

格式完好的 (well-formed) XML 文档包括:起始标签和结束标签应当匹配,结束标签是必不可少的;大小写应一致:XML 对字母的大小写是敏感的,和是完全不同的两个标签,所以结束标签在匹配时一定要注意大小写一致;元素应当正确嵌套:子元素应当完全包括在父辈元素中。

有效的 (valid) XML 文档是指一个遵守 XML 语法规则,并遵守相应 DTD 文件规范的 XML 文档。

  • 使用.NET 你会如何验证 XML?

XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationEventHandler += new ValidationEventHandler(this.ValidationEventCallBack);
settings.ValidationType = ValidationType.Schema;
settings.Schemas serch= schemaSet;
  • 为什么这句代码通常是不好的?什么时候好?

myXmlDocument.SelectNodes("//mynode");

这个会递归搜索全部的 Document 节点,通常消耗会比较大。除非真的需要检索所有叫 mynode 的节点,那就比较好。

  • 描述一下 pull-style parsers (XmlReader) 和 eventing-readers (Sax) 这两者间的异同。

XmlReader 是一个只进、只读的游标。 它提供了对输入的快速和非缓存的流式访问。 它可以读取流或文档。 它使用户可以提取数据,并跳过对应用程序没有意义的记录。 较大的差异在于 SAX 模型是一个 “推送” 模型,其中分析器将事件推到应用程序,在每次读取新节点时通知应用程序,而使用 XmlReader 的应用程序可以随意从读取器提取节点。

  • XPathDocument 中和的 XmlDocument 之间有什么区别?详细说明,其中一个应该被使用在其他情形。

XPathDocument 类读取 XML 文档 - 在内存中的快速只读表示形式

可编辑的 XmlDocument 类读取 XML 文档

  • “XML 片断” 与 “XML 文档” 有什么区别

XML 片段通常不是一个完全符合标准的 XML 文档,可能没有根节点,比如:“<foo></foo><bar></bar>”。XML 文档通常有一个根节点和一些由标记组成的内容。比如:“<root><foo></foo><bar></bar></root>”

  • 规范化形式的 XML ,这是什么意思?

规范化形式的 XML 是 XML 规范的一个子集。任何 XML 文档都可以转换为规范化形式的 XML,因此将特定类型的微小差异去除却仍是该 XML 文档。

  • XML InfoSet 规范与 XML DOM 有什么不同?InfoSet 是要解决什么问题?

XML InfoSet 是 W3C 规范,用于描述一组数据集的抽象数据模型。XML DOM 是 InfoSet 的一个实例。

  • 比较 DTD 和 XSD,它们的相似点与区别分别是什么?哪个更好些?为什么?

DTD 通过合法元素和属性列表定义 XML 文档的文档结构。XSD 描述 XML 文档的文档结构。

  • System.Xml 支持 DTDs 吗?怎么支持?

支持。设置 XmlReaderSettings.DtdProcessing 属性为 DtdProcessing.Parse。设置 XmlReaderSettings.ValidationType 属性为 ValidationType.DTD。

  • XML Schema 能够表示为对象图?对象图能够表示为 XML Schema?

是的。

本文出自 “葡萄城控件博客” 博客,请务必保留此出处 http://powertoolsteam.blog.51cto.com/2369428/1364996

posted on 2024-10-05 09:19  漫思  阅读(21)  评论(0编辑  收藏  举报

导航