31.谈谈对WSE的认识。
Web Services Enhancements 2.0 for Microsoft .NET (WSE)是一个用来建设Web服务的.NET类库,它支持最新的Web服务协议
(包括WS-Security、WS-SecureConversation、WS-Trust、WS-Policy、WS-SecurityPolicy、WS-Addressing和 WS-Attachments)。
WSE可使开发人员跨平台建设可升级的、安全的Web服务。它支持用传输的方式发送SOAP消息,而不是HTTP。另一个特点是具有建立SOAP路
由器的功能,SOAP消息被发送给SOAP路由器,路由器再将工作交付给托管该服务的Web服务器。
32. 你用过哪些版本控制工具
————–各位同学兄弟可以根据自己的实际情况,谈论一些自己在使用这些工具时所遇到的问题以及体会
TFS(ASP.Net)、cvs、svn。
33. 在开发中你利用那些工具进行单元测试和模块测试
NUNIT和PDM.页面测试 httpunuit
34.如何进行Bug管理
由一个BUG跟踪平台,提供该程序的各个模块的BUG,以及级别,以及解决时间等信息
35. 如何生成和管理开发文档
一般用NDOC来生成文档,大部分文档主要还是Word为主。主要是各个模块以及版本的控制等
36.请用代码简单描述一下Singleton、抽象工厂、策略模式、Composite(任选一个)的设计模式的概念(代码题)
Singleton 单一模式所有类共享一个实例
下面这种实现方式对多线程来说是安全的,同时线程不是每次都加锁,只有判断对象实例没有被创建时它才加锁,有了我们上面第一部分的里面的分析,我们知道,加锁后还得再进行对象是否已被创建的判断。它解决了线程并发问题,同时避免在每个 Instance 属性方法的调用中都出现独占锁定。它还允许您将实例化延迟到第一次访问对象时发生。实际上,应用程序很少需要这种类型的实现。大多数情况下我们会用静态初始化。这种方式仍然有很多缺点:无法实现延迟初始化。
//author:renfuming
public sealed class Singleton
2{
3 static Singleton instance=null;
4 static readonly object padlock = new object();
6 Singleton(){}
10 public static Singleton Instance{
12 get{
14 if (instance==null){
16 lock (padlock){
18 if (instance==null){
20 instance = new Singleton();
21 }
22 }
23 }
24 return instance;
25 }
26 }
27}
抽象工厂(工厂方法)
using System;
//author:renfuming
namespace TestStrategy
{
public interface IFactory
{
void Method();
}
public class MyProductA:IFactory
{
public MyProductA()
{
Console.WriteLine(“已经生产产品A”);
}
public void Method()
{
Console.WriteLine(“实现产品A的具体功能!”);
}
}
public class MyProductB:IFactory
{
public MyProductB()
{
Console.WriteLine(“已经生产产品B”);
}
public void Method()
{
Console.WriteLine(“实现产品B的具体功能!”);
}
}
public class CreateProductAFractory
{
public static MyProductA CreateProductA()
{
return new MyProductA();
}
}
public class CreateProductBFractory
{
public static MyProductB CreateProductB()
{
return new MyProductB();
}
}
public class TestFactory
{
public static voidMain(string[] args)
{
IFactory ifact=CreateProductAFractory.CreateProductA();
ifact.Method();
Console.WriteLine(“————————————–“);
ifact=CreateProductBFractory.CreateProductB();
ifact.Method();
}
}
}
策略模式:属于对象行为型模式,主要针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得他们可以相互替换。策略模式适合用于当一个应用程序需要实现一种特定的服务或者功能,而且该程序有多种不同的实现方式可以使用时使用。
策略模式中有三个对象:
1、 环境对象:该类中实现了对抽象策略中定义的接口或者抽象类的引用。
2、 抽象策略对象:他可以又接口或者抽象类进行实现
3、 具体策略对象:他封装了实现对同一动作不同功能的不同算法;
利用策略模式构建的应用程序,可以根据用户配置等内容,选择不同算法来实现应用程序的功能,具体的选择由环境对象来完成。采用这种方式可以避免由于使用条件语句而带来的代码混乱,提高应用程序的灵活性和条理性。
using System;
//author:renfuming
namespace TestStrategy
{
public interface Strategy
{
void PrintCount(string fruitName,int count);
}
public class MyChoilceA:Strategy
{
public void PrintCount(string fruitName,int count)
{
Console.WriteLine(“{0}实现5折后的价格是:{1}”,fruitName,count*0.5);
}
}
public class MyChoiceB:Strategy
{
public void PrintCount(string fruitName, int count)
{
Console.WriteLine(“{0}实现6折后的价格是:{1}”,fruitName,count*0.6);
}
}
public class MyChoiceC:Strategy
{
public void PrintCount(string fruitName, int count)
{
Console.WriteLine(“{0}实现7折后的价格是:{1}”,fruitName,count*0.7);
}
}
public class ChoiceContext
{
Strategy objStrategy;
public ChoiceContext(Strategy obj)
{
this.objStrategy=obj;
}
public void Execute(string name,int count)
{
this.objStrategy.PrintCount(name,count);
}
}
class MyTestClass
{
[STAThread]
static voidMain(string[] args)
{
ChoiceContext objA=new ChoiceContext(new MyChoilceA());
objA.Execute(“苹果”,1000);
ChoiceContext objB=new ChoiceContext(new MyChoiceB());
objB.Execute(“香蕉”,1000);
ChoiceContext objC=new ChoiceContext(new MyChoiceC());
objC.Execute(“橘子”,1000);
}
}
}
上面的例子是我自己写的,有不足之处,请自己网上更正!
37.如果你是一位软件架构师,您将如何去搭建一个符合n-tie的架构?并请描述一下您搭建的每一层的作用。(注意:请您考虑项目中
有WebService的情况)
主要根据实际情况来决定搭建的层数以及各层的规格。 一般情况下,可如下搭:
数据层:主要提供数据服务,该层继承实体的接口并定制自己的数据提取和存储。并根据数据库类型如sqlserver、oracle等来建立此层服务。执行逻辑我个人偏好采用存贮过程。
业务层:由于定制的实体的属性以及操作实体的方法已由数据层获得和执行,故业务逻辑组件对此实体进行组合,以满足上层对业务逻辑组件的调用,webservice也是建在此层,以用于提供数据服务和逻辑执行。
表示层:一般定制不同的容器控件,以用于加载从业务层不同类型的数据便于呈现。当然也要设置此层的风格以及各种显示设置,webservice显示页面建在层,通过加载对指定目录的webservice提供的方法来呈现。
38.可否简要的介绍asp.net 2.0 Membership,WebPart和C#的匿名函数和泛型等你认为.net 2.0自己感兴趣的内容,希望可以简要地阐述其中的特点(本题非常的重要)
1 Membership:成员管理主要提供了一套对用户信息、用户角色、用户配置信息的用户系统。通过MembershipConfigHandler加载配置文件
中公有的基础信息,对配置文件中的信息进行了严格的边界检查和类型检查。通过MembershipProvider提供了实现membership的抽象方法以
及配置信息。由SqlMembershipProvider继承MembershipProvider来实现sqlclient的数据提供服务。业务和实现相剥离,以利于扩展。
2 WebPart:主要提供页面布局和自定义以及换皮肤的功能。通过定义主题(Theme)来决定整体的布局风格,以及版面通过设定不同的区域(Zone)来
决定版面各块的区域设置。通过不同的skin和css来确定风格。让用户能够保存自己的个人设置以及恢复默认设置的功能。
3 匿名函数:使用匿名方法可以减少因实例化委托所需要的开销,1.0中使用委托必须实例化委托并且必须将所调用的类和方法作为参数传入也
即命名方法,当然如果所调用的委托具有多变性应该还采用命名方法。
4 泛型:一般用于集合类。由于以前集合类数据都由framework隐式转化为object类型,这种开销很大。而用泛型,你就可以指定传入对象类
型,而用于生成强类型的数据集,这样各种操作就可以使用指定类型的特性和优势了,自然速度也快了很多。当然接口、方法、类等都同样使用这种方式
5 编译模型除了asp.net1.0支持的批编译,也提供新的编译模式。
6 在httpmodule和httphander的处理速度要比以前1.0要快。
7 在请求响应输出中,将缓冲区由asp.net宿主进程移到本机内存,可以消除资源瓶颈。
8 其缓存模型提供了数据库依赖和缓存后替功能。
9 与IIS6.0集中能提供更好的性能,主要体现在缓存和缓冲操作上。
39.Asp.net中的内建对象
Page对象:Web Form 网页在执行的时候会被编译成Page 对象,Page对象通知来设置与网页有关的属性、方法和事件;
Response对象:用于服务器端输出数据到客户端;
Request对象:用来捕获由客户端返回服务器的数据;
Server对象:提供服务器端最基本的属性和方法;
Application对象:用来记录客户端共享的变量,作用于整个应用程序运行期;
Session对象:用来记录客户端的专用变量,作用于用户会话期;
Cookies对象:为Web应用程序保存访问者相关信息.
40..NET具有跨平台的性质吗?现在是否可以在UNIX平台上广泛的应用?
INET工具实现.NET跨平台!
Stryon公司开发的iNET可以使应用程序和Web服务在Visual Basic 和C#下开发,并且可以发布于任何支持Java的运行环境,
网络主机也从IBM网络服务器扩展到Linux和Unix的服务器。有了iNET技术,开发人员既可以利用Visual Studio .net开发环境的优势,但是又不局限于Microsoft的运行环境。
41.写出global.asax文件的主要用途?
作用和asp的global.asa一样,它可以使我们执行asp.net应用程序一层的事件的代码,如:application_start等等,使你可以在这些事件中作一些自定义的处理;也可以定义应用程序一层的变量,如:Session等,这在整个asp.net应用程序中起作用。
42.列出web.config的常用的配置段,并对每个配置段进行简要的说明。
Web.config文件是一个XML文本文件,它用来储存 ASP.NET Web 应用程序的配置信息,它可以出现在应用程序的每一个目录中。当你通过C#新建一个Web应用程序后,默认情况下会在根目录下自动创建一个默认的Web.config文件,包括默认的配置设置,所有的子目录都继承它的配置设置。如果你想修改子目录的配置设置,你可以在该子目录下新建一个
Web.config文件。它可以提供除从父目录继承的配置信息以外的配置信息,也可以重写或修改父目录中定义的设置。
在运行时对Web.config文件的修改不需要重启服务就可以生效(注:<processModel> 节例外)。当然Web.config文件是可以扩展的。
appSettings包含自定义应用程序设置。
system.web 系统配置
compilation动态调试编译设置
customErrors自定义错误信息设置
authentication身份验证,此节设置应用程序的身份验证策略。
authorization授权, 此节设置应用程序的授权策略.
43,Override, Overload,的区别?
答:Override是重写的意思,它表示重写基类的方法,而且方法的名称,返回类型,参数类型,参数个数要与基类相同。
Overload是重载的意思,它表示重写基类的方法,但是只要方法名相同,别的可以不同。
44.简述一下webservice技术,在何种场合下适合使用这项技术?
Web Service 是一种新的web应用程序分支,他们是自包含、自描述、模块化的应用,可以发布、定位、通过web调用。Web Service可以执行从简单的请求到复杂商务处理的任何功能。一旦部署以后,其他Web Service应用程序可以发现并调用它部署的服务。
Web Service是一种应用程序,它可以使用标准的互联网协议,像超文本传输协议(HTTP)和XML,将功能纲领性地体现在互联网和企业内部网上。
45.C#说明一下虚函数和接口的区别?
虚函数是动态联编的基础,它是引入派生概念之后用来表现基类和派生类成员函数之间的一种关系的。虚函数在基类中定义,它也是一种成员函数,而且是非静态成员函数。
若一个实例方法的声明中含有 virtual 修饰符,则称该方法为虚拟方法;一个虚拟方法可以由派生类实现。实现所继承的虚拟方法的过程称为重写该方法。
虚函数的限制:
1.虚函数仅适用于有继承关系的类对象, 所以只有类的成员函数才能说明为虚函数.
2.静态成员函数不能是虚函数.
3.内联函数不能是虚函数.
4构造函数不能是虚函数.
5.析构函数可以是虚函数.
接口可以有静态成员、抽象、虚拟成员、属性和事件。实现接口的任何类都必须提供接口中所声明的抽象成员的定义。接口可以要求任何实现类必须实现一个或多个其他接口。
对接口有以下限制:
1.接口可以用任何可访问性来声明,但接口成员必须全都具有公共可访问性。
2.不能向成员或接口自身附加安全性权限。
3.接口可以定义类构造函数,但不能定义实例构造函数。
4.接口不能被实例化
46.什么是ASP.net中的用户控件
答:用户控件就是.ascx扩展名的文件,可以拖到不同的页面中调用,以节省代码.比如登陆可能在多个页面上有,就可以做成用户控件,但是有
一个问题就是用户控件拖到不同级别的目录下后里面的图片等的相对路径会变得不准确,需要自已写方法调整.
47.什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱? CTS、CLS和CLR分别作何解释?
答:托管代码:使用CLR编译语言编辑器开发编写的代码就叫托管代码。
装箱和拆箱:是把值类型转换为引用类型的过程,是隐式的,相反的过程就是拆箱,是显式的。
CTS是公共类型系统,它负责类型的映射,确保能两种语言之间能相互调用,譬如说,在C#中,整型是int,vb中整型是integer ,他们之间要实现通信,就通过CLR中的CTS将他们映射成Int32;
CLS是公共语言规范;
CLR公共语言运行库。
强类型系统:每个变量和对象都必须具有申明类型。
48.列举一下你所了解的XML技术及其应用
答:XML应用非常广泛,站与站之间的交流,WEB SERVICE都要用它.
如:序列化数据信息等
49.如何理解委托?
答: 委托类似与函数指针,定义了委托就可以在不调用原方法名称的情况下调用那个方法.
msdn2005中是这样解释的:
委托具有以下特点:
委托类似于 C++ 函数指针,但它是类型安全的。
委托允许将方法作为参数进行传递。
委托可用于定义回调方法。
委托可以链接在一起;例如,可以对一个事件调用多个方法。
方法不需要与委托签名精确匹配。
50.什么是SOAP,有哪些应用。
答:SOAP(Simple Object Access Protocol )简单对象访问协议是在分散或分布式的环境中交换信息并执行远程过程调用的协议,是一个
基于XML的协议。使用SOAP,不用考虑任何特定的传输协议(最常用的还是HTTP协议),可以允许任何类型的对象或代码,在任何平台上,以任何一种语言相互通信。这种相互通信采用的是XML格式的消息。
51.Params是什么含义?
Params是C#中的关键字,采用此关键字可以指定参数数目为可变; 在方法声明中的 params 关键字之后不允许任何其他参数,并且在方
法声明中只允许一个 params 关键字。
如:
public int fConvert(params int[] iParas)
{
}
52. C#中有没有运算符重载?能否使用指针?
有,C#中也有运算符重载,如对运算符“+”进行重载;
C#中也可以使用指针,但要声明为unsafe。
53.Internal修饰符有什么含义?
internal数据访问修饰符,表示对所修饰的成员在当前程序集内可以进行没有任何限制的访问;但在当前程序集外部则不能进行访问,其可访
问性级别低于public ,高于protected。
54. JAVA的代码是半编译半解释的,C#的代码是否也是这样
C#中对于程序代码的处理很类似于Java中的程序代码处理机制;也可以称作半编译半解释,
55. 私有程序集与共享程序集有什么区别?
一个私有程序集通常为单个应用程序所使用,并且存储于这个应用程序所在的根目录或子目录之中。
共享程序集通常存储在全局程序集缓存(Global Assembly Cache)之中。
56. 请解释进程与线程的区别?进程与程序的区别?
一般,一个应用程序对应于一个或多个进程,可以把进程看作是该应用程序在操作系统中的标识。
而一个进程通常由多个线程组成,而线程是操作系统为该应用程序分配处理时间的最小单元。
57. CLR与IL分别是什么含义?
CLR:公共语言运行时,类似于Java中的JVM,Java虚拟机;在.Net环境下,各种编程语言使用一种共同的基础资源环境。
CLR将直接与操作系统进行通信,而编程语言(如C#.NET)将尽量避免直接与操作系统直接通信,加强了程序代码的执行安全性,同时它为具体的编程语言提供了许多资源:
• 面向对象的编程模型(继承、多态、异常处理和垃圾收集等)
• 安全模型
• 类型系统
• 所有.NET基类
• 许多.NET Framework类
• 开发、调试和评测(profiling)工具
• 执行和代码管理
• IL到本地代码(IL-to-native)转换器和优化器
IL,中间语言,也称MSIL,微软中间语言。所有.NET源代码(不管用哪种语言编写)在进行编译时都被编译成IL。在应用程序运行时被即时(Just-In-Time,JIT)编译器处理成为机器码,被解释及执行。
58 .请解释ASP。NET中以什么方式进行数据验证
Aps.net 中有非空验证,比较验证,取值范围验证,正则表达式验证及客户自定义验证五大控件,另还有一个集中验证信息处理控件
59(1).WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回。
在web控件发生事件时,客户端采用提交的形式将数据交回服务端,服务端先调用Page_Load事件,然后根据传回的状态信息自动调用服务端事件
自动传回是当我们在点击客户端控件时,采用提交表单的形式将数据直接传回到
务端
只有通过自动传回才能实现服务端事件的机制,如果没有自动回传机制就只能调用客户端事件,而不能调用服务端事件
59(2).WEB控件及HTML服务端控件能否调用客户端方法?如果能,请解释如何调用?
可以调用
例如:<asp:TextBox id=”TextBox1″ onclick=”clientfunction();” runat=”server”>
</asp:TextBox>
<INPUT id=”Button2″ value=”Button” name=”Button2″
runat=”server” onclick=”clientfunction();”>
59.请描述一下ASP.NET页面的生命周期
1、对象初始化Init事件
2、 加载视图
3、处理回发数据 讲客户端传递到服务器端的数据进行处理
4、加载页面Load
5、回发更改通知RaisePostDataChanged
6、处理回发事件RaisePostBackEvent
7、预呈现PreRender 准备将控件绘制在页面中
8、保存状态SaveViewState
9、呈现视图Render 将控件绘制在页面中
10、处置Disposed:
11、卸载Unload
60. 请描述一下从浏览器到ASP.NET经历的步骤?
让我们从一个典型的ASP.NET Web请求的生命周期的起点开始.当用户输入一个URL,点击了一个超链接或者提交了一个HTML表单(form)(一个POST请求,相对于前两者在一般意义上都是GET请求).或者一个客户端程序可能调用了一个基于ASP.NET的WebService(同样由ASP.NET来处理).在Web服务器端,IIS5或6,获得这个请求.在最底层,ASP.NET和IIS通过ISAPI扩展进行交互.在ASP.NET环境中这个请求通常被路由到一个扩展名为.aspx的页面上,但是这个流程是怎么工作的完全依赖于处理特定扩展名的HTTP Handler是怎么实现的.在IIS中.aspx通过’应用程序扩展’(又称为脚本映射)被映射到ASP.NET的ISAPI扩展DLL-aspnet_isapi.dll.每一个请求都需要通过一个被注册到aspnet_isapi.dll的扩展名来触发ASP.NET(来处理这个请求).
依赖于扩展名ASP.NET将请求路由到一个合适的处理器(handler)上,这个处理器负责获取这个请求.例如,WebService的.asmx扩展名不会将请求路由到磁盘上的一个页面,而是一个由特殊属性(Attribute)标记为WebService的类上.许多其他处理器和ASP.NET一起被安装,当然你也可以自定义处理器.所有这些HttpHandler在IIS中被配置为指向ASP.NET ISAPI扩展,并在web.config(译著:ASP.NET中自带的handler是在machine.config中配置的,当然可以在web.config中覆盖配置)被配置来将请求路由到指定的HTTP Handler上.每个handler都是一个处理特殊扩展的.NET类,可以从一个简单的只包含几行代码的Hello World类,到非常复杂的handler如ASP.NET的页面或者WebService的handler.当前,只要了解ASP.NET的映射机制是使用扩展名来从ISAPI接收请求并将其路由到处理这个请求的handler上就可以了.