一、背景
最近一直在准備面試,收到的面試邀請郵件里還有面試題,真是要當面霸的節奏,不過看看也好,一方面能夠鍛煉鍛煉生銹的腦子,查缺補漏一下,另一方面,萬一靠這幾個面試題拿到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
聲明:本博客原創文字只代表本人工作中在某一時間內總結的觀點或結論,與本人所在單位沒有直接利益關系。非商業,未授權貼子請以現狀保留,轉載時必須保留此段聲明,且在文章頁面明顯位置給出原文連接。