最具参考价值Asp.Net面试题目 参考答案

作者:陆金龙    发表时间:2014-10-06 00:35   


一、笔试题

SQLServer部分

1. 请写出7个以上SqlServer的数据类型,请尽可能多写。

char nchar varchar nvarchar 

decimal int bigint

datetime 

bit 

uniqueidentifier

2. 请写出5-10个您平常使用过的SqlServer的系统函数,请尽可能多写。

字符串:left right ltrim rtrim substring len replace newid 

转换:convert cast

日期:getdate year month day dateadd datediff

其他:case row_number() 

3. 请写出一个简单的创建存储过程的sql脚本,如果可以请再写一个分页查询的存储过程

   假定:Database:testdb     Table:UserInfo (Id,Name,Age)

Use database testdb

go

简单查询存储过程

Creat proc up_UserInfo_SelectById

@Id int

As 

Begin

Select Id,Name,Age from UserInfo where Id=@Id 

End

分页存储过程(between是包含两个边界值的)

Use database testdb

go

Creat proc up_UserInfo_SelectByPage

@size int,

@pageIndex int,

@count int output

As 

Begin

Set @count=select count(*) from UserInfo

Select * from (

Select Id,Name,Age, row_number() over(order by Id) as num from UserInfo

) as tb

Where num between (@pageIndex-1)*@size +1 and @pageIndex*@size 

End

C#部分

4. 简述您对public、 protected 、internal 、protected internal 、private 、sealed的理解

访问修饰符

public: 类型和类型成员的访问修饰符。公共访问,是允许的最高访问级别,对访问公共成员没有限制。

protected: 成员访问修饰符。受保护成员在它的类中可访问并且可由派生类访问

internal: 类型和类型成员的访问修饰符。只有在同一程序集的文件中,内部类型或成员才是可访问的

protected internal: 满足二者中的一个条件则可访问。

private: 成员访问修饰符。私有访问是允许的最低访问级别。私有成员只有在声明它们的类和结构体中才是可访问的。

修饰符

sealed:sealed 修饰符可以应用于类、实例方法和属性。密封类不能被继承。密封方法会重写基类中的方法,但其本身不能在任何派生类中进一步重写。当应用于方法或属性时,sealed修饰符必须始终与override一起使用。

static:static 修饰符声明属于类型本身而不是属于特定对象的静态成员。可用于类、字段、方法、属性、运算符、事件和构造函数,但不能用于索引器、析构函数或类以外的类型。

Aspx的后台page类中慎用static修饰成员,并发请求的不同线程是共享类的静态成员的,一旦成员的值在某个线程中被修改,会影响到所有线程对该成员的使用。

5.类与结构体比较

相同点:

1)结构与类共享大多数相同的语法。

2)结构与类都有字段和方法成员(数据和行为),都可以有静态成员。

3)结构与类都可以实现接口。

不同点:

结构比类受到更多的限制

1)结构不能显示的声明无参构造函数或析构函数,不能在定义结构时初始化实例字段。

2)结构在使用前必须对所有字段赋初值,可以在有参的构造方法中赋值或通过访问结构的成员进行赋值,对于私有的非静态成员只能在有参构造方法中赋值。

3)结构不能从另一个结构或类继承,而且不能作为一个类的基(所有结构都直接继承自 System.ValueType,后者继承自 System.Object)。

6.重写与重载比较

重写是子类的方法覆盖父类的方法,要求方法名和参数都相同。

重载是在同一个类中的两个或两个以上的方法,拥有相同的方法名,但是参数却不相同。

重载方法的参数不同,分三种情况:

a、参数个数不同,类型不限;

b、参数个数相同,参数类型不同;

c、参数个数和类型都相同,不同类型的参数顺序不同;

注:重载的方法,其返回类型和修饰符可以相同,也可以不同。

重载的目的是为一组功能相似的方法使用统一的方法名,方便调用。

7.请写出Linq查询的几种数据源,试着写出其中一种的查询代码。

Linq 查询可针对 Object,XML,SQL,DataTable等进行。

data.xml内容如下

<?xml version=”1.0”?>

<Data>

<products >

<product Name=”West” Price=”9.99” SupplierId=”1” />

<product Name=”Frogs” Price=”13.99” SupplierId=”3” />

</products >

<suppliers >

<supplier Name=”Solely” SupplierId=”1” />

<supplier Name=”Barber” SupplierId=”2” />

<supplier Name=”Tom” SupplierId=”3” />

</suppliers >

</Data>

这是xml描述的供应商及产品的数据。如果是其他数据源,假定其属性与上述xml描述的属性相同。请以SupplierId属性为关联条件查询价格大于10的产品记录(及其供应商信息)。

(1) Linq To Object

List<Product> products =Product.GetData();

List<Supplier> suppliers=Supplier.GetData();

var objs = from p in products 

join s in suppliers on s.SupplierId equals p.SupplierId 

where p.Price>10

select new{SupplierName=s.SupplierName,ProductName=p.ProductName, Price=p.Price}

(2)Linq To XML

Xdocument doc = Xdocument.Load(“data.xml”);

var objs = from p in doc.Decendants(“products”);

   join s in doc.Decendants(“suppliers”);

              on (int)p.Attribute(“SupplierId”) equals (int)s.Attribute(“SupplierId”)

           where (decimal)p.Attribute(“Price”)>10

           order by (string)s.Attribute(“Name”),(string)p.Attribute(“Name”)

           select new{SupplierName=(string)s.Attribute(“Name”),ProductName=(string)p.Attribute(“Name”)

};

(3)Linq To SQL

VS项目中添加LINQ to SQL Class,命名为LinqDemo.dbml,新建dbml文件之后,可以打开server explorer,建立数据库连接,并将我们表Products和Suppliers拖到dbml文件中。

using(LinqDemoDataContext db = new LinqDemoDataContext())

{

var objs = from p in db.Products

   join s in db.Suppliers

              on p.SupplierId equals s.SupplierId

           where p.Price>10

           order by s.Name,p.Name

           select new{SupplierName=s.Name,ProductName=p.Name};

}

Asp.Net部分

8.请列举Asp.Net中的几种页面间传值方式   

Get Url参数

Post 表单提交

Session 和Application

静态变量:

     发送页面WebForm1:public static string staticTest="static string";

     接收页:string staticTest = WebForm1.staticTest;

9.请填写Asp.Net状态保持方式

 浏览器端状态保持:Cookie

 单页面级状态保持:ViewState 

Html部分

10.请问您如何理解静态页面、动态页面和动态HTML

静态页面:

通常以.htm/.html/.shtml等结尾,每一个网页都是一个文件,有固定URL。

网页代码都在页面文件中,不用执行asp、aspx、php、jsp等程序来生成客户端代码。

静态页面的更新,需要将页面文件的内容修改重新发布。

动态页面:

以aspx、asp、php、jsp、perl、cgi等形式为后缀,不是独立存在的网页文件,根据用户请求Url可包含变化的参数,是不固定的。

网页代码通过执行服务端程序而动态生成返回给客户端。

即使程序代码不更新,动态页面内容的也会因请求参数变化、后台数据库的内容变化而发生改变。

动态HTML:DHTML即Dynamic HTML,通过结合HTML、用户端脚本语言(如JavaScript)、CSS和DOM来创建动态网页内容。能实现不与服务端交互,在浏览器中直接动态地更新网页的内容、排版样式、动画等。

11.请比较HTML与XML、XHTML的异同

相同点:都是标记语言,注释相同,可以通过DOM控制,可以通过CSS控制
  不同点:xml语法更加严格规范,xml主要存储数据,html注重展示数据,xhtml是符合xml语法规范的html,是更严格更纯净的 HTML 版本。

xhtml语法规范:

1) 标签必须有结束标签,不能省略。

2) 使用id而不是name做为元素的唯一标志。

3) 属性名称必须为小写

4) 属性值使用双引号

5) 属性不允许简写,属性名与属性值成对出现且用等号连接

xhtml语法规范的目的,是使网页能够被浏览器正确及较快地编译。目前大多网站为了seo和多浏览器支持,都采用xhtml标准写法。

12.请写出几个表5个以上单元素,如果可能请另写出Html5中新增的表单元素

input type为”text” 、”hidden” 、”password ” 、”radio”‘”checkbox” 、”button” 、”submit”的标签

textarea 和select 

html5新增:number 、color 、email 、date 、time 、month 、week等

CSS部分

13.请写出以下几种常用样式

1)表格细边框样式

tb,tr,td {border-collapse:collapse;}

2)a标签去掉下划线

a {text-decoration:none;}

3)列表去掉项目标记

  li { list-style-type: none; }

4)控制td div等标签的内容不换行

{white-space:nowrap}

5)控制内容超出(body、div等)范围时隐藏或显示滚动条

{overflow:hidden}

{overflow:auto}

6)控制向左或向右浮动

{float:left}

{float:right}

7)清除浮动

{clear:left} //清除针对float:left的浮动影响

{clear:right}//清除针对float:right的浮动影响

{clear:both}//清除针对以上两种情况的浮动影响

14.请分析display样式常用的几种值

normal 正常

none 隐藏

block 块元素样式

inline 行元素样式

inline-block 行级的块容器。该元素内部(内容)被格式化成一个块元素,同时元素本身则被格式化成一个行内元素。inline-block 的元素既具有 block 元素可以设置宽高的特性,同时又具有 inline 元素默认不换行的特性。

Js/JQuery/Ajax

15.请尽可能多的列举Javascript数据类型

undefined/null/NaN(非数字)、布尔型(Boolean)、数值型(Number)、字符串(String)、数组(Array)、Date、JSON、Object

16.请尽可能多的列举Javascript常用的函数

parseJSON parseInt parseFloat等函数

setInterval setTimeOut

replace split join

17.请问Jquery选择器主要有哪几种

标签选择器、Id选择器、类选择器、属性选择器、复合选择器 (类似与样式选择器)

18.请问Jquery动画的函数有哪些

hide show toggle slideDown slideUp slideToggle fadeIn fadeOut fadeTo animate(自定义动画)

19.请写出一种Ajax请求的代码示例

Ajax的应用场景和作用(1.动态获取Json格式数据,刷新页面。2.异步执行任务)

Js版原生Ajax:

    function createXHR(){

        var xhr;

        if(window.XMLHttpRequest){

            xhr = new XMLHttpRequest();       

        }

        else

        {

            xhr = new ActiveXObject("Microsoft.XMLHTTP");

        }

        return xhr;

    }

    

function send(){    

var request = createXHR();//1 new (创建对象)

 

     var div = document.getElementById("msg");

        var name = encodeURIComponent("张三");//当get时处理中文的编码

        request.open("get","01-get.ashx?name="+name,true); //2 open(还没有发送,true 异步)

        request.setRequestHeader("If-Modified-Since","0");

        

     request.onreadystatechange=function(){

            if(request.readyState==4){

                if(request.status==200){

                    var msg=request.responseText;

                }

                else

                {

                    div.innerHTML ="服务器错误";

                }    

            }

        } //3 register(注册onreadystatechange事件)

        request.send();   //4 send(发送请求) 

    }

 

JQuery版Ajax

$.get:

$.get("get.ashx?name=zs&_="+Math.random(), function (msg) {//todo});  

  $.get("get.ashx", "name=zs&_="+Math.random(), function (msg) {//todo});      

$.get("get.ashx",{ name: " zs ", _: Math.random() }, function (msg) {//todo});

$.post:

$.post("post.ashx", "name=zs&pass=123", function (msg) {//todo});      

$.post("post.ashx",{ name: " zs ", pass: " 123 "}, function (msg) {//todo});

$.ajax:(只有一个参数,是一个json对象。$.get和$.post是2个或3个参数)

$.ajax({

                    cache: false,//设置不读缓存

                    type: "get",

                    url: "get.ashx",

                    data: "name=zs",

                    success: function (msg) {

                        $("#d1").html(msg);

                    },

                    error: function () {

                        $("#d1").html("服务器内部错误");

                    }

                });

二、面试题

1.请说明数据类型varchar与nvarchar区别,bool类型和Guid在SqlServer中对应什么类型?

varchar与nvarchar的区别 主要考虑中文字符的支持

varchar(n): 长度为 n 个字节的可变长度且非 Unicode 的字符数据,最大存储n个字节数据  n范围1-8000 

nvarchar(n):包含 n 个字符的可变长度 Unicode 字符数据,最大存储2n个字节数据, n范围1-4000

Bool类型在Sqlserver中使用什么类型: bit

Guid在Sqlserver中使用什么类型:uniqueidentifier

2.请谈谈您对数据库设计的三大范式的理解

列的原子性、主键列(唯一标识一行记录)、不存在依赖非主属性的列(所有属性只依赖于主键属性,不依赖于非主属性,该范式是为了消除传递依赖)

3.请说出集中您知道的几个Crud方案

手写SqlHelper

EF

NHibernate

CodeSmith、T4 等代码生成工具编写模版,批量生成数据库访问层代码

4.请说一下多线程中线程安全处理的方法

   补充提问:描述一下lock关键字与Monitor的关系和区别 

1)公用代码段的安全

每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数。这可能带来的问题就是几个线程同时执行一个函数,导致数据的混乱,产生不可预料的结果。

C#提供了一个关键字lock,它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待。这是通过在代码块运行期间为给定对象获取互斥锁来实现的。

 例如多个线程协同计数,为避免相互干扰产生计数错误,可以对关键代码加锁。

    for(int i=0;i<1000;i++)

    {

    object obj=new object();

        lock (obj)

        {

            int num = int.Parse(txt.Text);

            num++;

            txt.Text = num.ToString();

     }

    }

这里的目的显然是保证lock(obj){}括号中代码段的线程安全。如果想保护一个类的实例,也可以将实例传入,使用lock实现,如下所述。

    2) 共享对象的安全

当多个线程访问同一个数据时,如果不对读和写的顺序作出限定,例如一个线程正在读而另一个数据尝试写,则读数据的线程得到的数据就可能出错。这也是多线程带来的问题。

例如有一个集合listNode,在执行遍历操作过程中,不允许其他线程对该集合的成员进行添加和移除操作,以免发生异常。可以用lock将对象锁定:

lock(listNode)

    if (listNode.Count > 0)

    {

         for (int i = 0; i < listNode.Count; i++)

         {

          //Code to do

  }

    }

}   

    3) lock与Monitor比较

lock经过编译后就是Monitor,相当于Monitor.Enter、Monitor.Eixt加上异常处理。

因此上述lock语法的代码可以用以下代码替换

try

Monitor.Enter(listNode);

    if (listNode.Count > 0)

    {

         for (int i = 0; i < listNode.Count; i++)

         {

          //Code to do

  }

    }

finally 

    {

Monitor.Exit(lstNode);

可见使用lock要简洁一些。但是他们之间还是有不同的地方,且Monitor有更多一些复杂的用法。

lock只能对引用对象加锁,lock锁定区间内可以对锁定值修改而不发生运行时错误。

Monitor 可以对值类型加锁(实际上是在调用Monitor.Enter时对值类型装箱了),在锁定区域内不能对被锁对象的值进行修改,运行时抱错“从不同步的代码块中调用了对象同步方法”。

5.请描述事件与委托有什么相同与不同点

委托是表示对具有特定参数列表和返回类型的方法的引用的类型。

委托用于将方法作为参数传递给其他方法,在其他方法中调用委托时,相当于调用委托变量中引用的方法(委托扮演代理人的角色)。

事件相当于一个私有的委托成员,加上公开的Add和Remove两个方法。因此外界只能对事件使用+=和-=进行事件处理程序的注册和注销,不能直接调用事件。

事件相当于外界把想要执行的任务委托给定义事件的类来代理完成。与普通委托不同的是,任务执行的时机和条件由代理方(定义事件的类)决定,委托方无权控制。

6.请举例说明IHttpHandler、HttpModule、Global.asax的应用,比较HttpModule、Global.asax的异同

IHttpHandler应用:全局处理程序。加水印、防盗链等。将配置项中指定路径的请求转到该类处理。

HttpModule应用:例如为所有页面增加权限判断,为请求管道中特定的事件注册处理程序。

Global.asax:全局应用程序类,使用Application缓存数据,HttpModule能实现的功能。在线人数统计等。

 

HttpModule和Global.asax区别:前者是基于请求的,可以有多个,便于封装与模块化;后者是应用程序全局的,只能有一个,能处理Application_Start、Application_End、Session_Start、Session_End等。

以上3这都可以处理Url重写。

IHttpHandler对配置指定路径的请求处理:

 <add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />

  HttpModule和Global.asax则是针对所有请求的,通过注册请求开始事件实现控制。前者为context.BeginRequest注册事件响应程序。并在被注册的方法中实现。后者直接在已经注册的Application_BeginRequest方法中添加功能性代码。

7.请问您怎么理解内联元素与块元素

内联元素:即行内元素,如span textarea select等

块级元素:如div p table 列表(ol、 ul 、dl)form等

换行:前者在空间足够的情况下不会换行,后者会自动从新的行开始。

宽高:第一,行内元素与宽度,设置width、height不起作用,宽度高度没有变化
  第二,行内元素与padding,margin影响左右,不影响上下

两种类型的元素可通过css样式相互转换。

8.请问table布局与div+css布局比较各有什么特点,目前主流的、推荐的布局是哪种?

table布局:

标签就是表格,本是用来显示数据的,table布局是很早以前css不存在的时候兴起的,是对table标签的不正规使用。table布局因为有开发简单节省时间,内容自适应这样一些好处,在很多传统网站中得到应用。

代码质量:为了实现稍复杂的布局,table层层嵌套使得代码大量增加、使得样式和布局的维护极其困难。

功能局限:table布局难以适应布局结构复杂、标签元素丰富、动态修改、整体风格切换这样一些页面设计的特点和要求。table布局的页面降低了对手机、PAD等移动端浏览器的亲和力。

兼容性:表格内使用div ul等元素会带来浏览器兼容性问题。

网页效果:table内容全部加载才能显示网页,导致浏览速度慢。

div+css布局:   

代码质量:内容和显示分离,使得html文件代码精简;独立的css便于样式维护和扩展(如换肤)。

功能强大:css的强大功能使得复杂的页面布局较容易实现,更能配合js则能在页面运行时的动态修改布局。

兼容性:与各种标签元素协同使用不引起兼容性问题。

网页效果:制作出来的页面浏览速度较快。

  移动互联网:对手机或PDA浏览者有更好的亲和力。

结论:目前div+css布局是主流和趋势

对于注重产品质量和体验、有发展眼光的企业和和有技术追求的开发人员而言,无疑都会选择div+css布局。而表格则应回归她应有的作用:显示数据。

div+css布局正取代table布局完成相应的使命,而且表现得更完美和强大。div+css技术遵循Web标准,更规范、灵活和强大,顺应了互联网行业发展的趋势。

越来越多人采用Web标准时,掌握div+css无疑能提高技术人员的职场竞争力。

另外:table展示数据现在也常用div+ul替代。

9.请解释以下标签属性的作用:a标签的target、img标签的alt和title、radio的name、select的size

<a>标签的target属性有哪几种:_blank,_self,_parent等,指定呈现目标页面的窗体

<img/>标签的alt属性,图片不存在的文字;title属性,tooltip效果

<input type=”radio”/> 的name属性:分组

<select>的size属性,控制多行

10.请谈谈对position的static、relative、absolute、fixed几个值的理解

static:

默认情况的值,即正常自左而右,自上而下的堆砌的文档流。

relative

相对定位:原来所在文档流中的位置一直保持占据着。

设定left等参数的时候,相当于在原有文档流的位置基础之上偏移。

absolute:

绝对定位,那么该元素就脱离了文档流,可以设置其绝对位置。

离当前元素最近的定位方式为fixed,absolute,relative的祖先元素的左上角。

在滚动条改变时,层的位置会跟着滚动条一起改变。

fixed:

固定定位,参照位置是浏览器窗口的左上角。设置fixed定位后,该元素就脱离了文档流。

浏览器窗口大小变化时,fixed层的位置会重新调整,以适应样式中定义的位置。

如有滚动条,滚动条值发生变化时,fixed层的位置始终保持与浏览器窗口固定的位置。

11.请问您使用过哪些Js/Jquery的插件,请尽可能的说出您知道的。

CKEdit(富文本编辑器)

HighCharts(图表插件)

Jquery Validate (输入合法验证)

Jquery ShowCover(遮罩层) dialog(弹出层)

Jquery datepicker、progressbar、 Zoom 

12.Jquery中appendTo传递的是对象本身还是对象的副本?是否可以将一个对象多次使用appendTo给不同的元素。

Jquery的appendTo的使用需要注意什么。(对象引用传值)

多次使用appendTo将对象附加其他元素下,只会保留最后一次。

 

(版权所有:请勿转载 ,请勿用于任何商业用途!)