C#面试题
1 ,请你说说 .NET 中类和结构的区别?
答:结构没有默认的构造函数。结构是值类型,所以对结构变量所做的改变不会影响其的原值,而类是应用类型,改变其变量的值会改变其原值。申明结构用Struck 关键字,申明类用 class 关键字,向方法传递结构是通过值传递的,而不是通过引用。与类不同,结构的实例化可以不使用New关键字。类可以实现接口。
2,死锁的必要条件?怎么克服?
答:系统的资源不足,进程的推进的顺序不合适,资源分配不当,一个资源每次只能被一个进程使用,一个资源请求资源时,而此时这个资源已阻塞,对已获得资源不放,进程获得资源时,未使用完前,不能强行剥夺。
3,当一个线程进入一个对象的方法后,其它线程是否可以进入该对象的方法?
答:不可以,一个对象的方法只能由一个线程访问。
4,接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。
5,何时必须声明一个类为抽象类?
答:当这个类中包含抽象方法时,或是该类并没有完全实现父类的抽象方法时。
6,什么是抽象类(abstract class)?
答:一种不可以被实例化的类,它只能作为父类被继承。从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为其子类的模板,从而避免了子类的随意性。
abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。
7,接口(interface)是什么?(只含有公有抽象方法(public abstract method)的类)
答:接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的,这些方法必须在子类中被实现。接口中的方法定义默认为public abstract类型。
8,接口和抽象类具有什么区别?
答:(1)两者的语法区别:
a)抽象类可以有构造方法,接口中不能有构造方法。
b)抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的。
c)抽象类中抽象方法可以指定为public,接口中抽象方法不能指定任何修饰符,默认就是public。
d)一个类可以实现多个接口,但只能继承一个抽象类。
(2)接口和抽象类两者在应用上的区别:
接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的重用。
9,用最有效率的方法算出2乘以8等于几? 答:2<<3,
10,C#是否可以对内存直接进行操作?
答: C#是可以对内存进行直接操作的,虽然很少用到指针,但是C#可以使用指针,在用的时候需要在前边加unsafe,在.NET中使用了垃圾回收机制(GC)功能,它替代了程序员,不过在C#中不可以直接使用finalize方法,是在析构函数中调用基类的finalize()方法。
11,Error和Exception有的区别?
答: error表示恢复不是不可能但很困难的情况下的一种严重问题;exception表示一种设计或实现问题。
12,谈谈final,finally,finallize的区别?
答:final 用于申明属性,方法和类,表示属性不可变,方法不可以被重写,类不可以被继承;
Finally 是异常处理语句结构中,表示总被执行的部分;
Finallize 表示是object类一个方法,在垃圾回收机制执行的时候会被调用被回收对象的方法。
13,.NET的错误处理机制是什么?
答:.NET错误处理机制采用try->catch->finally结构,发生错误时,层层上抛,直到找到匹配的Catch为止。
14,try{}里有一个return语句,那么紧跟在这个try后面的finally{}里的code会不会被执行。什么时候执行?
答:会,在return 之前执行。
15, Const和ReadOnly的区别?
答:Const用来申明编程时常量,ReadOnly用来申明运行时常量。
16,HashMap和Hashtable的区别?
答:HashMap是Hashtable的轻量级实现,非线程安全的实现,他们都实现了map接口,主要区别是HashMap键值可以为空null,效率可以高于Hashtable。
17,Collection和Collections的区别?
答:Collection 是集合类的上级接口,Collections 是针对集合类的一个帮助类,它提供一系列静态方法来实现对各种集合的搜索,排序,线程安全化操作。
18,Override,Overload的区别?
答:Override是重写的意思,它表示重写基类的方法,而且方法的名称,返回类型,参数类型,参数个数要与基类相同。
Overload 是重载是意思,它也表示重写基类的方法,但是只要方法名相同,别的可以不同。
19,构造器Constructor是否可以被继承?是否可以被Override?
答:Constructor不可以被继承,因此不能被重写(Overriding),但可以被重载(Overloading),
20,重载与重写的区别?
答:(1)方法的重写是子类和父类之间的关系,是垂直关系;方法的重载是同一个类中方法之间的关系,是水平关系
(2)重写只能由一个方法,或只能由一对方法产生关系;方法的重载是多个方法之间的关系。
(3)重写要求参数列表相同;重载要求参数列表可以不同。
(4)重写关系中,调用那个方法体,是根据对象的类型(对象对应存储空间类型)来决定;重载关系,是根据调用时的实参表与形参表来选择方法体的。
*21,ASP.NET页面之间传递值的几种方式?
答:session(消耗服务器内存资源,容易丢失);
cookie(安全性不高,容易伪造);
application(作为全局变量容易被误操作,用lock和unlock方法用来锁定和解锁,为了防止并发修改);
Request.QueryString(缺乏安全性,值暴露URL地址中且不能传递对象);
server.Transfer(相对路径问题多);
respose;redictor。
部分实例:Request.Form["SourceData1"],ToString();
Request.QueryString["parameter1"],ToString();
Context.Items["value"],ToString();
*22,如果在一个B/S结构的系统中需要传递变量值,但是又不能使用Session、Cookie、Application您有几种方法进行处理?
答:this,server,Transfer,Querystring
23,概述反射和序列化?
答:反射就对程序集的动态操作(程序集包括了模块,而模块里面包含类型,类型又包含成员),动态获取程序集信息,动态获取类的属性和方法。
反射提供了封装程序集,模块和类型的对象,可以动态地创建类型的实例,将类型绑定到现有对象,或者从现有对象类型里获取类型,然后调用类型的方法或访问字段和属性。
序列化:把对象转换为容易传输的格式的过程。如,序列化一个对象,用Http通过internet在客户端和服务器之间传递该对象,在另一端用反序列化从该流中重新得到对象。
24,C#中委托是什么?事件是不是一种委托?
答:委托是一种安全的类似与函数指针,但是它比指针要安全的多,它可以把方法作为一个参数传递给另一个方法,可以理解为指向函数的引用。事件是一种消息机制,在C#中处理事件的逻辑都包装为委托,它是一种特殊的委托。
25,如何部署一个ASP.NET页面?
答:vs2003,vs2005里边都有发表机制,vs2003可以发布然后在复制部署。Vs2005可以直接部署到对应的位置。
26,进程和线程分别该怎么理解?
答:进程是比线程大的程序运行单元,都是由操作系统所划分的系统运行单元,一个程序中至少有一个进程。一个进程中,至少要有一个线程,线程的划分尺度要比进程要小,进程拥有独立的内存单元,线程是共享内存,从而极大的提高了程序的运行效率,同一个进程中的多个线程可以并发执行。
27,New有几种用法?
答:有3种,第一种是,用于创建对象和调用构造函数(实例化),如:NewClass();
第二种是,用于向基类成员隐藏继承成员,如:public new 隐藏基类的方法;
第三种是,用于在泛型声明中约束可能用作类型参数的参数的类型。
28,什么叫应用程序域?什么是托管代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?
CTS、CLS和CLR分别作何解释?
答:应用程序域:为了安全性,可靠性,隔离性,和版本控制,及卸载程序提供的隔离边界。它通常由运行库宿主创建,应用程序域提供了一个更安全,用途更广的处理单元。
托管代码:使用CLR编译语言编辑器开发编写的代码就叫托管代码。
装箱和拆箱:是把值类型转换为引用类型的过程,是隐式的,相反的过程就是拆箱,是显式的。
CTS是公共类型系统,CLS是公共语言规范,CLR公共语言运行库。
强类型系统:每个变量和对象都必须具有申明类型。
29,值类型和引用类型的区别?
答:值类型变量直接把变量的值保存在栈中,引用类型的变量把实际数据的地址保存在栈中,而实际数据则保存在堆中,改变其值也就改变了变量原有的值;
值类型不允许包含null值,然而可空类型可以将null赋值给值类型;
值类型存取速度快,引用类型存取速度慢;
值类型继承自System,ValueType,引用类型继承自System,Object;
栈的内存分配是自动释放;而堆在.NET中会有GC(垃圾回收)来释放。
30,Heap与stack的差别?
答:Heap是堆,Stack是栈,
(1)堆栈空间分配
①栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
②堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。
(2)堆栈缓存方式
①栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。
②堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。
(3)堆栈数据结构区别
①堆(数据结构):堆可以被看成是一棵树,如:堆排序。
②栈(数据结构):一种先进后出的数据结构。
31,请详述在.NET中类(class)与结构(struct)的异同:
答:Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的
32,解释一下UDDI、WSDL的意义及其作用?
答:UDDI是统一描述集成协议,是一套基于Web的,分布式的,为WEB服务提供的信息注册的实现标准规范,同时为也是为企业本身提供的Web服务注册以让别的企业能够发现并访问的协议标准。提供了基于标准的规范,用于描述和发现服务,还提供了一组基于因特网的实现。
WSDL这是一个基于XML的描述WEB服务的接口。
33,什么是SOAP?
答:是简单访问协议。是在分布式环境中,交换信息并实现远程调用的协议。是一个基于XML的协议。使用SOAP,可以不考虑任何传输协议,但通常还是HTTP协议,可以允许任何类型的对象或代码,在任何平台上,以任一种语言相互通信。它是一种轻量级协议。
34,UDP和TCP连接有和异同?
答:TCP是传输控制协议,提供的是面向连接的,是可靠的,字节流服务,当用户和服务器彼此进行数据交互的时候,必须在他们数据交互前要进行TCP连接之后才能传输数据。TCP提供超时重拨,检验数据功能。
UDP是用户数据报协议,是一个简单的面向数据报的传输协议,是不可靠的连接。
35,如何理解.NET中的垃圾回收机制? GC
答:.NET中的垃圾回收机制是引用程序对内存的回收和释放。当每次用new关键字创建一个对象时,运行库都要从托管堆中为其分配内存,因为空间是有限的,最终垃圾回收机制是要回收不用的内存的。已释放内存,重新使用。
36,通过程序控制GC的强制回收是否可以提高效率?
答:个人以为是可以的(在网上没找到答案),GC是循环遍历所有资源的,如果你已经强制回收了,那么遍历的就会少,从而提高效率。
37,BS架构下,在session中存储了一个datatable的对象y,y在什么时候会被GC回收?这种存储数据的方式是否合理?如果Application增加了对y的引用,什么时候会被GC回收?
答:在session的生命周期结束之后回收,不合理,每个session储存在服务器端的内存里,每个用户都会有一个独立的session,如果session的内容过于复杂,当大量的用户访问的时候会导致内存溢出。Application是所有用户共有的,所以应该不会被回收(个人理解)。
38,面向对象三大基本特性,五大基本原则?
答:
三大基本特性:
1、封装:封装的目标就是要实现软件部件的“高内聚、低耦合”,防止程序相互依赖性而带来的变动影响。
2、继承:子类继承父类成员,实现代码复用,提高了软件的可重用性和可扩展性。
3、多态:不同子类对同一个消息作出不同的反映,提高软件灵活性
五大基本原则: 1、单一职责原则(SRP)
2、开放封闭原则(OCP)
3、里氏替换原则(LSP)
4、依赖倒置原则(DIP)
5、接口隔离原则(ISP)
39,在.NET中所有类的基类是?
答:object。
40,能用foreach遍历访问的对象需要实现?
答:需要实现IEnumerable接口或声明GetEnumerator方法的类型。注:不一定要实现IEnumerable接口,但一定要实现GetEnumrator方法。
41, ASP.NET的身份验证方式有哪些?
答:windows,forms,passport
42,.NET中读写数据库需要用到那些类?他们的作用?
答:SqlConnection/OleDbConnection:建立数据库的连接;
SqlCommand/OleDbCommand:执行数据库脚本。
43,ASP.NET与ASP相比,主要有哪些进步?
答:ASP解释形,ASPX编译型,性能提高,可以跟美工的工作分开进行,更有利于团队开发。
44,DataReader与Dataset有什么区别?
答:一个是只能向前的只读游标,一个是内存中的表。
45,什么是虚函数?什么是抽像函数?
答:虚函数:可由子类继承并重写的函数。
抽像函数:规定其非虚子类必须实现的函数,必须被重写。
46,什么是ASP.NET中的用户控件?
答:用户控件一般用在内容多为静态,或者少许会改变的情况下,类似ASP中的include,但是功能要强大的多。
47,什么是code-Behind技术。
答:ASPX,RESX和CS三个后缀的文件,这个就是代码分离,实现了HTML代码和服务器代码分离,方便代码编写和整理,
48,当整数a赋值给一个object对象时,整数a将会被? 答:装箱。
49, C#中索引器实现过程,是否只能根据数字索引?
答:不是的,可以是任意类型。
50,简述下列词在C#语言中的作用:
volatile:(创建单例模式时会使用)就像大家更熟悉的const一样,volatile是一个类型修饰符(type specifier)。它是被设计用来修饰被不同线程访问和修改的变量。如果不加入volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会。作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值,,简单地说就是防止编译器对代码进行优化,比如如下程序:
XBYTE[2]=0x55;
XBYTE[2]=0x56;
XBYTE[2]=0x57;
XBYTE[2]=0x58;
对外部硬件而言,上述四条语句分别表示不同的操作,会产生四种不同的动作,但是编译器却会对上述四条语句进行优化,认为只有XBYTE[2]=0x58(即忽略前三条语句,只产生一条机器代码)。如果键入volatile,则编译器会逐一的进行编译并产生相应的机器代码(产生四条代码)
interlocked:为多个线程共享的变量提供原子操作(仅限int类型)
monitor:lock:(lock是一种混合锁,相当于Monitor,Enter(object)方法是获取锁,Monitor,Exit(object)方法是释放锁的组合)
ReaderWriterLock:字面意思,读写锁,分为读锁和写锁,多个线程读一个对象, 而只有一个线程要写这个对象, 那么对于读线程来说, 它不改变对象的内容, 我们就应该允许多个线程同时读, 只有在写的时候才要给锁住对象, 这样可以提高读线程的吞吐量。
AutoResetEvent|ManualResetEvent 字面意思为自动重置事件和手动重置事件,这两个类可以理解为设置信号,来进行阻塞线程或者让线程重新启动。
Semaphore:信号量,通过计数器设置可以访问的线程数目例如设置为10,则可以同时有10个线程访问此资源,每当有一个线程访问此资源,则信号量减1,访问完成之后释放则加1,当信号量=0时禁止访问,阻塞线程,当信号量>0时,可以访问。
Mutex:互相排斥,只有拥有互斥对象的线程才具有访问资源的权限,由于互斥对象只有一个,因此就决定了任何情况下此共享资源都不会同时被多个线程所访问。因为使用互斥不仅仅能够在同一应用程序不同线程中实现资源的安全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享。
51, 如何把一个Array复制到ArrayList中?
(1)使用for循环,将array数组中的数据逐步加入到ArrayList的对象中;
//1、for循环
for (int i = 0; i < array,Length;i++)
{
list,Add(array[i]);
}
(2)使用ArrayList 的CopyTo()方法:
//2、copyTo()
list,CopyTo(array);
(3)使用ArrayList的Adapter()方法:
//3,Adapter()
ArrayList list1=ArrayList,Adapter(array);
(4)直接使用构造方法传入,因为Array实现了ICollection:
//4\构造方法
ArrayList list3 = new ArrayList(array);。
52,MVC框架中,ActionResult,JsonResult,ContentResult哪个可以return view()?
答:ActionResult。
53,Aspx页面中,updatepanel的作用是什么?
答:UpdatePanel控制页面的局部更新。
54,MVC框架中,当使用Get方法访问JsonResult时,能否直接采用以下写法:return json(obj),为什么?
答:不能,要使用 res,JsonRequestBehavior = JsonRequestBehavior,AllowGet;//允许使用GET方式获取,否则用GET获取是会报错。
55, EF框架中,使用DBFirst时数据库中的表A没有主键,能否通过“从数据库更新模型“操作,将表A导入到EF框架中?
答:不能,表必须要有主键,否则会报错。
savechange()方法返回0,而不是正常的大于0的值。切记设置主键。
返回错误InnerException={"无法更新EntitySet“t_Customer”,因为它有一个 DefiningQuery,而
在发现错误后要吧原有的数据库的表删除,重新更新。如果不删除的话,无法更新,并且要重新生成解决方案。
56,foreach和for循环谁的效率高?switch和if呢?
答:foreach高,for循环每次都要进行判断i的大小,foreach依赖IEnumerable,第一次 var a in GetList()时调用 GetEnumerator 返回第一个对象并赋给a,以后每次再执行 var a in GetList() 的时候调用MoveNext,直到循环结束。期间GetList()方法只执行一次。
同样的道理:当有多个判断时,switch更快。
57,WebService基于什么协议?
答:soap协议,而Soap建立在http上的。
58,WebService和WebAPI 有什么不同?
WebService是基于SOAP协议的,数据格式是XML,WebAPI遵循的http协议,它的Response可以被而Web API的MediaTypeFormatter转换成Json、XML或者任何你想转换的格式。
WebService它只能部署在IIS上,而WebAPI可以寄宿在不同的宿主上(寄宿的本质就是利用一个具体的应用程序为WebAPI提供一个运行的环境,并解决请求的接收和响应的回复),如Web Host,Self Host方式。WebService也可以通过ajax访问。
WebAPI无状态,相对WebService更轻量级。WebAPI支持如get,post等http操作,并且对限制带宽的设备,比如智能手机等支持的很好。
59,这样对比的话WebService貌似并不好用。但是我们为什么要用它呢,理由如下:
答:很好的跨编程语言和跨操作系统;
可移植性:传统的WebService利用了HTTP通道,进行独立的交互,这个交互协议可以移植到其他协议下运作。
60,C#是否支持多重继承?
答:不支持。多重继承指的是一个类可以同时继承多个类,比如A类继承自B类和C类,这就是多重继承。C#只能继承一个类,但是可以继承多个接口。
61,简述private,protected,public,internal修饰符的访问权限。
public(公共的) 完全公开,访问不受限制。
protected(保护的) 访问仅限于包含类或从包含类派生的类型。该类内部和继承类中可以访问。
internal(内部的) 访问仅限于当前程序集。在同一命名空间内可以访问。
protected internal(内部保护的) 访问仅限于同一程序集或者派生类可以访问,也就是protected跟internal的并集,而不是交集。
private(私有的) 访问仅限于包含类型。在类的内部才可以访问
62,修饰符protected internal 的意思?
internal修饰的b在同一个项目中哪里都可以访问,而在另外一个项目中就不能访问,说明“同一程序集”指的是同一个项目;对于protected internal修饰的a在同一项目中哪里都可以访问,而在其它项目中只有在派生类可以访问,所以protected internal 修饰的成员变量是同一程序集或者派生类可以访问,也就是protected跟internal的并集,而不是交集。(被protected internal修饰的属性/方法只能在它的在同一个程序集(Assembly)中的子类被访问)查资料找到了两种说法,不知道哪种是对的,个人以为是第一种是对的。
63,b/s架构下,可否声明一个静态的数据库连接对象,所有的业务类都引用该静态连接对象去访问数据库?
答:一个静态的Sqlconnection来管理项目内所有的数据库连接在绝大部分场景是不合理的
(没说绝对不可行,在winform单线程项目中,这样做是没有问题的,因为操作者是一个用户,每个用户都有一份程序副本)。如果是多个用户提交的请求是同一个AppDomain中的函数来处理时,都是用同一个静态的Sqlconnection对象是不行的,会引起并发问题,会引起相互干扰,还需要加锁lock才能操作。
64,C#提供了一个默认的无参数构造函数,当我实现了另外一个有一个参数的构造函数的时候,还想保留这个无参数的构造函数。这样我应该写几个构造函数?
答:两个。
65,能够阻止某一个类被其他类继承么?能够实现允许某个类被继承,但不允许其中某个方法被覆写吗?
答:(1)当对一个类应用 sealed 修饰符时,此修饰符会阻止其他类从该类继承;
(2)标记这个类为public,并标记这个方法为sealed。
66,什么是强类型?C#是强类型吗,JS呢?
答:强类型指的是程序中表达的任何对象所从属的类型都必须能在编译时刻确定。常见的强类型语言有C++、Java、Apex和Python等,C#是强类型,JS不是。
67,金额等精确的数值声明为什么类型?
答:float,double,decimal
68,读写数据库都需要哪些对象,简要说明其作用。
答:(1) Connection:与数据源建立连接。
(2) Command:对数据源执行SQL命令并返回结果。
(3) DataReader:读取数据源的数据,只允许对将数据源以只读、顺向的方式查看其中所存储的数据。其常用于检索大量数据,DataReader对象还是一种非常节省资源的数据对象。
(4) DataAdapter:对数据源执行操作并返回结果,在DataSet与数据源之间建立通信,将数据源中的数据写入DataSet中,或根据DataSet中的数据绑定数据源。
(5)DataSet:内存中的数据库,是数据表的集合,它可以包含任意多个数据表。
69,int? a和int a的区别。
答:int?为可空类型,可以是null,他是通过把int装箱为引用类型实现的。
70,string和stringbuilder的区别。
答:System.String是不可变的字符串;System.StringBuilder存放了一个可变的字符串,并提供一些对这个字符串修改的方法
71,描述一下virtual、sealed、override和abstract的区别。
答:被virtual修饰的方法可以被子类重写
sealed说明该类不可被继承
override重写基类的方法
abstract申明抽象类和抽象方法的关键字,抽象方法不提供实现,由子类实现,抽象类不可实例化。
72,int,string,hashtable,datetime,datatable中哪些是引用类型?
答:string,hashtable,datatable
73,MVC模式。
答:MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。
74,什么是匿名方法?请写一段代码。
答:delegate(int i) { return i > 0; }
75,传入某个属性的set方法的隐含参数的名称是什么?
答:value,它的类型和属性所声名的类型相同。
76,如何在C#中实现继承?
答:继承的格式:在类名后加上一个冒号,再加上基类的名称。
77,私有成员会被继承么?
答:会,但是不能被访问。所以看上去他们似乎是不能被继承的,但实际上确实被继承了。
78,C#中所有对象共同的基类是什么?
答:System,Object
79,能够将非静态的方法覆写成静态方法么?
答:不能,覆写方法的签名必须与被覆写方法的签名保持一致,除了将virtual改为override
80,可以覆写私有的虚方法么?
答:不可以,甚至子类中无法访问父类中的私有方法。
81,是否可以继承String类?
答:String类是final类故不可以继承。
82,数组有没有length()这个方法? String有没有length()这个方法?
答:数组没有length()这个方法,有length的属性。String有length()这个方法(查网上资料说有个方法,但个人实验了一下是没有的,只有Length属性)。
83,成员变量和成员函数前加static的作用?
答:它们被称为常成员变量和常成员函数,又称为类成员变量和类成员函数。分别用来反映类的状态。比如类成员变量可以用来统计类实例的数量,类成员函数负责这种统计的动作。
84,public static const int A=1;这段代码有错误么?是什么?
答:const不能用static修饰。
85,在c#中using和new这两个关键字有什么意义,请写出你所知道的意义?using 指令和语句 new 创建实例 new 隐藏基类中方法。
答:using 引入名称空间或者使用非托管资源
new 新建实例或者隐藏父类方法
86,什么是虚函数?什么是抽象函数?
答:虚函数:没有实现的,可由子类继承并重写的函数。
抽象函数:规定其非虚子类必须实现的函数,必须被重写。
87,c#中的三元运算符是? 答:?:
88,Ref参数是引用调用,out参数是输入调用。
89,const和readonly有什么区别?
答:const可以用于局部常量,而readonly实际是类的initonly字段,显然不能是局部的,const是编译时常量,readonly是运行时常量。
90,虚函数的用法:
答:1)virtual指明一成员函数为虚函数,而virtual仅用于类的定义里,在类外可不加此关键字,
2)一个类的成员函数被定义为虚函数时,子类该函数仍保持虚函数特征,
3)子类重写此函数时,定义里可不加virtual关键字,但函数声明要和基类的完全一致!且此声明是必须的,
4)不是纯虚函数时,父类的虚函数必须要实现; 而若将父类的虚函数设定为纯虚函数时,子类必需要重写之而且必须要实现之!
91,对象和类的区别是什么?
答:“类”(Class)具有相同属性和方法的一组对象的集合,类是抽象的概念,仅仅是模板
对象是一个你能够看得到、摸得着的具体实体。
92,什么是局部变量,什么是成员变量?
答:局部变量是指一个方法中定义的变量;成员变量是指在类范围里定义的变量,也就是之前讲过的属性。
93,静态成员和实例成员的区别?
答:使用static修饰的成员称为静态成员,使用实例对象调用的成员称为实例成员
94,怎么声明和调用静态变量?
答:用static声明;static 限制了变量的作用域只在该文件里;没有static修饰的全局变量,要是在不同文件中定义了相同的变量名,程序会报错。
*定义性声明(定义):需要建立存储空间,eg:int a;在声明时就已经建立好存储空间了。
*引用性声明:不需要建立存储空间,eg:extern int a;仅是变量a的声明,不需要建立存储空间,变量a在其他文件中定义。
95,对象能否调用静态方法 ?
答:不能。对于类内部定义的静态变量及静态方法,该类的对象均不能调用。
96,为什么不能指定接口中方法的修饰符?
答:接口中的方法用来定义对象之间通信的契约,指定接口中的方法为私有或保护没有意义。他们默认为公有方法。
97,base关键字的作用是什么?
答:子类继承父类的过程中,可能需要在子类中调用父类中的成员,如属性、方法或者构造方法。这个时候,可以使用base关键字来完成。base的作用是用于引用父类的成员,如属性、方法或者是构造方法。
98,在C#中,string str=null string str= string,Empty与string str=“”请尽量使用文字或图象说明其中的区别。
答: string,Empty:不分配存储空间。"":分配一个长度为空的存储空间,""和String,Empty,这两个都是表示空字符串,空字符串是一个特殊的字符串,只不过这个字符串的值为空,在内存中是有准确的指向的。
99,Params是什么含义?
答:Params是C#中的关键字,采用此关键字可以指定参数数目为可变;在方法声明中的params关键字之后不允许任何其他参数,并且在方法声明中只允许一个params关键字。
100,float f=-123,567F; int i=(int)f;i的值现在是_____? 答:-123
101,C#中 property(属性) 与 attribute(特性)的区别,他们各有什么用处,这种机制的好处在哪里?
答:属性:用于存取类的字段。特性:用来标识类,方法等的附加性质。
attribute:自定义属性的基类;property :类中的属性。
102,概述三层结构体系
答:表示层(UI) ,业务逻辑层(BLL) ,数据访问层(DAL)。
103,概述O/R Mapping 的原理
答:利用反射,配置将对象和数据库表映射。
104,列举ADO.NET中的共享类和数据库特定类
答:共享类:DataSet,DataTable,DataRow,DataColumn,DataRealtion,Constraint,DataColumnMapping,DataTableMapping
特定类:(x)Connection,(x)Command,(x)CommandBuilder,(x)DataAdapter,(x)DataReader,(x)Parameter,(x)Transaction
105,在.net中,配件的意思是?
答:程序集。(中间语言,源数据,资源,装配清单)
106,什么是受管制的代码?
答:unsafe:非托管代码。不经过CLR运行。
107,简要谈您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用。
答:webservice主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传送提高效率。
remoting是.net中用来跨越machine,process, appdomain进行方法调用的技术,对于三层结构的程序,就可以使用remoting技术来构建.它是分布应用的基础技术.相当于以前的DCOM。
Web Service是一种构建应用程序的普通模型,并能在所有支持internet网通讯的操作系统上实施。Web Service令基于组件的开发和web的结合达到最佳,基于组件的对象模型。
108,启动一个线程是用run()还是start()?
答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。
run()方法可以产生必须退出的标志来停止一个线程。
109,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
答:不能,一个对象的一个synchronized方法只能由一个线程访问。
110,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
答:都不能。
111,List, Set, Map是否继承自Collection接口?
答:List,Set是,Map不是
112,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对像,equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。
113,如何处理几十万条并发数据?
答:用存储过程或事务。取得最大标识的时候同时更新。注意主键不是自增量方式,这种方法并发的时候是不会有重复主键的。取得最大标识要有一个存储过程来获取.
114,Session有什么重大BUG,微软提出了什么方法加以解决?
答:是iis中由于有进程回收机制,系统繁忙的话Session会丢失,可以用Sate server或SQL Server数据库的方式存储Session不过这种方式比较慢,而且无法捕获Session的END事件。
115,请指出GAC的含义?
答:全局程序集缓存。
116,向服务器发送请求有几种方式?
答:get,post。get一般为链接方式,post一般为按钮方式。
117,&和&&的区别
答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and).
120,<%# %> 和 <% %> 有什么区别?
答:<%# %>表示绑定的数据源,<% %>是服务器端代码块
121,动态创建的控件PostBack后是否可以保存下来,为什么?
答:ASP.NET框架不会为你保存,但可以手工保存到ViewState
122,T-SQL中is null和null 的区别?
答:is null 和 null 区别相当于 "是空盒子" 和 "空盒子"的区别
引用参照:
https://www.cnblogs.com/xjzh/p/11021893.html
https://www.cnblogs.com/zhouxiaojie/p/10708193.html
https://www.cnblogs.com/xjzh/p/11021893.html
https://www.cnblogs.com/kkfish/p/5194586.html