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