C#筆試題收集


1. c#中錯誤處理機制有哪些

    CLR提供的結構化錯誤處理機制,用try..catch..finally 捕獲


2. public/protect/private/internal修飾符的區別

    public:任何類和成員都可以訪問

    protect:該類和派生類能訪問

    private:只能該類訪問

    internal:只能在包含它的程序集中訪問


3. 大量數據(如3000萬條數據)並發處理時,有哪幾種機制

    存儲過程或事務.取得最大標識的時候同時更新,注意主鍵不是自增量方式.這種方法並發的時候是不會重復主鍵的,

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


4. String/StringBuilder的異同

    string是一個不可變的數據類型,一旦對字符串對象進行了初始化,該字符串對象就不能改變了。修改字符串內容的方法

    和運算符實際上是創建一個新的字符串.

    stringbuilder分配好內存,對字符串的修改就在賦予stringbuilder實例的存儲單元中進行.

     舉例:

    string的確是不能修改的:  
    string  str  =  "a";  
    str  =  "b"//str是被賦值了"b"沒錯,但是str里面原來的string值"a"並沒有被修改。  
    string  str  =  "a";  
    string  str1  =  str;  
    str  +=  "b";//此時str  =  "ab",str1  =  "a";  
        
    StringBuilder  str  =  new  StringBuilder(  "a"  );  
    StringBuilder  str1  =  str;  
    str.Append(  "b"  );  
    str.ToString()和str1.ToString()都是"ab"。  
 
5. 解釋string str=null/string str=""

    str=null,聲明而不分內存空間,str=""聲明而分內存空間


6. 什么是單例模式,寫個運用單例模式的類

    Singleton模式包含的角色只有一個,就是Singleton。Singleton擁有一個私有構造函數,確保用戶無法通過new直接

    實例它

 

    

//  Singleton pattern -- Structural example  
using  System;

//  "Singleton"
class  Singleton
{
  
// Fields
  private static Singleton instance;

 
// Constructor
 protected Singleton() {}

 
// Methods
 public static Singleton Instance()
{
  
// Uses "Lazy initialization"
   if( instance == null )
     instance 
= new Singleton();

  
return instance;
  }

}


/**/ /// <summary>
/// Client test
/// </summary>

public   class  Client
{
 
public static void Main()
{
   
// Constructor is protected -- cannot use new
   Singleton s1 = Singleton.Instance();
   Singleton s2 
= Singleton.Instance();

   
if( s1 == s2 )
     Console.WriteLine( 
"The same instance" );
 }

}


7. ASP.NET頁面間傳遞有哪幾種方式

    QueryString, response.Redirect(), session, server.Transfer 

 
8. 解釋重載/覆蓋 
9. Web Services的含義/UDDI的含義

    Web服務是利用SOAP在HTTP上執行遠程方法調用的一種新方法。

    UDDI的含義:統一描述發現和集成(UDDI)提供一種發布和查找服務描述的方法。


10.虛函數/抽象函數各自的定義

    虛函數:由virtual聲明,它允許在派生類中被重寫,要重寫方法,必須先聲名為virtual 
public class myclass 

    public virtual int myint() 
    { 
        函數體; 
    } 
}

class myclass1:myclass 

    public override int myint() 
   { 
      函數體1; 
   } 
}

 

抽象類、抽象函數:由abstract聲明,在抽象類中可以定義抽象方法,抽象方法基本沒有執行代碼,派生類必須重寫它,提供其執行代碼 
public abstract class myclass 

     public abstract int myint(); 

public class myclass1:myclass 

     public override int myint() 
    { 
      函數體; 
    } 


11.接口和類的異同

接口類:由interface聲明,是特殊的抽象類,是方法、屬性、事件和索引符的組合,沒有字段,其成員無執行方式,無構造函數,不允許進行運算符重載,接口和它的成員沒有任何訪問修飾符,它總是公共的,不能聲明為虛擬或靜態,繼承自接口的派生類必須實現接口中的所有方法

 

interface Imyinterface 

    void myfunction(); 
   string name 
   { 
     get; 
     set; 
   } 

class myclass:Imyinterface 

   void myfunction() 
  { 
    函數體; 
   } 
   string name 
   { 
     get 
   { 
     return name; 
   } 
   set 
   { 
    name=value; 
    } 
   } 
}

 

接口是負責功能的定義,項目中通過接口來規范類,操作類以及抽象類的概念! 
而類是負責功能的具體實現! 

在類中也有抽象類的定義,抽象類與接口的區別在於: 
抽象類是一個不完全的類,類里面有抽象的方法,屬性,也可以有具體的方法和屬性,需要進一步的專業化。 
但接口是一個行為的規范,里面的所有東西都是抽象的! 
一個類只可以繼承一個基類也就是父類,但可以實現多個接口 

12.property/assembly區別


13.DataReader/DataSet區別

dataset表示一個數據集,是數據在內存中的緩存。 可以包括多個表 
DatSet 連接數據庫時是非面向連接的。把表全部讀到Sql中的緩沖池,並斷開於數據庫的連接 
datareader 連接數據庫時是面向連接的。讀表時,只能向前讀取,讀完數據后有用戶決定是否斷開連接。


14.using/new各自的意義

using引入名稱空間或者說使用非托管資源new 新建實例或隱藏父類方法

 

15.一列數的規則如下: 1、1、2、3、5、8、13、21、34...... 求第30位數是多少, 用遞歸算法實現

public class MainClass 

          public static void Main() 
           { 
                  Console.WriteLine(Foo(30)); 
           } 
           public static int Foo(int i) 
           { 
                  if (i <= 0) 
                  return 0; 
                  else if(i > 0 && i <= 2) 
                  return 1; 
                  else return Foo(i -1) + Foo(i - 2); 
            } 
}

 

16.C#中的委托是什么?事件是不是一種委托? 
委托可以把一個方法作為參數代入另一個方法。 
委托可以理解為指向一個函數的引用。 
是,是一種特殊的委托

 

17.override與重載的區別

重載是方法的名稱相同。參數或參數類型不同,進行多次重載以適應不同的需要 
Override 是進行基類中函數的重寫

 

18.如果在一個B/S結構的系統中需要傳遞變量值,但是又不能使用Session、Cookie、Application,您有幾種方法進行處理?

QueryString、FormsAuthentication,Server.Transfer

 

19.請編程遍歷頁面上所有TextBox控件並給它賦值為string.Empty? 
foreach (System.Windows.Forms.Control control in this.Controls) 

     if (control is System.Windows.Forms.TextBox) 
    { 
           System.Windows.Forms.TextBox tb = (System.Windows.Forms.TextBox)control ;
           tb.Text = String.Empty ; 
     } 
}

 

foreach (System.Windows.Forms.Control controlinthis.Controls)

  
if (controlis System.Windows.Forms.TextBox)
  { 
    System.Windows.Forms.TextBox tb 
= controlas System.Windows.Forms.TextBox ;
    
if(tb!=null)
    {
      tb.Text 
= String.Empty ;
    }
  } 
}

 

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

int [] array = new int [*] ; 
int temp = 0 ; 
for (int i = 0 ; i < array.Length - 1 ; i++) 

      for (int j = i + 1 ; j < array.Length ; j++) 
     { 
        if (array[j] < array[i]) 
          { 
             temp = array[i] ; 
             array[i] = array[j] ; 
             array[j] = temp ; 
          } 
      } 
}

 

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

    可以用任意類型

 

22.求以下表達式的值,寫出您想到的一種或幾種實現方法: 1-2+3-4+……+m 
if(m%2 == 1){ 
    S = (m + 1) / 2; 
} else { 
    S = -m / 2; 
}

 

int Num = this.TextBox1.Text.ToString() ; 
int Sum = 0 ; 
for (int i = 0 ; i < Num + 1 ; i++) 

if((i%2) == 1) 

Sum += i ; 

else 

Sum = Sum - I ; 


System.Console.WriteLine(Sum.ToString()); 
System.Console.ReadLine() ; 

23.

using System; 
class A 
   { 
     public A() 
   { 
      PrintFields(); 
   } 
     public virtual void PrintFields(){} 
   } 
class B:A 

     int x=1; 
     int y; 
     public B() 
    { 
       y=-1; 
    } 
    public override void PrintFields() 
    { 
     Console.WriteLine("x={0},y={1}",x,y); 
    }

}
當使用new B()創建B的實例時,產生什么輸出? X=1,Y=0;x= 1 y = -1

24..什么叫應用程序域?

應用程序域可以理解為一種輕量級進程。起到安全的作用。占用資源小。

 

25.CTS、CLS、CLR分別作何解釋?

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

 

26.什么是裝箱和拆箱? 
從值類型接口轉換到引用類型裝箱。從引用類型轉換到值類型拆箱。

27.什么是受管制的代碼?

unsafe:非托管代碼。不經過CLR運行。

 

28.什么是強類型系統? 
RTTI:類型識別系統。

 

29.在.net中,配件的意思是? 
程序集。(中間語言,源數據,資源,裝配清單)

30.常用的調用WebService的方法有哪些?

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

 

31.net Remoting 的工作原理是什么? 
服務器端向客戶端發送一個進程編號,一個程序域編號,以確定對象的位置。

 

32.根據線程安全的相關知識,分析以下代碼,當調用test方法時i>10時是否會引起死鎖?並簡要說明理由。 
public void test(int i) 

    lock(this) 
    { 
       if (i>10) 
      { 
       i--; 
       test(i); 
     } 
   } 
}

 

不會發生死鎖,(但有一點int是按值傳遞的,所以每次改變的都只是一個副本,因此不會出現死鎖。但如果把int換做一個object,那么死鎖會發生

 

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

WS主要是可利用HTTP,穿透防火牆。而Remoting可以利用TCP/IP,二進制傳送提高效率。 
 remoting是.net中用來跨越machine, process, appdomain 進行方法調用的技術,對於三成結構的程序,就可以使用remoting技術來構建.它是分布應用的基礎技術.相當於以前的DCOM   WebService是一種構建應用程序的普通模型,並能在所有支持internet網通訊的操作系統上實施。WebService令基於組件的開發和web的結合達到最佳,基於組件的對象模型 

 

34.公司要求開發一個繼承System.Windows.Forms.ListView類的組件,要求達到以下的特殊功能:點擊ListView各列列頭時,能按照點擊列的每行值進行重排視圖中的所有行 (排序的方式如DataGrid相似)。根據您的知識,請簡要談一下您的思路
根據點擊的列頭,包該列的ID取出,按照該ID排序后,在給綁定到ListView中。

35..給定以下XML文件,完成算法流程圖。 
<FileSystem> 
< DriverC > 
<Dir DirName=”MSDOS622”> 
<File FileName =” Command.com” > </File> 
</Dir> 
<File FileName =”MSDOS.SYS” > </File> 
<File FileName =” IO.SYS” > </File> 
</DriverC> 
</FileSystem> 
請畫出遍歷所有文件名(FileName)的流程圖(請使用遞歸算法)。

 

void FindFile( Directory d ) 

FileOrFolders = d.GetFileOrFolders(); 
foreach( FileOrFolder fof in FileOrFolders ) 

if( fof is File ) 
You Found a file; 
else if ( fof is Directory ) 
FindFile( fof ); 

}

36.能用foreach遍歷訪問的對象需要實現 IEnumerable接口或聲明GetEnumerator方法的類型。

 

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

兩個對象,一個是“xyx”,一個是指向“xyx”的引用對像s

 

38.啟動一個線程是用run()還是start()? 
啟動一個線程是調用start()方法,使線程所代表的虛擬處理機處於可運行狀態,這意味着它可以由JVM調度並執行。這並不意味着線程就會立即運行。run()方法可以產生必須退出的標志來停止一個線程。

39.接口是否可繼承接口? 抽像類是否可實現(implements)接口? 抽像類是否可繼承實體類(concrete class)? 
接口可以繼承接口。抽像類可以實現(implements)接口,抽像類是可繼承實體類,但前提是實體類必須有明確的構造函數。

 

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

構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading。

41.是否可以繼承String類? 
String類是final類故不可以繼承。

 

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

 

43.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

switch(expr1)中,expr1是一個整型,字符或字符串,因此可以作用在byte和long上,也可以作用在string上。

 

44.當一個線程進入一個對象的一個synchronized方法后,其它線程是否可進入此對象的其它方法? 
不能,一個對象的一個synchronized方法只能由一個線程訪問

 

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

都不能。

 

46.Set里的元素是不能重復的,那么用什么方法來區分重復與否呢? 是用==還是equals()? 它們有何區別? 
Set里的元素是不能重復的,那么用iterator()方法來區分重復與否。equals()是判讀兩個Set是否相等。 
equals()和==方法決定引用值是否指向同一對像equals()在類中被覆蓋,為的是當兩個分離的對象的內容和類型相配的話,返回真值。

47.數組有沒有length()這個方法? String有沒有length()這個方法? 
數組和string都沒有Length()方法,只有Length屬性。

 

48.sleep() 和 wait() 有什么區別?

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

 

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

 

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

是iis中由於有進程回收機制,系統繁忙的話Session會丟失,可以用Sate server或SQL Server數據庫的方式存儲Session不過這種方式比較慢,而且無法捕獲Session的END事件。

 

51.進程和線程的區別?

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

 

52.堆和棧的區別? 
棧是編譯期間就分配好的內存空間,因此你的代碼中必須就棧的大小有明確的定義;堆是程序運行期間動態分配的內存空間,你可以根據程序的運行情況確定要分配的堆內存的大小

53..成員變量和成員函數前加static的作用? 
它們被稱為常成員變量和常成員函數,又稱為類成員變量和類成員函數。分別用來反映類的狀態。比如類成員變量可以用來統計類實例的數量,類成員函數負責這種統計的動作。

54..產生一個int數組,長度為100,並向其中隨機插入1-100,並且不能重復

int[] intArr=new int[100]; 
ArrayList myList=new ArrayList(); 
Random rnd=new Random(); 
while(myList.Count <100) 

int num=rnd.Next(1,101); 
if(!myList.Contains(num)) 
myList.Add(num); 

for(int i=0;i <100;i++) 
intArr[i]=(int)myList[i];

55.請說明在.net中常用的幾種頁面間傳遞參數的方法,並說出他們的優缺點。 
session(viewstate) 簡單,但易丟失 
application 全局 
cookie 簡單,但可能不支持,可能被偽造 
input ttype="hidden" 簡單,可能被偽造 
url參數 簡單,顯示於地址欄,長度有限 
數據庫 穩定,安全,但性能相對弱

56.請指出GAC的含義?

全局程序集緩存。

 

57.向服務器發送請求有幾種方式? 
get,post。get一般為鏈接方式,post一般為按鈕方式。

 

58.軟件開發過程一般有幾個階段?每個階段的作用?

需求分析,架構設計,代碼編寫,QA,部署

 

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

using 引入名稱空間或者使用非托管資源 
new 新建實例或者隱藏父類方法

 

60.需要實現對一個字符串的處理,首先將該字符串首尾的空格去掉,如果字符串中間還有連續空格的話,僅保留一個空格,即允許字符串中間有多個空格,但連續的空格數不可超過一個.
string inputStr=" xx xx "; 
inputStr=Regex.Replace(inputStr.Trim()," *"," ");

61.下面這段代碼輸出什么?為什么?

int i=5; 
int j=5; 
if (Object.ReferenceEquals(i,j)) 
Console.WriteLine("Equal"); 
else 
Console.WriteLine("Not Equal"); 
不相等,因為比較的是對像

62.什么叫做SQL注入,如何防止?請舉例說明。 
利用sql語言漏洞獲得合法身份登陸系統。如身份驗證的程序設計成: 
SqlCommand com=new SqlCommand("Select * from users where username='"+t_name.text+"' and pwd='"+t_pwd.text+"'");
object obj=com.ExcuteScale(); 
if(obj!=null) 
  { 
    //通過驗證 
  } 
這段代碼容易被sql注入。如用戶在t_name中隨便輸入,在t_pwd中輸入1' and 1='1  就可以進入系統了。

63.什么是反射? 
動態獲取程序集信息

 

64.常用關鍵字

  

     abstract 可以和類、方法、屬性、索引器及事件一起使用, 
  標識一個可以擴展但不能被實體化的、必須被實現的類或方法。 
  as 一個轉換操作符,如果轉換失敗,就返回null。 
  base 用於訪問被派生類或構造中的同名成員隱藏的基類成員。 
  catch 定義一個代碼塊,在特定類型異常拋出時,執行塊內代碼。 
  參見try和finally。 
  checked 既是操作符又是語句。 
  確保編譯器運行時,檢查整數類型操作或轉換時出現的溢出。 
  const 標識一個可在編譯時計算出來的變量值,即一經指派不可修改的值。 
  delegate 指定一個聲明為一種委托類型。委托把方法封裝為可調用實體, 
  能在委托實體中調用。 
  enum 表示一個已命名常量群集的值類型。 
  event 允許一個類或對象提供通知的成員,他必須是委托類型。 
  explicit 一個定義用戶自定義轉換操作符的操作符, 
  通常用來將內建類型轉換為用戶定義類型或反向操作。 
  必須再轉換時調用顯示轉換操作符。 
  extern 標識一個將在外部(通常不是c#語言)實現的方法。 
  finally 定義一個代碼塊,在程序控制離開try代碼快后執行。參見try和catch。 
  fixed 在一個代碼塊執行時,在固定內存位置為一個變量指派一個指針。 
  foreach 用於遍歷一個群集的元素。 
  goto 一個跳轉語句,將程序執行重定向到一個標簽語句。 
  implicit 一個操作符,定義一個用戶定義的轉換操作符。 
  通常用來將預定義類型轉換為用戶定義類型或反向操作。 
  隱式轉換操作符必須在轉換時使用。 
  interface 將一個聲明指定為接口類型,即實現類或構造必須遵循的合同。 
  internal 一個訪問修飾符。 
  namespace 定義一個邏輯組的類型和命名空間。 
  operator 用來聲明或多載一個操作符。 
  out 標識一個參數值會受影響的參數,但在傳入方法時, 
  該參數無需先初始化。 
  params 聲明一個參數數組。如果使用,必須修改指定的最后一個參數。 
  允許可選參數。 
  readonly 標識一個變量的值在初始化后不可修改。 
  ref 標識一個參數值可能會受影響的參數。 
  sealed 防止類型被派生,防止方法和property被覆載。 
  sizeof 一個操作符,以byte為單位返回一個值類型的長度。 
  stackalloc 返回在堆上分配的一個內存塊的指針。 
  struct struct是一種值類型,可以聲明常量、字段、方法、property、 
  索引器、操作符、構造器和內嵌類型。 
  throw 拋出一個異常。 
  try 異常處理代碼塊的組成部分之一。try代碼塊包括可能會 
  拋出異常的代碼。參閱catch和finally關鍵字。 
  typeof 一個操作符,返回傳入參數的類型。 
  unchecked 禁止溢出檢查。 
  unsafe 標注包含指針操作的代碼塊、方法或類。 
  using 當用於命名空間時,using關鍵字允許訪問該命名空間中的類型, 
  而無需指定其全名。也用於定義finalization操作的范圍。 
  virtual 一個方法修飾符,標識可被覆載的方法。 
  volatile 標識一個可被操作系統、某些硬件設備或並發線程修改的attribute。

 

65.public static const int A=1;這段代碼有錯誤么?是什么? 
     const成員都是static所以應該去掉static

66.float f=-123.567F; 
    int i=(int)f; 
    i的值現在是_____?

   -123

 

67.利用operator聲明且僅聲明了==,有什么錯誤么? 
要同時修改Equale和GetHash() ? 重載了"==" 就必須重載 "!="

68.在Asp.net中所有的自定義用戶控件都必須繼承自________?

System.Web.UI.UserControl

 

69.在.Net中所有可序列化的類都被標記為_____?

 [serializable]

70..下面的代碼中有什么錯誤嗎?_______ 
    using System; 
    class A 
    { 
          public virtual void F(){ 
              Console.WriteLine("A.F"); 
          } 
      } 
      abstract class B:A 
      { 
          public abstract override void F(); 
      }

abstract override 是不可以一起修飾

 

71.當類T只聲明了私有實例構造函數時,則在T的程序文本外部,______(可以 or 不可以)從T 
   派生出新的類,____(可以 or 不可以)直接創建T的任何實例。

不可以,不可以

 

72..在.Net中,類System.Web.UI.Page 可以被繼承么? 
可以

 

73.c#實現約瑟夫環問題

public static int[] Joseph(int total, int start, int alter){

           int j, k = 0;

        int[] count = new int[total];

        int[] s = new int[total];

        for (int i = 1; i < total + 1; i++){

             s[i - 1] = i;

        }

        for (int i = total; i >= 2; i--){

             start = (start + alter - 1) % i;

             if (start == 0){

                 start = i;

              }

             count[k] = s[start - 1];

             k++;

             for (j = start; j < i; j++){

                  s[j - 1] = s[j];

             }

         }

         count[k] = s[1];

         return count;

    }

 

74.知abc+cba = 1333,其中a,b,c均為一位數,編程求出滿足條件的a,b,c所有組合

for (int a = 1; a < 10; a++){

       for (int b = 1; b < 10; b++){

              for (int c = 1; c < 10; c++) {

                 if (100 * a + 10 * b + c + 100 * c + 10 * b + a == 1333)

                 {

                  Console.WriteLine(a.ToString() + b.ToString() + c.ToString());

                 }

              }

       }

   }

 

75.用100元買100支筆,其中鋼筆3元/支,圓珠筆2元/支,鉛筆0。5元/支,求幾種組合

for (int a = 1; a < 100/3; a++){

      for (int b = 1; b < 100/2; b++{

             for (int c = 1; c < 100/0.5; c++){

               if ((a+b+c == 100) && (3*a + 2*b + 0.5*c == 100)) {

      Console.WriteLine(a.ToString() + "--" + b.ToString() + "--" + c.ToString());

               }

            }

       }

  }

 

76.倒置數組a的元素到b

int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

int[] b = Reversel(a);

public static int[] Reversel(int[] a)

{

    int[] b = new int[a.Length];

    for (int i = 0; i < a.Length; i++)

    {

        b[i] = a[a.Length - 1 - i];

    }

    return b;

}

 

77.倒置數組a里的元素

int[] c = ReverselSelf(a);

public static int[] ReverselSelf(int[] a)

{

    int temp = 0;

    for (int i = 0; i < a.Length / 2; i++)

    {

        temp = a[i];

        a[i] = a[a.Length - 1 - i];

        a[a.Length - 1 - i] = temp;

    }

    return a;

}

 

78.設計一個函數,在數組的第i個下標前插入一個數據元素,並保持數組元素的連續性

int[] a = { 0,1,2,3,4,5,6,7,8,9};

int[] b = InsertItem(a,5,11);

public static int[] InsertItem(int[] a, int i, int item)

{

    int[] a1 = new int[i + 1];

    int[] a2 = new int[a.Length - i];

 

    for (int j = 0; j < a.Length; j ++ )

    {

        if (j < i)

        {

            a1[j] = a[j];

        }

        else

        {

            a2[j - i] = a[j];

        }

    }

    a1[i] = item;

    int[] b = new int[a.Length + 1];

    a1.CopyTo(b,0);

    a2.CopyTo(b, i + 1);

    return b;

}

 

79.設計一個函數,刪除數組第i個下標的數據元素,並保持數組元素的連續性

int[] a = { 0,1,2,3,4,5,6,7,8,9};

int[] c = DeleteItem(a,5);

public static int[] DeleteItem(int[] a, int i)

{

    int[] c = new int[a.Length - 1];

    for (int j = 0; j < a.Length; j ++ )

    {

        if (j < i)

        {

            c[j] = a[j];

        }

        else if (j == i) { continue; }

        else if (j > i)

        {

            c[j - 1] = a[j];

        }

    }

    return c;

}

 

.net面試寶典

1。試解釋如下兩個概念 : CLR,CTS
公共語言運行時,公共類型系統

2。property 和 attribute 的區別是什么?
屬性,
特性 ,描述代碼或行為

3.net現在是什么版本?談談net各版本的兼容性

4.什么是強類型?什么弱類型?c#是強類型還是弱類型?javascript呢?
類型檢查的嚴格程度,C#是強類型,javascript是弱類型

5.什么是gac?
全局程序集緩存

6.解釋下c#與c++有什么區別?
c#  托管    net虛擬機  完全面向對象  無多重繼承
c++ 非托管  不需要     部分面向對象  有多重繼承

7.引用類型和值類型區別是什么?
引用類型  繼承自system.object    引用在棧上  實際值在堆上
值類型          system.valuetype 在棧上

8.解釋一下裝箱和拆箱。為什么要裝箱和拆箱?
裝箱就是將值類型轉換成引用類型,並從棧中搬到堆中。而拆箱就是把引用類型轉換成值類型

9. explicit 和 implicit 的區別是什么
類型顯式轉換和隱式轉換

10. DateTime 是否可以為null
不能,datetime為值類型

11.DateTime.Parse(mystring);這行代碼有什么問題?
Date.TryParse()

12.extern是什么意思?
外部實現方法

13.編寫一段代碼,打印代碼本身
 static class Program
    {
        [STAThread]
        static void Main()
        {
            string s = "static class Program{{static void Main(){{string s ={1}{0}                        {1};System.Console.WriteLine(s,s,(char)34);}}}}";
            System.Console.WriteLine(s,s,(char)34);
        }
    }

14.談談final,finally,finalize的區別
防止重寫,
try{}catch{}
在垃圾回收之前,嘗試釋放資源並執行其他清理操作


15.const和static readonly 區別是什么?
編譯時常量
運行時常量

16.定制異常類應繼承哪個類?應包含哪些構造函數?
ApplicationException

class ClassException:ApplicationException
    {
        public ClassException();
        public ClassException(string message);
        public ClassException(string message, Exception innerException);
    }

 

17.請輸出下列程序結果

 static void Main()
        {
            int x = 20;
            int y = 40;
            GetPlus(ref x, y);
            Console.Write(x.ToString() + y.ToString());
        }

        private static void GetPlus(ref int x, int y)
        {
            x = x + y;
            y = x + y;
        }

 

x=60,y=40

 

18.在c#中,a.Equals(b)和a==b一樣嗎?

a.Equals(b)  成員值一樣

a==b 同一個引用

 

19.調用assembly.Load算靜態引用還是動態引用?

動態引用

 

20.何時使用assembly.loadform?何時使用assembly.loadfile?

assembly.loadform,全部加載,包括依賴

assembly.loadfile,只加載所需文件,有可能出錯

 

21.什么是assembly qualified name?它是一個文件名嗎?

包括文件名,版本,公鑰,區域

 

22.assembly.load("foo.dll");這樣的寫法是否正確?

錯誤, assenbly.load("foo");  assembly.loadform("foo.dll");

 

23.程序集的強名包含哪幾部分?

簡單名,版本號,文化信息,公鑰令牌

 

24.哪兩個類不能實例化?

抽象類或者包含私有構造函數的類

 

25. 下面程序輸出結果是什么?

 class Class1
    {
        public static int count = 0;
        static Class1(){
            count++;
        }
        public Class1()
        {
            count++;
        }
    }

 

 static void Main()
        {
            Class1 o1 = new Class1();
            Class1 o2 = new Class1();
            int a = Class1.count;
        }

a=3;

只有在第一次實例化的時候才啟動static Class1()函數,以后再實例化時該函數不起作用

 

26.為什么虛函數效率低?

間接尋址

 

27.new的用法

運算符

修飾符

約束


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM