.NET / C# 面試問題及答案。自信地完成下一次 Csharp 面試或 .NET 面試。
從這 9 小時的課程,你會學到
- 了解 C# 和 .NET 面試中會問哪些基本問題以及這些問題的清晰度如何。
- 回答有關 .NET core、.NET Framework、.NET 5.0、IL 程式碼、JIT、CTS、CLS、CLR、託管、非託管程式碼和垃圾收集器的基本 C# 問題。
- 如何自信地回答有關堆棧( stack )、堆( heap )、值類型( value types )、參考類型( reference types )、裝箱( boxing )、拆箱( unboxing )、後進先出( LIFO )、先進先出( FIFO )、隱式轉換( implicit casting )和明確轉換( explicit casting )的問題。
- 主題和集合是 C# 面試中最喜歡的話題。 一個完整的部分專門用於回答數組、數組列表、數組與數組列表和泛型等問題。
- 如果沒有關於代表和事件的問題,任何 C# 面試都是不完整的。 專門介紹代表和活動以及如何回答他們的分歧的完整部分
- 專門的 OOP 面試部分,涵蓋類( Classes )、物件( Objects )、多態性( Polymorphism )、繼承( Inheritance )、虛擬方法( virtual methods )、重載( overloading )、重寫( overriding )、抽象類( abstract class )與介面( interfaces )
- 處理有關聚合( Aggregation )、組合( Composition )、關聯( Association )、UML 圖、遮蔽( Shadowing )、密封類( Sealed classes )、嵌套類別( Nested classes )和部分類( partial classes )的棘手問題。
- 如何回答有關 SOLID(SRP、OCP、LSP、ISP 和 Dependency Inversion 依賴反轉)、DI(Dependency injection,依賴注入)、IOC( Inversion of Control,控制反轉)的問題。
- 垃圾收集器問題涵蓋託管、非託管、世代、GC0、GC1、GC2、Finalize 與解構函數( destructor )、處置模式( Dispose Pattern )、使用關鍵字、弱參考( weak references )和強參考( strong references )
- 專門部分涵蓋設計模式、結構( Structural )、行為型( Behavioral )、創建型( Creational )、單例模式( Singleton Pattern )、原型( Prototype )、模板( Template )、適配器( Adapter )、儲存庫( Repository )、CQRS 的基礎知識
要求
應該具備 C# 知識。 請記住,這是一個面試準備複習課程,而不是通往 C# 輕鬆工作的捷徑。
課程說明
如果你想通過 C# 和 .NET 面試,那麼這正是你在找的課程。 你可以成為你的專案/公司的英雄,處理複雜的場景。
但在面試時未能回答簡單的.NET、C# 基礎問題可能會對面試帶來非常負面的影響。
本課程聚焦在 C# 和 .NET 的基本問題…祝你求職愉快。
以下是本系列中涵蓋的 C# 面試問題清單。
第 1 課 – 堆棧( stack )、堆( heap )、裝箱、拆箱、陣列、ArrayList、泛型、執行緒
問題 1:- 解釋 .NET 和 C# 之間的差異?
問題 2:- .NET Framework、.NET Core、.NET 5.0
問題 3:- 什麼是 IL(中間語言)程式碼?
問題 4:- JIT(即時編譯器)有什麼用?
問題 5:- 是否可以查看 IL 程式碼?
問題 6:- 編譯為 IL 程式碼有什麼好處?
問題 7:- .NET 支援多種程式語言嗎?
問題 8:- 什麼是 CLR(公共語言執行時期)?
問題 9:- 什麼是託管程式碼和非託管程式碼?
問題 10:- 解釋一下垃圾收集器的重要性?
問題 11:- 垃圾收集器可以宣告非託管物件嗎?
問題 12:- CTS 的重要性是什麼?
問題 13:- 解釋一下 CLS?
問題 14:- 堆棧( stack )與堆之間的區別?
問題 15:- 什麼是值型別和參考型別?
問題 16:- 解釋一下裝箱和拆箱?
問題 17:- 裝箱和拆箱的後果是什麼?
問題 18:- 解釋強制轉換、隱性強制轉換和明確強制轉換?
問題 19:- 明確轉換期間會發生什麼?
問題 20:- 區分 Array 和 ArrayList 嗎?
問題 21:- array 和 arraylist 哪個效能比較好?
問題 22:- 什麼是通用集合?
問題 23:- 什麼是執行緒(多執行緒 )?
問題 24:- 執行緒與 TPL 有何不同?
問題 25:- 我們如何在 C# 中處理異常(try/catch)?
問題 26:- 最後需要什麼?
問題 27:- 為什麼我們需要 out 關鍵字?
問題 28:- 代表們需要什麼?
問題 29:- 什麼是事件?
問題 30:- 抽象類和介面有什麼差別?
第 2 課 – 關於代表、活動以及代表與活動的問題。
問題 31:- 什麼是委託以及如何創建委託?
問題 32:- 你在哪裡使用了委託?
問題 33:- 什麼是組播代表?
問題 34:- 什麼是事件?
問題 35:- 如何建立活動?
問題 36:- 代表與事件。
第 3 課 – OOP、抽象化、封裝、繼承、重寫和重載。
問題 37:- 為什麼我們需要 OOP?
問題 38:- OOP 的重要支柱是什麼?
問題 39:- 什麼是類( class )和物件( object )?
問題 40:- 抽象( Abstraction )與封裝( Encapsulation )?
問題 41:- 解釋繼承( Inheritance )?
問題 42:- 解釋 virtual 關鍵字?
問題 43:- 什麼是最重要的?
問題 44:- 解釋一下重載?
問題 45:- 重載與覆蓋 ( Overloading vs Overriding )?
第 4 課 – 多態性( polymorphism )、靜態多態性與動態多態性( Static vs Dynamic polymorphism )以及運算子重載( operator overloading )。
問題 46:- 什麼是多態性?
問題 47:- 多態性可以在沒有繼承的情況下工作嗎?
問題 48:- 解釋靜態多態性與動態多態性?
問題 49:- 解釋運算子重載?
第 5 課 – 圍繞抽象類( Abstract classes )和介面的棘手問題。
問題 50:- 為什麼我們需要抽象類?
問題 51:- 抽象方法是虛擬的嗎?
問題 52:- 我們可以建立抽象類的實例嗎?
問題 53:- 是否必須實作抽象方法?
問題 54:- 為什麼簡單基底類別取代抽象類?
問題 55:- 解釋介面以及為什麼我們需要它?
問題 56:- 我們可以在介面中編寫邏輯嗎?
問題 57:- 我們可以在介面中將方法定義為私有嗎?
問題 58:- 如果我想更改介面,最佳做法是什麼?
問題 59:- 解釋介面中的多重繼承?
問題 60:- 解釋一下介面隔離原理?
問題 61:- 我們可以建立介面實例嗎?
問題 62:- 我們可以用抽象類別進行多重繼承嗎?
第 6 部分 – 回答最常見的問題「抽象類別與介面」。
問題 63:- 抽象類和介面之間的區別?
第 7 部分 – 有關建構子和父子建構子( parent child constructor )的問題。
問題 64:- 為什麼我們需要建構函數?
問題 65:- 在父子中,哪一個建構子會先觸發?
問題 66:- 初始化程序是如何執行的?
問題 67:- 靜態建構子如何在父子中執行?
問題 68:- 靜態建構子何時觸發?
第 8 部分 – 關於遮蔽、密封、巢狀類別和部分類別的問題。
問題 69:- 什麼是遮蔽( shadowing )?
問題 70:- 解釋方法隱藏?
問題 71:- 隱藏與覆蓋?
問題 72:- 我們什麼時候需要遮蔽( shadowing )?
問題 73:- 解釋密封類?
問題 74:我們可以建立密封類( sealed classes )的實例嗎?
問題 75:- 什麼是嵌套類( nested classes )以及何時使用它們?
問題 76:嵌套類可以存取外部類變數嗎?
問題 77:- 我們可以在巢狀類中使用公共的、受保護的存取修飾符嗎?
問題 78:- 解釋部分類?
問題 79:- 在什麼場景下我們使用分部類別?
第 9 課 – 圍繞 SOLID 原則、依賴注入 (DI) 和 IOC 的問題
問題 80:- 什麼是 SOLID?
問題 81:- SOLID 的完整形式是什麼?
問題 82:- SOLID 的目標是什麼?
問題 83:- 舉例說明 SRP?
問題 84:- SRP 有什麼好處?
問題 85:- 舉例解釋 OCP?
問題 86:- OCP 有什麼好處?
問題 87:- 你能解釋一下里斯科夫原理( LISKOV Principle )及其違反情況嗎?
問題 88:- 我們如何解決 LISKOV 問題?
問題 89:- 解釋一下介面隔離原則?
問題 90:- LISKOV 和 ISP 之間有連結嗎?
問題 91:- 定義依賴倒置( dependency inversion )?
問題 92:- 什麼是高階模組和低階模組?
問題 93:- 依賴倒置有什麼好處,用一個例子來說明?
問題 94:- 只有依賴倒置才能解決解耦問題嗎?
問題 95:- 為什麼開發人員會將物件建立移到高階模組之外?
問題 96:- 解釋一下 IOC(控制反轉)?
問題 97:- 用一個例子解釋依賴注入?
問題 98:- SOLID、IOC 和 DI 是設計模式還是原理?
問題 99:- 對於良好的程式碼/架構來說,只有 SOLID 就足夠了嗎?
第 10 課 – 解釋和區分 C# 中的組合、聚合和關聯。
問題 100:-「使用/擁有」關係有哪些不同類型?
問題 101:- 什麼是組合關係?
問題 102:- 解釋一下聚合?
問題 103:- 解釋關聯?
問題 104:- 區分組合、聚合和關聯?
問題 105:- 用於組合、聚合和關聯的 UML 符號
第 11 課 – 堆棧( stack )、堆( heap )、裝箱( boxing )、拆箱( unboxing )、值( values )和參考類型( reference types )的破解問題
問題 106:- 解釋堆棧( stack )和堆( heap )?
問題 107:- 堆棧( stack )和堆( heap )儲存在哪裡?
問題 108:- 什麼在堆棧( stack )上,什麼在堆( heap )上?
問題 109:- 堆棧( stack )記憶體位址是如何排列的?
問題 110:- 堆棧( stack )記憶體如何釋放 LIFO 或 FIFO?
問題 111:- 原語和物件如何儲存在記憶體中?
問題 112:- 原始資料型別可以儲存在堆( heap )中嗎?
問題 113:- 解釋一下值類型和參考類型?
問題 114:- 解釋 byval 和 byref ?
問題 115:- 區分按值複製和按引用複製?
問題 116:- 什麼是裝箱和拆箱?
問題 117:- 裝箱拆箱是好是壞?
問題 118:- 我們可以避免裝箱和拆箱嗎?
問題 119:- 裝箱和拆箱對效能有什麼影響?
問題 120:- 字串是分配在堆棧( stack )還是堆( heap )上?
問題 121:- 為應用程式創建了多少個堆棧( stack )和堆( heap )?
問題 122:- 如何釋放堆棧( stack )和堆( heap )記憶體?
問題 123:- 誰清除 heap 記憶體?
問題 124:- 結構在哪裡分配堆棧( stack )或堆( heap )?
問題 125:- 結構是複製 byval 還是複製 byref ?
問題 126:- 可以在 heap 上建立結構嗎?
第 12 課 – 什麼是垃圾收集器、託管程式碼與非託管程式碼、處置模式、記憶體洩漏、弱引用與強引用?問題 127: – 解釋一下垃圾收集器 (GC)?
問題 128:- 垃圾收集器如何知道何時清理物件?
問題 129:- 有沒有辦法可以看到這個 Heap 記憶體?
問題 130:- 垃圾收集器是否清理原始型別?
問題 131:- 託管與非託管程式碼/物件/資源?
問題 132:- 垃圾收集器可以清理非託管程式碼嗎?
問題 133:- 解釋幾代人?
問題 134:- 什麼是 GC0、GC1 和 GC2?
問題 135:- 為什麼我們需要 Generations?
問題 136:- 哪一個是清理非託管物件的最佳位置?
問題 137:- 當我們有析構函數時,GC 的行為如何?
問題 138:- 你如何看待空解構函數( empty destructor )?
問題 139:- 解釋一下 Dispose 模式?
問題 140:- Finalize 與 Destructor ?
問題 141:- using 關鍵字有什麼用?
問題 142:- 你能強制垃圾收集器嗎?
問題 143:- 強制 GC 是個好的做法嗎?
問題 144:- 我們如何偵測記憶體問題?
問題 145:- 我們如何知道記憶體問題的確切根源?
問題 146:- 什麼是記憶體洩漏( memory leaks )?
問題 147:- .NET 應用程式會像我們有 GC 一樣出現記憶體洩漏嗎?
問題 148:- 如何偵測 .NET 應用程式中的記憶體洩漏( memory leaks )?
問題 149:- 解釋弱引用和強參考( strong references )?
問題 150:- 什麼時候會使用弱參考( weak references )?
第 13 課 – 圍繞設計模式基礎、類型、單例模式、原型、模板和適配器( Adapter )的問題。
問題 151:- 什麼是設計模式?
問題 152:- 設計模式有哪些不同類型?
問題 153:- 解釋結構、行為和創意設計模式?
問題 154:- 解釋一下單例模式及其用法?
問題 155:- 你是如何實現單例模式的?
問題 156:- 我們可以使用靜態類別而不是使用私有建構子嗎?
問題 157:- 靜態模式與單例模式?
問題 158:- 你是如何在 Singleton 中實現線程安全的?
問題 159:- Singleton 中的雙空檢查( double null check )是什麼?
問題 160:- 使用 Lazy 關鍵字可以讓 Singleton 模式程式碼變得簡單嗎?
問題 161:- 我們可以去掉這個雙空檢查代碼( double null check code )嗎?
第 14 課:儲存庫模式與工作單元設計模式面試題。
問題 162:儲存庫模式有什麼用?
問題 163:資料存取層 (DAL) 和儲存庫相同嗎?
問題 164:什麼是通用儲存庫模式?
問題 165:抽像是儲存庫的唯一優勢嗎?
問題 166:如何在儲存庫中實作事務?
問題 167:什麼是工作單元設計模式?
問題 168:由於 EF 的功能幾乎相同,我們是否需要儲存庫模式?
問題 169:您是否使用儲存庫進行過單元測試?
問題 170:儲存庫模式如何簡化單元測試?
問題 171:如何使用儲存庫進行模擬測試?
第 15 課:工廠模式、依賴注入 (DI) 和 IOC 面試題(最常問的問題)。
問題 172:什麼是工廠模式?它有什麼好處?
問題 173:集中式物件創建如何有助於鬆散耦合?
問題 174:什麼是 IOC 和 DI?
問題 175:DI 與 IOC 的差異?
問題 176:什麼是服務定位器?
問題 177:服務定位器與 DI 的差異?
問題 178:服務定位器和 DI 哪個比較好?
問題 179:DI 不能使用簡單的類別而不是介面嗎?
問題 180:DI 是工廠模式嗎?
問題 181:那麼,如果只是集中式物件創建,那它就是工廠模式嗎?
問題 182:靜態 DI 和動態 DI?
問題 183:在哪些場景下應該使用靜態 DI 還是動態 DI?
第 16 課:真正的工廠模式和抽象工廠模式。
問題 184:真正的工廠模式?
問題 185:工廠方法模式 vs 工廠模式?
問題 186:函數式程式設計如何建立新行為?
問題 187:什麼是抽象工廠模式?
問題 188:抽象工廠模式內部使用函數式程式設計嗎?
問題 189:解釋簡單工廠模式?
問題 190:簡單工廠模式 vs 工廠(工廠方法)模式 vs 抽象工廠模式?
問題 191:如何從簡單工廠模式中刪除 IF 條件?
目標受眾
- 正在尋找工作變動和良好前景的 C# .NET 開發人員。
- 想要在面試前進行最後一刻複習的 C# .NET 開發人員。
講師簡介
Shivprasad Koirala 我們喜歡錄製逐步教程
我的名字是 Shivprasad Koirala,我們熱愛教學和學習,我們在 15 年前創建了 QuestPond 網站,其唯一目標是逐步創建高品質的 IT 程式相關課程。
我們在網路上看到很多課程,要嘛做得太快,要嘛太慢,要嘛太複雜。
Questpond 的主要目標是建立有關 C#、ASP.NET、設計模式、SQL 等的逐步課程。 隨著時間的推移,我逐步添加了其他課程,例如 Angular、Sharepoint、MSBI、Azure 等。
字幕:英文
- 想要了解如何將英文字幕自動翻譯成中文? 請參考這篇 How-To
- Udemy 永久擁有課程 許多課程約 NT400(點擊連結看更多)
- ✨年訂閱每月 NT350 🌈 悠遊 Udemy 的 26000+ 門課,最大化學習 ( 原價 NT635/月 )
- Udemy 現在越來越多課程有中文字幕,請參考 Soft & Share 中文線上課程
- 手機上點選優惠連結看到的價格比電腦上看到的貴
- $代表當地貨幣, 如在台灣為 NT
- 點選”報名參加課程”有可能因瀏覽器 cookies 轉久一點或回報錯誤而無法連上,請稍等刷新或重新點選就會出現
報名參加課程

也許你會有興趣
- C# 相關線上課程
- .NET 相關線上課程
- ★英語學習地圖 – 練好英文是最大的學習槓桿
- 如何找工作學習地圖 – 找工作不要靠運氣!
- 從 Soft & Share 各種社團頻道挑選你喜歡的加入
發表迴響