分享一下今天的面試題


悲催的又要開始找工作了。從今天開始,遇到好的面試題就記下來給大家分享一下。

今天的收獲還是不錯的,雖然杯具了,但那公司的面試題目有點意思。其實很多都是基礎,抽象類啊,繼承重載啊,可是以前都不怎么重視。現在開始,不懂的面試題都要記下來,回來后找解決方法。

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 接口與抽象類的區別

http://kb.cnblogs.com/page/42159/


免責聲明!

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



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