.net面试题(答案可是花了好几天整理的噢!)

来源:互联网 发布:c 串口编程视频教程 编辑:程序博客网 时间:2024/04/27 15:56

1、简述 private protected public internal 修饰符的访问权限

答:private 私有成员 在该类的内部才可以访问

    Protected 保护成员 在该类中和该类的继承类中可以访问

     Public   公共成员 完全公开,没有访问权限

           Internal  在同一个命名空间内可以访问

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

    答:Querrysting属性;  session变量 server.transfer方法

3. 一列数的规则如下: 112358132134...... 求第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#中的委托是什么?事件是不是一种委托?

答:委托是一种可以把引用存储为函数的类型。委托的声明非常类似于函数,但不带函数体,且要使用delegate关键字。委托的声明制定了一个返回类型和一个参数列表。

声明委托后就可以定义该该委托类型的变量,接着把这个变量初始化为与委托有相同返回类型和参数列表的的函数引用,之后就可以使用委托变量调用这个函数,就像该变量是一个函数一样。

委托类似于函数指针,但函数指针只能引用静态方法,而委托既能引用静态方法,也能引用实例方法。ITPUB个人空间)N%lz1Gu­QITPUB个人空间n2mg lG A;_Pz
委托使用分三步:1、委托声明。2、委托实例化。3、委托调用。ITPUB个人空间b%i GIg;/

#T[x7I
V0S+S9_P2]5?"sl0
委托声明了以后,就可以象类一样进行实例化,实例化时把要引用的方法(如:Add)做为参数,这样委托和方法就关联了起来,就可以用委托来引用方法了。

-w6jh?3Xl3f n%U0
委托和所引用的方法必须保持一致:
1? Z/F9XQ/|J­f01
、参数个数、类型、顺序必须完全一致。
6Z;d+eb"w


i02、返回值必须一致。­Vz5[{s0ITPUB个人空间:bF v­?hF
AD Q,^

 

有事件,就会有对事件进行处理的方法,而事件和处理方法之间是怎么联系起来的呢?委托就是他们中间的桥梁,事件发生时,委托会知道,然后将事件传递给处理方法,处理方法进行相应处理。ITPUB个人空间%? Vu‑c3Hn2?

f^h9/+o'd w0
比如在WinForm中最常见的是按钮的Click事件,它是这样委托的:this.button1.Click += new System.EventHandler(this.button1_Click);按按钮后就会出发button1_Click方法进行处理。EventHandler就是系统类库里已经声明的一个委托。-------委托实例化,this.buttion1_click为方法名
EventHandler
以及其它自定义的事件委托都是一类特殊的委托,他们有相同的形式:
/}*_{ A­{&But0
‑J,Eo zH5A7[ `0delegate void
事件委托名(object sender,EventArgs e);
5.重写(override)与重载(overloads)的区别

答:使用overrride修饰符来修改方法、属性、索引器或事件。重写方法提供从基类继承的成员的实现。重写基方法必须和重写方法具有相同的签名。重写基方法必须是虚拟的、抽象的或重写的。

继承时发生,在子类中重新定义父类中的方法,子类中的方法和父类的方法是一样的

Overloads 是指在一个类中用相同名称但是不同的参数类型创建一个以上的过程、实例构造函数和属性。

同一个作用域内发生(比如一个类里面),定义一系列同名方法,但是方法的参数列表不同。7.请编程遍历页面上所有TextBox控件并给它赋值为string.Empty

答:使用递归对页面control树进行完全遍历,并对每一个control进行处理。递归算法如下:

传入pagethis.Colletions ;对每一个contorl,如果contorl没有包含子control,进行处理;如果包含,递归调用这个函数处理子control

 

private void InitialControl(System.Web.UI.ControlCollection objControlCollection)
    
{
        
foreach (System.Web.UI.Control objControl in objControlCollection)
        
{
            
if (objControl.HasControls())
            
{
                InitialControl(objControl.Controls);
            }
            
else
            
{
                
if (objControl is System.Web.UI.WebControls.TextBox)
                
{
                    ((TextBox)objControl).Text = String.Empty;
                   }
               }
           }
       }

8.请编程实现一个冒泡排序算法?

答:

class Program

    {

        static void Main(string[] args)

        {

            int[] str = { 12, 5, 21, 45, 9, 5, 48, 15, 59, 78 };

            int temp = 0;

            for (int i = 0; i < str.Length-1;i++ )

            {

                for (int j = i + 1; j < str.Length; j++)

                {

                    if (str[i] < str[j])

                    {

                        temp = str[i];

                        str[i] = str[j];

                        str[j] = temp;

                    }

                }

            }

            foreach(int x in str)

            {

                Console.WriteLine(x);

            }

                Console.ReadKey();

           

        }

}

9.描述一下C#中索引器的实现过程,是否只能根据数字进行索引?

答:所谓索引器就是一类特殊的属性,通过他们你就像引用数组一样引用自己的类。类里定义的每一个索引器必须拥有唯一的标签或参数列表;索引器必须是实例成员;为索引器定义的访问函数可以访问传递给索引器的参数。

<modifier> <return type> this [argument list]
...{
get
...{
// Get codes goes here
 }
set
...{
// Set codes goes here
 }
 }

注:

modifier:修饰词,如private, public, protected or internal

this:在C#this是一个特殊的关键字,它表示引用类的当前实例。在这里它的意思是当前类的索引。

argument list:这里指索引器的参数。

索引器参数可以采用任何类型,不过int是通常采用也是最为合理的类型。

 

10.求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m
答:

11..netB/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层?
答:用3层结构来开发;数据访问层,业务层,表示层;数据访问层对数据库进行增删改查,业务层分业务表观层和业务规则层,表观层实现与表示层的沟通,规则层实现用户密码的安全,表示层用于与用户交互;优点:分工明确,条理清晰,易于调试,可扩展性好;

缺点:增加成本

13.什么叫应用程序域?
答:a.应用程序域是为隔离正在运行的应用程序提供了一种灵活而安全的方法

b.应用程序域通常由运行库宿主创建和操作,有时,你可能希望应用程序以编程的方式与应用程序域交互,例如想在不停止某个应用程序时卸载某个组件;

c.应用程序域使得应用程序以及应用程序的数据彼此分离,有助于提高安全性单个进程可以运行多个应用程序域,并具有在单独进程中所存在的隔离级别。在单个进程中运行多个应用程序提高服务器的伸缩性;

14.CTSCLSCLR分别作何解释?
答:CTS 是通用类型系统(Common Type System):主要是实现了com的变量兼容类型,而且还定义了通过用户自定义类型的方式来进行类型扩展;任何以.net平台作为目标的语言必须建立他的数据类型与CTS的类型间的映射;

CLS是公共语言规范(Common Language Specification):很显然编程语言的区别不仅仅在于类型还有是否支持多继承性、是否支持无符号数据类型、是否支持运算符重载等,CLS限制了有这些不同而所引发的互操作性问题;CLS制定了一种以.net平台为目标的语言所必须支持的最小特征,以及该语言和其他.net语言之间实现互操作性所需要的完备特征;CLSCTS的一个子集;

CLR 是公共语言运行库(Common Language RunTime:CLR CTS的实现;CLR是应用程序的执行引擎和功能齐全的类库。该类库严格按照CTS规范实现;作为程序执行引擎,CLR负责安全的载入和运行用户的程序代码,包括对不用对象的垃圾回收和安全检查;在CLR监控之下的代码为托管代码,做为类库CLR提供上百个可用的有用类型,这些类型可通过继承进行扩展;

Clr---是一个托管的处理的环境,用以处理存储配置、错误跟踪以及与操作系统服务的信息交互,他其实是一个虚拟执行系统,主要负责运行所有的托管代码;

15.什么是装箱和拆箱?
答:装箱是指将值类型转换为引用类型;一个装箱的过程是将值类型转换为引用类型的过程:如:int val = 100; object obj = val; console.WriteLine(“对象的值是:{0}”obj);

拆箱是指将引用类型转换为值类型;一个拆箱的过程是将值类型转换为引用类型,再将引用类型转换为值类型的过程;如:int val = 100; object obj = val; int num = (int)obj; Console.WriteLine(“num的值:{0}”num);

16.什么是受管制的代码?
答:托管代码就是把有关内存管理(内存分配、内存释放、垃圾回收之类)都是由.netCLR来管理的程序代码,也就是说使用托管代码把底层的一些操作都封装起来了,不能直接进行内存读取之类的和硬件相关的操作;优点:比较安全不会出现内存泄露的问题。缺点:不能直接读取内存,性能上会有所损失。使用起来有时也不够灵活。

17.什么是强类型系统?
答:使用强类型语言的系统,因为每个对象和变量都必须要声明类型。

18.net中读写数据库需要用到那些类?他们的作用?
答:DataSet 数据存储器,用来无连接的存储多个表的数据及表之间的关联关系;SqlConnection 连接数据库;

SqlCommand 执行SQL语句和存储过程

 SqlDatareader 实现对数据表记录向前读取,一次读取一条记录;

SqlDataAdapter 用来将数据填充到dataset 和从dataset中把数据更新到数据库。

19.ASP.net的身份验证方式有哪些?分别是什么原理?
答:Windows身份验证提供程序:提供有关如何将Windows身份验证与Microsoft internet信息服务(IIS)身份验证结合使用来确保asp.net应用程序安全的信息。

Forms身份验证提供程序:提供有关如何使用您自己的代码来创建应用程序特定登陆页面并执行什么验证的信息,使用forms身份验证的最简单的方法是asp.net的成员资格和asp.net的登陆控件,他们一起提供了一种只需少量或无需代码就可以收集、验证、管理用户凭据的方法。

Passport身份验证提供程序:提供有关由Microsoft提供的集中身份验证服务的信息,该服务为成员站点提供单一登录和核心配置。

20.什么是Code-Behind技术?
答:即代码隐藏,主要是通过aspx页面指向对应的cs文件,可以实现显示逻辑和处理逻辑的分离,这样做有别于以前asp页面和代码全混在一起不容易后期的维护和修改,使用code behind更容易维护,美工和程序员可以很好的分工。

ASPX,RESXCS三个后缀的文件,这个就是代码分离.实现了HTML代码和服务器代码分离.方便代码编写和整理.

21..net中,配件的意思是?
答:指程序集,包括中间语言、元数据、资源、装配清单等;

有时一个配件是指一个exedll文件,实际上是一个应用程序(就是指带有主程序入口点的模块)或者一个库文件;但配件实际上可以是由一个或者多个文件组成,代表一组资源以及类型的定义和实现的集合。一个配件也可以包含其他配件的引用,所有这些资源、类型、引用都在一个列表中描述。

22.常用的调用WebService的方法有哪些?
答:可以根据WSDL文件生成客户端。或直接根据地址调用,直接调用主要有axissoap两种方法;

vs.net中常规处理是添加web引用来调用;即添加web引用然后实例化对象,对象.(就可以看到里面的方法)

23..net Remoting 的工作原理是什么?
答:.net remoting 可以看做是一种分布式处理方式,提供了一种允许对象通过应用程序域与另一对象进行交互的框架;

Remoting中是通过通道实现两个应用程序域之间对象的通信

首先客户端通过Remoting访问通道以获得服务器端对象,再通过代理解释为客户端对象,然后客户端在通过Remoting连接服务器,获得该服务器对象并通过序列化在客户端运行;

Remoting中,对于要传递的对象只需要了解通道的类型的端口号外无需了解数据包的格式,但要主要客户端获得的不是实际的服务器端对象而是它的引用;

24.C#中,string str = null string str = “” 请尽量使用文字或图象说明其中的区别。
答:string str = null 是不给他分配内存空间。String str = “” 是给给分配长度为空字符串的内存空间。

25.请详述在dotnet中类(class)与结构(struct)的异同?
答:结构和类共享几乎所有相同的语法,但结构比类受到的限制跟多。它们的区别如下:

1.值类型和引用类型:结构是值类型是在堆栈上分配地址,所有的基类型都是结构类型;类是引用类型是在堆上分配地址。堆栈的执行效率要比堆得执行效率高。

2.继承性:结构不能从另外一个结构及结构本身或者类继承,但结构可以继承接口,方法同类继承接口相同;类是完全可扩展的,除非显示的声明是sealed否则类可以继承其他类和接口,自身也可以被继承。

3.内部结构:结构没有默认的构造函数但可以添加构造函数,没有析构函数,没有abstractsealed,不能有protected修饰符,可以使用new初始化;类有默认的构造函数和析构函数,有abstractsealed,protected修饰符,必须使用new初始化;

如何该选择结构还是类:a.堆栈的空间有限对于大量的逻辑的对象,创建类要比创建结构好一些。b.结构表示点、矩形和颜色这样的轻量对象。c. 在表现抽象和多级别的对象层次时,类是最好的选择。大多数情况下该类型只是一些数据时,结构是最佳的选择。

26.根据委托(delegate)的知识,请完成以下用户控件中代码片段的填写:

namespace test
{
public  delegate  void  OnDBOperate();
public  class  UserControlBase : System.Windows.Forms.UserControl
{
public  event  OnDBOperate  OnNew;
private void toolBar_ButtonClick(objectsender, System.Windows.Forms.ToolBarButtonClickEventArgs  e)
      {
      if(e.Button.Equals(BtnNew))
             {
            //
请在以下补齐代码用来调用OnDBOperate委托签名的OnNew事件。

             }
       }
}
答:if( OnNew != null )
      {OnNew( this, e );}

28.SQLSERVER服务器中,给定表 table1 中有两个字段 IDLastUpdateDateID表示更新的事务号, 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,那么死锁会发生)

如果 i Object类型,则会发生死锁,因为Object是引用类型,lock(this)语句锁定了 test方法
同时锁定方法拥有的资源,这时 Object i 被锁定,由于i是引用类型,所以递归中的i都是同一个Object对象
i是被锁定的.....于是发生死锁!

30.简要谈一下您对微软.NET 构架下remotingweb service两项技术的理解以及实际中的应用。
答:.net remoting 的工作原理是:服务器端向客户端发送一个进程编号、一个程序域编号,以确定对象的位置,Remoting可以利用tcp/ip,二进制传送提高效率。Remoting.net   中用来跨越MachineProcessAppdomain进行方法调用的技术对于三层结构的程序,就可以使用remoting技术来构建,他是分布应用的基础技术相当于以前的DCOM

Web Service 是一种构建应用程序的普通模型并能在所有支持internet网通讯的操作系统上实施。Web Service 令基于组件的开发和web的结合达到最佳。

 

 RemotingmarshByReference的,可以传变量的引用,直接对服务器对象操作,速度快,适合intranet;Web ServicemarshByValue的,必须传对象的值,速度慢可以穿过防火墙,配置比较简单,适合internet.

 

Remoting是和平台相关的,需要客户端和服务器端都是.net。但可配置特性比较好,可以自定义协议;

Web Service 可以做到跨平台通信,但必须采用soap协议。

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)的流程图(请使用递归算法)
答:private void DomDepthFirst(XmlNode currentNode)

{

      XmlNode node = currentNode.firstChild;

      While (node != null)

       {

           DomDepthFirst(node);

           Node = node.NextSibling;

}

If(node.Name == “file”)

{

  Console.Write(((XmlElement)node).GetAttribute(“FileName”)+”/r/n”);

}

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

答:一、Select top 10 * From A Where ID not in(Select top 30 ID From A )

二、Select top 10 * From A Where ID > (Select MSX(ID) From (select top 30 ID From A) as A )

34.面向对象的语言具有________性、_________性、________
答:封装性,继承性,多态性

35.能用foreach遍历访问的对象需要实现 ________________接口或声明________________方法的类型。
答:IEnumerable GetEnumerator

36.GC是什么? 为什么要有GC?
答:gc是垃圾回收器;程序员不必担心内存管理,因为GC会自动进行内存管理;可以通过Syste.gc() Runtime.GetRuntime().gc()来调用;

37.String s = new String("xyz");创建了几个String Object?
答:两个对象,一个是“xyz,一个是指向“xyz”的引用对象S

38.abstract classinterface有什么区别?
答:(1组成结构上:abstract class 可以包含 abstract Mathods Abstract properties ,也可以包含其他的Members,像正常的Class一样。而Interface 只能包含Abstract Mathods Properties Interface中的所有Mathods praperties不需要添加Public Abstrat 关键字,因为这两个关键字在Interface中的默认的。

2使用选择上:一般来讲,在设计时优先考虑使用 Class Abstract Class 而不是InterfaceInterface的主要缺点就是灵活性比较差,一旦定义好了Interface那么他的Members就固定了,如果你要对已发布的程序添加新的Members就会破坏你已经实现该接口的TypeClassStruct),因为你必须在你已有的Type中实现新的方法 ,否则你的程序将无法通过编译。

2使用选择上:Class 则可以提供更好的灵活性。你可以给Class添加任何Members,只要不是添加Abstract Method即可(也就要提共一个有具体实现的方法),这样就不会影响从该类继承的类已有代码无需做任何改变。

 

3设计原则:优先考虑使用ClassAbstract Class 而不是Interface;使用Abstract Class 来代替Interface来降低Class继承层次之间的耦合性;如果你要给一个值类型实现多态继承 则只能使用Interface;在需要多重继承的情况下,可以考虑使用Abstract Class

39.启动一个线程是用run()还是start()?
答:启动一个线程肯定要用Start()方法,通过调用Thread类的Start()方法启动一个线程,此线程处于就绪状态并没有运行,然后通过此Thread类调用Run()方法来完成其运行的操作,这里Run()方法称为线程体,它包含了要执行这个线程的内容,Run()方法运行结束,此线程终止而Cpu再运行其他线程

40.接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。

44.两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
答:不对,有相同的Hash Code 即散列码;hashCode就是一种查找的索引值。通过hashCode来查找hashTable中的存储元素。每个对象在内存当中的存储组织方式就是利用这种散列方式存储,当然也就有它的hash   Code了,如果想获取这个对象在Hash   表中的位置,就可以调用 Object.hashCode()   结果返回int型。

45.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String?
答:

50.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
答:

52.sleep() wait() 有什么区别?
答:sleep()Thread类的静态方法,它的作用就是让线程休眠定制的时间,时间到达时恢复线程的执行。

Wait()是Object的方法,当线程对一个对象调用Wait() 方法,该线程会暂停执行被调对象进入等待状态直到被唤醒。

53.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
答:

54.谈谈final, finally, finalize的区别。
答:final 修饰符,用于声明属性方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

Finally 标识符,是异常处理语句结构的一部分,表示总是执行。

Finalize Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的该方法,可以覆盖该方法提供垃圾收集时的其他资源的回收,比如说关闭文件。

final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。

  finally—
再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。

  finalize—
方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

55.如何处理几十万条并发数据?
答:用存储过程和事物,取得最大标识的时候同时更新。注意主键不能重复,用存储过程来获得最大标识。

56.Session有什么重大BUG,微软提出了什么方法加以解决?
答:在IIS中有进程回收基质,系统繁忙的话Session会丢失;可以用sate server sql server 数据库的方式存储session ,不过这种方式比较慢,而且无法捕获sessionend 事件。

57.进程和线程的区别?
答:1):定义解释

进程是具有一定独立功能程序在关于某个数据集上的一次运行活动。进程是系统进行资源分配和调度的一个独立单位。

线程是进程的一个实体,是Cup调度的基本单位。它是比进程更小的能独立运行的基本单位,线程只拥有一点在运行中必不可少的资源,可与同一个进程中其他线程共享进程中所拥有的所有资源。一个线程可以创建和销毁另一个线程,同一进程中的多个线程可以同时并发执行;

2)区别解释:

一个程序至少有一个进程,一个进程至少有一个线程。

线程的划分尺度小于进程,使得多线程程序并发行高,另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存从而极大的提高程序的运行效率。

进程有独立的地址空间一个进程崩溃后在保护模式下不会对其他进程产生影响,而线程只是一个进程中的不同执行路径;线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉。所以多进程的程序要比多线程的程序健壮,但在进程切换时耗费资源较大,效率要差一些。但对一些要同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

58.堆和栈的区别?
1)、申请方式上:栈由编译器自动分配释放,在函数体上定义的变量通常放在栈上;堆一般有程序员分配释放,用关键字New Malloc分配内存在堆上。

2)、申请后系统的响应:栈是只要栈的剩余空间大于所申请的空间,系统将为程序提供内存,否则报异常栈溢出;在堆中当系统收到程序申请时,遍历空闲链表寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲链表删除分配给程序。

3)申请大小的限制:栈向低地址扩展的数据结构,是一块连续的内存区域。栈顶地址和最大容量是系统预先定制好的所以能从栈获得的空间较小;堆是向高地址扩展的数据结构,是不连续的内存区域。获得空间比较灵活也比较大。

4)、申请效率上:栈是由系统自动分配速度较快;堆由new分配的内存速度比较慢且易产生碎片。

5)、存储内容上:栈是在函数调用时先进栈的是主函数中要运行下一条指令的地址,然后是函数的各个参数,其次是局部变量,调用结束后先进后出的方式出栈;堆一般在堆的头部用一个字节存放堆得大小,堆中内容有程序员来确定。

59.成员变量和成员函数前加static的作用?
答:Static修饰的作用是定义被修饰的对象的作用域和可见性,作用域是全局的可见性是局部的。

在类成员函数加Static关键字代表这个成员函数是属于类的,而非对象的,也就是所有该类的对象共同拥有这个成员函数,而不是普通的对象各自拥有一个成员函数;

加了Static的成员变量它是一个类属性,可以在对象还没有创建的时就可以对它进行初始化,它由该类的所有对象共同维护,不属于某一个对象,它的内存分配时Head中而非在Stack中。

60.ASP.NETASP相比,主要有哪些进步?
答:Asp使用VBScriptjavaScript,它脚本语言直接嵌入Html文档中应用程序与Html标签混杂在一起从而不易分辨,性能不易扩充,脚本语言的功能有限;Asp.net彻底抛弃了脚本语言,用C#VB.net编写为开发者提供更加强有力的编程资源,允许用服务器空间取代传统的Html元素,而且代码和界面分开利于美工和程序员同时进行工作。

具体表现在:

1)、执行效率的大幅提高:Asp以源码的形式存放,以解释方式运行。每次ASP网页调用都需要对源码进行解释,运行效率不高;ASP.net是把基于通用语言的程序在服务器上运行,不像以前的ASP即时解释程序,而是将程序在服务器端首次运行时进行编译,这个要比一条条解释快。

2)、强大开发工具支持:Asp.net 可以VS Studio系列强大的开发工具,只是所见即所得的开发支持。

3)、可扩充的适应性:Asp.net是语言独立,不但可以用C#编写相关代码,还可以用vb,jscript等语言来开发。

4)、多处理器环境的可靠性

5)、安全性:asp.net内置了安全型管理机制,相对asp安全性得到很大提高;

61.产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。

答:

class Program

    {

        static void Main(string[] args)

        {

            int[] str = new int[100];

            ArrayList myList = new ArrayList();

            Random rnd = new Random();

 

            while(myList.Count < 100)

            {

                int num = rnd.Next(1,101);

                if (!myList.Contains(num))

                    myList.Add(num);

            }

            for (int i = 0; i < 100;i++ )

            {

                str[i] = (int)myList[i];

                Console.Write(" {0}",str[i]);

 

            }

            Console.ReadKey();

 

           

        }

}

62.请说明在.net中常用的几种页面间传递参数的方法,并说出他们的优缺点。(对应第二题相同)
答:1)、使用querystring在页面间传递值,这种方法使用起来比较简单,若对传递的值少且安全性要求不高的情况下士不错的选择;缺点就是传递的值显示在浏览器的地址栏上不安全,同时有不能传递对象。

2)、Session变量传递值是在一个页面中把 控件中的值存到Session变量中,然后再另一个页面中使用它也达到页面间传值的目的。缺点就是Session变量存储值过多会消耗过比较多服务器资源,同时值容易丢失。优点使用简单。

3)、使用Server.transfer页面间传值稳定安全同时是面向对象的但性能相对减弱。该方法是通过对象属性的方式来存取值。

4)、使用Application全局变量

5)、使用cookieSession一样是对每个用户而言,但Session不同的是Cookie是放在客户端,而Session是放在服务器端而且Cookie的使用要配合asp.net的内置对象Request来使用。虽然Cookie使用简单但可能不支持或被伪造;

63.请指出GAC的含义
答:GAC即全局程序集缓存(Global Assembly Cache)。计算机范围内的代码缓存,它存储专门安装的程序集,这些程序集由计算机上的许多应用程序共享。在全局程序集缓存中部署的应用程序必须有强名称。

64.向服务器发送请求有几种方式?
答:GetPost 两种方式,Get是链接方式,Post是按钮方式;

1)、Get是从服务器上获取数据;post是向服务传送数据

2)Get是吧参数数据队列加到提交表单的Aaction属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到;Post是通过HttpPost机制,将其表单内各个字段及其内容放置在Html Header一起传送到Aaction属性所属的Url中,用户看不到这个过程。

3)、对于Get方式,服务器端用Request.QueryString 获取变量的值;对于Post方式,服务器端用Request.Form获取提交的数据。

4)、Get传送的数据量较小,不能大于2KBPost传送数据较大,默认是不受限制;

5)、Get安全性非常低,Post安全性高。

65.DataReaderDataset有什么区别?
答:DataSet表示一个数据集,是数据在内存中的缓存可以包含多个表,是非面向连接数据库的,把表全部读到SQL的缓冲池,并断开与数据库的连接。DataReader类似一个只能向前的游标记录集  是面向连接数据库的,读表时只能向前读取,读完数据后由用户决定断开连接。

DataSet可以离线处理,前后滚动.DataReader不能离线处理,且是只读的向前的,不过速度明显会很快 DataSet可以存储数据库各种对象的,比如表触发器等,而DataReader只能存储游标记录 
DataSet
可以更新回原来的数据库DataReader不行;  
DataSet
可以FORWORD     PREVIUS,而DataReader只能FW  
DataReader
类似一个只能向前的游标记录集  
DataSet
叫数据集!是ADO.net相对与ADO实现断开式数据库连接性的主要体现!DateReader是一个客户端的只向前游标,两者的应用领域不同!读取数据后!如果要进行比较频繁的改动,可以使用DataSet,并且DataSet也支持串行化,可与xslt结合!进行web开发!  
DataReader
则偏向于快速读取数据!针对数据量比较大的数据可能应用的更加频繁点!

66.软件开发过程一般有几个阶段?每个阶段的作用?
答:软件开发一般分为五个阶段:

1.问题的定义及规划

此阶段是软件开发与需求放共同讨论,主要确定软件的开发目标及其可行性。

2.需求分析

在确定软件开发可行性的情况下,对软件需要实现的各个功能进行详细需求分析。需求分析阶段是一个很重要的阶段,这一阶段做的好,将为整个软件项目的开发打下良好的基础。唯一不变的是变化本身,同样软件需求也是在软件爱你开发过程中不断变化和深入的,因此,我们必须定制需求变更计划来应付这种变化,以保护整个项目的正常进行。

3.软件设计

此阶段中偶要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计、数据库设计等。软件设计一般分为总体设计和详细设计。还的软件设计将为软件程序编写打下良好的基础。

4.程序编码

此阶段是将软件设计的结果转化为计算机可运行的程序代码。在程序编码中必定要制定统一、符合标准的编写规范。以保证程序的可读性、易维护性。提高程序的运行效率。

5.软件测试

在软件设计完成之后要进行严密的测试,一发现软件在整个软件设计过程中存在的问题并加以纠正。整个测试阶段分为单元测试、组装测试、系统测试三个阶段进行。测试方法主要有白盒测试和黑盒测试。

67.c#usingnew这两个关键字有什么意义,请写出你所知道的意义?

答:Using有两个作用:一是引入命名空间;二是可以自动释放对象;

New有三个作用:一个是用来实例化一个类的对象;二是New运算符可调用值类型的默认构造函数;三是在用作修饰符时,New运算符可以显示隐藏从基类继承的成员。

68.需要实现对一个字符串的处理,首先将该字符串首尾的空格去掉,如果字符串中间还有连续空格的话,仅保留一个空格,即允许字符串中间有多个空格,但连续的空格数不可超过一个.
答:

Using System.text.RegularExpressions;

Class program

{

Static void Main(sring[] args)

{

string str = “  adjkf  adj    daf  ”;

String strNew = regex.Replacestr.Trim(),” *”,” ”);

Console.WriteLine(strNew);

Console.ReadKey();

}

}

70.什么叫做SQL注入,如何防止?请举例说明。
答:SQL注入:利用现有应用程序,将(恶意)SQL命令注入到后台数据库引擎执行的能力,这是SQL注入的标准释义。

所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。

常见的SQL注入式攻击过程类如:

   某个ASP.NET Web应用有一个登录页面,这个登录页面控制着用户是否有权访问应用,它要求用户输入一个名称和密码。

   登录页面中输入的内容将直接用来构造动态的SQL命令,或者直接用作存储过程的参数。下面是ASP.NET应用构造查询的一个例子:

  System.Text.StringBuilder query = new System.Text.StringBuilder("SELECT * from Users WHERE login = ’")Append(txtLogin.Text)Append("’ AND password=’")Append(txtPassword.Text)Append("’");

   攻击者在用户名字和密码输入框中输入"’’1’=’1"之类的内容。

   用户输入的内容提交给服务器之后,服务器运行上面的ASP.NET代码构造出查询用户的SQL命令,但由于攻击者输入的内容非常特殊,所以最后得到的SQL命令变成:SELECT * from Users WHERE login = ’’ or ’1’=’1’ AND password = ’’ or ’1’=’1’.

   服务器执行查询或存储过程,将用户输入的身份信息和服务器中保存的身份信息进行对比。

   由于SQL命令实际上已被注入式攻击修改,已经不能真正验证用户身份,所以系统会错误地授权给攻击者。

  如果攻击者知道应用会将表单中输入的内容直接用于验证身份的查询,他就会尝试输入某些特殊的SQL字符串篡改查询改变其原来的功能,欺骗系统授予访问权限。

  系统环境不同,攻击者可能造成的损害也不同,这主要由应用访问数据库的安全权限决定。如果用户的帐户具有管理员或其他比较高级的权限,攻击者就可能对数据库的表执行各种他想要做的操作,包括添加、删除或更新数据,甚至可能直接删除表。

  如何防范?

  好在要防止ASP.NET应用被SQL注入式攻击闯入并不是一件特别困难的事情,只要在利用表单输入的内容构造SQL命令之前,把所有输入内容过滤一番就可以了。过滤输入内容可以按多种方式进行。

   对于动态构造SQL查询的场合,可以使用下面的技术:

  第一:替换单引号,即把所有单独出现的单引号改成两个单引号,防止攻击者修改SQL命令的含义。再来看前面的例子,“SELECT * from Users WHERE login = ’’’ or ’’1’’=’’1’ AND password = ’’’ or ’’1’’=’’1’”显然会得到与“SELECT * from Users WHERE login = ’’ or ’1’=’1’ AND password = ’’ or ’1’=’1’”不同的结果。

  第二:删除用户输入内容中的所有连字符,防止攻击者构造出类如“SELECT * from Users WHERE login = ’mas’ —— AND password =’’”之类的查询,因为这类查询的后半部分已经被注释掉,不再有效,攻击者只要知道一个合法的用户登录名称,根本不需要知道用户的密码就可以顺利获得访问权限。

  第三:对于用来执行查询的数据库帐户,限制其权限。用不同的用户帐户执行查询、插入、更新、删除操作。由于隔离了不同帐户可执行的操作,因而也就防止了原本用于执行SELECT命令的地方却被用于执行INSERTUPDATEDELETE命令。

   用存储过程来执行所有的查询。SQL参数的传递方式将防止攻击者利用单引号和连字符实施攻击。此外,它还使得数据库权限可以限制到只允许特定的存储过程执行,所有的用户输入必须遵从被调用的存储过程的安全上下文,这样就很难再发生注入式攻击了。

   限制表单或查询字符串输入的长度。如果用户的登录名字最多只有10个字符,那么不要认可表单中输入的10个以上的字符,这将大大增加攻击者在SQL命令中插入有害代码的难度。

   检查用户输入的合法性,确信输入的内容只包含合法的数据。数据检查应当在客户端和服务器端都执行——之所以要执行服务器端验证,是为了弥补客户端验证机制脆弱的安全性。

  在客户端,攻击者完全有可能获得网页的源代码,修改验证合法性的脚本(或者直接删除脚本),然后将非法内容通过修改后的表单提交给服务器。因此,要保证验证操作确实已经执行,唯一的办法就是在服务器端也执行验证。你可以使用许多内建的验证对象,例如RegularExpressionValidator,它们能够自动生成验证用的客户端脚本,当然你也可以插入服务器端的方法调用。如果找不到现成的验证对象,你可以通过CustomValidator自己创建一个。

   将用户登录名称、密码等数据加密保存。加密用户输入的数据,然后再将它与数据库中保存的数据比较,这相当于对用户输入

  的数据进行了消毒处理,用户输入的数据不再对数据库有任何特殊的意义,从而也就防止了攻击者注入SQL命令。 System.Web.Security.FormsAuthentication类有一个 HashPasswordForStoringInConfigFile,非常适合于对输入数据进行消毒处理。

   检查提取数据的查询所返回的记录数量。如果程序只要求返回一个记录,但实际返回的记录却超过一行,那就当作出错处理。

71.什么是反射?
答:主要是指程序可以访问、检测、修改它本身状态和行为的一种能力。通过反射可以在运行时获得.net中的每一个类型(类,结构,委托,接口,和枚举)的成员,包括方法、属性、事件、构造函数等还可以获得每个成员的名称、限定符、参数等。

反射,Reflection,通过它我们可以在运行时获得各种信息,如程序集、模块、类型、字段、属性、方法和事件

通过对类型动态实例化后,还可以对其执行操作。一般用于插件式框架程序和设计模式的实现,当然反射是一种手段可以充分发挥其能量来完成你想做的任何事情

 

72.Singleton如何写设计模式
答:Singleton即单件模式;单件模式的使用意图就是:保证一个类仅有一个实例,并提供一个该实例全局的访问点

在单线程的情况下:私有化构造函数,使类的使用者调用不到这个构造函数来new一个实例。类型中可以自己new一个实例。类中创建一个静态私有变量和Static公有属性。在公有属性中实现此类的实例化。这样在第一次请求时创建此对象。

73.什么是应用程序域Application domain;什么是应用程序池Application Pool
答:应用程序域:官方给出的是这样的解释:操作系统和运行库环境通常会在应用程序间提供某种形式的隔离.

应用程序域本质上就是一种隔离,目的也就是使应用程序中运行的代码不能直接访问其他应用程序中的代码或资源如果你需要访问其他应用程序中的对象时你就可以复制这些对象,或通过代理访问这些对象。

应用程序域为安全性、可靠性、版本控制以及卸载程序集提供了隔离边界

应用程序域通常由运行库宿主创建,运行库宿主负责在运行应用程序之前引导公共语言运行库。

 

应用程序池:这是微软的一个全新概念:应用程序池是将一个或多个应用程序链接到一个或多个工作进程集合的配置

因为应用程序池中的应用程序与其他应用程序被工作进程边界分隔,所以某个应用程序池中的应用程序不会受到其他应用程序池中应用程序所产生的问题的影响。

 

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

 

命名空间是C#避免类名冲突的一种方式。命名空间不过是数据类型的一种组合方式,但命名空间中所有数据类型的名称都会自动加上该命名空间的名字作为其前缀。命名空间还可以相互嵌套。

74.什么是虚函数?什么是抽象函数?
答:虚函数由 virtual声明,它允许在派生类中重写,要重写方法必须声明为virtual;

如:public class Myclass{public virtual int Myint(){//函数体}}

Public Class Myclass1:Myclass{public override int Myint(){//函数体1}}

抽象函数由abstract声明,在抽象类中可以定义抽象方法,抽象方法没有执行代码,派生类必须重写它,提供其执行代码;

如:public abstract class Myclass{public abstract int Myint()}

Public Class Myclass1:Myclass{public override int Myint(){//函数体}}

75.什么是XML
:xml即可扩展标记语言(entensible markup languge)。是一种平台无关表示数据的方式,也就是说使用xml创建的数据可以被任何应用程序在任何平台读取。Xml是一种元标记语言,用户可以定义自己需要的标记,这些标记必须根据规定的原来创建,同时在标记的意义上也比较灵活。Xml描述的是结构和语义而不是格式化。

76.什么是Web ServiceUDDI?(第30题)
答:web Service 是基于网络的、分布式的模块化组件,它执行特定的任务,遵循具体的技术规范,这些规范使得web service与其他兼容的组件进行互操作。

UDDI是为电子商务建立标准,UDDI是一套基于web的,分布式的,为web service提供的,信息注册中心的实现规范标准。同时也包含一组使企业能将自身提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。

1)、web service就是一个应用程序,它向外界暴漏出一个能够通过Web进行调用的API;Web Serbice 是基于网路的、分布式的模块化的组件,它可以使用标准的互联网协议像超文本传输协议HTTPXMLWeb Service平台是一套标准,它定义了应用程序如何Web上实现互操作性。

2)、UDDIunviversal Description Discovery and integration)统一描述发现和集成协议

77.什么是ASP.net中的用户控件?
答:用户控件(user Control)其实是一种自定义的组合控件,将多个内容相同的部分提取出来 做成用户控件;<%@ Register Src="~/WebUserControl.ascx" TagName="UserLoginControl" TagPrefix="uc1"%>
<uc1:UserLoginControl ID="" runat=server />
用户控件后缀名 .ascx 指令:@Control 继承:System.Web.UI.UserControl, 可以包含控件和其他控件,也可以被其他的用户控件和页面包含,必须在页面中才能发挥作用,可以独立编译不能单独运行

78.列举一下你所了解的XML技术及其应用(第75题)
答:xml即可扩展标记语言(entensible markup languge)。是一种平台无关表示数据的方式,也就是说使用xml创建的数据可以被任何应用程序在任何平台读取。Xml是一种元标记语言,用户可以定义自己需要的标记,这些标记必须根据规定的原则创建,同时在标记的意义上也比较灵活。Xml描述的是结构和语义而不是格式化。

文档模式技术、文档样式技术、文档查询技术、文档解析技术、文档链接技术以及文档定位技术等

XML在电子商务中的应用,XML在网络安全中的应用,XML用于B2B数据的集成,XML与数据库

79.ADO.net中常用的对象有哪些?分别描述一下。
答:1Connection对象:(数据库连接对象)用于连接数据库的对象,表示到数据源的一个唯一的连接。
2
Command对象:(数据库命令)表示要对数据库执行的一个SQL语句或一个存储过程。

3
DataReader对象:(数据库读取器)它与DataSet最大的不同是有连接式的,每次对数据库进行存取都会影响到数据。

4DataAdapter对象:该对象是与DataSet配合使用的对象,用于把表填充到DataSet,和更新DataSet等。
5DataSet对象:(数据集)表示内存中数据的缓存,可以把它想像成一个临时的数据库,它里可以存多个表 (DataTable),而且是断开式的,不用每进行一次操作就对数据库进行更新,从而提高了效率。

6DataTable:这个对象代表着可以在DataSet对象内找到的所有表
7DataColumn:表包含与列有关的信息,包括列的名称、类型和属性。我们可以按照下面的方式创建DataColumn对象,指定数据类型,然后把列加入到表
8DataRow:要填充一个表,我们可以使用命令的自动数据绑定功能,或者也可以手工添加行
9DataRelation:这个对象代表着两个表之间的父-子关系。关系建立在具有同样数据类型的列上

81.什么是SOAP,有哪些应用。
答:SOAP是简单对象访问协议.SOAP是消息传递的协议。他是WebService技术应用的核心技术之一。它规定了Web Services之间是怎样传递信息的。SOAP 是一种轻量级协议,用于在分散型、分布式环境中交换结构化信息。 SOAP 利用 XML 技术定义一种可扩展的消息处理框架,它提供了一种可通过多种底层协议进行交换的消息结构。

82.C# property attribute的区别,他们各有什么用处,这种机制的好处在哪里?
答:一个是属性,用于存取类的字段,一个是特性,用来标识类,方法等的附加性质

从中文来说,AttributeProperty的中文都叫属性,很容易让人混淆。现在的文章,Attribute一般翻译为特性,而Property称为属性

Property可以说是一个面向对象的概念,提供了对私有字段的访问封装,在C#中以getset访问器方法实现对可读可写属性的操作,提供了安全和灵活的数据访问封装。

Attribute的目标是:为元素提供附加信息。它的作用更类似于注释。

83.XML HTML 的主要区别
答:用途上的不同:XML 是被设计用来描述数据和定焦与数据是什么.HTML是被设计用来显示数据和定焦与数据是什么样子的。

使用上的不同:1. XML是区分大小写字母的,HTML不区分。

2. HTML中,如果上下文清楚地显示出段落或者列表键在何处结尾,那么你可以省略</p>或者</li>之类的结束标记。在XML中,绝对不能省略掉结束标记。

3. XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个 / 字符作为结尾。这样分析器就知道不用查找结束标记了。

4. XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。

5. HTML中,可以拥有不带值的属性名。在XML中,所有的属性都必须带有相应的值。

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

100..netC# or vb.net)中如何用户自定义消息,并在窗体中处理这些消息。
答:form中重载DefWndProc函数来处理消息:

protected override void DefWndProc ( ref System.WinForms.Message m )

{

switch(m.msg)

{

case WM_Lbutton :

 ///stringMFC中的CStringFormat函数的使用方法有所不同

 string message = string.Format("收到消息!参数为:{0},{1}",m.wParam,m.lParam);

 MessageBox.Show(message);///显示一个消息框

 break;

case USER:

处理的代码

default:

 base.DefWndProc(ref m);///调用基类函数处理非自定义消息。

 break;

}

}

 

101..netC# or vb.net)中如何取消一个窗体的关闭。
答:private   void   frmMain_Closing(object   sender,   System.ComponentModel.CancelEventArgs   e)  
  {  
  if(MessageBox.Show("
真的要退出系统吗?","退出",MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.No)  
                                e.Cancel=true;  
  }

102..netC# or vb.net)中,Appplication.Exit 还是 Form.Close有什么不同?
答:Application.Exit   方法  
 
该方法停止在所有线程上运行的所有消息循环,并关闭应用程序的所有窗口。该方法并不强制应用程序退出。Exit   方法通常从一个消息循环内调用,该方法强制   Run   返回。若要只退出当前线程的某个消息循环,请调用   ExitThread
 
   
注意:当调用Application.Exit   方法以退出应用程序时,不引发   Form.Closed     Form.Closing   事件。如果在必须执行的其中一个事件中有验证代码,则在调用   Exit   方法之前,应分别为每个打开的窗体调用   Form.Close   方法。  

103.C#中有一个double型的变量,比如10321.5,比如122235401.21644,作为货币的值如何按各个不同国家的习惯来输出。比如美国用$10,321.50$122235401.22而在英国则为£10 321.50和£122 235 401.22
答:System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("en-US");
//System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("en-GB");
为英 货币类型
decimal y = 9999999999999999999999999999m;
string str = String.Format(MyCulture,"My amount = {0:c}",y);

 

105.对于这样的一个枚举类型:enum Color:byte{Red,Green,Blue,orange}

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

    {

        enum Color : byte

        {

            Red,

            Green,

            Blue,

            Orange

        }

        static void Main(string[] args)

        {

            string[] ss = Enum.GetNames(typeof(Color));

            byte[] bb = (byte[])Enum.GetValues(typeof(Color));

            for (int i = 0; i < ss.Length; i++)

            {

                Console.WriteLine("{0,10}: {1}", ss[i], bb[i]);

            }

            Console.ReadKey();

        }

}

106. C# property attribute的区别,他们各有什么用处,这种机制的好处在哪里?
答:1 property就是访问字段(成员变量,field)提供的一种方式(set/get) attribute是都是继承自System.Attribute的一系列class,用来自定义属性;Propery是一个类的成员,attribute是一个抽象的类,用来描述其它的对象,并可以影响到它们的运行;22、前者被翻译为属性,后者是自定义属性3、前者叫:属性(类成员级的) 后者叫:定制特性(类级)3、前者叫:属性(类成员级的) 后者叫:定制特性(类级)3、前者叫:属性(类成员级的) 后者叫:定制特性(类级)5、一个是service的属性,而另一个是interface的;

Attribute是指为类附加的说明信息,与注释不同,这些说明信息是给机器看的,并能影响机器的执行,具体应用如下:  
  1.
影响编译器,相当于条件编译  
  2.
调用API函数时,要用Attribute申明是.Net   Framework之外的函数  
  3.
自定义Attribute,用于描述对应类或方法,也就是传说中.net是自我描述的功能  
  4.
还是对机器说明这个类有什么用的,机器看到后就会采取相应的动作,  
 
[seriablae][webservice],[TestFixture]

107.C#可否对内存进行直接的操作?
答:可以,通过使用指针;C#的一个特性指针和所谓的不安全代码

.net下,.net引用了垃圾回收(GC)功能,它替代了程序员 不过在C#中,不能直接实现Finalize方法,而是在析构函数中调用基类的Finalize()方法

 

108.ADO.NET相对于ADO等主要有什么改进?
答:1:ado.net不依赖于ole db提供程序,而是使用.net托管提供的程序,2:不使用com3:不在支持动态游标和服务器端游 4:,可以断开connection而保留当前数据集可用 5:强类型转换 6:xml支持

第二种解答:1)、数据在内存中的表示形式不同:ADO是以记录集而ADO.NET是以数据集;2)、表的个数:记录集是看起来想单个表,是以单个表呈现。数据集是一个或多个表的集合。3)、数据集通常还包含表的关系类似于数据库中外键的关系,即它使得多个表的行互相关联。4)、 ADO.NET 中,打开连接的时间仅足够执行数据库操作,例如选择”(Select) 更新”(Update)。您可以将行读入数据集中,然后在不保持与数据源的连接的情况下使用它们。在 ADO 中,记录集可以提供不连接的访问,但 ADO 主要是为连接的访问设计的;5)在应用程序间传输 ADO.NET 数据集比传输 ADO 不连接的记录集要容易得多。若要将 ADO 不连接的记录集从一个组件传输到另一个组件,请使用 COM 封送。若要在 ADO.NET 中传输数据,请使用数据集,它可以传输 XML 流;6)、跟丰富的数据类型,由于 ADO.NET 中的数据集传输基于 XML 格式,所以对数据类型没有限制7)、提高性能,ADO.NET 不需要数据类型转换。而需要 COM 封送来在组件间传输记录集的 ADO,则需要将 ADO 数据类型转换为 COM 数据类型。8)、可穿透防火墙,防火墙可以影响试图传输不连接的 ADO 记录集的两个组件。请记住,防火墙通常配置为允许 HTML 文本通过,但防止系统级请求(如 COM 封送)通过。因为组件使用 XML 交换 ADO.NET 数据库,所以防火墙可以允许数据集通过

 

109.写一个HTML页面,实现以下功能,左键点击页面时显示您好,右键点击时显示禁止右键。并在2分钟后自动关闭页面。
答:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

    <title>无标题页</title>

    <script type="text/javascript">

    setTimeout

    (function(){

        window.close();//firefox can`t not support

    },2*60*1000); 

    document.onmousedown = function(e) {

        e = e || event;

        if (!e.which && e.button )

            e.which = e.button & 1 ? 1 : (e.button & 2 ? 3 : (e.button & 4 ? 2 : 0));

        if (e.which == 1) alert("您好");

    }

    document.oncontextmenu = function(){

        alert('禁止右键');

        return false;

    }

/script>

</head>

<body>

</body>

</html>

 

方法二:

<script>

        function click() {

               if(event.button==2) {

                    alert('您好,现在禁止右键!');

                    setTimeout(function(){window.close();//firefox can`t not support

                    },2*60*1000);

                   }

                 if(event.button==1) {

                    alert('您好,您点击了左键,禁止左键.')

                   }

        }

        document.onmousedown=click

    </script>

110.大概描述一下ASP.NET服务器控件的生命周期
答:(1)初始化:在此阶段中,主要完成两项工作:一、初始化在传入Web请求生命周期内所需的设置;二、跟踪视图状态。

(2)加载视图状态:此阶段的主要任务是检查ASP.NET服务器控件是否存在以及是否需要将其状态恢复到它在处理之前的请求结束的状态。

(3)处理回发数据:若要使控件能够检查客户端发回的窗体数据,那么必须实现System.Web.UI.IPostBackDataHandler接口的 LoadPostData()方法。因此只有处理回发数据的控件参与此阶段。

(3)处理回发数据:若要使控件能够检查客户端发回的窗体数据,那么必须实现System.Web.UI.IPostBackDataHandler接口的 LoadPostData()方法。因此只有处理回发数据的控件参与此阶段。

(4)加载:至此阶段开始,控件树中的ASP.NET服务器控件已创建并初始化、状态已还原并且窗体控件反映了客户端的数据。此时,开发人员可以通过重写OnLoad()方法来实现每个请求共同的逻辑。

(5)发送回发更改通知:在此阶段,ASP.NET服务器控件通过引发事件作为一种信号,表明由于回发而发生的控件状态变化(因此该阶段仅用于回发过程)

(6)处理回发事件:该阶段处理引起回发的客户端事件。

(7)预呈现:该阶段完成在生成控件之前所需要的任何工作。

(8)保存状态:如果ASP.NET服务器控件需要自定义状态保存,或者控件无法在ViewState字典中存储特殊的数据类型,则需要通过重写SaveViewState()方法来实现状态保存。

(9)呈现:表示向HTTP输出流中写入标记文本的过程。开发人员通过重写Render()方法使其在输出流上自定义标记文本。

(10)处置:在此阶段中,通过重写Dispose ()方法完成释放对昂贵资源的引用,如数据库链接等。

(11)卸载:完成的工作与"处置"阶段相同,但是,开发人员通常在Dispose()方法中执行清除,而不处理Unload事件。

111.Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但可以作为一个接口,由另一个内部类实现

112.Static Nested Class Inner Class的不同,说得越多越好
答:Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。

113.&&&的区别
答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and.

114.HashMapHashtable的区别。
答:HashMapHashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key,由于非线程安全,效率上可能高于Hashtable.

 

115.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
答:short s1 = 1; s1 = s1 + 1; s1+1运算结果是int型,需要强制转换类型)

short s1 = 1; s1 += 1;
(可以正确编译)

116.Overloaded的方法是否可以改变返回值的类型?
答:Overloaded的方法是可以改变返回值的类型。

117.errorexception有什么区别?
答:error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。

exception
表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

118. <%# %> <% %>有什么区别?
答:<%# %>表示绑定的数据源 
 <% %>
是服务器端代码块

119.你觉得ASP.NET 2.0VS2005)和你以前使用的开发工具(.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,等操作都可以可视化操作,方便了初学者
120.
重载与覆盖的区别?(第五题)
答:1、方法的覆盖是子类和父类之间的关系,是垂直关系;方法的重载是同一个类中方法之间的关系,是水平关系
2
、覆盖只能由一个方法,或只能由一对方法产生关系;方法的重载是多个方法之间的关系。
3
、覆盖要求参数列表相同;重载要求参数列表不同。
4
、覆盖关系中,调用那个方法体,是根据对象的类型(对象对应存储空间类型)来决定;重载关系,是根据调 用时的实参表与形参表来选择方法体的。

121.描述一下C#中索引器的实现过程,是否只能根据数字进行索引?
答:

125.分析以下代码。
public static void test(string ConnectString)

{

System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();
conn.ConnectionString = ConnectString;
try

{
conn.Open();
…….
}
catch(Exception Ex)
{
MessageBox.Show(Ex.ToString());
}
finally
{

if (!conn.State.Equals(ConnectionState.Closed))
conn.Close();
}
}
请问

1)以上代码可以正确使用连接池吗?

答:回答:如果传入的connectionString是一模一样的话,可以正确使用连接池。不过一模一样的意思是,连字符的空格数,顺序完全一致。

2)以上代码所使用的异常处理方法,是否所有在test方法内的异常都可以被捕捉并显示出来?

答:只可以捕捉数据库连接中的异常吧. finally中,catch中,如果有别的可能引发异常的操作,也应该用try,catch。所以理论上并非所有异常都会被捕捉。)

127.什么是WSE?目前最新的版本是多少?
答:WSE (Web Service Extension) 包来提供最新的WEB服务安全保证,目前最新版本3.0

WSE可使开发人员跨安全平台建设可升级的、安全的Web服务。它支持用传输的方式发送SOAP消息,而不是HTTP。另一个特点是具有建立SOAP路由器的功能,SOAP消息被发送给SOAP路由器,路由器再将工作交付给托管该服务的Web服务器。

129.下面的例子中

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);
}
}
产生的输出结果是什么?
答:x=1,y=2

130.abstract classinterface有什么区别?(第38题)
答:声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。
不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。
Abstract
类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。

接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。
接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。
接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。
然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。
引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。