.NET、C#基础知识

前言:

  学习是一个按部就班的过程,做为一名.Net软件工程师咱们须要学习和掌握的东西很是的多,本章主要是记录下前段时间面试中常常遇到的一些基础常识,这里只是大体的归纳还有不少须要学习的东西须要不断的学习和积累。html

访问修饰符:
public:公有访问,不受任何限制。
private:私有访问,只限于本类成员访问。
protected:受保护的,只限于本类和子类访问。
internal:内部访问,只限于本项目内访问,其余的不能访问
protected internal:内部保护访问,只限于本项目或是子类访问,其余的不能访问c++

 

 枚举:程序员

  是由一组特定常量构成的一组数据结构,是值类型的一种特殊形式,当须要一个由指定常量集合组成的数据类型时,使用枚举类型。枚举声明能够显式地声明 byte、sbyte、short、ushort、int、uint、long 或 ulong 类型做为对应的基础类型。没有显式地声明基础类型的枚举声明意味着所对应的基础类型是 int,在代码中使用枚举,能够将之前笨拙的代码变得优雅简单,更加直观,方便记忆。   web

 枚举在什么地方适用呢?面试

  一条广泛规则是,任何使用常量的地方,例如目前用 switch 代码切换常量的地方。若是只有单独一个值(例如,鞋的最大尺寸,或者笼子中能装猴子的最大数目),则仍是把这个任务留给常量吧。可是,若是定义了一组值,而这些值中的任何一个均可以用于特定的数据类型,那么将枚举用在这个地方最适合不过。ajax

WebAPI 和 WebService的区别:sql

  (https://blog.csdn.net/cysong168/article/details/51433986)webapi使用的是http协议,而webservices采用的是soap协议webapi是无状态的,相对于webserives更轻量级。webapi支持get,和post等http请求数据库

http soap关系:编程

  http是一个客户端和服务器端请求和应答的标准(TCP)。http协议其目的是为了提供一种发布和接收htttp页面的方法一http协议的客户端与服务器的交互:由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP链接。HTTP服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个状态行,好比”HTTP/1.1 200 OK”,和(响应的)消息,消息的消息体多是请求的文件、错误消息、或者其它一些信息。soap 协议:它描述了一种在分散或分布式的环境中如何交换信息的轻量级协议。soap在http协议的基础上,一个基于XML的协议。json

不一样:都是底层的通讯协议,请求包的格式不一样而已,soap包是XML格式,http纯文本格式。


WCF和WEB API我该选择哪一个? 

一、当你想建立一个支持消息、消息队列、双工通讯的服务时,你应该选择WCF 

二、当你想建立一个服务,能够用更快速的传输通道时,像TCP、Named Pipes或者甚至是UDP(在WCF4.5中),在其余传输通道不可用的时候也能够支持HTTP  

三、当你想建立一个基于HTTP的面向资源的服务而且可使用HTTP的所有特征时(好比URIs、request/response头,缓存,版本控制,多种内容格式),你应该选择Web API   

四、当你想让你的服务用于浏览器、手机、iPhone和平板电脑时,你应该选择Web API

hashmap和hashTable的区别:

1.hashTable是Dictionary的子类,HashMap是Map接口的一个实现的类

2.Hashtable中的方法是同步的,而HashMap中的方法缺省状况为非同步

3.HashTabe不容许null值,而hashmap容许有null4.hashtable默认长度是11,增加方式是0ld*2+1,而hashmap则默认是16,并且必定是2的指数

如何理解委托和事件?

委托至关于c或者c++中的指针,委托可以把方法当作参数传递,而且提升程序的可扩展性。

 

事件:以一种特殊的委托


委托具备以下特色:

1.委托至关于c++中的指针,可是他是安全类型

2.委托能够把方法当作参数传递

3.委托能够定义回调方法

4.委托能够连接在一块儿,例如:能够对多个事件调用多个方法

5.方法不须要与委托前面精确匹配

UDP链接和tcp链接的异同:

  二者均可以实现远程通信,而主要区别在于tcp须要保持链接,而Udp不须要,由此能够看出udp更高的效率和占用资源更少,可是tcp传输数据更可靠

.Net身份验证的方式有哪几种:

  默认值为 Windows。 在Web.config 文件中,经过 <authentication> 节能够配置 ASP.NET 使用的安全身份验证模式,以标识传入的用户。 <authentication mode="[Windows|Forms|Passport|None]"><forms>...</forms><passport/></authentication><authentication> 节的mode 为必选的属性。指定应用程序的默认身份验证模式。

此属性能够为下列值之一: Windows :将 Windows 验证指定为默认的身份验证模式。将它与如下任意形式的 Microsoft Internet 信息服务 (IIS) 身份验证结合起来使用:基本、摘要、集成 Windows 身份验证 (NTLM/Kerberos) 或证书。在这种状况下,您的应用程序将身份验证责任委托给基础 IIS。 Forms :将 ASP.NET 基于窗体的身份验证指定为默认身份验证模式。Passport :将 Microsoft Passport Network 身份验证指定为默认身份验证模式。 None :不指定任何身份验证。您的应用程序仅期待匿名用户,不然它将提供本身的身份验证。

在c#中object类:

一、类Object是 .NET Framework 中全部类、结构、枚举和委托的最终基类。

二、C#一般不要求类显示声明从 Object 的继承,由于继承是隐式的。

三、由于 .NET Framework 中的全部类均从 Object 派生,因此 Object 类中定义的每一个方法可用于系统中的全部对象。 派生类也能够重写这些方法中的某些。


高内聚,低耦合的理解:

内聚:是从功能角度来度量模块内的联系,一个好的内聚模块应当刚好作一件事。它描述的是模块内的功能联系;

耦合:是软件结构中各模块之间相互链接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及经过接口的数据。


C#面向对象思想主要包括:封装,继承,多态:
封装:用抽象的数据类型将数据类型和基本的方法操做封装在一块儿,在数据保护在抽象类型内部 (封装就是把数据或者函数集合在一个个的类中,封装的对象被称为抽象对象,封装的意义是防止或保护代码被咱们无心的破坏,提升代码的重用性,职责分配)

继承:子类拥有父类的全部数据和操做
多态:一个程序中同名的不一样方法的共存状况(方法重载和重写)

 

C#面向切面编程(AOP):

  这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程http://www.javashuo.com/article/p-fugdlmtx-cx.html

通常而言,咱们管切入到指定类指定方法的代码片断称为切面,而切入到哪些类、哪些方法则叫切入点。有了AOP,咱们就能够把几个类共有的代码,抽取到一个切片中,等到须要时再切入对象中去,从而改变其原有的行为。
这样看来,AOP其实只是OOP的补充而已。OOP从横向上区分出一个个的类来,而AOP则从纵向上向对象中加入特定的代码。有了AOP,OOP变得立体了。若是加上时间维度,AOP使OOP由原来的二维变为三维了,由平面变成立体了。从技术上来讲,AOP基本上是经过代理机制实现的。
AOP在编程历史上能够说是里程碑式的,对OOP编程是一种十分有益的补充。


重载和重写的区别:

重载:方法名相同参数个数和参数类型不一样
重写:当子类继承父类,子类中的方法与父类中的方法名,参数类型和参数个数彻底相同则称为子类重写了父类方法(须要一override字标示)(对基类成员的  重写)

概述反射和序列化: 

   反射:程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可使用反射动态地建立类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。而后,能够调用类型的方法或访问其字段和属性    (就如:实例化对应的类,而后经过实例字段获取对应的方法)序列化:序列化是将对象转换为容易传输的格式的过程。例如,能够序列化一个对象,而后使用 HTTP 经过 Internet 在客户端和服务器之间传输该对象。在另外一端,反序列化将从该流从新构造对象。

C#中的构造函数: 

  每次建立类或结构,将会调用其构造函数。类或结构中能够建立多个不个不一样参数的构造函数,程序员能够对不一样构造函数设置默认值,约束条件,并编写灵活易读的代码。

构造函数的特色:      

a:构造函数与类名相同 

b:构造函数没有返回值 

c:能够带参数,也能够不带参数   

d:每一个类中必需要有都应一个构造函数,通常假如不须要常常用到的话能够不须要声明构造函数,由于程序在编译的时候会本身调用无参的构造函数。

 

类成员有多少种访问方式:

a:实例成员,能够经过类的实例访问

b:静态成员能够直接经过类访问

简单描述 string str=null;string str="",请尽可能用文字说明区别(要点:说明详细的内存空间分配)前者声明变量不会分配内存空间;后者建立了一个空的字符类型,而且分配了对应的内存空间
String str=new String("加油");建立了几个string object?
建立了两个,一个对象是加油 一个是指向"加油"的str
String 类是否能够被继承:不能,由于String类是selead类

简单描述.NET里class和struct(结构)异同: 

类和结构有不少类似之处:结构能够实现接口,而且具备于类相同的成员类型不一样:结构是值类型而非引用类型,结构不能继承,结构存储在堆栈或者内联上。

值类型:

整数,浮点数,高精度浮点数,布尔,字符,结构,枚举

 

引用类型:

对象(Object),字符串,类,接口,委托,数组


sealed(又称密封类)修饰的类有哪些特色:     

  sealed修饰的类防止此类被派生出其余的类,若是密封类被指定为其它的基类则编译出错(密封类同时不能为抽象类)

C#.NET里面抽象类和接口有什么区别?

  声明方法的存在而不去实现它的类被叫作抽象类(abstract class),它用于要建立一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的状况。不能建立abstract 类的实例。然而能够建立一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的全部抽象方法提供实现,不然它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类能够在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,全部方法都是抽象的。多继承性可经过实现这样的接口而得到。接口中的全部方法都是抽象的,没有一个有程序体。接口只能够定义static final成员变量。接口的实现与子类类似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)全部这种接口的方法。而后,它能够在实现了该接口的类的任何对象上调用接口的方法。因为有抽象类,它容许使用接口名做为引用变量的类型。一般的动态联编将生效。引用能够转换到接口类型或从接口类型转换,instanceof 运算符能够用来决定某对象的类是否实现了接口。

接 口:
(1) 接口不能被实例化   

(2) 接口只能包含方法声明   

(3) 接口的成员包括方法、属性、索引器、事件   

(4) 接口中不能包含常量、字段(域)、构造函数、析构函数、静态成员。
(5) 接口中的全部成员默认为public,所以接口中不能有private修饰符   

(6) 派生类必须实现接口的全部成员   

(7) 一个类能够直接实现多个接口,接口之间用逗号隔开   

(8) 一个接口能够有多个父接口,实现该接口的类必须实现全部父接口中的全部成员

 

抽象类和接口 :  

相同点和不一样点(http://www.cnblogs.com/ronli/archive/2011/10/26/2224654.html

相同点: 

1. 都不能被直接实例化,均可以经过继承实现其抽象方法。         

2. 都是面向抽象编程的技术基础,实现了诸多的设计模式。

不一样点:

1. 接口支持多继承;抽象类不能实现多继承。

2. 接口只能定义抽象规则;抽象类既能够定义规则,还可能提供已实现的成员。

3. 接口是一组行为规范;抽象类是一个不彻底的类,着重族的概念。

4. 接口能够用于支持回调;抽象类不能实现回调,由于继承不支持。

5. 接口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法;抽象类能够定义字段、属性、包含实现的方法


.net中dataset和datareader的区别:

  首先,datareader是在线对象,用来以只读只进方式读取数据。只读,就是只能经过它获取数据而不能修改数据,只进,就是读取记录的游标只会不断前进,好比说读取了第5条记录之后就不能返回去读取第2条记录而dataset是离线对象,它就好像是一个数据库,也能够说是数据库的一个副本,你能够对dataset进行离线编辑修改,以后提交回数据库,实现数据的离线操做


sql语句中int转varchar:

2011-02-12 10:39SELECT parent_id_list+','+cast(id AS varchar(10)) FROM mytable
或者cast也能够用convert来代替
同时看到有网友有这样的需求,它想把1转成varchar的”000001″这样的串,可是cast函数是只会转成”1″,因此要借用right函数select right(’00000000′ CAST(@i as varchar)

 

1).数据库多表链接查询能够分为哪几种?而且各有什么做用?

主要分为五种: a:主键条件关联查询(表中至少有一个匹配与inner join...on 类似)

              b:inner join ...on内链接查询(表中有至少一个匹配,则返回匹配的行)

              c:left join....on 左链接查询(右边表没有匹配,也从左边表返回全部的行) 

              d:right join...on 右链接查询(左边表没有匹配,也从右边表返回全部行)

              e:full join...on 全链接查询(就是返回两个表中的全部行)


数据库中的存储过程和sql语句有优缺点:      

数据库存储过程优势:

a:代码精简一致,代码重用性强,能够实现模块化程序设计 

b:运行速度快,提升程序的性能, 由于存储程序只在建立时进行编译,之后每次执行存储过程都不需再从新编译,而通常SQL语句每执行一次就编译一次,  因此使用存储过程可提升数据库执行速度       

c:可维护性高,只需建立存储过程一次并将其存储在数据库中,之后便可在程序中调用该过程任意次。存储过程可独立于程序源代码而单独修改,而不须要      更 改 ,测试以及从新部署程序集。

d: 有安全机制,可授予没有直接执行存储过程当中语句的权限的用户,也可执行该存储过程的权限。另外能够防止用户直接访问表,强制用户使用存储过程      执行特定的任务。

e: 减小网络流量,在网络中要发送的数百行代码,可由一条执行其存储过程代码的一条单独语句就可实现(多条sql语句这里简化成立一个存储过程)         

不足:

a:架构不清醒不利于面向对象: 存储过程不太适合面向对象的设计,没法采用面向对象的方式将业务逻辑进行封装,业务逻辑在存储层实现,增长了业务和存储的耦合,代码的可读性也会下降。

b:可移植性差:过多的使用存储过程会下降系统的移植性。在对存储进行相关扩展时,可能会增长一些额外的工做。 


T-sql语句:

可移植性强,语句灵活查询速度比存储过程要慢


数据库存储过程和T-sql语句的选择:

在一些新的项目开发过程当中通常不推荐优先使用数据库存储过程,通常数据库存储过程适用于通常业务逻辑复杂,涉及到了多表操做,而且查询大批量的数据的时候。例如后台大批量查询,以及按期更新等。 

(1)当一个事务涉及到多个SQL语句时或者涉及到对多个表的操做时能够考虑应用存储过程 

(2)在一个事务的完成须要很复杂的商业逻辑时能够考虑应用存储过程 

(3)比较复杂的统计和汇总能够考虑应用后台存储过程


数据库经常使用类型及其含义:注:

Unicode 是「字符集」,UTF-8 是「编码规则」)       

Char,NChar 定长,速度快,占空间大,需处理   

Varchar,Nvarchar,text 不定长,空间小,速度慢,无需处理

Nchar、NVarchar、NTEXT处理Unicode码 

char、varchar最多能存储8000个英文,4000个汉字。能够看出使用nchar、nvarchar数据类型时不用担忧输入的字符是英文仍是汉字,较为方便但在存储英文时数量上有些损失。

 

如何使用这些类型: 若是你确定存储的数据长度,并且不包中文的,能够选择char类型。

                   若是确定存储的数据长度,但可能包括中文,能够选择nchar类型。

                   若是不肯定存储的数据长度,存储只有英文、数字的最好用varchar 

                   若是不肯定存储的数据长度,也有可能有中文,能够选择nvarchar类型

XML和json数据传输格式的优缺点: 

什么是 XML?XML 指可扩展标记语言(EXtensible Markup Language)XML 是一种标记语言,很相似 HTMLXML 的设计宗旨是传输数据,而非显示数据XML 标签没有被预约义。您须要自行定义标签。XML 被设计为具备自我描述性。XML 是 W3C 的推荐标准

 

什么是json?JSON 是纯文本JSON 具备“自我描述性”(人类可读)JSON 具备层级结构(值中存在值)JSON 可经过 JavaScript 进行解析JSON 数据可以使用 AJAX 进行传输  

 

区别:xml(可扩展性标记语言)和json二者都是一种跨平台,跨语言的数据传输格式,xml能够自定义标签而json是有规定的文本格式,json                  的适用范围有限而xml没有,可是xml看起来比较复杂,json简单。

 

XSLT?

是一种可扩展的样式表文件,使用xsl能够格式化xml格式,而且可以将xml转化为另外一种格式的输出

用.net作B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为何要这样分层? 
答:从下至上分别为:数据访问层、业务逻辑层(又或成为领域层)、表示层 

数据访问层:有时候也称为是持久层,其功能主要是负责数据库的访问

业务逻辑层:是整个系统的核心,它与这个系统的业务(领域)有关 是表现层与数据访问的的桥梁(起到了逻辑判断)

表示层:是系统的UI部分,负责使用者与整个系统的交互。

优势:  分工明确,条理清晰,易于调试,并且具备可扩展性

缺点:  增长成本。


分层式结构究竟其优点何在? 

一、开发人员能够只关注整个结构中的其中某一层;

二、能够很容易的用新的实现来替换原有层次的实现; 

三、能够下降层与层之间的依赖;

四、有利于标准化; 

五、利于各层逻辑的复用。

 归纳来讲,分层式设计能够达至以下目的:分散关注、松散耦合、逻辑复用、标准定义、易于拓展


分层式结构也不可避免具备一些缺陷:  

一、下降了系统的性能。这是不言而喻的。若是不采用分层式结构,不少业务能够直接造访数据库,以此获取相应的数据,现在却必须经过中间层来完成。

二、有时会致使级联的修改。这种修改尤为体如今自上而下的方向。若是在表示层中须要增长一个功能,为保证其设计符合分层式结构,可能须要在相应的业务逻辑层和数据访问层中都增长相应的代码。

 

MVC 编程模式MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计建立 Web 应用程序的模式:

Model(模型)表示应用程序核心(好比数据库记录列表)

View(视图)显示数据(数据库记录)

Controller(控制器)处理输入(写入数据库记录)

MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的彻底控制。

Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。一般模型对象负责在数据库中存取数据

View(视图)是应用程序中处理数据显示的部分。一般视图是依据模型数据建立的。

Controller(控制器)是应用程序中处理用户交互的部分。一般控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

MVC 分层有助于管理复杂的应用程序,由于您能够在一个时间内专门关注一个方面。例如,您能够在不依赖业务逻辑的状况下专一于视图设计。同时也让应用程序的测试更加容易。MVC 分层同时也简化了分组开发。不一样的开发人员可同时开发视图、控制器逻辑和业务逻辑。

 

mvc的优势:

1.经过把项目分红model view和controller,使得复杂项目更加容易维护。

2.没有使用view state和服务器表单控件,能够更方便的控制应用程序的行为

3.应用程序经过controller来控制程序请求,能够提供丰富的url重写。

4.对单元测试的支持更加出色

5.在团队开发模式下表现更出众


MVC的不足: 

(1)增长了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增长结构的复杂性,并可能产生过多的更新操做,下降运行效率。 

(2)视图与控制器间的过于紧密的链接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是颇有限的,反之亦然,这样就妨碍了他们的独立重用。    

(3)视图对模型数据的低效率访问。依据模型操做接口的不一样,视图可能须要屡次调用才能得到足够的显示数据。对未变化数据的没必要要的频繁访问,也将损害操做性能。

 

asp.net如何实现MVC模式,举例说明!web/business/dataaccess

 

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

1.response. Redirect()   QueryString()...............

2.使用Session变量 

3.使用Server.Transfer(只能在同一站点中进行url重定向,并且url和url中的参数不会在浏览器中显示)

4.application和Cookie
请说明在.net中经常使用的几种页面间传递参数的方法,并说出他们的优缺点
QueryString  传递一个或多个安全性要求不高或是结构简单的数值。

可是对于传递数组或对象的话,就不能用这个方法了 session(viewstate) 简单,但易丢失 做用于用户我的,过量的存储会致使服务器内存资源的耗尽。

application 对象的做用范围是整个全局,也就是说对全部用户都有效。其经常使用的方法用Lock和UnLock 

cookie 简单,但可能不支持,可能被伪造 Cookie是存放在客户端的,而session是存放在服务器端的。并且Cookie的使用要配合ASP.NET内置对象Request来使用 input ttype="hidden" 简单,可能被伪造 url参数简单,显示于地址栏,长度有限

 Server.Transfer  把流程从当前页面引导到另外一个页面中,新的页面使用前一个页面的应答流 数据库稳定,安全,但性能相对弱  

 

什么是Viewstate?它有什么做用?

ViewState用来保存页面状态,就是说提交以后咱们还能够看到文本框里面的内容就是ViewState保存的功劳。 ViewState只维护当前页面的状态,不一样页面之间不能共享,Session能够。 ViewState你能够理解为一个隐藏控件


ASP.Net页面生命周期 :(重要)https://www.cnblogs.com/xhwy/archive/2012/05/20/2510178.html
当咱们在浏览器地址栏中输入网址,回车查看页面时,这时会向服务器端(IIS)发送一个request请求,服务器就会判断发送过来的请求页面,  彻底识别 HTTP 页面处理程序类后,ASP.NET 运行时将调用处理程序的 ProcessRequest 方法来处理请求,来建立页面对象。一般状况下,无需更改此方法的实现,由于它是由 Page 类提供的。接下来被建立页面对象的ProcessRequest方法使页面经历了各个阶段:初始化、加载视图状态信息和回发数据、加载页面的用户代码以及执行回发服务器端事件。以后,页面进入显示模式:收集更新的视图状态,生成 HTML 代码并随后将代码发送并输出控制台。最后,卸载页面,并认为请求处理完毕。其中页面对象ProcessRequest方法 完成的这一系列事件的处理过程就是Asp.Net页面生命周期。

个人理解:
首先在对应的浏览器中输入对应的网址对服务器发送请求(request)服务器识别浏览器的http请求,经过调用processrequest方法来处理请求,建立页面对象而后经过建立processrequest方法使页面经历了:初始化,加载试图状态信息,和回发数据,加      载用户代码及执行返回服务器端的事件。以后页面进入显示模式:收集更新的试图状态,生成html代码将代码发送输出在浏览器中展现。最后卸载页面,并认为请求处理完毕


每一个页面的生命周期为用户的每一次访问,也就是说每一次客户端与服务器之间的一个往返过程.全局变量的生命周期在此之间.

1. Page_Init(); 

2. Load ViewState and Postback data; 

3. Page_Load(); 

4. Handle control events; 

5. Page_PreRender(); 

6. Page_Render(); 

7. Unload event; 

8. Dispose method called; 

 

ADO.net中经常使用的对象有哪些?

分别描述一下。

Connection  数据库链接对象 

Command    执行数据库命令

DataAdapter  链接数据,执行数据库命令,填充DataSet

DataSet  数据在内存中的缓存,数据结构 

DataReader    只读向前的读取数据库

 

DataReader和DataSet的异同 

1.与数据库链接:DataReader:面向链接,只读,只进,只能向前读,读完数据就断开链接;(没法对获取的数据进行操做)

DataSet:非面向链接,把数据加载到sql缓存池中,而后断开链接;

2.处理数据速度:DataReader:速度快;DataSet:速度慢;

3.更新数据库:DataReader:更新后,没有办法还原到原来的数据库;DataSet:更新后,能够还原回原来的数据库;

4.支持分页排序:DataReader:不支持分页与排序;DataSet:支持分页与排序,从内存中直接读取前多少条(假分页);

5.占用内存:DataReader:占用内存小;DataSet:占用内存大;


DataSet能够比做一个内存中的数据库,DataTable是一个内存中的数据表,DataSet里能够存储多个DataTable


说出你所了解的数据库访问组件(例如ADO,至少4种) 

答:ADO,ADO.Net,MDAC(Microsoft Data Access Components),Microsoft SQL Server OLE DB Provider,Microsoft Jet OLE DB Provider,Desktop Database Drivers ODBC Driver,Visual FoxPro ODBC Driver  


什么是装箱和拆箱? 

答:从值类型接口转换到引用类型装箱。从引用类型转换到值类型拆箱。装箱(boxing)是将 值类型的数据转化成引用类型,int i=3; object o = i ;即是装箱过程,而拆箱(unboxing)是将饮用类型数据转换值类型,好比int j = (int)o;属于拆箱


接口含义:接口是指一组函数成员而不实现他们的引用类型,一般只能经过接和类的继承,继承接口要实 其所有方法


何时使用抽象类,何时用接口 :
接口用于规范,抽象类用于共性。

接口中只能声明方法,属性,事件,索引器。而抽象类中能够有方法的实现,也能够定义非静态的类变量。

抽象类是类,因此只能被单继承,可是接口却能够一次实现多个。

抽象类能够提供某些方法的部分实现,接口不能够.抽象类的实例是它的子类给出的。接口的实例是实现接口的类给出的。再抽象类中加入一个方法,那么它的子类就同时有了这个方法。而在接口中加入新的方法,那么实现它的类就要从新编写(这就是为何说接口是一个类的规范了)。接口成员被定义为公共的,但抽象类的成员也能够是私有的、受保护的、内部的或受保护的内部成员(其中受保护的内部成员只能在应用程序的代码或派生类中访问)。此外接口不能包含字段、构造函数、析构函数、静态成员或常量。 


枚举的使用:http://www.javashuo.com/article/p-tjsrwhjx-s.html


委托和事件:http://www.tracefact.net/tech/009.html)委托 和 事件在 .Net Framework中的应用很是普遍,然而,较好地理解委托和事件对不少接触C#时间不长的人来讲并不容易。它们就像是一道槛儿,过了这个槛的人,以为真是太容易了,而没有过去的人每次见到委托和事件就以为内心别(biè)得慌,混身不自在。本文中,我将经过两个范例由浅入深地讲述什么是委托、为何要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也作了讨论。

 
const和readonly有什么区别?

 const关键字用来声明编译时常量,readonly用来声明运行时常量。


用sealed修饰的类有什么特色 sealed 修饰符用于防止从所修饰的类派生出其它类,若是一个密封类被指定为其余类的基类,则会发生编译时错误。 密封类不能同时为抽象类。 sealed 修饰符主要用于防止非有意的派生,可是它还能促使某些运行时优化。具体说来,因为密封类永远不会有任何派生类,因此对密封类的实例的虚拟函数成员的调用能够转换为非虚拟调用来处理。 


虚函数的用法 

1)virtual指明一成员函数为虚函数,而virtual仅用于类的定义里,在类外可不加此关键字. 

2)一个类的成员函数被定义为虚函数时,子类该函数仍保持虚函数特征. 

3)子类覆盖此函数时,定义里可不加virtual关键字,但函数声明要和基类的彻底一致!且此声明是必须的. 

4)不是纯虚函数时,父类的虚函数必需要实现; 而若将父类的虚函数设定为纯虚函数时,子类必须要覆盖之并且必需要实现之! 


解释virtual、sealed、override和abstract的区别 virtual申明虚方法的关键字,说明该方法能够被重写 sealed说明该类不可被继承 override重写基类的方法 abstract申明抽象类和抽象方法的关键字,抽象方法不提供实现,由子类实现,抽象类不可实例化。 

c#继承:

base表示对象基类的实例(使用base能够调用基类中的成员)base 表示当前对象基类的实例(使用base关键字能够调用基类的成员)this表示当前类的实例  

在静态方法中不可使用base和this关键字  

派生类会继承基类全部的成员可是构造函数和析构函数不会被继承  

 

什么是析构函数:

析构函数(destructor) 与构造函数相反,当对象脱离其做用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数每每用来作“清理善后” 的工做(例如在创建对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。


注意若是派生类的方法和基类的方法同名则基类中的方法将会被隐藏若是须要隐藏则可使用关键字new来隐藏若是不写new关键字默认处理为隐藏虽然基类中同名的方法被隐藏了可是仍是能够经过base关键字来调用   


进程和线程的区别?

进程是系统进行资源分配和调度的单位;

线程是CPU调度和分配的单位,一个进程能够有多个线程,这些线程共享这个进程的资源。


堆和栈的区别: 

栈:由编译器自动分配、释放。在函数体中定义的变量一般在栈上。

堆:通常由程序员分配释放。用new、malloc等分配内存函数分配获得的就是在堆上。 

概述:
栈(Stack)由系统管理生存期,存储代码执行和调用路径,执行或调用完毕即从栈中清除; 

堆(Heap)中保存值和对象,调用完毕以后依然存在,由垃圾回收器查找栈中有无指向该值或对象的引用,无则从堆中删除


C# ref与out区别:

一、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。

二、使用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字。以知足匹配。

三、out适合用在须要retrun多个返回值的地方,而ref则用在须要被调用的方法修改调用者的引用的时候。

 你对泛型了解吗?简单说明一下泛型的有什么好处?

泛型:经过参数化类型来实如今同一份代码上操做多种数据类型。利用“参数化类型”将类型抽象化,从而实现灵活的复用 好处是——类型安全和减小装箱、拆箱。提升性能、类型安全和质量,减小重复性的编程任务 


C#中全部对象共同的基类是什么? System.Object. 


如何在C#中实现继承? 在类名后加上一个冒号,再加上基类的名称。 

 
私有成员会被继承么? 会,可是不能被访问。因此看上去他们彷佛是不能被继承的,但实际上确实被继承了。 (是有成员可以被继承,可是不可以被访问)


new的三种用法 

答:实例化对象,隐藏基类方法。

运算符(建立对象,建立值类型的默认构造函数)

修饰做用(隐藏基类中的继承对象,子类中的对象覆盖基类中的版本)


string是值类型仍是引用类型?引用类型 


String类与StringBuilder类有什么区别?为何在.Net类库中要同时存在这2个类?

(简答)stringBuilder比string更节约内存,因此stringBuilder更快String 对象是不可改变的。

每次使用 System.String 类中的方法之一或进行运算时(如赋值、拼接等)时,都要在内存中建立一个新的字符串对象,这就须要为该新对象分配新的空间。而 StringBuilder 则不会。在须要对字符串执行重复修改的状况下,与建立新的 String 对象相关的系统开销可能会很是昂贵。

若是要修改字符串而不建立新的对象,则可使用 System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串链接在一块儿时,使用 StringBuilder 类能够提高性能。

 
Session有什么重大BUG,微软提出了什么方法加以解决?

 答:是iis中因为有进程回收机制,系统繁忙的话Session会丢失,能够用Sate server或SQL Server数据库的方式存储Session不过这种方式比较慢,并且没法捕获Session的END事件 


c#中的三元运算符是 ?: 


.能用foreach遍历访问的对象须要实现(Ienumber) 接口或声明 ( GetEnumerator)方法的类型。


.<%# %> 和 <% %> 有什么区别?

<%# %>表示绑定的数据源 <% %>是服务器端代码块 


C#能否对内存进行直接的操做?

在.net下,.net引用了垃圾回收(GC)功能,它替代了程序员 不过在C#中,不能直接实现Finalize方法,而是在析构函数中调用基类的Finalize()方法 


DateTime是否能够为null?

不能,由于其为Struct类型,而结构属于值类型,值类型不能为null,只有引用类型才能被赋值null 

DateTime.Parse(myString); 这行代码有什么问题?有问题,当myString不能知足时间格式要求的时候,会引起异常,建议使用DateTime.TryParse() 


net的错误处理机制是:采用try->catch->finally结构, 为何不提倡catch(Exception) try..catch在出现异常的时候影响性能; 应该捕获更具体得异常,好比IOExeception,OutOfMemoryException等 catch(Exception e){throw e;}和catch(Exception e){throw;}的区别将发生的异常对象抛出,另外一个只是抛出异常,并无抛出原异常对象) 

 

 我应该如何容许链接池?

对于.NET应用程序而言,默认为容许链接池。(这意味着你能够没必要为这件事情作任何的事情)固然,若是你能够在SQLConnection对象的链接字符串中加进Pooling=true;确保你的应用程序容许链接池的使用。(pooling=true)5. 我应该如何禁止链接池?ADO.NET默认为容许数据库链接池,若是你但愿禁止链接池,可使用以下的方式:1) 使用SQLConnection对象时,往链接字符串加入以下内容:Pooling=False;2) 使用OLEDBConnection对象时,往链接字符串加入以下内容:OLE DB Services=-4; 

 

提升.NET的性能 

1 使用异步方式调用Web服务和远程对象只要有可能就要避免在请求的处理过程当中对Web服务和远程对象的同步调用,由于它占用的是的ASP.NET 线程池中的工做线程,这将直接影响Web服务器响应其它请求的能力。

2 使用适当的Caching策略来提升性能

3 判断字符串,不要用""比较。//避免 if(strABC!=null && strABC!="") {}//推荐 if(!strABC.IsNullOrEmpty) {}

4 页面优化

5 用完立刻关闭数据库链接

6 尽可能使用存储过程,并优化查询语句 

7 只读数据访问用SqlDataReader,不要使用DataSet


请解释转发与跳转的区别 转发就是服务端的跳转A页面提交数据到B页面,B页面进行处理而后从服务端跳转到其它页面 跳转就是指客户端的跳转

 

什么叫应用程序域? 

答:应用程序域能够理解为一种轻量级进程。起到安全的做用。占用资源小。

 

CTS、CLS、CLR分别做何解释?

 答:CTS:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库。

 

请解释web.config文件中的重要节点

appSettings包含自定义应用程序设置

system.web 系统配置 

compilation动态调试编译设置

customErrors自定义错误信息设置 

authentication身份验证,此节设置应用程序的身份验证策略

 authorization受权, 此节设置应用程序的受权策略.


请解释ASP。NET中的web页面与其隐藏类之间的关系? 

ASP.NET页面通常都对应一个隐藏类,通常都在ASP.NET页面的声明中指定了隐藏类例如一个页面Tst1.aspx的页面声明以下 <%@ Page language="c#" Codebehind="Tst1.aspx.cs" AutoEventWireup="false" Inherits="T1.Tst1" %> Codebehind="Tst1.aspx.cs" 代表经编译此页面时使用哪个代码文件 Inherits="T1.Tst1" 表用运行时使用哪个隐藏类

 

当发现不能读取页面上的输入的数据时颇有多是什么缘由形成的?怎么解决? 

颇有多是在Page_Load中数据处理时没有进行Page的IsPostBack属性判断 

请解释什么是上下文对象,在什么状况下要使用上下文对象 上下文对象是指HttpContext类的Current 属性,当咱们在一个普通类中要访问内置对象(Response,Request,Session,Server,Appliction等)时就要以使用此对象 

 

解释一下ajax及实现原理 

答:Ajax的核心是JavaScript对象XmlHttpRequest,它使您可使用JavaScript向服务器提出请求并处理响应, 而不阻塞用户,异步请求。

 总结:

      这篇总结就先到这里,推荐你们学习《CLR via C#》和《.net软件之美》对C#了解到深刻有很大的帮助。

相关文章
相关标签/搜索