C#常見面試題

[轉載]原文地址

2 用戶控件. 不會說懂得做

3 裝箱和拆箱發生 值類型向引用類型轉換,和引用類型向值類型轉  重載:同一個函數參數不同
4.xml可以用來做網頁(xslt) xml可以當作數據庫 xml可以用來保存對象的系列化
5值類型,沒有什麼好說的.引用類型用處是返回兩個以上參數的時候比較好用 ref out 我常用的是out不要先賦值
6  ado.net 我直接用 sqlhelper了 有connection command 還有參數
7 回調機制比較有用的.在net中採用了委託.
8 接口,是可以多繼承,類只有單繼承.接口強調了你必須實現,而沒有具本實現的方法和虛類有點相似
9 datareader dataset 還有一個不太常用
10 udp不要實現什麼三次握手.
11 asp.net身份驗證最常用還是以前的session方法. form驗證沒有用過. 微軟的哪個也沒有用過
12 進程簡單理解爲單個程序吧(按ctrl+alt+del)可以看到的.它至少有一個主線程 .
13 代碼後置..不懂得講
14 活動目錄.. 完全不會
15 system.xml (system.io創建目錄的時候用)
16 這個也是web服務裏的東西.
17 soap簡單協議.我只知道.web服務是基於它之上的
18 部置一個頁面. 也就是說沒有代碼是直接寫在aspx中的了.只接放在IIS的虛擬目錄下就行了.當然要asp.net支持
19 垃圾回收..一般的只要掌握.非託管對象要記得釋放資源就行了吧.
20 直接在vs.net裏面引用就OK了.它會自己生成一個代理類

1.      填空: (1)面向對象的語言具有___繼承性、_封裝___性、___多態性。

        (2)能用foreach遍歷訪問的對象需要實現 IEnumerable接口或聲明GetEnumerable 方法的類型。

        (3)列舉ADO.net中的五個主要對象Command、Connection、DataSet、DataSetCommand、DataReader。

2. 不定項選擇:

(1) 以下敘述正確的是: 

      A. 接口中可以有虛方法。     B. 一個類可以實現多個接口。 
      C. 接口不能被實例化。       D. 接口中可以包含已實現的方法。 

   (2) 從數據庫讀取記錄,你可能用到的方法有:

      A. ExecuteNonQuery            B. ExecuteScalar

      C. Fill                        D. ExecuteReader

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


4. 寫出一條Sql語句: 取出表A中第31到第40記錄(SQLServer, 以自動增長的ID作爲主鍵,  注意:ID可能不是連續的。) 


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


6. 寫出程序的輸出結果 

class Class1  { 
       private string str = "Class1.str"; 
       private int i = 0; 
       static void StringConvert(string str)  { 
           str = "string being converted."; 
       } 
       static void StringConvert(Class1 c)  { 
           c.str = "string being converted."; 
       } 
       static void Add(int i)  { 
           i++; 
       } 
       static void AddWithRef(ref int i)  { 
           i++; 
       } 
       static void Main()  { 
           int i1 = 10; 
           int i2 = 20; 
           string str = "str"; 
           Class1 c = new Class1(); 
           Add(i1); 
           AddWithRef(ref i2); 
           Add(c.i); 
           StringConvert(str);         
           StringConvert(c); 
           Console.WriteLine(i1); 
           Console.WriteLine(i2); 
           Console.WriteLine(c.i); 
           Console.WriteLine(str); 
           Console.WriteLine(c.str); 
       }  
    } 


7.寫出程序的輸出結果 

public abstract class A  

        public A()  
       { 
            Console.WriteLine('A'); 
        } 
        public virtual void Fun()  
       { 
            Console.WriteLine("A.Fun()"); 
        } 


public class B: A  

        public B() 
       { 
            Console.WriteLine('B'); 
        } 

        public new void Fun()  
       { 
            Console.WriteLine("B.Fun()"); 
        } 

        public static void Main()  
       { 
           A a = new B(); 
           a.Fun(); 
        } 



8.      寫出程序的輸出結果: 
public class A  

        public virtual void Fun1(int i) 
       { 
            Console.WriteLine(i); 
        } 

        public void Fun2(A a)   
       { 
            a.Fun1(1); 
            Fun1(5); 
        } 



public class B : A  

        public override void Fun1(int i)    
       { 
            base.Fun1 (i + 1); 
        } 

        public static void Main()   
       { 
            B b = new B(); 
            A a = new A(); 
            a.Fun2(b); 
            b.Fun2(a);          
        } 




9. 一列數的規則如下: 1、1、2、3、5、8、13、21、34...... 

   求第30位數是多少, 用遞歸算法實現。(C#語言)


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

要求:  1.要有聯動性,老鼠和主人的行爲是被動的。

2.考慮可擴展性,貓的叫聲可能引起其他聯動效應。






參考答案: 
1. (1)  繼承性、封裝性、多態性。(考基本概念) 
   (2)  IEnumerable 、 GetEnumerator (對foreach機制的理解,本來不想出這題的,湊分) 
   (3)  ... (送分題, 對ADO.net的瞭解) 
評分標準:一空1分,滿分10分。 



2. (1) B、C (考對接口的理解)  (2)  B、C、D (考查對ADO.net的熟練程度) 
  評分標準: 一題5分,不選或者錯選均不得分。漏選得2分。滿分10分。 



3. . private :   私有成員, 在類的內部纔可以訪問。 
     protected : 保護成員,該類內部和繼承類中可以訪問。 
     public :    公共成員,完全公開,沒有訪問限制。 
     internal:   在同一命名空間內可以訪問。 
評分標準:答對1題2分,2題5分,3題7分。全對10分。 (送分題) 



4.  解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) 
    評分標準: 寫對即10分。(答案不唯一,datagrid 分頁可能需要用到) 
  
5.  1.使用QueryString,  如....?id=1; response. Redirect().... 
    2.使用Session變量 
    3.使用Server.Transfer 
    .... 
   評分標準: 答對1點得3分, 兩點7分, 3點10分。 


6.  (考查值引用和對象引用) 
10 
21 

str 
string being converted. 
評分標準:答對一點得2分,滿分10分。 


7.  A 
    B 
A.Fun() 
評分標準: 寫出A.B 得5分,寫出A.Fun()得5分,滿分10分。 
(考查在繼承類中構造函數, 以及new 方法, ) 




8.  2 
    5 
    1 
    6 

評分標準: 答對一點得2分,兩點得5分,3點得7分。全對得10分。

(一些人做這題,頭都暈了.... ^_^ )



9.  

    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); 
        } 
    } 
評分標準: 寫出return Foo(i -1) + Foo(i - 2); 得5分。 

寫出if(i > 0 && i <= 2) return 1; 得5分。

           方法參數過多需要扣分(扣除分數 = 參數個數 - 1)

           不用遞歸算法扣5分

           (遞歸算法在樹結構建立等方面比較常用)



10           

要點:1. 聯動效果,運行代碼只要執行Cat.Cryed()方法。2. 對老鼠和主人進行抽象 
評分標準: <1>.構造出Cat、Mouse、Master三個類,並能使程序運行(2分) 
            <2>從Mouse和Master中提取抽象(5分) 
            <3>聯動效應,只要執行Cat.Cryed()就可以使老鼠逃跑,主人驚醒。(3分) 


    public interface Observer 
    { 
        void Response();    //觀察者的響應,如是老鼠見到貓的反映 
    } 
    public interface Subject 
    { 
        void AimAt(Observer obs);  //針對哪些觀察者,這裏指貓的要撲捉的對象---老鼠 
    } 
    public class Mouse : Observer 
    { 
        private string name; 
        public Mouse(string name, Subject subj) 
        {           
            this.name = name; 
            subj.AimAt(this); 
        } 
        
        public void Response() 
        { 
            Console.WriteLine(name + " attempt to escape!"); 
        } 
    } 
    public class Master : Observer 
    {   
        public Master(Subject subj) 
        {           
            subj.AimAt(this); 
        } 
        
        public void Response() 
        { 
            Console.WriteLine("Host waken!"); 
        }  
    } 
  
    public class Cat : Subject 
    { 
        private ArrayList observers; 
        public Cat() 
        {   
            this.observers = new ArrayList(); 
        } 
        public void AimAt(Observer obs) 
        { 
            this.observers.Add(obs); 
        } 
        public void Cry() 
        { 
            Console.WriteLine("Cat cryed!"); 
            foreach (Observer obs in this.observers) 
            { 
                obs.Response(); 
            } 
        } 
    } 
    class MainClass 
    {       
        static void Main(string[] args) 
        { 
            Cat cat = new Cat(); 
            Mouse mouse1 = new Mouse("mouse1", cat); 
            Mouse mouse2 = new Mouse("mouse2", cat); 
            Master master = new Master(cat); 
            cat.Cry(); 
        } 
    } 


//--------------------------------------------------------------------------------------------- 

設計方法二: 使用event -- delegate設計.. 
    public delegate void SubEventHandler(); 
    public abstract class Subject 
    { 
        public event SubEventHandler SubEvent; 
        protected void FireAway() 
        { 
            if (this.SubEvent != null) 
                this.SubEvent(); 
        }   
    } 
    public class Cat : Subject 
    {  
        public void Cry() 
        { 
            Console.WriteLine("cat cryed."); 
            this.FireAway(); 
        } 
    } 
    public abstract class Observer 
    { 
        public Observer(Subject sub) 
        { 
            sub.SubEvent += new SubEventHandler(Response); 
        } 
        public abstract void Response();    
    } 
    public class Mouse : Observer 
    { 
        private string name; 
        public Mouse(string name, Subject sub) : base(sub) 
        {   
            this.name = name; 
        } 
        public override void Response() 
        { 
            Console.WriteLine(name + " attempt to escape!"); 
        } 
    } 
    public class Master : Observer 
    { 
        public Master(Subject sub) : base(sub){} 
        public override void Response() 
        { 
            Console.WriteLine("host waken"); 
        } 
    } 
    class Class1 
    { 
        static void Main(string[] args) 
        { 
            Cat cat = new Cat(); 
            Mouse mouse1 = new Mouse("mouse1", cat); 
            Mouse mouse2 = new Mouse("mouse2", cat); 
            Master master = new Master(cat); 
            cat.Cry(); 
        } 

    }

問題: 
1.ASP.NET中的身份驗證有那些?你當前項目採用什麼方式驗證請解釋 
2.什麼是WEB控件?使用WEB控件有那些優勢? 
3.請解釋ASP。NET中以什麼方式進行數據驗證? 
4.請談談對正則表達式的看法? 
5.ASP。NET中共有幾種類型的控件?各有什麼區別? 
6.WEB控件可以激法服務端事件,請談談服務端事件是怎麼發生並解釋其原理?自動傳回是什麼?爲什麼要使用自動傳回。 
7.WEB控件及HTML服務端控件能否調用客戶端方法?如果能,請解釋如何調用? 
8.ASP。NET與ASP相比有什麼優勢? 
9.請解釋web.config文件中的重要節點 
10.請解釋ASP。NET中的web頁面與其隱藏類之間的關係? 
11.什麼是viewstate,能否禁用?是否所用控件都可以禁用? 


13.當發現不能讀取頁面上的輸入的數據時很有可能是什麼原因造成的?怎麼解決 
14.請解釋一個WEB頁面中代碼執行次序。 
15.請解釋什麼是上下文對象,在什麼情況下要使用上下文對象 
16.請解釋轉發與跳轉的區別? 
17.請解釋ASP.NET中不同頁面之間數據傳遞有那些方式? 
18.請解釋ASP。NET中button  linkbutton imagebutton 及hyperlink這四個控件之間的功別 
19.請解釋一下。NET多層應用程序中層與層之間以那幾種方式進行數據傳遞。並解釋你自己的項目中採用那種方式進行。 
20.如果出現ASP。NET中的事件不能觸發可能由於什麼原因造成? 
21.如果需要在datagride控件中的某一列中添加下拉列表框並綁定數據怎麼解決? 
22.請解釋asp.net中的數據綁定與傳統數據綁定有什麼區別? 
23.請解釋.net採用委託實現的事件模型與JAVA中採用接口實現的事件模型有什麼區別,以圖示方式解釋。 
24.請解釋接口的顯式實現有什麼意義? 
Q:您在什麼情況下會用到虛方法?它與接口有什麼不同?

Q:Override與重載有什麼區別?

Q:值類型與引用類型有什麼區別?

Q:怎樣理解靜態變量?

Q:向服務器發送請求有幾種方式?

Q:DataReader與Dataset有什麼區別?

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

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

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

Q:微軟推出了一系列的Application Block,請舉出您所知道的Application Block並說明其作用?

Q:請列舉一些您用到過的設計模式以及在什麼情況下使用該模式?

Q:您對WebService的體會?

Q:您對編程的興趣如何?工作中遇到不懂的問題是怎樣去解決的?您一般怎樣去提高自己的編程水平?

Q:您離職的原因是什麼?

以下幾道題目如果您不會,請較爲詳細的描述您的解決思路和方法

Q:通過超鏈接怎樣傳遞中文參數?

Q:請編程遍歷頁面上所有TextBox控件並給它賦值爲string.Empty?

Q:請編程實現一個冒泡排序算法?

1、進程和線程的區別

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

2、成員變量和成員函數前加static的作用

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

3、malloc和new的區別

new是C++的關鍵字。malloc在分配內存時必須按給出的字節分配,new可以按照對象的大小自動分配,並且能調用構造函數。可以說new是對象的對象,而malloc不是。本質上new分配內存時,還會在實際內存塊的前後加上附加信息,所以new所使用的內存大小比malloc多。

4、堆和棧的區別

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

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

棧是機器系統提供的數據結構,而堆則是C/C++函數庫提供的。

棧是系統提供的功能,特點是快速高效,缺點是有限制,數據不靈活;而棧是函數庫提供的功能,特點是靈活方便,數據適應面廣泛,但是效率有一定降低。棧是系統數據結構,對於進程/線程是唯一的;堆是函數庫內部數據結構,不一定唯一。不同堆分配的內存無法互相操作。棧空間分靜態分配和動態分配兩種。靜態分配是編譯器完成的,比如自動變量(auto)的分配。動態分配由alloca函數完成。棧的動態分配無需釋放(是自動的),也就沒有釋放函數。爲可移植的程序起見,棧的動態分配操作是不被鼓勵的!堆空間的分配總是動態的,雖然程序結束時所有的數據空間都會被釋放回系統,但是精確的申請內存/釋放內存匹配是良好程序的基本要素。

5、不調用C++/C的字符串庫函數,請編寫函數 strcpy


1. C#中 property 與 attribute的區別,他們各有什麼用處,這種機制的好處在哪裏? 

2. 講一講你理解的web service,在dot net framework中,怎麼很好的結合xml?(講概念就行了)

3. C#, Java 和 c++的特點,有什麼相同的地方,不同的地方,C#分別從c++和java中吸取了他們那些優點?

4. C#可否對內存進行直接的操作?(這可是個難點哦?要注意!)

5. 用Visual C++ 6.0編寫的代碼(unmanaged code),如何在CLR下和其他dot net component結合?

6. 以前作過的一些項目?介紹一下自己的編程經驗。(這是矇混不過去的,基本一問就知道是真是假)

7. 你對公司有什麼期望?你的薪水期望值?爲什麼學計算機?以前的工作經驗(這非常重要)?



Q3: 維護數據庫的完整性、一致性、你喜歡用觸發器還是自寫業務邏輯?爲什麼

Q4:ADO。NET相對於ADO等主要有什麼改進?

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

Q6:C#中的委託是什麼?事件是不是一種委託?

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

Q8:C#中要使一個類支持FOREACH遍歷,實現過程怎樣?

Q10:寫一個HTML頁面,實現以下功能,左鍵點擊頁面時顯示“您好”,右鍵點擊時顯示“禁止右鍵”。並在2分鐘後自動關閉頁面。

Q11:你對XMLHTTP、WEBSERVICE 瞭解嗎?簡單描述其特點、作用

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

Q13:自定義控件和一般用戶控件的異同?如果要用這兩者之一,你會選擇哪種?爲什麼

Q14:大概描述一下ASP。NET服務器控件的生命週期

Q15:UML

Q16:面向對象的概念,主要特點

Q17:類劃分的依據。類粒度問題

Q18:事物管理問題



第一,談談final, finally, finalize的區別。 

第二,Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其它類,是否可以implements(實現)interface(接口)?

第三,Static Nested Class 和 Inner Class的不同,說得越多越好(面試題有的很籠統)。

第四,&和&&的區別。

第五,HashMap和Hashtable的區別。

第六,Collection 和 Collections的區別。

第七,什麼時候用assert。

第八,GC是什麼? 爲什麼要有GC? 

第九,String s = new String("xyz");創建了幾個String Object?

第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

第十一,short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?

第十二,sleep() 和 wait() 有什麼區別?

第十三,Java有沒有goto?

第十四,數組有沒有length()這個方法? String有沒有length()這個方法?

第十五,Overload和Override的區別。Overloaded的方法是否可以改變返回值的類型?

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

第十七,給我一個你最常見到的runtime exception。

第十八,error和exception有什麼區別?

第十九,List, Set, Map是否繼承自Collection接口?

第二十,abstract class和interface有什麼區別?

第二十一,abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?

第二十二,接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)?

第二十三,啓動一個線程是用run()還是start()?

第二十四,構造器Constructor是否可被override?

第二十五,是否可以繼承String類?

第二十六,當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法?

第二十七,try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的code會不會被執行,什麼時候被執行,在return前還是後?

第二十八,編程題: 用最有效率的方法算出2乘以8等於幾?

第二十九,兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對?

第三十,當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裏到底是值傳遞還是引用傳遞?

第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

第三十二,編程題: 寫一個Singleton出來。

一.填空題

1.c#中的三元運算符是__?:___?

2.當整數a賦值給一個object對象時,整數a將會被__裝箱(封裝)___?

3.類成員有_____種可訪問形式?  this.;new Class().Method;

4.public static const int A=1;這段代碼有錯誤麼?是什麼?  const不能用static修飾

5.float f=-123.567F;

  int i=(int)f;

i的值現在是_____?   123  

6.利用operator聲明且僅聲明瞭“==”,有什麼錯誤麼?  

7.委託聲明的關鍵字是______? delagete

8.用sealed修飾的類有什麼特點?密封,不能繼承

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

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

11.在.Net託管代碼中我們不用擔心內存漏洞,這是因爲有了______?gc

12.下面的代碼中有什麼錯誤嗎?_______

     using System;

     class A

     {

          public virtual void F(){

              Console.WriteLine("A.F");

           }

      }

      abstract class B:A

       {

           public abstract override void F(); // new public abstract void F();  

       }



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

14.下面這段代碼有錯誤麼?

    switch (i){

    case():

        CaseZero();

        break;

    case 1:

        CaseOne();

        break;

    case 2:

        dufault;  //wrong

        CaseTwo();

        break;

   }

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



二.簡答題

1.在c#中using和new這兩個關鍵字有什麼意義,請寫出你所知道的意義?using 指令 和語句 new 創建實例 new 隱藏基類中方法

4.談談類和結構的區別?類是引用類型、結構是值類型

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

6.對於這樣的一個枚舉類型:

      enum Color:byte{

          Red,

          Green,

          Blue,

          Orange

       }

     string[] ss=Enum.GetNames(typeof(Color));

     byte[]   bb=Enum.GetValues(typeof(Color));

試寫一段程序顯示出枚舉類型中定義的所有符號名稱以及它們對應的數值。

7.您瞭解設計模式麼?請列出您所知道的設計模式的名稱。 //

8.請在SQL Server中設計表來保存一個樹狀結構的組織結構圖(假設結構圖中只有名稱這一項內容需要保存),如果我想查詢某一職位下的所有職位,用一個存儲過程來實現,你有什麼思路?

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

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

     int i=5;

     int j=5;

     if (Object.ReferenceEquals(i,j))

          Console.WriteLine("Equal");

     else

          Console.WriteLine("Not Equal");




1.寫一個實現對一段字符串翻轉的方法,附加一些條件,如其中包括“,”、“.”,對其設計測試用 例 。

2.對一支紙杯設計測試用例(可以是廣義的杯,不一定是某一支特定功能的杯) 

開發語言概念題 

3.什麼是反射? 

4.用Singleton如何寫設計模式 

5.C#中的垃圾回收機制是怎樣的? 

6.什麼是Application Pool? 

7.鏈表和數組的區別,各有什麼優缺點.

8.Remoting在客戶端服務器怎麼實現 ?

9.什麼是友元函數? 

10.用標準C如何實現多態? 

11.什麼是虛函數? 

12.什麼是抽象函數? 

13.什麼是內存泄漏,怎樣最簡單的方法判斷被存泄漏 ?



英語題 

14.用英文介紹一下使用C#/C++做的項目,主要功能 

15.如果要與美國開電話會議,會如何與美國的工程師溝通 

16.如果老闆認爲你的技術落後,你會怎麼回答 



數據庫知識題 

17.使用什麼工具來調用存儲過程 

18.SQL Server的兩種索引是何形式?索引的作用?索引的優缺點? 

19.觸發器的作用 



其它知識題及問題 

20.什麼是Web Service? 

21.什麼是XML? 

22.Socket怎麼實現

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