zoukankan      html  css  js  c++  java
  • 分享一下今天的面试题

    悲催的又要开始找工作了。从今天开始,遇到好的面试题就记下来给大家分享一下。

    今天的收获还是不错的,虽然杯具了,但那公司的面试题目有点意思。其实很多都是基础,抽象类啊,继承重载啊,可是以前都不怎么重视。现在开始,不懂的面试题都要记下来,回来后找解决方法。

    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/

  • 相关阅读:
    ios开发之 -- 自动轮播图创建
    swift开发之 -- 自动轮播图(UIScrollView+UIPageControl+Timer)
    HTML5开发之 -- 模态突出窗(bootstrap)
    ios开发之--UICollectionView的使用
    ios开发之--判断奇偶数
    swift开发之 -- ? 和 ! 的作用
    swift开发之--UISearchBar的使用/UISearchController的使用
    swift开发之--报错:Class "***ViewController" has no initializers
    Android开发相关
    沁园春·雪
  • 原文地址:https://www.cnblogs.com/Gyoung/p/2531483.html
Copyright © 2011-2022 走看看