1、請你簡單的說明數據庫建立索引的優缺點
使用索引可以加快數據的查詢速度,不過由於數據插入過程中會建索引,所以會降低數據的插入、更新速度,索引還會占磁盤空間。
2、什么是WEB服務控件?使用WEB服務控件有那些優勢、劣勢?
web服務控件就是可以在服務器執行的控件,優勢在於可以回傳數據(ViewState),帶有事件驅動(doPostBack),簡化了Html標簽的使用,使得開發ASP.net程序可以像開發Winform程序一樣簡單。Web服務控件最終還是被渲染(Render)為Html標簽。使用WEB服務控件的劣勢是會生成一些無用的屬性、ViewState等,不利於SEO,一般在內網系統或者互聯網系統的后台中使用WEB服務控件。如果沒有復雜的服務器交互動作,就不用Web服務器控件。runat=server的HTML控件有什么特點:路徑不用程序員解析,可以使用“~”來虛擬路徑。
3、下面程序的執行結果是什么?
int i = 10; if (i <=0); Console.WriteLine("i必須大於0"); Console.WriteLine("ok");
答案:
i必須大於0
ok
解答:注意if (i <=0)后面的“;”,由於有了“;”,所以Console.WriteLine("i必須大於0")不再是和if一起的一部分,而是獨立的語句。for循環也是如此。
4、下面程序的執行結果是什么?
static void Main(string[] args) { Console.WriteLine(Calc()); Console.ReadKey(); } static int Calc() { int i = 0; try { return i; } finally { Console.WriteLine("finally"); i++; } }
答案:
finally
0
解答:return先執行,finally后執行,所以return的值是沒有i++之前的0。注意並不是return的時候函數真的就“返回、執行結束”了,return只是標記函數的返回值是0,標記完了還會執行finally中的代碼,只有finally中的代碼執行完成后函數才真正的返回。
5、在下述選項時,沒有構成死循環的程序是 (C)
A.int i=100;while (1) { i=i%100+1; if (i>100) break; }
B.for (;;);
C.int k=1000; do { ++k; }while(k>=10000);
D.int s=36; while (s);--s;
6、下列哪個是和數據庫訪問技術關系不大的技術(C)
A、SQLHelper
B、EnterPrise Library
C、AppDomain
D、Linq
7、下列哪些說法是錯誤的(AC)
A、將bmp格式的文件修改為jpg是修改圖片格式最簡單的方法
B、將QQ動態表情顯示在網頁上用gif格式比較好
C、將bmp格式的圖片放到網頁中可以優化網站速度
D、png格式用在網頁中可以實現透明的效果。
答案:A、C。A錯誤是因為修改文件的后綴並沒有真的修改文件的格式,要使用Photoshop、mspaint等圖片處理工具進行轉換才可以。C錯誤是因為在網頁中不能使用bmp圖片。
8、從以下簡寫中任選一個簡單描述
OA(Office Automation):辦公自動化
MIS(Managment Information system):管理信息系統
HRM(Human Resource Managment):人力資源管理,包括員工管理、薪資管理、入職管理、離職管理、報銷管理、請假管理等
CRM(Customer Relation Managment):客戶關系管理系統,包括客戶管理、客戶關懷、客戶回訪、投訴管理、咨詢管理、報修管理等
KM(Knowledge Managment):知識管理
9、下面程序的執行結果是什么?
public struct Point { public int x; public int y; public Point(int x, int y) { this.x = x; this.y = y; } } Point p1 = new Point(100, 100); Point p2 = p1; p1.x = 200; Console.WriteLine("{0},{1}", p1.x, p2.x);
答案:
200,100
解答:結構體是復制傳遞的。
10、開放式問題:如果程序連不上SQLServer數據庫服務器服務器,你會怎么排除這個故障?
參考解答:首先ping一下服務器IP,看是否能夠ping通,如果不能ping通,則看是否網絡有問題;如果能ping通,再telnet一下服務器的1433端口,看是否能夠連通;如果不能連通則可能是SQLServer服務停掉了或者是服務器上的防火牆封掉了1433端口;如果能連通再檢查是不是本地程序的問題、驅動的問題。
11、Http狀態碼各是什么意思。
301 :重定向
404 :頁面不錯在
500:服務器內部錯誤
12、MVC模式的優缺點
MVC(Model-View-Controller)把交互系統的組成分解成模型、視圖、控制器三種部件
mvc的優點:
1.通過把項目分成model view和controller,使得復雜項目更加容易維護。
2.沒有使用view state和服務器表單控件,可以更方便的控制應用程序的行為
3.應用程序通過controller來控制程序請求,可以提供豐富的url重寫。
4.對單元測試的支持更加出色
5.在團隊開發模式下表現更出眾
MVC的不足:
(1)增加了系統結構和實現的復雜性。對於簡單的界面,嚴格遵循MVC,使模型、視圖與控制器分離,會增加結構的復雜性,並可能產生過多的更新操作,降低運行效率。
(2)視圖與控制器間的過於緊密的連接。視圖與控制器是相互分離,但確實聯系緊密的部件,視圖沒有控制器的存在,其應用是很有限的,反之亦然,這樣就妨礙了他們的獨立重用。
(3)視圖對模型數據的低效率訪問。依據模型操作接口的不同,視圖可能需要多次調用才能獲得足夠的顯示數據。對未變化數據的不必要的頻繁訪問,也將損害操作性能。
13、什么是Viewstate?它有什么作用?
ViewState用來保存頁面狀態,就是說提交之后我們還可以看到文本框里面的內容就是ViewState保存的功勞。
ViewState只維護當前頁面的狀態,不同頁面之間不能共享,Session可以。
ViewState你可以理解為一個隱藏控件。
14、ASP.Net頁面生命周期簡單描述
每個頁面的生命周期為用戶的每一次訪問,也就是說每一次客戶端與服務器之間的一個往返過程.全局變量的生命周期在此之間.
1. Page_Init();
2. Load ViewState and Postback data;
3. Page_Load();
4. Handle control events;
5. Page_PreRender();
6. Page_Render();
7. Unload event;
8. Dispose method called;
15、存儲過程和sql語句的優缺點
優點:
1.提高性能,減少網絡傳輸,節約時間 。
2.減少網絡流量 存儲過程位於服務器上,調用的時候只須傳遞存儲過程的名稱以及參數,不用每次訪問都傳遞很長的sql 語句。
4.安全性 減少sql 注入式攻擊。
5.可維護性高 更新存儲過程通常比更改、測試以及重新部署程序集需要較少的時間和精力。
缺點:
1.交互性差 。
2.可移植性差
16、什么時候使用抽象類,什么時候用接口
接口用於規范,抽象類用於共性。
接口中只能聲明方法,屬性,事件,索引器。而抽象類中可以有方法的實現,也可以定義非靜態的類變量。抽象類是類,所以只能被單繼承,但是接口卻可以一次實現多個。抽象類可以提供某些方法的部分實現,接口不可以.抽象類的實例是它的子類給出的。接口的實例是實現接口的類給出的。再抽象類中加入一個方法,那么它的子類就同時有了這個方法。而在接口中加入新的方法,那么實現它的類就要重新編寫(這就是為什么說接口是一個類的規范了)。接口成員被定義為公共的,但抽象類的成員也可以是私有的、受保護的、內部的或受保護的內部成員(其中受保護的內部成員只能在應用程序的代碼或派生類中訪問)。此外接口不能包含字段、構造函數、析構函數、靜態成員或常量。
17、C#中的堆和棧
棧(Stack)由系統管理生存期,存儲代碼執行和調用路徑,執行或調用完畢即從棧中清除。
堆(Heap)中保存值和對象,調用完畢之后依然存在,由垃圾回收器查找棧中有無指向該值或對象的引用,無則從堆中刪除。
18、C# ref與out區別:
1、使用ref型參數時,傳入的參數必須先被初始化。對out而言,必須在方法中對其完成初始化。
2、使用ref和out時,在方法的參數和執行方法時,都要加Ref或Out關鍵字。以滿足匹配。
3、out適合用在需要retrun多個返回值的地方,而ref則用在需要被調用的方法修改調用者的引用的時候。
19、你對泛型了解嗎?簡單說明一下泛型的有什么好處?
泛型:通過參數化類型來實現在同一份代碼上操作多種數據類型。利用“參數化類型”將類型抽象化,從而實現靈活的復用
好處是——類型安全和減少裝箱、拆箱。提高性能、類型安全和質量,減少重復性的編程任務
20、new有幾種用法
第一種:實例化對象,new Class();
第二種:覆蓋基類方法,public new XXXX(){}
第三種:new 約束指定泛型類聲明中的任何類型參數都必須有公共的無參數構造函數。
21、Session有什么重大BUG,微軟提出了什么方法加以解決?
答:iis中由於有進程回收機制,系統繁忙的話Session會丟失,可以用Sate server或SQL Server數據庫的方式存儲Session不過這種方式比較慢,而且無法捕獲Session的END事件
22、<%# %> 和 <% %> 有什么區別?
<%# %>表示綁定的數據源 <% %>是服務器端代碼塊 常量
23、DateTime.Parse(myString); 這行代碼有什么問題?
有問題,當myString不能滿足時間格式要求的時候,會引發異常,建議使用DateTime.TryParse()
24、為什么不提倡catch(Exception) ,catch(Exception e){throw e;}和catch(Exception e){throw;}的區別,error和exception區別
try..catch在出現異常的時候影響性能; 應該捕獲更具體得異常,比如IOExeception,OutOfMemoryException等
第一個將發生的異常對象拋出,另一個只是拋出異常,並沒有拋出原異常對象
error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能處理這樣的情況。
exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況。
25、GET與POST的區別
在FORM提交的時候,如果不指定Method,則默認為GET請求,Form中提交的數據將會附加在url之后,以?分開與url分開。字母數字字符原樣發送,但空格轉換為“+“號,其它符號轉換為%XX,其中X
為該符號以16進制表示的ASCII(或ISO Latin-1)值。GET請求請提交的數據放置在HTTP請求協議頭中,而POST提交的數據則放在實體數據中;
在使用 POST 方法的情況下,傳輸數據時不會將數據作為 URL 的一部分;它們會作為一個獨立的實體來傳輸。因此,POST 方法更安全,你也可以用這個方法傳輸更多的數據。而且用 POST 傳輸的數
據不一定要是文本,用 GET 方法傳輸的卻一定要是文本。
(1)get是從服務器上獲取數據,post是向服務器傳送數據。
(2)在客戶端,Get方式在通過URL提交數據,數據在URL中可以看到;POST方式,數據放置在HTML HEADER內提交。
(3)對於get方式,服務器端用Request.QueryString獲取變量的值,對於post方式,服務器端用Request.Form獲取提交的數據。
(4)GET方式提交的數據最多只能有1024字節,而POST則沒有此限制。
(5)安全性問題。正如在(1)中提到,使用 Get 的時候,參數會顯示在地址欄上,而 Post 不會。所以,如果這些數據是中文數據而且是非敏感數據,那么使用 get;如果用戶輸入的數據不是中文字符而且包含敏感數據,那么還是使用 post為好。
26、Bind和Eval函數的區別
綁定表達式 <%# Eval("字段名") %> <%# Bind("字段名") %>
1. Eval 單向綁定:數據是只讀的
Bind 雙向綁定:數據可以更改,並返回服務器端,服務器可以處理更改后的數據,如存入數據庫.
2.當對次表達式操作時候,必須用Eval 如<%# Eval("字段名").ToString().Trim() %>
3. 綁定控件的屬性時要用Bind,而Eval則是其它一些。 例如
<asp:TextBox ID="First" RunAt="Server" Text='<%# Bind("FirstName") %>' /> <td><%# Eval("ProductID") %></td>
27、Server.UrlEncode、HttpUtility.UrlDecode的區別
Server.UrlEncode的編碼方式是按照本地程序設置的編碼方式進行編碼的,HttpUtility.UrlEncode是默認的按照.net的utf-8格式進行編碼的。
28、如何實現連接池
確保你每一次的連接使用相同的連接字符串(和連接池相同);只有連接字符串相同時連接池才會工作。如果連接字符串不相同,應用程序就不會使用連接池而是創建一個新的連接。
優點
使用連接池的最主要的優點是性能。創建一個新的數據庫連接所耗費的時間主要取決於網絡的速度以及應用程序和數據庫服務器的(網絡)距離,而且這個過程通常是一個很耗時的過程。而采用數據庫連接池后,數據庫連接請求可以直接通過連接池滿足而不需要為該請求重新連接、認證到數據庫服務器,這樣就節省了時間。
缺點
數據庫連接池中可能存在着多個沒有被使用的連接一直連接着數據庫(這意味着資源的浪費)。
技巧和提示
1.當你需要數據庫連接時才去創建連接池,而不是提前建立。一旦你使用完連接立即關閉它,不要等到垃圾收集器來處理它。
2.在關閉數據庫連接前確保關閉了所有用戶定義的事務。
3.不要關閉數據庫中所有的連接,至少保證連接池中有一個連接可用。如果內存和其他資源是你必須首先考慮的問題,可以關閉所有的連接,然后在下一個請求到來時創建連接池。
29、提高.NET的性能
1 使用異步方式調用Web服務和遠程對象
只要有可能就要避免在請求的處理過程中對Web服務和遠程對象的同步調用,因為它占用的是的ASP.NET 線程池中的工作線程,這將直接影響Web服務器響應其它請求的能力。
2 使用適當的Caching策略來提高性能
3 判斷字符串,不要用""比較。
//避免
if(strABC!=null && strABC!="")
{}
//推薦
if(!strABC.IsNullOrEmpty)
{}
4 頁面優化
5 用完馬上關閉數據庫連接
6 盡量使用存儲過程,並優化查詢語句
7 只讀數據訪問用SqlDataReader,不要使用DataSet
……….
30、簡述你對XML Web Service的原理的認識?
答:利用SOAP(簡單對象訪問協議)在http上執行遠程方法的調用,也可以使用WSDL(Web服務描述語言)來完成完整的描述Web服務,然后用UDDI注冊各個服務提供商提供的服務,以便共享他們。