分享

C#经典笔试题

 CoCO-Ebook 2012-03-27

1. C#中 property 与 attribute的区别,他们各有什么用处,这种机制的好处在哪里?

   property和attribute汉语都称之为属性。不过property是指类向外提供的数据区域。而attribute则是描述对象在编译时或运行时属性的。这两者是有本质区别的。

2. 讲一讲你理解的web service,在dot net framework中,怎么很好的结合xml?

   从表面上看,Web Service就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。这就是说,你能够用编程的方法通过Web调用来实现某个功能的应用程序。从深层次上看,Web Service是一种新的Web应用程序分支,它们是自包含、自描述、模块化的应用,可以在网络(通常为Web)中被描述、发布、查找以及通过Web来调用。可扩展的标记语言XML是Web Service平台中表示数据的基本格式。除了易于建立和易于分析外,XML主要的优点在于它既与平台无关,又与厂商无关。XML是由万维网协会(W3C)创建,W3C制定的XML SchemaXSD定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。Web Service平台是用XSD来作为数据类型系统的。当你用某种语言如VB.NET或C#来构造一个Web Service时,为了符合Web Service标准,所有你使用的数据类型都必须被转换为XSD类型。如想让它使用在不同平台和不同软件的不同组织间传递,还需要用某种东西将它包装起来。这种东西就是一种协议,如 SOAP。

3. C#, Java 和 c++的特点,有什么相同的地方,不同的地方,C#分别从c++和java中吸取了他们那些优点?

4. C#可否对内存进行直接的操作?

5、 维护数据库的完整性、一致性、你喜欢用触发器还是自写业务逻辑?为什么

6、ADO.NET相对于ADO等主要有什么改进?

  ADO以Recordset存储,而ADO.NET则以DataSet表示。Recordset看起来更像单表,如果让Recordset以多表的方式表示就必须在SQL中进行多表连接。反之,DataSet可以是多个表的集合。ADO 的运作是一种在线方式,这意味着不论是浏览或更新数据都必须是实时的。ADO.NET则使用离线方式,在访问数据的时候ADO.NET会利用XML制作数据的一份幅本,ADO.NET的数据库连接也只有在这段时间需要在线。

由于ADO使用COM技术,这就要求所使用的数据类型必须符合COM规范,而ADO.NET基于XML格式,数据类型更为丰富并且不需要再做COM编排导致的数据类型转换,从而提高了整体性能。

 

7、ASP。NET与ASP相比,主要有哪些进步?

8、C#中的委托是什么?事件是不是一种委托?

   委托是一个可以对方法进行引用的类。与其他的类不同,委托类具有一个签名,并且它只能对与其签名匹配的方法进行引用。这样,委托就等效于一个类型安全函数指针或一个回调。事件是一种委托。

9、描述一下C#中索引器的实现过程,是否只能根据数字进行索引?

10、C#中要使一个类支持FOREACH遍历,实现过程怎样?

11、写一个HTML页面,实现以下功能,左键点击页面时显示“您好”,右键点击时显示“禁止右键”。并在2分钟后自动关闭页面。

12、你对XMLHTTP、WEBSERVICE 了解吗?简单描述其特点、作用

13、接口和抽象类有什么区别?你选择使用接口和抽象类的依据是什么?

    接口是一个纯粹的抽象类,没有任何实际的东西,只是定义了一个框架,而抽象类里面可以有实际的一个方法,并不要求所有的方法都是抽象的。可以实现一个接口中的所有方法,也可以继承一个抽象的类,然后覆写其中的方法。接口一般只有方法,而没有数据成员或属性。抽象类有方法,也有数据成员或属性,一般情况下,优先考虑用接口,只有当可能要访问到数据成员或属性时,用抽象类。

14、自定义控件和一般用户控件的异同?如果要用这两者之一,你会选择哪种?为什么

15、大概描述一下ASP。NET服务器控件的生命周期




第一,谈谈final, finally, finalize的区别。

   final 修饰符用于指定类不能扩展或者方法或属性不能重写。它将防止其他类通过重写重要的函数来更改该类的行为。带有 final 修饰符的方法可以由派生类中的方法来隐藏或重载。finally 块用于清除在 try 块中分配的任何资源。控制总是传递给 finally 块,与 try 块的存在方式无关。finalize允许 Object 在“垃圾回收”回收 Object 之前尝试释放资源并执行其他清理操作。

 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。

第四,&和&&的区别。

第五,HashMap和Hashtable的区别。

第六,Collection 和 Collections的区别。

第七,什么时候用assert。

第八,GC是什么? 为什么要有GC?

第九,String s = new String("xyz");创建了几个String Object?

第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

第十一,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

第十二,sleep() 和 wait() 有什么区别?

第十三,Java有没有goto?

第十四,数组有没有length()这个方法? String有没有length()这个方法?

第十五,Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

第十六,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?

第十七,给我一个你最常见到的runtime exception。

第十八,error和exception有什么区别?

第十九,List, Set, Map是否继承自Collection接口?

第二十,abstract class和interface有什么区别?

第二十一,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

第二十二,接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?

第二十三,启动一个线程是用run()还是start()?

第二十四,构造器Constructor是否可被override?

第二十五,是否可以继承String类?

第二十六,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

第二十七,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

第二十八,编程题: 用最有效率的方法算出2乘以8等於几?

第二十九,两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

第三十,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

第三十二,编程题: 写一个Singleton出来。

 

数据库方面:

1.存储过程和函数的区别

2.事务是什么?

3.游标的作用?如何知道游标已经到了最后?

4.触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和行级触发有何区别。

 

1。用C#实现以下功能

   a 产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。

   b 对上面生成的数组排序,需要支持升序、降序两种顺序

2。请说明在.net中常用的几种页面间传递参数的方法,并说出他们的优缺点。

3。请说明.net中的错误处理机制,并举例

4。请说出强名的含义

5。请列出c#中几种循环的方法,并指出他们的不同

6。请指出.net中所有类型的基类

7。请指出GAC的含义

8。SQL SREVER中,向一个表中插入了新数据,如何快捷的得到自增量字段的当前值

 

您在什么情况下会用到虚方法?它与接口有什么不同?

Q:Override与重载有什么区别?

Q:值类型与引用类型有什么区别?

Q:怎样理解静态变量?

Q:向服务器发送请求有几种方式?

Q:DataReader与Dataset有什么区别?

Q:如果在一个B/S结构的系统中需要传递变量值,但是又不能使用Session、Cookie、Application,您有几种方法进行处理?

Q:用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层?

Q:软件开发过程一般有几个阶段?每个阶段的作用?

Q:微软推出了一系列的Application Block,请举出您所知道的Application Block并说明其作用?

Q:请列举一些您用到过的设计模式以及在什么情况下使用该模式?

Q:您对WebService的体会?

Q:您对编程的兴趣如何?工作中遇到不懂的问题是怎样去解决的?您一般怎样去提高自己的编程水平?

Q:您离职的原因是什么?

Q:通过超链接怎样传递中文参数?

Q:请编程遍历页面上所有TextBox控件并给它赋值为string.Empty?

Q:请编程实现一个冒泡排序算法?

 

1、override与重载的区别

2、.net的错误处理机制是什么

3、C#中接口和类的异同

4、DataReader和DataSet的异同

 

1.有哪几种方法可以实现一个类存取另外一个类的成员函数及属性,并请举列来加以说明和分析.

2.如果需记录类的实例个数,该如何实现,请写一个简单的类于以证明.

3.A类是B类的基类,并且都有自己的构造,析构函数,请举例证明B类从实例化到消亡过程中构造,析构函数的执行过程.

4.需要实现对一个字符串的处理,首先将该字符串首尾的空格去掉,如果字符串中间还有连续空格的话,仅保留一个空格,即允许字符串中间有多个空格,但连续的空格数不可超过一个.

 

一.填空题

1.c#中的三元运算符是__?:___?

2.当整数a赋值给一个object对象时,整数a将会被__装箱(封装)___?

3.类成员有_____种可访问形式?  this.;new Class().Method;

4.public static const int A=1;这段代码有错误么?是什么?  const不能用static修饰

5.float f=-123.567F;

  int i=(int)f;

i的值现在是_____?   123 

6.利用operator声明且仅声明了“==”,有什么错误么? 

7.委托声明的关键字是______? delagete

8.用sealed修饰的类有什么特点?密封,不能继承

9.在Asp.net中所有的自定义用户控件都必须继承自________?Control

10.在.Net中所有可序列化的类都被标记为_____? 

11.在.Net托管代码中我们不用担心内存漏洞,这是因为有了______?gc

12.下面的代码中有什么错误吗?_______

     using System;

     class A

     {

          public virtual void F(){

              Console.WriteLine("A.F");

           }

      }

      abstract class B:A

       {

           public abstract override void F(); // new public abstract void F(); 

       }

 

13.当类T只声明了私有实例构造函数时,则在T的程序文本外部,___可以___(可以 or 不可以)从T派生出新的类,不可以____(可以 or 不可以)直接创建T的任何实例。

14.下面这段代码有错误么?

    switch (i){

    case():

        CaseZero();

        break;

    case 1:

        CaseOne();

        break;

    case 2:

        dufault;  //wrong

        CaseTwo();

        break;

   }

15.在.Net中,类System.Web.UI.Page 可以被继承么?可以

 

二.简答题

1.在c#中using和new这两个关键字有什么意义,请写出你所知道的意义?using 指令 和语句 new 创建实例 new 隐藏基类中方法

4.谈谈类和结构的区别?类是引用类型、结构是值类型

5.一个长度为10000的字符串,通过随机从a-z中抽取10000个字符组成。请用c#语言编写主要程序来实现。

6.对于这样的一个枚举类型:

      enum Color:byte{

          Red,

          Green,

          Blue,

          Orange

       }

     string[] ss=Enum.GetNames(typeof(Color));

     byte[]   bb=Enum.GetValues(typeof(Color));

试写一段程序显示出枚举类型中定义的所有符号名称以及它们对应的数值。

7.您了解设计模式么?请列出您所知道的设计模式的名称。 //

8.请在SQL Server中设计表来保存一个树状结构的组织结构图(假设结构图中只有名称这一项内容需要保存),如果我想查询某一职位下的所有职位,用一个存储过程来实现,你有什么思路?

9.什么叫做SQL注入,如何防止?请举例说明。

10.下面这段代码输出什么?为什么?

     int i=5;

     int j=5;

     if (Object.ReferenceEquals(i,j))

          Console.WriteLine("Equal");

     else

          Console.WriteLine("Not Equal");

//不相等,因为比较的是对象

 

1.写一个实现对一段字符串翻转的方法,附加一些条件,如其中包括“,”、“.”,对其设计测试用 例 。

2.对一支纸杯设计测试用例(可以是广义的杯,不一定是某一支特定功能的杯)

开发语言概念题

3.什么是反射?

4.用Singleton如何写设计模式

5.C#中的垃圾回收机制是怎样的?

6.什么是Application Pool?

7.链表和数组的区别,各有什么优缺点.

8.Remoting在客户端服务器怎么实现 ?

9.什么是友元函数?

10.用标准C如何实现多态?

11.什么是虚函数?

12.什么是抽象函数?

13.什么是内存泄漏,怎样最简单的方法判断被存泄漏 ?

 

英语题

14.用英文介绍一下使用C#/C++做的项目,主要功能

15.如果要与美国开电话会议,会如何与美国的工程师沟通

16.如果老板认为你的技术落后,你会怎么回答  

数据库知识题

17.使用什么工具来调用存储过程

18.SQL Server的两种索引是何形式?索引的作用?索引的优缺点?

19.触发器的作用  

其它知识题及问题

20.什么是Web Service?

21.什么是XML?

22.Socket怎么实现?

 

 

 

 

 (1)面向对象的语言具有________性、_________性、________性。

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

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

 (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分。
3题是让写五个,但是你填的时候写10个把,我就写着六个
sqlconnection sqlcommand sqladapter dataset datatable dataview等等

2. (1) B、C (考对接口的理解) (2) B、C、D (考查对ADO.net的熟练程度)
多选择题看好我就少选择一个来气呢还~·····
 评分标准: 一题5分,不选或者错选均不得分。漏选得2分。满分10分。
3. . private :  私有成员, 在类的内部才可以访问。
   protected : 保护成员,该类内部和继承类中可以访问。
   public :  公共成员,完全公开,没有访问限制。
   internal:  在同一命名空间内可以访问。
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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多