刚毕业1年2年3年工作经验都可用的C#面试题及答案设计模式在后面_第1页
刚毕业1年2年3年工作经验都可用的C#面试题及答案设计模式在后面_第2页
刚毕业1年2年3年工作经验都可用的C#面试题及答案设计模式在后面_第3页
刚毕业1年2年3年工作经验都可用的C#面试题及答案设计模式在后面_第4页
刚毕业1年2年3年工作经验都可用的C#面试题及答案设计模式在后面_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、-. z.C#面试题设计模式在后面2. const和readonly有什么区别?答:const可以用于类的成员常量和局部常量,必须在声明时赋值,之后不可以对常量进展赋值。而readonly只能用于类的成员变量不能用于局部变量,在声明时可以不赋值,除了在构造函数中可以再次赋值外,其它的地方和const一样也不能赋值。5. 接口和抽象类有什么区别?你选择使用接口和抽象类的依据是什么?答答:区别如下1 抽象类可以有抽象成员无具体实现,也可以有非抽象成员有具体实现;接口只有抽象成员。2 一个类不能同时继承多个抽象类,一个类可以同时实现多个接口。如果多个子类中有很多代码是重复的,这时采用抽象类,因为可以

2、将这些代码放到抽象类的非抽象方法中,这样可以到达代码复用。当实现多个接口时因为抽象类不支持,只能使用接口。6. struct和class有什么区别答:两者都可以有成员变量、属性、索引器、事件、函数、构造函数,主要区别如下:区别点 构造 类类型 值类型 引用类型成员变量 在声明时不能赋值 可以赋值也可以不赋值构造函数 可以不写,系统提供默认构造函数,默认构造函数中会将所有成员值设为0,如果写了构造函数则构造函数必须有参数,且在构造函数中必须为每一个成员赋值。 可以不写,系统提供默认构造函数,写了也没有构造中的限制。析构函数 不能有析构函数 可以有析构函数继承性 自定义的构造不能从类继承,但可以实

3、现接口,构造都是密封(sealed),不能从构造继承 类没有限制7. try后面一个finally,try中有一个return,则finally中的代码会不会运行?如果运行,是在return后还是return前。答:会运行,并且在return 后运行。8. 产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。答:该题解题思路有很多,主要是看运行效率如何,下面提供一种方法。int array = new int100;int temp = new int100;for (int i = 0; i 100; i+)tempi=i+1;Random rand = new Ra

4、ndom();for (int i = 0; i 100; i+)int inde* = rand.Ne*t(100-i-1);arrayi = tempinde*;tempinde*=temp100-i-1;9. C#中要使一个类支持foreach遍历,实现过程怎样?答:必须实现IEnumerable,IEnumerator这两个接口,如下:public class MyList : IEnumerable,IEnumeratorprivate int position = -1;string array = new string4;public MyList()array0 = a;arr

5、ay1 = b;array2 = c;array3 = d;#region IEnumerable 成员/每次使用foreach时都会调用它得到一个枚举器public IEnumerator GetEnumerator()Reset();return (this as IEnumerator);#endregion#region IEnumerator 成员/遍历时通过这个属性得到值public object Currentget return arrayposition; /访问下一个元素时使用MoveNe*t移动位置public bool MoveNe*t()if (position ar

6、ray.Length-1)position+;return true;elsereturn false;/遍历前要使位置归位public void Reset()position = -1;#endregion以下不用foreach遍历集合MyList list=new MyList();While(list.MoveNe*t()Object o=list.Current;10. 以下程序有什么错?public class TestClassprivate int count;private static int y;public static void setvalue count=1;y=

7、1;答:在静态函数中只能访问静态成员变量;以上代码访问了实例成员。11. net中什么类不能被继承?答:如果在类前加上sealed关键字,则表示该类为密封类,密封类不能被继承。sealed 除了可以应用于类外,还可以应用于实例方法和属性。密封方法会重写基类中的方法,但其本身不能在任何派生类中进一步重写。当应用于方法或属性时,sealed 修饰符必须始终与override一起使用。如:/下面这个sealed使用正确,表示该类不能继承public sealed class Testprivate int myVar;/下面这个sealed错误,编译不会通过,因为sealed必须和override一

8、起使用public sealed int MyPropertyget return myVar; set myVar = value; /下面这个sealed使用正确,表示如果该类不是密封类,/则在派生类中也不可以重写该方法public sealed override string ToString()return base.ToString();12. is 和as 有什么区别?答:is用来判断一个实例是否属于*个类。如:Dog d=new Dog();If(d is Dog)Console.WriteLine(d是一只狗);以上语句Console.WriteLine(d是一只狗);会运行,

9、因为d is Dog返回true,如果Dog从Animal类继承并实现了IPet接口,则d is Animal和d is IPet都会返回true;as用于在兼容的引用类型之间执行转换,如果转换失败则返回null,它等价于如下语句:e*pression is type (type)e*pression : (type)null13. net中函数传递参数有那些方式?有什么区别?答:传值和传引用,传引用又两种方式,ref和out,ref要求变量在传参前赋值,out可以不赋值。传引用必须是一个地址,传值是指将栈中的值拷贝到函数的参数,传引用表示传入的变量和接收参数是同一个变量public clas

10、s Testpublic int myVar;public int MyPropertyget return myVar; set myVar = value; 以上这个类中有字段和属性private void F(ref int i)i = 100;有一个方法传递引用,调用方式如下:Test t = new Test();F(ref t. MyProperty);以上代码编译不能通过,因为属性不是变量,其实质是函数,如下则可通过Test t = new Test();F(ref t. myVar);因为字段是变量14. 一列数的规则如下: 1、1、2、3、5、8、13、21、34 求第30位

11、数是多少, 用递归算法实现。答:public class MainClasspublic static void Main()Console.WriteLine(Foo(30);public static int Foo(int i)if (i = 0)return 0;else if( i = 2)return 1;elsereturn Foo(i -1) + Foo(i - 2);15. C#中的委托是什么?事件是不是一种委托?答 :委托封装了函数指针的集合,它可以指向一组函数。事件也是委托,是一种特殊的委托。16. 请编程实现一个冒泡排序算法?答:int array = new int

12、* ;int temp = 0 ;for (int i = 0 ; i array.Length - 1 ; i+)for (int j = i + 1 ; j array.Length ; j+)if (arrayj arrayi)temp = arrayi ;arrayi = arrayj ;arrayj = temp ;17. 在下面的例子里using System;class Apublic A()PrintFields();public virtual void PrintFields()class B:Aint *=1;int y;public B()y=-1;public ove

13、rride void PrintFields()Console.WriteLine(*=0,y=1,*,y);当使用new B()创立B的实例时,产生什么输出?答:*=1,Y=0当使用New创立B的实例时,因为B继承了A类,A的构造函数首先会被运行,但应当注意的是,虽然运行的是A的构造函数,但在A的构造函数中调用的函数首先是在B类中查找,因为PrintFields已被重写,所以最终运行B类中的PrintFields函数。18. CTS、CLS、CLR分别作何解释?答:CTS:mon Type System 通用系统类型。CLS:mon Language Specification 通用语言规*

14、。CLR:mon Language Runtime 公共语言运行库。20. net Remoting 的工作原理是什么?答:效劳器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。21. 求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+m答:int m = Convert.ToInt32(this.Te*tBo*1.Te*t) ;int sum = 0 ;for (int i = 0 ; i m + 1 ; i+)if(i%2) = 1)sum += i ;Elsesum = Sum - I ;System.Console.WriteLine(sum.ToStr

15、ing();System.Console.ReadLine() ;其实还有一个很简单的方式,上面的表达式,把它分成1-2、3-4、5-6可以看出,如果m是偶数,则结果就是m/2*(-1),如果m是奇数,结果就是m-m/222. 列举ASP.NET 页面之间传递值的几种方式。答. 1).使用QueryString, 如id=1; response. Redirect()2).使用Session变量3).使用Server.Transfer4).Application5).6).数据库7).ViewStat8).cookie23. 请编程遍历页面上所有Te*tBo*控件并给它赋值为string.Em

16、pty?答:在页面中调用下面的函数,SetTe*tBo*(this);public void SetTe*tBo*(Control ctrl)if (ctrl is Te*tBo*)(ctrl as Te*tBo*).Te*t=string.Empty;elseforeach (Control child in ctrl.Controls)SetTe*tBo*(ctrl);24. 根据线程平安的相关知识,分析以下代码,当调用test方法时i10时是否会引起死锁并简要说明理由。Class Apublic void Test(int i)lock(this)if (i10)i-;Test(i);答

17、:不会发生死锁,但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,则死锁会发生25. 简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用。答:WebSevice使用HTTP协议,因此可以穿透防火墙。而Remoting使用TCP/IP,二进制传送提高效率。remoting是.net中用来跨越machine, process, appdomain进展方法调用的技术,对于三层构造的程序,就可以使用remoting技术来构建它是分布应用的根底技术.相当于以前的D;Web Service是一

18、种构建应用程序的普通模型,并能在所有支持internet网通讯的操作系统上实施。Web Service令基于组件的开发和web的结合到达最正确,基于组件的对象模型26. 公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求到达以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进展重排视图中的所有行 (排序的方式如DataGrid相似)。根据您的知识,请简要谈一下您的思路答:根据点击的列头,包该列的ID取出,按照该ID排序后,在绑定到ListView中。28. String s = new String(*yz);创立了几个String

19、Object答:两个对象,一个是*y*字符串常量,一个是值为*y*的引用对像s。29. String s=;和string s=string.Empty;有什么区别,哪一种方式更好?String s=;先分配一块内存存放文字常量,s引用该内存,string s=string.Empty;s引用string类中的静态变量地址静态变量开场会被初始化,所以无论引用多少次,只会分配一次内存,两者比拟,后者少了一次内存分配,所以效率更高。30. 构造函数是否可被override答:不能。31. 是否可以继承String类答:string 是密封类,所以不能被继承。32. Session有什么重大BUG,

20、微软提出了什么方法加以解决?答:是iis中由于有进程回收机制,系统繁忙的话Session会丧失,可以用Sate server或SQL Server数据库的方式存储Session不过这种方式比拟慢,而且无法捕获Session的END事件。33. 进程和线程的区别?答:进程是系统进展资源分配和调度的单位;线程是CPU调度和分派的单位,一个进程可以有多个线程,这些线程共享这个进程的资源。34. 堆和栈的区别?答:栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义;堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小35. 成员变量和成员函数前加s

21、tatic的作用?答:它们被称为常成员变量和常成员函数,又称为类成员变量和类成员函数。分别用来反映类的状态。比方类成员变量可以用来统计类实例的数量,类成员函数负责这种统计的动作。ASP。NET与ASP相比,主要有哪些进步?答:asp解释型,asp*编译型,性能提高,可以跟美工的工作分开进展,更有利于团队开发。36. 在c#中using和new这两个关键字有什么意义,请写出你所知道的意义?using:A. 引入名称空间B. 放入实现了IDisposable接口的对象,在作用域过后会自动调用该对象的Dispose方法。new :A. 新建实例B. 覆盖父类方法C. 对泛型类型进展约束,规定该类型必

22、须具有无参的公共构造函数37. 需要实现对一个字符串的处理,首先将该字符串首尾的空格去掉,如果字符串中间还有连续空格的话,仅保存一个空格,即允许字符串中间有多个空格,但连续的空格数不可超过一个.答:string inputStr= * * ;inputStr=inputStr.Trim();inputStr=Rege*.Replace(inputStr.Trim(), 2, );注:Replace的第二个参数的2,前有一个空格,第三个参数是一个空格,表示,出现了2个或多个空格时将其替换成1个空格。38. 下面这段代码输出什么?为什么?int i=5;int j=5;if (Object.Ref

23、erenceEquals(i,j)Console.WriteLine(Equal);elseConsole.WriteLine(Not Equal);答:不相等,因为比拟的是装箱后堆中的地址;39. 什么叫做SQL注入,如何防止?请举例说明。答:利用sql语言漏洞获得合法身份登陆系统。如身份验证的程序设计成:Sqlmand =new Sqlmand(Select * from users where username=+t_name.te*t+ and pwd=+t_pwd.te*t+);object obj=.E*cuteScale();if(obj!=null)/通过验证这段代码容易被sq

24、l注入。如用户在t_name中随便输入,在t_pwd中输入abc or 1=1 就可以进入系统了。可以使用参数方式解决这个问题。40. 什么是反射?答:动态获取程序集、类型等的信息,并可根据这些信息动态的加载程序集、创立类型、动态调用方法,访问类型的成员等。41. 如何写Singleton设计模式答:static属性里面new ,构造函数privatepublic class Singletonprivate static Singleton singleton;private Singleton()public static Singleton CreateInstance()if(sing

25、leton=null)singleton=new Singleton();return singleton;43. 什么是虚函数?什么是抽像函数?答:虚函数:可由子类继承并重写的函数。抽像函数:规定其非虚子类必须实现的函数,必须被重写。45. 什么是ASP.net中的用户控件?答:用户控件一般用在内容多为静态,或者少许会改变的情况下.用的比拟大.类似ASP中的include.但是功能要强大的多。46. 列举一下你所了解的*ML技术及其应用答:*ml用于配置,用于保存静态数据类型.接触*ML最多的是web Services.和config47. ADO.net中常用的对象有哪些?分别描述一下。答

26、:Connection 数据库连接对像mand 数据库命令DataReader 数据读取器DataAdapterf 数据适配器,用于填充DataSetDataSet 数据集1. 传入*个属性的set方法的隐含参数的名称是什么?value,它的类型和属性所声名的类型一样。2. 如何在C#中实现继承?在类名后加上一个冒号,再加上基类的名称。3. C#支持多重继承么?不支持。可以用接口来实现。4. 被protected修饰的属性/方法在何处可以访问?在继承或间接继承与这个类的子类中可以访问。5. 私有成员会被继承么?会,但是不能被访问。所以看上去他们似乎是不能被继承的,但实际上确实被继承了。6. 请

27、描述一下修饰符protected internal。被protected internal修饰的属性/方法只能在它的在同一个程序集Assembly中的子类被访问。7. C#提供一个默认的无参数构造函数,当我实现了另外一个有一个参数的构造函数时候,还想保存这个无参数的构造函数。这样我应该写几个构造函数?两个,一旦你实现了一个构造函数,C#就不会再提供默认的构造函数了,所以需要手动实现那个无参数构造函数。8. C#中所有对象共同的基类是什么?System.Object.9. 重载和覆写有什么区别?重载提供了对一个方法签名的不同参数调用的实现。覆写提供了子类中改变父类方法行为的实现。10. 在方法定

28、义中,virtual有什么含意?被virtual修饰的方法可以被子类覆写。11. 能够将非静态的方法覆写成静态方法么?不能,覆写方法的签名必须与被覆写方法的签名保持一致,除了将virtual改为override。12. 可以覆写私有的虚方法么?不可以,甚至子类中无法访问父类中的私有方法。13. 能够阻止*一个类被其他类继承么?可以,使用关键字sealed。14. 能够实现允许*个类被继承,但不允许其中的*个方法被覆写么?可以,标记这个类为public,并标记这个方法为sealed。15. 什么是抽象类abstract class?一种不可以被实例化的类。抽象类中一般含有抽象方法,当然也可有具体

29、实现。继承类只有实现过所有抽象类的抽象方法后才能被实例化。16. 何时必须声明一个类为抽象类?当这个类中包含抽象方法时,或是该类并没有完全实现父类的抽象方法时。17. 接口interface是什么?只含有共有抽象方法public abstract method的类。这些方法必须在子类中被实现。18. 为什么不能指定接口中方法的修饰符?接口中的方法用来定义对象之间通信的契约,指定接口中的方法为私有或保护没有意义。他们默认为公有方法。19. 可以继承多个接口么?当然。20. 则如果这些接口中有重复的方法名称呢?这种情况中你可以决定如何实现。当然需要特别得小心。但是在编译环节是没有问题的。21. 接

30、口和抽象类的区别是什么?接口中所有方法必须是抽象的,并且不能指定方法的访问修饰符。抽象类中可以有方法的实现,也可以指定方法的访问修饰符。22. 如何区别重载方法?不同的参数类型,不同的参数个数,不同的参数顺序。6. 如果在一个B/S构造的系统中需要传递变量值,但是又不能使用Session、Cookie、Application,您有几种方法进展处理?7. 请编程遍历页面上所有Te*tBo*控件并给它赋值为string.Empty?答: foreach (System.Windows.Forms.Control control in this.Controls)if (control is Sys

31、tem.Windows.Forms.Te*tBo*)System.Windows.Forms.Te*tBo* tb = (System.Windows.Forms.Te*tBo*)control ;tb.Te*t = String.Empty ;8. 请编程实现一个冒泡排序算法?答: void BubbleSort(SeqList R) /Rl.n)是待排序的文件,采用自下向上扫描,对R做冒泡排序int i,j;Boolean e*change; /交换标志for(i=1;i=i;j-) /对当前无序区Ri.n自下向上扫描if(Rj+1.keyRj.key) /交换记录R0=Rj+1; /R0

32、不是哨兵,仅做暂存单元Rj+1=Rj;Rj=R0;e*change=TRUE; /发生了交换,故将交换标志置为真if(!e*change) /本趟排序未发生交换,提前终止算法return; /endfor(外循环) /BubbleSort9. 描述一下C#中索引器的实现过程,是否只能根据数字进展索引?答:C#中的索引器通常用于索引数组。索引器不单能索引数字数组下标,还能索引一些HASHMAP的字符串,所以,通常来说,C#中类的索引器通常只有一个,就是THIS,但也可以有无数个,只要你的参数列表不同就可以了索引器和返回值无关不是。可以用任意类型。10. 求以下表达式的值,写出您想到的一种或几种实

33、现方法: 1-2+3-4+mint n = Convert.ToInt32(Te*tBo*1.Te*t);int sum = 0;for (int i = 0; i 10时是否会引起死锁并简要说明理由。public void test(int i)lock(this)if (i10)i-;test(i);答:不会发生死锁,但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,则死锁会发生30. 简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用。答: WS主要是可利用HTTP,穿透防火

34、墙。而Remoting可以利用TCP/IP,二进制传送提高效率。31. 公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求到达以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进展重排视图中的所有行 (排序的方式如DataGrid相似)。根据您的知识,请简要谈一下您的思路答:根据点击的列头,包该列的ID取出,按照该ID排序后,在给绑定到ListView中。32. 给定以下*ML文件,完成算法流程图。请画出遍历所有文件名FileName的流程图(请使用递归算法)。答:void FindFile( Directory d )FileOrF

35、olders = 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 to

36、p 10 * from A where id (select ma*(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

37、s = new String(*yz);创立了几个String Object答:两个对象,一个是*yz,一个是指向*yz的引用对象s。39. 启动一个线程是用run()还是start()答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停顿一个线程。40.接口是否可继承接口 抽象类是否可实现(implements)接口 抽象类是否可继承实体类(concrete class)答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,

38、但前提是实体类必须有明确的构造函数。41. 构造器Constructor是否可被override答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。42. 是否可以继承String类答:String类是final类,故不可以继承。43. try 里有一个return语句,则紧跟在这个try后的finally 里的code会不会被执行,什么时候被执行,在return前还是后答:会执行,在return前执行。44. 两个对象值一样(*.equals(y) = true),但却可有不同的hash code,这句话对不对答:不对,有一样的h

39、ash code。45. swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上答:switche*pr1中,e*pr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。46. 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法答:不能,一个对象的一个synchronized方法只能由一个线程访问。47. abstract的method是否可同时是static,是否可同时是native,是否可同

40、时是synchronized答:都不能。50. 数组有没有length()这个方法 String有没有length()这个方法?答:数组没有length()这个方法,有length的属性。String有length()这个方法。52. short s1 = 1; s1 = s1 + 1;有什么错 short s1 = 1; s1 += 1;有什么错答:short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。53. 谈谈final

41、, finally, finalize的区别。答:final修饰符关键字如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载finally再异常处理时提供 finally 块来执行任何去除操作。如果抛出一个异常,则相匹配的 catch 子句就会执行,然后控制就会进入 finally 块如果有的话。finaliz

42、e方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中去除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。54. 如何处理几十万条并发数据?答:用存储过程或事务。取得最大标识的时候同时更新.注意主键不是自增量方式这种方法并发的时候是不会有重复主键的.取得最大标识要有一个存储过程来获取.55. Session有什么重大BUG

43、,微软提出了什么方法加以解决?答:是iis中由于有进程回收机制,系统繁忙的话Session会丧失,可以用Sate server或SQL Server数据库的方式存储Session不过这种方式比拟慢,而且无法捕获Session的END事件。56. 进程和线程的区别?答:进程是系统进展资源分配和调度的单位;线程是CPU调度和分派的单位,一个进程可以有多个线程,这些线程共享这个进程的资源。57. 堆和栈的区别?答:栈:由编译器自动分配、释放。在函数体中定义的变量通常在栈上。堆:一般由程序员分配释放。用new、malloc等分配内存函数分配得到的就是在堆上。58. 成员变量和成员函数前加static的

44、作用?答:它们被称为常成员变量和常成员函数,又称为类成员变量和类成员函数。分别用来反映类的状态。比方类成员变量可以用来统计类实例的数量,类成员函数负责这种统计的动作。61. 请说明在.net中常用的几种页面间传递参数的方法,并说出他们的优缺点。答: session(viewstate) 简单,但易丧失application 全局cookie 简单,但可能不支持,可能被伪造input type=hidden 简单,可能被伪造url参数简单,显示于地址栏,长度有限255个字符数据库稳定,平安,但性能相对弱62. C中接口和类的异同答:接口和类都是类,不同的是,接口只包含方法或属性的声明,不包含具体

45、实现方法的代码,接口可以实现多继承,而类只能是单继承,继承接口的类必须实现接口中声明的方法或属性。接口主要定义一种规*,统一调用方法,在大型工程中接口正发挥日益重要的作用。63. DataReader和DataSet的异同答:DataReader和DataSet最大的区别在于,DataReader使用时始终占用SqlConnection,在线操作数据库.任何对SqlConnection的操作都会引发DataReader的异常.因为DataReader每次只在内存中加载一条数据,所以占用的内存是很小的.因为DataReader的特殊性和高性能.所以DataReader是只进的.你读了第一条后就不

46、能再去读取第一条了.DataSet则是将数据一次性加载在内存中.抛弃数据库连接.读取完毕即放弃数据库连接.因为DataSet将数据全部加载在内存中.所以比拟消耗内存.但是确比DataReader要灵活.可以动态的添加行,列,数据.对数据库进展回传更新操作.64. 在c#中using和new这两个关键字有什么意义,请写出你所知道的意义?答:Using 引入一个命名空间,或在使用了一个对像后自动调用其IDespose,New 实例化一个对像,或修饰一个方法,表此方法完全重写65. 下面的例子中using System;class Apublic static int *;static A()*=B

47、.Y+1;class Bpublic static int Y=A.*+1;static B()static void Main()Console.WriteLine(*=0,Y=1,A.*,B.Y);产生的输出结果是什么?答:*=1,y=266. 在.netC# or 中如何获得当前窗体或控件的句柄,特别是控件本身的句柄请列举。答:this(C#) Me().67. 在.netC# or 中,Appplication.E*it 还是 Form.Close有什么不同?答:一个是退出整个应用程序,一个是关闭其中一个form68. 下面这段代码输出什么?为什么?int i=5;int j=5;if

48、 (Object.ReferenceEquals(i,j)Console.WriteLine(Equal);elseConsole.WriteLine(Not Equal);答:Not Equal进展了装箱操作。69. HashMap和Hashtable的区别。答:HashMap是Hashtable的轻量级实现非线程平安的实现,他们都完成了Map接口,主要区别在于HashMap允许空null键值key,由于非线程平安,效率上可能高于Hashtable.71. 重载与覆盖的区别?答:1、方法的覆盖是子类和父类之间的关系,是垂直关系;方法的重载是同一个类中方法之间的关系,是水平关系2、覆盖只能由一

49、个方法,或只能由一对方法产生关系;方法的重载是多个方法之间的关系。3、覆盖要求参数列表一样;重载要求参数列表不同。4、覆盖关系中,调用那个方法体,是根据对象的类型对象对应存储空间类型来决定;重载关系,是根据调 用时的实参表与形参表来选择方法体的72. 什么是虚函数?什么是抽象函数?答:虚函数:没有实现的,可由子类继承并重写的函数。抽象函数:规定其非虚子类必须实现的函数,必须被重写。74. 什么是Web Service?UDDI?答:Web Service便是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规*,这些规*使得Web Service能与其他兼容的组件进展互操作。 U

50、DDI 的目的是为电子商务建立标准;UDDI是一套基于Web的、分布式的、为Web Service提供的、信息注册中心的实现标准规*,同时也包含一组使企业能将自身提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。75. 委托声明的关键字是_答:delegate.76. 用sealed修饰的类有什么特点?答:密封,不能继承。77. 在A中所有的自定义用户控件都必须继承自_Control_78. 在.Net中所有可序列化的类都被标记为_serializable_79. 在.Net托管代码中我们不用担忧内存漏洞,这是因为有了_GC_80. .*一密码仅使用K、L、M、N、O

51、共5个字母,密码中的单词从左向右排列,密码单词必须遵循如下规则:1 密码单词的最小长度是两个字母,可以一样,也可以不同2 K不可能是单词的第一个字母3 如果L出现,则出现次数不止一次4 M不能使最后一个也不能是倒数第二个字母5 K出现,则N就一定出现6 O如果是最后一个字母,则L一定出现问题一:以下哪一个字母可以放在LO中的O后面,形成一个3个字母的密码单词?A) K B)L C) M D) N答案:B问题二:如果能得到的字母是K、L、M,则能够形成的两个字母长的密码单词的总数是多少?A)1个 B)3个 C)6个 D9个答案:A问题三:以下哪一个是单词密码?A) KLLN B) LOML C)

52、 MLLO D)NMKO答案:C81. ADO.NET相对于ADO等主要有什么改良?答: 1:不依赖于oledb提供程序,而是使用.net托管提供的程序,2:不使用3:不在支持动态游标和效劳器端游4:可以断开connection而保存当前数据集可用5:强类型转换6:*ml支持82. 大概描述一下ASP.NET效劳器控件的生命周期初始化 加载视图状态 处理回发数据 加载 发送回发更改通知 处理回发事件 预呈现 保存状态 呈现 处置 卸载83WCF 对WebSerice 的优势WCF 能实现Webserice所有功能,并表达表达面向效劳的程序思想。在WCF框架下,开发基于SOA的分布式系统变得容易

53、了,微软将所有与此相关的技术要素都包含在内,掌握了WCF,就相当于掌握了叩开SOA大门的钥匙。84. 如何传输一亿条数据或者其他巨大的数字利用现有的技术,比方分页存储过程,每次提取1000行数据,异步循环读取。直接select 会导致表被长时间锁定,而且无法做到传输数据的时候显示进度。5值类型和引用类型的区别?1.赋值方式不同:基于值类型的变量直接包含值。将一个值类型变量赋给另一个值类型变量时,将复制包含的值。引用类型变量的赋值只复制对对象的引用,而不复制对象本身。2.值类型不可能派生出新的类型:所有的值类型均隐式派生自 System.ValueType。但与引用类型一样的是,构造也可以实现接

54、口。3.值类型不可能包含 null 值:然而,可空类型功能允许将 null 赋给值类型。4.每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。在网上看到的一些面试题,分享给大家string str; string str=; string str=null;三者之间有什么区别,最好能用图形表示。答:区别如下:string str;如果str是局部变量,编译时会忽略该变量,所以不会分配任何内存空间,如以下图。如果是类的成员变量,会被赋null空值,所以等于str=null;string str=;堆和栈中都分配了空间,栈中保存堆中的地址,堆中为空字符串。3string str=null

55、;只在栈中分配了指针,但该指针为空指针的值为0string 和StringBuilder有什么区别,在什么情况下使用StringBuilder答:区别如下:string是一个不可变的字符串,如以下语句中sring a=abcd;a=eftg;语句1中a代表了栈区的指针,指向堆区的空间,堆区存放的是abcd这个字符串,string的不可变性表达在堆区中的值是不可变的,也就是说不能把堆区中的abcd改为别的值。在第二条语句中给a重新赋值,实质是重新在堆区分配新的内存,其中的值为新的值eftg,并将a指向这个新的地址,也就是说第一条语句的a和第二条语句的a其实是不同的地址。在做大量的类似于a+=ab

56、cdd;这样的操作时string会频繁分配内存,因此速度慢。StringBulider通过StringBuilder str=new StringBuilder(abcd);这种语句初始化,并且会预留一些空间给将来追加字符串时使用。上面的语句用StringBuilder替换如下:StringBuilder a=new StringBuilder(abcd);a.Append(eftg);两行代码中的a在栈区的值也保持了不变(也就是说堆区的地址一样),而且在预留空间足够的情况下也不会重新分配内存,因此速度会快很多,这是一种用空间换时间的用法。StringBuilder一般在频繁改变字符串内容时使

57、用。GC是什么 为什么要有GC答:GC是垃圾收集器。程序员不用担忧内存管理,因为垃圾收集器会自动进展管理。当引用类型在栈区的所有指针释放造成没有任何指针指向堆区的地址时,堆区的内存会被回收。public void Test() object a=new object();Test();当调用Test函数进入Test函数内部时,内存如下:当函数运行完成后,变量a的作用域已过,a因为位于栈区,会被自动弹出,此时内存如下:此时a已不存在,但堆区分配的内存还被占用,该内存没有任何指针指向它,这就是内存中的垃圾。当GC启动时,会对堆区进展扫描,扫描到该内存区域时会将其销毁。const和readonly有

58、什么区别?答:const可以用于类的成员常量和局部常量,必须在声明时赋值,之后不可以对常量进展赋值。而readonly只能用于类的成员变量不能用于局部变量,在声明时可以不赋值,除了在构造函数中可以再次赋值外,其它的地方和const一样也不能赋值。接口和抽象类有什么区别?你选择使用接口和抽象类的依据是什么?答答:区别如下抽象类可以有抽象成员无具体实现,也可以有非抽象成员有具体实现;接口只有抽象成员。一个类不能同时继承多个抽象类,一个类可以同时实现多个接口。如果多个子类中有很多代码是重复的,这时采用抽象类,因为可以将这些代码放到抽象类的非抽象方法中,这样可以到达代码复用。当实现多个接口时因为抽象类

59、不支持,只能使用接口。struct和class有什么区别答:两者都可以有成员变量、属性、索引器、事件、函数、构造函数,主要区别如下:类型值类型引用类型成员变量在声明时不能赋值可以赋值也可以不赋值构造函数可以不写,系统提供默认构造函数,默认构造函数中会将所有成员值设为0,如果写了构造函数则构造函数必须有参数,且在构造函数中必须为每一个成员赋值。可以不写,系统提供默认构造函数,写了也没有构造中的限制。析构函数不能有析构函数可以有析构函数继承性自定义的构造不能从类继承,但可以实现接口,构造都是密封(sealed),不能从构造继承类没有限制try后面一个finally,try中有一个return,则f

60、inally中的代码会不会运行?如果运行,是在return后还是return前。答:会运行,并且在return 后运行。如下代码:调用Test();该函数中的i=100会运行,但最终返回值为10。privateint Test()int i = 10;try return i; finally i = 100; intb =Test();产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。答:该题解题思路有很多,主要是看运行效率如何,下面提供一种方法。int array = newint100;int temp = newint100;for (int i = 0; i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论