ASP.NET (C#) 面试笔试题目收集
1. 簡述 private、 protected、 public、 internal 修飾符的訪問權限。
答 . private : 私有成員, 在類的內部才可以訪問。
protected : 保護成員,該類內部和繼承類中可以訪問。
public : 公共成員,完全公開,沒有訪問限制。
internal: 在同一命名空間內可以訪問。
2 .列舉ASP.NET 頁面之間傳遞值的幾種方式。
答. 1.使用QueryString, 如....?id=1; response. Redirect()....
2.使用Session變量
3.使用Server.Transfer?
4.C#中的委托是什么?事件是不是一種委托?
答 : 委托可以把一個方法作為參數代入另一個方法。
委托可以理解為指向一個函數的引用。
是,是一種特殊的委托
5.override與重載的區別
答 :override 與重載的區別。重載是方法的名稱相同。參數或參數類型不同,進行多
次重載以適應不同的需要
Override 是進行基類中函數的重寫。為了適應需要。
6.如果在一個B/S結構的系統中需要傳遞變量值,但是又不能使用Session、
Cookie、Application,您有幾種方法進行處理?
答 : this.Server.Transfer
Response. Redirect()---QueryString?
9.描述一下C#中索引器的實現過程,是否只能根據數字進行索引?
答:不是??梢杂萌我忸愋?。
11.用.net做B/S結構的系統,您是用幾層結構來開發,每一層之間的關系以及為
什么要這樣分層?
答:一般為3層
數據訪問層,業務層,表示層。
數據訪問層對數據庫進行增刪查改。
業務層一般分為二層,業務表觀層實現與表示層的溝通,業務規則層實現用戶密
碼的安全等。
表示層為了與用戶交互例如用戶添加表單。
優點: 分工明確,條理清晰,易于調試,而且具有可擴展性。
缺點: 增加成本。
13.什么叫應用程序域?
答:應用程序域可以理解為一種輕量級進程。起到安全的作用。占用資源小。
14.CTS、CLS、CLR分別作何解釋?
答:CTS:通用語言系統。CLS:通用語言規范。CLR:公共語言運行庫。
15.什么是裝箱和拆箱?
答:從值類型接口轉換到引用類型裝箱。從引用類型轉換到值類型拆箱。
16.什么是受管制的代碼?
答:unsafe:非托管代碼。不經過CLR運行。
17.什么是強類型系統?
答:RTTI:類型識別系統。
18.net中讀寫數據庫需要用到那些類?他們的作用?
答:DataSet:數據存儲器。
DataCommand:執行語句命令。
DataAdapter:數據的集合,用語填充。
19.ASP.net的身份驗證方式有哪些?分別是什么原理?
答:10。Windwos(默認)用IIS...From(窗體)用帳戶....Passport(密鑰)
20.什么是Code-Behind技術?
答:代碼后植。
21.在.net中,配件的意思是?
答:程序集。(中間語言,源數據,資源,裝配清單)
22.常用的調用WebService的方法有哪些?
答:1.使用WSDL.exe命令行工具。
2.使用VS.NET中的Add Web Reference菜單選項
23..net Remoting 的工作原理是什么?
答:服務器端向客戶端發送一個進程編號,一個程序域編號,以確定對象的位置
。
24.在C#中,string str = null 與 string str = “” 請盡量使用文字或圖
象說明其中的區別。
答:string str = null 是不給他分配內存空間,而string str = "" 給它分配
長度為空字符串的內存空間。
25.請詳述在dotnet中類(class)與結構(struct)的異同?
答:Class可以被實例化,屬于引用類型,是分配在內存的堆上的,Struct屬于值類
型,是分配在內存的棧上的.
27.分析以下代碼,完成填空
string strTmp = "abcdefg某某某";
int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;
int j= strTmp.Length;
以上代碼執行完后,i= j=
答:i=13,j=10
28.SQLSERVER服務器中,給定表 table1 中有兩個字段 ID、LastUpdateDate,
ID表示更新的事務號, LastUpdateDate表示更新時的服務器時間,請使用一句
SQL語句獲得最后更新的事務號
答:Select ID FROM table1 Where LastUpdateDate = (Select MAX
(LastUpdateDate) FROM table1)
30.簡要談一下您對微軟.NET 構架下remoting和webservice兩項技術的理解以及
實際中的應用。
答:WS主要是可利用HTTP,穿透防火墻。而Remoting可以利用TCP/IP,二進制傳
送提高效率。
31.公司要求開發一個繼承System.Windows.Forms.ListView類的組件,要求達到
以下的特殊功能:點擊ListView各列列頭時,能按照點擊列的每行值進行重排視
圖中的所有行 (排序的方式如DataGrid相似)。根據您的知識,請簡要談一下您的
思路
答:根據點擊的列頭,包該列的ID取出,按照該ID排序后,在給綁定到ListView中。
?
33.寫出一條Sql語句:取出表A中第31到第40記錄(SQLServer,以自動增長的ID
作為主鍵,注意:ID可能不是連續的。
答:解1: select top 10 * from A where id not in (select top 30 id
from A)
解2: select top 10 * from A where id >(select max(id) from (select
top 30 id from A )as A)
34.面向對象的語言具有________性、_________性、________性
答:封裝、繼承、多態。
35.能用foreach遍歷訪問的對象需要實現 ________________接口或聲明
________________方法的類型。
答:IEnumerable 、 GetEnumerator。
36.GC是什么? 為什么要有GC?
答:GC是垃圾收集器。程序員不用擔心內存管理,因為垃圾收集器會自動進行管
理。要請求垃圾收集,可以調用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
37.String s = new String("xyz");創建了幾個String Object?
答:兩個對象,一個是“xyx”,一個是指向“xyx”的引用對象s。
?
39.啟動一個線程是用run()還是start()?
答:啟動一個線程是調用start()方法,使線程所代表的虛擬處理機處于可運行狀
態,這意味著它可以由JVM調度并執行。這并不意味著線程就會立即運行。run()
方法可以產生必須退出的標志來停止一個線程。
40.接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可
繼承實體類(concrete class)?
答:接口可以繼承接口。抽象類可以實現(implements)接口,抽象類是否可繼承
實體類,但前提是實體類必須有明確的構造函數。
41.構造器Constructor是否可被override?
答:構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載
Overloading。
42.是否可以繼承String類?
答:String類是final類故不可以繼承。
43.try {}里有一個return語句,那么緊跟在這個try后的finally {}里的code會
不會被執行,什么時候被執行,在return前還是后?
答:會執行,在return前執行。
44.兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句
話對不對?
答:不對,有相同的hash code。
45.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
答:switch(expr1)中,expr1是一個整數表達式。因此傳遞給 switch 和
case 語句的參數應該是 int、 short、 char 或者 byte。long,string 都不
能作用于swtich。
47.當一個線程進入一個對象的一個synchronized方法后,其它線程是否可進入此
對象的其它方法?
不能,一個對象的一個synchronized方法只能由一個線程訪問。
48.abstract的method是否可同時是static,是否可同時是native,是否可同時是
synchronized?
答:都不能。
49.List, Set, Map是否繼承自Collection接口?
答:List,Set是Map不是
50.Set里的元素是不能重復的,那么用什么方法來區分重復與否呢? 是用==還是
equals()? 它們有何區別?
答:Set里的元素是不能重復的,那么用iterator()方法來區分重復與否。
equals()是判讀兩個Set是否相等。
equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,為的是
當兩個分離的對象的內容和類型相配的話,返回真值。
51.數組有沒有length()這個方法? String有沒有length()這個方法?
答:數組沒有length()這個方法,有length的屬性。String有有length()這個方
法。
52.sleep() 和 wait() 有什么區別?
答:sleep()方法是使線程停止一段時間的方法。在sleep 時間間隔期滿后,線程
不一定立即恢復執行。這是因為在那個時刻,其它線程可能正在運行而且沒有被
調度為放棄執行,除非(a)“醒來”的線程具有更高的優先級
(b)正在運行的線程因為其它原因而阻塞。
wait()是線程交互時,如果線程對一個同步對象x 發出一個wait()調用,該線程
會暫停執行,被調對象進入等待狀態,直到被喚醒或等待時間到。
53.short s1 = 1; s1 = s1 + 1;有什么錯? short s1 = 1; s1 += 1;有什么錯
?
答:short s1 = 1; s1 = s1 + 1;有錯,s1是short型,s1+1是int型,不能顯式
轉化為short型。可修改為s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正
確。
54.談談final, finally, finalize的區別。
答:
final—修飾符(關鍵字)如果一個類被聲明為final,意味著它不能再派生出新
的子類,不能作為父類被繼承。因此 一個類不能既被聲明為 abstract的,又被
聲明為final的。將變量或方法聲明為final,可以保證它們在使用中 不被改變。
被聲明為final的變量必須在聲明時給定初值,而在以后的引用中只能讀取,不可
修改。被聲明為 final的方法也同樣只能使用,不能重載
finally—再異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異
常,那么相匹配的 catch 子句就會 執行,然后控制就會進入 finally 塊(如果
有的話)。
finalize—方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將對象
從內存中清除出去之前做必要的清理 工作。這個方法是由垃圾收集器在確定這個
對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的 ,因此所有的
類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工
作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的。
55.如何處理幾十萬條并發數據?
答:用存儲過程或事務。取得最大標識的時候同時更新..注意主鍵不是自增量方
式這種方法并發的時候是不會有重復主鍵的..取得最大標識要有一個存儲過程來
獲取.
56.Session有什么重大BUG,微軟提出了什么方法加以解決?
答:是iis中由于有進程回收機制,系統繁忙的話Session會丟失,可以用Sate
server或SQL Server數據庫的方式存儲Session不過這種方式比較慢,而且無法
捕獲Session的END事件。
57.進程和線程的區別?
答:進程是系統進行資源分配和調度的單位;線程是CPU調度和分派的單位,一個
進程可以有多個線程,這些線程共享這個進程的資源。
58.堆和棧的區別?
答: 棧:由編譯器自動分配、釋放。在函數體中定義的變量通常在棧上。
堆:一般由程序員分配釋放。用new、malloc等分配內存函數分配得到的就是在堆
上。
59.成員變量和成員函數前加static的作用?
答:它們被稱為常成員變量和常成員函數,又稱為類成員變量和類成員函數。分
別用來反映類的狀態。比如類成員變量可以用來統計類實例的數量,類成員函數
負責這種統計的動作。
60.ASP。NET與ASP相比,主要有哪些進步?
答:asp解釋形,aspx編譯型,性能提高,有利于保護源碼。
62.請說明在.net中常用的幾種頁面間傳遞參數的方法,并說出他們的優缺點。
答:session(viewstate) 簡單,但易丟失
application 全局
cookie 簡單,但可能不支持,可能被偽造
input ttype="hidden" 簡單,可能被偽造
url參數 簡單,顯示于地址欄,長度有限
數據庫 穩定,安全,但性能相對弱
63.請指出GAC的含義?
答:全局程序集緩存。
64.向服務器發送請求有幾種方式?
答:get,post。get一般為鏈接方式,post一般為按鈕方式。
65.DataReader與Dataset有什么區別?
答:一個是只能向前的只讀游標,一個是內存中虛擬的數據庫。
66.軟件開發過程一般有幾個階段?每個階段的作用?
答:需求分析,架構設計,代碼編寫,QA,部署
67.在c#中using和new這兩個關鍵字有什么意義,請寫出你所知道的意義?using
指令 和語句 new 創建實例 new 隱藏基類中方法。
答:using 引入名稱空間或者使用非托管資源
new 新建實例或者隱藏父類方法
68.需要實現對一個字符串的處理,首先將該字符串首尾的空格去掉,如果字符串中
間還有連續空格的話,僅保留一個空格,即允許字符串中間有多個空格,但連續的空
格數不可超過一個.
答:string inputStr=" xx xx ";
inputStr=Regex.Replace(inputStr.Trim()," *"," ");
?
70.什么叫做SQL注入,如何防止?請舉例說明。
答:利用sql關鍵字對網站進行攻擊。過濾關鍵字'等
71.什么是反射?
答:動態獲取程序集信息
72.用Singleton如何寫設計模式
答:static屬性里面new ,構造函數private
73.什么是Application Pool?
答:Web應用,類似Thread Pool,提高并發性能。
74.什么是虛函數?什么是抽象函數?
答:虛函數:沒有實現的,可由子類繼承并重寫的函數。抽象函數:規定其非虛
子類必須實現的函數,必須被重寫。
75.什么是XML?
答:XML即可擴展標記語言。eXtensible Markup Language.標記是指計算機所能
理解的信息符號,通過此種標記,計算機之間可以處理包含各種信息的文章等。
如何定義這些標記,即可以選擇國際通用的標記語言,比如HTML,也可以使用象
XML這樣由相關人士自由決定的標記語言,這就是語言的可擴展性。XML是從SGML
中簡化修改出來的。它主要用到的有XML、XSL和XPath等。
76.什么是Web Service?UDDI?
答:Web Service便是基于網絡的、分布式的模塊化組件,它執行特定的任務,遵
守具體的技術規范,這些規范使得Web Service能與其他兼容的組件進行互操作。
UDDI 的目的是為電子商務建立標準;UDDI是一套基于Web的、分布式的、為
Web Service提供的、信息注冊中心的實現標準規范,同時也包含一組使企業能將
自身提供的Web Service注冊,以使別的企業能夠發現的訪問協議的實現標準。
77.什么是ASP.net中的用戶控件?
答:用戶控件一般用在內容多為靜態,或者少許會改變的情況下..用的比較大..類
似ASP中的include..但是功能要強大的多。
78.列舉一下你所了解的XML技術及其應用
答:xml用于配置,用于保存靜態數據類型.接觸XML最多的是web Services..和
config
79.ADO.net中常用的對象有哪些?分別描述一下。
答:Connection 數據庫連接對象
Command 數據庫命令
DataReader 數據讀取器
DataSet 數據集
80.什么是code-Behind技術。
答:ASPX,RESX和CS三個后綴的文件,這個就是代碼分離.實現了HTML代碼和服務
器代碼分離.方便代碼編寫和整理.
81.什么是SOAP,有哪些應用。
答:simple object access protocal,簡單對象接受協議.以xml為基本編碼結構
,建立在已有通信協議上(如http,不過據說ms在搞最底層的架構在tcp/ip上的
soap)的一種規范Web Service使用的協議..
82.C#中 property 與 attribute的區別,他們各有什么用處,這種機制的好處
在哪里?
答:一個是屬性,用于存取類的字段,一個是特性,用來標識類,方法等的附加
性質
83.XML 與 HTML 的主要區別
答:1. XML是區分大小寫字母的,HTML不區分。
2. 在HTML中,如果上下文清楚地顯示出段落或者列表鍵在何處結尾,那么你可以
省略</p>或者</li>之類的結束標記。在XML中,絕對不能省略掉結束標記。
3. 在XML中,擁有單個標記而沒有匹配的結束標記的元素必須用一個 / 字符作為
結尾。這樣分析器就知道不用 查找結束標記了。
4. 在XML中,屬性值必須分裝在引號中。在HTML中,引號是可用可不用的。
5. 在HTML中,可以擁有不帶值的屬性名。在XML中,所有的屬性都必須帶有相應
的值。
84.c#中的三元運算符是?
答:?:。
85.當整數a賦值給一個object對象時,整數a將會被?
答:裝箱。
86.類成員有_____種可訪問形式?
答:this.;new Class().Method;
87.public static const int A=1;這段代碼有錯誤么?是什么?
答:const不能用static修飾。
88.float f=-123.567F; int i=(int)f;i的值現在是_____?
答:-123。
89.委托聲明的關鍵字是______?
答:delegate.
90.用sealed修飾的類有什么特點?
答:密封,不能繼承。
91.在Asp.net中所有的自定義用戶控件都必須繼承自________?
答:Control。
92.在.Net中所有可序列化的類都被標記為_____?
答:[serializable]
93.在.Net托管代碼中我們不用擔心內存漏洞,這是因為有了______?
答:GC。
95.當類T只聲明了私有實例構造函數時,則在T的程序文本外部,___可以___(可
以 or 不可以)從T派生出新的類,不可以____(可以 or 不可以)直接創建T的
任何實例。
答:不可以,不可以。
96.下面這段代碼有錯誤么?
switch (i){
case(): 答://case()條件不能為空
CaseZero();
break;
case 1:
CaseOne();
break;
case 2:
dufault; 答://wrong,格式不正確
CaseTwo();
break;
}
97.在.Net中,類System.Web.UI.Page 可以被繼承么?
答:可以。
98..net的錯誤處理機制是什么?
答:.net錯誤處理機制采用try->catch->finally結構,發生錯誤時,層層上拋
,直到找到匹配的Catch為止。
99.利用operator聲明且僅聲明了==,有什么錯誤么?
答:要同時修改Equale和GetHash() ? 重載了"==" 就必須重載 "!="
101.在.net(C# or vb.net)中如何取消一個窗體的關閉。
答:private void Form1_Closing(object sender,
System.ComponentModel.CancelEventArgs e)
{
e.Cancel=true;
}
102.在.net(C# or vb.net)中,Appplication.Exit 還是 Form.Close有什么
不同?
答:一個是退出整個應用程序,一個是關閉其中一個form。
?
104.某一密碼僅使用K、L、M、N、O共5個字母,密碼中的單詞從左向右排列,密
碼單詞必須遵循如下規則:
(1) 密碼單詞的最小長度是兩個字母,可以相同,也可以不同
(2) K不可能是單詞的第一個字母
(3) 如果L出現,則出現次數不止一次
(4) M不能使最后一個也不能是倒數第二個字母
(5) K出現,則N就一定出現
(6) O如果是最后一個字母,則L一定出現
問題一:下列哪一個字母可以放在LO中的O后面,形成一個3個字母的密碼單詞?
A) K B)L C) M D) N
答案:B
問題二:如果能得到的字母是K、L、M,那么能夠形成的兩個字母長的密碼單詞的
總數是多少?
A)1個 B)3個 C)6個 D)9個
答案:A
問題三:下列哪一個是單詞密碼?
A) KLLN B) LOML C) MLLO D)NMKO
答案:C
8. 62-63=1 等式不成立,請移動一個數字(不可以移動減號和等于號),使得等
式成立,如何移動?
答案:62移動成2的6次方
106. C#中 property 與 attribute的區別,他們各有什么用處,這種機制的好
處在哪里?
答:attribute:自定義屬性的基類;property :類中的屬性
107.C#可否對內存進行直接的操作?
答:在.net下,.net引用了垃圾回收(GC)功能,它替代了程序員 不過在C#中,
不能直接實現Finalize方法,而是在析構函數中調用基類的Finalize()方法
108.ADO。NET相對于ADO等主要有什么改進?
答:1:ado.net不依賴于ole db提供程序,而是使用.net托管提供的程序,2:不使
用com3:不在支持動態游標和服務器端游 4:,可以斷開connection而保留當前數
據集可用 5:強類型轉換 6:xml支持
109.寫一個HTML頁面,實現以下功能,左鍵點擊頁面時顯示“您好”,右鍵點擊
時顯示“禁止右鍵”。并在2分鐘后自動關閉頁面。
答:<script language=javascript>
setTimeout('window.close();',3000);
function show()
{
if (window.event.button == 1)
{
alert("左");
}
else if (window.event.button == 2)
{
alert("右");
}
}
</script>
110.大概描述一下ASP。NET服務器控件的生命周期
答:初始化 加載視圖狀態 處理回發數據 加載 發送回發更改通知 處理回發事件
預呈現 保存狀態 呈現 處置 卸載
111.Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其它類,
是否可以implements(實現)interface(接口)?
答:不能,可以實現接口
112.Static Nested Class 和 Inner Class的不同,說得越多越好
答:Static Nested Class是被聲明為靜態(static)的內部類,它可以不依賴
于外部類實例被實例化。而通常的內部類需要在外部類實例化后才能實例化。
113.,&和&&的區別。
&是位運算符,表示按位與運算,&&是邏輯運算符,表示邏輯與(and).
114.HashMap和Hashtable的區別。
答:HashMap是Hashtable的輕量級實現(非線程安全的實現),他們都完成了
Map接口,主要區別在于HashMap允許空(null)鍵值(key),由于非線程安全,
效率上可能高于Hashtable.
116.Overloaded的方法是否可以改變返回值的類型?
答:Overloaded的方法是可以改變返回值的類型。
117.error和exception有什么區別?
答:error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存
溢出。不可能指望程序能處理這樣的情況。
exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從
不會發生的情況。
118.<%# %> 和 <% %> 有什么區別?
答:<%# %>表示綁定的數據源
<% %>是服務器端代碼塊
119.你覺得ASP.NET 2.0(VS2005)和你以前使用的開發工具(.Net 1.0或其他
)有什么最大的區別?你在以前的平臺上使用的哪些開發思想(pattern /
architecture)可以移植到ASP.NET 2.0上 (或者已經內嵌在ASP.NET 2.0中)
答:1 ASP.NET 2.0 把一些代碼進行了封裝打包,所以相比1.0相同功能減少了很
多代碼.
2 同時支持代碼分離和頁面嵌入服務器端代碼兩種模式,以前1.0版本,.NET提示幫
助只有在分離的代碼文件,無 法 在頁面嵌入服務器端代碼獲得幫助提示,
3 代碼和設計界面切換的時候,2.0支持光標定位.這個我比較喜歡
4 在綁定數據,做表的分頁.Update,Delete,等操作都可以可視化操作,方便了初
學者
5 在ASP.NET中增加了40多個新的控件,減少了工作量
120.重載與覆蓋的區別?
答:1、方法的覆蓋是子類和父類之間的關系,是垂直關系;方法的重載是同一個
類中方法之間的關系,是水平關系
2、覆蓋只能由一個方法,或只能由一對方法產生關系;方法的重載是多個方法之
間的關系。
3、覆蓋要求參數列表相同;重載要求參數列表不同。
4、覆蓋關系中,調用那個方法體,是根據對象的類型(對象對應存儲空間類型)
來決定;重載關系,是根據調 用時的實參表與形參表來選擇方法體的。
121.描述一下C#中索引器的實現過程,是否只能根據數字進行索引?
答:不是??梢杂萌我忸愋?。
122.在C#中,string str = null 與 string str = " " 請盡量使用文字或圖
象說明其中的區別。
答:null是沒有空間引用的;
" " 是空間為0的字符串;
?
126.公司要求開發一個繼承System.Windows.Forms.ListView類的組件,要求達
到以下的特殊功能:點擊ListView各列列頭時,能按照點擊列的每行值進行重排
視圖中的所有行 (排序的方式如DataGrid相似)。根據您的知識,請簡要談一下您
的思路:
答:根據點擊的列頭,包該列的ID取出,按照該ID排序后,在給綁定到ListView中
127.什么是WSE?目前最新的版本是多少?
答:WSE (Web Service Extension) 包來提供最新的WEB服務安全保證,目前最
新版本2.0。
130.abstract class和interface有什么區別?
答:聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用
于要創建一個體現某些基本行為的類,并為該類聲明方法,但不能在該類中實現
該類的情況。不能創建abstract 類的實例。然而可以創建一個變量,其類型是一
個抽象類,并讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方
法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽
象類為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現
這些方法。
接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性
可通過實現這樣的接口而獲得。接口中的所有方法都是抽象的,沒有一個有程序
體。接口只可以定義static final成員變量。接口的實現與子類相似,除了該實
現類不能從接口定義中繼承行為。當類實現特殊接口時,它定義(即將程序體給
予)所有這種接口的方法。然后,它可以在實現了該接口的類的任何對象上調用
接口的方法。由于有抽象類,它允許使用接口名作為引用變量的類型。通常的動
態聯編將生效。引用可以轉換到接口類型或從接口類型轉換,instanceof 運算符
可以用來決定某對象的類是否實現了接口。
[.NET(C#)]
把attribute翻譯成特性,用來標識類,方法
把property翻譯為屬性,性質,用于存取類的字段
把markup翻譯成標記,tag還是翻譯成標簽比較好
[.NET(C#)]
.NET Framework的核心是其運行庫的執行環境。
稱為公共語言運行庫(CLR)或.NET運行庫.
通常將在CLR的控制下運行的代碼稱為托管代碼(managed code).
在CLR執行開發的源代碼之前,需要編譯它們為中間語言(IL),CLR再把IL編譯為平臺專用的代碼。
程序集(assembly)是包含編譯好的,面向.NET Framework的代碼的邏輯單元.
可執行代碼和庫代碼使用相同的程序集結構.
程序集的一個重要特性是它們包含的元數據描述了對應代碼中定義的類型和方法.
[.NET(C#)]
ASP頁面有時顯示比較慢,因為服務器端代碼是解釋性的不是編譯的.
由于ASP代碼不是結構化的所以難于維護,加上ASP不支持錯誤處理和語法檢查。
而ASP.NET頁面是結構化的。每個頁面都是一個繼承了.NET類System.Web.UI.Page的類。
另外ASP.NET的后臺編碼功能允許進一步采用結構化的方式.
頁面請求是和WEB服務器在編譯后高速緩存ASP.NET頁面。
[.NET(C#)]
覆蓋(override)和重載(overload):
覆蓋是指子類重新定義父類的虛函數的做法。
重載,是指允許存在多個同名函數,而這些函數的參數表不同(或許參數個數不同,或許參數類型不同,或許兩者都不
同)。
其實,重載的概念并不屬于“面向對象編程”,
重載的實現是:編譯器根據函數不同的參數表,對同名函數的名稱做修飾
然后這些同名函數就成了不同的函數(至少對于編譯器來說是這樣的)。
如,有兩個同名函數:function??? func(p:integer):integer;??? 和function func(p:string):integer;。
那么編譯器做過修飾后的函數名稱可能是這樣的:int_func、str_func。
對于這兩個函數的調用,在編譯器間就已經確定了,是靜態的(記住:是靜態)。
也就是說,它們的地址在編譯期就綁定了(早綁定),
因此,重載和多態無關!真正和多態相關的是“覆蓋”。
當子類重新定義了父類的虛函數后,父類指針根據賦給它的不同的子類指針,動態(記住:是動態!)的調用屬于子類
的該函數,
這樣的函數調用在編譯期間是無法確定的(調用的子類的虛函數的地址無法給出)。
因此,這樣的函數地址是在運行期綁定的(晚邦定)。
結論就是:重載只是一種語言特性,與多態無關,與面向對象也無關!
[.NET(C#)]
C#中ref和out的區別:
方法參數上的 out 方法參數關鍵字使方法引用傳遞到方法的同一個變量。
當控制傳遞回調用方法時,在方法中對參數所做的任何更改都將反映在該變量中。
當希望方法返回多個值時,聲明 out 方法非常有用。
使用 out 參數的方法仍然可以返回一個值。一個方法可以有一個以上的 out 參數。
若要使用 out 參數,必須將參數作為 out 參數顯式傳遞到方法。out 參數的值不會傳遞到 out 參數。
不必初始化作為 out 參數傳遞的變量。然而,必須在方法返回之前為 out 參數賦值。
屬性不是變量,不能作為 out 參數傳遞。
方法參數上的 ref 方法參數關鍵字使方法引用傳遞到方法的同一個變量。
當控制傳遞回調用方法時,在方法中對參數所做的任何更改都將反映在該變量中。
若要使用 ref 參數,必須將參數作為 ref 參數顯式傳遞到方法。
ref 參數的值被傳遞到 ref 參數。 傳遞到 ref 參數的參數必須最先初始化。
將此方法與 out 參數相比,后者的參數在傳遞到 out 參數之前不必顯式初始化。
屬性不是變量,不能作為 ref 參數傳遞。
兩者都是按地址傳遞的,使用后都將改變原來的數值。
ref可以把參數的數值傳遞進函數,但是out是要把參數清空
就是說你無法把一個數值從out傳遞進去的,out進去后,參數的數值為空,所以你必須初始化一次。
兩個的區別:ref是有進有出,out是只出不進。
[.NET(C#)]
ADO和ADO.NET的區別:
ADO使用OLE DB接口并基于微軟的COM技術
而ADO.NET擁有自己的ADO.NET接口并且基于微軟的.NET體系架構。
ADO以Recordset存儲,而ADO.NET則以DataSet表示。
Recordset看起來更像單表,如果讓Recordset以多表的方式表示就必須在SQL中進行多表連接。
反之,DataSet可以是多個表的集合。ADO 的運作是一種在線方式,這意味著不論是瀏覽或更新數據都必須是實時的。
ADO.NET則使用離線方式,在訪問數據的時候ADO.NET會利用XML制作數據的一份幅本
ADO.NET的數據庫連接也只有在這段時間需要在線。
由于ADO使用COM技術,這就要求所使用的數據類型必須符合COM規范
而ADO.NET基于XML格式,數據類型更為豐富并且不需要再做COM編排導致的數據類型轉換,從而提高了整體性能。
ADO.NET為.NET構架提供了優化的數據訪問模型,和基于COM的ADO是完全兩樣的數據訪問方式。
ado.net與ado存在著比較大的差異:
1.ado.net遵循更通用的原則,不那么專門面向數據庫。
ado.net集合了所有允許數據處理的類。這些類表示具有典型數據庫功能(如索引,排序和視圖)的數據容器對象。
盡管ado.net是.net數據庫應用程序的權威解決方案
但從總體設計上看,它不像ado數據模型那樣以數據庫為中心,這是ado.net的一大特點。
2.目前,ado.net提供了兩種數據庫訪問類庫:一種用于sql server 7.0 或更高版本
另一種用于其他所有您可能已經安裝的ole db提供程序。
在這兩種情況下,您分別使用不同的類,但遵循相似的命名規則。
除前綴,名稱都是相同的。前一種情況前綴為sql,后一種情況則是oledb。
同時,.net框架還提供了odbc .net的數據訪問模式。
odbc .net data provider是 .net 框架的增強組件,它可以訪問原始的 odbc 驅動程序
就像 ole db .net data provider 可以訪問原始的 ole db providers 一樣。
目前它僅在下列驅動程序中測試過:
microsoft sql odbc driver,microsoft odbc driver for oracle,microsoft jet odbc driver。
3.ado.net提供了兩個隊形來處理從數據源中抽取數據,它們是dataset和datareader對象。
前者是記錄在內存中的緩存,您可以從任何方向隨意訪問和修改。
后者是高度優化的對象,專為以僅向前方式滾動只讀記錄而設計。
4.ado.net統一了數據容器類編程接口,無論您打算編寫何種應用程序,windows窗體,web窗體還是web服務
都可以通過同一組類來處理數據。
不管在后端的數據源數sql server數據庫,ole db,xml文件還是一個數組
您都可以通過相同的方法和屬性來滾動和處理它們的內容。
5.在ado中,xml只不過是輸入和輸出格式。
然而在ado.net中,xml是一種數據格式,提供了操作,組織,共享和傳遞數據的手段。
ADO。NET相對于ADO等主要有什么改進?
1:ado.net不依賴于ole db提供程序,而是使用.net托管提供的程序,
2:不使用com
3:不在支持動態游標和服務器端游
4:,可以斷開connection而保留當前數據集可用
5:強類型轉換
6:xml支持
[.NET(C#)]
new 關鍵字用法
(1)new 運算符 用于創建對象和調用構造函數。
(2)new 修飾符 用于向基類成員隱藏繼承成員。
(3)new 約束 用于在泛型聲明中約束可能用作類型參數的參數的類型。
指定泛型類聲明中的任何類型參數都必須有公共的無參數構造函數。
[.NET(C#)]
C#中,string str = null 與 string str ="",說明區別。
string str =""初始化對象分配空間
而string str=null初始化對象
[.NET(C#)]
DataGrid的Datasouse可以連接什么數據源
DataTable DataView DataSet DataViewManager 任何實現IListSource接口的組件 任何實現IList接口的組件
[.NET(C#)]
概述反射和序列化
反射:公共語言運行庫加載器管理應用程序域。
這種管理包括將每個程序集加載到相應的應用程序域以及控制每個程序集中類型層次結構的內存布局。
程序集包含模塊,而模塊包含類型,類型又包含成員。
反射則提供了封裝程序集、模塊和類型的對象。
您可以使用反射動態地創建類型的實例,將類型綁定到現有對象,或從現有對象中獲取類型。
然后,可以調用類型的方法或訪問其字段和屬性。
序列化:序列化是將對象狀態轉換為可保持或傳輸的格式的過程。
與序列化相對的是反序列化,它將流轉換為對象。
這兩個過程結合起來,可以輕松地存儲和傳輸數據。
[.NET(C#)]
可訪問性級別有哪幾種
public 訪問不受限制。
protected 訪問僅限于包含類或從包含類派生的類型。
internal 訪問僅限于當前程序集。
protected internal 訪問僅限于從包含類派生的當前程序集或類型。
private 訪問僅限于包含類型。
[.NET(C#)]
O/R Mapping 的原理:利用反射,配置將對象和數據庫表映射。
[.NET(C#)]
sealed 修飾符有什么特點?
sealed 修飾符表示密封,用于類時,表示該類不能再被繼承
不能和 abstract 同時使用,因為這兩個修飾符在含義上互相排斥
用于方法和屬性時,表示該方法或屬性不能再被繼承,必須和 override 關鍵字一起使用
因為使用 sealed 修飾符的方法或屬性肯定是基類中相應的虛成員
通常用于實現第三方類庫時不想被客戶端繼承,或用于沒有必要再繼承的類以防止濫用繼承造成層次結構體系混亂
恰當的利用 sealed 修飾符也可以提高一定的運行效率,因為不用考慮繼承類會重寫該成員
[.NET(C#)]
詳述.NET里class和struct的異同
結構與類共享幾乎所有相同的語法,但結構比類受到的限制更多:
盡管結構的靜態字段可以初始化,結構實例字段聲明還是不能使用初始值設定項。
結構不能聲明默認構造函數(沒有參數的構造函數)或析構函數。
結構的副本由編譯器自動創建和銷毀,因此不需要使用默認構造函數和析構函數。
實際上,編譯器通過為所有字段賦予默認值(參見默認值表)來實現默認構造函數。
結構不能從類或其他結構繼承。
結構是值類型 -- 如果從結構創建一個對象并將該對象賦給某個變量,變量則包含結構的全部值。
復制包含結構的變量時,將復制所有數據,對新副本所做的任何修改都不會改變舊副本的數據。
由于結構不使用引用,因此結構沒有標識 -- 具有相同數據的兩個值類型實例是無法區分的。
C# 中的所有值類型本質上都繼承自 ValueType,后者繼承自 Object。
編譯器可以在一個稱為裝箱的過程中將值類型轉換為引用類型。
結構具有以下特點:
結構是值類型,而類是引用類型。
向方法傳遞結構時,結構是通過傳值方式傳遞的,而不是作為引用傳遞的。
與類不同,結構的實例化可以不使用 new 運算符。
結構可以聲明構造函數,但它們必須帶參數。
一個結構不能從另一個結構或類繼承,而且不能作為一個類的基。
所有結構都直接繼承自 System.ValueType,后者繼承自 System.Object。
結構可以實現接口。
在結構中初始化實例字段是錯誤的。
類與結構的差別
1. 值類型與引用類型
結構是值類型:值類型在堆棧上分配地址,所有的基類型都是結構類型
例如:int 對應System.int32 結構,string 對應 system.string 結構 ,通過使用結構可以創建更多的值類型
類是引用類型:引用類型在堆上分配地址 堆棧的執行效率要比堆的執行效率高
可是堆棧的資源有限,不適合處理大的邏輯復雜的對象。
所以結構處理作為基類型對待的小對象,而類處理某個商業邏輯
因為結構是值類型所以結構之間的賦值可以創建新的結構,而類是引用類型,類之間的賦值只是復制引用 注:
1.雖然結構與類的類型不一樣,可是他們的基類型都是對象(object),c#中所有類型的基類型都是object
2.雖然結構的初始化也使用了New 操作符可是結構對象依然分配在堆棧上而不是堆上
如果不使用“新建”(new),那么在初始化所有字段之前,字段將保持未賦值狀態,且對象不可用
2.繼承性
結構:不能從另外一個結構或者類繼承,本身也不能被繼承
雖然結構沒有明確的用sealed聲明,可是結構是隱式的sealed .
類:完全可擴展的,除非顯示的聲明sealed 否則類可以繼承其他類和接口,自身也能被繼承
注:雖然結構不能被繼承 可是結構能夠繼承接口,方法和類繼承接口一樣
例如:結構實現接口
interface IImage
{
void Paint();
}
struct Picture : IImage
{
public void Paint()
{
// painting code goes here
}
private int x, y, z; // other struct members
}
3.內部結構:
結構:
沒有默認的構造函數,但是可以添加構造函數
沒有析構函數
沒有 abstract 和 sealed(因為不能繼承)
不能有protected 修飾符
可以不使用new 初始化
在結構中初始化實例字段是錯誤的
類:
有默認的構造函數
有析構函數
可以使用 abstract 和 sealed
有protected 修飾符
必須使用new 初始化
[.NET(C#)]
如何選擇結構還是類
1. 堆棧的空間有限,對于大量的邏輯的對象,創建類要比創建結構好一些
2. 結構表示如點、矩形和顏色這樣的輕量對象
例如,如果聲明一個含有 1000 個點對象的數組,則將為引用每個對象分配附加的內存。
在此情況下,結構的成本較低。
3. 在表現抽象和多級別的對象層次時,類是最好的選擇
4. 大多數情況下該類型只是一些數據時,結構時最佳的選擇
[.NET(C#)]
abstract class和interface有什么區別?
答:聲明方法的存在而不去實現它的類被叫做抽像類(abstract class)
它用于要創建一個體現某些基本行為的類,并為該類聲明方法,但不能在該類中實現該類的情況。
不能創建abstract 類的實例。
然而可以創建一個變量,其類型是一個抽像類,并讓它指向具體子類的一個實例。
不能有抽像構造函數或抽像靜態方法。
Abstract 類的子類為它們父類中的所有抽像方法提供實現,否則它們也是抽像類。
取而代之,在子類中實現該方法。
知道其行為的其它類可以在類中實現這些方法。
接口(interface)是抽像類的變體。
在接口中,所有方法都是抽像的。
多繼承性可通過實現這樣的接口而獲得。
接口中的所有方法都是抽像的,沒有一個有程序體。
接口只可以定義static final成員變量。
接口的實現與子類相似,除了該實現類不能從接口定義中繼承行為。
當類實現特殊接口時,它定義(即將程序體給予)所有這種接口的方法。
然后,它可以在實現了該接口的類的任何對像上調用接口的方法。
由于有抽像類,它允許使用接口名作為引用變量的類型。通常的動態聯編將生效。
引用可以轉換到接口類型或從接口類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了接口。
接口可以繼承接口。
抽像類可以實現(implements)接口
抽像類是否可繼承實體類(concrete class),但前提是實體類必須有明確的構造函數。
[.NET(C#)]
什么叫應用程序域?什么是托管代碼?什么是強類型系統?
什么是裝箱和拆箱?什么是重載?CTS、CLS和CLR分別作何解釋?
應用程序域:
應用程序域為安全性、可靠性、版本控制以及卸載程序集提供了隔離邊界。
應用程序域通常由運行庫宿主創建,運行庫宿主負責在運行應用程序之前引導公共語言運行庫。
應用程序域提供了一個更安全、用途更廣的處理單元,公共語言運行庫可使用該單元提供應用程序之間的隔離。
應用程序域可以理解為一種輕量級進程。起到安全的作用。占用資源小。
托管代碼:
使用基于公共語言運行庫的語言編譯器開發的代碼稱為托管代碼;托管代碼具有許多優點,
例如:跨語言集成、跨語言異常處理、增強的安全性、版本控制和部署支持、簡化的組件交互模型、調試和分析服務等
。
裝箱和拆箱:
從值類型接口轉換到引用類型:裝箱。
從引用類型轉換到值類型:拆箱。
裝箱和拆箱使值類型能夠被視為對象。
對值類型裝箱將把該值類型打包到 Object 引用類型的一個實例中。
這使得值類型可以存儲于垃圾回收堆中。
拆箱將從對象中提取值類型。
重載:
每個類型成員都有一個唯一的簽名。
方法簽名由方法名稱和一個參數列表(方法的參數的順序和類型)組成。
只要簽名不同,就可以在一種類型內定義具有相同名稱的多種方法。
當定義兩種或多種具有相同名稱的方法時,就稱作重載。
CTS通用類型系統 (common type system) :
一種確定公共語言運行庫如何定義、使用和管理類型的規范。
CLR公共語言運行庫:
.NET Framework 提供了一個稱為公共語言運行庫的運行時環境.
它運行代碼并提供使開發過程更輕松的服務。
CLS公共語言規范:
要和其他對象完全交互,而不管這些對象是以何種語言實現的.
對象必須只向調用方公開那些它們必須與之互用的所有語言的通用功能。
為此定義了公共語言規范 (CLS),它是許多應用程序所需的一套基本語言功能。
強類型:
C# 是強類型語言;因此每個變量和對象都必須具有聲明類型。
[.NET(C#)]
值類型和引用類型的區別?
基于值類型的變量直接包含值。
將一個值類型變量賦給另一個值類型變量時,將復制包含的值。
這與引用類型變量的賦值不同,引用類型變量的賦值只復制對對象的引用,而不復制對象本身。
所有的值類型均隱式派生自 System.ValueType。
與引用類型不同,從值類型不可能派生出新的類型。但與引用類型相同的是,結構也可以實現接口。
與引用類型不同,值類型不可能包含 null 值。然而,可空類型功能允許將 null 賦給值類型。
每種值類型均有一個隱式的默認構造函數來初始化該類型的默認值。
值類型主要由兩類組成:結構、枚舉
結構分為以下幾類:
Numeric(數值)類型、整型、浮點型、decimal、bool、用戶定義的結構。
引用類型的變量又稱為對象,可存儲對實際數據的引用。
聲明引用類型的關鍵字:class、interface、delegate、內置引用類型: object、string
???????????????????? 值類型??????????????????? 引用類型
內存分配地點????? 分配在棧中?????????????????? 分配在堆中
效率?????????? 效率高,不需要地址轉換????????? 效率低,需要進行地址轉換
內存回收??????? 使用完后,立即回收????????????? 使用完后,不是立即回收,等待GC回收
賦值操作???????? 進行復制,創建一個同值新對象??? 只是對原有對象的引用
函數參數與返回值 是對象的復制????????????????? 是原有對象的引用,并不產生新的對象
類型擴展?? 不易擴展??? 容易擴展,方便與類型擴展
[.NET(C#)]
如何理解委托
委托類似于 C++ 函數指針,但它是類型安全的。
委托允許將方法作為參數進行傳遞。
委托可用于定義回調方法。
委托可以鏈接在一起;例如,可以對一個事件調用多個方法。
方法不需要與委托簽名精確匹配。有關更多信息,請參見協變和逆變。
C# 2.0 版引入了匿名方法的概念,此類方法允許將代碼塊作為參數傳遞,以代替單獨定義的方法。
[.NET(C#)]
C#中的接口和類有什么異同。
異:
不能直接實例化接口。
接口不包含方法的實現。
接口、類和結構可從多個接口繼承。
但是C# 只支持單繼承:類只能從一個基類繼承實現。
類定義可在不同的源文件之間進行拆分。
同:
接口、類和結構可從多個接口繼承。
接口類似于抽象基類:繼承接口的任何非抽象類型都必須實現接口的所有成員。
接口可以包含事件、索引器、方法和屬性。
一個類可以實現多個接口。
[.NET(C#)]
ASP.net的身份驗證方式有哪些
Windows 身份驗證提供程序
提供有關如何將 Windows 身份驗證與 Microsoft Internet 信息服務 (IIS) 身份驗證
結合使用來確保 ASP.NET 應用程序安全的信息。
Forms 身份驗證提供程序
提供有關如何使用您自己的代碼創建應用程序特定的登錄窗體并執行身份驗證的信息。
使用 Forms 身份驗證的一種簡便方法是使用 ASP.NET 成員資格和 ASP.NET 登錄控件
它們一起提供了一種只需少量或無需代碼就可以收集、驗證和管理用戶憑據的方法。
Passport 身份驗證提供程序
提供有關由 Microsoft 提供的集中身份驗證服務的信息,該服務為成員站點提供單一登錄和核心配置
[.NET(C#)]
活動目錄的作用
Active Directory存儲了有關網絡對象的信息,并且讓管理員和用戶能夠輕松地查找和使用這些信息。
Active Directory使用了一種結構化的數據存儲方式,并以此作為基礎對目錄信息進行合乎邏輯的分層組織。
[.NET(C#)]
解釋一下UDDI、WSDL的意義及其作用
UDDI:統一描述、發現和集成協議(UDDI, Universal Description, Discovery and Integration)
是一套基于Web的、分布式的、為Web服務提供的信息注冊中心的實現標準規范,
同時也包含一組使企業能將自身提供的Web服務注冊以使得別的企業能夠發現的訪問協議的實現標準。
UDDI 提供了一組基于標準的規范用于描述和發現服務,還提供了一組基于因特網的實現。
WSDL:WSDL描述Web服務的公共接口。
這是一個基于XML的關于如何與Web服務通訊和使用的服務描述;
服務 URL 和命名空間
網絡服務的類型
(可能還包括 SOAP 的函數調用,正像我所說過的,WSDL 足夠自如地去描述網絡服務的廣泛內容)
有效函數列表
每個函數的參數
每個參數的類型
每個函數的返回值及其數據類型
[.NET(C#)]
什么是SOAP,有哪些應用。
答:SOAP(Simple Object Access Protocol )簡單對象訪問協議
是在分散或分布式的環境中交換信息并執行遠程過程調用的協議,是一個基于XML的協議。
使用SOAP,不用考慮任何特定的傳輸協議(最常用的還是HTTP協議)
可以允許任何類型的對象或代碼,在任何平臺上,以任何一直語言相互通信。
這種相互通信采用的是XML格式的消息。
SOAP也被稱作XMLP,為兩個程序交換信息提供了一種標準的工作機制。
在各類機構之間通過電子方式相互協作的情況下完全有必要為此制定相應的標準。
SOAP描述了把消息捆綁為XML的工作方式。
它還說明了發送消息的發送方、消息的內容和地址以及發送消息的時間。
SOAP是Web Service的基本通信協議。
SOAP規范還定義了怎樣用XML來描述程序數據(Program Data),怎樣執行RPC(Remote Procedure Call)。
大多數SOAP解決方案都支持RPC-style應用程序。
SOAP還支持 Document-style應用程序(SOAP消息只包含XML文本信息)。
最后SOAP規范還定義了HTTP消息是怎樣傳輸SOAP消息的。
MSMQ、SMTP、TCP/IP都可以做SOAP的傳輸協議。
SOAP 是一種輕量級協議,用于在分散型、分布式環境中交換結構化信息。
SOAP 利用 XML 技術定義一種可擴展的消息處理框架,它提供了一種可通過多種底層協議進行交換的消息結構。
這種框架的設計思想是要獨立于任何一種特定的編程模型和其他特定實現的語義。
SOAP 定義了一種方法以便將 XML 消息從 A 點傳送到 B 點。
為此,它提供了一種基于 XML 且具有以下特性的消息處理框架:
1) 可擴展
2) 可通過多種底層網絡協議使用
3) 獨立于編程模型。
[.NET(C#)]
如何部署一個ASP.net頁面
VS 2005和VS 2003都有發布機制。
2003可以發布然后再復制部署。
VS2005基本上可以直接部署到對應位置。
[.NET(C#)]
GC是什么? 為什么要有GC?
答:GC是垃圾收集器。
程序員不用擔心內存管理,因為垃圾收集器會自動進行管理。
要請求垃圾收集,可以調用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
不過在C#中不能直接實現Finalize方法,而是在析構函數中調用基類的Finalize()方法
[.NET(C#)]
如何理解.net中的垃圾回收機制
.NET Framework 的垃圾回收器管理應用程序的內存分配和釋放。
每次您使用 new 運算符創建對象時,運行庫都從托管堆為該對象分配內存。
只要托管堆中有地址空間可用,運行庫就會繼續為新對象分配空間。
但是,內存不是無限大的。最終,垃圾回收器必須執行回收以釋放一些內存。
垃圾回收器優化引擎根據正在進行的分配情況確定執行回收的最佳時間。
當垃圾回收器執行回收時,它檢查托管堆中不再被應用程序使用的對象并執行必要的操作來回收它們占用的內存。
[.NET(C#)]
列舉ASP.NET 頁面之間傳遞值的幾種方式。 并說出他們的優缺點。
答. 1).使用QueryString, 如....?id=1; response. Redirect()....
??? 2).使用Session變量
??? 3).使用Server.Transfer
session(viewstate) 簡單,但易丟失
application?? 全局
cookie??? 簡單,但可能不支持,可能被偽造
input ttype="hidden" 簡單,可能被偽造
url?? 參數 簡單,顯示于地址欄,長度有限數據庫 穩定,安全,但性能相對弱
[.NET(C#)]
C#中索引器的實現過程,可以用任何類型進行索引?(比如數字)
[.NET(C#)]
CTS、CLS、CLR分別作何解釋?
CTS:通用語言系統。
CLS:通用語言規范。
CLR:公共語言運行庫。
[.NET(C#)]
.net中讀寫數據庫需要用到那些類?他們的作用?
DataSet: 數據存儲器。
DataCommand: 執行語句命令。
DataAdapter: 數據的集合,用語填充。
[.NET(C#)]
在.net中,配件的意思是:程序集。(中間語言,源數據,資源,裝配清單)
[.NET(C#)]
常用的調用WebService的方法有哪些?
答:1.使用WSDL.exe命令行工具。
??? 2.使用VS.NET中的Add Web Reference菜單選項
[.NET(C#)]
微軟.NET 構架下remoting和webservice兩項技術的理解以及實際中的應用。
.net Remoting 的工作原理是:服務器端向客戶端發送一個進程編號,一個程序域編號,以確定對象的位置。
WS主要是可利用HTTP,穿透防火墻。而Remoting可以利用TCP/IP,二進制傳送提高效率。
remoting是.net中用來跨越machine,process,appdomain進行方法調用的技術
對于三成結構的程序,就可以使用remoting技術來構建.
它是分布應用的基礎技術.相當于以前的DCOM
Web Service是一種構建應用程序的普通模型
并能在所有支持internet網通訊的操作系統上實施。
Web Service令基于組件的開發和web的結合達到最佳
[.NET(C#)]
啟動一個線程是用run()還是start()?
答:啟動一個線程是調用start()方法,使線程所代表的虛擬處理機處于可運行狀態。
這意味著它可以由JVM調度并執行。
這并不意味著線程就會立即運行。
run()方法可以產生必須退出的標志來停止一個線程。
[.NET(C#)]
構造器Constructor是否可被override?
構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading。
[.NET(C#)]
abstract的method不可同時是static,不可同時是native,不可同時是synchronized
[.NET(C#)]
final, finally, finalize的區別。
final: 修飾符(關鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。
因此 一個類不能既被聲明為 abstract的,又被聲明為final的。
將變量或方法聲明為final,可以保證它們在使用中不被改變。
被聲明為final的變量必須在聲明時給定初值,而在以后的引用中只能讀取,不可修改。
被聲明為 final的方法也同樣只能使用,不能重載
finally: 在異常處理時提供 finally 塊來執行任何清除操作。
如果拋出一個異常,那么相匹配的 catch 子句就會執行.
然后控制就會進入 finally 塊(如果有的話)。
finalize: 方法名。
Java 技術允許使用 finalize() 方法在垃圾收集器將對像從內存中清除出去之前做必要的清理工作。
這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。
它是在 Object 類中定義的 ,因此所有的類都繼承了它。
子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。
finalize() 方法是在垃圾收集器刪除對像之前對這個對象調用的。
[.NET(C#)]
進程和線程的區別:
進程是系統進行資源分配和調度的單位;
線程是CPU調度和分派的單位.
一個進程可以有多個線程,這些線程共享這個進程的資源。
[.NET(C#)]
堆和棧的區別:
棧:由編譯器自動分配、釋放。在函數體中定義的變量通常在棧上。
堆:一般由程序員分配釋放。用new、malloc等分配內存函數分配得到的就是在堆上。
[.NET(C#)]
成員變量和成員函數前加static的作用:
它們被稱為常成員變量和常成員函數,又稱為類成員變量和類成員函數。
分別用來反映類的狀態。
比如類成員變量可以用來統計類實例的數量,類成員函數負責這種統計的動作。
[.NET(C#)]
在c#中using和new這兩個關鍵字有什么意義:
using 引入名稱空間或者使用非托管資源
new 新建實例或者隱藏父類方法
[.NET(C#)]
XML即可擴展標記語言。
eXtensible Markup Language.標記是指計算機所能理解的信息符號
通過此種標記,計算機之間可以處理包含各種信息的文章等。
如何定義這些標記,即可以選擇國際通用的標記語言
比如HTML,也可以使用象XML這樣由相關人士自由決定的標記語言,這就是語言的可擴展性。
XML是從SGML中簡化修改出來的。它主要用到的有XML、XSL和XPath等。
[.NET(C#)]
什么是code-Behind技術。
答:ASPX,RESX和CS三個后綴的文件,這個就是代碼分離.
實現了HTML代碼和服務器代碼分離.方便代碼編寫和整理.
[.NET(C#)]
XML 與 HTML 的主要區別
1. XML是區分大小寫字母的,HTML不區分。
2. 在HTML中,如果上下文清楚地顯示出段落或者列表鍵在何處結尾,
那么你可以省略</p>或者</li>之類的結束 標記。
在XML中,絕對不能省略掉結束標記。
3. 在XML中,擁有單個標記而沒有匹配的結束標記的元素必須用一個 / 字符作為結尾。
這樣分析器就知道不用 查找結束標記了。
4. 在XML中,屬性值必須分裝在引號中。在HTML中,引號是可用可不用的。
5. 在HTML中,可以擁有不帶值的屬性名。在XML中,所有的屬性都必須帶有相應的值。
[.NET(C#)]
.net的錯誤處理機制是什么?
答:.net錯誤處理機制采用try->catch->finally結構.
發生錯誤時,層層上拋,直到找到匹配的Catch為止。
[.NET(C#)]
Static Nested Class 和 Inner Class的不同:
Static Nested Class是被聲明為靜態(static)的內部類,它可以不依賴于外部類實例被實例化。
而通常的內部類需要在外部類實例化后才能實例化。
[.NET(C#)]
error和exception有什么區別:
error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。
不可能指望程序能處理這樣的情況。
exception 表示一種設計或實現問題。
也就是說,它表示如果程序運行正常,從不會發生的情況。
[.NET(C#)]
UDP連接和TCP連接的異同:
前者只管傳,不管數據到不到,無須建立連接.后者保證傳輸的數據準確,須要連結.
[.NET(C#)]
C#中所有對象共同的基類是:System.Object.
[.NET(C#)]
System.String 和System.StringBuilder有什么區別?
System.String是不可變的字符串。String類是final類故不可以繼承。
System.StringBuilder存放了一個可變的字符串,并提供一些對這個字符串修改的方法。
[.NET(C#)]
const和readonly有什么區別?
const 可以用于局部常量
readonly 實際是類的initonly字段,顯然不能是局部的。
轉載于:https://www.cnblogs.com/cosiray/archive/2009/08/22/1551894.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的ASP.NET (C#) 面试笔试题目收集的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Online Judge System
- 下一篇: TCP/IP协议端口大全