【總結】.Net面試題集錦(一)


一、背景

最近一直在准備面試,收到的面試邀請郵件里還有面試題,真是要當面霸的節奏,不過看看也好,一方面能夠鍛煉鍛煉生銹的腦子,查缺補漏一下,另一方面,萬一靠這幾個面試題拿到offer呢,哈哈。開個玩笑,拿offer不容易,但是連筆試都過不去的話,那就說不過去了。有些題目是概念題,有些是算法題,過於簡單的大家不要噴,也許就是我們知識體系的一個盲點。下面看看一些比較有意思的面試題吧~

二、題目

1、靜態構造函數

靜態構造函數用於初始化任何靜態數據,或用於執行僅需執行一次的特定操作。在創建第一個實例或引用任何靜態成員之前,將自動調用靜態構造函數。靜態構造函數具有以下特點:

  • · 靜態構造函數既沒有訪問修飾符,也沒有參數。
  • · 在創建第一個實例或引用任何靜態成員之前,將自動調用靜態構造函數來初始化類。
  • · 無法直接調用靜態構造函數。
  • · 在程序中,用戶無法控制何時執行靜態構造函數。
  • · 靜態構造函數的典型用途是:當類使用日志文件時,將使用這種構造函數向日志文件中寫入項。
  • · 靜態構造函數在為非托管代碼創建包裝類時也很有用,此時該構造函數可以調用 LoadLibrary 方法。

2、單例模式 

這個就比較熟悉了,但是還沒有真正在項目中使用到單例模式。所謂單例模式無非就是在該類的整個生命周期只有一個實例在運行。下面是我個人對單例模式的理解:

(1).定義私有全局變量存儲單例;

(2).私有化構造方法,避免外部實例化多個實例;

(3).建立唯一的全局訪問點,用於返回唯一的單例;

(4).為避免多線程創建多個實例,在實例化前加鎖

以下代碼看起來會更直觀:

 1     //單例模式
 2     public class Singleton
 3     {
 4         //一、定義私有全局變量存儲單例
 5         private static Singleton singleton;
 6         private static object lockobj = new object();
 7         //二、私有化構造方法,避免外部實例化多個實例
 8         private Singleton()
 9         {
10         }
11         //三、建立唯一的全局訪問點,用於返回唯一的單例
12         public static Singleton GetInstance()
13         {
14             if (singleton == null)
15             {
16                 lock(lockobj)//避免多線程創建多個實例,雙層攔截判斷提升性能
17                 {
18                     if (singleton == null)
19                     {
20                         singleton = new Singleton();
21                     }
22                 }
23             }
24             return singleton;
25         }
26     }

3、算法:給定坐標P(x,y),(x代表時針,y代表分針),求時針與分針夾角

分析:時鍾一周360度,每大格是30度,每分鍾小格是6度,分針走一格,時針走0.5度,先計算分針度數,再計算時針度數,相減求絕對值(秒針忽略不計),OK

 1         public double Calc(double hour, double minute)
 2         {
 3             double angel = -1;
 4             const double perHour = 30;
 5             const double perMinute = 6;
 6             const double per = 0.5;
 7 
 8             double myHour = hour % 12;
 9             double myMinute = minute;
10 
11             if (hour >= 24 || hour < 0 || minute >= 60 || minute < 0)//驗證數據
12             {
13                 return -1;
14             }
15 
16             angel = Math.Abs(myMinute * perMinute - (myMinute * per + myHour * perHour));
17             angel = (angel < 180) ? angel : (360 - angel);
18             return angel;
19         }

 4、算法:一串包含數字的字符串,求總共有多少個連續的數字。(如qwer123qqq1tt3ttty43,結果是2個)

 既有巧方法,也有笨方法,不過效率才是王道,下面是正則匹配實現:

 1         public static void GetNumbers(string str)
 2         {
 3             Regex regex = new Regex(@"[\d]+");
 4             MatchCollection matches = regex.Matches(str);
 5             int i = 0;
 6             foreach (Match m in matches)
 7             {
 8                 if (m.Value.Length > 1)
 9                 { 
10                     i++; 
11                 }
12                 Console.WriteLine(m.Value);
13             }
14             Console.WriteLine("連續數字{0}個", i);
15             Console.ReadLine();
16         }

 5、Action可以Return哪些類型?

1、ContentResult: 返回簡單的純文本內容,可通過ContentType屬性指定應答文檔類型,通過ContentEncoding屬性指定應答文檔的字符編碼。可通過Controller類中的Content方法便捷地返回ContentResult對象。如果控制器方法返回非ActionResult對象,MVC將簡單地以返回對象的ToString()內容為基礎產生一個ContentResult對象。
2、EmptyResult: 返回一個空的結果。如果控制器方法返回一個null,MVC將其轉換成EmptyResult對象。
3、RedirectResult: 表示一個連接跳轉,相當於ASP.NET中的Response.Redirect方法。對應的Controller方法為Redirect。
4、RedirectToRouteResult:同樣表示一個調轉,MVC會根據我們指定的路由名稱或路由信息(RouteValueDictionary)來生成Url地址,然后調用Response.Redirect跳轉。對應的Controller方法為RedirectToAction和RedirectToRoute。
5、ViewResult: 表示一個視圖結果,它根據視圖模板產生應答內容。對應Controller方法為View。
6、PartialViewResult: 表示一個部分視圖結果,與ViewResult本質上一致,只是部分視圖不支持母版,對應於ASP.NET,ViewResult相當於一個Page,而PartialViewResult則相當於一個UserControl。它對應的Controller方法為PartialView。
7、HttpUnauthorizedResult: 表示一個未經授權訪問的錯誤。MVC會向客戶端發送一個401的應答狀態。如果在web.config中開啟了表單驗證(authentication mode="Forms"),則401狀態會將Url轉向指定的loginUrl鏈接。
8、JavaScriptResult: 本質上是一個文本內容,只是將Response.ContentType設置為 application/x-javascript,此結果應該和MicrosoftMvcAjax.js腳本配合使用,客戶端接收到Ajax應答后,將判斷Response.ContentType的值,如果是application/x-javascript,則直接eval執行返回的應答內容。此結果類型對應的Controller方法為JavaScript。
9、JsonResult: 表示一個JSON結果。MVC將Response.ContentType設置為application/json,並通過JavaScriptSerializer類將指定對象序列化為Json表示方式。需要注意,默認情況下,MVC不允許GET請求返回JSON結果,要解除此限制,在生成JsonResult對象時,將其JsonRequestBehavior屬性設置為JsonRequestBehavior.AllowGet。此結果對應的Controller方法為Json。
10、FilePathResult、FileContentResult、FileStreamResult: 這三個類繼承於FileResult,表示一個文件內容,三者的區別在於,FilePath通過路徑傳送文件到客戶端,FileContent通過二進制數據的方式,而FileStream是通過Stream的方式來傳送。Controller為這三個文件結果類型提供了一個名為File的重載方法。

6、JavaScript中的“=、==、===”區別

=:即賦值運算;

==:判斷兩個變量是否相同,僅限於值,如果值相同而類型不同,那么JavaScript引擎會在內部做類型轉換;

===:判斷兩個變量是否相同,無論是值還是類型,如果類型不同而值相同,也會返回false,而引擎不會在內部進行轉換。

7、JavaScript中的“undefined、null”區別

通俗地講,undefined出現的原因是JavaScript引擎不知道這是個什么東西,而對於null,JavaScript引擎識別了它,但是沒有被分配內存空間。

undefined的類型就是undefined,而null的類型是object。

三、結語

以上就是一些我遇到過的面試題,如果有什么錯誤,希望大神在評論中指出,以免誤人子弟,感謝!當然還有其他的,限於篇幅和難易程度就不一一列舉了,只是把一些知識盲點掃除一下。以后我會把有趣的面試題目更新上。如果你覺得有些知識掌握得還不是很准確,趕快查缺補漏吧~~

還有,在2014年的最后一天,預祝大家元旦快樂!

 作者:湫楓 謃箜

 博客地址:http://www.cnblogs.com/xhb-bky-blog/p/4195149.html                       

 聲明:本博客原創文字只代表本人工作中在某一時間內總結的觀點或結論,與本人所在單位沒有直接利益關系。非商業,未授權貼子請以現狀保留,轉載時必須保留此段聲明,且在文章頁面明顯位置給出原文連接。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM