悲催的又要開始找工作了。從今天開始,遇到好的面試題就記下來給大家分享一下。
今天的收獲還是不錯的,雖然杯具了,但那公司的面試題目有點意思。其實很多都是基礎,抽象類啊,繼承重載啊,可是以前都不怎么重視。現在開始,不懂的面試題都要記下來,回來后找解決方法。
1 題目要求差不多是這樣:完成下面的方法,要求返回一個驗證碼,並且不能同時存在容易混淆的0和Q。每個字母取得的概率要相同。
他先給出了一部分代碼:
/// <summary> /// 生成一個隨機驗證碼,並且不能同時出現容易混淆的0和O /// </summary> /// <param name="count"></param> /// <returns></returns> private static string CreateCode(int count) { string code = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"; string[] keyCode = code.Split(','); string validateCode = string.Empty; Random rand = new Random(); #region 在這里完善你的代碼 //... #endregion return validateCode; }
只給五分鍾時間,NND,當時一直在想着怎么用while循環。其實正確的應該是do..while循環。下面是回來后自己加的代碼:
#region 在這里完善你的代碼 do { validateCode = string.Empty; for (int i = 0; i < count; i++) { string s = keyCode[rand.Next(0, 35)]; validateCode += s; } } while ((validateCode.Contains("0") && validateCode.Contains("O"))); #endregion
2 一個選擇題,寫了一個類:
public class ClassA { public static int Count = 0; static ClassA() { Count++; } public ClassA() { Count++; } }
然后求下面代碼的輸出結果:
ClassA A1 = new ClassA(); ClassA A2 = new ClassA(); Console.WriteLine(ClassA.Count);
當時選的是1,回來后自己上機驗證了一個是3!因為靜態構造函數是屬於類的,而不屬於任何一個實例,所以這個構造函數只會被執行一次,而且是在創建此類的第一個實例或引用任何靜態成員之前,由.NET自動調用。
3 也是一個選擇題。主要是考override與new的區別,題目大概如下:
abstract public class BaseClass { public virtual void print() { Console.WriteLine("From BaseClass"); } } public class class1 : BaseClass { public override void print() { Console.WriteLine("From Class1"); } } public class class2 : BaseClass { public new void print() { Console.WriteLine("From Class2"); } }
然后求執行下面代碼后的輸出結果:
BaseClass ct2 = new class2(); ct2.print();
答案會是:From BaseClass.因為new關鍵字只是隱藏了Class2中BaseClass的print()方法,並沒有改變BaseClass中的Print()方法。
而BaseClass ct2 = new class2() 實例化的是BaseClass.
但如果調用的是:
ClassA A1 = new ClassA(); ct1.print();
輸出會是:From Class1。因為override關鍵字在Class1中將BaseClass中的Print()方法進行了重寫。
4 數據庫題目。用一個update方法更新兩個條件不同的記錄。大意是這樣的:修改Product表,將Price大於1000的產品的Price提高5%,將Price小於1000的產品的Price提高10%,要求只用一個update。
當時沒有想到用case..when語句,好吧,一切都太遲了。
update Product set UnitPrice=(case when (UnitPrice>1000) then UnitPrice*1.05 when (UnitPrice<1000) then UnitPrice*1.1 else UnitPrice end)
5 求輸出結果
class Program { static void Main(string[] args) { A a = new C(); a.Write(); Console.Read(); } } public class A { public int i; public A() { i++; } public virtual void Write() { } } public class B : A { public B() { i++; } } public class C : B { public C() { i++; } public override void Write() { Console.WriteLine(i); } }
答案:3
6 求輸出結果
int a = 5; int b = a++; Console.WriteLine(b); int c = ++a; Console.WriteLine(c);
答案: 5,7
6 求輸出結果
class Program { delegate void MyDelete(string a); static void Main(string[] args) { MyDelete a = new MyDelete(SayHello); MyDelete b = new MyDelete(SayGoobye); a("A"); b("B"); MyDelete c = a + b; c("C"); MyDelete d = c - b; d("D"); Console.Read(); } static void SayHello(string s) { Console.WriteLine("Hello {0}", s); } static void SayGoobye(string s) { Console.WriteLine("Goobye {0}", s); } }
答案:Hello A
Goobye B
Hello C
Goobye C
Hello D
7 接口與抽象類的區別