经典ASP.NET 面试题

                          经典ASP.NET 面试题

一.理论知识题目

  1.简述private , protected, public, internal 修饰符的访问权限。*****

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

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

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

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

 

   2.override 与重载(overload)的区别。*****

   答:override 是指父类和子类之间方法的继承关系,这些方法有着相同的名称和参数类型。

     overlode 是指同一个类中不同的方法间的关系,这些方法有着相同的名称和不同的参类型。

 

  3.在C#中, string str=null 与 string str="" 请尽量使用文字或图像说明其中的区别。****

  答:string str=null 是不给分配内存空间,而string str=""  给它配长度为空字符串的内存空间。

  

  4.什么是装箱和拆箱? *****

  答:将值类型转换为用引用类型称为装箱,反之将引用类型转换为值类型称为拆箱。

 

  5.值类型和引用类的区别?写出C# 的样例代码。***

  答:值类型的变量本身包含他们的数据,而引用类型的变量包含的是指向包含数据的内存块的引用。

    值类型变量存储在堆栈。每个程序在执行时都有自已的堆栈,其他程序不能访问。

    引用类型存储在堆。引用类型存贮实际数据的引用值的地址。

    C# 中的引用类型有4种  类, 代表 ,数组,接口。

 

  6.String 与StringBuilder的区别。****

  答:String 在进行运算时(如赋值,拼接等)会产生一个新的实例,而StringBudilder则不会,所以在大量字符串拼接或者对某一个字符串进行操作时最好使用StringBuilder不要使用String。

  

  7.abstract class 和inteface 有什么区别?****

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

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

  

  8.进程和线程的区别?***

  答:进程是系统进行分资源分配和调度的单位;线程是CPU 调度和分派的单位,一个进程可以有多个线程,这些线程共享这个进程的资源。   

 

  9.C# 中的委托是什么?事件是不是一种委托?****

  答:委托可以把一个方法作为参数代入另一个方法。委托可以理解为指向一个函数的引用。

  是,是一种特殊的委托。    

 

  10.ASP.NET 生命周期?***

  答:a.发送请求;

    b.页面初始化;

    c.加载页面;

    d.服务器控件研制;

    e.控件事件;

    f.页面显示;

    g.页面卸载;

  

  11.重定向和转发的区别?****

  a.url 地址:重定向是在客户端进行的,而转发是在服务器进行的。

    b.范围不同:重定范围比较广,转发只限于当前页面。

    c.共享数据:重定向不能共享Request 范围内的数据,转发可以共享request 范围内的数据。

  

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

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

    2.使用Session变理。

    3.使用Server.Transfer。

 

      

二.代码题目

  1.一列数的规则如下:1, 1, 2, 3, 5, 8, 13, 21, 34...... 求第30位数是多少,用递归算法实现。*****

  答:  

public class MinClass{
        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);
           }
       }
}                                        

  第 30 位是等于 29+28;

  第29 位是等于 28+27;

  第28位是等于 27+26;

  

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

  答:

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

      {

        temp=array[i];

        array[i]=array[i];

        array[j]=temp;

      }

    }

 

  3.在下面的例子里;*****

 1  using System;
 2 
 3   class A{
 4 
 5       public A(){
 6 
 7       PrintFields();
 8 
 9     }
10 
11     public virtual void PrintFields(){}
12 
13   }
14 
15   class B:A{
16 
17     int x=1;
18 
19     int y;
20 
21     public B(){
22 
23       y=1;
24 
25     }
26 
27     public override void PrimtFields(){
28 
29       Console.WriteLine("x={0},y={1}",x,y);
30 
31     }
32 
33   }

  当使用 new B() 创建B 的实例时,产生什么输出?

  答: X=1; Y=0; x=1, y=-1;

  

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

 1  public void test(int i){
 2 
 3     lock(this)
 4 
 5   }
 6 
 7   if(i>0)
 8 
 9   {
10 
11     i--;
12 
13     test(i);
14 
15   }
16 
17   }
18 
19   }

  答:不会发生死锁,(但有一点int  按值转递的,所以每次改变的都只是一个副本,因此不出现死锁。但如果吧int 换做        object ,那么死锁会发生)。

  

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

 1 int [] intArr=new int[100];
 2 ArrayList myList=new ArrayList();
 3 Random rnd=new Random();
 4 while(myList.Count<100)
 5 {
 6       int num=rnd.Net(1,101);
 7       if(!myList.Contatins(num))
 8     
 9       myList.Add(num);
10 }
11 
12 for(int i=0;i<100;i++)
13 intArr[i]=(int)myList[i];

 

 

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

答:

 1 int Num = this.TextBox1.Text.ToString() ;
 2 int Sum = 0 ;
 3 for (int i = 0 ; i < Num + 1 ; i++)
 4 {
 5 if((i%2) == 1)
 6 {
 7 Sum += i ;
 8 }
 9 else
10 {
11 Sum = Sum  - I ;
12 }
13 }
14 System.Console.WriteLine(Sum.ToString());
15 System.Console.ReadLine() ;

 

 

 

 

 

   

  

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。