閑來無事,整理一下最近參加面試遇到的一些優點意思的面試題。 1. finally與return相關的問題 大家直接看代碼吧 try語句塊內執行return語句後,finally里的語句還會執行嘛?答案是肯定的。 原理可以參考這篇博文,傳送門。 結論是finally中的代碼始終都會執行。 2. 4G的 ...
閑來無事,整理一下最近參加面試遇到的一些優點意思的面試題。
1. finally與return相關的問題
大家直接看代碼吧
using System; namespace TestReturn { public class Program { public static void Main(string[] args) { Console.WriteLine("Hello World!"); TestReturn(); Console.ReadLine(); TestReturn2(); Console.ReadLine(); } private static void TestReturn() { Console.WriteLine("1"); try { Console.WriteLine("2"); return; } catch { Console.WriteLine("3"); } finally { Console.WriteLine("4"); } Console.WriteLine("5"); } private static void TestReturn2() { Console.WriteLine("O1"); try { Console.WriteLine("O2"); throw new Exception(); } catch { Console.WriteLine("O3"); return; } finally { Console.WriteLine("O4"); } Console.WriteLine("O5"); } } }
try語句塊內執行return語句後,finally里的語句還會執行嘛?答案是肯定的。
原理可以參考這篇博文,傳送門。
結論是finally中的代碼始終都會執行。
2. 4G的記憶體怎麼讀取大小為8G的文件?
大致思路是分塊讀,每一部分的大小都小於4g,然後利用yield進行返回。另外,在Linux系統下,還可以使用split方法將大文件拆成小文件去讀。
3. 怎樣判斷一個鏈表是否有環?
最經典的方法就是快慢指針了。思路大概是這樣:從起點開始,分別設置兩個指針,滿指針每次的步長為n,快指針的步長為2n。這樣,如果確實有環存在,那麼必然存在快慢指針再次相遇的時候。如果沒有環,最終結果是快慢指針都的next節點都為空。這樣就可以分辨出是否包含環了。
去面試一下還是有些好處的。平常工作上雖然都能處理了,但是一是眼界被限制住了,二是很難接觸到新的東西,甚至很少會去想一些這樣有意思的問題。同志仍需努力,加油吧.