新編c#面試題大全

編輯成<新編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、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 <= 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-2、3-4、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.   重載與覆蓋的區別?

答:

 

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

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

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

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

 

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 會導致表被長時間鎖定,而且無法做到傳輸數據的時候顯示進度。

 

 

 

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

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

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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章