- 1. 概念区分
- 2. 谈谈你对EF的理解
- 3. 请说明在.net中常用的几种页面间传递参数的方法,并说出他们的优缺点。
- 4. MVC模式
- 5. 什么叫应用程序域?什么是托管代码?什么是强类型系统?什么是装箱和拆箱?什么是重载? CTS、CLS和CLR分别作何解释?
- 6. ADO.NET
- (1) net中读写数据库需要用到那些类?他们的作用?
- (2) ADO.net中常用的对象有哪些?分别描述一下。
- (3) ADO.NET中DataReader与Dataset有什么区别?
- (4) DataGrid的Datasouse可以连接什么数据源
- (5) 在ADO.NET中,对于Command对象的ExecuteNonQuery()方法和ExecuteReader()方法,下面叙述错误的是(c)。
- (6) 简单介绍下ADO.NET和ADO主要有什么改进?
- (7) 列举ADO.NET中的共享类和数据库特定类
- (8) ADO.NET处理数据并发的方法和步骤?
- (9) ADO.NET中访问数据库的基本步骤是什么?
- (10) ADO.NET中如何避免SQL注入漏洞的?
- 7. 在.net中,配件的意思是?
- 8. 什么是Code-Behind技术?
- 9. remoting和webservice和UDDI
- 10. dotnet中类(class)与结构(struct)的异同?
- 11. 软件开发过程一般有几个阶段?每个阶段的作用?
- 12. 用户控件
- 13. Server.Transfer与Response.Redirect有什么区别?
- 14.在.net中接口、类、抽象类有什么异同?
- 15. net的错误处理机制是什么?
- 16. 在.net(C# or vb.net)中如何取消一个窗体的关闭。
- 17. 在.net(C# or vb.net)中,Appplication.Exit 和 Form.Close有什么不同?
- 18. 什么是SOAP,有哪些应用。
- 19. 请解释ASP.NET中的web页面与其隐藏类之间的关系?
- 20. ASP.net的身份验证方式有哪些?
- 21. 活动目录的作用
- 22. ASP.net
- 23. 如何部署一个ASP.net页面?
- 24. 垃圾回收机制
- 25. ASP.NET中常见内置对象?
- 26. UDP和TCP连接有和异同?
- 27. 什么是ApplicationPool?
- 28. 大概描述一下ASP.NET服务器控件的生命周期
- 29. 请简述面向对象的多态的特性及意义!
- 30. 你觉得ASP.NET 2.0(VS2005)和你以前使用的开发工具(.Net 1.0或其他)有什么最大的区别?你在以前的平台上使用的哪些开发思想(pattern/ architecture)可以移植到ASP.NET2.0上 (或者已经内嵌在ASP.NET 2.0中)
- 31. 什么是WSE?目前最新的版本是多少?
1. 概念区分
(1) NET和C#有什么区别
.NET一般指 .NET FrameWork框架,它是一种平台,一种技术。
C#是一种编程语言,可以基于.NET平台的应用。
(2) ASP.NET与ASP相比,主要有哪些进步?
asp解释形,aspx编译型,性能提高,有利于保护源码。
简洁版:ASP.NET实现了面向对象编程,预编译的服务器端代码而不像ASP那样解释执行提高了性能,代码分离易于管理,可订制和扩展性,功能强大的开发工作,更好的安全机制。
丰富版:
- 执行效率的大幅提高
ASP以源码形式存放,以解释方式运行,每次ASP网页调用都需要对源码进行解释,运行效率不高. ASP.net是把基于通用语言的程序在服务器上运行。不像以前的ASP即时解释程序,而是将程序在服务器端首次运行时进行编译,这样的执行效果,当然比一条一条的解释强很多. - 强大的开发工具支持
ASP.net可以使用VS Studio 系列的强大的开发工具,只是所见即所得的开发支持。 - 可扩充的适应性
Asp.net可以完美支持windows平台,也可以通过mono来支持linux的平台。而且,asp.Net是语言独立的,也就是说不但可以用C#编写相关的代码,你也可以使用vb,jscript等语言来编写。 - 多处理器环境的可靠性
ASP.net已经被刻意设计成为一种可以用于多处理器的开发工具,它在多处理器的环境下用特殊的无缝连接技术,将很大的提高运行速度。即使你现在的ASP.net应用软件是为一个处理器开发的,将来多处理器运行时不需要任何改变都能提高他们的效能,但现在的ASP确做不到这一点。 - 安全型
AspNet内置了强大的安全型管理机制,相对asp,安全型得到了很大的提高。
(3) .Net、ASP.Net、C#、VisualStudio之间的关系是什么?
- .Net一般指的是.Net Framework,提供了基础的.Net类,这些类可以被任何一种.Net编程语言调用,.Net Framework还提供了CLR、JIT、GC等基础功能。
- ASP.Net是.Net中用来进行Web开发的一种技术,ASP.Net的页面部分写在aspx 文件中,逻辑代码通常通过Code-behind的方式用C#、VB.Net等支持.Net的语言编写。
- C#是使用最广泛的支持.Net的编程语言。除了C#还有VB.Net、IronPython等。
- VisualStudio是微软提供的用来进行.Net开发的集成开发环境(IDE),使用VisualStudio可以简化很多工作,不用程序员直接调用csc.exe等命令行进行程序的编译,而且VisualStudio提供了代码自动完成、代码高亮等功能方便开发。除了VisualStudio,还有SharpDevelop、MonoDevelop等免费、开源的IDE,VisualStudio Express版这个免费版本。
2. 谈谈你对EF的理解
这个可以谈很多,比如说EF实现机制,最核心的是对象关系映射机制和LINQ To EF Provider,在此基础上的缓存机制、延迟加载、对象状态跟踪、事务等等,从对开发者的影响上来说,EF是微软官方的ORM框架,结束了之前各种第三方ORM混战的局面,统一了API,这无疑是开发者的福音。EF拥有非常优雅的,基于C#/VB语言优化的API,比如原生的LINQ查询,自然的Code First的对数据结构的定义,Fluent API方式的数据库和关系的定义等等。VS完美支持EF并且提供了多种数据库的适配。总结:
(1) EF (Entity FramWork)
是微软以ADO.NET为基础发展的所谓ORM(Object Relation Mapping,对象关系映射框架,或者数据持久化框架)。在EF框架中把数据库中的关系表对应到了程序中的实体类,把数据表中的字段对应成了实体类中的属性,这就是对象关系映射。 那为什么要用ORM框架呢? EF为我们现有的数据库创建数据访问类,以便我们可以直接使用这些类与数据库交互,而不是直接与ADO.Net交互。 EF三种模式:
- DataBase First:传统的表驱动方式创建EDM,然后通过EDM生成模型和数据层代码。除生成实体模型和自跟踪实现模型,还支持生成轻型DbContext。简单理解就是先设计数据库,创建好数据库映射成对象和上下文。
- Model First:先创建EDM模型,再生成DDL数据库脚本和模型和数据层代码。除生成实体模型和自跟踪实现模型,支持生成轻型DbContext。简单理解就是设计EDM模型然后生成到数据库和创建对象和上下文。
- Code First:手动创建POCO模型,数据层DbContext及映射关系,通过Database.SetInitializer生成数据库,这种方式较灵活,但是代码工作较多。简单理解就是自己写好实体对象和映射关系,最后通过命令生成到数据库中去。
EDM模型(Entity Data Model):
EF中存在一个主要的文件:*.edm 。这就是EF的核心。EF以EDM( Entity Data Model ) 为主,将数据逻辑层切分为三块,分别为 Conceptual Schema, Mapping Schema 与 Storage Schema 三层,其上还有 Entity Client,Object Context 以及 LINQ 可以使用,今天咱们讨论的是EDM,先看图:
这三层的功能分别是:
(1) 概念层:负责向上的对象与属性显露与访问。 (2) 对应层:将上方的概念层和底下的储存层的数据结构对应在一起。 (3) 储存层:依不同数据库与数据结构,而显露出实体的数据结构体,和 Provider 一起,负责实际对数据库的访问和 SQL 的产生。这样协同工作让数据访问的工作得以顺利与完整的进行。
(2) EF 框架详解:
架构组件:
EDM(实体数据模型): EDM由三个主要部分组成 :概念模型,映射和存储模型。
Conceptual Model:概念模型包含模型类及其关系。这将独立于您的数据库表设计。
Storage Model:存储模型是包括表,视图,存储过程及其关系和密钥的数据库设计模型。
Mapping:映射由有关概念模型如何映射到存储模型的信息组成。
LINQ to Entities: LINQ to Entities是一种用于针对对象模型编写查询的查询语言。它返回在概念模型中定义的实体。你可以在这里使用你的LINQ技能。
Entity SQL:实体SQL是另一种查询语言(仅适用于EF 6),就像LINQ to Entities一样。然而,这比L2E稍微难一些,开发者需要单独学习。
ObjectServices:对象服务是访问数据库中的数据并将其返回的主要入口点。对象服务负责实现,这是将从实体客户端数据提供者(下一层)返回的数据转换为实体对象结构的过程。
Entity Client Data Provider:此层的主要职责是将LINQ-to-Entities或实体SQL查询转换为底层数据库可以理解的SQL查询。它与ADO.Net数据提供者通信,而ADO.Net数据提供者又从数据库发送或检索数据。
ADO.Net Data Provider:该层使用标准的ADO.Net与数据库进行通信。
(3) EF 框架如何运作:
EF5由两部分组成,EF api和.net framework 4.0/4.5,而EF6是独立的EntityFramework.dll,不依赖.net Framework。使用NuGet即可安装EF。
(4) EF框架的功能:
- 将实体类映射到数据库模式
- 将linq 查询翻译并执行到sql
- 跟踪实体在其生命周期内发生的变化,并将更改保存到数据库。
(5) 实体数据模型:
EF 的第一个功能就是建立一个实体数据模型(EDM).EDM 在上面也提到过,主要包括概念模型,存储模型以及概念和存储之间的映射。EF使用此EDM执行CRUD操作。它使用EDM从LINQ查询构建SQL查询,构建INSERT,UPDATE和DELETE命令,将数据库结果转换为实体对象。
查询
EF 使用EDM将LINQ-to-Entities查询转换为关系数据库的SQL查询,并将结果转换回实体对象。
保存
当调用SaveChanges()方法时,EF根据实体的状态推断INSERT,UPDATE和DELETE命令。ChangeTrack跟踪每个实体的状态,以及何时执行任何操作。
1)EF框架根据我们的数据库中数据模型生成实体数据模型;
2)实体数据模型为一个edmx文件,且该文件为一个标准的XML文件,主要描述实体对象和数据库映射关系;
3).tt文件为我们生成了数据库上下文类(用于操作数据库)和实体类(表示实体对象和外键属性关系);
4)实体对象可以使用Lamabda表达式或者Linq来查询需要的数据,并且使用一个List对象来存储数据;
5)易于理解代码,在实际的操作中不需要像ADO.net一样创造大量的数据库访问层;
3. 请说明在.net中常用的几种页面间传递参数的方法,并说出他们的优缺点。
1. QueryString
QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中。如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法。但是对于传递数组或对象的话,就不能用这个方法了。
//a.aspx的C#代码
private void Button1_Click(object sender, System.EventArgs e)
{
string s_url;
s_url = "b.aspx?name=" + Label1.Text;
Response.Redirect(s_url);
}
//b.aspx中C#代码
private void Page_Load(object sender, EventArgs e)
{
Label2.Text = Request.QueryString["name"];
}
优点:1.使用简单,对于安全性要求不高时传递数字或是文本值非常有效。
缺点:1.缺乏安全性,由于它的值暴露在浏览器的URL地址中的。
2.不能传递对象。
可能出现的问题:
方法一:需要重新设置Web.config中的encoding和全球化设置。
1、首行:<?xml version=”1.0” encoding=”utf-8” ?>更改为:<?xml version=”1.0” encoding=”GB2312” ?> 2、
2. session(viewstate)
简单,但易丢失 作用于用户个人,过量的存储会导致服务器内存资源的耗尽。 想必这个肯定是大家使用中最常见的用法了,其操作与Application类似,作用于用户个人,所以,过量的存储会导致服务器内存资源的耗尽。
//a.aspx的C#代码
private void Button1_Click(object sender, System.EventArgs e)
{
Session["name"] = Label.Text;
}
//b.aspx中C#代码
private void Page_Load(object sender, EventArgs e)
{
string name;
name = Session["name"].ToString();
}
优点:1.使用简单,不仅能传递简单数据类型,还能传递对象。2.数据量大小是不限制的。
**缺点:1.在Session变量存储大量的数据会消耗较多的服务器资源。**
扩展:ViewState用法
在一般处理程序中怎样使用session? 一般处理程序实现 ireadonlysessionstate 即可
3. application
Application对象的作用范围是整个全局,也就是说对所有用户都有效。其常用的方法用Lock和UnLock。 Application变量在整个应用程序生命周期中都是有效的,类似于使用全局变量一样,所以可以在不同页面中对它进行存取。它和Session变量的区别在于,前者是所有的用户共用的全局变量,后者是各个用户独有的全局变量。举个例子来解释:网站访问的计数器变量一般采用Application变量,多个请求访问时共享这一个变量,均可对它进行操作,该变量可以被整个应用程序的各个页面直接使用。用户登陆的帐号名一般采用Session变量,多个请求访问时有各自的Session变量,只能对自己的该Session变量进行操作,整个应用程序的各个页面直接使用这个变量来获得用户的基本信息。
//a.aspx的C#代码
private void Button1_Click(object sender, System.EventArgs e)
{
Application["name"] = Label1.Text;
Server.Transfer("b.aspx");
}
//b.aspx中C#代码
private void Page_Load(object sender, EventArgs e)
{
string name;
Application.Lock();
name = Application["name"].ToString();
Application.UnLock();
}
优点:1.使用简单,消耗较少的服务器资源。
2.不仅能传递简单数据,还能传递对象。
3.数据量大小是不限制的。
**缺点:1.作为全局变量容易被误操作。**
4. cookie
简单,但可能不支持,可能被伪造 Cookie是存放在客户端的,而session是存放在服务器端的。而且Cookie的使用要配合http://ASP.NET内置对象Request来使用 这个也是大家常使用的方法,与Session一样,针对每一个用户而言的,但是有个本质的区别,即Cookie是存放在客户端的,而session是存放在服务器端的。而且Cookie的使用要配合ASP.NET内置对象Request来使用。cookie用于在用户浏览器上存储小块的信息,保存用户的相关信息,比如用户访问某网站时用户的ID,用户的偏好等,用户下次访问就可以通过检索获得以前的信息。所以Cookie也可以在页面间传递值。Cookie通过HTTP头在浏览器和服务器之间来回传递的。Cookie只能包含字符串的值,如果想在Cookie存储整数值,那么需要先转换为字符串的形式。可以通过遍历Request对象的Cookie集合可以获得所有的浏览器所有的Cookie。
优点:1.直接在服务器端重定向,使用简单方便,减少了客户端对服务器端提出请求。2.可以传递各种数据类型的值和控件的值。
//a.aspx的C#代码
private void Button1_Click(object sender, System.EventArgs e)
{
HttpCookie cookie_name = new HttpCookie("name");
cookie_name.Value = Label1.Text;
Reponse.AppendCookie(cookie_name);
Server.Transfer("b.aspx");
}
//b.aspx中C#代码
private void Page_Load(object sender, EventArgs e)
{
string name;
name = Request.Cookie["name"].Value.ToString();
}
**缺点:1.客户端浏览器中的URL地址是不改变,会导致在新的页面可能出现一些意想不到的问题。比如如果源页面和目的页面不在同一个虚拟目录或其子目录下,那么使用相对路径的图片、超链接都会导致错误的指向。** #### 5. Server.Transfer 这个才可以说是面象对象开发所使用的方法,其使用Server.Transfer方法把流程从当前页面引导到另一个页面中,新的页面使用前一个页面的应答流,所以这个方法是完全面象对象的,简洁有效。 这个方法相比上面介绍的方法稍微复杂一点,但在页面间值传递中却是特别有用的,使用该方法你可以在另一个页面以对象属性的方式来存取显露的值,当然了,使用这种方法,你需要额外写一些代码以创建一些属性以便可以在另一个页面访问它,但是,这个方式带来的好处也是显而易见的。总体来说,使用这种方法是简洁的同时又是面向对象的。 使用这种方法的整个过程如下: 1.在页面里添加必要的控件 2.创建返回值的Get属性过程 3.创建可以返回表单的按钮和链接按钮 4.在按钮单击事件处理程序中调用Server.Transfer方法转移到指定的页面 5.在第二个页面中,我们就可以使用Context.Handler属性来获得前一个页面实例对象的引用,通过它,就可以使用存取前一个页面的控件的值了
//a.aspx的C#代码
public string Name
{
get{ return Label1.Text;}
}
private void Button1_Click(object sender, System.EventArgs e)
{
Server.Transfer("b.aspx");
}
//b.aspx中C#代码
private void Page_Load(object sender, EventArgs e)
{
WebForm1 newWeb; //create instance of source web form
newWeb = (WebForm1)Context.Handler;
string name;
name = newWeb.Name;
}
4. MVC模式
(1) MVC简介
MVC(Model-View-Controller)把交互系统的组成分解成模型、视图、控制器三种部件(2) 三层架构
通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。
- 表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候的所见所得。
- 业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。
- 数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等每层之间是一种垂直的关系。
三层结构是N层结构的一种,一般来说,层次之间是向下依赖的,下层代码未确定其接口(契约)前,上层代码是无法开发的,下层代码接口(契约)的变化将使上层的代码一起变化。
DAL–>BLL–>UI
优点:
1、可以降低层与层之间的依赖;
2、有利于标准化;
3、利于各层逻辑的复用。
缺点:
1、 降低了系统的性能。
2、 有时会导致级联的修改。
3、 增加了代码量,增加了工作量
如果去饭店吃饭,不可能找厨师点菜吧?
小工负责食材存取,洗菜切肉;厨师负责烹饪;跑堂负责接待食客并与后厨沟通。这就是精典的分层体现。
如果一个厨师既负责跑堂,又负责烹饪。那这个饭店的管理一定非常混乱吧。
- 小工就是DAO,从食材库里(数据源)取出食材(原始数据),进行简单处理(数据对象化)。
- 厨师就是Service,找到小工(DAO),获取各种半成品(对象化数据),加工成顾客需要的菜肴(最终数据)。
- 跑堂就是Controller,负责接单(提交数据)上菜(响应数据),是顾客与后厨间的媒介(提供用户与后台程序的接口)。
各司其职(高内聚),轻松协作(低耦合),就是分层思想的目标。
(3) mvc的优点:
- 通过把项目分成model view和controller,使得复杂项目更加容易维护。
- 没有使用view state和服务器表单控件,可以更方便的控制应用程序的行为
- 应用程序通过controller来控制程序请求,可以提供丰富的url重写。
- 对单元测试的支持更加出色
- 在团队开发模式下表现更出众
(4) MVC的不足:
- 增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
- 视图与控制器间的过于紧密的连接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。
- 视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。
5. 什么叫应用程序域?什么是托管代码?什么是强类型系统?什么是装箱和拆箱?什么是重载? CTS、CLS和CLR分别作何解释?
1. 应用程序域
应用程序域可以理解为一种轻量级进程。优点:起到安全的作用,占用资源小。 应用程序域为安全性、可靠性、版本控制以及卸载程序集提供了隔离边界。应用程序域通常由运行库宿主创建,运行库宿主负责在运行应用程序之前引导公共语言运行库。应用程序域提供了一个更安全、用途更广的处理单元,公共语言运行库可使用该单元提供应用程序之间的隔离。为了保证代码的健壮性,CLR希望不同服务功能的代码之间相互隔离,这种隔离可以通过创建多个进程来实现,但操作系统中创建进程是即耗时又耗费资源的一件事,所以在CLR中引入了AppDomain的概念,AppDomain主要是用来实现同一进程中的各AppDomain之间的隔离。 详见:C#—应用程序域
2. 托管代码
使用基于公共语言运行库的语言编译器开发的代码称为托管代码;托管代码具有许多优点,例如:跨语言集成、跨语言异常处理、增强的安全性、版本控制和部署支持、简化的组件交互模型、调试和分析服务等。3. 强类型
C# 是强类型语言;因此每个变量和对象都必须具有声明类型。(强类型语言也称为强类型定义语言。是一种总是强制类型定义的语言,要求变量的使用要严格符合定义,所有变量都必须先定义后使用。)什么是强类型,什么是弱类型?哪种更好些?为什么?
强类型是在编译的时候就确定类型的数据,在执行时类型不能更改,而弱类型在执行的时候才会确定类型。没有好不好,二者各有好处,强类型安全,因为它事先已经确定好了,而且效率高。一般用于编译型编程语言,如c++,java,c#,pascal等,弱类型相比而言不安全,在运行的时候容易出现错误,但它灵活,多用于解释型编程语言,如javascript,vb,php等
4. 装箱和拆箱
装箱和拆箱使值类型能够被视为对象。对值类型装箱将把该值类型打包到 Object 引用类型的一个实例中。这使得值类型可以存储于垃圾回收堆中。拆箱将从对象中提取值类型。5. 重载
每个类型成员都有一个唯一的签名。方法签名由方法名称和一个参数列表(方法的参数的顺序和类型)组成。只要签名不同,就可以在一种类型内定义具有相同名称的多种方法。当定义两种或多种具有相同名称的方法时,就称作重载。6. CTS通用类型系统 (common type system)
一种确定公共语言运行库如何定义、使用和管理类型的规范。Int32、Int16→int、String→string、Boolean→bool。每种语言都定义了自己的类型,.Net通过CTS提供了公共的类型,然后翻译生成对应的.Net类型。 #### 7. CLR公共语言运行库 (Common Language Runtime) .NET Framework 提供了一个称为公共语言运行库的运行时环境,它运行代码并提供使开发过程更轻松的服务。就是GC、JIT等这些。有不同的CLR,比如服务器CLR、Linux CLR(Mono)、Silverlight CLR(CoreCLR)。相当于一个发动机,负责执行IL。 #### 8. CLS公共语言规范 (Common Language Specification) 要和其他对象完全交互,而不管这些对象是以何种语言实现的,对象必须只向调用方公开那些它们必须与之互用的所有语言的通用功能。为此定义了公共语言规范 (CLS),它是许多应用程序所需的一套基本语言功能。6. ADO.NET
(1) net中读写数据库需要用到那些类?他们的作用?
DataSet::数据存储器。
DataCommand:执行语句命令。
DataAdapter:数据的集合,用语填充。
(2) ADO.net中常用的对象有哪些?分别描述一下。
Connection 数据库连接对象
Command数据库命令
DataAdapter
DataReader数据读取器
DataSet数据集
- Connection:主要是开启程序和数据库之间的连接。没有利用连接对象将数据库打开,是无法从数据库中取得数据的。Close和Dispose的区别,Close以后还可以Open,Dispose以后则不能再用。
- Command:主要可以用来对数据库发出一些指令,例如可以对数据库下达查询、新增、修改、删除数据等指令,以及调用存在数据库中的存储过程等。这个对象是架构在Connection 对象上,也就是Command 对象是透过连接到数据源。
- DataAdapter:主要是在数据源以及DataSet 之间执行数据传输的工作,它可以透过Command 对象下达命令后,并将取得的数据放入DataSet 对象中。这个对象是架构在Command对象上,并提供了许多配合DataSet 使用的功能。
- DataSet:这个对象可以视为一个暂存区(Cache),可以把从数据库中所查询到的数据保留起来,甚至可以将整个数据库显示出来,DataSet是放在内存中的。DataSet 的能力不只是可以储存多个Table 而已,还可以透过DataAdapter对象取得一些例如主键等的数据表结构,并可以记录数据表间的关联。DataSet 对象可以说是ADO.NET 中重量级的对象,这个对象架构在DataAdapter对象上,本身不具备和数据源沟通的能力;也就是说我们是将DataAdapter对象当做DataSet 对象以及数据源间传输数据的桥梁。DataSet包含若干DataTable、DataTableTable包含若干DataRow。
- DataReader:当我们只需要循序的读取数据而不需要其它操作时,可以使用DataReader 对象。DataReader对象只是一次一笔向下循序的读取数据源中的数据,这些数据是存在数据库服务器中的,而不是一次性加载到程序的内存中的,只能(通过游标)读取当前行的数据,而且这些数据是只读的,并不允许作其它的操作。因为DataReader 在读取数据的时候限制了每次只读取一笔,而且只能只读,所以使用起来不但节省资源而且效率很好。使用DataReader 对象除了效率较好之外,因为不用把数据全部传回,故可以降低网络的负载。
ADO.NET 使用Connection 对象来连接数据库,使用Command 或DataAdapter对象来执行SQL语句,并将执行的结果返回给DataReader 或 DataAdapter ,然后再使用取得的DataReader 或DataAdapter 对象操作数据结果。
(3) ADO.NET中DataReader与Dataset有什么区别?
一个是只能向前的只读游标,一个是内存中虚拟的数据库。
DataReader使用时始终占用SqlConnection,在线操作数据库,每次只在内存中加载一条数据,所以占用的内存是很小的,是只进的、 只读的。
DataSet则是将数据一次性加载在内存中,抛弃数据库连接。读取完毕即放弃数据库连接(非连接模式)。
DataSet将数据全部加载在内存中.所以比较消耗内存。但是却比DataReader要灵活,可以动态的添加行,列,数据.对数据库进行 回传更新操作(动态操作读入到内存的数据)。
(4) DataGrid的Datasouse可以连接什么数据源
DataTabe,DataView,DataSet,DataViewManager,任何实现IListSource接口的组件,任何实现IList接口的组件
(5) 在ADO.NET中,对于Command对象的ExecuteNonQuery()方法和ExecuteReader()方法,下面叙述错误的是(c)。
a) insert、update、delete等操作的Sql语句主要用ExecuteNonQuery()方法来执行;
b) ExecuteNonQuery()方法返回执行Sql语句所影响的行数。
c) Select操作的Sql语句只能由ExecuteReader()方法来执行;
d) ExecuteReader()方法返回一个DataReader对象;
拿SQLHelper实现一下。
(6) 简单介绍下ADO.NET和ADO主要有什么改进?
ADO以Recordset存储,而ADO.NET则以DataSet表示,ADO.NET提供了数据集和数据适配器,有利于实现分布式处理,降低了对数据库服务器资源的消耗。
(7) 列举ADO.NET中的共享类和数据库特定类
共享类:DataSet,DataTable,DataRow,DataColumn,DataRealtion,Constraint,DataColumnMapping,DataTableMapping 特定类:(x)Connection,(x)Command,(x)CommandBuilder,(x)DataAdapter,(x)DataReader,(x)Parameter,(x)Transaction(8) ADO.NET处理数据并发的方法和步骤?
开放式并发,没有用到数据库的锁,而依靠SQL语句判断数据是否已经变化了。 步骤:通常使用VS提供的工具生成SQL语句,工具生成的结果实在不符合要求,才手工写SQL语句。(9) ADO.NET中访问数据库的基本步骤是什么?
Connection con=new Connection(“连接字符串”);//创建连接对象
con.Open();//打开连接对象
(10) ADO.NET中如何避免SQL注入漏洞的?
利用 sql 关键字对网站进行攻击、过滤关键字等。
7. 在.net中,配件的意思是?
程序集。(中间语言,源数据,资源,装配清单)
程序集由描述它的元数据,描述导出类型和方法的类型元数据,MSIL代码和资源组成。
程序集的一个重要部分是程序集清单:它是元数据的一部分,描述了程序集和引用它所需的所有信息,并列出所有的依赖关系。清单:
1:标识(名称,版本,文化,公钥)
2:引用程序集的列表
3:一组许可请求
4:导出的类型
8. 什么是Code-Behind技术?
代码后植(代码隐藏),在ASP.NET中通过ASPX页面指向CS文件的方法实现显示逻辑和处理逻辑的分离,这样有助于web应用程序的创建。比如分工,美工和编程的可以各干各的,不用再像以前asp那样都代码和html代码混在一起,难以维护。code-Behind是基于部分类技术实现的,在我的项目的三层代码生成器中用到了部分类。
9. remoting和webservice和UDDI
(1) .netRemoting 的工作原理是什么?
服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置
(2) 简要谈一下您对微软.NET构架下remoting和webservice两项技术的理解以及实际中的应用。
答:WS主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传送提高效率。
remoting是.net中用来跨越machine,process, appdomain进行方法调用的技术,对于三层结构的程序,就可以使用remoting技术来构建.它是分布应用的基础技术.相当于以前的DCOM。 Web Service是一种构建应用程序的普通模型,并能在所有支持internet网通讯的操作系统上实施。Web Service令基于组件的开发和web的结合达到最佳,基于组件的对象模型。(3) 什么是Web Service?
WebService是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼容的组件进行互操作。
WebService服务可以描述为可以在web上部署并可以被任何应用程序或其他服务调用的功能。所谓服务就是系统提供一组接口,并通过接口使用系统提供的功能,WebService服务可以提供任何企业到客户,企业到企业,点对点或部门对部门通讯所需的服务,比如一个公司可以通过网络连接到另一个公司的服务,从而直接传递订购单。
(4) 常用的调用WebService的方法有哪些?
- 使用WSDL.exe命令行工具。
- 使用VS.NET中的Add Web Reference菜单选项
- WebService的访问形式主要有:SOAP调用、XMLHTTP POST、GET调用、MicroSoft.XMLDOMC调用、webbehavior.htc调用
(5) 什么是UDDI?
UDDI的目的是为电子商务建立标准;UDDI是一套基于Web的、分布式的、为WebService提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。
(6) 解释一下UDDI、WSDL的意义及其作用
UDDI:统一描述、发现和集成协议(UDDI, Universa Description, Discovery and Integration)是一套基于Web的、分布式的、为Web服务提供的信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web服务注册以使得别的企业能够发现的访问协议的实现标准。UDDI 提供了一组基于标准的规范用于描述和发现服务,还提供了一组基于因特网的实现。 WSDL:WSDL描述Web服务的公共接口。这是一个基于XML的关于如何与Web服务通讯和使用的服务描述; 作用: 服务 URL 和命名空间 :网络服务的类型(可能还包括SOAP 的函数调用,正像我所说过的,WSDL足够自如地去描述网络服务的广泛内容)。有效函数列表,每个函数的参数,每个参数的类型 ,每个函数的返回值及其数据类型。(7) 什么是wcf? 什么是WebServices?
Web Service:严格来说是行业标准,也就是Web Service 规范,既不是框架,也不是技术。它有一套完成的规范体系标准,而且在持续不断的更新完善中。它使用XML扩展标记语言来表示数据(这个是跨平台跨语言的关键)
WCF 是一个分布式应用的开发框架,属于特定的技术,或者平台。既不是标准也不是规范。
WCF其实一定程度上就是ASP.NET Web Service,因为它支持Web Service的行业标准和核心协议,因此ASP.NET Web Service和WSE能做的事情,它几乎都能胜任,跨平台和语言更不是问题(数据也支持XML格式化,而且提供了自己的格式化器)。
10. dotnet中类(class)与结构(struct)的异同?
Class可以被实例化,属于引用类型,是分配在内存的堆上的。类是引用传递的。
Struct属于值类型,是分配在内存的栈上的。结构体是复制传递的。加分的回答:Int32、Boolean等都属于结构体
11. 软件开发过程一般有几个阶段?每个阶段的作用?
需求分析,架构设计,代码编写,QA,部署
12. 用户控件
(1) 什么是ASP.net中的用户控件?
用户控件是能够在其中放置标记和Web服务器控件的容器,可以被看作一个独立的单元,拥有自己的属性和方法,并可被放入到ASPX页面上。
用户控件可用来实现页面中可重用的代码,是可以一次编写就多处方便使用的功能块。它们是ASP.NET控件封装最简单的形式。
用户控件一般用在内容多为静态,或者少许会改变的情况下。用的比较大,类似ASP中的include,但是功能要强大的多。
简答:用户控件与完整的.aspx文件相似,同时具有网页界面页和服务端代码。创建用户控件的方式与创建.aspx网页相似,不过用户控件页面的扩展名为ascx,编程者可以根据需要向.ascx页面中添加必要的HTML标签以及其他现有的WEB服务器控件。完成创建后,编程者可将用户控件嵌入.aspx页面中作为1个可重复使用的代码单元,并且用户控件可以包含对其内容进行操作的逻辑代码。
(2) 如何创建用户控件?
首先应在Web站点中添加一个新的“Web用户控件”文件。在网站中选择“添加新项”,打开“添加新项”对话框,在列表中选择“Web用户控件”模板,单击“添加”按钮。(在将文件添加到项目后,该文件的扩展名是.ascx)
(3) 怎样使用用户控件?
直接把用户控件文件.ascx从“解决方案资源管理器”中拖放到需要使用的web页面上,然后设置两个控件ID属性。可以看到页面增加了一个@Register指令,该指令包含以下3个属性:
- TagPrefix属性:定义控件位置的命名空间。有了命名空间的制约,就可以在同一个网页里使用不同功能的同名控件。
- TagName属性:指向所有控件的名字。在同一个命名空间里的控件名是唯一的。控件名一般都表明控件的功能。
- Src属性:指向控件的资源文件。资源文件使用虚拟路径(“control.ascx”或“/path/control.ascx”),不能使用物理路径(”C:\path\control.ascx.”)。
(4) 动态创建的控件PostBack后是否可以保存下来,为什么?
ASP.NET框架不会为你保存,但可以手工保存到ViewState13. Server.Transfer与Response.Redirect有什么区别?
Server.Transfer方法把执行流程从当前的ASPX文件转到同一服务器上的另一个ASPX 页面,调用Server.Transfer时,当前的ASPX页面终止执行,执行流程转入另一个ASPX页面,但新的ASPX页面仍使用前一ASPX页面创建的应答流。
Response.Redirect则是客户端第一次请求服务器返回状态代码302及新URL,客户端再次请求新URL,服务器再返回新页面,比Server.Transfer多一次应答。
14.在.net中接口、类、抽象类有什么异同?
抽象类
(1) 抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法
(2) 抽象类不能被实例化
(3) 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类
接口
接口不能被实例化接口只能包含方法声明接口的成员包括方法、属性、索引器、事件接口中不能包含常量、字段(域)、构造函数、析构函数、静态成员。
相同点:都可以被继承都不能被实例化都可以包含方法声明派生类必须实现未实现的方法
不同点:抽象基类可以定义字段、属性、方法实现。接口只能定义属性、索引器、事件、和方法声明,不能包含字段。
抽象类是一个不完整的类,需要进一步细化,而接口是一个行为规范接口可以被多重实现,抽象类只能被单一继承接口可以用于支持回调,而继承并不具备这个特点
15. net的错误处理机制是什么?
答:.net错误处理机制采用try->catch->finally结构,发生错误时,层层上抛,直到找到匹配的Catch为止。
try{
throw new Exception();
}catch (Exception){
return arr;
}finally{
arr[1] = "three";
}
错误的处理顺序:finally先,catch次之,最后退会try代码,取消此次操作.返回catch中的异常信息。当然,你也可以定制自己的错误处理机制,如果你的异常处理中包含finally块,则此finally无论是否发生异常始终会被执行。
16. 在.net(C# or vb.net)中如何取消一个窗体的关闭。
private void Form1_Closing(object sender,System.ComponentModel.CancelEventArgse)
{
e.Cancel=true;
}
17. 在.net(C# or vb.net)中,Appplication.Exit 和 Form.Close有什么不同?
一个是退出整个应用程序,一个是关闭其中一个form。
18. 什么是SOAP,有哪些应用。
SOAP(Simpe Object Access Protocol )简单对象访问协议是在分散或分布式的环境中交换信息并执行远程过程调用的协议,是一个基于XML的协议。使用SOAP,不用考虑任何特定的传输协议(最常用的还是HTTP协议),可以允许任何类型的对象或代码,在任何平台上,以任何一种语言相互通信。 SOAP 是一种轻量级协议,用于在分散型、分布式环境中交换结构化信息。 SOAP 利用 XML 技术定义一种可扩展的消息处理框架,它提供了一种可通过多种底层协议进行交换的消息结构。这种框架的设计思想是要独立于任何一种特定的编程模型和其他特定实现的语义。 SOAP 定义了一种方法以便将 XML 消息从 A 点传送到 B 点。为此,它提供了一种基于 XML且具有以下特性的消息处理框架:1) 可扩展,2) 可通过多种底层网络协议使用,3) 独立于编程模型。19. 请解释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” 表用运行时使用哪一个隐藏类
aspx页面会编译生成一个类,这个类从隐藏类继承。
20. ASP.net的身份验证方式有哪些?
- Windows 身份验证提供程序:提供有关如何将Windows 身份验证与Microsoft Internet 信息服务 (IIS) 身份验证结合使用来确保 ASP.NET 应用程序安全的信息。
- Forms 身份验证提供程序:提供有关如何使用您自己的代码创建应用程序特定的登录窗体并执行身份验证的信息。使用 Forms 身份验证的一种简便方法是使用 ASP.NET 成员资格和 ASP.NET 登录控件,它们一起提供了一种只需少量或无需代码就可以收集、验证和管理用户凭据的方法。
- Passport 身份验证提供程序:提供有关由Microsoft 提供的集中身份验证服务的信息,该服务为成员站点提供单一登录和核心配置
21. 活动目录的作用
Active Directory存储了有关网络对象的信息,并且让管理员和用户能够轻松地查找和使用这些信息。 Active Directory使用了一种结构化的数据存储方式,并以此作为基础对目录信息进行合乎逻辑的分层组织。22. ASP.net
(1) ASP.NET缓存有几种实现方式?
基于页面级缓存;
基于数据源的缓存;
自定义缓存 ;
分布式缓存。
(2) ASP.NET中常见文件的后缀名有哪些?
.sln:解决方案文件
.ashx:一般处理程序
.aspx:webfrom
.ascx:用户控件
(3) ASP.NET中的六大对象有哪些?
- Response
- Request
- Server
- Application
- Session
- Cookie
(4) 在ASP.NET中ispostback的含义与作用
指示该页是否正为响应客户端回发而加载,或者它是否正被首次加载和访问。
23. 如何部署一个ASP.net页面?
VS 2005和VS 2003都有发布机制。2003可以发布然后再复制部署。VS2005基本上可以直接部署到对应位置。24. 垃圾回收机制
(1) GC是什么? 为什么要有GC?
GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:<font style="color:#121212;">System.gc() Runtime</font>
、<font style="color:#121212;">getRuntime().gc()</font>
C/C++中由程序员进行对象的回收像学校食堂中由学生收盘子,.Net中由GC进行垃圾回收像餐馆中店员去回收。强制进行垃圾回收使得内存及时得到释放提高效率
GC是垃圾收集器(Garbage Collection)。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。GC只能处理托管内存资源的释放,对于非托管资源则不能使用GC进行回收,必须由程序员手工回收,一个例子就是FileStream或者SqlConnection需要程序员调用Dispose进行资源的回收。
要请求垃圾收集,可以调用下面的方法:GC.Collect(),一般不需要手动调用GC.Collect()。当一个对象没有任何变量指向(不再能使用)的时候就可以被回收了。
基础知识:当没有任何变量指向一个对象的时候对象就可以被回收掉了,但不一定会立即被回收。
csharp
object obj = new object();//只有new才会有新对象
Console.WriteLine(obj);
object obj2 = obj;
obj = null;
obj2 = null;
Console.WriteLine();
#### (2) 如何理解.net中的垃圾回收机制?
.NETFramework 的垃圾回收器管理应用程序的内存分配和释放。每次您使用 new 运算符创建对象时,运行库都从托管堆为该对象分配内存。只要托管堆中有地址空间可用,运行库就会继续为新对象分配空间。但是,内存不是无限大的。最终,垃圾回收器必须执行回收以释放一些内存。垃圾回收器优化引擎根据正在进行的分配情况确定执行回收的最佳时间。当垃圾回收器执行回收时,它检查托管堆中不再被应用程序使用的对象并执行必要的操作来回收它们占用的内存。
(3) 概述.NET中的GC机制。
GC的全称是garbage collection,中文名称垃圾回收,是.NET中对内存管理的一种功能。垃圾回收器跟踪并回收托管内存中分配的对象,定期执行垃圾回收以回收分配给没有有效引用的对象的内存。当使用可用内存不能满足内存请求时,GC会自动进行。 在进行垃圾回收时,垃圾回收器会首先搜索内存中的托管对象,然后从托管代码中搜索被引用的对象并标记为有效,接着释放没有被标记为有效的对象并收回内存,最后整理内存将有效对象挪动到一起25. ASP.NET中常见内置对象?
Response、Request、Server、Session、Application、Cookie26. UDP和TCP连接有和异同?
TCP是传输控制协议,提供的是面向连接的,是可靠的,字节流服务,当用户和服务器彼此进行数据交互的时候,必须在他们数据交互前要进行TCP连接之后才能传输数据。TCP提供超时重拨,检验数据功能。 UDP是用户数据报协议,是一个简单的面向数据报的传输协议,是不可靠的连接。TCP面向连接,而UDP是无连接的;
TCP提供的服务更可靠;
TCP面向字节流,UDP则是面向报文的,与TCP连接只能是点到点相比,UDP连接方式更加多样化,另外,UDP的首部开销8个字节比TCP的20字节要小。
27. 什么是ApplicationPool?
答:Web应用,类似Thread Pool,提高并发性能。28. 大概描述一下ASP.NET服务器控件的生命周期
初始化 加载视图状态 处理回发数据 加载 发送回发更改通知 处理回发事件 预呈现 保存状态 呈现 处置 卸载 服务器控件的生命周期是创建服务器控件最重要的概念。作为开发人员,必须对服务器控件生命周期深刻理解。当然,这不是一朝一夕就可以做到的。对于学习控件开发技术的初学者,可以不必掌握得非常详细深入,只需对服务器控件的生命周期中的不同阶段有一个大致的了解即可。 当Web服务器接收到一个HTTP请求(request),会返回一个HTTP响应(response),例如送回一个HTML页面。 在掌握服务器控件生命周期的过程中,读者要特别注意有关服务器控件状态的相关内容。在重点了解生命周期各个阶段的同时,对服务器控件的状态变化要注意以下问题: 控件的生命周期何时保存控件和恢复其状态;何时与页面及其他控件之间进行交互;何时执行重要的处理逻辑;在各个阶段,控件可使用哪些信息、保持哪些数据、控件呈现时处于哪种状态以及何时输出显示标记文本等。 如下列举了服务器控件生命周期所要经历的11个阶段。(1)初始化:
在此阶段中,主要完成两项工作:一、初始化在传入Web请求生命周期内所需的设置;二、跟踪视图状态。首先,页面框架通过默认方式引发Init事件,并调用OnInit()方法,控件开发人员可以重写该方法为控件提供初始化逻辑。此后,页面框架将调用TrackViewState方法来跟踪视图状态。需要注意的是:多数情况下,Control基类提供的TrackViewState方法实现已经足够了。只有在控件定义了复杂属性时,开发人员才可能需要重写TrackViewState方法。(2)加载视图状态:
此阶段的主要任务是检查ASP.NET服务器控件是否存在以及是否需要将其状态恢复到它在处理之前的请求结束的状态。 因此该过程发生在页面回传过程中,而不是初始化请求过程。在此阶段,页面框架将自动恢复ViewState字典。如果服务器控件不维持其状态,或者它有能力通过默认方式保存其所有状态而使用ViewState字典,那么开发人员则不必实现任何逻辑。针对那些无法在ViewState字典中存储的数据类型或者需要自定义状态管理的情况,开发人员可以通过重写LoadViewState方法来自定义状态的恢复和管理。(3)处理回发数据:
若要使控件能够检查客户端发回的窗体数据,那么必须实现System.Web.UI.IPostBackDataHandler接口的 LoadPostData()方法。因此只有处理回发数据的控件参与此阶段。(4)加载:
至此阶段开始,控件树中的ASP.NET服务器控件已创建并初始化、状态已还原并且窗体控件反映了客户端的数据。此时,开发人员可以通过重写OnLoad()方法来实现每个请求共同的逻辑。(5)发送回发更改通知:
在此阶段,ASP.NET服务器控件通过引发事件作为一种信号,表明由于回发而发生的控件状态变化(因此该阶段仅用于回发过程)。为了建立这种信号,开发人员必须再次使用System.Web.UI.IPostBackDataHandler接口,并实现另一方法-RaisePostBackChangedEvent()。其判断过程为:如果控件状态因回发而更改,则LoadPostData()返回true;否则返回false。页面框架跟踪所有返回true的控件并在这些控件上调用RaisePostDataChangedEvent()。(6)处理回发事件:
该阶段处理引起回发的客户端事件。为了便于将客户端事件映射到服务器端事件上进行处理,开发人员在此阶段可以通过实现System.Web.UI.IPostBackEventHandler接口的RaisePostBackEvent()方法来实现该逻辑。由此途径,服务器控件将成功捕获回发的客户端事件进行服务器端的相应处理。(7)预呈现:
该阶段完成在生成控件之前所需要的任何工作。通常情况下是通过重写OnPreRender()方法完成该工作。需要注意的是:在该阶段,可以保存在预呈现阶段对控件状态所做的更改,而在呈现阶段进行的更改则会丢失。(8)保存状态:
如果ASP.NET服务器控件不维持状态,或者它有能力通过默认方式保存其所有状态而使用ViewState字典,那么开发人员不必在该阶段实现任何逻辑。因为这个保存状态的过程是自动的。如果ASP.NET服务器控件需要自定义状态保存,或者控件无法在ViewState字典中存储特殊的数据类型,则需要通过重写SaveViewState()方法来实现状态保存。(9)呈现:
表示向HTTP输出流中写入标记文本的过程。开发人员通过重写Render()方法使其在输出流上自定义标记文本。(10)处置:
在此阶段中,通过重写Dispose ()方法完成释放对昂贵资源的引用,如数据库链接等。(11)卸载:
完成的工作与”处置”阶段相同,但是,开发人员通常在Dispose()方法中执行清除,而不处理Unload事件。