更多参考:博客园笔记

面试题:ASP.NET是什么

ASP.NET不是一种语言,而是创建动态Web页的一种强大的服务器端技术,它是Microsoft.NET
Framework中一套用于生成Web应用程序和Web服务的技术,,利用公共语言运行时(Common
Language Runtime)在服务器后端为用户提供建立强大的企业级Web应用服务的编程框架。

ASP.NET页在服务器上执行,并生成发送到桌面或浏览器的标记(如 HTML、XML或者WML)。可以使用任何.NET兼容语言(比如Visual
Basic、C#)编写Web服务文件中的服务器端(而不是客户端)逻辑。ASP.NET页使用一种由事件驱动的、已编译的编程模型,这种模型可以提高性能并支持将用户界面层同应用程序逻辑层相隔离。

面试题:ASP.NET和ASP的区别是什么

ASP与ASP.NET虽然都是微软公司的两项Web技术,但由于它们诞生的时间(1996VS2002)与背景不同,所以它们之间的区别相对比较大,主要区别在开发语言、运行机制、运行环境、开发方式等方面的不同。

区别如下:

()开发语言不同:ASP的开发语言仅局限于使用VBS/JS脚本语言混合html来编程,给客户端脚本添加代码和给页面添加ASP代码的方法是一样的。

ASP.NET的开发语言更为广泛,可以使用符合.NET Framework规范的任何一种功能完善的strongly-type编程语言(比如Visual
Basic、C#)。

()运行机制不同:ASP是解释型的编程框架,因没有事先编译,而是一边解释一边执行,故而页面的执行效率相对比较低。ASP.NET是编译型的编程框架,服务器上运行的是已经编译好的代码,因此可以利用早期绑定来实时编译,进而提高执行效率。

()运行环境不同:ASP的运行环境是Windows操作系统及IIS。ASP.NET的运行环境除了Windows操作系统及IIS,还需要安装.NET
Framework。

()开发方式不同:ASP将用户界面层和应用程序逻辑层的代码混合写在一起,因此在维护和重用方面比较困难。ASP.NET将用户界面层和应用程序逻辑层的代码分离开,程序的复用性和维护性都得到了提高。

()诞生的时间不同:年月,Microsfot公司推出了ASP(Active
Server Pages)技术。年月,Microsfot公司推出了ASP.NET技术。

扩展:

ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题: 

1、代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难。 

2、代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。 
3、弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来会方便一些,但相对于它所造成的出错几率是远远得不偿失的。 
以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。

那么,ASP.Net有哪些改进呢? 
ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++ , VB , JS等等,当然,最合适的编程语言还是MS为.Net Frmaework专门推出的C#(它可以看作是VC和Java的混合体吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性,比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。)

ASP(Active Server Pages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码,能产生和执行动态、交互式、高效率的服务器的应用程序。运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写,使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。此外,它可通过内置的组件实现更强大的功能,如使用ADO可以轻松地访问数据库。

之后,微软又推出ASP.NET。这不是ASP的简单升级,而是全新一代的动态网页实现系统,用于一台WEB服务器建立强大的应用程序。是微软发展的新体系结构.NET的一部分,是ASP和.NET技术的结合。提供基于组件、事件驱动的可编程网络表单,大大简化了编程。还可以用ASP.NET建立网络服务。

面试题:说明ASP.NET的Application特性

通常情况下,Application不会被程序员频繁地使用,但在一些特殊场合下Application会被经常地用到。

Application对象在实际网络开发中的用途就是记录整个网络的信息,在给定的应用程序的多用户之间共享信息,并在服务器运行期间持久的保存数据。Application对象具备控制访问应用层数据的方法,并可用于在应用程序启动和停止时触发过程的事件。

Application具备以下个特性:

信息量大小为任意大小

应用于整个应用程序/所有用户

保存在服务器端

作用域和保存时间是在整个应用程序的生命期

解析:

Application是用来保存所有用户共用的信息,在ASP时代,如果要保存的数据在应用程序生存期内不会或者很少发生改变,那么使用Application是理想的选择。但是在ASP.NET开发环境中,程序员通常把类似的配置数据放在Web.config中。如果要使用Application的话,要注意的是所有的写操作都要在Global.asax文件中的Application_OnStart事件中完成。如以下示例代码所示:

/*下面的代码在Global.asax文件中设置*/
Application.Lock(); //将Application对象加锁操作。
Application[“UserID”]=”Hellokitty”; //将Hello kitty值赋值给Application[“UserID”]对象
Application.Unlock(); ///将Application对象解锁

以下示例代码是在页面中调用Application,如下所示:

/*在Webpage中调用Application对象,请参考下面的用法。*/
String UserName=Application[“UserID”].ToString()

注意:尽管可以使用Application.Lock()避免冲突,但是它串行化了对Application的请求,会产生严重的性能瓶颈。因此,仍应尽量避免使用Application保存大数据量信息。

如果在应用程序中使用Application对象,一个需要考虑的问题是任何写操作都要在Application_OnStart事件中完成。尽管使用Application.Lock和Applicaiton.Unlock方法来避免写操作的同步,但是由于它串行化了对Application对象的请求,当网站访问量大的时候会产生严重的性能瓶颈,因此最好不要用此对象保存大的数据集合。下面举一个在线用户统计的例子来说明这个问题:

using System;
using System.Collections;
using System.ComponentModel;
using System.Web;
using System.Web.SessionState;
using System.IO;
public class Global :System.Web.HttpApplication // Global 的摘要说明。
{
privateSystem.ComponentModel.IContainer components = null; //必需的设计器变量。
privateFileStream fStream;
privateStreamReader reader; //读字符流
privateStreamWriter writer; //写字符流
public Global()
{
InitializeComponent(); //加载组件的已编译的页
}
protected void Application_Start(Object sender, EventArgs e)
{
Application["CurrentUser"]=; //初始化为0
//文件不存在,创建文件
fStream =File.Open(Server.MapPath("counts.text"),FileMode.OpenOrCreate);
reader = newStreamReader(fStream); //要读取的完整路径
//从当前流中读取一行字符并将数据作为字符串返回
Application["AllUser"]= Convert.ToInt32(reader.ReadLine());
reader.Close();/ //关闭流
}
//当用户访问网站时,在线用户+1,总访问数+1
protected void Session_Start(Object sender, EventArgs e)
{
Application.Lock(); //同步,避免同时写入
Application["CurrentUser"]=(int)Application["CurrentUser"]+; //总在线用户数
//访问网站的总用户数
Application["AllUser"] =(int)Application["AllUser"]+ ;
fStream = newFileStream(Server.MapPath("counts.text"),
FileMode.OpenOrCreate,FileAccess.ReadWrite);
//实现一个写入流,使其以一种特定的编码向流中写入字符
writer = newStreamWriter(fStream);
//把访问网站的总用户数再次写入到文件
writer.WriteLine(Application["AllUser"].ToString());
writer.Close(); //关闭写入流
Application.UnLock(); //同步结束
}
//当前用户退出网站时,在线用户数量-1
protected void Session_End(Object sender, EventArgs e)
{
Application.Lock();
Application["CurrentUser"] =(int)Application["CurrentUser"]- ; //总在线用户数量-1
Application.UnLock();
}
WebPage.ASPX页面的示例代码如下:
private void Page_Load(object sender, System.EventArgs e)
{
this.Label1.Text = "当前站点的用户数:" +Application["CurrentUser"].ToString();
this.Label2.Text="访问过站点的总用户数:" +Application["AllUser"].ToString();
}

面试题4 简述ASP.NET的页面运行机制

在深入学习ASP.NET之前,首先需要先了解一下ASP.NET的基本运行机制。

()当第一次访问页面时,页面请求首先依次经过HttpModuls和HttpHandler(处理程序)的处理,服务器接收到HttpHandler的请求后将跳转到需要访问的页面,然后ASP.NET Engine负责找到这个页面后台的类,并实例化为一个临时对象,在此过程中会触发一系列的事件,其中一部分事件需要经过对象中的方法进行处理,之后服务器会将这个处理后页面移交给Response对象,然后由Response对象将这个页面发送到客户端。这就是第一条路线。

()因为服务器之间的会话已经建立,在服务器中的临时对象已经建立,所以在这个页面上重新提交一些信息并再次向服务器发送请求时,是不用再经过初始化页面这一部分工作的。故这第二条路线是依次提交HttpModuls、HttpHandler请求,然后直接与临时对象交互并返回的。

()第三条路线与第二条路线的不同之处在于,在处理请求时,如果涉及到需要调用ASP.NET Cache(既ASP.NET缓存),临时对象将直接从ASP.NET缓存提取信息并返回。

()第四条路线是在刷新页面的时候,服务器接收到并发现这个请求先前曾经处理过,并将处理结果存储到由一个默认的HttpModule管理的输出缓存中,那么此时就可以直接从这个缓存中提取信息并返回,而无需再重新处理一遍。

【答案】

当每次请求ASP.NET页面时,依据不同的情况浏览器、服务器、ASP.NET引擎之间将执行这四条路线中的一条路线,通过了解ASP.NET页面的内部运行机制,程序员可以在编写、调试代码的时候会更加游刃有余的。

面试题:简述ASP.NET一个页面的生命周期

【考题分析】

在学习ASP.NET页面生命周期前,需要先了解上一小节介绍的 ASP.NET的基本运行机制。

页面从创建到处理结束的过程中  ASP.NET Engine执行的个事件。

【答案】

在ASP.NET的页面生命周期中需要经历Page_Init、LoadViewState、LoadPostData、Page_Load、RaisePostDataChanged、RaisePostBackEvent、Page_PreRender、SaveViewState、Page_Render、Handle、UnLoad这十个事件。每次ASP.NET页面请求,都经历着同样的过程:从初始化对象到销毁对象。通过了解ASP.NET页面页面生命周期程序员可以在编写、调试代码的时候会更好地把握这些事件之间的关系。

ASP.NET中服务器控件的生命周期

ASP.NET页生命周期概述

书籍:C#与.NET程序员面试宝典

ASP.NET的几个试题(《C#与.NET程序员面试宝典》)的更多相关文章

  1. PHP程序员面试技巧之口试题分享

    网络上流传很广的一部分php工程师面试题目,有些phper们认为这些很形式,天下面试题目一大把,不能考核一个人的真实水平,其实细细研究起来,无论怎样,能存在就表明其有存在的价值.下面小编整理了12条P ...

  2. .Net程序员面试试题

    1:简述private protected public internal修饰符的访问权限? private:私有成员在类的内部可以访问: protected:受保护的成员,在类的内部和继承类中可以访 ...

  3. 程序员面试:C/C++求职者必备 20 道面试题,一道试题一份信心!

    面试真是痛并快乐的一件事,痛在被虐的体无完肤,快乐在可以短时间内积累很多问题,加速学习. 在我们准备面试的时候,遇到的面试题有难有易,不能因为容易,我们就轻视,更不能因为难,我们就放弃.我们面对高薪就 ...

  4. .net程序员面试小结(内附一些面试题和答案)

    今天下午去面试,面试官和HR小姐姐都很好,没有做面试题,用聊天的方式来交流技术,整个过程很轻松,从中也学到了很多知识. 下面就来总结一下面试过程. 一.深刻了解自己的简历 无论是HR还是技术面试人,首 ...

  5. 这道面试必问的JVM面试题70%的Java程序员会做错

    前言 聊聊JVM,一个熟悉又陌生的名词,从认识Java的第一天起,我们就会听到这个名字,在参加工作的前一两年,面试的时候还会经常被问到JDK,JRE,JVM这三者的区别. JVM可以说和我们是老朋友了 ...

  6. asp.net core系列 WebAPI 作者:懒懒的程序员一枚

    asp.net core系列 36 WebAPI 搭建详细示例一.概述1.1 创建web项目1.2 添加模型类1.3 添加数据库上下文1.4 注册上下文1.5 添加控制器1.6 添加Get方法1.7 ...

  7. asp.net EF core 系列 作者:懒懒的程序员一枚

    asp.net core 系列 19 EFCore介绍写作逻辑一 .概述1.1 比较EF Core 和EF61.2 EF Core数据库提供程序 1.3 引用程序添加数据库提供程序1.4 获取Enti ...

  8. 【程序员面试金典】面试题 01.03. URL化

    题目 URL化.编写一种方法,将字符串中的空格全部替换为%20.假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的"真实"长度.(注:用Java实现的话,请使用字符数组实现 ...

  9. Java面试题整理:这些Java程序员面试中经常遇见的题目,必须掌握才能有好结果

    1.是否可以从一个static方法内部发出对非static方法的调用? 不可以.因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时 ...

随机推荐

  1. H5新特性---新应用

    1.持久化本地存储 可以不通过第三方插件实现数据的本地存储 2.WebSocket 页面之间可以双向通信 3.服务器推送事件(SSE) 从Web服务器将消息推送给浏览器(在手机中常见) 例如: < ...

  2. 带SSL证书的httpclient 远程接口工具类

    package com.iups.wx.util; import java.io.IOException; import java.io.UnsupportedEncodingException; i ...

  3. Gnostice PDFtoolkit VCL的安装

    Installation and Uninstallation For New Users Close all open applications including the IDE. Run the ...

  4. 牛的障碍Cow Steeplechase

    题目描述 Farmer John has a brilliant idea for the next great spectator sport: Cow Steeplechase! As every ...

  5. 标记语言XML

    标记语言概述 标记语言,是一种将文本(Text)以及文本相关的其他信息结合起来,展现出关于文档结构和数据处理细节的电脑文字编码.一部分是标记,一部分是标记中的内容,两部分构成标记语言   <标记 ...

  6. 记录使用Buildbot遇到的坑

    Buildbot Tips Buildbot也是个大坑..我并不熟悉python,偏偏文档又少.这几天使用buildbot出了不少坑.有的解决了,有的绕过去,这里都把它们一一记下来. Force Bu ...

  7. All Classic Bluetooth profile for iPhone

    iPhone BC profiles Profile Decription HFP1.6 1.通知客户端有电话拨入:2.免提功能:3.音频的输入输出机制. PBAP 1.下载通讯录:2.查找通讯录:3 ...

  8. xp_sp3_pro_简中_x86_cd_vl_x14-74070

    1.镜像文件: zh-hans_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74070.iso 来自 msdn itellyou ...

  9. java模拟http的get和post请求

    如题,使用Java模拟GET和POST请求.使用GET可以实现网页抓取,使用POST可以实现对某些网站登录的暴力破解.不过仅是练习,实际意义不大. import java.io.IOException ...

  10. MySQL主从配置实现(同一台主机)

    ////////////////////MySQL主从(同一台主机)////////////////////// 1.安装配置MySQL参考之前步骤搭建MySQL服务为了做实验方便,我们在同一台机器上 ...