asp.net 面试基础题
WebSite和WebApplication的区别
1)当改变后台代码时,WebApplication需重启浏览器或者重新生成解决方案,而WebSite则不用;
2)WebSite没有Solution,没有namespace,不利于工程化开发。
HTTP的工作方式是什么?
1)客户端提交表单请求处理 Request
2)服务器端处理程序进行处理 Handle
3)服务端相应 Response
注意:提交到服务器的表单元素一定要添加name属性,因为服务器只认name,这一点和Jquery、DOM不一样,它们只会识别id.
Form的method属性指定表单的提交方式的问题 *
1)get(默认值)是通过地址栏的URL显式地传递表单;
post传递的表单值是隐藏在Http报文中,URL地址栏中是看不到的;
2)get传递值的数量是有限的,会受到地址栏长度的影响,好像最大是2K个字节,而post则没有限制。
3)post当刷新页面时,会有浏览器提示重新提交表单的对话框,而get则没有。
DIV中的内容不会提交给服务器?
只有给div设置了name属性的value值(如input、textarea、select等)才会被提交到服务器
ViewState原理
1)隐藏一些字段,用来存放那些没有value属性值的控件
2)因为http是无状态的协议,所以当页面发生改变的时候,会用viewstate保持页面上一次的状态。
3)例如:label控件被浏览器渲染成<span>标记,所以label的值就存在了viewstate中;
同理,textbox控件也被浏览器渲染成了input标记,TextBox中的值不用存,因为TextBox本质上就是input,input自己会提交给服务器,不需要隐藏字段。
4)可以通过ViewStateDecoder工具查看viewstate中的容的本来面目。
状态信息保存在隐藏字段中(viewstate)的优缺点
1)加大网站流量
2)降低访问速度
3)机密数据放到表单中会有数据欺骗等安全性问题(如网银等)。*
所有的后台程序实现的都是IhttpHandler接口
Cookie和session都是用来存放当前客户端的相关数据,
cookie存放在客户端,session存放在服务器端。
注意:session中不能保存太大的数据,它存的是object类型的数据,所以使用时需要进行类型装换。
http请求报文时,页面中的每类元素,如img、js、css等文件都是单独请求的。这一点可以通过开发者工具或者大名鼎鼎的Firebug查看。
*http是"无状态"的协议,所以它不会记得上一次做过什么,不会记得上次给浏览器发过**信息,所以当它下次重新请求时,img、js、css等文件会重新发来header信息。
get是通过url地址栏传送的参数显式地传递的,如: ?a=123&b=abc
post是不通过url传值的,但是它在后台悄悄地传送数据 ,用__VIEWSTATE隐式地传送。
HTTP各种状态码 含义
1)200系列,表示请求成功,OK
2)300系列,如307,表示服务器重定向,需要对请求做进一步处理;
3)400系列,如404,表示页面未找到,file not found.
4)500系列,表示内部服务器错误。
后台写删除按钮提交事件是,要在Button控件中的OnClientClick属性中加上
<input type="submit" name="delete" value="删除" OnClientClick="return confirm('确定要删除吗?')" />
可以在客户端提示友好地操作者,以免进行不必要的删除。
127.0.0.0是回环地址,表示访问本机,不经过网卡,无法在外地访问,别名为localhost。
0.0.0.0 表示任意IP,AnyIP.
将Html、js转换为普通一对一字符
HttpUtility.HtmlEncoder(string s) // 转换为特殊字符,例如:小于号<转为< 大于号> 转化为> 空格符转换为
/表示网站的根目录;
..表示上级目录;
.表示当前目录;
~特殊路径,只用于服务器控件中,表示从应用的根目录开始定义。
将虚拟路径转化为全路径,绝对路径
VirtualPathUtility,ToAblolute("~/a/b.html"); // 转换为 /WebSite/a/b.html
服务端控件必须用post方法提交form。
可以利用ClientID获取客户端控件的ID,
getElementById('<% =TextBox1.ClientID %>');
并不是每个服务端控件的ID和客户端的控件ID都一样,例如:在用户自定义控件(WebUserContrl.ascx)中服务端控件的ID会和客户端的ID不一样。
服务端控件label会在客户端渲染成<span>, 如果设置AssociateControlID属性为TextBox1,在客户端则会渲染成 <label for="TextBox1" . . ./ >,实现关联控件获得焦点。
Literal控件在客户端什么都不渲染,以纯文本的形式展现。
当设置其Mode属性为EnCode时,该控件会自动实现HttpUtility.HtmlEncoder(string s)转换,有时候很方便,同时可以避免XXS攻击。
TextBox控件
1)设置TextMode属性为SingleLine,会渲染成 <input type="text" />
2)设置TextMode属性为MultiLine,会渲染成 <textarea />
3)设置TextMode属性为Pasword,会渲染成 <input type="password" />
4)当设置AutoPostBack 属性为true时,用户焦点离开TextBox就会造成页面的post;提交表单时最好用__doPostBack的js方法。
RadioButton控件会在客户端渲染成<input type="radio" />,和服务端控件一样,也可以通过GroupName属性尽心分组。
Button控件会在客户端渲染成<input type="submit" />
LinkButton控件会在客户端渲染成<a href="javascript:__doPostBack" />
ImageButton控件是一个可以设置ImageUrl的Button,它会在客户端渲染成<input type="image" />
相同点:都可以把OnClientClick属性设置为"return confirm('确定要删除吗?')";
Panel控件会在客户端渲染成DIV,如果设置了它的GroupingText属性,则会渲染成<fieldset><legend>这样设置</legend></fieldset>,也就是GroupBox的效果。
Hyperlink控件会在客户端渲染成<a />标记。
可以设置属性NavigateUrl=""和Target="",若设置ImageUrl属性,则会渲染成<a href=""><image /></a>.
FileUpload控件会在客户端渲染成<input type="file">.
一般上传文件的代码这样写
if(FileUpload1.hasFile())
{
string uploadPath = Server.MapPath("~/upload/");
FileUpload1.SaveAs(uploadPath + FileUpload1.FileName);
}
总的来说,控件共分为三种:
1)HTML控件
2)ASP.NET服务端控件
3)有runat="server"的HTML控件
验证控件
1)RequireFieldValidator:必填字段,可进行服务端的非空校验,常用属性有:ErrorMessage, ControlToValidate, InitialValue. 在服务端验证时可以这样写if(this.IsValide){…}
2)RangeValidator:判断值是否在给定的最大值(MaximumValue)和最小值(MinimumValue)之间,可比较的数据类型有string, int , currency.
3)CompareValidator:用于比较两个值的关系是否满足要求的或者指定类型的数据。比较操作符有:<,>,=,!= .常用属性:ValueToCompare:与哪个值比较,ControlToCompare:与哪一个控件进行比较。
4)RegularExpressionValidator:用于验证数据满足的正则表达式。常用属性:ValidationExpression:定义正则表达式。
5)CustomValidator:用于特殊情况的自定义验证。
6)注意:(1)几乎所有的验证控件都得在客户端和服务端进行校验。
(2)给验证控件进行分组:ValidationGroup
(3)是否触发校验事件:CauseValidation:false,表示不触发验证事件
(4)修改验证控件是否占位:Display设置成Dynamic或者Static.
数据绑定
1)例如:<ItemTemplate><%#Eval("Id")%></ ItemTemplate >
2)Repeater数据控件用于绑定数据的遍历显示,当然,我们也可以用foreach语句手写。
3)Repeater控件的其它模板
(1)<AlternatingItemTemplate>设置隔行的不同风格,也就是偶数行的风格。
(2)<HeadTemplate>和<FootTemplate>头部尾部的模板,分别显示在数据的前面和后面,比如可防止<table></table>或者<ul></ul>等。
(3)<SeperatorTemplate>,两项数据之间的分隔符。
数据库中只存放图片的路径,ResolveClientUrl("~/images/ + url");
放在<ItemTemplate>模板中的控件无法直接在后台c#代码中操作,得先通过ID找到控件,如:e.Item.FindControl("txtName");
Repeater控件一般只用来展示数据,而ListView控件用来实现增删改产操作更方便一些。
Eval()是单向绑定,用于读取数据库中的数据;Bind()是双向绑定,即能把数据库中的值读到页面上,也能把用户的值传到数据库中。
ListView控件的注意事项:
(1)自动生成的样式要提炼到css样式中,不要做成内联式的;
(2)<ItemTemplate>里面一般没必要用<asp:Label>控件展示只读数据,直接输出就可以。
(3)<LayoutTemplate>中必须有一个id为itemPlaceHolder的服务端控件。将表头自动生成的英文字段改成汉语,没用的ID要删除,没必要展示出来。
在ItemDataBound事件中应注意:
(1)判断数据行的类型 e.Item.ItemType == ListViewItemType.DataRow
(2)取得对应的RowView ListViewDataItem lvDataItem = (ListViewDataItem)e.Item; DataRowView rowView = (DataRowView)lvDataItem.DataItem;
(3)在用FindControl时应注意 AlternatingItemTemplate问题。
ListView和GridView的区别
(1)GridView只能渲染成Table
(2)ListView既能渲染成Table,也能渲染成<ul><li>
DropDownList控件绑定SelectedValue属性,如:SelectedValue="<%#Eval('txtName')%>"
如果在页面前端不涉及增删改查等交互信息的纯展示页面,可以禁用ViewState,有两种方法:
(1)页面整体禁用ViewState:在顶部<page>标签内加EnabelViewState="false"
(2)对指定控件禁用ViewState:在该控件的属性上添加EnabelViewState="false"
网站性能调优
(1)缓存Cache是网站性能调优的第一个手段;
(2)索引Index是数据库性能调优的第一个手段;
设置页面缓存的方法:在页面头部区域<page>中设置<%@ OutputCache Duration="20" VaryByParam="none"(这项是可变的,可设置为参数:id;num;age等)%>
数据缓存的设置方法,针对ObjectDataSource设置属性,
(1)EnableCaching="True"
(2)CacheDuration="20"
1.!ispostback() 是否是第一次加载
2.所有类型基类 Object
3.config 链接字符串
<connectionStrings>
<add name="con" connectionString="Data Source=ip地址;Initial Catalog=数据库名称;User ID=用户名;PassWord=密码" providerName="System.Data.SqlClient"/>
</connectionStrings>
4.ADO.NET5个基本对象
5.OA 办公自动化 ERP企业资源管理 WMS仓库管理系统 MIS信息管理系统 crm客户关系管理
6.页面传值的方式
get 查
post 改
put 增
delete 删
7.class的默认访问类型 internal
8.ADO.NET中的五个主要对象
Connection 物件
Connection 对象主要是开启程序和数据库之间的连结。 没有利用连结对象将数据库打开,是无法从数据库中取得数据的。这个物件在ADO.NET 的最底层,我们可以自己产生这个对象,或是由其它的对象自动产生。
Command 物件
Command 对象主要可以用来对数据库发出一些指令,例如可以对数据库下达查询、新增、修改、删除数据等指令,以及呼叫存在数据库中的预存程序等。这个对象是架构在Connection 对象上,也就是Command 对象是透过连结到数据源
DataAdapter 物件
DataSetCommand 对象主要是在数据源以及DataSet 之间执行数据传输的工作,它可以透过Command 对象下达命令后,并将取得的数据放入DataSet 对象中。这个对象是架构在Command对象上,并提供了许多配合DataSet 使用的功能。在Beta 2 版中DataSetCommand 物件会更名为DataAdapter。
DataSet 物件
DataSet 这个对象可以视为一个暂存区(Cache),可以把从数据库中所查询到的数据保留起来,甚至可以将整个数据库显示出来。DataSet 的能力不只是可以储存多个Table 而已,还可以透过DataSetCommand 对象取得一些例如主键等的数据表结构,并可以记录数据表间的关联。DataSet 对象可以说是ADO.NET 中重量级的对象,这个对象架构在DataSetCommand 对象上,本身不具备和数据源沟通的能力;也就是说我们是将DataSetCommand 对象当做DataSet 对象以及数据源间传输数据的桥梁。
DataReader 物件
当我们只需要循序的读取数据而不需要其它操作时,可以使用DataReader 对象。DataReader对象只是一次一笔向下循序的读取数据源中的数据,而且这些数据是只读的,并不允许作其它的操作。因为DataReader 在读取数据的时候限制了每次只读取一笔,而且只能只读,所以使用起来不但节省资源而且效率很好。使用DataReader 对象除了效率较好之外,因为不用把数据全部传回,故可以降低网络的负载。
9./// 说明注释
大题
1.string stringbuilder区别
string 重复申请内存
stringbuilder 扩展内存
2.四种访问修饰符
public同一程序集中的任何其他代码或引用该程序集的其他程序集都可以访问该类型或成员。
private只有同一类或结构中的代码可以访问该类型或成员。
protected只有同一类或结构或者派生类中的代码可以访问该类型或成员。
internal同一程序集中的任何代码都可以访问该类型或成员,但其他程序集中的代码不可以。
protected internal同一程序集中的任何代码或其他程序集中的任何派生类都可以访问该类型或成员。
3.viewstate ,Session, cookie
ViewState只存在当前页面
Session 保存在服务期端,在内在的变量地址不同,每个用户都有一个,不同界面都可以获取,但是内存空间有限,容易丢失。
cookie 保存在客户端。其它与Session相同。
常用sql语句
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
DELETE FROM 表名称 WHERE 列名称 = 值
SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern
SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...)
SELECT DISTINCT 列名称 FROM 表名称
DROP TABLE 表名称
asp.net 面试基础题的更多相关文章
- 一些iOS面试基础题总结
一些iOS面试基础题总结 目录 多线程 AutoLayout objc_msgSend Runtime 消息转发 Category NSObject 与 objc_class Runloop Auto ...
- 前端面试基础题:Ajax原理
Ajax 的原理简单来说是在⽤户和服务器之间加了—个中间层( AJAX 引擎),通过XmlHttpRequest 对象来向服务器发异步请求,从服务器获得数据,然后⽤ javascrip t 来操作 D ...
- java面试基础题(三)
程序员面试之九阴真经 谈谈final, finally, finalize的区别: final:::修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此 ...
- C#面试基础题1
1.简述 private. protected. public. internal 修饰符的访问权限.(C++中没有internal) private : 私有成员, 在类的内部才可以访问 ,也就是类 ...
- Linux面试基础题-2
继续我们这面试系列,在这篇文章里我们给出了10个问题.这些问题或者是在以后的文章中出现的问题不一定在面试中会被问到.然而通过这些文章我们呈现出的是一个交互的学习平台,这必将会对你有很大的帮助. 自本系 ...
- iOS 面试基础题
1.UIWindow和UIView和 CALayer 的联系和区别? 答:UIView是视图的基类,UIViewController是视图控制器的基类,UIResponder是表示一个可以在屏幕上响应 ...
- java面试基础题------》抽象类和接口有什么异同
划重点!!!! 1.抽象类(abstract class)和接口(interface)有什么异同? 相同点 * 都不能被直接实例化,都可以通过继承实现其抽象方法. * 都是面向抽象编程的技术基础,实现 ...
- .net 面试基础题
Reference Link:http://www.yjbys.com/bbs/326026.html const关键字用来声明编译时常量,readonly用来声明运行时常量 密封类不能同时为抽象类 ...
- 测试题1 IOS面试基础题
免责声明:答案来自本人,错误之处敬请谅解 1.用变量a写出以下定义 a.一个整型数 int a=5; b.一个指向整型数的指针 int *a; c.一个指向指针的指针,它指向的指针是指向一个整 ...
随机推荐
- oracle中char,vchar,vchar2的区别与联系
1.char是固定长度的,例如你定义某一列类型为char(20).那么即便你插入"abcde"5个字节,数据库也会在后面自动加上15个字节(可能为空格),以补足二十个字节. 2.v ...
- CentOS 7 之安装Mono&MonoDevelop
之前在园子里看过一篇文章说的是在CentOS 7上安装MonoDevelop的,一直想照着弄一遍都没有弄,今天深圳外面下暴雨,就在家里弄一下这个吧,以后也试着在Linux上面写写C#玩玩.这一试,还真 ...
- sprintf mfc
sprintf(d,"char is %d",wparam);wparam以%d形式存入d中 并不是输出到屏幕上!
- jq实现鼠标经过图片翻滚效果
短短的十多行代码就实现了一个酷炫的图片翻滚代码,要实现这个效果并不难,只要思路对了,一切都好办,不多说了,直接上代码看效果! html结构: <ul class="list" ...
- ECSTORE 关于FILTER条件所代表的含义
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 //以下为ecstore filter条件所代表的含义 $FilterArray= array( ' ...
- mysql innerjoin left join right join 解析
毕业半年多时间,一直都没有学习好join 之前一直是先从一个表里面取出数据然后,然后再从另外一个表里面取出数据,然后再写一个函数循环格式化数据. 还是先写一下学到的东西吧! 转载自w3school ...
- Linux为用户设定环境变量
今天在做从将MySQL中的数据同步到ES的时候,当启动脚本程序报错: Exception in thread "main" java.lang.UnsupportedClassVe ...
- jdk8永久代从方法区移除的验证
/*** 测试使用jdk8中是否仍然可以使用永久代* jvm options * -Xms20m -Xmx20m -Xmn10m -XX:PermSize=10m -XX:MaxPermSize=10 ...
- CentOS安装MySQL问题汇总
遇到的错误 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) denied for ...
- XP系统显示文件夹选项属性被删除解决注册表
Title:XP系统显示文件夹选项属性被删除解决注册表 -- 2010-11-18 13:17 昨天中了个毒窝,还有恶意软件,十分不爽. 开始恶意软件把显示所有文件夹给删除了,去找了个注册表,重新注册 ...