一、简述 private、 protected、 public、 internal 修饰符的访问权限。程序员
private : 私有成员, 在类的内部才能够访问。 数据库
protected : 保护成员,该类内部和继承类中能够访问。 数组
public : 公共成员,彻底公开,没有访问限制。 安全
internal: 在同一命名空间内能够访问。服务器
二、C#中的委托是什么?事件是否是一种委托?并发
简单的说:委托是一种方法容器,里面能够装载若干个具备相同签名的方法引用地址,那么调用委托,就至关于同时调用了该容器内的全部方法。框架
委托能够看作一种新的对象类型,具备面向对象的特色,定义时可签名接收参数,委托实例化时,能够把方法名做为一个参数传递给委托对象,ide
委托能够理解为指向函数的引用。生成的委托对象能够代理所传递的方法,能够接收方法的参数。也就是定义了委托,能够在不用调用原方法的状况下,调用那个方法。函数
委托能够把一个方法做为参数代入另外一个方法。工具
委托能够理解为指向一个函数的引用。
委托是一种安全的函数指针,事件是一种消息机制,是一种特殊的委托。
三、override(重写)与overload(重载)的区别
重载是方法的名称相同。参数或参数类型不一样,进行屡次重载以适应不一样的须要。
重写是进行基类中函数的重写,名称、参数和参数类型都相同,为了适应须要。
四、在C#中,string str = null 与 string str = “”的区别。
string str = null 是不给他分配内存空间,
而string str = "" 给它分配长度为空字符串的内存空间。
五、面向对象的语言具备________性、_________性、________性
封装、继承、多态。
封装:每一个对象都包含有它能进行操做的全部信息,这个特性称为封装。这样的方法包含在类中,经过类的实例来实现。
好处:
A.良好的封装可以减小耦合(好比实现界面和逻辑分离)
B.可让类对外接口不变,内部能够实现自由的修改
C.类具备清晰的对外接口,使用者只需调用,无需关心内部
D.由于封装的类功能相对独立,所以能更好的实现代码复用
E.可保护代码不被无心中破坏,经过私有字段等实现内部。注意:这里的代码保护不是指代码自己的加密,而是对不想外部更改的代码经过私有实现。
要点:
1.封装,就是把一个对象所能操做的全部信息放在一块儿
2.封装能减小耦合,保持统一的对外接口,内部修改不影响外部调用
继承:
(1) 当一个类A可以获取另外一个类B中全部非私有的数据和操做的定义做为本身的部分或所有成分时,就称这两个类之间具备继承关系。
(2) 被继承的类B称为父类或基类,继承了父类的类A称为子类或派生类.
缺点:
缺点一:父类变化,子类不得不变;
缺点二:继承破坏了包装,父类的细节暴露给了子类。
要点:
1:父类中的私有成员,派生类是毫不能访问;
2:C#要求一个类只能有一个直接基类;
3:被“sealed”关键字修饰的类将不能被继承;
4:被“protected”修饰的成员或者数据能够直接被派生类访问,属于“能够在家族里分享的秘密”。
5:善用“base”关键字,显示调用合适的自定义基类构造函数而不是使用默认构造函数。
6:继承须要合理使用才能发挥最佳效果,通常状况下适用于“is a”关系,不适用“has a”关系。
多态:同一操做做用于不一样的对象,能够有不一样的解释,产生不一样的执行结果。这就是多态,这种特性称为多态性。
多态的分类:多态性分为两种,一种是编译时的多态性,一种是运行时的多态性。
编译时的多态性:编译时的多态性是经过重载来实现的。对于非虚的成员来讲,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操做。
运行时的多态性:运行时的多态性就是指直到系统运行时,才根据实际状况决定实现何种操做。C#中运行时的多态性是经过覆写虚成员实现。
要点:
a.多态是面向对象的重要特性之一,指同一操做做用于不一样的对象,能够有不一样的解释,产生不一样的执行结果。
b.多态分为两种:一种是编译时多态,使用重载实现;另外一种是运行时多态,使用重写实现;
c.重写有两种,一种使用override关键词,另外一种使用new关键词
d.new重写其实是对父类方法的隐藏,被覆盖的父类方法能够调用获得。所以new能够重写(或说是隐藏)的父类方法不必定要定义为虚方法或抽象方法。只是若是父类方法 是虚方法或抽象方法时会覆盖父类方法,若是不是,则隐藏。
e.重载和覆盖的发生条件:
重载,必然发生在一个类中,函数名相同,参数类型或者顺序不一样构成重载,与返回类型无关
重写,必然发生在基类和派生类中,其类函数用virtual修饰,派生类用override修饰
覆盖,在子类中写一个和基类同样名字(参数不一样也算)的非虚函数,会让基类中的函数被隐藏,编译后会提示要求使用New关键字 new 修饰
隐藏,在子类中能够经过new 隐藏父类的方法
f.new覆盖与重写、重载的区别:
当子类与父类的参数不一样时
当基类函数不是虚函数时,基类函数将被隐藏。(由于子类和基类不在同一范围内,因此不是重载)
当基类函数是虚函数时,基类函数将被隐藏。(由于子类和基类不在同一范围内,因此不是重载;由于参数不一样,因此不是重写)
当子类与父类的参数相同时
当基类函数不是虚函数时,基类函数将被隐藏。(由于子类和基类不在同一范围内,因此不是重载,由于基类不是虚函数,因此是隐藏不是重写)
当基类函数是虚函数时,基类函数将被覆盖。(由于子类和基类不在同一范围内,因此不是重载)
六、GC是什么? 为何要有GC?
GC是垃圾收集器。程序员不用担忧内存管理,由于垃圾收集器会自动进行管理。要请求垃圾收集,能够调用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
七、C#中结构和类有什么异同?
类是引用类型,能够继承类、接口和被继承,有默认的构造函数,有析构函数,可使用abstract和sealed,有protected修饰符,必须使用new初始化。
结构是值类型,只能继承接口,不能被继承,没有默认的构造函数,能够建立,没有析构函数,不能够用abstract和sealed,没有protected修饰符,能够不用new初始化。
八、抽象类(abstract class)和接口(interface)有什么异同?
抽象类:
(1) 抽象方法只做声明,而不包含实现,能够当作是没有实现体的虚方法
(2) 抽象类不能被实例化
(3) 抽象类能够但不是必须有抽象属性和抽象方法,可是一旦有了抽象方法,就必定要把这个类声明为抽象类
(4) 具体派生类必须覆盖基类的抽象方法
(5) 抽象派生类能够覆盖基类的抽象方法,也能够不覆盖。若是不覆盖,则其具体派生类必须覆盖它们。
接口:
(1) 接口不能被实例化
(2) 接口只能包含方法声明
(3) 接口的成员包括方法、属性、索引器、事件
(4) 接口中不能包含常量、字段(域)、构造函数、析构函数、静态成员。
(5) 接口中的全部成员默认为public,所以接口中不能有private修饰符
(6) 派生类必须实现接口的全部成员
(7) 一个类能够直接实现多个接口,接口之间用逗号隔开
(8) 一个接口能够有多个父接口,实现该接口的类必须实现全部父接口中的全部成员
相同点:
(1) 均可以被继承
(2) 都不能被实例化
(3) 均可以包含方法声明
(4) 派生类必须实现未实现的方法
区 别:
(1) 抽象基类能够定义字段、属性、方法实现。接口只能定义属性、索引器、事件、和方法声明,不能包含字段。
(2) 抽象类是一个不完整的类,须要进一步细化,而接口是一个行为规范。微软的自定义接口老是后带able字段,证实其是表述一类“我能作。。。”
(3) 接口能够被多重实现,抽象类只能被单一继承
(4) 抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中
(5) 抽象类是从一系列相关对象中抽象出来的概念, 所以反映的是事物的内部共性;接口是为了知足外部调用而定义的一个功能约定, 所以反映的是事物的外部特性
(6) 接口基本上不具有继承的任何具体特色,它仅仅承诺了可以调用的方法
(7) 接口能够用于支持回调,而继承并不具有这个特色
(8) 抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,固然您也能够声明为虚的
(9) 若是抽象类实现接口,则能够把接口中方法映射到抽象类中做为抽象方法而没必要实现,而在抽象类的子类中实现接口中方法
九、.NET的错误处理机制是什么?
try{可能要出错的代码}
catch{扑捉到错误后的处理}
finally{不论代码是否出错都要执行}
十、事务是什么?
在许多大型、关键的应用程序中,计算机每秒钟都在执行大量的任务。更为常常的不是这些任务自己,而是将这些任务结合在一块儿完成一个业务要求,称为事务。
当某一个任务失败时,就恢复到指定的恢复点,这个叫回滚。
十一、什么是数据库事务
(1) 事务的三个特性:一致性,原子性,隔离性
(2) 几个SQL语句,要么所有执行成功,要么所有执行失败,事务的三个操做:Begin,Commit,RollBack。
(3) 取刚插入数据的ID值,就要用事务来隔离。
十二、数据库创建索引的优缺点
优势:使用索引能够加快数据的查询速度
缺点:因为数据插入过程当中会建索引,因此会下降数据的插入,更新速度,索引还会占用磁盘空间。
1三、接口是否可继承接口? 抽像类是否可实现(implements)接口? 抽像类是否可继承实体类(concrete class)?
接口能够继承接口。抽像类能够实现(implements)接口,抽像类是否可继承实体类,但前提是实体类必须有明确的构造函数。
1四、sleep()和wait() 有什么区别?
sleep()方法是将当前线程挂起指定的时间。
wait()释放对象上的锁并阻塞当前线程,直到它从新获取该锁。
.net是一种平台和框架, .net 不是单纯的语言也不是单纯的工具,它是从底层平台开始构建起来的一个总体框架
1六、概述反射和序列化?
反射:要给发射下一个定义仍是比较难的。反射提供了封装程序集,模块和类型对象,能够用反射动态地建立类型的实例,将类型绑定到现有对象,或者从现有对象类型里获取 类型,而后调用类型的方法或访问字段和属性。动态获取程序集信息
序列化:将对象转换为另外一种媒介传输的格式过程。如,序列化一个对象,用Http经过internet在客户端和服务器之间传递该对象,在另外一端用反序列化从该流中从新获得对象。
1七、什么是虚函数?什么是抽像函数?
虚函数:可由子类继承并重写的函数。抽像函数:规定其非虚子类必须实现的函数,必须被重写。
1八、什么是XML?
XML便可扩展标记语言。eXtensible Markup Language.标记是指计算机所能理解的信息符号,经过此种标记,计算机之间能够处理包含各类信息的文章等。如何定义这些标记,即 能够选择国际通用的标记语言,好比HTML,也可使用象XML这样由相关人士自由决定的标记语言,这就是语言的可扩展性。XML是从SGML中简化修改出来的。它主要用到的有 XML、XSL和XPath等。
1九、XML与HTML 的主要区别
1 XML是区分大小写字母的,HTML不区分。
2 在HTML中,若是上下文清楚地显示出段落或者列表键在何处结尾,那么你能够省略或者之类的结束标记。在XML中,绝对不能省略掉结束标记。
3 在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个 / 字符做为结尾。这样分析器就知道不用查找结束标记了。
4 在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。
5 在HTML中,能够拥有不带值的属性名。在XML中,全部的属性都必须带有相应的值。
20、error和exception有什么区别?
error 表示恢复不是不可能但很困难的状况下的一种严重问题。好比说内存溢出。不可能期望程序能处理这样的状况。
exception 表示一种设计或实现问题。也就是说,它表示若是程序运行正常,从不会发生的状况。
2一、向服务器发送请求有几种方式?
get,post。
get通常为连接方式,post通常为按钮方式。
2二、<%# %>和<% %>的区别?
<%# %>表示绑定的数据源
<% %>是服务器端代码块
2三、进程和线程分别该怎么理解?
进程是比线程大的程序运行单元,都是由操做系统所体会的系统运行单元,一个程序中至少要有一个进程,有一个进程中,至少要有一个线程,
线程的划分尺度要比进程要小,进程拥有独立的内存单元,线程是共享内存,从而极大的提升了程序的运行效率同一个进程中的多个线程能够并发执行。
2四、如何处理几十万条并发数据?
用存储过程或事务。取得最大标识的时候同时更新..注意主键不是自增量方式这种方法并发的时候是不会有重复主键的..取得最大标识要有一个存储过程来获取.
2五、数组有没有length()这个方法? String有没有length()这个方法?