最怕的就是面試,往往到找工做的時候感受壓力山大,每次都要提早刷點題目去面對。因此這裏本身對之後須要瞭解的知識作一個記錄,方便本身隨時的補充和深刻了解,也給如今的本身留下一點點的印記,給將來留下一點回憶。web
下面進入到正題,其實在面試的時候咱們每每都會被問到一些C#基礎的知識,其實就和以前聽過的一句話所說的,「它們就像是一道檻兒,過了這個檻的人,以爲真是太容易了」,的確!不少東西就是這樣子,尤爲對於我我的來講更加是這樣子,若是有實踐的實現和應用,我可以把這個東西理解的稍微透徹一點,提及來也可以表達出本身的一些見解,但若是是一些只據說過,用的不是很深的東西,往往一些基礎點,只可以大概的講出他的官方定義,在深刻可能滿腦子都是問號了!因此就想經過這篇文章記錄一些面試過程當中會常遇見的問題,熟悉的本身講一講本身見解,不熟悉的先記錄下來,而後慢慢的去補充。面試
1.委託和事件數組
a.委託異步
關鍵字:delegateide
基礎定義:C「運行時「的qsort函數獲取指向一個回調函數的指針,以便對數組中的元素進行排序。在Microsoft Windows中,窗口過程,鉤子過程和異步過程調用等都須要回調函數。在.Net Framework中,回調函數的應用更是普遍函數
我的理解:其實單從這個基礎上面定義來講比較簡單的,主要應用的場景主要是在一個方法,有一個參數的值是須要傳遞另一個方法,而後使用這個傳入的方法。若是在js中大體的把這個理解爲回調函數,回調函數的也是把方法名做爲參數傳遞,可是由於js定義方法的時候不須要對這個傳入的方法進行修飾,直接一個名稱定義就能夠了,可是在C#的方法定義的時候須要對這個傳入的參數進行定義,好比是int,string,實體,等等,因此在這裏出現了委託delegate修飾符,定義一個delegate修飾的委託,而後做爲修飾符修飾須要傳遞的方法。我的的暫時理解是這樣的,若是理解錯了,請你們指出。(後面翻了一下CLR via C#關於委託的說明,表示有點懵,講得很底層也很深刻,感受我理解的要怎麼去用!而書裏講的是爲何是這樣,實現的機制以及原理是什麼,產出的1L代碼是怎樣的!)ui
namespace 委託與事件 { class Program { static void Main(string[] args) { Console.WriteLine(GreetPeople("張三", ShowChinese)); Console.WriteLine(GreetPeople("zhangsan", ShowEnglish)); Console.ReadKey(); } /// <summary> /// 中文問好 /// </summary> /// <param name="name"></param> /// <returns></returns> public static string ShowChinese(string name) { return name + ",你好!"; } /// <summary> /// 英文問好 /// </summary> /// <param name="name"></param> /// <returns></returns> public static string ShowEnglish(string name) { return name + ",hello!"; } /// <summary> /// 定義一個委託 /// </summary> /// <param name="name"></param> /// <returns></returns> public delegate string Show(string name); //注意此方法,它接受一個show類型的方法做爲參數 private static string GreetPeople(string name, Show show) { return show(name); } } }
2.事件spa
關鍵字:event.net
基礎定義:定義了事件成員的類型容許類型(或類型的實例)通知其餘對象發生了特定的事情。例如Button類定義了Click時間。應用程序中的一個或多個對象能夠接收關於該事件的通知,以便在Button被單擊以後採起特定的操做。咱們用事件這種類型成員來實現這種交互。具體地說,定義了事件成員的類型能提供一下功能指針
方法能登記它對事件的關注
方法能註銷它對事件的關注
事件發生時,登記了的方法將會收到通知。
我的理解:對於事件的理解主要停留在Button按鈕的點擊事件,作窗體程序,webFrom程序的時候,每添加一個Button的時候,在雙擊它的時候,後天的cs頁面就會註冊一個點擊事件
,點擊這個按鈕查看屬性的時候也會在事件這個屬性中看到按鈕的Click事件被註冊了button1_Click這個方法,其實從這個例子能夠推理一下,當前是註冊了單擊按鈕這個行爲到事件,擴展一下同理的能夠註冊事物的其它的行爲到事件,因此我的在這裏就這樣理解,事件就是給某一個事物註冊了某一個動做或者行爲,這個動做或者是行爲在收到某個指令的時候會發送。在這裏聯想到了機器人,當機器人收到了某一個命令,確定會先去解析這個命令,而後轉換成指令,而後去執行相對應的動做,在這裏就能夠把這些機器執行的動做當作是程序事先給機器註冊的事件。(感受說的有點偏,若是理解的不對,還望可以指出)
這裏很是推薦一篇文章:C# 中的委託和事件
2.關於int類型的長度,佔多少字節(ps去年碰到的一個試題,到如今都還印象深入)
其實這問題有一個條件沒有補充完整,因此回答的時候得本身補充完成。
主要的int類型有Int16,Uint16,Int32,Uint32,Int64,Uint64
short System.Int16 (短整型,佔 2 字節,表示 16 位整數,範圍 -2^15 ~ 2^15-1)
ushort System.UInt16 (無符號短整型,佔 2 字節,表示 16 位正整數,範圍 0 ~ 2^16)
int System.Int32 (整型,佔 4 字節,表示 32 位整數,範圍 -2^31 到 2^31-1)
uint System.UInt32 (無符號整型,佔 4 字節,表示 32 位正整數,範圍 0 ~ 2^32)
long System.Int64 (長整型,佔 8 字節,表示 64 位整數,範圍大約 -(10 的 19) 次方 到 10 的 19 次方)
ulong System.UInt64 (無符號長整型,佔 8 字節,表示 64 位正整數,範圍 0 ~ 大約 10 的 20 次方)
補充一下其餘的類型
bool System.Boolean (布爾型,其值爲 true 或者 false)
byte System.Byte (字節型,佔 1 字節,表示 8 位正整數,範圍 0 ~ 255)
sbyte System.SByte (帶符號字節型,佔 1 字節,表示 8 位整數,範圍 -128 ~ 127)
char System.Char (字符型,佔有兩個字節,表示 1 個 Unicode 字符)
float System.Single (單精度浮點型,佔 4 個字節)
double System.Double (雙精度浮點型,佔8 個字節)
暫時先寫這兩點了,以後有時間在補充。