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) // 轉換爲特殊字符,例如:小於號<轉爲&lt; 大於號> 轉化爲&gt; 空格符轉換爲&nbsp;
/表示網站的根目錄;
..表示上級目錄;
.表示當前目錄;
~特殊路徑,只用於服務器控件中,表示從應用的根目錄開始定義。
將虛擬路徑轉化爲全路徑,絕對路徑
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方法。javascript

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"css

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 的最底層,咱們能夠本身產生這個對象,或是由其它的對象自動產生。html

Command 物件
Command 對象主要能夠用來對數據庫發出一些指令,例如能夠對數據庫下達查詢、新增、修改、刪除數據等指令,以及呼叫存在數據庫中的預存程序等。這個對象是架構在Connection 對象上,也就是Command 對象是透過連結到數據源前端


DataAdapter 物件
DataSetCommand 對象主要是在數據源以及DataSet 之間執行數據傳輸的工做,它能夠透過Command 對象下達命令後,並將取得的數據放入DataSet 對象中。這個對象是架構在Command對象上,並提供了許多配合DataSet 使用的功能。在Beta 2 版中DataSetCommand 物件會改名爲DataAdapter。java

DataSet 物件
DataSet 這個對象能夠視爲一個暫存區(Cache),能夠把從數據庫中所查詢到的數據保留起來,甚至能夠將整個數據庫顯示出來。DataSet 的能力不僅是能夠儲存多個Table 而已,還能夠透過DataSetCommand 對象取得一些例如主鍵等的數據表結構,並能夠記錄數據表間的關聯。DataSet 對象能夠說是ADO.NET 中重量級的對象,這個對象架構在DataSetCommand 對象上,自己不具有和數據源溝通的能力;也就是說咱們是將DataSetCommand 對象當作DataSet 對象以及數據源間傳輸數據的橋樑。正則表達式

DataReader 物件
當咱們只須要循序的讀取數據而不須要其它操做時,可使用DataReader 對象。DataReader對象只是一次一筆向下循序的讀取數據源中的數據,並且這些數據是隻讀的,並不容許做其它的操做。由於DataReader 在讀取數據的時候限制了每次只讀取一筆,並且只能只讀,因此使用起來不但節省資源並且效率很好。使用DataReader 對象除了效率較好以外,由於不用把數據所有傳回,故能夠下降網絡的負載。
9./// 說明註釋sql


大題
1.string stringbuilder區別
string 重複申請內存
stringbuilder 擴展內存數據庫

2.四種訪問修飾符
public同一程序集中的任何其餘代碼或引用該程序集的其餘程序集均可以訪問該類型或成員。
private只有同一類或結構中的代碼能夠訪問該類型或成員。
protected只有同一類或結構或者派生類中的代碼能夠訪問該類型或成員。
internal同一程序集中的任何代碼均可以訪問該類型或成員,但其餘程序集中的代碼不能夠。
protected internal同一程序集中的任何代碼或其餘程序集中的任何派生類均可以訪問該類型或成員。c#

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 patternSELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...)SELECT DISTINCT 列名稱 FROM 表名稱DROP TABLE 表名稱

相關文章
相關標籤/搜索