.net部分
1. 什么叫应用程序域?
操作系统和运行库环境通常会在应用程序间提供某种形式的隔离。例如,Microsoft Windows 使用进程来隔离应用程序。为确保在一个应用程序中运行的代码不会对其他不相关的应用程序产生不良影响,这种隔离是必需的。应用程序域为安全性、可靠性、版本控制以及卸载程序集提供了隔离边界。应用程序域通常由运行库宿主创建,运行库宿主负责在运行应用程序之前引导公共语言运行库。
2. CTS、CLS、CLR分别作何解释?
CTS:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库。1)CTS通用类型系统(Common Type System)
CTS不但实现了COM的变量兼容类型,而且还定义了通过用户自定义类型的方式来进行类型扩展。任何以.NET平台作为目标的语言必须建立它的数据类型与CTS的类型间的映射。所有.NET语言共享这一类型系统,实现它们之间无缝的互操作。该方案还提供了语言之间的继承性。例如,用户能够在VB.NET中派生一个由C#编写的类。我们可以将CTS 看成是所.NET 语言的superset (union),而符合CTS 的各种不同的语言,其实都只是CTS 的subset (intersection)。这些语言所写出来的程序,如果想要有最佳的相容性,以便互相调用(invoke) 或继承,这些语言之间就必需取得一个共同的subset,有共同遵守的规范,这就是CLS 。2)CLS通用语言规范(Common Language Specification)
很显然,编程语言的区别不仅仅在于类型。例如,一些语言支持多继承性,一些语言支持无符号数据类型,一些语言支持运算符重载。用户应认识到这一点,因此.NET通过定义公共语言规范(CLS:Common Language Specification),限制了由这些不同引发的互操作性问题。CLS制定了一种以.NET平台为目标的语言所必须支持的最小特征,以及该语言与其他.NET语言之间实现互操作性所需要的完备特征。认识到这点很重要,这里讨论的特征问题已不仅仅是语言间的简单语法区别。例如,CLS并不去关心一种语言用什么关键字实现继承,只是关心该语言如何支持继承。CLS是CTS的一个子集。这就意味着一种语言特征可能符合CTS标准,但又超出CLS的范畴。例如:C#支持无符号数字类型,该特征能通过CTS的测试,但CLS却仅仅识别符号数字类型。因此,如果用户在一个组件中使用C#的无符号类型,就可能不能与不使用无符号类型的语言(如VB.NET)设计的.NET组件实现互操作。
3)CLR公共语言运行库(Common Language Runtime)
简单地说,CLR是CTS的实现,也就是说,CLR是应用程序的执行引擎和功能齐全的类库 ,该类库严格按照CTS规范实现。作为程序执行引擎,CLR负责安全地载入和运行用户程序代码,包括对不用对象的垃圾回收和安全检查。在CLR监控之下运行的代码,称为托管代码(managed code)。3. 什么是受管制的代码?
你是不是指 Managed Code?官方翻译是“托管代码”,即在 .net 中,由公共语言运行环境进行管理的代码,它主要负责内存管理。受管制代码:Unsafe:非托管代码。不经过CLR运行。
4. 什么是强类型系统
强类型系统:RTTI:类型识别系统。5. 什么是装箱和拆箱?
1)从值类型接口转换到引用类型是装箱,从引用类型转换成值类型是拆箱。2)装箱是将值类型转换为值类型,拆箱就是将己转换为引用类型的值类型转换回来 装 箱 :int i=10; object o=i; 拆箱:int j=(int)o; 装箱和拆箱是非常影响程序性能的,在代码中应避免装箱和拆箱的操作。可以使用泛型来减少这样的操作。
3)装箱就是值类型转换为object类型,拆箱相反:object转化为值类型
6. 什么是重载?
重载就是方法名相同 而参数个数或参数类型不同。7. 值类型和引用类型的区别?
C#的值类型包括:结构体(数值类型,bool型,用户定义的结构体),枚举,可空类型。C#的引用类型包括:数组,用户定义的类、接口、委托,object,字符串。
数组的元素,不管是引用类型还是值类型,都存储在托管堆上。
引用类型在栈中存储一个引用,其实际的存储位置位于托管堆。为了方便,本文简称引用类型部署在托管推上。
值类型总是分配在它声明的地方:作为字段时,跟随其所属的变量(实例)存储;作为局部变量时,存储在栈上。
值类型在内存管理方面具有更好的效率,并且不支持多态,适合用作存储数据的载体;引用类型支持多态,适合用于定义应用程序的行为。
8. 如何理解委托?
委托是对函数的封装,可以当作给方法的特征指定一个名称。而事件则是委托的一种特殊形式,当发生有意义的事情时,事件对象处理通知过程。最常见的例子就是Tom猫叫“喵,我是TOM”,有两只老鼠Jerry和Jack就说“猫来了,快跑!"
你分析一下,这两个类是如何执行?
在Main函数中执行,当Cat的Shout触发时,Mouse就执行Run。那么如何让Shout触发?显然老猫不认识老鼠,也不会主动通知它们。
委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。
委托通过delegate来声明。而事件是说在发生其他类或对象关注的事情时,类或对象可通过事件通知它们。事件对象用event声明。
class Cat
{
private string name;
public Cat(string name)
{
this.name = name;
}
public delegate void CatShoutEventHandler(); //声明委托
public event CatShoutEventHandler CatShout; //声明事件,它的事件类型 CatShoutEventHandler
public void Shout()
{
// 喵
if (CatShout != null)
{
CatShout(); //若CatShout中有对象登记,则执行
}
}
Class Mouse
{
//name 字段
//name 属性
public void Run()
{
// 跑
}
}
static void Main()
{
Cat cat = new Cat("Tom");
Mouse mouse1 = new Mouse("Jerry");
Mouse mouse2 = new Mouse("Jack");
cat.CatShout += new Cat.CatShoutEventHandler(mouse1.Run);
cat.CatShout += new Cat.CatShoutEventHandler(mouse2.Run);
cat.Shout();
Console.Readkey();
}
那么事件里的(object sender,EventArgs e)里的两个参数做什么用?
我们增加一个类CatShoutEventArgs,让它继承EventArgs(包含事件数据的类的基类),这个子类的属性Name,就是猫叫事件触发,需要传递Cat对象的名字
Cat类中可以改这段:
public delegate void CatShoutEventHandler(object sender,CatShoutEventArgs args);
在Shout()做修改:
if (CatShout != null)
{
CatShoutEventArgs e = new ...();
e.Name = this.name;
CatShout(this,e); //将发送通知的自己以及需要的数据传递过去
Mouse类中改为:
Run( object sender, CatShoutEventArgs args)
{
//老猫 + args.Name + 老鼠名字 + 快跑
}
}
9. .net中读写数据库需要用到那些类?他们的作用?
sqlconnection 连接数据库
sqlcommand 执行T-SQL语句,或存储过程
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=ZJSJK;Integrated Security=True;uid=sa;pwd=198425");
string text = "insert into xmxxb(xmbh,xmmc,xmlxbh,xmsfbh) values('"+TextBox1.Text+"','"+TextBox2.Text+"','"+TextBox3.Text+"','"+TextBox4.Text+"')";
sqlCommand cmd = SqlCommand(text,con);ext + '","' + TextBox3.Text+ '","' + TextBox4.Text+ '")", con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
10. ASP.net的身份验证方式有哪些?分别是什么原理?
Windows 身份验证提供程序
提供有关如何将 Windows 身份验证与 Microsoft Internet 信息服务 (IIS) 身份验证结合使用来确保 ASP.NET 应用程序安全的信息。
Forms 身份验证提供程序
提供有关如何使用您自己的代码创建应用程序特定的登录窗体并执行身份验证的信息。使用 Forms 身份验证的一种简便方法是使用 ASP.NET 成员资格和 ASP.NET 登录控件,它们一起提供了一种只需少量或无需代码就可以收集、验证和管理用户凭据的方法。
Passport 身份验证提供程序
提供有关由 Microsoft 提供的集中身份验证服务的信息,该服务为成员站点提供单一登录和核心配置
11. 什么是Code-Behind技术?
就是代码隐藏,在ASP.NET中通过ASPX页面指向CS文件的方法实现显示逻辑和处理逻辑的分离,这样有助于web应用程序的创建。比如分工,美工和编程的可以个干各的,不用再像以前asp那样都代码和html代码混在一起,难以维护。
12. .net中读写XML的类都归属于那些命名空间?
System.Xml
13. 解释一下UDDI,WSDL的意义及其作用?
uddi 和wsdl这两个概念是编成的概念,你在编程的频道问这个问题会比较好
uddi是一种服务,你可以这样理解用户编写出来合理的服务放到微软提供的服务器上供其他人使用,但是你需要某种编程的服务怎么知道这种服务有没有,这时候uddi的作用就是来让你知道有没有这种服务。
wsdl是一种xml的描述语言,用来描述服务提供者提供的服务参数和输出,用户看着这个wsdl就可以知道是不是自己想要的服务。
具体你可以到百度百科中查看这个概念比较清楚。
uddi如下: http://baike.baidu.com/view/160665.htm wsdl如下: http://baike.baidu.com/view/160660.htm
14. 什么是SOAP,它有哪些应用?
SOAP(Simple Object Access Protocol ):简单对象访问协议,简单对象访问协议(SOAP)是一种轻量的、简单的、基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息。 SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。
0、什么是面向对象
面向对象OO = 面向对象的分析OOA + 面向对象的设计OOD + 面向对象的编程OOP; 通俗的解释就是万物皆对象,把所有的事物都看作一个个可以独立的对象(单元),它们可以自己完成自己的功能,而不是像C那样分成一个个函数; 现在纯正的OO语言主要是java和C#,C++也支持OO,C是面向过程的;
1. 简述 private、 protected、 public、 internal 修饰符的访问权限。
答 . private : 私有成员, 在类的内部才可以访问。 protected : 保护成员,该类内部和继承类中可以访问。 public : 公共成员,完全公开,没有访问限制。 internal: 在同一命名空间内可以访问。
2 .列举ASP.NET 页面之间传递值的几种方式。
答. 1.使用QueryString, 如....?id=1; response. Redirect().... 2.使用Session变量 3.使用Server.Transfer
3. 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。
答:public class MainClass { public static void Main() { Console.WriteLine(Foo(30)); } public static int Foo(int i) { if (i <= 0) return 0; else if(i > 0 && i <= 2) return 1; else return Foo(i -1) + Foo(i - 2); } }
4.C#中的委托是什么?事件是不是一种委托?
答: 委托可以把一个方法作为参数代入另一个方法。 委托可以理解为指向一个函数的引用。 是,是一种特殊的委托
5.override与重载的区别
答 : override 与重载的区别。重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要 Override 是进行基类中函数的重写。为了适应需要。
6.如果在一个B/S结构的系统中需要传递变量值,但是又不能使用Session、Cookie、Application,您有几种方法进行处理?
答 : this.Server.Transfer
7.请编程遍历页面上所有TextBox控件并给它赋值为string.Empty?
答: foreach (System.Windows.Forms.Control control in this.Controls) { if (control is System.Windows.Forms.TextBox) { System.Windows.Forms.TextBox tb = (System.Windows.Forms.TextBox)control ; tb.Text = String.Empty ; } }
8.请编程实现一个冒泡排序算法?
答: int [] array = new int [*] ; int temp = 0 ; for (int i = 0 ; i < array.Length - 1 ; i++) { for (int j = i + 1 ; j < array.Length ; j++) { if (array[j] < array) { temp = array ; array = array[j] ; array[j] = temp ; } } }
9.描述一下C#中索引器的实现过程,是否只能根据数字进行索引?
答:不是。可以用任意类型。
10.求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m
答: int Num = this.TextBox1.Text.ToString() ; int Sum = 0 ; for (int i = 0 ; i < Num + 1 ; i++) { if((i%2) == 1) { Sum += i ; } else { Sum = Sum - I ; } }
System.Console.WriteLine(Sum.ToString());
System.Console.ReadLine() ;
11.用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层?
答:一般为3层 数据访问层,业务层,表示层。 数据访问层对数据库进行增删查改。 业务层一般分为二层,业务表观层实现与表示层的沟通,业务规则层实现用户密码的安全等。 表示层为了与用户交互例如用户添加表单。 优点: 分工明确,条理清晰,易于调试,而且具有可扩展性。 缺点: 增加成本。 12.在下面的例子里 using System; class A { public A() { PrintFields(); } public virtual void PrintFields(){} } class B:A { int x=1; int y; public B() { y=-1; } public override void PrintFields() { Console.WriteLine("x={0},y={1}",x,y); } 当使用new B()创建B的实例时,产生什么输出? 答:X=1,Y=0;x= 1 y = -1
13.什么叫应用程序域?
答:应用程序域可以理解为一种轻量级进程。起到安全的作用。占用资源小。
14.CTS、CLS、CLR分别作何解释?
答:CTS:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库。
15.什么是装箱和拆箱?
答:从值类型接口转换到引用类型装箱。从引用类型转换到值类型拆箱。
16.什么是受管制的代码?
答:unsafe:非托管代码。不经过CLR运行。
17.什么是强类型系统?
答:RTTI:类型识别系统。
18.net中读写数据库需要用到那些类?他们的作用?
答:DataSet:数据存储器。 DataCommand:执行语句命令。 DataAdapter:数据的集合,用语填充。
19.ASP.net的身份验证方式有哪些?分别是什么原理?
答:10。Windwos(默认)用IIS...From(窗体)用帐户....Passport(密钥)
20.什么是Code-Behind技术?
答:代码后植。
21.在.net中,配件的意思是?
答:程序集。(中间语言,源数据,资源,装配清单)
22.常用的调用WebService的方法有哪些?
答:1.使用WSDL.exe命令行工具。 2.使用VS.NET中的Add Web Reference菜单选项
23..net Remoting 的工作原理是什么?
答:服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。
24.在C#中,string str = null 与 string str = “” 请尽量使用文字或图象说明其中的区别。
答:string str = null 是不给他分配内存空间,而string str = "" 给它分配长度为空字符串的内存空间。
25.请详述在dotnet中类(class)与结构(struct)的异同?
答:Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的.
26.根据委托(delegate)的知识,请完成以下用户控件中代码片段的填写:
namespace test { public delegate void OnDBOperate(); public class UserControlBase : System.Windows.Forms.UserControl { public event OnDBOperate OnNew; privatevoidtoolBar_ButtonClick(objectsender,System.Windows.Forms.ToolBarButtonClickEventArgs e) { if(e.Button.Equals(BtnNew)) { //请在以下补齐代码用来调用OnDBOperate委托签名的OnNew事件。 } } } 答:if( OnNew != null ) OnNew( this, e ); 27.分析以下代码,完成填空 string strTmp = "abcdefg某某某"; int i= System.Text.Encoding.Default.GetBytes(strTmp).Length; int j= strTmp.Length; 以上代码执行完后,i= j= 答:i=13,j=10
28.SQLSERVER服务器中,给定表 table1 中有两个字段 ID、LastUpdateDate,ID表示更新的事务号, LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号
答:Select ID FROM table1 Where LastUpdateDate = (Select MAX(LastUpdateDate) FROM table1)
29.根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?并简要说明理由。
public void test(int i) { lock(this) { if (i>10) { i--; test(i); } } } 答:不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,那么死锁会发生)
30.简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用。
答:WS主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传送提高效率。
31.公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达到以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进行重排视图中的所有行 (排序的方式如DataGrid相似)。根据您的知识,请简要谈一下您的思路
答:根据点击的列头,包该列的ID取出,按照该ID排序后,在给绑定到ListView中。
32.给定以下XML文件,完成算法流程图。
<FileSystem> < DriverC > <Dir DirName=”MSDOS622”> <File FileName =” Command.com” ></File> </Dir> <File FileName =”MSDOS.SYS” ></File> <File FileName =” IO.SYS” ></File> </DriverC> </FileSystem> 请画出遍历所有文件名(FileName)的流程图(请使用递归算法)。 答: void FindFile( Directory d ) { FileOrFolders = d.GetFileOrFolders(); foreach( FileOrFolder fof in FileOrFolders ) { if( fof is File ) You Found a file; else if ( fof is Directory ) FindFile( fof ); } }
33.写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的。
答:解1: select top 10 * from A where id not in (select top 30 id from A) 解2: select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)
34.面向对象的语言具有________性、_________性、________性
答:封装、继承、多态。
35.能用foreach遍历访问的对象需要实现 ________________接口或声明________________方法的类型。
答:IEnumerable 、 GetEnumerator。
36.GC是什么? 为什么要有GC?
答:GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一: System.gc() Runtime.getRuntime().gc()
37.String s = new String("xyz");创建了几个String Object?
答:两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。
38.abstract class和interface有什么区别?
答: 声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。 接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
39.启动一个线程是用run()还是start()?
答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。
40.接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。
41.构造器Constructor是否可被override?
答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。
42.是否可以继承String类?
答:String类是final类故不可以继承。
43.try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
答:会执行,在return前执行。
44.两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
答:不对,有
一.填空题
1..NET Framework包括()()()三种技术
通用语言运行库(CLR:Common Language Runtime)、类库、ASP.NET及ADO.NET
2.运算符++X表示(),X++表示()。
3.软件测试方法分为()()。
1、按是否查看程序内部结构分为:
(1)黑盒测试(black-box testing):只关心输入和输出的结果
(2)白盒测试(white-box testing):去研究里面的源代码和程序结构
2、按是否运行程序分为:
(1)静态测试(static testing):是指不实际运行被测软件,而只是静态地检查程序代码、界面或文档可能存在的错误的过程。
静态测试包括:
对于代码测试,主要是测试代码是否符合相应的标准和规范。
对于界面测试,主要测试软件的实际界面与需求中的说明是否相符。
对于文档测试,主要测试用户手册和需求说明是否真正符合用户的实际需求。
(5)动态测试(dynamic testing),是指实际运行被测程序,输入相应的测试数据,检查输出结果和预期结果是否相符的过程
3、按阶段划分:
(1)单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。
桩模块(stud)是指模拟被测模块所调用的模块,驱动模块(driver)是指模拟被测模块的上级模块,驱动模块用来接收测试数据,启动被测模块并输出结果。
(2)集成测试(integration testing),是单元测试的下一阶段,是指将通过测试的单元模块组装成系统或子系统,再进行测试,重点测试不同模块的接口部门。
集成测试就是用来检查各个单元模块结合到一起能否协同配合,正常运行。
(3)系统测试(system testing),指的是将整个软件系统看做一个整体进行测试,包括对功能、性能,以及软件所运行的软硬件环境进行测试。
系统测试的主要依据是《系统需求规格说明书》文档。
(4)验收测试(acceptance testing),指的是在系统测试的后期,以用户测试为主,或有测试人员等质量保障人员共同参与的测试,它也是软件正式交给用户使用的最后一道工序。
验收测试又分为a测试和beta测试,其中a测试指的是由用户、 测试人员、开发人员等共同参与的内部测试,而beta测试指的是内测后的公测,即完全交给最终用户测试。
4、黑盒测试分为功能测试和性能测试:
1)功能测试(function testing),是黑盒测试的一方面,它检查实际软件的功能是否符合用户的需求。
包括逻辑功能测试(logic function testing)
界面测试(UI testing)UI=User Interface
易用性测试(usability testing):是指从软件使用的合理性和方便性等角度对软件系统进行检查,来发现软件中不方便用户使用的地方。
兼容性测试(compatibility testing):包括硬件兼容性测试和软件兼容性测试
2)性能测试(performance testing)
软件的性能主要有时间性能和空间性能两种
时间性能:主要指软件的一个具体事务的响应时间(respond time)。
空间性能:主要指软件运行时所消耗的系统资源。
软件性能测试分为:
一般性能测试:指的是让被测系统在正常的软硬件环境下运行,不向其施加任何压力的性能测试。
稳定性测试也叫可靠性测试(reliability testing):是指连续运行被测系统检查系统运行时的稳定程度。
负载测试(load testing):是指让被测系统在其能忍受的压力的极限范围之内连续运行,来测试系统的稳定性。
压力测试(stress testing):是指持续不断的给被测系统增加压力,直到将被测系统压垮为止,用来测试系统所能承受的最大压力。(Validate the system or software can allowed the biggest stress.)
5、其他测试类型:
回归测试(regression testing)是指对软件的新的版本测试时,重复执行上一个版本测试时的用例。(When a new build or release is deployed, repeat all the test cases which has executed in the last build or release.)
冒烟测试(smoke testing),是指在对一个新版本进行大规模的测试之前,先验证一下软件的基本功能是否实现,是否具备可测性。(validate the major function is deployed or not in software of system when a new build or release is implement.)
随机测试(random testing),是指测试中所有的输入数据都是随机生成的,其目的是模拟用户的真实操作,并发现一些边缘性的错误。(means or all the test data is random, to validate the some edge bugs.)
4..NET通过对各语言先编译成( ),然后再执行时用( )将其编译成本地平台代码,来实现异构平台下对象的互操作
中间语言IL 即时编译器JIL
5.在SQL SERVER 中游标的声明的语句是()释放的语句是()。
(DECLARE 游标名 CURSOR FOR)(DEALLOCATE 游标名)
6.SQL SERVER的编程语言是()语言
T-SQL
7.委托声明的关键字是()。
delegate
8.在MS SQL Server中,用来显示数据库信息的系统存储过程是()
sp_help
9.SQL语言中,用于事务回滚的语句是()。
rollback transaction
10.如果两个实体之间具有M:N联系,则将它们转换为关系模型的结果是()个表。
3
11.Codebehind主要是通过把()和()放在不同的文件中来实现代码分离的。
(前台代码)(后台代码)
12.在C#中由值类型转换为引用类型称为(),有引用类型转换为值类型称为()
(装箱)(拆箱)
13.SQL SERVER中索引类型包括的三种类型分别是()()()。
(唯一索引)(主键索引)(聚集索引)
14.软件工程的三大文档()()()。
(需求分析说明书)(概要设计说明书)(详细设计说明书)
15.在SQL SERVER2000中的四中约束()()()()。
(主键)(唯一)(外键)(检查)
二.简答题1.什么是中间语言(IL)?它的作用?
IL是.NET框架中中间语言(Intermediate Language)的缩写。使用.NET框架提供的编译器可以直接将源程序编译为.exe或.dll文件,但此时编译出来的程序代码并不是CPU能直接执行的机器代码,而是一种中间语言IL(Intermedate Language)的代码。
使用中间语言的优点有两点,一是可以实现平台无关性,既与特定CPU无关;二是只要把.NET框架某种语言编译成IL代码,就实现.NET框架中语言之间的交互操作。
2.C#中与基类通信的关键字什么?作用是什么?
答:“base”。调用基类上已被其他方法重写的方法,指定创建派生类实例时应调用的基类构造函数,基类访问只能在构造函数、实例方法或实例属性访问器中进行,从静态方法中使用 base 关键字是错误的。
3.什么是元数据?
答: 元数据是以二进制形式存在于PE文件中的信息集合,它包含了每个类型的声明及其所有成员(方法、字段、属性和事件)的声明,包括名字和类型,而对于每个实现的方法,元数据包含调用者用于定位方法体的信息。与旧的技术如类型库等相比较而言,元数据更加完整,并总是嵌入到托管模块中。
4.ASP。NET和ASP的主要优势?
解答: Asp.net获得了许多平台的支持,他将开发的核心从客户端/服务器应用程序转移到了基于web的体系结构和Internet部署程序上来,将功能代码和页面代码分离开,更易于开发
1.ASP.NET具有面向对象性
2.ASP.NET使用ADO.NET,使对数据库操作更快速更强大.
3.ASP.NET支持多种语言,摆脱了ASP只能使用非结构语言(VBSCRIPT,JSCRIPT)编写的限制.
4.ASP.NET具有代码绑定技术,使页面代码和功能代码的编写完全分离,具有更好的重用性.
5.Override与重载有什么区别?
其实很本质的区别就是看函数特征:
覆写(Override)的两个函数的函数特征相同
重载(Overload)的两个函数的函数名虽然相同,但函数特征不同。
函数特征包括函数名,参数的类型和个数。
Override 是在继承的时候,如果你写的函数与要继承的函数函数特征相同,那么,加上这个关键字,在使用这个子类的这个函数的时候就看不见父类(或超类)的函数了,它被覆盖掉了。
比如:Derived继承了Base,Base里面有void A(int a)
那么如果你Derived里面觉得A写得不好或不适合这个类,你想重新再写一遍A里的代码,那么就写override void A(int a)这样,原来的那个函数就被你新写的这个覆盖掉了。
Overload 是重载,就是说函数名相同,函数特征不同,系统会根据你提供的参数来调相应的函数。
比如:void A(int a)和void A(int a,int b)
如果你用的是A(1)那么调的是第一个,如果是A(1,1)那么调的是第二个。
6.SQL SERVER 中的触发器的理解?
7. ref与out有什么区别?
out和ref都是传地址的,但是out只传出地址,传入地址是没有初始化的,而ref则是传入了已经初始化的地址,并且传出也是这个地址,所以ref可以传入也可以传出有意义的数据,但是out只能传出。
out参数的函数调用可以当作被传入变量的初始化,即调用之前,变量可以不必初始化,而如果是ref参数的函数调用的话,在调用之前,变量一定要初始化。
8.大概描述下ASP。NET中服务器控件的生命周期?
初始化 加载视图状态 处理回发数据 加载 发送回发更改通知 处理回发事件 预呈现 保存状态 呈现 处置 卸载
9.什么是强类型系统?
RTTI:类型识别系统。RTTI(Run-Time Type Identification,通过运行时类型识别)程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型。
10.触发器分为事前触发和事后触发,有何区别?
事前触发器运行于触发事件发生之前,而事后触发器运行于触发事件发生之后。通常事前触发器可以获取事件之前和新的字段值。
语句级触发器可以在语句执行前或后执行,而行级触发在触发器所影响的每一行触发一次。
11.谈谈final, finally, finalize的区别。
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
内部类要访问局部变量,局部变量必须定义成final类型,例如,一段代码……
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用
12.在.net(C# or vb.net)中,Appplication.Exit 还是 Form.Close有什么不同?
答案:一个是退出整个应用程序,一个是关闭其中一个form
13.C#中的委托是什么?事件是不是一种委托?
委托是CTS(公共类型系统)规定的5种类型之一(类类型、结构类型、接口类型、枚举类型、委托类型)。
通俗的说,委托是这样一种类型:这种类型的实例,指向其它类型的方法。
委托主要就是提供间接调用、构建双向系统用的,他为消息模型和多线编程提供了基础。
再说说事件,事件并不是一种类型,它是一个方法,它是为了简化委托的注册而出现的。并不是1楼所说的那样:事件是一种委托,这是严重的误导!
委托是引用类型的变量,他可以包含对方法的引用,当程序必须通过调用一个方法来执行某个操作,但在编译时不知道该方法是什么时,就可以使用委托。委托允许在程序运行时指定调用的方法,委托的特点是面向对象的,类型是安全的。委托和事件是C#的亮点优势。
事件是一种委托。
14.值类型和引用类型的区别?
它们的区别在于使用的内存位置不同:值类型数据存储在栈上,而引用类型数据存储在堆上。
值类型直接包含值,换言之,变量引用的位置就是值在内存中实际存储的位置。
引用类型并不直接存储值,它们存储的是对一个内存位置的引用(内存地址),要去那个位置才能找到真正的数据。
------------------《C#本质论》(Essential C# 2.0)
15.解释下C#中的方法的重载?
重载是指方法名称相同, 只是参数个数或类型不同. 方法功能是相同的.
除了重载, 还要了解以下几个关键字的用法,与区别:
virtual 定义为虚方法
override 对虚方法实现,具有多态性
new 把基类中的同名方法替换掉, 不具有多态性
//举个例子
//不使用方法重载
public string GetString(string strValues)
{
if(strValues.Length==0)
{
return "今天我遇到无名了。。。。";
}
return "Hello,"+strValues+"兄";
}
//使用重载就是
public string GetString()
{
return GetString("我是无名。。。你是?");
}
public string GetString(string strValues)
{
return strValues;
}
16.分析类和结构的异同?
类和结构体的区别
1. class和structure很相似, 从技术层面讲,class是引用,而structure则是数值. 有人很形象的说
class里有行动,方法,成员,是有机体的结合,而structure则是活生生的有机体,
2. 通俗的理解,class包涵structure, class里有方法拉,成员拉,什么滴,
而structure只有数据,
二 .类与结构的差别
%%%类成员默认是private,而结构体默认是 public。
1.值类型与引用类型
结构是值类型:值类型在堆栈上分配地址,所有的基类型都是结构类型,例如:int 对应System.int32 结构,string 对 system.string 结构 ,通过使用结构可以创建更多的值类型
类是引用类型:引用类型在堆上分配地址
堆栈的执行效率要比堆的执行效率高,可是堆栈的资源有限,不适合处理大的逻辑复杂的对象。所以结构处理作为基类型对待的小对象,而类处理某个商业逻辑
因为结构是值类型所以结构之间的赋值可以创建新的结构,而类是引用类型,类之间的赋值只是复制引用
注:
1.虽然结构与类的类型不一样,可是他们的基类型都是对象(object),c#中所有类型的基类型都是object
2.虽然结构的初始化也使用了New 操作符可是结构对象依然分配在堆栈上而不是堆上,如果不使用“新建”(new),那么在初始化所有字段之前,字段将保持未赋值状态,且对象不可用
2.继承性
结构:不能从另外一个结构或者类继承,本身也不能被继承,虽然结构没有明确的用sealed声明,可是结构是隐式的sealed .
类:完全可扩展的,除非显示的声明sealed 否则类可以继承其他类和接口,自身也能被继承
注:虽然结构不能被继承 可是结构能够继承接口,方法和类继承接口一样
例如:结构实现接口
interface IImage
{
void Paint();
}
struct Picture : IImage
{
public void Paint()
{
// painting code goes here
}
private int x, y, z; // other struct members
}
3.内部结构:
结构:
没有默认的构造函数,但是可以添加构造函数 没有析构函数 没有 abstract 和 sealed(因为不能继承) 不能有protected 修饰符 可以不使用new 初始化 在结构中初始化实例字段是错误的
类:
有默认的构造函数
有析构函数
可以使用 abstract 和 sealed
有protected 修饰符
必须使用new 初始化
三.如何选择结构还是类
讨论了结构与类的相同之处和差别之后,下面讨论如何选择使用结构还是类:
1.堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些
2.结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有 1000 个点对象的数组,则将为引用每个对象分配附加的内存。在此情况下,结构的成本较低。
3.在表现抽象和多级别的对象层次时,类是最好的选择
4.大多数情况下该类型只是一些数据时,结构时最佳的选择
1: 类可以继承,结构不可以.
2: 类是引用类型,结构是值类型
3: 类在堆中,结构在栈分配内存
17. &和&&的区别。
&按位与,&&逻辑与
18.描述怎样区分ExcuteNonQuery 和ExcuteScalar方法?
ExcuteNonQuery返回受影响的行数;ExcuteDataReader返回DataReader;ExcuteScalar返回查询结果的第一行的一列的值,忽略其他行列。
19.解释文件系统为什么会存在数据冗余?这种数据冗余会导致哪两类典型的问题?
由于文件系统难于实现数据共享,因此,相同的数据可能会在多个文件中重复出现,即产生数据冗余。
数据冗余会导致数据(或更新)异常和数据不一致性
20.什么是WEBSERVICE ?
顾名思义就是一个运行在web上的服务。这个服务通过网络为我们的程序提供服务方法。类似一个远程的服务提供者。。
比如,一个提供天气预报的网站需要随时更新天气情况,在WEB上挂上一个随时问讯最新天气情况的服务。我们的程序就可以从这个服务上获取到当前最新的天气信息
说的简单点就是远程信息访问,专业点就是基于XML并利用SOAP协议实现跨平台信息传递的一种技术
21.接口和抽象类有什么区别?
抽象类
只要类里面有一个方法是抽象的,它就是抽象类
抽象类的子类有义务去补充抽象方法
抽象类不能被实例化
接口
接口不是类
Interface A
Interface 中的变量必须是静态变量
n个抽象函数在子类中必须都给予实现
子类实现接口,子类中的方法必须为public
22.描述类中的构造函数和析构函数?
构造函数与析构函数是一个类中看似较为简单的两类函数,但在实际运用过程中总会出现一些意想不到的运行错误。本文将较系统的介绍构造函数与析构函数的原理 及在C#中的运用,以及在使用过程中需要注意的若干事项。
C#构造函数
构造函数是一种特殊的成员函数,它主要用于为对象分配存储空间,对数据成员进行初始化.
(1)构造函数的名字必须与类同名;
(2)构造函数没有返回类型,它可以带参数,也可以不带参数;
(3)构造函数的主要作用是完成对类的初始化工作;
(4)在创建一个类的新对象(使用new关键字)时,系统回自动调用给类的构造函数初始化新对象;
C#的类有两种构造函数:实例构造函数和静态构造函数
实例构造函数:负责初始化类中的实例变量,它只有在用户用new关键字为对象分配内存时才被调用,而且作为引用类型的类,其实例化后的对象必然时分配在托 管堆(Managed Heap)上。实例构造函数又分为默认构造函数和非默认构造函数,注意一旦类有了自己的构造函数,无论是有参数还是没有参数,默认构造函数都将无效,而且 仅仅声名一个类而不实例化它,则不会调用构造函数。
静态构造函数:
(1)用于对静态字段、只读字段等的初始化;
(2)添加static关键字,不能添加访问修饰符,因为静态构造函数都是私有的;
(3)类的静态构造函数在给定应用程序域中至多执行一次,只有创建类的实例或者引用类的任何静态成员才激发,不能带又参数;
(4)静态构造函数是不可继承的,而且不能被直接调用;
(5)如果类中包含用来开始执行的 Main 方法,则该类的静态构造函数将在调用 Main 方法之前执行.任何带有初始值设定项的静态字段,则在执行该类的静态构造函数时,先要按照文本顺序执行那些初始值设定项;
(6)如果没有编写静态构造函数,而这时类中包含带有初始值设定的静态字段,那么编译器会自动生成默认的静态构造函数;
一个类可以同时拥有实例构造函数和静态构造函数,这是惟一可以具有相同参数列表的同名方法共存的情况。
轉自:http://tb.blog.csdn.net/TrackBack.aspx?PostId=1622612
一.构造函数与析构函数的原理
作为比C更先进的语言,C#提供了更好的机制来增强程序的安全性。C#编译器具有严格的 类型安全检查功能,它几乎能找出程序中所有的语法问题,这的确帮了程序员的大忙。但是程序通过了编译检查并不表示错误已经不存在了,在“错误”的大家庭 里,“语法错误”的地位只能算是冰山一角。级别高的错误通常隐藏得很深,不容易发现。
根据经验,不少难以察觉的程序错误是由于变量没 有被正确初始化或清除造成的,而初始化和清除工作很容易被人遗忘。微软利用面向对象的概念在设计C#语言时充分考虑了这个问题并很好地予以解决:把对象的 初始化工作放在构造函数中,把清除工作放在析构函数中。当对象被创建时,构造函数被自动执行。当对象消亡时,析构函数被自动执行。这样就不用担心忘记对象 的初始化和清除工作。
二.构造函数在C#中的运用
构造函数的名字不能随便起,必须让编译器认得出 才可以被自动执行。它的命名方法既简单又合理:让构造函数与类同名。除了名字外,构造函数的另一个特别之处是没有返回值类型,这与返回值类型为void的 函数不同。如果它有返回值类型,那么编译器将不知所措。在你可以访问一个类的方法、属性或任何其它东西之前, 第一条执行的语句是包含有相应类的构造函数。甚至你自己不写一个构造函数,也会有一个缺省构造函数提供给你。
下面列举了几种类型的构造函数
1)缺省构造函数
class TestClass
{
public TestClass(): base() {}
}
上面已介绍,它由系统(CLR)提供。
2)实例构造函数
实例构造函数是实现对类中实例进行初始化的方法成员。如:
using System;
class Point
{
public double x, y;
public Point()
{
this.x = 0;
this.y = 0;
}
public Point(double x, double y)
{
this.x = x;
this.y = y;
}
…
}
class Test
{
static void Main()
{
Point a = new Point();
Point b = new Point(3, 4); // 用构造函数初始化对象
…
}
}
声明了一个类Point,它提供了两个构造函数。它们是重载的。一个是没有参数的Point构造函数和一个是有两个double参数的Point构造函 数。如果类中没有提供这些构造函数,那么会CLR会自动提供一个缺省构造函数的。但一旦类中提供了自定义的构造函数,如Point()和Point (double x, double y),则缺省构造函数将不会被提供,这一点要注意。
3) 静态构造函数
静态构造函数是实现对一个类进行初始化的方法成员。它一般用于对静态数据的初始化。静态构造函数不能有参数,不能有修饰符而且不能被调用,当类被加载时,类的静态构造函数自动被调用。如:
using System.Data;
class Employee
{
private static DataSet ds;
static Employee()
{
ds = new DataSet(...);
}
...
}
声明了一个有静态构造函数的类Employee。注意静态构造函数只能对 静态数据成员进行初始化,而不能对非静态数据成员进行初始化。但是,非静态构造函数既可以对静态数据成员赋值,也可以对非静态数据成员进行初始化。
如果类仅包含静态成员,你可以创建一个private的构造函数:private TestClass() {…},但是private意味着从类的外面不可能访问该构造函数。所以,它不能被调用,且没有对象可以被该类定义实例化。
以上是几种类型构造函数的简单运用,下面将重点介绍一下在类的层次结构中(即继承结构中)基类和派生类的构造函数的使用方式。派生类对象的初始化由基类和派生类共同完成:基类的成员由基类的构造函数初始化,派生类的成员由派生类的构造函数初始化。
当创建派生类的对象时,系统将会调用基类的构造函数和派生类的构造函数,构 造函数的执行次序是:先执行基类的构造函数,再执行派生类的构造函数。如果派生类又有对象成员,则,先执行基类的构造函数,再执行成员对象类的构造函数,最后执行派生类的构造函数。
至于执行基类的什么构造函数,缺省情况下是执行基类的无参构造函数,如果要执行基类的有参构造函数,则必须在派生类构造函数的成员初始化表中指出。如:
class A
{ private int x;
public A( ) { x = 0; }
public A( int i ) { x = i; }
};
class B : A
{ private int y;
public B( ) { y = 0; }
public B( int i ) { y = i; }
public B( int i, int j ):A(i) { y = j; }
};
B b1 = new B(); //执行基类A的构造函数A(),再执行派生类的构造函数B()
B b2 = new B(1); //执行基类A的构造函数A(),再执行派生类的构造函数B(int)
B b3 = new B(0,1); //执行执行基类A的构造函数A(int) ,再执行派生类的
构造函数B(int,int)
在这里构造函数的执行次序是一定要分析清楚的。另外,如果基类A中没有提供无参构造函数public A( ) { x = 0; },则在派生类的所有构造函数成员初始化表中必须指出基类A的有参构造函数A(i),如下所示:
class A
{ private int x;
public A( int i ) { x = i; }
};
class B : A
{ private int y;
public B():A(i) { y = 0; }
public B(int i):A(i) { y = i; }
public B(int i, int j):A(i) { y = j; }
};
三.析构函数和垃圾回收器在C#中的运用
析构函数是实现销毁一个类的实例的方法成员。析构函数不能有参数,不能任何修饰符而且不能被调用。由于析构函数的目的与构造函数的相反,就加前缀‘~’以示区别。
虽然C#(更确切的说是CLR)提供了一种新的内存管理机制---自动内存管理机制(Automatic memory management),资源的释放是可以通过“垃圾回收器” 自动完成的,一般不需要用户干预,但在有些特殊情况下还是需要用到析构函数的,如在C#中非托管资源的释放。
资源的释放一般是通过"垃圾回收器"自动完成的,但具体来说,仍有些需要注意的地方:
1. 值类型和引用类型的引用其实是不需要什么"垃圾回收器"来释放内存的,因为当它们出了作用域后会自动释放所占内存,因为它们都保存在栈(Stack)中;
2. 只有引用类型的引用所指向的对象实例才保存在堆(Heap)中,而堆因为是一个自由存储空间,所以它并没有像"栈"那样有生存期("栈"的元素弹出后就代表生存期结束,也就代表释放了内存),并且要注意的是,"垃圾回收器"只对这块区域起作用;
然而,有些情况下,当需要释放非托管资源时,就必须通过写代码的方式来解决。通常是使用析构函数释放非托管资源,将用户自己编写的释放非托管资源的代码 段放在析构函数中即可。需要注意的是,如果一个类中没有使用到非托管资源,那么一定不要定义析构函数,这是因为对象执行了析构函数,那么"垃圾回收器"在 释放托管资源之前要先调用析构函数,然后第二次才真正释放托管资源,这样一来,两次删除动作的花销比一次大多的。下面使用一段代码来示析构函数是如何使用 的:
public class ResourceHolder
{
…
~ResourceHolder()
{
// 这里是清理非托管资源的用户代码段
}
}
四.小结
构造函数与析构函数虽然是一个类中形式上较简单的函数,但它们的使用决非看上去那么简单,因此灵活而正确的使用构造函数与析构函数能够帮你更好的理解CLR的内存管理机制,以及更好的管理系统中的资源。
注:CLR
CLR(公共语言运行库)和Java虚拟机一样也是一个运行时环境,它负责资源管理(内存分配和垃圾收集),并保证应用和底层操作系统之间必要的分离。
为了提高平台的可靠性,以及为了达到面向事务的电子商务应用所要求的稳定性级别,CLR还要负责其他一些任务,比如监视程序的运行。按照.NET的说法, 在CLR监视之下运行的程序属于“受管理的”(managed)代码,而不在CLR之下、直接在裸机上运行的应用或者组件属于“非受管理的” (unmanaged)的代码。
CLR将监视形形色色的常见编程错误,许多年来这些错误一直是软件故障的主要根源,其中包括:访问数组元素越界,访问未分配的内存空间,由于数据体积过大而导致的内存溢出,等等。
轉自:http://www.yesky.com/351/1755351_2.shtml
23.解释下C#中的程序集?
程序集是包含一个或多个类型定义文件和资源文件的集合。它允许我们分离可重用类型的逻辑表示和物理表示。
程序集是一个可重用、可实施版本策略和安全策略的单元。它允许我们将类型和资源划分到不同的文件中,这样程序集的使用者便可以决定将哪些文件打包在一起部署。一旦CLR加载了程序集中包含清单的那个文件,它就可以确定程序集的其它文件中哪些包含了程序正在引用的类型和资源。任何程序集的使用者仅需要知道包含清单的文件名称。文件的划分对使用都是透明的,并且可以在将来改变,同时又不会破坏现有的应用程序的行为。
可以简单理解为以.dll或者以.exe为后缀名的文件。
24.try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
肯定执行了
你在finally里加一条输出语句你就知道了
但结果为什么会是2呢?
在try语句中,在执行return语句时,要返回的结果已经准备好了,就在此时,程序转到finally执行了。
在转去之前,try中先把要返回的结果存放到不同于a的局部变量中去,执行完finally之后,在从中取出返回结果,
因此,即使finally中对变量a进行了改变,但是不会影响返回结果。
它应该使用栈保存返回值。
25.SQL SERVER的两种索引是何形式?索引的作用?索引的优缺点?
索引的作用就象书的目录,给出条件查找目录找出所需要的内容
主键索引和聚合索引
我们来看:(gid是主键,fariqi是聚合索引列):
select top 10000 gid,fariqi,reader,title from tgongwen
用时:196 毫秒。 扫描计数 1,逻辑读 289 次,物理读 1 次,预读 1527 次。
select top 10000 gid,fariqi,reader,title from tgongwen order by gid asc
用时:4720毫秒。 扫描计数 1,逻辑读 41956 次,物理读 0 次,预读 1287 次。
select top 10000 gid,fariqi,reader,title from tgongwen order by gid desc
用时:4736毫秒。 扫描计数 1,逻辑读 55350 次,物理读 10 次,预读 775 次。
select top 10000 gid,fariqi,reader,title from tgongwen order by fariqi asc
用时:173毫秒。 扫描计数 1,逻辑读 290 次,物理读 0 次,预读 0 次。
select top 10000 gid,fariqi,reader,title from tgongwen order by fariqi desc
用时:156毫秒。 扫描计数 1,逻辑读 289 次,物理读 0 次,预读 0 次。
从以上我们可以看出,不排序的速度以及逻辑读次数都是和“order by 聚集索引列” 的速度是相当的,但这些都比“order by 非聚集索引列”的查询速度是快得多的。
同时,按照某个字段进行排序的时候,无论是正序还是倒序,速度是基本相当的。
26.谈谈C/S和B/S的特点
为了区别于传统的C/S模式,才特意将其称为B/S模式。认识到这些结构的特征,对于系统的选型而言是很关键的。
1、系统的性能
在系统的性能方面,B/S占有优势的是其异地浏览和信息采集的灵活性。任何时间、任何地点、任何系统,只要可以使用浏览器上网,就可以使用B/S系统的终端。
不过,采用B/S结构,客户端只能完成浏览、查询、数据输入等简单功能,绝大部分工作由服务器承担,这使得服务器的负担很重。采用C/S结构时,客户端和服务器端都能够处理任务,这虽然对客户机的要求较高,但因此可以减轻服务器的压力。而且,由于客户端使用浏览器,使得网上发布的信息必须是以HTML格式为主,其它格式文件多半是以附件的形式存放。而HTML格式文件(也就是Web页面)不便于编辑修改,给文件管理带来了许多不便。
2、系统的开发
C/S结构是建立在中间件产品基础之上的,要求应用开发者自己去处理事务管理、消息队列、数据的复制和同步、通信安全等系统级的问题。这对应用开发者提出了较高的要求,而且迫使应用开发者投入很多精力来解决应用程序以外的问题。这使得应用程序的维护、移植和互操作变得复杂。如果客户端是在不同的操作系统上,C/S结构的软件需要开发不同版本的客户端软件。但是,与B/S结构相比,C/S技术发展历史更为“悠久”。从技术成熟度及软件设计、开发人员的掌握水平来看,C/S技术应是更成熟、更可靠的。
3、系统的升级维护
C/S系统的各部分模块中有一部分改变,就要关联到其它模块的变动,使系统升级成本比较大。B/S与C/S处理模式相比,则大大简化了客户端,只要客户端机器能上网就可以。对于B/S而言,开发、维护等几乎所有工作也都集中在服务器端,当企业对网络应用进行升级时,只需更新服务器端的软件就可以,这减轻了异地用户系统维护与升级的成本。如果客户端的软件系统升级比较频繁,那么B/S架构的产品优势明显——所有的升级操作只需要针对服务器进行,这对那些点多面广的应用是很有价值的,例如一些招聘网站就需要采用B/S模式,客户端分散,且应用简单,只需要进行简单的浏览和少量信息的录入。
4、C/S 模式的优点和缺点
★ C/S 模式的优点
● 由于客户端实现与服务器的直接相连,没有中间环节,因此响应速度快。
● 操作界面漂亮、形式多样,可以充分满足客户自身的个性化要求。
● C/S结构的管理信息系统具有较强的事务处理能力,能实现复杂的业务流程。
★ C/S 模式的缺点
● 需要专门的客户端安装程序,分布功能弱,针对点多面广且不具备网络条件的用户群体,不能够实现快速部署安装和配置。
● 兼容性差,对于不同的开发工具,具有较大的局限性。若采用不同工具,需要重新改写程序。
● 开发成本较高,需要具有一定专业水准的技术人员才能完成。
5、B/S模式的优点和缺点
★ B/S 模式的优点
● 具有分布性特点,可以随时随地进行查询、浏览等业务处理。
● 业务扩展简单方便,通过增加网页即可增加服务器功能。
● 维护简单方便,只需要改变网页,即可实现所有用户的同步更新。
● 开发简单,共享性强。
★ B/S 模式的缺点
● 个性化特点明显降低,无法实现具有个性化的功能要求。
● 操作是以鼠标为最基本的操作方式,无法满足快速操作的要求。
● 页面动态刷新,响应速度明显降低。
● 无法实现分页显示,给数据库访问造成较大的压力。
● 功能弱化,难以实现传统模式下的特殊功能要求。
近年来,随着软硬件技术发展和人们意识的提高,Web应用得到广泛的普及,一方面在互联网浪潮的推动下,基于互联网的信息共享和电子商务不断发展,像新浪、搜狐、8848等大型网站不断涌现出来,另一方面随着Java、CGI等网络技术的成熟,基于B/S结构的大型软件逐渐显示出巨大的优势。同时,也就产生了一个焦点问题,什么样的服务器能够满足不同用户的需求,怎么能够保证Web服务器能够长期稳定地运行,为了满足这样的需求Web测试也就同样变得十分重要。
当前Web测试主要通过Web测试工具加上良好的测试案例完成的,我们认为主要有以下两种测试类型:基准测试、非基准测试
基准测试:主要指测试工具已经提供了标准的测试案例库,包括静态测试案例(HTM、JPG)、动态测试案例(CGI)和SSL测试案例等。这类测试工具分为测试案例库、控制台程序、客户端程序三个部分。它的原理是,Web服务器开启特定的Web服务程序,并且运行上述测试案例,由控制台程序控制各个客户端按照一定的脚本访问顺序遍历Web服务器的各个测试案例,每个请求完成后,各个客户端向控制台报告访问的结构,当一个测试集完成后由控制台将所有的信息综合统计,测试过程中控制台还需要采用SNMP协议对服务器进行实时监控,综合两个方面的因素可以反映出Web服务器在不同压力情况下的综合性能。
在测试过程中,主要影响测试结果的因素有网络环境、客户端性能。目前无论IA架构服务器还是SUN、HP、IBM的UNIX服务器性能都越来越优越,有可能出现在100MB网络下不能够提供足够的网络压力,有可能网络首先出现瓶颈,这样就需要扩展到1000MB网络环境或使用多个网段对服务器提供足够的压力,而稳定的客户端对于测试来说也是十分重要的,因为客户端如果出现性能下降,就会造成系统崩溃或者不能提供稳定的测试压力从而导致测试结果出现偏差;一台客户端到底能够稳定运行多少数量的连接是根据不同的硬件配置和操作系统决定的,因此对客户端的硬件资源进行监控是保证客户端可以稳定运行的必要手段。
由于这类测试工具使用的是工具开发商提供的测试案例集,虽然也具有一定的权威性,但是目前再完美的测试案例集也不能涵盖所有的Web应用情况,所以也不能够完全体现出Web服务器完整的性能,因此该类测试工具更加适合IT媒体对Web类服务器软硬件的横向对比测试,在测试对象和环境大体统一的情况下,可以比较出各个测试对象的性能差异。而对于有实际应用背景的Web服务器进行测试,使用这样的测试工具就不适合了,我们在以后的测试漫谈中会继续介绍。
三.编程题:
1.设有如下关系表
供应者 SUPPLIER(SNO,SNAME,CITY) SNO供应者编号,SNAME为供应者姓名,CITY 所在城市
零件 PART(PNO,PNAME,WEIGHT)PNO零件号,PNAME零件名称,WEIGHT重量
工程 JOB(JNO,JNAME,CITY) JNO工程号,JNAME工程名,CITY所在城市
联系关系 SPJ(SNO,PNO,JNO,QTY) QTY为数量
1.查找给工程J1提供零件P1的供应者号SNO
2.查找在北京的供应者给武汉的工程提供零件的零件号
3.查找由供应者S1提供的零件名PNAME
4.查找CITY值为上海的工程号和名称
5,将工程J3的城市改为广州
6.将所有重20公斤的零件改为重10公斤
7.将给工程J1提供零件P1的供应者S1改为S2
8.将值(S3,凌涛,武汉)加到SUPPLIER中
9.删除所有上海工程的数据
2.有个表USERS如下
Number(int) Name(char)
1 a
2 b
3 b
4 a
5 c
6 c
要求:当Name列上有相同时,只保留Number这列上值小的那一行,结果应如下:
Number(int) Name(char)
1 a
2 b
5 c
问:用SQL语句的Delete来实现.(记住,是一个SQL语句)
一. 填空题:
1. 类的三大特性是(封装)(继承)(多态)。
2. 在SELECT语句的FROM子句中最多可以指定(256)个表或视图,相互之间要用(,)分隔,当所查询的表不在当前数据库时,可用(数据库.所有者名称.对象名称)格式来指出表或视图对象。
3. 创建存储过程的命令是(create proc 存储过程名)删除表的命令是(drop table 表名)。
4. 计算字段的累加和的函数是:(sum()),统计项目数的函数是:(count())。
5. 关系数据库中,主键是(唯一的(primary key) 为标识表中唯一的实体)。
6. 声明抽象类的关键字是(abstract),抽象类不能(被实例化)。
7. .NET运行库支持被称为(委托)的引用类型,其作用类似于C++中函数指针的用途。
8. XML的全称是(Xternsible Markup Language可扩展标记语言)。
9. C#中所有的类型实质上都是从(Object)类派生而来的。
10. 声明静态变量的关键字是(static),声明常量的关键字是(const)。
11. C#中处理内存管理功能的是(无用单元收集器)。
12. 在C#中用于显式地将一个值或引用转换为另一种不同的类型称为(强制类型转换)。
13. 在ADO。NET中,command对象是用(ExecuteNonQuery())(ExecuteScalar())(ExecuteReader())方法执行命令。
14. B/S通常使用的结构设计模型分为(表示层)(业务逻辑层)(数据库层)。
15. SQL SERVER中索引类型包括的三种类型分别是(聚集索引)(非聚集索引)(唯一索引)。
二. 简答题:1.什么是中间语言(IL)?它的作用?
解答:它是一种各种语言之间互相转换得一种过渡,他的作用是在不同的平台上,把不同的语言转换成一种可以运行的通用语言。
中间语言代替了COM的调用约定和内存管理标准,所有其他的NET语言都将编译为这种语言,结果就是程序员不必来确保他们的代码将与一种确定的二进制标准进行互操作,而是由不同。NET语言编译器将代码编译到IL中来确保这种互操作性。
2.什么是装箱和拆箱?
解答:当结构类型的值被转换为 object 类型或由该结构实现的接口类型时,叫装箱操作。当 object 类型的值或接口类型的值被转换回结构类型时,叫拆箱操作。
装箱是将值类型转换为引用类型的过程,相反的过程(即将引用类型转换为值类型)被称为拆箱。在装箱是不需要显示的类型转换,但在拆箱是需要类型转换,这是因为在拆箱是对象可以被转换为任何类型。
3. 出ADO。NET中读写数据库的主要的几个类?它们的作用?
解答:Sqlconnection类,用来连接数据源.sqlcommand类,用来执行命令.
sqldataadapter数据适配器,用来连接容器对象和数据源.
SqlConnection OleDbConnection ---连接数据库
SqlCommand OleDbCommand----SQL语句的包装或存储过程的调用
SqlDataAdapter OleDbDataAdapter---用于存储选择,插入,更新和删除语句的类,填充DataSet。
SqlDataReader OleDbDataReader---只向前的连接数据库读取器
DataSet----用于数据库操作的数据集。
4. C#中接口和类有什么异同?
解答:接口和类都可以包含方法、属性、事件和索引,都可以多重继承但是,接口自己不为它所定义的成员提供执行程序。接口只是指定必须被实现这个接口的类或接口提供的成员
而类却要为所定义的成员提供执行程序,要实现某种功能。
接口类似于类,但它们有区别:
接口中的方法没有访问限制符
在接口中不执行任何方法
接口中的方法不能如抽象方法那样定义为虚拟和显式的,由实现接口的类来决定如何实现方法
接口不能示例化,没有构造函数,也没有字段,在接口中不允许进行操作符的重载。
5. 解释ASP。NET中的code-behind?
解答:code-behind即asp.net的后置文件代码,他是asp.net窗体的HTML代码。将页面的编码和功能编码分离,使代码的改进更为方便
6. 什么是ASP。NET中的用户控件?
解答:在asp.net中创建的用户控件不需要页指令。 文件扩展名必须是 .ascx。 必须包含 @ 、Register 指令。用户控件是用ASP。NET代码所创建的控件,它的创建如同在标准的ASP。NET WEB页中创建控件一样,不同之处在于一旦创建了用户控件,就可以在多个ASP。NET页面中重复使用他们。
7. 在C#中,string str = null 与 string str = “” 请尽量说明其中的区别。
解答:string str = null 它既不表示空,也不表示问0,一般用于Object类型,string str = “” 表示空,用来表示字符串为空。
string str = null 是不给他分配内存空间,而string str = ““ 给它分配长度为空字符串的内存空间
8. 什么是受管制代码?
解答:受管制代码是从非托管代码转换为受管制代码,以便执行管制代码和用户代码。管制代码通常在默认应用程序域中运行。每当运行库初始化时,它都将自动创建默认应用程序域。当关闭进程时,将卸载默认的应用程序域。在。NET环境中运行的任何代码都是受管制代码。在。NET环境外部的其他代码也运行在WINDOWS 上的,为非受管制代码。
9. C#中常用的访问形式?它们各自的作用域?
解答:域访问方式,作用于域上自身访问方式,作用于本地客户端
Public用来声明所有对象都可以使用的方法或属性。
Private 用来指出只有拥有该方法或属性的类才能访问该方法或属性。
Protected 来指定属性或方法的作用域,这样就只有拥有该方法或属性的类以及该类的派生类才能访问该属性或方法。
Internal 来指定属性或方法在一个程序集内部的作用域
10. SQL SERVER 中的存储过程的理解?
解答:存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程是一组预先编译好的T-SQL代码,存储过程可以作为一个单元被用户的应用程序调用.由于是已经编译好的代码,所以执行起来不必再次编译,从而提高了程序的运行效率
11.CTS,CLS,CLR分别作何解释?
解答:CTS通用类型系统, CTS 确保所有托管代码都是可以自我描述的.公共语言规范 (CLS),它是许多应用程序所需的一套基本语言功能。
Microsoft CLR 调试器是一个中间工具,用于调试为 Microsoft .NET 运行库编写和编译的应用程序。
公共语言运行时(CLR):它实际管理代码,它可以处理和加载程序,运行程序的代码,以及提供所有支持服务的代码。
公共类型系统(CTS):为了实现语言的互操作性,必须有一组各种语言都认可的基本数据类型,这样才能对所有语言进行标准化管理。
公共语言规范(CLS):这是确保代码可以在任何语言中访问的最小标准集合,所有用于公共类型系统的规则都适用于 CLS,除非 CLS 中定义了更严格的规则。CLS 通过定义一组开发人员可以确信在多种语言中都可用的功能来增强和确保语言互用性。
12. ASP。NET和ASP的主要优势?
解答: Asp.net获得了许多平台的支持,他将开发的核心从客户端/服务器应用程序转移到了基于web的体系结构和Internet部署程序上来,将功能代码和页面代码分离开,更易于开发
1.ASP.NET具有面向对象性
2.ASP.NET使用ADO.NET,使对数据库操作更快速更强大.
3.ASP.NET支持多种语言,摆脱了ASP只能使用非结构语言(VBSCRIPT,JSCRIPT)编写的限制.
4.ASP.NET具有代码绑定技术,使页面代码和功能代码的编写完全分离,具有更好的重用性.
13. NET的错误处理机制是什么?
解答:net错误处理机制采用try->catch->finally结构,发生错误时,层层上抛,直到找到匹的Catch为止14. 解释Page.IsPostBack属性?
解答:Page.IsPostBack用来判断页面是否回发,它返回一个布尔值,true表示回发Page.IsPostBack是用来检查目前网页是否为第一次加载,当使用者第一次浏览这个网页是Page.IsPostBack会传会FALSE,否则为TRUE,所以使用该属性来避免做一些重复的动作。
15..net framework包含哪几种技术?
解答:.net framewor本事可视为三中不同的技术:公共语言进行时(CLR),框架类库和实用工具。16.触发器分为事前触发和事后触发,有何区别?
解答:事前触发器就是在语句执行之前激活的触发器,而后触发器就是在语句执行后激活的触发器。
17.解释SQL SERVER2000中HAVING的用法?
解答:HAVING用在聚合函数中标志查询结果的唯一性当完成数据结果的查询和统计后,可以使用HAVING关键字来对查询和计算的结果进一步筛选。
18.解释SQL SERVER2000中GROUP BY的用法?
解答:指定用来放置输出行的组,并且如果 SELECT 子句 <select list> 中包含聚合函数,则计算每组的汇总值。指定GROUP BY时,选择列表中任一非聚合表达式内的所有列都应包含在 GROUP BY列表中,或者GROUP BY表达式必须与选择列表表达式完全匹配。如果需要按某一列数据的值进行分类,在分类的基础上再进行查询,就需要使用GROUP BY。
19.解释下C#中的方法的重载?
解答:当为中包含2个名称相同、签名不同的方法时,就发生重载。C#中允许在一个类中定义方法的不同版本,编译器会自动根据提供的参数选择最合适的版本。
20.事务是什么?
解答:事务是一组作为一个单元成功或失败的相关任务。在事务处理术语中,事务要么提交,要么中止。若要提交事务,所有参与者都必须保证对数据的任何更改是永久的。不论系统崩溃或是发生其他无法预料的事件,更改都必须是持久的。只要有一个参与者无法做出此保证,整个事务就会失败。事务范围内的所有数据更改将回滚到特定设置点事务的所有操作必须完成,否则事务将被撤消。也就是说,事务是作为一个整体的单位处理,不可以被分割,事务中操作失败回滚,处理成功时提交。
21.描述下ASP。NET中使用DataReader对象 和DataSet对象的区别?
解答:DataSet数据集在断开缓存中存储数据。DataReader提供未断开未缓冲的数据流,该数据流使过程逻辑可以有效地按顺序处理从数据源中返回的结果
DataReader对象是只向前的连接数据读取器,使用它可以快速有效地访问数据.
DataSet对象提供一个内存中数据的关系表示形式,一整套包括一些表在内的数据(这些表包含数据、对数据进行排序并约束数据),以及表之间的关系.
DataReader对象会使得SQL SERVER的连接处于忙碌桩,以便只有在关闭DataReader之后才可以在这个连接上执行其他操作.D
DataSet对象可以可以看作是DATATABLE对象的容器,可以在数据库操作时将多个表的所有数据都放在DataSet中,用在单独一次调用中将其返回,避免了重复调用的过程.
DataSet对象的调用将在内存开辟一个虚拟的表.因此将占有相当的内存空间
22.分析类和结构的异同?
解答:类是引用类型,可以被应用,用来实例子化结构是值类型.
结构可以继承接口,但不允许继承类和其他结构;
2.结构是值类型,类是引用类型
3.结构不允许声明析构函数
4,结构是从堆栈分配内存,而类是从堆上分配内存
23.解释ADO。NET中的使用Connection 类的CLOSE()和DISPOSE()的区别?
解答:CLOSE()关闭到数据库的连接,用于关闭一个打开的连接,继承IDBConnection接口DISPOSE()是调用CLOSE()方法,不继承IDBConnection接口
Close方法关闭数据库连接,并将这个连接返回到连接池.因此程序可以再次使用这个连接.
24.叙述ADO。NET中的DataAdapte类的作用?
解答:数据适配器,是一个双向通道,用于从数据源将数据读取到内存表中,以及将内存中的数据写回到数据源。DataAdapte类是数据集和数据提供程序的主要接口。利用这个类能够填充数据集,管理和维护数据,以及将更新发送回数据存储器。
25.什么是WEBSERVICE ?
解答:提供WEB服务的一个类,services基类,该基类提供对公共 ASP.NET 对象(如应用程序和会话状态)的直接访问从表面上看,Web Service就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。这就是说,你能够用编程的方法通过Web调用来实现某个功能的应用程序。从深层次上看,Web Service是一种新的Web应用程序分支,它们是自包含、自描述、模块化的应用,可以在网络(通常为Web)中被描述、发布、查找以及通过Web来调用。
26.行下面代码后:
String strTemp ="abcdefg 某某某";
Int i System.Text.Encoding.Default.GetBytes(strTemp).Length;
Int j = strTemp.Length;
问:i=( 14) ;j=(11 )
原因是什么?
因为汉字是2个字节
27..叙述ASP。NET中的几种验证控件(equiredFieldValidato, CompareValidator, RangeValidator, RegularExpressionValitor, CustomValidator, ValidationSummary)及作用?
解答:RequiredFieldValidator 如果指定的文本控件空白,产生错误CompareValidator 将文本控件的值与特定值比较,如果返回FALSE,产生错误
RangeValidator 文本域的值落在一个指定区域外,产生错
RegularExpressionValitor 文本域的值与使用常规表达式指定的模式不匹配是,产生错误确定输入控件的值是否与某个正则表达式所定义的模式相匹配。该验证类型允许检查可预知的字符序列,如社会保障号、
电子邮件地址、电话号码、邮政编码等中的字符序列。
CustomValidator 调用自定义逻辑,根据返回的值产生错误
ValidationSummary 在一个特定区域内显示验证错误的文本
三. 编程题:
1.有三个表,结构如下:
STUDENT(学生证号,姓名,性别,出生年月)
COURSE(课程号,课程名,授课教师)
SC(学生证号,课程号,成绩,授课教师)
用标准SQL 语句完成下列操作
1. 查询女生的基本情况,并按照学生证号降序排列
解答:slect * from STUDENT where性别=’女’
Order by学生证号
2. 查询成绩在90分以上的学生的姓名
解答:select姓名 from STUDENT a, SC b
Where a. 学生证号 = b. 学生证号
And b. 成绩 > 90
3. 查询数学类课程的课程号和课程名(模糊查询,以S开头)
解答:select课程号, 课程名
From COURSE
Where 课程名 like s + ‘%’
4.查询选课学生所选课程的课程号和成绩,以及该学生的姓名和性别
SELECT a.课程号,a.成绩,b.姓名,b.性别
FROM SC a,STUDENT b WHERE a.学生证号= b.学生证号
5.查询03号课程的平均成绩
解答:Select avg(成绩) from SC where课程号=’03’
6.删除成绩不及格的学生姓名
解答: Delete STUDENT
Where学生证号
(select学生证号 from sc where 成绩〈60)
7.把学生证号为90876的学生所选的01号课程成绩改为80分
解答:Update SC set 成绩=80 where学生证号=90876
And 课程号=‘01’
2.SQLSERVER服务器中,给定表 table1 中有两个字段 ID、LastUpdateDate,ID表示更新的事务号, LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号。(10)
sleect ID from table1
where LastUpdateDate = (select max(LastUpdateDate) from table1)