15個基本的C#面試問題
當前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
1、給定一個int數(shù)組,編寫方法以統(tǒng)計所有偶數(shù)的值。 有很多方法可以做到這一點,但是最直接的兩種方法是:
還有就是
當然,你還需要注意以下關(guān)鍵:
這可能一個很”明顯”的單行,但這樣溢出的可能性很高。雖然上面的答案中使用的轉(zhuǎn)換為long的方法并沒有消除這種可能性,但是它使得發(fā)生溢出異常的可能性非常小。但請注意,如果你寫答案的時候詢問數(shù)組的預(yù)期大小及其成員的大小,則顯然你在做這道題目的時候在考慮此溢出問題,這很棒。 2、下面的代碼的輸出是什么?解釋你的答案。
輸出將是:
下面的簡短程序的輸出是什么?解釋你的答案。簡短程序的輸出是什么?解釋你的答案。 3、下面語句中 time 和null 的比較是有效還是無效的?
有人可能會認為,由于變量永遠不可能為null (它被自動初始化為1月1日的值),所以編譯器在比較某個變量時就會報錯。具體來說,操作符將其操作數(shù)強制轉(zhuǎn)換為不同的允許類型,以便在兩邊都得到一個通用類型,然后可以對其進行比較。這就是為什么像這樣的東西會給你期望的結(jié)果(而不是失敗或意外的行為,因為操作數(shù)是不同的類型):
然而,這有時會導(dǎo)致意外的行為,例如DateTime變量和null的比較。在這種情況下,DateTime變量和null文字都可以轉(zhuǎn)換為可空的。因此,比較這兩個值是合法的,即使結(jié)果總是假的。 4、給定circle以下類的實例:
簡編寫代碼以計算圓的周長,而無需修改Circle類本身。
由于我們不能訪問對象的私有半徑字段,所以我們通過內(nèi)聯(lián)傳遞計算函數(shù),讓對象本身計算周長。 許多c#程序員回避(或不理解)函數(shù)值參數(shù)。雖然在這種情況下,這個例子有點做作,但其目的是看看申請人是否了解如何制定一個調(diào)用來計算哪個與方法的定義相匹配。 另外,一個有效的(雖然不那么優(yōu)雅的)解決方案是從對象中檢索半徑值本身,然后執(zhí)行計算結(jié)果:
無論哪種方式。我們在這里主要尋找的是面試者是否熟悉并理解如何調(diào)用Calculate方法。 5、下面程序的輸出是什么?解釋你的答案。
下面 程序的輸出是什么?解釋你的答案。序的輸出是什么?解釋你的答案。 回答: 問題第一部分(即帶有的代碼版本await Task.Delay(5);)的答案是該程序?qū)H輸出一個空行(而不是 “ Hello world!”)。這是因為調(diào)用result時仍將未初始化Console.WriteLine。 大多數(shù)程序和面向?qū)ο蟮某绦騿T都希望函數(shù)return在返回調(diào)用函數(shù)之前從頭到尾執(zhí)行,或者從語句執(zhí)行。C#async函數(shù)不是這種情況。它們只執(zhí)行到第一個await語句,然后返回到調(diào)用方。由await(在此例中為Task.Delay)調(diào)用的函數(shù)是異步執(zhí)行的,并且該await語句之后的行直到Task.Delay完成(在5毫秒內(nèi))之前都不會發(fā)出信號。但是,在這段時間內(nèi),控制權(quán)已經(jīng)返回給調(diào)用者,該調(diào)用者Console.WriteLine對尚未初始化的字符串執(zhí)行該語句。 調(diào)用await Task.Delay(5) 可讓當前線程繼續(xù)其正在執(zhí)行的操作,如果已完成(等待任何等待),則將其返回到線程池。這是異步/等待機制的主要好處。它允許CLR使用線程池中的更少線程來服務(wù)更多請求。 異步編程已經(jīng)變得越來越普遍,因為執(zhí)行許多活動的網(wǎng)絡(luò)服務(wù)請求或數(shù)據(jù)庫請求的設(shè)備越來越普遍。C#具有一些出色的編程結(jié)構(gòu),可以極大地簡化異步方法的編程任務(wù),并且意識到它們的程序員將產(chǎn)生更好的程序。 關(guān)于問題的第二部分,如果將await Task.Delay(5);其替換為Thread.Sleep(5),則程序?qū)⑤敵鯤ello world!。一種沒有至少一個語句的async方法,其操作就像同步方法一樣。也就是說,它將從頭到尾執(zhí)行,或者直到遇到一條語句為止。調(diào)用只是阻塞了當前正在運行的線程,因此調(diào)用僅將方法的執(zhí)行時間增加了5毫秒。awaitreturnThread.Sleep()Thread.Sleep(5)SaySomething() 6、下面的程序輸出是什么?解釋你的答案。
這個程序?qū)褦?shù)字10輸出十次。 原因如下: 委托被添加到 for循環(huán)中l(wèi)了,而 “引用” (或者“指針”)被存儲到i中,而不是值本身。因此,在我們退出循環(huán)之后,變量i被設(shè)置為10,所以到調(diào)用每個委托時,傳遞給它們的值都是10。 7、是否可以將混合數(shù)據(jù)類型(例如int,string,float,char)全部存儲在一個數(shù)組中?是! 之所以可以這樣做,是因為數(shù)組的類型object不僅可以存儲任何數(shù)據(jù)類型,還可以存儲類的對象,如下所示:
8、比較C#中的結(jié)構(gòu)和類。他們有什么共同點?它們有何不同?C#中的類和結(jié)構(gòu)確實有一些共同點,即: 他們都是 是復(fù)合數(shù)據(jù)類型 可以包含方法和事件 可以支持接口 但是有許多差異。比較一下: 類: 支持繼承 是引用(指針)類型 引用可以為空 每個新實例都有內(nèi)存開銷 結(jié)構(gòu): 不支持繼承 是值類型 按值傳遞(如整數(shù)) 不能有空引用(除非使用了Nullable) 每個新實例沒有內(nèi)存開銷(除非“裝箱”) 9、這里有一個包含一個或多個$符號的字串,例如:
問題:如何$從給定的字符串中刪除第二和第三次出現(xiàn)的? 使用如下正則表達式:
說明:
TestValue : 10 在創(chuàng)建該類的任何實例之前,將調(diào)用該類的靜態(tài)構(gòu)造函數(shù)。此處調(diào)用的靜態(tài)構(gòu)造函數(shù)TestValue首先將變量初始化。 11、有沒有一種方法可以修改ClassA、以便您可以在調(diào)用Main方法時使用參數(shù)調(diào)用構(gòu)造函數(shù),而無需創(chuàng)建任何其他新實例ClassA?
啟動類
回答: 所述this關(guān)鍵字被用于調(diào)用其他構(gòu)造,初始化該類對象。下面是實現(xiàn):
12、以下代碼輸出什么?
答案:
13、描述依賴注入。依賴注入是一種使緊密鏈接的類分離的方式,從而減少了類之間的直接依賴。有多種方法可以實現(xiàn)依賴項注入:
15、描述裝箱和拆箱。并寫一個例子。裝箱是將值類型隱式轉(zhuǎn)換為該類型object或該值類型實現(xiàn)的任何接口類型。將值類型裝箱會創(chuàng)建一個包含該值的對象實例,并將其存儲在堆中。 例:
最后:面試不僅要基礎(chǔ)扎實,更重要的是能解決棘手的技術(shù)問題,所以以上這些內(nèi)容僅供參考。并非每個值得招聘的優(yōu)秀候選人都能夠回答所有問題,也不能確定能夠全部回答,就能保證他是一個優(yōu)秀候選人。歸根結(jié)底,招聘仍然是一門藝術(shù),一門科學以及許多工作。 原文來自:https://www.toptal.com/c-sharp/top-10-mistakes-that-c-sharp-programmers-make 該文章在 2024/10/9 17:52:41 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |