你是進階程式員?那就來挑戰一下!

來源:互聯網
上載者:User
你是進階程式員?那就來挑戰一下! 2006-09-18 16:24 778人閱讀 評論(0) 收藏 舉報 基礎題:
  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。(注意:這個方法必須是覆蓋了父類中的一個虛方法,否則,無法使用sealed)
  15. 什麼是抽象類別(abstract class)?
    一種不可以被執行個體化的類。抽象類別中一般含有抽象方法,當然也可有具體實現。繼承類只有實現過所有抽象類別的抽象方法後才能被執行個體化。
  16. 何時必須聲明一個類為抽象類別?
    當這個類中包含抽象方法時,或是該類並沒有完全實現父類的抽象方法時。
  17. 介面(interface)是什嗎?
    只含有共有抽象方法(public abstract method)的類。這些方法必須在子類中被實現。
  18. 為什麼不能指定介面中方法的修飾符?
    介面中的方法用來定義對象之間通訊的契約,指定介面中的方法為私人或保護沒有意義。他們預設為公有方法。
  19. 可以繼承多個介面嗎?
    當然。
  20. 那麼如果這些介面中有重複的方法名稱呢?
    這種情況中你可以決定如何?。當然需要特別得小心。但是在編譯環節是沒有問題的。
  21. 介面和抽象類別的區別是什嗎?
    介面中所有方法必須是抽象的,並且不能指定方法的存取修飾詞。抽象類別中可以有方法的實現,也可以指定方法的存取修飾詞。
  22. 如何區別重載方法?
    不同的參數類型,不同的參數個數,不同的參數順序。
  23. const和readonly有什麼區別?
    const關鍵字用來聲明編譯時間常量,readonly用來聲明運行時常量。
  24. System.String 和System.StringBuilder有什麼區別?
    System.String是不可變的字串。System.StringBuilder存放了一個可變的字串,並提供一些對這個字串修改的方法。

進階題:

    1. Thread和Process之間有什麼區別?.NET新引入了Application Domain的概念,這樣他們三個之間有什麼區別?引入了Application Domain會帶來一些潛在的問題嗎?

    進程可以理解為一個容器,提供進程空間,線程所使用的記憶體都在進程空間中分配。每個線程有自己的堆棧。APPDomain相當於一個邏輯概念,相當於在進程中邏輯的劃分了一些地區,所以線程是可以跨域訪問另外的線程。

    1. Windows Service與普通的EXE在執行過程中有什麼區別?

    一般前者無介面,有windows的Service伺服器負責維護啟動和關閉。Exe由使用者維護且一般有介面。

    1. 一個進程可以訪問的Windows地址空間有多大?等於系統的虛擬記憶體大小嗎?這兩方面將對系統的設計產生什麼樣的影響?

    a.跟資料匯流排有關係。一般32位作業系統,定址空間可以達到4GB,所以一個進程可以訪問的地址也為4GB(不過實際上,有2GB是留給作業系統使用的,4M是不可訪問的,剩下的空間才供進程使用)。

    b.不等於虛擬記憶體。

    c.定址空間和資料匯流排的寬度有關係。虛擬記憶體會消耗CPU處理時間。因為需要做內外存的轉換工作。

    1. EXE和DLL之間的區別是什嗎?在系統設計中應該如何選擇使用它們?

    a..Exe有自己的進程空間,dll沒有,dll只能被引用後,和exe共用進程空間才能被調用和運行(其實還有rundll32命令可以啟動dll,該系統命令本質上就是為其提供進程空間)。

    b.dll也叫動態連結程式庫,可以將反覆使用的共有代碼和資源放在動態連結程式庫中,這樣在記憶體中只會有一個副本,節約記憶體空間(不同的進程根據不同的重定位資訊可以定位到制定的dll中)。

    1. 普通的EXE與.NET EXE的執行過程有什麼不同?

    普通exe可以直接在作業系統上執行,但是.net exe需要jit的及時編譯,並在託管環境下(即CLR的控制下)運行

    1. 什麼是弱類型,什麼是強型別?在系統設計中應該首先考慮使用哪種類型?

    弱類型在一定程度上允許不同類型的資料進行相互操作和運算,但是強型別不允許,因為強型別會做類型檢查工作。

    1. PDB檔案是作什麼用的?裡麵包含了什麼資訊?

    程式資料庫 (PDB) 檔案儲存著調試和項目狀態資訊,使用這些資訊可以對程式的調試配置進行增量連結。

    1. Cyclomatic Complexity是什嗎?為什麼它很重要?

    循環複雜度,用于衡配量序的分支數量。一個正常的方法,分值應該控制在5,6個,如果分支數太大,則最好進行方法的分解,避免badsmell.

    1. 為建立一個critical section以訪問某個變數書寫一個標準的lock() 並加上double check。

    If(m_Instance!=null)

    {

           lock(this)

           {

                  if(m_Instance!=null))

                  {

                         //do something

                  }

           }

    }

    1. 為某個對象實現標準的Dispose模式。

    Class MyObject:Idisposable

    {

           public void Dispose()

           {

                  //do something

           }

    }

    就是實現Idisposable介面,進而實現自定的析構

    1. 什麼是FullTrust? 存在於GAC中的 assembly 擁有FullTrust嗎?
    1. 下面這個命令是做什麼的?gacutil /l | find /i “system”

    全域組件快取工具使您可以查看和操作全域組件快取和下載快取的內容。

    1. 下面這個命令是作什麼的? sn -t something.dll

    Sn.exe 提供用於密鑰管理、簽名產生和簽名驗證的選項。

    1. 跨防火牆的 DCOM必須開啟哪個連接埠?連接埠135是用來做什麼的?
    1. 有什麼辦法可以與現有unmanaged code整合?在整合的時候應該考慮什麼問題?
    1. 簡要解釋一下OOP與SOA都是用來作什麼的?

    OOP是一種程式編程架構,包含幾個特徵:組件,封裝,繼承,抽象,多態。

    SOA叫面向服務架構。

    1. XmlSerializer是如何工作的?進程運行XmlSerializer時候需要什麼樣的ACL許可權?

    ACL存取控制清單。

    1. 在系統設計時,何時應該使用try catch?何時需要避免使用?
    1. Debug.Write()和Trace.Write()之間有什麼區別?二者分別應該用於何處?

    都是斷言。Debug.Write()為調試版本,在發行版本裡面不會被執行,而Trace.Write在發行版本中會被執行。

    1. Debug Build和Release Build有什麼區別?在執行效率上有什麼明顯的區別嗎?

    Debug build的版本包含了一些調試資訊,執行效率會低一些。

    1. JIT是針對Assembly還是Method發生的?解釋一下為什麼.NET的設計者要這樣做?
    1. 簡要描述一下GC的執行過程。

    當記憶體減少到某個程度之後,CLR啟動記憶體回收,將那些不被引用的對象回收並釋放所佔用的記憶體。

    1. 應該如何選擇使用abstract class還是interface?

    抽象類別可以有實現,介面無實現。介面可以多繼承,抽象類別不行。

    1. 在設計一個自訂類型時應如何選擇使用Value Type還是Reference Type?

    其實要描述的就是參考型別和實值型別的區別。可以從記憶體分布和訪問效率兩方面談。

    1. 對於Value Type和Reference Type,a.Equals(b)的預設實現方式有什麼不同?

    實值型別預設就是指是否相等。參考型別就是比較兩個引用是否指向同一個對象。

    1. .NET中為什麼不提供預設的deep copy?如果需要,要如何?deep copy?

    因為深度拷貝涉及到拷貝的級數問題,就是需要深度拷貝到什麼層次。在C#中,不可以直接覆寫MemberwiseClone方法,可以實現Iclone介面來實現自訂的深度拷貝。

    1. 相對於.NET 1.1,.NET2.0為了避免過度的boxing/unboxing造成的系統開銷提供了哪些支援?

    範型。

    1. String是Value Type還是Reference Type?為什麼.NET中的String對象被設定成immutable?

    是參考型別。因為字串對象在作業系統中出現的頻率很高,如果為每一個string都分配一個獨立的記憶體,將會是很大的系統開銷。所以string 設定為不可變的,就是一種記憶體駐留技術,本質上就是讓同樣的字串都訪問同一塊記憶體。比如:s1=”a”,s2=”b”,則s1和s2其實都是指向同一塊為”a”的記憶體;如果現在修改s1=”b”,則s1將不再指向”a”,而是開闢另一塊為”b”的記憶體空間,使s1指向b(其實如果有另一個s3=”b”,則s1就會和s3指向同一個”b”,此時s1不再重新開闢空間)。

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.