c# 筆試題及參考答案大全(轉)

 

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

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


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

    public:任何類和成員均可以訪問程序員

    protect:該類和派生類能訪問web

    private:只能該類訪問面試

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


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

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

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


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三、2一、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的用法

運算符

修飾符

約束

 

  

新編c#面試題大全

 

 

2.       const和readonly有什麼區別?

 答:const能夠用於類的成員常量和局部常量,必須在聲明時賦值,以後不能夠對常量進行賦值。而readonly只能用於類的成員變量不能用於局部變量,在聲明時能夠不賦值,除了在構造函數中能夠再次賦值外,其它的地方和const同樣也不能賦值。

 

5.        接口和抽象類有什麼區別?你選擇使用接口和抽象類的依據是什麼?答

 答:區別以下

 (1)        抽象類能夠有抽象成員(無具體實現),也能夠有非抽象成員(有具體實現);接口只有抽象成員。

 (2)        一個類不能同時繼承多個抽象類,一個類能夠同時實現多個接口。

 若是多個子類中有不少代碼是重複的,這時採用抽象類,由於能夠將這些代碼放到抽象類的非抽象方法中,這樣能夠達到代碼複用。當實現多個接口時由於抽象類不支持,只能使用接口。

 

6.        struct和class有什麼區別

 答:二者均可以有成員變量、屬性、索引器、事件、函數、構造函數,主要區別以下:

 區別點        結構        類

 類型        值類型        引用類型

 成員變量        在聲明時不能賦值        能夠賦值也能夠不賦值

 構造函數        能夠不寫,系統提供默認構造函數,默認構造函數中會將全部成員值設爲0,若是寫了構造函數則構造函數必須有參數,且在構造函數中必須爲每個成員賦值。        能夠不寫,系統提供默認構造函數,寫了也沒有結構中的限制。

 析構函數        不能有析構函數        能夠有析構函數

 繼承性        自定義的結構不能從類繼承,但能夠實現接口,結構都是密封(sealed),不能從結構繼承        類沒有限制

 

7.        try後面一個finally,try中有一個return,那麼finally中的代碼會不會運行?若是運行,是在return後仍是return前。

 答:會運行,而且在return 後運行。

 

8.        產生一個int數組,長度爲100,並向其中隨機插入1-100,而且不能重複。

 答:該題解題思路有不少,主要是看運行效率如何,下面提供一種方法。

 int[] array = new int[100];

     int temp[] = new int[100];

     for (int i = 0; i < 100; i++)

 {

 temp[i]=i+1;

      }

      Random rand = new Random();

      for (int i = 0; i < 100; i++)

      {

          int index = rand.Next(100-i-1);

          array[i] = temp[index];

          temp[index]=temp[100-i-1];

 }

 

9.        C#中要使一個類支持foreach遍歷,實現過程怎樣?

 答:必須實現IEnumerable,IEnumerator這兩個接口,以下:

 public class MyList : IEnumerable,IEnumerator

 {

     private int position = -1;

     string[] array = new string[4];

     public MyList()

     {

         array[0] = "a";

         array[1] = "b";

         array[2] = "c";

         array[3] = "d";

     }

     #region IEnumerable 成員

 //每次使用foreach時都會調用它獲得一個枚舉器

public IEnumerator GetEnumerator()

 {

                 Reset();

         return (this as IEnumerator);

     }

     #endregion

 #region IEnumerator 成員

 //遍歷時經過這個屬性獲得值

    public object Current

     {

         get { return array[position]; }

 }

 //訪問下一個元素時使用MoveNext移動位置

    public bool MoveNext()

     {

         if (position < array.Length-1)

         {

             position++;

             return true;

         }

         else

             return false;

     }

 //遍歷前要使位置歸位

public void Reset()

     {

         position = -1;

     }

     #endregion

 }

 如下不用foreach遍歷集合

 MyList list=new MyList();

 While(list.MoveNext())

 {

         Object o=list.Current;

 

}

 

10.        如下程序有什麼錯? 

public   class   TestClass 

 {

     private   int   count;

    private   static   int   y;

    public   static  void  setvalue () 

      {

          count=1;

          y=1;

      }

}

答:在靜態函數中只能訪問靜態成員變量;以上代碼訪問了實例成員。

 

11.        net中什麼類不能被繼承? 

 答:若是在類前加上sealed關鍵字,則表示該類爲密封類,密封類不能被繼承。

 sealed 除了能夠應用於類外,還能夠應用於實例方法和屬性。密封方法會重寫基類中的方法,但其自己不能在任何派生類中進一步重寫。當應用於方法或屬性時,sealed 修飾符必須始終與override一塊兒使用。如:

 //下面這個sealed使用正確,表示該類不能繼承

 public sealed class Test

 {

 private int myVar;

 //下面這個sealed錯誤,編譯不會經過,由於sealed必須和override一塊兒使用

     public sealed int MyProperty

     {

         get { return myVar; }

         set { myVar = value; }

     }

 //下面這個sealed使用正確,表示若是該類不是密封類,

 //那麼在派生類中也不能夠重寫該方法

 public sealed override string ToString()

     {

         return base.ToString();

     }

 }

 

12.        is  和as   有什麼區別?

 答:is用來判斷一個實例是否屬於某個類。如:

 Dog d=new Dog();

 If(d is Dog)

 {

     Console.WriteLine(「d是一隻狗」);

 }

 以上語句Console.WriteLine(「d是一隻狗」);會運行,由於d is Dog返回true,若是Dog從Animal類繼承並實現了IPet接口,則d is Animal和d is IPet都會返回true;

 as用於在兼容的引用類型之間執行轉換,若是轉換失敗則返回null,它等價於以下語句:

 expression is type ? (type)expression : (type)null

 

13.        net中函數傳遞參數有那些方式?有什麼區別?

 答:傳值和傳引用,傳引用又兩種方式,ref和out,ref要求變量在傳參前賦值,out能夠不賦值。傳引用必須是一個地址,傳值是指將棧中的值拷貝到函數的參數,傳引用表示傳入的變量和接收參數是同一個變量

 public class Test

 {

 public int myVar;

         public int MyProperty

         {

             get { return myVar; }

             set { myVar = value; }

         }

 }

 以上這個類中有字段和屬性

 private void F(ref int i)

 {

    i = 100;

 }

 有一個方法傳遞引用,調用方式以下:

 Test t = new Test();

 F(ref t. MyProperty);

 以上代碼編譯不能經過,由於屬性不是變量,其實質是函數,以下則可經過

 Test t = new Test();

 F(ref t. myVar);

 由於字段是變量

 

14.        一列數的規則以下: 一、一、二、三、五、八、1三、2一、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 <= 2)

                           return 1;

                      else

return Foo(i -1) + Foo(i - 2);

                   }

          }

 

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

 答 :委託封裝了函數指針的集合,它能夠指向一組函數。

            事件也是委託,是一種特殊的委託。

 

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

 答:

 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 ;

 }

 }

 }

 17.        在下面的例子裏

 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

 當使用New建立B的實例時,由於B繼承了A類,A的構造函數首先會被運行,但應當注意的是,雖然運行的是A的構造函數,但在A的構造函數中調用的函數首先是在B類中查找,由於PrintFields已被重寫,因此最終運行B類中的PrintFields函數。

 

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

 答:

CTS:Common Type System 通用系統類型。

CLS:Common Language Specification 通用語言規範。

CLR:Common Language Runtime 公共語言運行庫。

 

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

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

 

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

 答:

 int m = Convert.ToInt32(this.TextBox1.Text) ;

 int sum = 0 ;

 for (int i = 0 ; i < m + 1 ; i++)

 {

 if((i%2) == 1)

 {

 sum += i ;

 }

 Else

 {

 sum = Sum - I ;

 }

 }

 System.Console.WriteLine(sum.ToString());

 System.Console.ReadLine() ;

 其實還有一個很簡單的方式,上面的表達式,把它分紅1-二、3-四、5-6……能夠看出,若是m是偶數,那麼結果就是m/2*(-1),若是m是奇數,結果就是m-m/2

 

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

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

     2).使用Session變量

     3).使用Server.Transfer

     4).Application

     5).<input type="hidden"></input>

     6).數據庫

     7).ViewStat

     8).cookie

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

 答:在頁面中調用下面的函數,SetTextBox(this);

 public void SetTextBox(Control ctrl)

 {

 if (ctrl is TextBox)

 {

 (ctrl as TextBox).Text=string.Empty;

 }

 else

 {

 foreach (Control child in ctrl.Controls)

 {

     SetTextBox(ctrl);

 }

 }

 }

 

 

 

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

 Class A

 {

 public void Test(int i)

 {

 lock(this)

 {

 if (i>10)

 {

i--;

Test(i);

 }

 }

 }

 }

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

 

 

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

 答:WebSevice使用HTTP協議,所以能夠穿透防火牆。而Remoting使用TCP/IP,二進制傳送提升效率。

 remoting是.net中用來跨越machine, process,  appdomain進行方法調用的技術,對於三層結構的程序,就可使用remoting技術來構建.它是分佈應用的基礎技術.至關於之前的DCOM;Web Service是一種構建應用程序的普通模型,並能在全部支持internet網通信的操做系統上實施。Web Service令基於組件的開發和web的結合達到最佳,基於組件的對象模型 

 

26.        公司要求開發一個繼承System.Windows.Forms.ListView類的組件,要求達到如下的特殊功能:點擊ListView各列列頭時,能按照點擊列的每行值進行重排視圖中的全部行 (排序的方式如DataGrid類似)。根據您的知識,請簡要談一下您的思路

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

 

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

 答:兩個對象,一個是「xyx」字符串常量,一個是值爲「xyx」的引用對像s。

 

29.        String s=」」;和string s=string.Empty;有什麼區別,哪種方式更好?

 String s=」」;先分配一塊內存存放」」文字常量,s引用該內存,string s=string.Empty;s引用string類中的靜態變量地址(靜態變量開始會被初始化,因此不管引用多少次,只會分配一次內存),二者比較,後者少了一次內存分配,因此效率更高。

 

30.        構造函數是否可被override?

 答:不能。

 

 

31.        是否能夠繼承String類?

 答:string 是密封類,因此不能被繼承。

 

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

 答:是iis中因爲有進程回收機制,系統繁忙的話Session會丟失,能夠用Sate server或SQL Server數據庫的方式存儲Session不過這種方式比較慢,並且沒法捕獲Session的END事件。

 

 

33.        進程和線程的區別?

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

 

34.        堆和棧的區別?

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

 

 

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

 答:它們被稱爲常成員變量和常成員函數,又稱爲類成員變量和類成員函數。分別用來反映類的狀態。好比類成員變量能夠用來統計類實例的數量,類成員函數負責這種統計的動做。

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

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

 

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

 using:

 A.        引入名稱空間

 B.        放入實現了IDisposable接口的對象,在做用域事後會自動調用該對象的Dispose方法。

 new :

 A.        新建實例

 B.        覆蓋父類方法

 C.        對泛型類型進行約束,規定該類型必須具備無參的公共構造函數

 

37.        須要實現對一個字符串的處理,首先將該字符串首尾的空格去掉,若是字符串中間還有連續空格的話,僅保留一個空格,即容許字符串中間有多個空格,但連續的空格數不可超過一個.

 答:string inputStr=" xx xx ";

 inputStr=inputStr.Trim();

 inputStr=Regex.Replace(inputStr.Trim()," {2,}"," ");

 注:Replace的第二個參數的」{2,}」前有一個空格,第三個參數是一個空格,表示,出現了2個或多個空格時將其替換成1個空格。

 

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

 int i=5;

 int j=5;

 if (Object.ReferenceEquals(i,j))

 Console.WriteLine("Equal");

 else

 Console.WriteLine("Not Equal");

 答:不相等,由於比較的是裝箱後堆中的地址;

 

 

39.        什麼叫作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中輸入abc' or ‘1’='1  就能夠進入系統了。可使用參數方式解決這個問題。

 

40.        什麼是反射?

 答:動態獲取程序集、類型等的信息,並可根據這些信息動態的加載程序集、建立類型、動態調用方法,訪問類型的成員等。

 

 

41.        如何寫Singleton設計模式

 答:static屬性裏面new ,構造函數private

 public class Singleton

 {

         private static Singleton singleton;

         private Singleton()

 {

 }

 public static Singleton CreateInstance()

 {

         if(singleton==null)

                 singleton=new Singleton();

         return singleton;

 }

 }

  

 

43.        什麼是虛函數?什麼是抽像函數?

 答:虛函數:可由子類繼承並重寫的函數。抽像函數:規定其非虛子類必須實現的函數,必須被重寫。

  

 

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

 答:用戶控件通常用在內容多爲靜態,或者少量會改變的狀況下..用的比較大..相似ASP中的include..可是功能要強大的多。

 

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

 答:xml用於配置,用於保存靜態數據類型.接觸XML最多的是web Services..和config

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

 答:Connection 數據庫鏈接對像

 Command 數據庫命令

 DataReader 數據讀取器

 DataAdapterf 數據適配器,用於填充DataSet

 DataSet 數據集

 

 

 

 

1. 傳入某個屬性的set方法的隱含參數的名稱是什麼?

value,它的類型和屬性所聲名的類型相同。

2. 如何在C#中實現繼承?

在類名後加上一個冒號,再加上基類的名稱。

3. C#支持多重繼承麼?

不支持。能夠用接口來實現。

4. 被protected修飾的屬性/方法在何處能夠訪問?

在繼承或間接繼承與這個類的子類中能夠訪問。

5. 私有成員會被繼承麼?

會,可是不能被訪問。因此看上去他們彷佛是不能被繼承的,但實際上確實被繼承了。

6. 請描述一下修飾符protected internal。

被protected internal修飾的屬性/方法只能在它的在同一個程序集(Assembly)中的子類被訪問。

7. C#提供一個默認的無參數構造函數,當我實現了另一個有一個參數的構造函數時候,還想保留這個無參數的構造函數。這樣我應該寫幾個構造函數?

兩個,一旦你實現了一個構造函數,C#就不會再提供默認的構造函數了,因此須要手動實現那個無參數構造函數。

8. C#中全部對象共同的基類是什麼?

System.Object.

9. 重載和覆寫有什麼區別?

重載提供了對一個方法簽名的不一樣參數調用的實現。覆寫提供了子類中改變父類方法行爲的實現。

10. 在方法定義中,virtual有什麼含意?

被virtual修飾的方法能夠被子類覆寫。

11. 可以將非靜態的方法覆寫成靜態方法麼?

不能,覆寫方法的簽名必須與被覆寫方法的簽名保持一致,除了將virtual改成override。

12. 能夠覆寫私有的虛方法麼?

不能夠,甚至子類中沒法訪問父類中的私有方法。

 

13. 可以阻止某一個類被其餘類繼承麼?

能夠,使用關鍵字sealed。

 

14. 可以實現容許某個類被繼承,但不容許其中的某個方法被覆寫麼?

能夠,標記這個類爲public,並標記這個方法爲sealed。

 

15. 什麼是抽象類(abstract class)?

一種不能夠被實例化的類。抽象類中通常含有抽象方法,固然也可有具體實現。繼承類只有實現過全部抽象類的抽象方法後才能被實例化。

 

16. 什麼時候必須聲明一個類爲抽象類?

當這個類中包含抽象方法時,或是該類並無徹底實現父類的抽象方法時。

 

17. 接口(interface)是什麼?

只含有共有抽象方法(public abstract method)的類。這些方法必須在子類中被實現。

 

18. 爲何不能指定接口中方法的修飾符?

接口中的方法用來定義對象之間通訊的契約,指定接口中的方法爲私有或保護沒有意義。他們默認爲公有方法。

19. 能夠繼承多個接口麼?

固然。

20. 那麼若是這些接口中有重複的方法名稱呢?

這種狀況中你能夠決定如何實現。固然須要特別得當心。可是在編譯環節是沒有問題的。

 

21. 接口和抽象類的區別是什麼?

接口中全部方法必須是抽象的,而且不能指定方法的訪問修飾符。抽象類中能夠有方法的實現,也能夠指定方法的訪問修飾符。

 

22. 如何區別重載方法?

不一樣的參數類型,不一樣的參數個數,不一樣的參數順序。

 

 

 

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

答:this.Server.Transfer

 

7.  請編程遍歷頁面上全部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 ;

              }

       }

 

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

答: void BubbleSort(SeqList R)

     {   //R(l..n)是待排序的文件,採用自下向上掃描,對R作冒泡排序

         int i,j;

         Boolean exchange; //交換標誌

         for(i=1;i<n;i++)  //最多作n-1趟排序

         {        

                 exchange=FALSE;   //本趟排序開始前,交換標誌應爲假

                 for(j=n-1;j>=i;j--)       //對當前無序區R[i..n]自下向上掃描

                 if(R[j+1].key<R[j].key)      //交換記錄

                 {

                        R[0]=R[j+1]; //R[0]不是哨兵,僅作暫存單元

                        R[j+1]=R[j];

                        R[j]=R[0];

                        exchange=TRUE; //發生了交換,故將交換標誌置爲真

                  }

           if(!exchange) //本趟排序未發生交換,提早終止算法

              return;

         } //endfor(外循環)

    } //BubbleSort

 

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

答:C#中的索引器一般用於索引數組。索引器不單能索引數字(數組下標),還能索引一些HASHMAP的字符串,因此,一般來講,C#中類的索引器一般只有一個,就是THIS,但也能夠有無數個,只要你的參數列表不一樣就能夠了索引器和返回值無關

不是。能夠用任意類型。

 

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

        int n = Convert.ToInt32(TextBox1.Text);

            int sum = 0;

            for (int i = 0; i < n + 1;i++ )

            {

                if (i % 2 == 1)

                {

                    sum = sum + i;

                }

                else

                {

                    sum = sum - i;

                }

            }

            Response.Write(sum.ToString());

 

11.   用.net作B/S結構的系統,您是用幾層結構來開發,每一層之間的關係以及爲何要這樣分層?

答:通常爲3層,數據訪問層,業務層,表示層。

        數據訪問層對數據庫進行增刪查改。

        業務層通常分爲二層,業務表觀層實現與表示層的溝通,業務規則層實現用戶密碼的安全等。

        表示層爲了與用戶交互例如用戶添加表單。

        優勢:分工明確,條理清晰,易於調試,並且具備可擴展性。

        缺點:增長成本。

 

 

13.   什麼叫應用程序域?

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

 

15.   什麼是裝箱和拆箱?

答:裝箱:用於在垃圾回收堆中存儲值類型。裝箱是值類型到 object 類型或到此值類型所實現的任何接口類型的隱式轉換。

     拆箱:從 object 類型到值類型或從接口類型到實現該接口的值類型的顯式轉換。

 

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

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

 

17.   什麼是強類型系統?

答: RTTI:類型識別系統。

 

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

答:   Connection 數據庫鏈接對象

        DataSet:數據存儲器。

        DataCommand:執行語句命令。

        DataAdapter:數據的集合,用語填充。

 

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

答:asp.net提供了3種認證方式:  windows身份驗證, Forms驗證和Passport驗證.

   windows身份驗證: IIS根據應用程序的設置執行身份驗證.要使用這種驗證方式,在IIS中必須禁用匿名訪問.

   Forms驗證:用Cookie來保存用戶憑證,並將未經身份驗證的用戶重定向到自定義的登陸頁.

   Passport驗證:經過Microsoft的集中身份驗證服務執行的,他爲成員站點提供單獨登陸和核心配置文件服務.

 

20. 什麼是Code-Behind技術?

答:ASPX,RESX和CS三個後綴的文件,這個就是代碼分離.實現了HTML代碼和服務器代碼分離.方便代碼編寫整理.

 

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

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

 

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

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

 

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

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

 

 

 

25.   請詳述在dotnet中類(class)與結構(struct)的異同?

答:Class能夠被實例化,屬於引用類型,是分配在內存的堆上的。Struct屬於值類型,是分配在內存的棧上的.

 

26.   根據委託(delegate)的知識,請完成如下用戶控件中代碼片斷的填寫:

       namespace test

       {

             public delegate void OnDBOperate();

             public class UserControlBase : System.Windows.Forms.UserControl

             {

               public event OnDBOperate OnNew;

              privatevoidtoolBar_ButtonClick(objectsender,System.Windows.Forms.ToolBarButtonClickEventArgs e)

              {

                    if(e.Button.Equals(BtnNew))

                    {

                           //請在如下補齊代碼用來調用OnDBOperate委託簽名的OnNew事件。

                    }

             }

       }

答:if( OnNew != null ) 

       OnNew( this, e );

 

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)

 

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

       public void test(int i)

       {

             lock(this)

             {

                  if (i>10)

                  {

                          i--;

                          test(i);

                   }

              }

         }

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

 

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

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

 

31.   公司要求開發一個繼承System.Windows.Forms.ListView類的組件,要求達到如下的特殊功能:點擊ListView各列列頭時,能按照點擊列的每行值進行重排視圖中的全部行 (排序的方式如DataGrid類似)。根據您的知識,請簡要談一下您的思路

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

 

32.    給定如下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 );

                   }

          }

 

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?

答:兩個對象,一個是"xyz",一個是指向"xyz"的引用對象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。

 

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

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

 

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

答:都不能。

 

 

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

答:數組沒有length()這個方法,有length的屬性。String有length()這個方法。

 

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

 

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

答:final—修飾符(關鍵字)若是一個類被聲明爲final,意味着它不能再派生出新的子類,不能做爲父類被繼承。所以一個類不能既被聲明爲 abstract的,又被聲明爲final的。將變量或方法聲明爲final,能夠保證它們在使用中不被改變。被聲明爲final的變量必須在聲明時給定初值,而在之後的引用中只能讀取,不可修改。被聲明爲final的方法也一樣只能使用,不能重載

finally—再異常處理時提供 finally 塊來執行任何清除操做。若是拋出一個異常,那麼相匹配的 catch 子句就會執行,而後控制就會進入 finally 塊(若是有的話)。

finalize—方法名。Java 技術容許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去以前作必要的清理工做。這個方法是由垃圾收集器在肯定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的,所以全部的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其餘清理工做。finalize() 方法是在垃圾收集器刪除對象以前對這個對象調用的。

 

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

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

 

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

答:是iis中因爲有進程回收機制,系統繁忙的話Session會丟失,能夠用Sate   server或SQL   Server數據庫的方式存儲Session不過這種方式比較慢,並且沒法捕獲Session的END事件。

 

56.   進程和線程的區別?

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

 

57.  堆和棧的區別?

答:棧:由編譯器自動分配、釋放。在函數體中定義的變量一般在棧上。

     堆:通常由程序員分配釋放。用new、malloc等分配內存函數分配獲得的就是在堆上。

 

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

答:它們被稱爲常成員變量和常成員函數,又稱爲類成員變量和類成員函數。分別用來反映類的狀態。好比類成員變量能夠用來統計類實例的數量,類成員函數負責這種統計的動做。

 

 

61.  請說明在.net中經常使用的幾種頁面間傳遞參數的方法,並說出他們的優缺點。

答:  session(viewstate) 簡單,但易丟失

       application 全局

       cookie 簡單,但可能不支持,可能被僞造

       input type="hidden" 簡單,可能被僞造

       url參數簡單,顯示於地址欄,長度有限255個字符

       數據庫穩定,安全,但性能相對弱

 

62.  C#中接口和類的異同

答:接口和類都是類,不一樣的是,接口只包含方法或屬性的聲明,不包含具體實現方法的代碼,接口能夠實現多繼承,而類只能是單繼承,繼承接口的類必須實現接口中聲明的方法或屬性。接口主要定義一種規範,統一調用方法,在大型項目中接口正發揮日益重要的做用。

 

63.  DataReader和DataSet的異同

答:DataReader和DataSet最大的區別在於,DataReader使用時始終佔用SqlConnection,在線操做數據庫..任何對SqlConnection的操做都會引起DataReader的異常..由於DataReader每次只在內存中加載一條數據,因此佔用的內存是很小的..由於DataReader的特殊性和高性能.因此DataReader是隻進的..你讀了第一條後就不能再去讀取第一條了..

DataSet則是將數據一次性加載在內存中.拋棄數據庫鏈接..讀取完畢即放棄數據庫鏈接..由於DataSet將數據所有加載在內存中.因此比較消耗內存...可是確比DataReader要靈活..能夠動態的添加行,列,數據.對數據庫進行回傳更新操做...

 

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

答:Using 引入一個命名空間,或在使用了一個對像後自動調用其IDespose,

     New 實例化一個對像,或修飾一個方法,表此方法徹底重寫

 

65.    下面的例子中

using System;

class A

{

public static int X;

static A(){

X=B.Y+1;

}

}

class B

{

public static int Y=A.X+1;

static B(){}

static void Main(){

Console.WriteLine("X={0},Y={1}",A.X,B.Y);

}

}

產生的輸出結果是什麼?答:x=1,y=2

 

66.  在.net(C# or vb.net)中如何得到當前窗體或控件的句柄,特別是控件自己的句柄(請列舉)。

答:this(C#) Me(vb.net).

 

67.  在.net(C# or vb.net)中,Appplication.Exit 仍是 Form.Close有什麼不一樣?

答:一個是退出整個應用程序,一個是關閉其中一個form

 

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

       int i=5;

       int j=5;

       if (Object.ReferenceEquals(i,j))

            Console.WriteLine("Equal");

       else

            Console.WriteLine("Not Equal");

答:Not Equal——進行了裝箱操做。

 

69.  HashMap和Hashtable的區別。

答:HashMap是Hashtable的輕量級實現(非線程安全的實現),他們都完成了Map接口,主要區別在於HashMap容許空(null)鍵值(key),因爲非線程安全,效率上可能高於Hashtable.

 

 

71.   重載與覆蓋的區別?

答:

 

 一、方法的覆蓋是子類和父類之間的關係,是垂直關係;方法的重載是同一個類中方法之間的關係,是水平關係

 二、覆蓋只能由一個方法,或只能由一對方法產生關係;方法的重載是多個方法之間的關係。

 三、覆蓋要求參數列表相同;重載要求參數列表不一樣。

 四、覆蓋關係中,調用那個方法體,是根據對象的類型(對象對應存儲空間類型)來決定;重載關係,是根據調 用時的實參表與形參表來選擇方法體的

 

72.   什麼是虛函數?什麼是抽象函數?

答:虛函數:沒有實現的,可由子類繼承並重寫的函數。抽象函數:規定其非虛子類必須實現的函數,必須被重寫。

 

74.   什麼是Web Service?UDDI?

答:Web Service即是基於網絡的、分佈式的模塊化組件,它執行特定的任務,遵照具體的技術規範,這些規範使得Web Service能與其餘兼容的組件進行互操做。

   UDDI 的目的是爲電子商務創建標準;UDDI是一套基於Web的、分佈式的、爲Web Service提供的、信息註冊中心的實現標準規範,同時也包含一組使企業能將自身提供的Web Service註冊,以使別的企業可以發現的訪問協議的實現標準。

 

75.  委託聲明的關鍵字是______?答:delegate.

 

76.  用sealed修飾的類有什麼特色?答:密封,不能繼承。

 

77.   在Asp.net中全部的自定義用戶控件都必須繼承自_Control___?

 

78.   在.Net中全部可序列化的類都被標記爲_[serializable]__?

 

79.   在.Net託管代碼中咱們不用擔憂內存漏洞,這是由於有了__GC__?

 

80.  .某一密碼僅使用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

 

81.  ADO.NET相對於ADO等主要有什麼改進?

答:  1:ado.net不依賴於oledb提供程序,而是使用.net託管提供的程序,

        2:不使用com

        3:不在支持動態遊標和服務器端遊

        4:能夠斷開connection而保留當前數據集可用

        5:強類型轉換

        6:xml支持

 

82.  大概描述一下ASP.NET服務器控件的生命週期

初始化> 加載視圖狀態> 處理回發數據> 加載> 發送回發更改通知> 處理回發事件> 預呈現> 保存狀態> 呈現> 處置> 卸載

 

 

83.WCF 對WebSerice 的優點

WCF 能實現Webserice全部功能,並體現體現面向服務的程序思想。在WCF框架下,開發基於SOA的分佈式系統變得容易了,微軟將全部與此相關的技術要素都包含在內,掌握了WCF,就至關於掌握了叩開SOA大門的鑰匙。

 

84. 如何傳輸一億條數據(或者其餘巨大的數字)

利用現有的技術,好比分頁存儲過程,每次提取1000行數據,異步循環讀取。

直接select 會致使表被長時間鎖定,並且沒法作到傳輸數據的時候顯示進度。

 

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

1.賦值方式不一樣:基於值類型的變量直接包含值。將一個值類型變量賦給另外一個值類型變量時,將複製包含的值。引用類型變量的賦值只複製對對象的引用,而不復制對象自己。

2.值類型不可能派生出新的類型:全部的值類型均隱式派生自 System.ValueType。但與引用類型相同的是,結構也能夠實現接口。

3.值類型不可能包含 null 值:然而,可空類型功能容許將 null 賦給值類型。

4.每種值類型均有一個隱式的默認構造函數來初始化該類型的默認值。

 

86.什麼是事務,事務有哪些特性,解釋下什麼是髒讀,若是一個事務執行到一半,電腦斷電了會怎麼樣;

事務是用戶定義的一個數據庫操做序列,這些操做要麼全作要麼全不作,是一個不可分割的工做單位;

 

事務有四個特性,分別是:原子性、一致性、隔離性、持續性;

 

髒讀就是指當一個事務正在訪問數據,而且對數據進行了修改,而這種修改尚未提交到數據庫中,這時,另一個事務也訪問這個數據,而後使用了這個數據;

會回滾;

 

87.數據庫分頁,一個結果集和一個總記錄條數,使用什麼樣的方式,數據庫只進行一次鏈接,返回結果集和總記錄條數;

存儲過程
88.分別簡述三層結構和MVC的實現方式;


89.web頁面的生命週期,什麼是緩存,怎麼作頁面緩存,若是爲整個頁面作了緩存但頁面上有一個在線統計人數不能緩存,你有哪幾個方式來實現;

 

一、頁請求:頁請求發生在頁面生命週期開始以前,用戶請求頁面時,asp.net將肯定是否須要分析和編譯頁。

二、開始:在開始階段,將設置頁屬性,如request和response。在此階段,頁還將肯定請求是回發請求仍是新請求,並設置ispostback屬性。

三、頁初始化:在初始化期間可使用頁中的控件。並設置控件的ID屬性。

四、加載:在加載期間,若是當前請求是回發請求,則將使用視圖狀態和控件狀態恢復的信息加載控件屬性。

五、驗證:在驗證期間,將調用全部的驗證程序控件的validate,此方法將設置各個驗證程序控件和頁的isvalidate屬性。

六、回發事件處理:若是請求是回發請求,則將調用全部的事件處理程序。

七、呈現:在呈現以前,會對頁和全部控件保存視圖狀態。在呈現階段中,會對每一個控件調用render方法,它會提供一個文本編寫器,用戶將控件的輸出寫入到response屬性和outputstream中。

八、卸載:徹底呈現頁,並將頁面發送到客戶端,準備對其該頁後,將調用卸載。此時將卸載頁屬性並執行清理。


90. 怎麼防止表單的重複提交;

首先,咱們能夠定義一個session變量用來保存一個表單的提交序列號。這裏我定義爲「$userLastAction」。而後在表單里加入一個hidden變量,把值設爲$userLastAction+1: 
<input type=Hidden name=lastAction value=<? =$userLastAction+1 ?>> 
最後,在處理提交以前判斷表單是否已被提交過: 
if($lastAction>$userLastAction and inputIsValid(...)){ 
$userLastAction++; // 序列號加1 
// 處理表單數據 


91. 3.0比2.0添加哪些新特性,爲字符串寫一個擴展函數;

Lambda表達式 

自動實現的屬性和簡化的初始化

Linq

var是C#3.0中提供的用於聲明變量的關鍵字

擴展方法 

    //擴展方法必須在非泛型靜態類中定義
    public static class MyMethods
    {
        
//注意:第一個參數使用「this」得到當前對象
        public static string With(this string _context, params string[] _args)
        {
            
return string.Format(_context,_args);
        }


        
//2爲集合作擴展方法
        public static void ShowItems<T>(this IEnumerable<T> _al)
        {
            
foreach (var item in _al)
            {
                Console.WriteLine(item);
            }
        }
    }


92. 一個1000長的數組,找出其中有重複值的值的個數;


93. (function(){})()後面這個()的做用是什麼。

 

函數定義加函數調用的的一種簡寫,還能夠接收參數
(function(para){alert(para);})(para)
主要是括號的問題

js中,括號的做用是執行函數,因此function A(a){alert(a);} A(a)爲了方便就簡寫爲(function (a){alert(a)})(),這樣函數名也省了,函數調用也省了
相關文章
相關標籤/搜索