2024年1月28日发(作者:)

.net 面试宝典复习笔记

什么是CTS,CLS,CLR?

答:CLR(commom Lauguage Runtime)公共语言运行库

CTS(common Type System)通用类型系统

CLS(common Lauguage System)公共语言系统 是CTS的一个子集。

CIL (common Intermediate Language)公共中间语言

标准答案:CLR 是CLI的实现,包含了.net运行引擎和符合CLI(公共语言基础)的类库。

CTS包含在MS提交的CLI规范中,定义了一个可以在CLR上运行的类型规范。

开发和运行.net程序需要的最基本的环境是什么?

答:需要一个文字编辑器和针对编码语言的编译器。对c#来说,为。运行.net 程序,需要安装.net framwork组件。

Net支持多种编程语言开发,但所有设计必须符合CLS规范以保证编程语言之间的特性差异不会产生运行时的异常。

CLR技术与COM技术的比较

答:CLR和COM都定义了组件间交互的规范。COM并没有定义如何描述组件间的依赖性,并且由于其严格的物理约定,造成了很多版本升级和控制的问题。CLR运用元数据和逻辑类型定义等机制,有效地解决了COM遗留的一些问题。相对于COM模型,CLR更容易理解和学习。

什么是程序集和应用程序域

答:程序集(Assembly)是一个由类型定义、数据文件和资源文件组成的逻辑集合。每个程序集都包含一个程序集清单,该清单通常被附加在某个头文件上,也可以设置单独一个文件来包含该清单。

应用程序域是CLR中提供代码运行范围、错误隔离和安全设置隔离的逻辑单元,功能类似于操作系统的进程。一个或多个应用程序域在一个操作系统的进程中运行。应用程序域的创建和销毁所需的开销,相当于操作系统的进程较小。但和操作系统进程一样,应用程序域之间的数据共享相当困难。

Net程序被编译成什么形式的代码?

答:.net程序在第一次编译后,形成CLR头、元数据和中间代码。在实施运行或部署时,将经过第二次编译,编译的结果是在CLR中可执行的机器代码。

JIT是如何工作的?

答:JIT(just in time)实时编译。JIT引擎在编译中间代码之前,会寻找方法的本机机器代码缓存并且判断其是否可用,如果可用则直接加载,如果不可用,JIT引擎会查找类型中的方法存根,找到该中间代码并且进行编译。

简述程序集的加载机制。

答:CLR通过om 和 来主动地加载程序集。前者通过位置而后者通过唯一标识强命令程序集的4个元素来标识程序集。CLR的加载机制和Load方法一致,其内在的策略是依次通过版本策略、CODEBASE

位置、应用程序域和应用程序位置来查找程序集。

如何配置程序集的版本策略

答:CLR支持在3个级别上设定版本策略,依次是:应用程序策略、发行者策略和计算机策略。所有策略的设置都是通过修改配置文件 ( )来实现。3个级别的策略会依次被CLR执行,而上一个策略的执行结果将被作为下一个策略的输入。发行者策略仅仅针对放入GAC(全集程序集缓存)的程序集,并且可以在应用程序策略中被指定忽略。

如何生成强签名的程序

答:生成强签名的程序集需要有公钥/私钥对。在得到了公钥/私钥对后,就可以控制编译器的输入参数来得到一个强签名的程序集。对于c#的编译器csc 来说,可以用/keyfile 参数来制定使用哪个公钥/私钥 文件。

如何把程序集放入GAC中

答:GAC全局程序集缓存(Global Assembly Cache)。GAC是一个具有特定目录结构的文件夹,所有强签名的程序集都可以被放入GAC中。可以通过。Netfreamwork自带的assembly

viewer 来简单地拖动一个程序集到GAC中,也可以使用工具命令行来添加。总之,任何方法归根到底,都是根据GAC的规范和程序集本身的特性,在GAC目录下建立相应的子目录结构。

延迟签名及其作用

答:延迟签名就是把强签名程序集的私钥加密和数字签名延迟到实际发布时进行。延迟签名提高了开发测试阶段的效率,也方便了机构和项目管组管理自己的私钥。

程序集的版本分哪几个部分

答:程序集的版本号分为四个部分:主版本号、次版本号、内部版本号和修订号。

面试真题:

1,使用c++语言能否编写可以在.net框架上运行的程序?

2.什么是受托管的代码?

3.什么是应用程序域?它和进程有什么区别?

4.做强签名的程序集与不做强签名的程序集有什么不同?

5.如何单独升级系统中的某一个程序集。

6.公钥和私钥的概念和作用是什么?

7.把程序集放入GAC中有什么好处?

用什么技术来解决dll hell问题。

9,编译时如何制定版本?

10.延迟签名有何作用?

.net中所有内建类型的基类是什么?

答:是.net中所有内建类型的基类。

Object中包含哪些方法?哪些是虚方法?

答:包括8个方法

公共实例方法:

Virtual bool Equals(object obj)

Virtual int GetHashCode()

Type GetType()

Virtual string toString()

公共静态方法

Bool Equals(object objA,object ojbB)

Bool referenceEquals(object ojbA, object objB)

受保护的实例方法

Object MemberwiseClone()

Finalize

包含了Finalize 在内的8个方法。其中有3个虚方法:Equals,gethashcode,Tostring方法。在设计类型时,当需要对类型对象进行内容比较时,可以考虑重写Equals方法。

值类型和引用类型的区别?

答:所有继承自ype的类型都是值类型,而其他类型都是引用类型。值类型的赋值会产生一个新的数据副本,所以每个值类型都拥有一个数据副本,而引用类型的赋值则是赋值引用。值类型的对象分配在堆栈上,而引用类型的对象分配在堆上。当比较两个值类型时,进行的是内容比较,而比较两个引用类型时,进行的是引用比较。

三个区别:

赋值区别(将一个赋值给另一个是否会产生副本),即两个值赋值之后,改变其中一个,另外一个是否会跟着改变。

,内存分配区别(堆(引用)和堆栈(值)的区别,堆的空间大,堆栈的空间小,但效率高)

继承结构区别(equals的区别)

值类型的比较方法Equals有了一些改变。

值类型已经实现了内容的比较,而引用类型在没有重写Equals方法的情况下,仍采用引用比较。

简述装箱和拆箱原理

答:装箱和拆箱本质上是值类型在转换到时引发的堆栈和堆的一系列移动操作。装箱时值类型从堆栈上被复制到堆上,而拆箱是从堆上复制到堆栈上。装箱和拆箱对性能有比较大的影响,应该避免任何没有必要的装箱和拆箱操作。

何为装箱,何为拆箱?

答:所有值类型必然都隐式地转换为类型,当这个转换发生时,CLR需要做额外的工作把堆栈上的值类型移到堆上,这个操作被称为装箱。

拆箱是装箱操作的反操作,把堆中的对象赋值到堆栈中,并且返回其值。

C#是否有全局变量?

答:没有传统意义的全局变量,在c#程序中,任何对象数据都必须属于某个类型。通过公共静态变量,可以实现以前全局变量的所有功能。

public static main()

Struct 和class 的区别,struct适合哪些场合?

答:结构是值类型而类是引用类型。结构不具备继承的特性,程序员不能定义一个继承自其它结构或者类的结构。结构虽然可以重写定义中的虚方法,但程序员不能定义新的虚方法和抽象方法。结构不能拥有无参数的构造方法,也不能为成员变量定义初始值。

结构作为一个微型的值类型的“类”,常用于存储数据的集合,但那些涉及复杂操作的类型,应该被设计成类而不是结构。

类型的初始化器何时被调用?

答:类型的初始化器是指具有和类型相同名字、无参数无返回并且以static定义的方法。。。。

C#中方法的参数可以有哪几种传递方式?

答:一共有三个可选关键字可以修饰方法的参数:ref,out和和out都实现了参数的引用传递,区别在于ref要求参数是否在传入前被初始化,而out要求参数在方法返回前被初始化,params实现了参数数目可变的方法。

传递数组时是引用传递(意味着改变即改变)

C#中的string 和String有什么区别?

答:在c#中,string和String,object 和Object的关系非常简单。它们是相同的,完全是同一个类型。在.net中string是String类型的一个别称,而object是Object的一个别称。

String和string 是同一个类型的两个名字,相同情况还有object 和Object,除了名称之外,没有任何区别。

.net支持几种访问级别?

答:.net定义了6种,分别为 Private, Family,Assembly,Family&Assembly, Family or

Assembly ,Public.

对应的关键字为:private,protected,internal,protected interal,public.

简述属性的特点及属性和方法的异同。

答:c#属性是指有返回值而无参数的一种特殊的方法,允许程序员方便地为成员变量提供一种set/get(或者其中任意一个)方法,属性的使用和公共成员变量完全一致,却拥有更好的可扩展性。属性的本质和传统的set/get×××函数一样,但语法更加优美,代码更加简洁易读。

简述c#中的浅复制和深复制

答:浅复制和深复制的区别?

浅复制是指复制类型中的所有值类型成员,而只复制引用类型成员的引用,并且使目标对象共享原对象的引用类型成员对象。深复制是指同时复制值类型成员和引用类型成员的对象。

浅复制和深复制的概念都是递归的。中的MemberwiseClone已经实现了浅复制,但它是一个受保护的方法。无论浅复制或深复制,都可以通过实现ICloneable接口的Clone方法来实现,可被继承的类型需要谨慎地实现ICloneable接口,因为这将导致所有的子类型都必须实现ICloneable接口。

简述c#中的循环语法和各自的特点

答:while ,do while,for, foreach

For foreach 则经常被用来遍历数组和集合。Foreach语句可以遍历任意实现了IEnumberable接口的容器类,但foreach不允许直接或者通过属性修改每个迭代项目的值。可以通过调用项目的方法来达到修改的目地。Foreach语句拥有较好的执行效率和突出的语句健壮性。

C#中的using 语句有什么作用?

答:using语句实现了IDisposable的类型对象调用Dispose方法,using语句能够保证使用的对象的方法在using语句块结束时被调用,无论是否有异常抛出。C#编译器在编译时自动using语句加上try/finally 块,所以using的本质和异常捕捉语句一样。但语法更为简洁。所有using使用的对象都应该在using语句开始后再初始化,以保证所有的对象都能够被dispose。

内存管理和垃圾回收

简述.net中堆栈和堆的特点和差异

答:.net程序在进程内存中分配出堆栈、托管堆和非托管堆。所有的值类型对象和引用类型对象都分配在堆栈上,堆栈根据对象的生命周期来依次分配和释放,堆栈根据一个指向栈尾的指针来分配内存,效率较高。

.net所有引用类型对象分配在托管堆上,托管堆连续分配内存,并且受net垃圾收集机制管理,受托管的内存分配和释放涉及复杂的内存管理,效率相对堆栈来说低得多。

需要分配堆内存的非托管类型将被分配在非托管堆上,非托管堆不受。Net垃圾收集机制管理,内存块完全由程序员手动申请和释放。

执行string abc=”aaa”+”bbb”+”ccc”共分配了多少内存?

答:在堆栈上分配了一个存储字符串引用的内存块,并在托管堆上分配了一块用于存储“aaabbbccc”这个字符串对象的内存块。

.Net内存分配原则:

引用类型:在堆栈上分配一个引用对象,在堆上分配一个对象实例

NET中GC的运行机制

答:垃圾回收是指收集释放托管堆上不再被使用的对象内存。其过程基本包括:通过算法找到不再被使用的对象、移动对象使所有仍被使用的对象紧靠托管堆的一边和调整各个状态变量。

垃圾回收的成本较高,对性能的影响较大。程序员在编写.net代码时,应该避免不必要的内存分配,尽量减少或避免使用t来执行垃圾回收。

Dispose方法和Finalize方法在何时被调用

答:Dispose方法被使用者主动调用,而Finalize方法在对象被垃圾回收的第一轮回收后,由一个专用的.net线程进行调用。Dispose方法不能保证被执行,而net的垃圾回收机制保证了拥有Finalize方法并且需要被调用的类型对象的Finalize方法被执行。调用Finalize方法涉及了一系列复杂的操作,性能代价非常高,程序员可以通过sFinalize方法通知.net该对象的Finalize方法不需要被调用。

GC中代(Generation)是什么,一共分为几代?

答:垃圾回收机制按照对象不被使用的可能性把托管堆内的对象分为3代:0代、1代和2代。越小的代有越多被释放的机会,而每一次GC中仍存活的对象实例将被移到下一代上。

GC机制中如何判断一个对象是否仍在被使用。

答:GC通过在使用的根引用遍历所有引用的对象实例。当一个对象不能被遍历时,将被视为不再被使用。

.NET的托管堆中是否可能出现内存泄漏现象?

答:可能,主要原因有:大对象的频繁分配和释放,不恰当地保留根引用和错误的Finalize方法。

C#中类可以有多个父类、可以实现多个接口吗?

答:C#中最多有一父类,但可以实现任意多的接口。

简述C#中重写、重载和隐藏的概念

答:重写是指用Override关键字重新实现基类中的虚方法,在运行的过程中,无论通过哪个类型的引用,真正对象类型的方法将被调用。隐藏是指用new关键字重新实现基类中的方法,在运行过程中通过引用的类型判断应该调用哪个类型的方法。重载是指多个方法共享同一个名字并且拥有相同的返回值,但是却可以拥有不同的参数列表。

为什么在构造方法中调用虚方法会导致问题?

答:构造方法中调用虚方法将导致运行时错误。这是因为当基类的构造方法被调用时,子类的构造方法还未被调用,但是根据实际对象的类型,基类调用的虚方法是定义在子类中的方法,这就意味着一个未完成构造的类型对象的方法,不可预计的错误将发生。

在C#中如何声明一个类不能被继承?

答:通过关键字sealed可以申明一个类型不可被继承,设计中应该为所有不被作为基类的类型添加sealed关键字,以避免各种来自继承的易产生的错误。

异常的处理

如何针对不同的异常进行捕捉?

答:C#中一个try块可以有多个catch块,每个catch块可以针对特别的异常进行特别的处理。但是安全起见,最后应该添加对Exception类型的异常进行捕捉的catch块,以保证没有异常被毫无处理的抛出。

如何使用Conditonal特性

答:Conditiaonl特性用于编写在某个特定编译版本中运行的方法,通常它编写一些在debug版本中支持测试的方法。当版本不匹配时,编译器会把Conditonal特性的方法内容置空。

如何避免类型转换时的异常

答:用is和as语句代替强制转换,可以有效避免InvalidCastException异常,执行效率相对较高。应使用 is 或者 as语句来代替直接使用强制转换。

面试真题:

1,什么情况下会用到虚方法?它与接口有什么不同?关于两者的不同,可以从设计的角度出发,有可以具体列举两者语法的不同。

2.值类型和引用类型有什么区别?

3.怎样理解静态变量?

4.如何是一个类型可以在foreach语句中使用?(实现IEnumerable接口)

有几种用法?

6.用sealed修饰的类有什么特点?然后稍微谈一下使得类型不可继承的优点。

7.C#可否对内存进行直接的操作?

指对内存的每一个字节、每一位都能直接读写。注意。Net对内存的划分,不同区域的可操作性也不同。

8.。net错误处理机制是什么?

9.面向对象的语言具有哪些特性?

10..net中垃圾回收机制是怎么样的?回收的对象,析构方法、如何判断无用对象、Generation的概念?

11.类成员有几种可访问性?

12.什么时候使用Assert 。可以谈谈自己的经验和习惯做法。

是值类型还是引用类型?

答:是引用类型对象,它的对象在初始化之后就不能再修改,任何试图修改字符串对象的动作将导致一个新的字符串对象的生成。

StringBuilder类型有何作用?

答:StringBuilder采用构造器设计模式的思想高效地构造一个字符串对象,在构造过程中StringBuilder可以有效避免临时字符串对象的生成。一旦StringBuilder的ToString方法被调用后,最终的字符串就被生成,而随后的操作将导致一个新的字符串对象的分配。因为字符串对象的不可修改性,StringBuilder还经常被用来和非托管代码交互。

如何在String和Byte[]对象之间进行转换?

答:字符串和字节数组的转换依赖于编码方式的使用,不同的编码标准将使用不同的算法进行。ng类型提供了大部分常见的编码算法支持,用以进行字符串和字节数组之间的转换。

简述BASE64编码的作用以及C#中对其的支持。

答:BASE64编码是一种用于混淆明码的编码方式,其算法是把原先的8位字节数组顺序分配到新的6位字节数组中,再在每个字节的高2位填充0来组成新的8位直接数组。在.net中,Convert类型可以用来进行BASE64字符串和8位字节数组之间的转换。

SecureString的实例如何被分配和释放

答:String提供了加密的字符串类型。其对象会被分配在非托管的内存中,并且以加密的方式保存。对于SecureString的操作是逐字符的,SecureString会负责在操作时进解密和加密。SecureString实现了标准的 Dispose/Finalize方法,对象被释放时将先被全部置0,以保证机密信息不会在内存中驻留过长时间。

什么是字符串池机制?

答:字符串池致力于改善程序的性能。(主要是对多个字符串赋给相同值的时候,如果没有字符串池的机制,会在内存中产生多个引用,如果采用了字符串值,则对于相同的值,只存在一个应用,从而节省了内存空间)。CLR会保留程序中出现过的字符串对象的集合,并且

在需要新的字符串时,先检查已有的集合,在查找成功时返回已有对象的引用。

字符串池机制可以通过程序集元数据特性进行控制,C#默认的机制是打开字符串池机制。

Int[]是引用类型还是值类型?

答:数组类型是一族类型,它们都继承自,而又继承自。所有的数组类型都是引用类型。

.net数组和传统c++数组的区别?

答:最显著的一点就是,在net中,任何数据类型的数组本身是一个类型,而这个类型保证了数组使用的安全性。C++程序员会遇到数组越界的问题,在net中这个问题被解决,CLR会检测所有对数组的访问,任何试图访问数组边界以外的代码都会产生一个IndexOutofRange Exception的异常。

数组之间如何进行转换?

答:数组类型在符合条件的情况下可以进行隐式地转换,条件包括:数组维数必须相同:目标项目类型和源项目类型必须存在隐式或显式转换关系:源数组的项目类型不是值类型。

数组类型可以通过tAll方法进行内容转换,该方法需要使用者提供一个转换算法,以委托或者方法的形式传入tAll方法中。

解释泛型的基本原理

答:泛型类型于c++中的模板,允许程序员 定义更通用的类型和算法,并且在具体使用时再生成具体的封闭类型。所有带泛型参数的类型都是一个开放式类型,它不能被实例化,但具备所有封闭类型的其他特性,本质上,它和封闭类型没有区别。

什么是泛型的主要约束和次要约束

答:每个泛型参数可以有至多一个主要约束,泛型的主要约束是指指定泛型参数必须是或者继承自某个引用类型,有两个特殊的主要约束:class 和struct,分别代表泛型参数是引用类型和值类型。

每个泛型参数可以有无限个次要约束,次要约束和主要约束的语法基本相同,但它规定的是某个泛型参数必须实现所有次要约束指定的接口。

NET中是否可用标准模板库(STL)

答:Wintellect团队为.net开发了STL类库Power Collection。这个类库可以免费获得。鼓励使用标准模板库(STL)。

什么是流,net中有哪些常见的流

答:流是对字节集合对象的一种操作。Net中常见的流类型有FileStream,NetworkSteram,UnmanagedMemoryStream,MemoryStream

如何使用压缩流

答:ssion下定义了两个用于压缩数据的类型:DeflateStream 和GZipStream,两者都是流类型并且都继承自。两个类型的操作和其他流类型一样,非常简便。但相对于一些开源的压缩类库,算法的性能并不高,并且不支持调整压缩率。

Serializable特性有何作用

答:通过为类型添加Serializable特性,可以使对象申明可被序列化,即可被诸如BinaryFormmater等类型的对象序列化和反序列化。

.NET提供了哪几种可进行序列化操作的类型

答:.NET内建类型提供了三个可执行序列化和反序列化操作的类型:BinaryFormatter,SoapFormatter,XmlSerializer. BinaryFromater 和SoapForamtter可以对那些有Serializable特性的类型进行序列化和反序列化操作,除了由NonSerialized特性修饰的成员,两者将序列化所有其他的成员。而XmlSeriaalizer不需要对象类型申明了XmlSerializable特性,但它要求对象类型有一个显式的无参公共构造方法,并且它不能序列化对象的非公共成员和由xmlIgnore修饰的成员。

如何自定义序列化和反序列化的过程

答:通过实现ISerializable接口中的GetObjectData方法可以实现自定义的序列化,而通过添加带有SerializationInfo和StreamingContext参数的构造方法可以自定义反序列化的过程。

面试真题:

1.如何把一个数组复制到ArrayList里?反过来从ArrayList到数组呢?

参考微软官方文档中ArrayList类型的说明。

str=null; string str=”” 有什么区别,从内存分配的角度考虑。

Builder 有何作用? 在与非托管代码交互时也有其作用。

4.解释泛型有什么好处?

5.拥有这样一个字符串数组{“2”,”3”,”4”}。如何转换为整数数组?

考虑Array 的静态方法

6.什么是序列化?.Net中如何实现序列化?

7.什么是编码?什么是Unicode。

64编码主要应用在哪些场合?

9.字符串池是如何提高系统性能的?

10.加密字符串和普通字符串的类型有和不同?

是否存在不继承自类型的类?

答:通过运用的noautoinherit开关,可以生成不从继承的类型,这种类型不是安全的类型,不建议使用。但是,这样机制的存在,促使程序员在编写代码时不能随意地把任何对象看成的之类类型。

在中定义的三个比较方法的异同

答:三个比较方法是:

Static bool ReferenceEquals(object A,object B)

Static bool Equals(object A, object B)

Virtural Equals(object obj)

静态方法ReferenceEquals实现了引用比较。静态Equals方法实现了比较高效地调用实例Equals方法的功能。实例Equals方法是一个虚方法,默认的实现是引用比较,类型可以根据需要重写实例Equals方法,值类型的基类ValueType重写了Equals方法,实现了内容的

比较。

如何重写GetHashCode方法

答:Object中GetHashCode的算法保证了同一对象返回同一HashCode,而不同对象则返回不同的Hashcode,但对于值类型等视内容相等的对象为相等对象的类型时,默认的GetHashCode算法并不正确。

重写GetHashCode必须保证同一对象无论何时都返回同一hashcode值,而相等的对象也必须返回相同的值。并且在此基础上,保证Hashcode尽量随机散列分布。

DateTime 如何存储时间?

答:DateTime结果内部存储一个64位长的整数,其中的低62位用来代表时间,它表示从0001年1月1日0时0分0秒开始到表示的时间经过百毫微秒数。

如何在DateTime对象和字符串对象之间进行转换

答:DateTime可通过ToString方法来格式化输出到字符串,而相反地,TryParse和Parse方法则从一个字符串中得到信息并构造一个DateTime对象。

什么是UTC时间,如何转换到UTC时间?

答:UTC是格林尼治标准时间(GMT),它是0度经度测量到的时间。通过ToUniversalTime和ToLocalTime方法可以在本地时间和UTC时间之间进行转换。两个方法在转换时会相应地设置保存时间的64位整数的高两位标志,并且转换的算法考虑了夏令时。

IFormattable 和 IFormatProvider的使用

答:IFormattable 接口帮助实现了多样式的格式化输出。IFormattable得到ToString方法接受一个代表格式的字符串参数,通过对这个参数的分析来进行格式化输出。另外,ng方法接受一个IFormatProvider类型的参数,以允许类型的使用者提供格式化的方法。

如何告诉类型格式化输出的方式

答:IFormatProvider让类型的使用者有机会提供格式化的方法。GetFormat方法返回一个格式化器,在通常情况下,该格式化器的类型是一个实现了ICustomFormatter的类型对象。IFormatProvider接口和IFormattable接口一起可以实现灵活强大的格式化输出。

如何操作文件和文件夹

答:.Net内建类型中提供了FileInfo和DirectoryInfo 两个类型,分别用于操作文件和文件夹。有别于File和Directory类型,FileInfo和DirectoryInfo主要的功能在于操作文件夹和文件夹在文件系统中的结构,完成诸如创建、复制、读取信息、移动、判断是否存在、删除等功能。

如何实现文件和文件夹的监控功能

答:.Net提高了FileSystemWatcher类型来实现文件系统的监控。程序员通过设置监控目录,监控类型和回调方法,就可以方便地实现监控功能。但需要小心FileSystemWatcher缓存溢出的情况。

.Net提供了哪几个定时器类型? (和线程同步,多线程编程有关)

答:内建类型提供了三个定时器类型,分别是:

,

用户窗体设计,并且运行在窗体线程之中,这导致了其计时不准确和遗漏节拍的特点;ingTimer类型的每个计时回调都在一个工作线程上执行,其计时相对准确,可以视为的一个包装,其类型设计相对古老,笔者不建议读者使用该定时器。

.Net的内建定时器类型是否会发生回调方法重入?

答:在.net的内建定时器中,和两个类型可能发生回调方法重入的问题,而则不存在这个问题。

在定时器设计时,需要考虑是否需要为回调方法加锁和如何加锁,原则上被加锁的代码越少,则对效率的影响也越小。

面试真题:

(myString);这行代码有什么问题?使用TryParse方法避免异常。

,==,ReferenceEquals 如何区别使用?

3.简述DateTime和长整型的转换算法。DateTime本身使用长整型存储时间。

时间和本地时间如何转换?

hCode方法有何作用?什么时候会用到该方法?

提供了哪几种定时器?各自的定时原理是什么?

设计小组为什么要设计这个类型?

8.谈一谈格式化输出的常用场合。

请解释委托的基本原理

答:委托是一类继承自te的类型,每个委托对象至少包含了一个指向某个方法的指针,该方法可以是实例方法,有可以是静态方法。委托实现了回调方法的机制,能够帮助程序员设计更加简洁优美的面向对象程序。

委托回调静态方法和实例方法有何区别?

答:当委托绑定静态方法时,内部的对象成员变量_target将会被设置成null,而当委托绑定实例方法时,_target会被设置成指向该实例方法所属类型的一个实例对象,当委托被执行时,该对象实例将被用来调用实例方法。

什么是链式委托?

答:链式委托是指一个由委托串成的链表,当链表上的一个委托被回调时,所有链表上该委托的后续委托将会被顺序执行。

链式委托的执行顺序是这么样的?

答:链式委托的执行顺序是:按照委托链上的顺序从当前委托开始依次往后执行。如果有需要,可以通过GetInvocationList()方法来获得委托链上所有需要执行的委托,并且按照任何希望的顺序去执行它们。

可否定义拥有返回值的方法的委托链

答:委托可以是带有返回值的方法,但多于一个带返回值的方法被添加到委托链中时,程序员需要手动地调用委托链上的每个方法,否则委托使用者只能得到委托链上最有一个被执行方法的返回值。

委托通常可以应用在那些场合

答:委托的应用场合通常是任务的执行者把细节工作进行再分配,执行者确切地知道什么工作将要被执行,但却把执行细节委托给其他组件、方法或程序集。

请解释事件的基本使用方法

答:事件是一种使对象或类能够提供通知的成员。客户端可以通过提供事件处理程序为相应的事件添加可执行代码。事件是一种特殊的委托。

事件和委托有何联系

答:事件是一个委托类型,该委托类型的方法无返回值,并且拥有两个参数,object与TEventArg。事件的订阅和取消都是基于委托链表来实现的。

如何设计一个带有很多事件的类型

答:当某个类型包含较多的事件时,可以考虑集中把所有事件的委托链表存储在一个集合之中,这样能做到有效地减少对象的大小,因为在实际逻辑世界中一个对象使用所有事件的概率相对很低,.NET 的内建类型andlerList提供了这样一个存储事件集合的封装。

用代码表示如下情景:猫叫,老鼠逃跑,主人惊醒

答:在模拟实际场景的面试题中,使用事件进行设计往往能达到简单并且贴近场景的效果。笔者鼓励读者在理解事件的前提下,在设计中多尝试使用事件机制。

请解释反射的基本原理和其实现的基石

答:反射是一种动态分析程序集、模块、类型、字段等目标对象的机制,它的实现依托于元数据,元数据是存储在PE文件中的数据块,它详细记录了程序集或模块内部的结构、引用类型、程序集和清单。

.Net提供了哪些类型来实现反射

答:在tion命令空间下,net提供了丰富的实现反射机制的类型,可以达到读取元数据中所有信息并且动态创建类型对象的功能。详细的类型列表和使用方法请参考本节的分析问题。

反射的一些问题。

特性。

真题:

1.什么是反射?

2.在什么情况下使用过委托?

3。请概述一下事件和委托有什么不同?

4.你最常用的特性有哪些?

5.请介绍一个你设计过的自定义特性,为什么要使用特性?

6.反射机制的吸能如何?你会在什么情况下考虑使用反射?

7.请问动态地反射代码有何作用?

8.请使用代码描述kfc排队购买的场景

9.请介绍程序集的元数据中包含哪些内容。

.net高级特性:委托,事件,反射和特性。

.NET 多线程编程

请解释操作系统层面上的线程和进程

答:简单地来说,进程代表了一个正在运行的应用程序的实体,而一个进程中可包含1个或多个线程。

多线程程序在操作系统里是并行执行的吗?

答:在单cpu的计算机架构上,任何时候只可能存在一个运行的线程,操作系统通过快速地调度轮换使使用者感觉到多线程在同时执行。而在多cpu的架构上,则可能存在完全并行运行的线程,这取决于线程之间是否争用来其他的资源。

什么是纤程?

答:纤程是微软公司提出的轻量级线程的概念,一个纤程拥有自己的栈和寄存器状态。一个线程可以包含多个纤程,和线程由操作系统调度有所不同的是,线程内纤程的调度完全由程序员自己控制,操作系统的内核完全不会知道纤程的存在。在net架构中,线程的概念不一定和操作系统的线程对应,在有些情况下net中的线程对应一个纤程。

.Net中的多线程编程

答:.NET提供了类型封装了线程的操作,通过该类型,程序员可以手动地创建、查询、控制以及结束线程。

如何使用.NET的线程池

答:Pool类型封装了线程池的操作。每个进程都拥有一个线程池,.NET提供了线程池管理的机制,用户只需要把线程需求插入到线程池中,而不必理论后续的工作。所有线程池中的线程都是后台线程,它们不会阻碍程序的退出。

如何查看和设置线程池的上下限

答:ool 类型提供了查看和修改线程池上下限值的方法,在net2.0后,默认的线程池上限已经被修改得足够大而可以满足绝大部分系统的需求。在实际应用中,程序员应该避免无意义地修改线程池的阀值。

如何定义线程独享的全局数据(TLS)

答:线程本地存储是一种提供了线程独享的全局数据功能的机制。在NET中,可以使用Thread类型的SetData和GetData来操作TLS数据,同时NET提供了名为ThreadStatic的特

性来申明线程独享的数据。

如何使用异步模式读取一个文件(异步编程模式)

答:调用FileStream和BeginRead和EndRead方法可以实现异步读取文件。

如何阻止线程执行上下文的传递

答:线程的执行上下文是所有线程上下文的一个包装,在通常情况下,当前线程的执行上下文会自动地流入到新建的线程之中。程序员可以使用定义在pool类型中的UnsafeQueueUserWorkItem方法和定义在ExecutionContext类型中的SuppressFlow方法来阻止这样的流动。

多线程程序的线程同步

答:同步块是指net维护的同步块数组中的某个元素,负责提供线程同步的操作,当某个线程拥有了某个同步块时,其他线程就在试图访问该同步块时进入等待状态。同步索引是每个堆内对象都会分配的一个字段。

C#中的lock关键字有何作用?

答:C#中的lock关键字实质是调用和两个方法的简化语法,功能上其实现了进入和退出某个对象的同步。在通常情况下,可以通过lock一个私有的引用成员变量来完成成员方法内的线程同步,而通过lock一个私有的静态引用成员变量来完成静态方法内的线程同步。

可否使用值类型对象来实现线程同步

答:值类型的对象分配在堆栈上,没有同步索引字段,所以不能用来进行同步。即使使用了装箱机制,也会导致同步失败。对值类型使用lock关键字将导致一个编译错误,而对值类型使用 和方法,将导致一个运行时的错误。

可否对引用类型对象自身进行同步

什么是互斥体,Mutext类型和Monitor类型的功能有何区别?

面试真题:

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

考虑进程和线程的关系。

2.根据线程安全的相关知识,分析一下代码,当调用test方法时,i》10是否会引起死锁?并简要说明理由。

Public void test(int i)

{

Lock(this)

{

If(i>10)

{

i--;test(i);

}

}

}

注意值类型的参数传递方式。

3.后台线程和一般线程有何区别?

4.一共有几种方法定义在多线程间共享的数据?

5.使用lock使用和使用Mutex有何区别?

6.可否对值类型使用lock?

7.你在什么时候会考虑使用多线程技术?

8.使用Thread类型新建的线程是否来自与线程池?

应用开发

请解释以什么形式运行?

答:是作为一个ISAPI过滤器程序来运行的,同时它是一个NET CLR的宿主,从而实现了运行托管的服务器代码的功能。

常见HTTPcode有哪些?

答:200 请求结束

204服务器端实现了请求,但没有返回新的信息

401 访问就拒绝,无访问权限

404请求资源没有找到

500服务器端出错

HTTP code 是HTTP协议中服务器返回给请求端的一个状态码。

GET请求和POST请求有何区别?

答:HTTP协议中有两种常用的请求:GET和POST。GET请求把表单的数据显式地放在URL中,并且对长度和数据编码有所限制。POST请求把表单数据放在HTTP请求体中,并且没有长度的限制。

介绍的页面生存周期

答:页面的生存周期包含了PreInit,Init,InitComplete,LoadState,ProcessPostData,PreLoad,Load,PorcessPostData,ChangedEvents,PostBackEvent,LaodComplete,PreRender,PreRenderComplete,SaveState,SaveStateComplete,Render,Unload 这些步骤

1.初始化 PreInt,Init,InitComplete

包括初始化类对象,初始化主题页面等特性,判断是否是第一次访问页面等。

2.加载数据和页面 LoadState,ProcessPostData,ProLoad,Load,ProcessPostData。

程序员通常在Onload中编写页面初始化代码,最后会再次执行ProcessPostData,以处理load时候新添加的数据。

3.触发事件 ChangedEvents, PostBackEvent

比较viewSate数据和上一次回传的数据,觉得那些事件要出发,然后逐一触发。

4.保存状态并呈现页面 SaveState,SaveStateComplete,Render。首先页面会把编码保存所有的ViewState数据,然后将其嵌入到页面的一个隐藏控件中,接着转换所有控件标签并生成页面HTML,并且发送回客户端。

控件和页面

什么是静态页面,什么是动态页面?

答:静态页面是指不需要服务器代码额外处理,直接可以呈现给使用者的页面,常见的静态页面是html。相对的,需要服务器代码针对每个请求做处理的页面称为动态页面,ASP。Net中常见的动态页面是aspx。

请简述ViewState的功能和实现机制

答:ViewState用来存储页面范围内的数据,以保证用户在离开页面之前数据的持续性。实现上来说,ViewState被保存在页面内的一个隐藏控件内,并且提交到服务器后被提取使用。

Session有哪几种存储方式,之间有何区别,如何进行设置?

答:Session有四种存储方式,分别为存储在IIS进程中、状态服务器中、SQL Server数据库中和自定义程序中。除了准备必要的服务外(如SQL Server数据库服务器),还需要配置站点的文件进行设置。

如何嵌套使用GridView控件

答:GridView和其前身DataGrid一样,都支持模板列。程序员可以自定义模板列内的控件和排版样式,只要在一个模板列内再放入一个GridView控件,就可以实现Gridviewd的嵌套使用。

列举几种实现页面跳转的方法,并说明其实现机制

答:常用的跳转技术包括:ct,er,e,使用脚本进行跳转和直接使用超链接。

ct:迫使客户端跳转到指定的页面,最终跳转的仍是客户端,服务端无法保证。并不直接,需要一个额外的从客户端到服务器端的来回才能完成跳转操作。目标页面不受限制,可以实现从这个站点跳转到另一个服务器上另一个站点的功能。

er 。当前页面马上停止,直接进入新的页面并进行加载。与Redicret相比,不仅少了一个客户端到服务器端的往返,并且只能跳转到同一个站点的页面。

e:不是页面的跳转功能,而是页面的呼叫功能。

使用脚本,javascript。

(url)

使用超链接进行跳转

请解释<%#Eval(“sourec”)%>的功能和实现机制

答:Eval表达式实现了数据绑定的功能,在ASPNet2.0之后其表达式书写更加简洁,并且性能也没有下降。从实现上来说,类似<%#Eval(“source”)%>这样的表达式,通过从绑定数据栈顶端取得需要的绑定数据项,并进行数据绑定。

ObjectDataSource控件有何作用

答:ObjectDataSource扮演了双向数据绑定中传递元素的角色,在分层BS系统中通常作为业务逻辑层和页面显示层的中间衔接。关于ObjectDataSource的使用方法和功能。

如何使用正则表达式来验证一个上海市电话号码

答:为 021-d{8}$.在应用程序中有很多方法使用正则表达式来验证一个字符串。

介绍验证控件的功能和使用方法

答:验证是应用程序中经常遇到的一个请求。一共提供了6种和验证相关的控件,分别是:CompareValidator、CustomValidator,RangeValidator,RegularExpression

Validator,CustomValidator, ValidationSummary。

如何防止SQL注入攻击?

答:SQL注入式攻击是常见的一种攻击方法,主要利用的是系统设计的弊端。程序员在设计时需要考虑到注入式攻击的问题,避免直接使用用户输入拼接SQL语句,适当使用加密数据进行存储,并且在适当的场合使用存储过程。

面试真题

6相对与IIS5有什么改变?而II7相对于II6有什么改变?参考微软产品文档。

403代表什么含义?

3.两个不同的客户端访问一个站点,是否是同一个对象处理这两个请求?

了解的运行机制。

4.请解释什么是多层架构?什么是MVC?考察应聘者的网站架构经验。

5.公共网站经常受到哪些类型的攻击?

需要应聘者有较为丰富的网站支持经验。

n丢失的原因有哪些?需要了解session的运行机制。

和Session的实现原理是什么?

n有哪几种存储方法?你如何取舍?需要针对不同的系统需求进行分析。

9.你在什么情况下会考虑自定义控件? 考察应聘者的设计经验。

NET中的数据库开发

什么是关系型数据库?

答:关系型数据库是支持采用了关系模型的数据库,简单来收,关系模型就是指二维表模型。相对其他模型来说,关系型数据库具有理解更容易、使用更方便、维护更简单等优点。

关系型数据库的一些基本概念:

关系:理解为一张二维表,每个关系都具有一个关系名,就是通常说的表名。

元组:可以理解为二维表的一行,在数据库中被称为记录。

属性:理解为二维表的一列,在数据库中被称为字段。

域:属性的取值范围,就是数据库中某一列的取值限制。

关键字:一组可以唯一标识元组的属性。数据库中常称为主键,由一个或多个列组成。

关系模式:指对关系的描述,其格式为:关系名(属性1,属性2,…属性N)。在数据库中通常称为表结构。

如何通过SQL语句来实现行列转换?

答:行列转换的SQL命令通常需要依靠动态的SQL语句。

SQL语言基础:

Create ,alter,drop,grant,revoke,commit,rollback,insert,undate,delete,select

Create 创建一个表,并且同时设置表名字和表结构。

CREATE TABELE

( [NOT NULL],..);

建立索引

CREATE INDEX ON);

建立视图

CREATE VIEW[({,})] AS

ADD ;

修改表,指定主键

ALTER TABLE

ADD PRIMARY KEY;

修改表,删除主键

ALTER TABLE

DROP PRIMARY KEY

DROP

删除一个表

DROP TABLE;

删除一个索引

DROP INDEX

删除一个视图

DROP VIEW

GRANT 把特定权限赋给某用户

GRANT {,} ON {,} TO

{PUBLIC|GROUP|USERNAME}

REVOKE 收回权限

REVOKE {,}ON {,} FROM

{PUBLIC|GROUP|USERNAME}

COMMIT 当前事物提交

ROLLBACK当前事务回滚

INSERT 插入记录

INSERT INTO

[({,})] VALUES (

value>{})|

SET ={,=}[WHERE

查询记录

SELECT

SELECT [DISTINCT] FROM

WHERE ORDER BY

行列转换

在数据库设计时,为了适合数据的积累存储,往往采取直接记录的方式,在展示数据时,则希望整理所有记录并且转置显示。

SELECT derpartment

Sum(case mat when „mat1‟ then num else 0 end) [mat1],

Sum(case mat when „mat2‟ then num else 0 end) [mat2],

Sum(case mat when „mat3‟ then num else 0 end) [mat3],

FROM

GROUP By Deparment

支持哪几种数据源?

答:一共支持四个类别的数据源,分别是:SQL Server 数据库,Oracle 数据库,OLE DB 提供商和ODBC提供商。

请简要叙述数据库连接池的机制

答:对上层用户提供了数据库连接池的服务,使用完的数据库连接将被有选择地保持在数据库连接池中,以供下次使用。当用户以某个连接字符串申请数据库连接时,数据库连接池将尝试在池中寻找具有相同连接字符串的连接,并直接提供给用户。

如何提高连接池内连接的重用率。

答:为了提高数据库连接池的重用率,唯一的方法就是尽量保证系统访问数据库所使用的连接字符串不变。例如建立跳板数据库,使所有连接都首先尝试访问跳板数据库。另外,统一使用超级用户符号可以进一步统一连接字符串,但这为系统带来了安全上的隐患。

一个连接字符串可以包含哪些属性

答:连接字符串包含了丰富的可选属性,在进行数据库操作时,程序员应该对数据库连接字符串进行再三斟酌,不同的设置将适合不同的实际情况。

部分字段:

Connect Timeout/Connection Timeout

DataSource: Server,Address,Addr,NetWork Address

InitalCatalog Database

onnection有何作用

答:onnection解决了流读取模式下,数据库连接不能有效关闭的情况,当某个XXXDataReader对象在生成时使用了onnection,那数据库连接将在XXXDataReader对象关闭时自动关闭。

支持哪两种方式访问数据库

答:一共支持两种数据库访问方式,分别是连接式(DataReader)和脱机式(DataSet)。连接式的较适合大数据量并且不能准确预测需要读取多少记录的情况:脱机式的更适合进行小数据量的读取操作。

什么是强类型的DataSet

答:强类型DataSet是指那些固定结构的继承自DataSet的类型,相比于DataSet而言,强类型的DataSet具有访问方便,约束性强的特点,有利于数据访问层的隔离,也有利于把错误提前到编译阶段发现。

强类型DataSet的概念:

答:是指根据定义好的结构生成的DataSet类型。结构化的DataSet是一个继承自DataSet

的类型,每个结构化的DataSet都是一个强类型,它按照最初定义的结构严格限定内部数据。这样的结果是程序不鞥你动态地修改强类型DataSet结构,也不能插入与其结构不符合的表数据,优点在于任务错误的插入在编译阶段就能发现,而且数据的读取更加方便。

请解释SqlDataAdapter的基本工作机制

答:SqlDataAdapter使用内部四个SqlCommand类型的成员进行检索和更新操作。分别是SelectCommand,InsertCommand,UpdateCommand,DeleteCommand. Selectcommand成员可以在SqlDataAdapter构造时被构造,程序员可以手动地设置这四个成员来完全地控制SqlDataAdapter的行为。

如何自动生成SqlDataAdapter的更新命令

答:使用SqlCommandBuilder类型可以自动生成SqlDataAdapter中的更新命令。SQlCommandBuilder根据SqlDataAdapter类型中的SelectCommand对象来实现自动生成,但它的使用具有相应的限制。

如何实现批量更新的功能

答:使用UpdateRowSource属性来使得XXXDataAdapter的Update方法一次放松多行更新命令,恰当地设置可以有效地提高Update方法的执行效率。SqlClient和OracleClient的组件都支持这样的批量更新。

面试题:

1.概述ORM的与原理。(ORM是Object Relation Mapping的缩写)。

2.你如何设置数据库访问的超时时间?考察应聘者的实际项目经验。

3.那些原因导致不能使用数据库连接池内的连接?

4.。net代码中的事物和数据库中的事物是如何衔接传递的?此题有一定难度,应聘者需要对事物管理器有一定的了解。

5.强类型DataSet有什么优点,什么缺点?

6.如果让你设计上海市公安局的户籍数据库,针对如此庞大的数据量你有何具体的措施?

(针对大数据量数据库进行优化,连接,读取,更新各个方面)

7.在读取数据库数据时,你在DataAdpater和DataReader之间是如何取舍的?判断的依据是什么?

8.现在有一张Excel表,一个文本文件,一个Oracle数据库,你需要将这些数据源整合整合导入到一个SQL Server数据库中,你会采用什么方式?

(使用程序导入,使用SSIS)。

XML的应用和处理

什么是XML?

答:XML就是可扩展性标记语言,XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,XML及其简单且易于掌握和使用。

简述XML的常用领域及其优势

答:XML具有内容和结构分离、互操作性强、规范统一、支持多种编码格式的特点,正是由于这些优点,XML已经被应用在数据交换、WebService、电子商务、配置文嘉等多个领域之中。

XML中标签的作用

答:CDATA标签中的内容将被XML解析器忽略,通常会在其中存放大量带有<或>等特殊字符的数据内容。需要注意的是,不能是CDATA标签内的字符串带有]],否则XML解析器会将其当成CDATA标签的结束,从而使其后面的内容引发解析时的错误。

XML规范是否允许空的属性值

答:XML文档的属性值可以包含空值,但双引号和等号不能省略。

XML中如何处理诸如“<”的字符

答:“<”字符在XML文档中具有二义性,需要被替换成“<”

“&” : “&”

“<” “<” “>” “>” “”” “"” “#x0020” “ ”

XML中的命名空间如何使用

答:命名空间被用来模块化XML文档中的元素,它以如下形式定义:xmlns:namespace-prefix=”namespace”.当解析器试图读取特定命名空间下的节点时,需要制定命名空间的名称。

使用NET组件读写XML

答:.NET中支持XML文档操作的类型都定义在命令空间之下。直接操作XML的类型基本可以分为两类,一类是对XML的读写类型,另一类是DOM的支持类型。这两种类型的取舍要视系统的实际情况而定。

如何使用XmlDocument类型操作XML文档的节点和属性

答:使用xmlDocument类型可以自由地操作文档的节点和属性。

如何使用XPath来指向带有属性的节点

答:在Xpath中,@字符被用来选取属性值,具体的语法是:节点名[@属性名=‘属性名’]

在NET中如何验证一个XML文档的格式

答:经过W3C组织的推荐,XSD已经成了最标准和通用的XML结构定义语言。在.NET中,XmsReader支持使用XSD文件来验证XML文档是否符合特定的格式。程序员需要做的是为其设置包含指定XSD文件的XmlReaderSetting对象,并且遍历XML文档。

问题:

Net中xml文档和关系模式如何转换。

利用XSTL处理XML文档。

如何使用XSLT中的模板。

如何在XSLT文档中调用其他XSLT文档。

如何在代码中使用XSLT文档。

面试真题:

有哪些解析技术?区别是什么?有DOM,SAX,STAX。

2.你在项目中用到了XML技术的那些方面?如何实现的?

3.请介绍你通常采用哪几种方式读取一个XML文件。

4.使用XSLT转换xml文档的效率如何?

文档的默认编码什么?它支持其他的编码吗?

6.当你设计一个XML文档时,如何在节点的属性和子节点之间进行取舍?换言之,什么数据你认为应该作为一个节点的属性,而什么数据你认为应该作为一个节点的子节点?

是如何处理“<”这样的字符的?

8.如何使用XML来传递二进制文件。考虑使用CDATA标签按。

语句是否可以带有条件判断式?考察XPATH基本语法。

10.使用XPATH和正则表达式性能上哪个更好?如何进行取舍?

WebService的开发与应用

SOAP和Web Service 的基础概念

答:SOAP全称:简单对象访问协议(Simple Object Accesss Protocol),SOAP以XML形式提供了一个简单,轻量的用于在分散或分布环境中交换结构化和类型信息的机制。SOAP协议定义了交互的方式,但并未规定时限协议的环境和技术细节。

什么是WSDL,有何作用?

答:WSDL是Web服务描述语言,它是一种符合XML语法规范的语言,用以描述服务器端提供的Web Service方法,其中包括方法的名称、参数数量、各个参数的类型以及返回的类型等信息。一个WSDL文件可以完全地描述整个服务器所提供的Web Service。

Web Service 中如何处理附件

答:根据XOP规范(XML二进制打包),所有的字节信息都可以从SOAP消息中剥离出来,而成为独立的MIME体来发送。使用MTOM,SOAP消息包会以MIME Multipart/Related XOP消息包的格式传输,字节数组类型的数据被自动地剥离,而放入新的 MIME体中,以便优化和加密机制可以实行。

MTOM 消息传输优化机制(Message Transmit Optimized Mechanism)

MIME("Multipurpose Internet Mail Extensions" 多功能Internet 邮件扩充服务)

如何在NET中创建Web Service

答:在NET中,可以使用内建类型WebService和WebMethod特性来实现WebService,这种方法使得程序员完全不需要处理和通信有关的工作,而将注意力集中在逻辑工作上。为了获得更大的灵活性,程序员也可以通过IHTTPRequest接口来实现定义的asmx资源请求处理类型。更进一步的,程序员可以自定义资源文件和处理程序,来实现完全自定义的Web

Service,只需要确保所有的返回都符合SOAP协议即可。

WebMethod特性包含哪些属性,有何用处

答:WebMethod一共包含6个属性,分别为BufferResponse,CacheDuration,Description,EnableSession,MessageName TransactionOption

如何生成Web Service代理类型。

答:Web Service代理类是指负责SOAP通信的代理类型,这允许程序员通过调用本地的Web

Service代理类型来访问Web Service服务器的目的。在NET中,可以通过使用

工具或者添加Web引用来生成Web Service代理类型,后者可以在服务器端有所变动后方便地更新代理类型。

请简述.NET中WEB Service的异常机制。

答:SOAP规定,一个SOAP消息中只能存在于一个fault节点来包含错误消息。在NET框架中,Web Service服务端抛出的异常,最后多会被捕捉并且装入一个SoapException对象中,此对象会被放入fault节点并且传输回客户端。如果客户端使用NET自动生成的代理类,这会解析fault节点并且重新抛出SoapException异常。

请简要介绍WS-Security的签名机制

答:WS-Security签名是使用XML签名生成的。SOAP消息中的每个元素就都需要单独进行签名。签名后的消息机会无法被篡改。消息签名不能禁止外部各方查看消息内容。使用签名,SOAP消息的签名的接收方可以知道已签名的元素在路由中未改变。只要可能,就应当使用XML签名对消息进行签名。

WS-Security规范申明了哪几种身份验证的方法

答:WS-Security规范可以支持无数种身份验证的方式,但在规范中说明如何使用的有三种方式,分别是用户名密码方式,X.509证书方式和Kerberos认证协议方式。

面试真题:

1.对Web服务的请求是否可以穿越防火墙?

协议是否支持加密?

3.在NET中,Web服务是否可以禁止客户端访问其WSDL定义?

4.你是否使用过WSE组件?该组件有何作用?

5.请概述MTOM。

6.在定义一个Web服务是,什么样的类型可以作为Web服务方法的参数?

7.在Web服务的服务端产生的异常,如何发送给客户端?参考SOAP协议定义。

8.你是否定义过和非NET系统交互的Web服务,遇到过什么困难?

9.请介绍你在Web服务中使用哪些身份验证的方法?你为何选择该方法?

10.你认为Web服务系统的设计和一般面向对象系统设计有何不同?

.NET Remoting 分布式应用开发

请简要介绍.NET Romoting的运行机制

答:NET Remoting 是一种跨应用程序域的远程对象访问技术。

请列举NET Romoting机制中哦你个有哪些组件可以扩展替换

答:包括: 通道、格式化器、真实代理、消息接收器和消息

请简述NET Romoting 生存周期机制

答:NET Romoting使用分布式垃圾回收机制来管理远程对象的生存周期。当客户端需要使用远程对象时,就需要对其进行租借,当租借到期时,该远程对象就不能再被访问,

请介绍服务端激活模式和客户端激活模式的区别

答:主要的区别如下:

服务端激活远程对象是在调用对象方法的时候,而客户端激活远程对象是在客户端请求的时候。

客户端激活可以调用自定义的构造方法,服务端激活只有Publish方式才能够使用自定义构造方法。

客户端激活模式一旦获得客户端的请求,将为每一个客户端都建立一个实例引用。

问题:

请简述Remoting中有哪几种远程调用方式

Remoting机制中如何处理以ObjRef为参数的方法调用

请简述Remoting中配置文件的使用

如何在客户端和服务端共享远程对象类型

面试真题

1.请谈一谈你对NET Remoting技术的理解,什么时候会考虑使用?

ng系统使用什么协议来传递消息?

ng技术是否可以在Internet中使用?

ng系统时候可以与非NET系统进行交互?

5.请概述remoting系统对交互类型有何要求?

6.你认为在Remoting系统中垃圾回收机制和一般的系统有何不同?

7.请问如何配置消息序列化的方式?如何扩展序列化方式?

8.请谈一谈你对Remoting和Web服务的认识,你认为两者的区别?系统设计时你如何取舍?

9.你一般如何使得客户端和服务端共享交互的类型定义?

.NET中的单元测试

请简述单元测试的作用和其优点

答:单元测试时在软件开发过程中要进行的最低级别的测试活动,在单元测试活动中,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。一个尽责的单元测试方法将会在软件开发的某个阶段发现很多的bug,而在那个时候修改这些bug的成本也很低,在软件开发的后期,bug的发现和修改将会变得更加困难,并要消耗大量的时间和开发费用。无论什么时候做出修改,都要进行完整的回归测试,在生命周期中尽早地对软件产品进行测试将使效率和质量得到最好的保证。在提供了经过测试的单元情况下,系统集成过程将会大大简化。

请举例说明TDD开发方式的流程

答:TDD 全称是测试驱动开发(Test drived development),其基本思想是通过测试用例的开发来驱动开发流程。在需求分析完毕后,将直接进行测试用例开发阶段,通过用例的开发,可以初步确定模块的架构和对外的特性,随后通过模块的架构和功能的实现,逐步使得所有测试用例都得以通过。

请编写实现阶乘功能模块的测试用例

答:阶乘模块的测试用例包括常规功能测试、边界测试和非法输入测试。

如何使用NUNIT来实现单元测试

答:使用NUNIT来进行单元测试通常包含两个部分,第一部分是建立测试项目和测试用例。在测试类型上添加TestFixture特性,而在测试方法上添加Test特性,编译之后,使用界面程序运行编译好的测试项目,并且单击Run按钮进行单元测试。

如何对NUNIT的测试用例进行分类

答:NUNIT中可以使用Test的Category属性来针对测试用例进行归类,同时Suit特性可以用来打包多个TestFixture。

请解释SetUp,TearDown,TestFixtureSetUp 和TestFixtureTearDown

答:这四个特性可以用来进行测试的初始化和清理工作,SetUp和TearDown特性在每个带有Test特性的方法的执行前后被调用,而TestFixtureSetUp和TestFixtureTearDown特性在带有TestFixture的类型下所有的测试方法执行前后被调用。

面试真题

1.单元测试的目的是什么?它和其他类型的测试有何区别?

2.单元测试属于白盒测试和黑盒测试?

3.你如何看待TDD?

4.请编写车一个三角形是普通三角形、等腰三角形、等边三角形的流程图和测试用例。

5.你认为单元测试和代码编写是否应该由同一个程序员完成?为什么?

6.你在做单元测试时,是否会覆盖所有的代码分支?

7.请列举一些你常用的单元测试工具。

8.当集成测试中发现了一些单元测试没有发现的bug,你将如何处理?

9.你认为单元测试是否有必要?你认为单元测试的代码量和程序代码量的比例为多少较为合适?属于软件工程范畴。

代码和算法

请实现一个快速排序算法

请实现一个二分查找算法

请实现一棵二叉树的中序、后序遍历

请写出一个奇偶分割算法

请实现一个简单的最短路径算法

请编程实现斐波拉契数列问题

请设计窗口程序演示八皇后问题

面试真题:

1.一列数的规则如下:1,1,2,-1,1,-2,-1,-1,-2….求第30位数是多少,用递归算法实现,可以先找出规律,再写算法。

2.10层楼的电梯,每层都有1个钻石,只允许拣一次,请用最简单的算法,取出最大的钻石。

3.从N个数字里找出第K个大的,要求时间复杂度为O(N)。注意只要需要找出第K个大的。

4.编写反转字符串的程序,要求优化速度,优化空间。

5.在链表里如何发现循环链接?

6.写一个算法生成n位编码的编码串(结果有多种,任意一种都可以接受)并且符合如下条件:相邻的两个编码之间有且只有一位不同,并给出时间与空间复杂度。

比如2位的二进制编码生成的编码串: 00 01 11 10

比如3为的二进制编码生成的编码串: 001 011 111 101 100 110 010 000

7.有100个有序数组,每个数组包含了100个整数,给出一个算法合并这些数组到一个有序数组中,该算法中只能使用一个数组变量作为临时变量。

8.在拥有1GB内存的情况下,输入一个包含了10亿个整数的文件,随意输出一个不包含在该文件中的整数,并考虑只拥有10MB内存的情况。(内存的限制是关键)

9.输入一个长度为N的整数数组和一个整数K,输出该数组所有长度为K的子集。

本文发布于:2024-01-28,感谢您对本站的认可!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:类型方法使用对象进行

发布评论

评论列表(有0条评论)
    福州电脑网_福州电脑维修_福州电脑之家_福州iThome

    福州电脑网_福州电脑维修_福州电脑之家_福州iThome

    福州电脑维修网(fzithome.com)专业的电脑维修,笔记本维修,上门维修各种电脑,笔记本,平板等,快速上门.电脑知识频道内容覆盖:计算机资讯,电脑基础应用知识,各种电脑故障维修学习,电脑外设产品维修维护,病毒,软件,硬件,常识.