.NET面試題集錦①(Part一)

1、前言部分

文中的問題及答案多收集整理自網絡,不保證100%準確,還望斟酌採納。html

1.面向對象的思想主要包括什麼?

答:任何事物均可以理解爲對象,其主要特徵: 繼承。封裝。多態。特色:代碼好維護,安全,隱藏信息 node

2.什麼是ASP.net中的用戶控件?

答:擴展名爲*.ascx,跟*.aspx在結構上類似,是指頁面中加載的功能塊,只是用戶控件不能單獨做爲頁面運行,程序員

     必須嵌入到*.aspx頁面或其它用戶控件中使用。 web

3.什麼叫應用程序域?什麼是受管制的代碼?什麼是強類型系統?什麼是裝箱和拆箱?什麼是重載?

CTS、CLS和CLR分別做何解釋?

答:應用程序域爲安全性、可靠性、版本控制以及卸載程序集提供了隔離邊界。應用程序域一般由運行庫宿主建立,算法

運行庫宿主負責在運行應用程序以前引導公共語言運行庫。應用程序域提供了一個更安全、用途更廣的處理單元,sql

公共語言運行庫可以使用該單元提供應用程序之間的隔離。託管代碼爲使用基於公共語言運行庫的語言編譯器開發的數據庫

代碼稱爲託管代碼;託管代碼具備許多優勢,例如:跨語言集成、跨語言異常處理、加強的安全性、版本控制和部署編程

支持、簡化的組件交互模型、調試和分析服務等。裝箱和拆箱使值類型可以被視爲對象。對值類型裝箱將把該值類型c#

打包到 Object 引用類型的一個實例中。這使得值類型能夠存儲於垃圾回收堆中。拆箱將從對象中提取值類型。數組

重載:每一個類型成員都有一個惟一的簽名。方法簽名由方法名稱和一個參數列表(方法的參數的順序和類型)組成。

只要簽名不一樣,就能夠在一種類型內定義具備相同名稱的多種方法。當定義兩種或多種具備相同名稱的方法時,就稱做重載。

CTS通用類型系統 (common type system):一種肯定公共語言運行庫如何定義、使用和管理類型的規範。

CLR公共語言運行庫:.NET Framework 提供了一個稱爲公共語言運行庫的運行時環境,它運行代碼並提供使開發過程更輕鬆的服務。

CLS公共語言規範:要和其餘對象徹底交互,而無論這些對象是以何種語言實現的,對象必須只向調用方公開那些它們必須與之互用的

全部語言的通用功能。爲此定義了公共語言規範 (CLS),它是許多應用程序所需的一套基本語言功能。

強類型:C# 是強類型語言;所以每一個變量和對象都必須具備聲明類型。 

4.列舉一下你所瞭解的XML技術及其應用

答:保存配置,站與站之間的交流,WEB SERVICE。以及與數據庫的數據交互等地方都要用它. 

5.值類型和引用類型的區別?

答:基於值類型的變量直接包含值。將一個值類型變量賦給另外一個值類型變量時,將複製包含的值。

這與引用類型變量的賦值不一樣,引用類型變量的賦值只複製對對象的引用,而不復制對象自己。

全部的值類型均隱式派生自 System.ValueType。與引用類型不一樣,從值類型不可能派生出新的類型。

但與引用類型相同的是,結構也能夠實現接口。與引用類型不一樣,值類型不可能包含 null 值。然而,

可空類型功能容許將 null 賦給值類型。每種值類型均有一個隱式的默認構造函數來初始化該類型的默認值。

值類型主要由兩類組成:結構、枚舉結構分爲如下幾類:Numeric(數值)類型、整型、浮點型、decimal、

bool、用戶定義的結構。引用類型的變量又稱爲對象,可存儲對實際數據的引用。聲明引用類型的關鍵字:

class、interface、delegate。內置引用類型: object、strin 

6.ADO.net中經常使用的對象有哪些?分別描述一下。

答:

Connection 打開數據庫鏈接

Command 執行數據庫命令

DataAdapter 鏈接數據,執行數據庫命令,填充DataSet

DataSet 數據在內存中的緩存,數據結構

DataReader 只讀向前的讀取數據庫 

7.如何理解委託?

答:

至關於函數指針,定義了委託就能夠在不調用原方法名稱的狀況下調用那個方法.

委託具備如下特色:

委託相似於 C++ 函數指針,但它是類型安全的。

委託容許將方法做爲參數進行傳遞。

委託可用於定義回調方法。

委託能夠連接在一塊兒;例如,能夠對一個事件調用多個方法。

方法不須要與委託簽名精確匹配。有關更多信息,請參見協變和逆變。

C# 2.0 版引入了匿名方法的概念,此類方法容許將代碼塊做爲參數傳遞,以代替單獨定義的方法。 

8.C#中的接口和類有什麼異同?

答:異:不能直接實例化接口。接口不包含方法的實現。接口、類和結構可從多個接口繼承。可是C#

只支持單繼承:類只能從一個基類繼承實現。類定義可在不一樣的源文件之間進行拆分。

同:接口、類和結構可從多個接口繼承。接口相似於抽象基類:繼承接口的任何非抽象類型都必須實現接口的全部成員。

接口能夠包含事件、索引器、方法和屬性。一個類能夠實現多個接口。  

9.UDP鏈接和TCP鏈接的異同?

答:前者只管傳,無論數據到不到,無須創建鏈接.後者保證傳輸的數據準確,需要連結. 

10.ASP.NET的身份驗證方式有哪些?分別是什麼原理?

答:Windows 身份驗證提供程序:提供有關如何將 Windows 身份驗證與 Microsoft Internet 信息服務

(IIS) 身份驗證結合使用來確保 ASP.NET 應用程序安全的信息。Forms 身份驗證提供程序:提供有關如何

使用您本身的代碼建立應用程序特定的登陸窗體並執行身份驗證的信息。使用 Forms 身份驗證的一種簡便方

法是使用 ASP.NET 成員資格和 ASP.NET 登陸控件,它們一塊兒提供了一種只需少許或無需代碼就能夠收集

、驗證和管理用戶憑據的方法。Passport 身份驗證提供程序:提供有關由 Microsoft 提供的集中身份驗證服

務的信息,該服務爲成員站點提供單一登陸和核心配置 

11.進程和線程分別怎麼理解?

答:進程和線程都是由操做系統所體會的程序運行的基本單元,系統利用該基本單元實現系統對應用的併發性。

進程和線程的區別在於:

簡而言之,一個程序至少有一個進程,一個進程至少有一個線程.線程的劃分尺度小於進程,使得多線程程序的併發性高。

另外,進程在執行過程當中擁有獨立的內存單元,而多個線程共享內存,從而極大地提升了程序的運行效率。

線程在執行過程當中與進程仍是有區別的。每一個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。

可是線程不可以獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。

從邏輯角度來看,多線程的意義在於一個應用程序中,有多個執行部分能夠同時執行。但操做系統並無將多個線

程看作多個獨立的應用,來實現進程的調度和管理以及資源分配。這就是進程和線程的重要區別。

進程是具備必定獨立功能的程序關於某個數據集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位.

線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程本身基本上不擁有

系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),可是它可與同屬一個進程的其餘的線程共

享進程所擁有的所有資源.一個線程能夠建立和撤銷另外一個線程;同一個進程中的多個線程之間能夠併發執行. 

12.什麼是code-Behind技術?

答:代碼分離,這是個明智的東西,像ASP這樣混成一堆很不爽.或者能夠理解成HTML代碼寫在前臺,C#代碼寫在後臺.

固然前臺也有腳本,類的調用等,其實寫在一塊兒也是能夠的. 

13.解釋一下UDDI、WSDL的意義及其做用。

答:

UDDI:統一描述、發現和集成協議(UDDI, Universal Description, Discovery and Integration)是一套基於Web的、

分佈式的、爲Web服務提供的信息註冊中心的實現標準規範,同時也包含一組使企業能將自身提供的Web服務註冊以使

得別的企業可以發現的訪問協議的實現標準。UDDI 提供了一組基於標準的規範用於描述和發現服務,還提供了一組基於

因特網的實現。WSDL:WSDL描述Web服務的公共接口。這是一個基於XML的關於如何與Web服務通信和使用的服務描述. 

14.什麼是SOAP,有哪些應用?

答:SOAP(Simple Object Access Protocol )簡單對象訪問協議是在分散或分佈式的環境中交換信息並執行遠程過程調用的協議,

是一個基於XML的協議。使用SOAP,不用考慮任何特定的傳輸協議(最經常使用的仍是HTTP協議),能夠容許任何類型的對象或代碼,

在任何平臺上,以任何一直語言相互通訊。SOAP 是一種輕量級協議,用於在分散型、分佈式環境中交換結構化信息。 SOAP 利用

XML 技術定義一種可擴展的消息處理框架,它提供了一種可經過多種底層協議進行交換的消息結構。這種框架的設計思想是要獨立

於任何一種特定的編程模型和其餘特定實現的語義。SOAP 定義了一種方法以便將 XML 消息從 A 點傳送到 B 點。爲此,它提供了

一種基於 XML 且具備如下特性的消息處理框架:1) 可擴展,2) 可經過多種底層網絡協議使用,3) 獨立於編程模型。 

15.如何理解.net中的垃圾回收機制。

答:.NET Framework 的垃圾回收器管理應用程序的內存分配和釋放。每次您使用 new 運算符建立對象時,運行庫都

從託管堆爲該對象分配內存。只要託管堆中有地址空間可用,運行庫就會繼續爲新對象分配空間。可是,內存不是無限大的。

最終,垃圾回收器必須執行回收以釋放一些內存。垃圾回收器優化引擎根據正在進行的分配狀況肯定執行回收的最佳時間。

當垃圾回收器執行回收時,它檢查託管堆中再也不被應用程序使用的對象並執行必要的操做來回收它們佔用的內存。 

16.經常使用的調用webservice方法有哪些?

答:SOAP和WSDL 

17. 寫出一條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) 

18.列舉ASP.NET 頁面之間傳遞值的幾種方式。

答:

1.使用QueryString, 如....?id=1; response.Redirect()....

2.使用Session變量

3.使用Server.Transfer

4.使用Application變量

5.使用Cookie

6. 寫出程序的輸出結果 

19. 寫出程序的輸出結果

 1 class Class1  2 
 3 {  4 
 5 private string str = "Class1.str";  6 
 7 private int i = 0;  8 
 9 static void StringConvert(string str) 10 
11 { 12 
13 str = "string being converted."; 14 
15 } 16 
17  
18 
19 static void StringConvert(Class1 c) 20 
21 { 22 
23 c.str = "string being converted."; 24 
25 } 26 
27  
28 
29 static void Add(int i) 30 
31 { 32 
33 i++; 34 
35 } 36 
37  
38 
39 static void AddWithRef(ref int i) 40 
41 { 42 
43 i++; 44 
45 } 46 
47  
48 
49 static void Main() 50 
51 { 52 
53 int i1 = 10; 54 
55 int i2 = 20; 56 
57 string str = "str"; 58 
59 Class1 c = new Class1(); 60 
61 Add(i1); 62 
63 AddWithRef(ref i2); 64 
65 Add(c.i); 66 
67 StringConvert(str); 68 
69 StringConvert(c); 70 
71 Console.WriteLine(i1); 72 
73 Console.WriteLine(i2); 74 
75 Console.WriteLine(c.i); 76 
77 Console.WriteLine(str); 78 
79 Console.WriteLine(c.str); 80 
81 } 82 
83 } 
View Code

答案(考查值引用和對象引用): 10 21 0 str string being converted. 

20.寫出程序的輸出結果

 1 public abstract class A  2 
 3 {  4 
 5 public A()  6 
 7 {  8 
 9 Console.WriteLine('A'); 10 
11 } 12 
13  
14 
15 public virtual void Fun() 16 
17 { 18 
19 Console.WriteLine("A.Fun()"); 20 
21 } 22 
23 } 24 
25  
26 
27 public class B: A 28 
29 { 30 
31 public B() 32 
33 { 34 
35 Console.WriteLine('B'); 36 
37 } 38 
39  
40 
41 public new void Fun() 42 
43 { 44 
45 Console.WriteLine("B.Fun()"); 46 
47 } 48 
49  
50 
51 public static void Main() 52 
53 { 54 
55 A a = new B(); 56 
57 a.Fun(); 58 
59 } 60 
61 } 
View Code

答案(考查在繼承類中構造函數, 以及new 方法):A B A.Fun() 

21. 寫出程序的輸出結果:

 1 public class A  2 
 3 {  4 
 5 public virtual void Fun1(int i)  6 
 7 {  8 
 9 Console.WriteLine(i); 10 
11 } 12 
13  
14 
15 public void Fun2(A a) 16 
17 { 18 
19 a.Fun1(1); 20 
21 Fun1(5); 22 
23 } 24 
25 } 26 
27  
28 
29 public class B : A 30 
31 { 32 
33 public override void Fun1(int i) 34 
35 { 36 
37 base.Fun1 (i + 1); 38 
39 } 40 
41  
42 
43 public static void Main() 44 
45 { 46 
47 B b = new B(); 48 
49 A a = new A(); 50 
51 a.Fun2(b); 52 
53 b.Fun2(a); 54 
55 } 56 
57 }
View Code

答案:2 5 1 6

22. 一列數的規則以下: 一、一、二、三、五、八、1三、2一、34......求第30位數是多少,用遞歸算法實現。(C#語言) 

答案:

 1 public class MainClass  2 
 3 {  4 
 5 public static void Main()  6 
 7 {  8 
 9 Console.WriteLine(Foo(30)); 10 
11 } 12 
13 public static int Foo(int i) 14 
15 { 16 
17 if (i <= 0) 18 
19 return 0; 20 
21 else if(i > 0 && i <= 2) 22 
23 return 1; 24 
25 else return Foo(i -1) + Foo(i - 2); 26 
27 } 28 
29 }
View Code

23. 程序設計: 貓大叫一聲,全部的老鼠都開始逃跑,主人被驚醒。(C#語言)

要求: 1.要有聯動性,老鼠和主人的行爲是被動的。2.考慮可擴展性,貓的叫聲可能引發其餘聯動效應。 

要點:1. 聯動效果,運行代碼只要執行Cat.Cryed()方法。2. 對老鼠和主人進行抽象

評分標準: <1>.構造出Cat、Mouse、Master三個類,並能使程序運行(2分)

<2>從Mouse和Master中提取抽象(5分)

<3>聯動效應,只要執行Cat.Cryed()就可使老鼠逃跑,主人驚醒。(3分)

答案:

 1 public interface Observer  2 
 3 {  4 
 5 void Response(); //觀察者的響應,如是老鼠見到貓的反映
 6 
 7 }  8 
 9  
 10 
 11 public interface Subject  12 
 13 {  14 
 15 void AimAt(Observer obs); //針對哪些觀察者,這裏指貓的要撲捉的對象---老鼠
 16 
 17 }  18 
 19  
 20 
 21 public class Mouse : Observer  22 
 23 {  24 
 25 private string name;  26 
 27  
 28 
 29 public Mouse(string name, Subject subj)  30 
 31 {  32 
 33 this.name = name;  34 
 35 subj.AimAt(this);  36 
 37 }  38 
 39  
 40 
 41 public void Response()  42 
 43 {  44 
 45 Console.WriteLine(name + " attempt to escape!");  46 
 47 }  48 
 49 }  50 
 51  
 52 
 53 public class Master : Observer  54 
 55 {  56 
 57 public Master(Subject subj)  58 
 59 {  60 
 61 subj.AimAt(this);  62 
 63 }  64 
 65  
 66 
 67 public void Response()  68 
 69 {  70 
 71 Console.WriteLine("Host waken!");  72 
 73 }  74 
 75 }  76 
 77  
 78 
 79 public class Cat : Subject  80 
 81 {  82 
 83 private ArrayList observers;  84 
 85  
 86 
 87 public Cat()  88 
 89 {  90 
 91 this.observers = new ArrayList();  92 
 93 }  94 
 95  
 96 
 97 public void AimAt(Observer obs)  98 
 99 { 100 
101 this.observers.Add(obs); 102 
103 } 104 
105  
106 
107 public void Cry() 108 
109 { 110 
111 Console.WriteLine("Cat cryed!"); 112 
113 foreach (Observer obs in this.observers) 114 
115 { 116 
117 obs.Response(); 118 
119 } 120 
121 } 122 
123 } 124 
125  
126 
127 class MainClass 128 
129 { 130 
131 static void Main(string[] args) 132 
133 { 134 
135 Cat cat = new Cat(); 136 
137 Mouse mouse1 = new Mouse("mouse1", cat); 138 
139 Mouse mouse2 = new Mouse("mouse2", cat); 140 
141 Master master = new Master(cat); 142 
143 cat.Cry(); 144 
145 } 146 
147 } 148 
149  
150 
151 //---------------------------------------------------------------------------------------------
152 
153  
154 
155 設計方法二: 使用event -- delegate設計.. 156 
157 public delegate void SubEventHandler(); 158 
159  
160 
161 public abstract class Subject 162 
163 { 164 
165 public event SubEventHandler SubEvent; 166 
167 protected void FireAway() 168 
169 { 170 
171 if (this.SubEvent != null) 172 
173 this.SubEvent(); 174 
175 } 176 
177 } 178 
179  
180 
181 public class Cat : Subject 182 
183 { 184 
185 public void Cry() 186 
187 { 188 
189 Console.WriteLine("cat cryed."); 190 
191 this.FireAway(); 192 
193 } 194 
195 } 196 
197  
198 
199 public abstract class Observer 200 
201 { 202 
203 public Observer(Subject sub) 204 
205 { 206 
207 sub.SubEvent += new SubEventHandler(Response); 208 
209 } 210 
211  
212 
213 public abstract void Response(); 214 
215 } 216 
217  
218 
219 public class Mouse : Observer 220 
221 { 222 
223 private string name; 224 
225 public Mouse(string name, Subject sub) : base(sub) 226 
227 { 228 
229 this.name = name; 230 
231 } 232 
233  
234 
235 public override void Response() 236 
237 { 238 
239 Console.WriteLine(name + " attempt to escape!"); 240 
241 } 242 
243 } 244 
245  
246 
247 public class Master : Observer 248 
249 { 250 
251 public Master(Subject sub) : base(sub){} 252 
253  
254 
255 public override void Response() 256 
257 { 258 
259 Console.WriteLine("host waken"); 260 
261 } 262 
263 } 264 
265  
266 
267 class Class1 268 
269 { 270 
271 static void Main(string[] args) 272 
273 { 274 
275 Cat cat = new Cat(); 276 
277 Mouse mouse1 = new Mouse("mouse1", cat); 278 
279 Mouse mouse2 = new Mouse("mouse2", cat); 280 
281 Master master = new Master(cat); 282 
283 cat.Cry(); 284 
285 } 286 
287 }
View Code

2四、C#中的委託是什麼?事件是否是一種委託?

答案:委託是一個能夠對方法進行引用的類。與其餘的類不一樣,委託類具備一個簽名,而且它只能對與其簽名匹配的方法進行引用。

這樣,委託就等效於一個類型安全函數指針或一個回調。事件是一種委託。 

2五、接口和抽象類有什麼區別?你選擇使用接口和抽象類的依據是什麼?

答案:接口是一個純粹的抽象類,沒有任何實際的東西,只是定義了一個框架,而抽象類裏面能夠有實際的一個方法,

並不要求全部的方法都是抽象的。能夠實現一個接口中的全部方法,也能夠繼承一個抽象的類,而後覆寫其中的方法。

接口通常只有方法,而沒有數據成員或屬性。抽象類有方法,也有數據成員或屬性,通常狀況下,優先考慮用接口,

只有當可能要訪問到數據成員或屬性時,用抽象類。 

2六、談談final, finally, finalize的區別。

答案:final修飾符用於指定類不能擴展或者方法或屬性不能重寫。它將防止其餘類經過重寫重要的函數來更改該類的行爲。

帶有final修飾符的方法能夠由派生類中的方法來隱藏或重載。finally 塊用於清除在 try 塊中分配的任何資源。

控制老是傳遞給 finally 塊,與 try 塊的存在方式無關。finalize容許 Object 在「垃圾回收」回收 Object 以前

嘗試釋放資源並執行其餘清理操做。 

27.new有幾種用法?

答案:第一種:new Class();

第二種:覆蓋方法public new XXXX(){};

第三種:new 約束指定泛型類聲明中的任何類型參數都必須有公共的無參數構造函數。  

28.如何把一個array複製到arrayList裏?

答案:foreach( object o in array )arrayList.Add(o); 

29.概述反射和序列化

答案:反射:程序集包含模塊,而模塊包含類型,類型又包含成員。反射則提供了封裝程序集、模塊和類型的對象。

您可使用反射動態地建立類型的實例,將類型綁定到現有對象,或從現有對象中獲取類型。而後,能夠調用類型的

方法或訪問其字段和屬性

序列化:序列化是將對象轉換爲容易傳輸的格式的過程。例如,能夠序列化一個對象,而後使用 HTTP 經過 Internet

在客戶端和服務器之間傳輸該對象。在另外一端,反序列化將從該流從新構造對象。 

30.用sealed修飾的類有什麼特色?

答案:sealed 修飾符用於防止從所修飾的類派生出其它類。若是一個密封類被指定爲其餘類的基類,則會發生編譯時錯誤。

密封類不能同時爲抽象類。sealed 修飾符主要用於防止非有意的派生,可是它還能促使某些運行時優化。具體說來,因爲

密封類永遠不會有任何派生類,因此對密封類的實例的虛擬函數成員的調用能夠轉換爲非虛擬調用來處理。 

31.執行下面代碼後的結果:

1 String strTemp ="abcdefg 某某某"2 
3 Int i System.Text.Encoding.Default.GetBytes(strTemp).Length; 4 
5 Int j = strTemp.Length; 6 
7 問:i=(14 ) ;j=(11 ) 
View Code

答案:i=(14 ) ;j=(11 ) 中文兩個字節 

32.在c#中using和new這兩個關鍵字有什麼意義,請寫出你所知道的意義?

答案:Using 引入一個名子空間,或在使用了一個對像後自動調用其IDespose,New 實例化一個對像,

或修飾一個方法,表此方法徹底重寫此方法。

 

33.在下面的例子裏 當使用new B()建立B的實例時,產生什麼輸出?

 1 using System;  2 
 3 class A  4 
 5 {  6 
 7 public A()  8 
 9 { 10 
11 PrintFields(); 12 
13 } 14 
15  
16 
17 public virtual void PrintFields(){} 18 
19 } 20 
21  
22 
23 class B:A 24 
25 { 26 
27 int x=1; 28 
29 int y; 30 
31 public B() 32 
33 { 34 
35 y=-1; 36 
37 } 38 
39  
40 
41 public override void PrintFields() 42 
43 { 44 
45 Console.WriteLine("x={0},y={1}",x,y); 46 
47 } 48 
49 }
View Code

答案:X=1,Y=0

34.下面的例子中產生的輸出結果是什麼?

 1 using System;  2 
 3 class A  4 
 5 {  6 
 7 public static int X;  8 
 9  
10 
11 static A() 12 
13 { 14 
15 X=B.Y+1; 16 
17 } 18 
19 } 20 
21  
22 
23 class B 24 
25 { 26 
27 public static int Y=A.X+1; 28 
29 static B(){} 30 
31 static void Main() 32 
33 { 34 
35 Console.WriteLine("X={0},Y={1}",A.X,B.Y); 36 
37 } 38 
39 } 
View Code

答案:x=1,y=2 

35.談談類和結構的區別?

答案:最大區別一個是引用類型,一個是值類型默認成員訪問爲public是另一個區別 

36.一個長度爲10000的字符串,經過隨機從a-z中抽取10000個字符組成。請用c#語言編寫主要程序來實現。

答案:

1 Random r = new Random(); 2 StringBuilder sb = new StringBuilder(10000); 3 for (int i = 0; i < 10000; i++) 4 { 5 sb.Append((char)((int)'a' + r.Next(0, 26))); 6 } 7 string str = sb.ToString();
View Code

37.什麼叫作SQL注入,如何防止?請舉例說明。

答案:SQL注入就是在正常的SQL執行語句中惡意插入攻擊者想要運行的sql語句。1.最根本的,不使用組合sql的方法,

而是經過使用命令參數方式來執行命令,好比咱們把sql改爲這種方式:

string strSql = "select * from [user] where LoginName =@LoginName and Pwd =@Pwd ";

而後經過sqlcommand來執行它,就能夠從根本上解決這個問題。2.控制參數的長度。由於要想進行sql注入的話,

須要必定長度的字符串才能執行,若是咱們規定LoginName 的長度最長不超過8個,通常不會形成損害,固然這個只

是在特殊的狀況下才使用,好比有些狀況可能不能使用命令參數方式。 

38.下面這段代碼輸出什麼?爲何? 

1 int i=5; 2 
3 int j=5; 4 
5 if(Object.ReferenceEquals(i,j)) Console.WriteLine("Equal"); 6 
7 else Console.WriteLine("Not Equal");
View Code

答案:Not Equal,由於引用的地址不一樣。 

38. 簡述 private、 protected、 public、 internal 修飾符的訪問權限。

答 :

private : 私有成員, 在類的內部才能夠訪問。
protected : 保護成員,該類內部和繼承類中能夠訪問。
public : 公共成員,徹底公開,沒有訪問限制。
internal: 在同一命名空間內能夠訪問。

39 .列舉ASP.NET 頁面之間傳遞值的幾種方式。 

答:

1).使用QueryString, 如....?id=1; response. Redirect()....
2).使用Session變量
3).使用Server.Transfer

40.C#中的委託是什麼?事件是否是一種委託?

答 : 委託能夠把一個方法做爲參數代入另外一個方法。
委託能夠理解爲指向一個函數的引用。
是,是一種特殊的委託

41.override與重載的區別是什麼?

答 : override 與重載的區別。重載是方法的名稱相同。參數或參數類型不一樣,進行屢次重載以適應不一樣的須要override

是進行基類中函數的重寫。爲了適應須要。

42.若是在一個B/S結構的系統中須要傳遞變量值,可是又不能使用Session、Cookie、Application,

有幾種方法進行處理?

答 : QueryString、FormsAuthentication、 this.Server.Transfer

43.請編程遍歷頁面上全部TextBox控件並給它賦值爲string.Empty?

答:

1 foreach (Control control in this.Controls) 2 { 3 if (control is TextBox) 4 { 5 TextBox tb = (TextBox)control ; 6 tb.Text = String.Empty ; 7 } 8 }
View Code

44.請編程實現一個冒泡排序算法?

答:

 1 int[] array = new int [*] ;  2 int temp = 0 ;  3 for (int i = 0 ; i < array.Length - 1 ; i++)  4 {  5 for (int j = i + 1 ; j < array.Length ; j++)  6 {  7 if (array[j] < array[i])  8 {  9 temp = array[i] ; 10 array[i] = array[j] ; 11 array[j] = temp ; 12 } 13 } 14 }
View Code

45.描述一下C#中索引器的實現過程,是否只能根據數字進行索引?

答:能夠用任意類型。

46.求如下表達式的值,寫出您想到的一種或幾種實現方法: 1-2+3-4+……+m

答:

 1 int sum=0;  2 bool flag=true;  3 for(int i=1;i<=m;i++)  4 {  5 if(flag)  6 sum+=i;  7 else
 8 sum-=i;  9 flag=!flag; 10 } 11 return sum;
View Code

47.在下面的例子裏 當使用new B()建立B的實例時,產生什麼輸出?

 1 using System;  2 class A  3 {  4 public A()  5 {  6 PrintFields();  7 }  8 public virtual void PrintFields(){}  9 } 10 class B:A 11 { 12 int x=1; 13 int y; 14 public B() 15 { 16 y=-1; 17 } 18 public override void PrintFields() 19 { 20 Console.WriteLine("x={0},y={1}",x,y); 21 }
View Code

答:X=1,Y=0

48.什麼叫應用程序域?

答:應用程序域能夠理解爲一種輕量級進程。起到安全的做用。佔用資源小。

49.CTS、CLS、CLR分別做何解釋?

答:CTS:通用語言系統。CLS:通用語言規範。CLR:公共語言運行庫。

50.什麼是裝箱和拆箱? 

答:從值類型接口轉換到引用類型裝箱。從引用類型轉換到值類型拆箱。

51.什麼是受管制的代碼? 

答:unsafe:非託管代碼。不通過CLR運行。

52.什麼是強類型系統?

答:RTTI:類型識別系統。

53.net中讀寫數據庫須要用到那些類?他們的做用?

答:SqlConnection/OleDbConnection:創建數據庫的鏈接;
SqlCommand/OleDbCommand:執行數據庫腳本。 

54.在.net中,配件的意思是? 

答:程序集。(中間語言,源數據,資源,裝配清單)

55.經常使用的調用WebService的方法有哪些? 

答:

1.使用WSDL.exe命令行工具。
2.使用VS.NET中的Add Web Reference菜單選項

56. .net Remoting 的工做原理是什麼? 

答:服務器端向客戶端發送一個進程編號,一個程序域編號,以肯定對象的位置。

57.根據線程安全的相關知識,分析如下代碼,當調用test方法時i>10時是否會引發死鎖?並簡要說明理由。

 1 public void test(int i)  2 {  3 lock(this)  4 {  5 if (i>10)  6 {  7 i--;  8 test(i);  9 } 10 } 11 }
View Code

答:不會發生死鎖,(但有一點int是按值傳遞的,因此每次改變的都只是一個副本,所以不會出現死鎖。

但若是把int換作一個object,那麼死鎖會發生)

58.簡要談一下您對微軟.NET 構架下remoting和webservice兩項技術的理解以及實際中的應用。 

答:WS主要是可利用HTTP,穿透防火牆。而Remoting能夠利用TCP/IP,二進制傳送提升效率。

remoting是.net 中用來跨越machine, process, appdomain 進行方法調用的技術,對於三層結構的程序,

就可使用remoting技術來構建.它是分佈應用的基礎技術.至關於之前的DCOM Web Service是一種構建

應用程序的普通模型,並能在全部支持internet網通信的操做系統上實施。Web Service令基於組件的開發和

web的結合達到最佳,基於組件的對象模型

59.公司要求開發一個繼承System.Windows.Forms.ListView類的組件,要求達到如下的特殊功能:

點擊ListView各列列頭時,能按照點擊列的每行值進行重排視圖中的全部行 (排序的方式如DataGrid類似)。

根據您的知識,請簡要談一下您的思路 

答:根據點擊的列頭,包該列的名稱取出,按照該列名排序後,再綁定到ListView中。

60.給定如下XML文件,完成算法流程圖。

1 <FileSystem> 
2 < DriverC > 
3 <Dir DirName=」MSDOS622」> 
4 <File FileName =」 Command.com」 ></File> 
5 </Dir> 
6 <File FileName =」MSDOS.SYS」 ></File> 
7 <File FileName =」 IO.SYS」 ></File> 
8 </DriverC> 
9 </FileSystem> 
View Code 

61.請畫出遍歷全部文件名(FileName)的流程圖(請使用遞歸算法)。

答:圖就不畫了,直接把程序寫出來:

 1 Public void DomDepthFirst(XmlNode currentNode)  2 {  3 XmlNode node=currentNode.FirstChild;  4 while(node!=null)  5 {  6 DomDepthFirst(node);  7 node=node.NextSibling;  8 }  9 if(node.Name=="File") 10 { 11 Console.Write(((XmlElement)node).GetAttribute("FileName")+"\r\n"); 12 } 13 }
View Code 

62.能用foreach遍歷訪問的對象須要實現 ______接口或聲明_______方法的類型。

答:IEnumerable 、 GetEnumerator。

63.GC是什麼? 爲何要有GC? 

答:GC是垃圾收集器。程序員不用擔憂內存管理,由於垃圾收集器會自動進行管理。要請求垃圾收集,

能夠調用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()

64.String s = new String("xyz");建立了幾個String Object? 

答:兩個對象,一個是「xyz」,一個是指向「xyz」的引用對像s。

65.abstract class和interface有什麼區別? 

答:
聲明方法的存在而不去實現它的類被叫作抽像類(abstract class),它用於要建立一個體現某些基本行爲的類,

併爲該類聲明方法,但不能在該類中實現該類的狀況。不能建立abstract 類的實例。然而能夠建立一個變量,

其類型是一個抽像類,並讓它指向具體子類的一個實例。不能有抽像構造函數或抽像靜態方法。Abstract 類的

子類爲它們父類中的全部抽像方法提供實現,不然它們也是抽像類爲。取而代之,在子類中實現該方法。知道其

行爲的其它類能夠在類中實現這些方法。
接口(interface)是抽像類的變體。在接口中,全部方法都是抽像的。多繼承性可經過實現這樣的接口而得到。

接口中的全部方法都是抽像的,沒有一個有程序體。接口只能夠定義static final成員變量。接口的實現與子類類似,

除了該實現類不能從接口定義中繼承行爲。當類實現特殊接口時,它定義(即將程序體給予)全部這種接口的方法。

而後,它能夠在實現了該接口的類的任何對像上調用接口的方法。因爲有抽像類,它容許使用接口名做爲引用變量的類型。

一般的動態聯編將生效。引用能夠轉換到接口類型或從接口類型轉換,instanceof 運算符能夠用來決定某對象的類是否實現了接口。

66.啓動一個線程是用run()仍是start()? 

答:啓動一個線程是調用start()方法,使線程所表明的虛擬處理機處於可運行狀態,這意味着它能夠由JVM調度並執行。

這並不意味着線程就會當即運行。run()方法能夠產生必須退出的標誌來中止一個線程。

67.接口是否可繼承接口? 抽像類是否可實現(implements)接口? 抽像類是否可繼承實體類(concrete class)? 

答:造函數接口能夠繼承接口。抽像類能夠實現(implements)接口,抽像類是否可繼承實體類,但前提是實體

類必須有明確的結構。

68.構造器Constructor是否可被override? 

答:構造器Constructor不能被繼承,所以不能重寫Overriding,但能夠被重載Overloading。

69.是否能夠繼承String類? 

答:String類是final類故不能夠繼承。

70.兩個對像值相同(x.equals(y) == true),但卻可有不一樣的hash code,這句話對不對? 

答:不對,有相同的hash code。

71.swtich是否能做用在byte上,是否能做用在long上,是否能做用在String上? 

答:switch(expr1)中,expr1是一個整型,字符或字符串,所以能夠做用在byte和long上,也能夠做用在string上。

72.當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法? 

答:不能,一個對象的一個synchronized方法只能由一個線程訪問。

73.abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?

答:都不能。

74.List, Set, Map是否繼承自Collection接口?

答:List,Set是Map不是

75.Set裏的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==仍是equals()? 它們有何區別? 

答:Set裏的元素是不能重複的,那麼用iterator()方法來區分重複與否。equals()是判讀兩個Set是否相等。
equals()和==方法決定引用值是否指向同一對像equals()在類中被覆蓋,爲的是當兩個分離的對象的內容和

類型相配的話,返回真值。

76.數組有沒有length()這個方法? String有沒有length()這個方法? 

答:數組和string都沒有Length()方法,只有Length屬性。

77.sleep() 和 wait() 有什麼區別? 

答:sleep()方法是將當前線程掛起指定的時間。
wait()釋放對象上的鎖並阻塞當前線程,直到它從新獲取該鎖。

78.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正確。

79.談談final, finally, finalize的區別。 

答:
final-修飾符(關鍵字)若是一個類被聲明爲final,意味着它不能再派生出新的子類,不能做爲父類被繼承。

所以 一個類不能既被聲明爲 abstract的,又被聲明爲final的。將變量或方法聲明爲final,能夠保證它們在使用中

不被改變。被聲明爲final的變量必須在聲明時給定初值,而在之後的引用中只能讀取,不可修改。被聲明爲 final的方

法也一樣只能使用,不能重載finally-再異常處理時提供 finally 塊來執行任何清除操做。若是拋出一個異常,那麼相匹

配的 catch 子句就會 執行,而後控制就會進入 finally 塊(若是有的話)。finalize-方法名。Java 技術容許使用 finalize()

方法在垃圾收集器將對像從內存中清除出去以前作必要的清理 工做。這個方法是由垃圾收集器在肯定這個對象沒有被引用時

對這個對象調用的。它是在 Object 類中定義的 ,所以全部的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執

行其餘清理工做。finalize() 方法是在垃圾收集器刪除對像以前對這個對象調用的。

80.如何處理幾十萬條併發數據? 

答:用存儲過程或事務。取得最大標識的時候同時更新..注意主鍵不是自增量方式這種方法併發的時候是不會有重複主鍵的.

.取得最大標識要有一個存儲過程來獲取.

81.Session有什麼重大BUG,微軟提出了什麼方法加以解決? 

答:是iis中因爲有進程回收機制,系統繁忙的話Session會丟失,能夠用Sate server或SQL Server數據庫的方式存儲

Session不過這種方式比較慢,並且沒法捕獲Session的END事件。

82.進程和線程的區別? 

答:進程是系統進行資源分配和調度的單位;線程是CPU調度和分派的單位,一個進程能夠有多個線程,這些線程共享這個進程的資源。

83.堆和棧的區別? 

答:棧是編譯期間就分配好的內存空間,所以你的代碼中必須就棧的大小有明確的定義;堆是程序運行期間動態分配的內存空間,

你能夠根據程序的運行狀況肯定要分配的堆內存的大小

84.成員變量和成員函數前加static的做用? 

答:它們被稱爲常成員變量和常成員函數,又稱爲類成員變量和類成員函數。分別用來反映類的狀態。好比類成員變量能夠用來統

計類實例的數量,類成員函數負責這種統計的動做。

85.ASP.NET與ASP相比,主要有哪些進步? 

答:asp解釋形,aspx編譯型,性能提升,能夠跟美工的工做分開進行,更有利於團隊開發。

 

>>>>>>>>>>>>>>>第二部分<<<<<<<<<<<<

相關文章
相關標籤/搜索