最具参考价值Asp.Net面试题目 参考答案
一、笔试题
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将对象附加其他元素下,只会保留最后一次。
(版权所有:请勿转载 ,请勿用于任何商业用途!)