.NET 面试题+答案(1)

时间:2021-09-26 18:51:17

. SQL部分:

   问:聚集索引和非聚集索引区别:

   答:正文内容本身就是一种按照一定规则排列的目录称为“聚集索引”。

          目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集索引”

  问:索引有什么意义?简单解释簇索引(clustered),及其优缺点

答:聚集索引通常可加快 UPDATE 和 DELETE 操作的速度,因为这两个操作需要读取大量的数据。创建或修改聚集索引可能要花很长时间,因为执行这两个操作时要在磁盘上对表的行进行重组。

但是INSERT会变慢。

可考虑将聚集索引用于:

包含数量有限的唯一值的列,如 state 列只包含 50 个唯一的州代码。

使用下列运算符返回一个范围值的查询:BETWEEN、>、>=、< 和 <=。

  问:隔离级别什么意思?有几种隔离级别,分别简单解释?

答:事务准备接受不一致数据的级别称为隔离级别。隔离级别是一个事务必须与其它事务进行隔离的程度。较低的隔离级别可以增加并发,但代价是降低数据的正确性。相反,较高的隔离级别可以确保数据的正确性,但可能对并发产生负面影响。应用程序要求的隔离级别确定了 SQL Server 使用的锁定行为。

SQL-92 定义了下列四种隔离级别,SQL Server 支持所有这些隔离级别:

未提交读(事务隔离的最低级别,仅可保证不读取物理损坏的数据)。

提交读(SQL Server 默认级别)。

可重复读。

可串行读(事务隔离的*别,事务之间完全隔离)。

如果事务在可串行读隔离级别上运行,则可以保证任何并发重叠事务均是串行的。

  问:简述对事务的理解

答:事务必须运行于可重复读或更高的隔离级别以防止丢失更新。当两个事务检索相同的行,然后基于原检索的值对行进行更新时,会发生丢失更新。如果两个事务使用一个 UPDATE 语句更新行,并且不基于以前检索的值进行更新,则在默认的提交读隔离级别不会发生丢失更新。

2. 编程语言部分(C/C++/C#)

   问: 进程和线程

   答:一般进程被定义为一个程序运行中的实例。进程有两个部分组成

            1. 系统内核对象(进程控制块)

            2.  运行空间(包跨运行所需的代码,数据和资源,如堆和栈);

            进程是不活跃的,它只提供了一个运行环境。

            线程是进程中的运行分支,他在进程提供的的环境中执行代码。一个进程至少有一个线程,否则就没有存在的必要.

           线程包跨一个内核对象和一个栈.线程是CPU的调度单位.

           线程是进程运行的最小单位,进程参与分配资源,如句柄,内存等,线程不参与分配,呵呵,进程间通过同步,互斥,共享保持通信!

问:何时进行装箱、拆箱操作

答: 当引用类型与值类型之间转换时

问:什么是CLR

答: CLR(Common Language Runtime)普通语言运行时是整个.net framework构建的基础,是实现.Net跨平台,跨语言,代码安全等核心特性的关键

问:.Net与COM的关系是什么

答:.Net 支持COM和.Net组件之间的互操作性,实际上可通过Runtime Callable Wrapper(RCW)来实现在.Net中获取COM组件,通过COM Callable Wrapper(CCW)来实现在COM中获取.Net组件。

问:.Net中的中间语言(IL)是什么

答:.Net中的中间语言是指可以在普通语言运行时规范下,.执行时通过即时(Just In Time)编译器转化为本地代码的,与CPU独立的一族指令集合。它在.Net平台中是实现语言互操作的一个核心环节,所有.Net平台的语言都要先被编译成中间语言(IL)。

3. WEB开发部分

问:在ASP文件头部写一句什么话将使WEB SERVER强制检查任何程序中使用到的变量必须先定义

答:Option explicit

问:如果不希望某个错误影响到整个ASP页面的执行,在头部写一句什么话可以做到

答:On error resume next

问:希望ASP页面不进入缓存,即每次执行都自动刷新,写一句什么话可以做到

答:     Response.Expires = -1

        Response.ExpiresAbsolute = Now() - 1

        Response.cachecontrol = "no-cache"

1、C#中 property 与 attribute的区别,他们各有什么用处,这种机制的好处在哪里?

    property和attribute汉语都称之为属性。不过property是指类向外提供的数据区域。而attribute则是描述对象在编译时或运行时属性的。这两者是有本质区别的。

2、讲一讲你理解的web service,在dot net framework中,怎么很好的结合xml?(讲概念就行了)

    从表面上看,Web Service就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。这就是说,你能够用编程的方法通过Web调用来实现某个功能的应用程序。从深层次上看,Web Service是一种新的Web应用程序分支,它们是自包含、自描述、模块化的应用,可以在网络(通常为Web)中被描述、发布、查找以及通过Web来调用。可扩展的标记语言XML是Web Service平台中表示数据的基本格式。除了易于建立和易于分析外,XML主要的优点在于它既与平台无关,又与厂商无关。XML是由万维网协会(W3C)创建,W3C制定的XML SchemaXSD定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。Web Service平台是用XSD来作为数据类型系统的。当你用某种语言如VB.NET或C#来构造一个Web Service时,为了符合Web Service标准,所有你使用的数据类型都必须被转换为XSD类型。如想让它使用在不同平台和不同软件的不同组织间传递,还需要用某种东西将它包装起来。这种东西就是一种协议,如 SOAP。

 3. C#, Java 和 c++的特点,有什么相同的地方,不同的地方,C#分别从c++和java中吸取了他们那些优点?

    C#看起来与Java有着惊人的相似;它包括了诸如单一继承,界面,与Java几乎同样的语法,和编译成中间代码再运行的过程.但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成。

微软c#语言定义主要是从C和C++继承而来的,而且语言中的许多元素也反映了这一点.C#在设计者从C++继承的可选选项方面比Java要广泛一些(比如说 structs),它还增加了自己新的特点(比方说源代码版本定义).

C#从Java继承而来的特点

类:在C#中类的申明与Java很相似。特点看起来与Java相比没有变化.布尔运算:条件表达式的结果是布尔数据类型,布尔数据类型是这种语言中独立的一种数据类型.从布尔类型到其他类型没有直接的转换过程.布尔常量true和false是C#中的关键字.错误处理:如Java中那样,通过抛出和捕捉异常对象来管理错误处理过程.内存管理:由底层.NET框架进行自动内存垃圾回收.

C#从C和C++继承的特点

编译:程序直接编译成标准的二进制可执行形式.

结构体:一个C#的结构体与C++的结构体是相似的,因为它能够包含数据申明和方法.但是,不象C++,C#结构体与类是不同的而且不支持继承.但是,与Java相同的是,一个结构体可以实现界面.

预编译:C#中存在预编译指令支持条件编译,警告,错误报告和编译行控制. #error

C#独有的特点

中间代码:微软在用户选择何时MSIL应该编译成机器码的时候是留了很大的余地.微软公司很小心的声称MSIL不是解释性的,而是被编译成了机器码.它也明白许多--如果不是大多数的话--程序员认为Java程序要不可避免的比C编写的任何东西都要慢.而这种实现方式决定了基于MSIL的程序(指的是用 C#,Visual Basic,"Managed C++"--C++的一个符合CLS的版本--等语言编写的程序)将在性能上超过"解释性的"Java代码.当然,这一点还需要得到事实证明,因为C#和其他生成MSIL的编译器还没有发布.但是Java JIT编译器的普遍存在使得Java和C#在性能上相对相同.象"C#是编译语言而Java是解释性的,"之类的声明只是商业技巧.Java的中间代码和 MSIL都是中间的汇编形式的语言,它们在运行时或其它的时候被编译成机器代码.

命名空间中的申明:当你创建一个程序的时候,你在一个命名空间里创建了一个或多个类.同在这个命名空间里(在类的外面)你还有可能声明界面,枚举类型和结构体.必须使用using关键字来引用其他命名空间的内容.

基本的数据类型:C#拥有比C,C++或者Java更广泛的数据类型.这些类型是bool, byte, ubyte, short, ushort, int, uint, long, ulong, float, double,和decimal.象Java一样,所有这些类型都有一个固定的大小.又象C和C++一样,每个数据类型都有有符号和无符号两种类型.与 Java相同的是,一个字符变量包含的是一个16位的Unicode字符.C#新的数据类型是decimal数据类型,对于货币数据,它能存放28位10 进制数字.

两个基本类:一个名叫object的类是所有其他类的基类.而一个名叫string的类也象object一样是这个语言的一部分.作为语言的一部分存在意味着编译器有可能使用它--无论何时你在程序中写入一句带引号的字符串,编译器会创建一个string对象来保存它.

参数传递:方法可以被声明接受可变数目的参数.缺省的参数传递方法是对基本数据类型进行值传递.ref关键字可以用来强迫一个变量通过引用传递,这使得一个变量可以接受一个返回值.out关键字也能声明引用传递过程,与ref不同的地方是,它指明这个参数并不需要初始值.

与COM 的集成:C#对Windows程序最大的卖点可能就是它与COM的无缝集成了,COM就是微软的Win32组件技术.实际上,最终有可能在任何.NET语言里编写COM客户和服务器端.C#编写的类可以子类化一个以存在的COM组件;生成的类也能被作为一个COM组件使用,然后又能使用,比方说, JScript语言子类化它从而得到第三个COM组件.这种现象的结果是导致了一个运行环境的产生,在这个环境里的组件是网络服务,可用用任何.NET语言子类化.

索引下标:一个索引与属性除了不使用属性名来引用类成员而是用一个方括号中的数字来匿名引用(就象用数组下标一样)以外是相似的.

代理和反馈:一个代理对象包括了访问一个特定对象的特定方法所需的信息.只要把它当成一个聪明的方法指针就行了.代理对象可以被移动到另一个地方,然后可以通过访问它来对已存在的方法进行类型安全的调用.一个反馈方法是代理的特例.event关键字用在将在事件发生的时候被当成代理调用的方法声明中.

4、C#中的委托是什么?事件是不是一种委托?

委托是一个可以对方法进行引用的类。与其他的类不同,委托类具有一个签名,并且它只能对与其签名匹配的方法进行引用。这样,委托就等效于一个类型安全函数指针或一个回调。事件是一种委托。

5、ADO.NET相对于ADO等主要有什么改进?

ADO以Recordset存储,而ADO.NET则以DataSet表示。Recordset看起来更像单表,如果让Recordset以多表的方式表示就必须在SQL中进行多表连接。反之,DataSet可以是多个表的集合。ADO 的运作是一种在线方式,这意味着不论是浏览或更新数据都必须是实时的。ADO.NET则使用离线方式,在访问数据的时候ADO.NET会利用XML制作数据的一份幅本,ADO.NET的数据库连接也只有在这段时间需要在线。

由于ADO使用COM技术,这就要求所使用的数据类型必须符合COM规范,而ADO.NET基于XML格式,数据类型更为丰富并且不需要再做COM编排导致的数据类型转换,从而提高了整体性能。

6、接口和抽象类有什么区别?你选择使用接口和抽象类的依据是什么?

 接口是一个纯粹的抽象类,没有任何实际的东西,只是定义了一个框架,而抽象类里面可以有实际的一个方法,并不要求所有的方法都是抽象的。可以实现一个接口中的所有方法,也可以继承一个抽象的类,然后覆写其中的方法。接口一般只有方法,而没有数据成员或属性。抽象类有方法,也有数据成员或属性,一般情况下,优先考虑用接口,只有当可能要访问到数据成员或属性时,用抽象类。

 7、谈谈final, finally, finalize的区别。

final 修饰符用于指定类不能扩展或者方法或属性不能重写。它将防止其他类通过重写重要的函数来更改该类的行为。带有 final 修饰符的方法可以由派生类中的方法来隐藏或重载。

finally 块用于清除在 try 块中分配的任何资源。控制总是传递给 finally 块,与 try 块的存在方式无关。

-----------------------------------------------------------HTML部分-------------------------------------------------------------

第一部分HTML/XHTML

(1)在HTML语言中,BODY元素标明的是(    )。

A.HTML文档的文档主体            B.HTML文档的字体大小

C.HTML文档的颜色                D.HTML文档的标题文字

(2)HTML标签中input tag可以有多种类型,请尽可能的列举其type种类

(3)阅读下列HTML文本和说明,请指出在该HTML文本中存在的 5 处错误

【说明】这是一个简单的HTML文本,显示作者个人主页的登录界面。

【HTML文本】

 <html>

 <body>

 <head>

 <meta name="Author" content="Brent Heslop,David Holzgang”>

 </head>

 <title title="Authors Home Page”>

 <!-- MAKE SURE BKGND COLOR IS WHITE -->

 <bgcolor="white”>

 <img alt="log.jpg" src="Welcome to Authors Home page">

 <h2><a href="http://WWW.authors.public.com">Authors Home Page </a><h2>

 <p>Welcometo the authors Web Site. </p>

 </body>

 <html>

(4)XHTML 1.0是一种在HTML 4.0基础上优化和改进的新语言,目的是基于XML应用。XHTML是一种增强了的HTML,它的可扩展性和灵活性将适应未来网络应用更多的需求,试简单列举XHTML三条规范

第二部分Javascript

(5)javascript是一种弱类型语言,例如var result="1"+2在javascript中是合法的,请问现在result的值是?(  )

A:字符串3  B:数值3 C:字符串12 D:数值12

(6)javascript中允许定义数组,但是遗憾的是并没有直接提供二组和多维数组.请简单定义一个二维数组

(7)在IE5.5/FireFox1/NetScape6以上的版本中都大部分实现了DOM(文档对象模型),它使javascript能访问和控制文档,完成下面的gettext函数

<html>

<head>

<script type="text/javascript">

<!--

function gettext(){

//请在这儿得到文档中p对象内的字符串

 

}

//-->

</script>

</head>

<body "gettext()">

<p>hello world</p>

</body>

</html>

(8)在早期的浏览器中,经常使用各自独立的脚本技术,但幸动的是ECMAScript v3的标准化了客户端脚本,在Jscript 5.5/javascript 1.5都符合ECMAScript v3

请填写下面的deleteRow方法以正确的删除button所在的行,以使脚本能正确的运行于IE5.5/FireFox1/NetScape6以上版本浏览器中

<html>

<head>

<script type="text/javascript">

<!--

function deleteRow(obj){

 //请在这儿填写代码

}

//-->

</head>

<body>

<table id="Tab">

<tr><td>1</td><td><input type="button" value="删除"  onclick="deleteRow(this);" ></button></td></tr>

<tr><td>2</td><td><input type="button" value="删除"  onclick="deleteRow(this);"></button></td></tr>

<tr><td>3</td><td><input type="button" value="删除"  onclick="deleteRow(this);"></button></td></tr>

</table>

</body>

</html>

第三部分CSS

(9)定义样式表,使hello world 为宋休,7号字,红色,水平居中

<html>

<head>

 <style type="text/css">

/*请在下面填写样式表*/

 </style>

</head>

<body>

hello world

</body>

</html>

(10)CSS中可以定义clip使文字产生剪切效果

clip : auto | rect ( number number number number )

参数:

auto :  对象无剪切

rect ( number number number number ) :

依据上-右-下-左的顺序提供自对象左上角为(0,0)坐标计算的四个偏移数值,其中任一数值都可用auto替换,即此边不剪切

说明:

检索或设置对象的可视区域。区域外的部分是透明的。

必须将position的值设为absolute,此属性方可使用。

完成以下CSS定义以使hello world为字体大小为26px,字体为宋体,上面18px为蓝色,下面其它部分为红色

<html>

<head>

<style type="text/css">

.textBottom {

}

.textTop {

}

</style>

</head>

<body>

<p class="textBottom"> hello world</p>

<p class="textTop">hello world</p>

</body>

</html>

(11)文档对象中很多地方都可以定义element样式,请问下例中td到底有多宽?

如何界定优先级?

<html>

<head>

 <style type="text/css">

 .WidthClass{ width:300px;}

 </style>

</head>

<body>

<table><tr><td class="WidthClass" style="width:200px;" width="100px"> hello world</td></tr></table>

</body>

</html>

(12)在css样式选择器分为多种,比如群选择器,派生选择器,类选择器,类别选择器,请问下例中hello world到底是什么背景色?为什么?

<html>

<head>

 <style type="text/css">

 p{background-color:#FF0000;}

 .pclass2{background-color:#00FF00;}

 #pclass1{background-color:#0000FF;}

 </style>

</head>

<body>

<p id="pclass1" class="pclass2"> hello world</p>

</body>

</html>

第四部分XML

(13)下列哪一种写法是正确的XML文档格式?(  )

A:<Helloword><![CDATA[]]/></Helloword>

B:<Helloword><![CDATA[]]></Helloword>

C:<Helloword><[CDATA[]]></Helloword>

D:<Helloword><[CDATA[]]/></Helloword>

(14)XML Schema如同DTD一样是负责定义和描述XML文档的结构和内容模式。它可以定义XML文档中存在哪些元素和元素之间的关系,并且可以定义元素和属性的数据类型。XML Schema本身是一个XML文档,它符合XML语法结构。可以用通用的XML解析器解析它。以下的XML文档中使用了XML Schema但有两处错误,请标出错误所在

<?xml version="1.0" standalone="yes"?>

<NewDataSet>

  <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">

    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">

      <xs:complexType>

        <xs:choice minOccurs="0" maxOccurs="unbounded">

          <xs:element name="CacheStrategys">

            <xs:complexType>

              <xs:sequence>

                <xs:element name="Strategy" type="xs:string" minOccurs="0" />

                <xs:element name="Expiration" type="xs:int" minOccurs="0" />

              </xs:sequence>

            </xs:complexType>

          </xs:element>

        </xs:choice>

      </xs:complexType>

    </xs:element>

  </xs:schema>

  <CacheStrategys>

    <Key>Dirtywords</Key>

    <Strategy>Dependency</Strategy>

    <Expiration>ggg</Expiration>

  </CacheStrategys>

</NewDataSet>

15.W3C已经给出了两种样式单语言的推荐标准,一种是层叠样式单CSS(Cascading Style Sheets),另一种是可扩展样式单语言XSL(eXtensible Stylesheet Language)XSL本身就是一个XML文档,它是通过XML进行定义的,遵守XML的语法规则,是XML 的一种具体应用。因此系统可以使用同一个XML解释器对XML文档及其相关的XSL文档进行解释处理

现有xml文档

<?xml version="1.0" encoding="iso-8859-1"?>

<?xml-stylesheet type="text/xsl" href="mystyle.XSL"?>

<greeting>Hello world</greeting>

要使用XLST转换为如下html

<html>

<head>

</head>

<body>

<p style="text-align:center;">hello world</p>

</body>

</html>

试完成以下mystyle.xsl定义

<?xml version="1.0" encoding="iso-8859-1"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

 

 

 

 

(16)XPath 是一种用于对 XML 文档的元件寻址的一语言,设计为 XSLT 和 XPointer 使用

请写出以下XPath定义的含义

Invoice

name=@name则返回1反之返回0

 

(20)同上例有表,试着往表中增加字段password (32个等宽字符,非空,默认为空字符串)

 

第五部分C#.net

(21)int[][] myArray3=new int[3][]{new int[3]{5,6,2},new int[5]{6,9,7,8,3},new int[2]{3,2}}; myArray3[2][2]的值是()。

  A. 9

  B. 2

  C. 6

  D. 越界

(22)abstract class BaseClass

    {

        public virtual void MethodA()

        {

            Console.WriteLine("BaseClass");

        }

        public virtual void MethodB()

        {

        }

    }

    class Class1 : BaseClass

    {

        public void MethodA()

        {

            Console.WriteLine("Class1");

        }

        public override void MethodB()

        {

        }

    }

    class Class2 : Class1

    {

        new public void MethodB()

        {

        }

    }

    class MainClass

    {

        public static void Main(string[] args)

        {

            Class2 o = new Class2();

            o.MethodA();

            Console.Read();

        }

    }

以上代码输出的结果是?(  )

      A. BaseClass

   B. BassClass Class1

   C. Class1

   D. Class1 BassClass

(23) 委托和事件这两个概念是完全配合的。委托仅仅是函数指针,那就是说,它能够引用函数,通过传递地址的机制完成。委托是一个类,当你对它实例化时,要提供一个引用函数,将其作为它构造函数的参数。每一个委托都有自己的签名,例如:

Delegate int SomeDelegate(string s, bool b);是一个委托申明,在这里,提及的签名,就是说SomeDelegate 这个委托有 string 和 bool 类型的形参,返回一个int 类型。

System.Web.UI.WebControls.Repeater已定义了

Delegate void RepeaterItemEventHandler(void(object,RepeaterItemEventArgs) target)

请将它的ItemDataBound事件委托至rep_ItemDataBound,并写出rep_ItemDataBound方法原型

 

(24)简单说明接口和纯虚类之间的区别

 

(25)简单列举ADO.net中的常用类和简要说明

 

(26)写出我国身份证号码的正则表达式15位数字/18位数字/17位数字或大小写的X

(27)填空完成下面的反射示例,设Hubei.Blackant.Controls.BaseUserControl已定义

  private string LoadAscxFile(string ascxFileName) {

            try {

    ascxFileName="Hubei.Blackant.Controls.BaseUserControl";

                    Type t = ___________________________________________________;

                    BaseUserControl buc = _____________________________________;

                    StringWriter sw = new StringWriter();

                    HtmlTextWriter htw = new HtmlTextWriter(sw);

                    buc.RenderControl(htw);

                    return sw.ToString();

            }

            catch (Exception excep){

                return excep.ToString();

            }

        }

(28) 以下是asp.net页面生命周期中的十个事件。每次我们请求一个asp.net页面时,我们都经历着同样的过程,请按事件的发生先后顺序重新排列

A:初始化对象(Init)

B:呈递给html(Render)

C:引发客户端回传事件(RaisePostBackEvent)

D:保存viewstate(SaveViewState)

E:销毁对象(Unload)

F:导入对象(Load)

G:导入viewstate数据 (LoadViewState)

H:处理postback数据(LoadPostData)

I:预先呈递对象(PreRender)

J:引发回传变更RaisePostDataChanged

________________________________________________________________________________

(29)a=10,b=15,在不用第三方变题的前提下,把a,b的值互换

(30)海盗分金的故事

    5个海盗抢到了100颗宝石,每一颗都一样的大小和价值连城。

  他们决定这么分:

  1。抽签决定自己的号码(1,2,3,4,5)

  2。首先,由1号提出分配方案,然后大家5人进行表决,当且仅当半数和超过半数的人同意时,按照他的提案进行分配,否则将被扔入大海喂鲨鱼。

  3。如果1号死后,再由2号提出分配方案,然后大家4人进行表决,当且仅当半数和超过半数的人同意时,按照他的提案进行分配,否则将被扔入大海喂鲨鱼。

  4。依次类推......

问题:第一个海盗提出怎样的分配方案才能够使自己的收益最大化

条件:每个海盗都是很聪明的人,都能很理智的判断得失,从而做出选择

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

1. 填空: (1)面向对象的语言具有________性、_________性、________性。

      (2)能用foreach遍历访问的对象需要实现 ________________接口或声明________________方法的类型。

         (3)列举ADO.net中的五个主要对象_______________、_____________、_______________、_______________、_________________。

2. 不定项选择:

(1) 以下叙述正确的是:

      A. 接口中可以有虚方法。     B. 一个类可以实现多个接口。

      C. 接口不能被实例化。       D. 接口中可以包含已实现的方法。

   (2) 从数据库读取记录,你可能用到的方法有:

      A. ExecuteNonQuery            B. ExecuteScalar

      C. Fill                        D. ExecuteReader

3. 简述 private、 protected、 public、 internal 修饰符的访问权限。

4. 写出一条Sql语句:取出表A中第31到第40记录(SQLServer, 以自动增长的ID作为主键,  注意:ID可能不是连续的。)

5 .列举ASP.NET 页面之间传递值的几种方式。

6. 写出程序的输出结果

class Class1  {

       private string str = "Class1.str";

       private int i = 0;

       static void StringConvert(string str)  {

           str = "string being converted.";

       }

       static void StringConvert(Class1 c)  {

           c.str = "string being converted.";

       }

       static void Add(int i)  {

           i++;

       }

       static void AddWithRef(ref int i)  {

           i++;

       }

       static void Main()  {

           int i1 = 10;

           int i2 = 20;

           string str = "str";

           Class1 c = new Class1();

           Add(i1);

           AddWithRef(ref i2);

           Add(c.i);

           StringConvert(str);       

           StringConvert(c);

           Console.WriteLine(i1);

           Console.WriteLine(i2);

           Console.WriteLine(c.i);

           Console.WriteLine(str);

           Console.WriteLine(c.str);

       }

    }

7.写出程序的输出结果

public abstract class A

{

        public A()

       {

            Console.WriteLine('A');

        }

        public virtual void Fun()

       {

            Console.WriteLine("A.Fun()");

        }

}

public class B: A

{

        public B()

       {

            Console.WriteLine('B');

        }

        public new void Fun()

       {

            Console.WriteLine("B.Fun()");

        }

        public static void Main()

       {

           A a = new B();

           a.Fun();

        }

}

8.      写出程序的输出结果:

public class A

{

        public virtual void Fun1(int i)

       {

            Console.WriteLine(i);

        }

        public void Fun2(A a) 

       {

            a.Fun1(1);

            Fun1(5);

        }

}

public class B : A

{

        public override void Fun1(int i)  

       {

            base.Fun1 (i + 1);

        }

        public static void Main() 

       {

            B b = new B();

            A a = new A();

            a.Fun2(b);

            b.Fun2(a);        

        }

}

9. 一列数的规则如下: 1、1、2、3、5、8、13、21、34......

   求第30位数是多少,用递归算法实现。(C#语言)

10.  程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)

要求:  1.要有联动性,老鼠和主人的行为是被动的。

2.考虑可扩展性,猫的叫声可能引起其他联动效应。

参考答案:

1. (1)  继承性、封装性、多态性。(考基本概念)

   (2)  IEnumerable 、 GetEnumerator (对foreach机制的理解,本来不想出这题的,凑分)

   (3)  ... (送分题, 对ADO.net的了解)

评分标准:一空1分,满分10分。

 

2. (1) B、C (考对接口的理解)  (2)  B、C、D (考查对ADO.net的熟练程度)

  评分标准: 一题5分,不选或者错选均不得分。漏选得2分。满分10分。

 

3. . private :   私有成员, 在类的内部才可以访问。

     protected : 保护成员,该类内部和继承类中可以访问。

     public :    公共成员,完全公开,没有访问限制。

     internal:   在同一命名空间内可以访问。

评分标准:答对1题2分,2题5分,3题7分。全对10分。 (送分题)

 

4.  解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)

    评分标准:写对即10分。(答案不唯一,datagrid 分页可能需要用到)

 

5.  1.使用QueryString,  如....?id=1; response. Redirect()....

    2.使用Session变量

    3.使用Server.Transfer

    ....

   评分标准:答对1点得3分,两点7分, 3点10分。

6.  (考查值引用和对象引用)

10

21

0

str

string being converted.

评分标准:答对一点得2分,满分10分。

7.  A

    B

A.Fun()

评分标准: 写出A.B 得5分,写出A.Fun()得5分,满分10分。

(考查在继承类中构造函数, 以及new 方法, )

 

8.  2

    5

    1

    6

评分标准: 答对一点得2分,两点得5分,3点得7分。全对得10分。

(一些人做这题,头都晕了.... ^_^ )

 

9.

    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);

        }

    }

评分标准: 写出return Foo(i -1) + Foo(i - 2); 得5分。

 写出if(i > 0 && i <= 2) return 1; 得5分。

           方法参数过多需要扣分(扣除分数 = 参数个数 - 1)

           不用递归算法扣5分

           (递归算法在树结构建立等方面比较常用)

 

10         

 要点:1. 联动效果,运行代码只要执行Cat.Cryed()方法。2. 对老鼠和主人进行抽象

评分标准: <1>.构造出Cat、Mouse、Master三个类,并能使程序运行(2分)

            <2>从Mouse和Master中提取抽象(5分)

            <3>联动效应,只要执行Cat.Cryed()就可以使老鼠逃跑,主人惊醒。(3分)

    public interface Observer

    {

        void Response();    //观察者的响应,如是老鼠见到猫的反映

    }

    public interface Subject

    {

        void AimAt(Observer obs);  //针对哪些观察者,这里指猫的要扑捉的对象---老鼠

    }

    public class Mouse : Observer

    {

        private string name;

        public Mouse(string name, Subject subj)

        {         

            this.name = name;

            subj.AimAt(this);

        }

      

        public void Response()

        {

            Console.WriteLine(name + " attempt to escape!");

        }

    }

    public class Master : Observer

    { 

        public Master(Subject subj)

        {         

            subj.AimAt(this);

        }

      

        public void Response()

        {

            Console.WriteLine("Host waken!");

        }

    }

 

    public class Cat : Subject

    {

        private ArrayList observers;

        public Cat()

        { 

            this.observers = new ArrayList();

        }

        public void AimAt(Observer obs)

        {

            this.observers.Add(obs);

        }

        public void Cry()

        {

            Console.WriteLine("Cat cryed!");

            foreach (Observer obs in this.observers)

            {

                obs.Response();

            }

        }

    }

    class MainClass

    {     

        static void Main(string[] args)

        {

            Cat cat = new Cat();

            Mouse mouse1 = new Mouse("mouse1", cat);

            Mouse mouse2 = new Mouse("mouse2", cat);

            Master master = new Master(cat);

            cat.Cry();

        }

    }

//---------------------------------------------------------------------------------------------

设计方法二: 使用event -- delegate设计..

    public delegate void SubEventHandler();

    public abstract class Subject

    {

        public event SubEventHandler SubEvent;

        protected void FireAway()

        {

            if (this.SubEvent != null)

                this.SubEvent();

        } 

    }

    public class Cat : Subject

    {

        public void Cry()

        {

            Console.WriteLine("cat cryed.");

            this.FireAway();

        }

    }

    public abstract class Observer

    {

        public Observer(Subject sub)

        {

            sub.SubEvent += new SubEventHandler(Response);

        }

        public abstract void Response();  

    }

    public class Mouse : Observer

    {

        private string name;

        public Mouse(string name, Subject sub) : base(sub)

        { 

            this.name = name;

        }

        public override void Response()

        {

            Console.WriteLine(name + " attempt to escape!");

        }

    }

    public class Master : Observer

    {

        public Master(Subject sub) : base(sub){}

        public override void Response()

        {

            Console.WriteLine("host waken");

        }

    }

    class Class1

    {

        static void Main(string[] args)

        {

            Cat cat = new Cat();

            Mouse mouse1 = new Mouse("mouse1", cat);

            Mouse mouse2 = new Mouse("mouse2", cat);

            Master master = new Master(cat);

            cat.Cry();

        }

    }

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

1.<%# %> 和 <%  %> 有什么区别?

2.以下代码能否通过编译?如果不能,请改成正确代码,并说明原因。

<html>

   <%

       int subtract(int num1, int num2) {

          return num1-num2;

       }

   %>

   <body>

      <%

         int number = 100;

         while (number > 0) {

            Response.Write("value: " + number + "<br/>");

            number = subtract(number, 1);

         }

      %>

   </body>

</html>

3.通过Web Site Administration Tool (in VS2005) 可以实现哪些功能?Web Site Administration Tool 会自动对哪些文件进行修改或添加?

4.解释一下带 “original_” 前缀的Data Parameter和不带前缀的Data Parameter有什么异同。(可用简单的代码说明)

5.修改下面的代码段,使GridView能Update数据。

<%@ Page Language="C#" %>

<html>

  <head runat="server">

    <title>GridView</title>

  </head>

  <body>

    <form id="form1" runat="server">

      <asp:GridView ID="GridView1" AllowSorting="true" AllowPaging="true" Runat="server"

        DataSourceID="SqlDataSource1" DataKeyNames="id" AutoGenerateColumns="False">

        <Columns>

          <asp:BoundField ReadOnly="true" HeaderText="ID" DataField="id" SortExpression="id" />

          <asp:BoundField HeaderText="Last Name" DataField="lname" SortExpression="lname" />

          <asp:BoundField HeaderText="First Name" DataField="fname" SortExpression="fname" />

        </Columns>

      </asp:GridView>

      <asp:SqlDataSource ID="SqlDataSource1" Runat="server"

SelectCommand="SELECT [id], [lname], [fname] FROM [authors]"

        ConnectionString="<%$ ConnectionStrings:Pubs %>" />

    </form>

  </body>

</html>

6.GridView没有内置Insert 数据的功能,如果想在GridView内Insert数据,你有什么想法?

7.ASP.NET 2.0 哪个(些)特性是你觉得最激动人心的?为什么?(也可以谈C#2.0)

   ASP.NET 2.0相对于1.1突出了3大理念,

     1,提高生产力

A 一致性(masterpage)

B 会员管理

C 资料存取

D 个性化

     2 管理能力的提高(例如WEB.CONFIG)

     3 提升效能,满足更多人的访问

8.你觉得ASP.NET 2.0(VS2005)和你以前使用的开发工具(.Net 1.0或其他)有什么最大的区别?你在以前的平台上使用的哪些开发思想(pattern / architecture)可以移植到ASP.NET 2.0上 (或者已经内嵌在ASP.NET 2.0中)

  1  ASP.NET 2.0 把一些代码进行了封装打包,所以相比1.0相同功能减少了很多代码.

  2  同时支持代码分离和页面嵌入服务器端代码两种模式,以前1.0版本,.NET提示帮助只有在分离的代码文件,无法在页面嵌入服务器端代码获得帮助提示,

  3 代码和设计界面切换的时候,2.0支持光标定位.这个我比较喜欢

  4 在绑定数据,做表的分页.UPDATE,DELETE,等操作都可以可视化操作,方便了初学者

  5, 在ASP.NET中增加了40多个新的控件,减少了工作量

 

===================

 

 

1、override与重载的区别

2、.net的错误处理机制是什么

3、C#中接口和类的异同

4、DataReader和DataSet的异同

Override用来重写父类的方法,重载使用相同名的方法或操作符拥有不同类型的参数

.net错误处理机制采用try->catch->finally结构,发生错误时,层层上抛,直到找到匹配的Catch为止。

接口和类都是类,不同的事,接口只包含方法或属性的声明,不包含具体实现方法的代码,接口可以实现多继承,而类只能是单继承,继承接口的类必须实现接口中声明的方法或属性。接口主要定义一种规范,统一调用方法,在大型项目中接口正发挥日益重要的作用。

DataReader用于读取数据,DataSet用于在内存中保存数据。

重载与覆盖的区别

1、方法的覆盖是子类和父类之间的关系,是垂直关系;方法的重载是同一个类中方法之间的关系,是水平关系。

2、覆盖只能由一个方法,或只能由一对方法产生关系;方法的重载是多个方法之间的关系。

3、覆盖要求参数列表相同;重载要求参数列表不同。

4、覆盖关系中,调用那个方法体,是根据对象的类型(对象对应存储空间类型)来决定;重载关系,是根据调用时的实参表与形参表来选择方法体的。

4、DataReader和DataSet的异同

DataReader和DataSet最大的区别在于,DataReader使用时始终占用SqlConnection,在线操作数据库..任何对SqlConnection的操作都会引发DataReader的异常..因为DataReader每次只在内存中加载一条数据,所以占用的内存是很小的..因为DataReader的特殊性和高性能.所以DataReader是只进的..你读了第一条后就不能再去读取第一条了..

DataSet则是将数据一次性加载在内存中.抛弃数据库连接..读取完毕即放弃数据库连接..因为DataSet将数据全部加载在内存中.所以比较消耗内存...但是确比DataReader要灵活..可以动态的添加行,列,数据.对数据库进行回传更新操作...

 

===============

 

 

 

一.填空题

1.c#中的三元运算符是_____?

2.当整数a赋值给一个object对象时,整数a将会被_____?

3.类成员有_____种可访问形式?

4.public static const int A=1;这段代码有错误么?是什么?

5.float f=-123.567F;

  int i=(int)f;

i的值现在是_____?

6.利用operator声明且仅声明了==,有什么错误么?

7.委托声明的关键字是______?

8.用sealed修饰的类有什么特点?

9.在Asp.net中所有的自定义用户控件都必须继承自________?

10.在.Net中所有可序列化的类都被标记为_____?

11.在.Net托管代码中我们不用担心内存漏洞,这是因为有了______?

12.下面的代码中有什么错误吗?_______

     using System;

     class A

     {

          public virtual void F(){

              Console.WriteLine("A.F");

           }

      }

      abstract class B:A

       {

           public abstract override void F();

       }

13.当类T只声明了私有实例构造函数时,则在T的程序文本外部,______(可以 or 不可以)从T

派生出新的类,____(可以 or 不可以)直接创建T的任何实例。

14.下面这段代码有错误么?

    switch (i){

    case():

        CaseZero();

        break;

    case 1:

        CaseOne();

        break;

    case 2:

        dufault;

        CaseTwo();

        break;

   }

15.在.Net中,类System.Web.UI.Page 可以被继承么?

二.简答题

1.在c#中using和new这两个关键字有什么意义,请写出你所知道的意义?

2.在下面的例子里

     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的实例时,产生什么输出?

3.下面的例子中

     using System;

     class A

     {

          public static int X;

          static A(){

               X=B.Y+1;

          }

      }

      class B

      {

           public static int Y=A.X+1;

           static B(){}

           static void Main(){

                Console.WriteLine("X={0},Y={1}",A.X,B.Y);

           }

       }

产生的输出结果是什么?

4.谈谈类和结构的区别?

5.一个长度为10000的字符串,通过随机从a-z中抽取10000个字符组成。请用c#语言编写主要程

序来实现。

6.对于这样的一个枚举类型:

      enum Color:byte{

          Red,

          Green,

          Blue,

          Orange

       }

试写一段程序显示出枚举类型中定义的所有符号名称以及它们对应的数值。

7.您了解设计模式么?请列出您所知道的设计模式的名称。

8.请在SQL Server中设计表来保存一个树状结构的组织结构图(假设结构图中只有名称这一项内容

需要保存),如果我想查询某一职位下的所有职位,用一个存储过程来实现,你有什么思路?

9.什么叫做SQL注入,如何防止?请举例说明。

10.下面这段代码输出什么?为什么?

     int i=5;

     int j=5;

     if (Object.ReferenceEquals(i,j))

          Console.WriteLine("Equal");

     else

          Console.WriteLine("Not Equal");

1 ?:

2 装箱

3 3种

4 const成员都是static所以应该去掉static

5 -123

6 要同时修改Equale和GetHash() ? 重载了"==" 就必须重载 "!="

7 delegate

8 不可被继承

9 System.Web.UI.UserControl

10 [serializable]

11 gC

12 abstract override 是不可以一起修饰

13 不可以,不可以

14 case():不行 default;

15 可以

1 Using 引入一个名子空间,或在使用了一个对像后自动调用其IDespose,New 实例化一个对

像,或修饰一个方法,表此方法完全重写此方法,

2 X=1,Y=0

3 x=1,y=2

4 最大区别一个是引用类型,一个是值类型   默认成员访问为public是另外一个区别

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xieyongbao/archive/2008/05/08/2414661.aspx