馬上要到2020年了,這裏整理一個.NET 工程師面試題系列,希望年底或者明年金三銀四跳槽的程序猿們帶來一些幫助,建議收藏,如果文中答案有不準確的地方,請在評論中指出。
前文傳送門
- dotNET面試題彙總系列連載(1):基礎語法
- dotNET面試題彙總系列連載(2):面向對象
- dotNET面試題彙總系列連載(3):數據庫
- dotNET面試題彙總系列連載(4):前端
- dotNET面試題彙總系列連載(5):MVC
- dotNET面試題彙總系列連載(6):集合、異常、泛型、日誌
- dotNET面試題彙總系列連載(7):算法
- dotNET面試題彙總系列連載(8):設計模式
- dotNET面試題彙總系列連載(9):HR談談人生,說說理想
問題目錄
- 1.通常採用的訪問修飾符有哪五種
- 2.多態的理解
- 3.什麼是構造函數
- 4.重寫和重載的區別
- 5.class和struct的異同
- 6.構造函數是否能被重寫?
- 7.簡述一下面向對象的三大特性
- 8.抽象類和接口有什麼區別?
- 9.類的執行順序
- 10.接口是否可繼承接口?抽象類是否可實現(implements)接口?抽象類是否可繼承實現類(concrete class)?
- 11.繼承最大的好處?
- 12.請說說引用和對象?
- 13.什麼是匿名類,有什麼好處
- 14.有哪些引用類型,有哪些值類型,有什麼區別
- 15.C#中有沒有靜態構造函數,如果有是做什麼用的?
- 16.怎樣理解靜態變量?靜態成員和非靜態成員的區別?
- 17.在項目中爲什麼使用接口?接口的好處是什麼?什麼是面向接口開發?
- 18.屬性能在接口中聲明嗎?
- 19.什麼時候用重載?什麼時候用重寫?
- 20.靜態方法可以訪問非靜態變量嗎?如果不可以爲什麼?
1.通常採用的訪問修飾符有哪五種
public:公開,訪問無限制
internal:本項目內可以訪問
internal protected:本項目的父子類可以訪問
protected:子類可以訪問
private:受保護的,只能在奔類中使用,對外完全封閉
2.多態的理解
解釋:同一操作作用於不同的對象,實現不同的結果。
作用:增強代碼的靈活性,重用性,可讀性
實現:通過派生類,覆寫基類的虛方法、重寫基類的override方法。
3.什麼是構造函數
概念:構造函數的方法名與類型相同、沒有返回類型
作用:完成對類的對象初始化
創建一個類的新對象時,系統會自動調用該構造函數初始化新對象,
如果沒有寫定義,那麼系統會自動提供一個不帶任何參數的public 構造函數
4.重寫和重載的區別
重寫方法:關鍵字用override修飾,派生類重寫基類的方法,方法命名、返回類型,參數必須相同
重載方法:方法名必須相同,參數列表必須不相同,返回類型可以不相同。
作用:重寫主要是實現面向對象的多態性、重載主要是實現實例化不同的對象
5.class和struct的異同?
- 相同點
都可以實現接口
- 不同點
1.class是引用類型,struct是值類型
2.class允許繼承、被繼承,struct不允許,只能繼承接口
3.class可以初始化變量,struct不可以
4.class可以有無參的構造函數,struct不可以,必須是有參的構造函數,而且在有參的構造函數必須初始化所有成員
- 使用場景
1.Class比較適合大的和複雜的數據,表現抽象和多級別的對象層次時。Struct適用於作爲經常使用的一些數據組合成的新類型,表示諸如點、矩形等主要用來存儲數據的輕量級對象時,偏簡單值。
2.Struct有性能優勢,Class有面向對象的擴展優勢。
6.構造函數是否能被重寫?
構造器Constructor不能被繼承,因此不能重寫,但可以被重載
7.簡述一下面向對象的三大特性
- 封裝、繼承、多態。
- 封裝:是通過把對象的屬性的實現細節隱藏起來,僅對外提供公共的訪問方法。
- 繼承:是通過子類繼承基類、繼承抽象類、繼承接口實現的。
- 多態:是通過重寫基類的override 方法、重寫虛方法實現的。
- 好處是:方便維護、易擴展。
- 缺點是:比面向過程性能低。
8.抽象類和接口有什麼區別?
相同點:都不能直接實例化
- 1.抽象類用abstract修飾、接口用interface修飾
- 2.抽象類中的方法可以實現,也可以不實現,有抽象方法的類一定要用abstract修飾,接口中的方法不允許實現
- 3.抽象類只能單繼承,接口支持多繼承
- 4.抽象類有構造方法,接口不能有構造方法
- 5.接口只負責功能的定義,通過接口來規範類的,(有哪些功能),而抽象類即負責功能的定義有可以實現功能(實現了哪些功能)
9.類的執行順序
執行順序:父類,子類,靜態塊,靜態字段,非靜態塊,非靜態字段,構造器,方法
10.接口是否可繼承接口?抽象類是否可實現(implements)接口?抽象類是否可繼承實現類(concrete class)?
接口可以繼承接口,抽象類可以實現接口,抽象類可以繼承實現類,但前提是實現類必須有明確的構造函數。
11.繼承最大的好處?
對父類成員進行重用,增加代碼的可讀性、靈活性。
12.請說說引用和對象?
對象和引用時分不開的,對象生成一個地址,放在堆裏面,引用則指向這個地址,放在棧裏面
13.什麼是匿名類,有什麼好處
不用定義、沒有名字的類,使用一次便可丟棄。好處是簡單、隨意、臨時的。
14.有哪些引用類型,有哪些值類型,有什麼區別
- 引用類型:類、接口、委託、字符串、數組
- 值類型:整形、浮點型、結構體、枚舉、bool
- 值類型和引用類型的區別在於,值類型的變量直接存放實際的數據,而引用類型的變量存放的則是數據的地址,即對象的引用。
- 默認值,值類型是0,引用類型null。
15.C#中有沒有靜態構造函數,如果有是做什麼用的?
- 特點
靜態構造函數既沒有訪問修飾符,也沒有參數。
在創建第一個實例或引用任何靜態成員之前,將自動調用靜態構造函數來初始化類。
無法直接調用靜態構造函數。在程序中,用戶無法控制何時執行靜態構造函數。 - 用途
當類使用日誌文件時,將使用這種構造函數向日志文件中寫入項。
16.怎樣理解靜態變量?靜態成員和非靜態成員的區別?
靜態變量屬於類,而不屬於對象;並對所有對象所享;靜態成員在加類的時候就被加載。
17.在項目中爲什麼使用接口?接口的好處是什麼?什麼是面向接口開發?
- 接口是一種約束,描述類的公共方法/公共屬性,不能有任何的實現
- 好處是:結構清晰,類之間通信簡單易懂,擴展性好,提高複用性。
- 面向接口開發就是指面向抽象協議編程,實現者在實現時
18.屬性能在接口中聲明嗎?
可以,不能有訪問修飾符,不能初始化賦值。
19.什麼時候用重載?什麼時候用重寫?
當一個類需要用不同的實現來做同一件事情,此時應該用重寫,而重載是用不同的輸入做同一件事情
20.靜態方法可以訪問非靜態變量嗎?如果不可以爲什麼?
靜態方法和非靜態變量不是同一生命週期,靜態方法屬於類,非靜態變量屬於具體的對象,靜態方法和具體的對象沒有任何關聯
作者信息:
【文章信息】:
作者-張林
原文鏈接-https://blog.csdn.net/kebi007/article/details/103501723
【原創公衆號】:dotNet全棧開發。
【簡介】:CSDN 博客專家, xamarin跨平臺開發者,博客園app開發者(ps:雖然下載量還行10萬+,並沒有什麼大用)這是一個堅持原創的技術公衆號,每天堅持推送各種 dotNet 基礎/進階文章,編程技巧,爬蟲實戰,面試經驗,xamarin開發系列不定期分享各類資源。
【福利】:送你新人大禮包一份,關注微信公衆號,後臺回覆:“CSDN” 即可獲取!
版權聲明:本文爲CSDN博主「dotNet全棧開發」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
————————————————
版權聲明:本文爲CSDN博主「dotnet全棧開發」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/kebi007/article/details/103655685