最近一直在面試,每次面試前也不怎么準備,雖說碰到的題大部分都很簡單的,但是在現場答題的時候由于自己緊張腦子就空了,一些題答的不是很好,所以只有每次回來的時候才能好好想想怎么答;
題大部分還是挺簡單的,就先記錄幾個腦子里記住的
一、創建一個長度為100的數組,隨機插入1-100不重復的數字。這道題剛一上來就覺得應該是這樣的,當時也是這樣寫的:
static int[] Fun(){ int[] arr = new int[100]; int index = 0; Random ran = new Random(); while (index < 100) { int temp = ran.Next(1, 101); if (!arr.Contains(temp)) arr[index++] = temp; } return arr;}后來回家想想,這樣寫不是很好,因為每次隨機出一個數后,判斷數組是否包含這個,不包含的話才插入數組。這樣的話隨著數組中包含的數字越來越多,要判斷的次數也會越來越多。改一下吧:
static int[] Fun(int begin, int len){ ICollection<int> oldArr = new List<int>(); for (int i = begin; i <= len; i++) { oldArr.Add(i); } int[] newArr = new int[len - begin + 1]; Random ran = new Random(); int index = 0; while (oldArr.Count() > 0) { int temp = oldArr.ElementAt(ran.Next(0, oldArr.Count())); newArr[index++] = temp; oldArr.Remove(temp); } return newArr;}先生成一個指定范圍的集合,隨機取集合的下標加到數組里,再刪除集合里的元素。這樣不用那么多判斷,遍歷兩次就行了。
二、1-2+3-4+5。。。+m 求這個表達式的結果,用多種思路
筆試的時候只寫出了這種,當時腦子一片空白,遞歸的死活都不知道怎么寫。
static int Fun2(int Num){ int i = 1; int result = 1; while (Num > i) { if (i % 2 == 0) result += ++i; else result -= ++i; } return result;}回家想想我怎么當時那么蠢,這么簡單的遞歸都沒寫出來。。
static int Fun(int Num){ if (Num == 1) return 1; if (Num % 2 == 0) return Fun(Num - 1) - Num; else return Fun(Num - 1) + Num;}三、下面的類B 在實例化是,會打印出什么結果?
class A{ public A() { Display(); } public virtual void Display(){}}class B : A{ int x = 1; int y; public B() { y = 2; } public override void Display() { Console.Write(string.Format("x={0},y={1}", x, y)); }}結果是 x=1,y=0;類在實例化時會先調用父類構造函數,也就是說,先調用最頂端的父類的構造函數,然后是依次調用子類構造函數;在這道題中是先執行A的構造函數。A的構造函數調用Display方法,因為此方法被子類重寫,所以調用的重寫后的。此時X=1,由于還沒調用B的構造函數所以Y的值是分配棧空間時默認的0。所以最終的結果是x=1,y=0
筆試時碰到的題很多,大部分都是網上被轉發爛的,公司自己出題的很少。今天先記錄這三道題,以后想起來了再繼續;
新聞熱點
疑難解答