面试题

    技术2022-05-11  55

    姓名:                      日期: 1.      填空: (1)面向对象的语言具有________性、_________性、________性。

            (2)能用foreach遍历访问的对象需要实现 ________________接口或声明________________方法的类型。

            (3)列举ADO.net中的五个主要对象_______________、_____________、_______________、_______________、_________________。

    2. 不定项选择:

    (1) 以下叙述正确的是:

          A. 接口中可以有虚方法。     B. 一个类可以实现多个接口。       C. 接口不能被实例化。       D. 接口中可以包含已实现的方法。

       (2) 从数据库读取记录,你可能用到的方法有:

          A. ExecuteNonQuery            B. ExecuteScalar

          C. Fill                        D. ExecuteReader

    3. 简述 private、 protected、 public、 internal 修饰符的访问权限。

    4. 写出一条Sql语句: 取出表A中第31到第40记录(SQLServer, 以自动增长的ID作为主键,  注意:ID可能不是连续的。)

    5 .列举ASP.NET 页面之间传递值的几种方式。

    6. 写出程序的输出结果

    class Class1  {        private string str = "Class1.str";        private int i = 0;        static void StringConvert(string str)  {            str = "string being converted.";        }        static void StringConvert(Class1 c)  {            c.str = "string being converted.";        }        static void Add(int i)  {            i++;        }        static void AddWithRef(ref int i)    {            i++;        }        static void Main()  {            int i1 = 10;            int i2 = 20;            string str = "str";            Class1 c = new Class1();            Add(i1);            AddWithRef(ref i2);            Add(c.i);            StringConvert(str);                    StringConvert(c);            Console.WriteLine(i1);            Console.WriteLine(i2);            Console.WriteLine(c.i);            Console.WriteLine(str);            Console.WriteLine(c.str);        }      }

    7.写出程序的输出结果

    public abstract class A  {         public A()         {             Console.WriteLine('A');         }         public virtual void Fun()         {             Console.WriteLine("A.Fun()");         } }

    public class B: A  {         public B()        {             Console.WriteLine('B');         }

            public new void Fun()         {             Console.WriteLine("B.Fun()");         }

            public static void Main()         {            A a = new B();            a.Fun();         } } 8.      写出程序的输出结果: public class A  {         public virtual void Fun1(int i)        {             Console.WriteLine(i);         }

            public void Fun2(A a)          {             a.Fun1(1);             Fun1(5);         } } public class B : A  {         public override void Fun1(int i)           {             base.Fun1 (i + 1);         }

            public static void Main()          {             B b = new B();             A a = new A();             a.Fun2(b);             b.Fun2(a);                  } }

    9. 一列数的规则如下: 1、1、2、3、5、8、13、21、34......

       求第30位数是多少, 用递归算法实现。(C#语言)

    10.  程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)

    要求:  1.要有联动性,老鼠和主人的行为是被动的。

    2.考虑可扩展性,猫的叫声可能引起其他联动效应。

    参考答案: 1. (1)  继承性、封装性、多态性。(考基本概念)    (2)  IEnumerable 、 GetEnumerator (对foreach机制的理解,本来不想出这题的,凑分)    (3)  ... (送分题, 对ADO.net的了解) 评分标准:一空1分,满分10分。

    2. (1) B、C (考对接口的理解)  (2)  B、C、D (考查对ADO.net的熟练程度)   评分标准: 一题5分,不选或者错选均不得分。漏选得2分。满分10分。

    3. . private :   私有成员, 在类的内部才可以访问。      protected : 保护成员,该类内部和继承类中可以访问。      public :    公共成员,完全公开,没有访问限制。      internal:   在同一命名空间内可以访问。 评分标准:答对1题2分,2题5分,3题7分。全对10分。 (送分题)

    4.  解1:  select top 10 * from A where id not in (select top 30 id from A)     解2:  select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)     评分标准: 写对即10分。(答案不唯一,datagrid 分页可能需要用到)   5.  1.使用QueryString,  如....?id=1; response. Redirect()....     2.使用Session变量     3.使用Server.Transfer     ....    评分标准: 答对1点得3分, 两点7分, 3点10分。

    6.  (考查值引用和对象引用) 10 21 0 str string being converted. 评分标准:答对一点得2分,满分10分。

    7.  A     B A.Fun() 评分标准: 写出A.B 得5分,写出A.Fun()得5分,满分10分。 (考查在继承类中构造函数, 以及new 方法, )

    8.  2     5     1     6

    评分标准: 答对一点得2分,两点得5分,3点得7分。全对得10分。

    (一些人做这题,头都晕了.... ^_^ )

    9. 

        public class MainClass     {         public static void Main()           {             Console.WriteLine(Foo(30));         }         public static int Foo(int i)         {             if (i <= 0)                 return 0;             else if(i > 0 && i <= 2)                 return 1;             else return Foo(i -1) + Foo(i - 2);         }     } 评分标准: 写出return Foo(i -1) + Foo(i - 2); 得5分。

     写出if(i > 0 && i <= 2) return 1; 得5分。

               方法参数过多需要扣分(扣除分数 = 参数个数 - 1)

               不用递归算法扣5分

               (递归算法在树结构建立等方面比较常用)

    10          

     要点:1. 联动效果,运行代码只要执行Cat.Cryed()方法。2. 对老鼠和主人进行抽象 评分标准: <1>.构造出Cat、Mouse、Master三个类,并能使程序运行(2分)             <2>从Mouse和Master中提取抽象(5分)             <3>联动效应,只要执行Cat.Cryed()就可以使老鼠逃跑,主人惊醒。(3分)

        public interface Observer     {         void Response();    //观察者的响应,如是老鼠见到猫的反映     }     public interface Subject     {         void AimAt(Observer obs);  //针对哪些观察者,这里指猫的要扑捉的对象---老鼠     }     public class Mouse : Observer     {         private string name;         public Mouse(string name, Subject subj)         {                       this.name = name;             subj.AimAt(this);         }                 public void Response()         {             Console.WriteLine(name + " attempt to escape!");         }     }     public class Master : Observer     {           public Master(Subject subj)         {                       subj.AimAt(this);         }                 public void Response()         {             Console.WriteLine("Host waken!");         }      }       public class Cat : Subject     {         private ArrayList observers;         public Cat()         {               this.observers = new ArrayList();         }         public void AimAt(Observer obs)         {             this.observers.Add(obs);         }         public void Cry()         {             Console.WriteLine("Cat cryed!");             foreach (Observer obs in this.observers)             {                 obs.Response();             }         }     }     class MainClass     {               static void Main(string[] args)         {             Cat cat = new Cat();             Mouse mouse1 = new Mouse("mouse1", cat);             Mouse mouse2 = new Mouse("mouse2", cat);             Master master = new Master(cat);             cat.Cry();         }     } //---------------------------------------------------------------------------------------------

    设计方法二: 使用event -- delegate设计..     public delegate void SubEventHandler();     public abstract class Subject     {         public event SubEventHandler SubEvent;         protected void FireAway()         {             if (this.SubEvent != null)                 this.SubEvent();         }       }     public class Cat : Subject     {          public void Cry()         {             Console.WriteLine("cat cryed.");             this.FireAway();         }     }     public abstract class Observer     {         public Observer(Subject sub)         {             sub.SubEvent += new SubEventHandler(Response);         }         public abstract void Response();        }     public class Mouse : Observer     {         private string name;         public Mouse(string name, Subject sub) : base(sub)         {               this.name = name;         }         public override void Response()         {             Console.WriteLine(name + " attempt to escape!");         }     }     public class Master : Observer     {         public Master(Subject sub) : base(sub){}         public override void Response()         {             Console.WriteLine("host waken");         }     }     class Class1     {         static void Main(string[] args)         {             Cat cat = new Cat();             Mouse mouse1 = new Mouse("mouse1", cat);             Mouse mouse2 = new Mouse("mouse2", cat);             Master master = new Master(cat);             cat.Cry();         }

        }


    最新回复(0)