代码改变世界

【转载】.NET面试题

2010-03-07 21:40  Virus-BeautyCode  阅读(1608)  评论(0编辑  收藏  举报

原文地址:经典推荐--.Net面试法宝(面试题收集)

 

 

.net笔试题


姓名:                      日期:

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();
        }

    }


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

2. 讲一讲你理解的web service,dot net framework中,怎么很好的结合xml?(讲概念就行了)

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

4. C#可否对内存进行直接的操作?(这可是个难点哦?要注意!)

5. Visual C++ 6.0编写的代码(unmanaged code),如何在CLR下和其他dot net component结合?

6. 以前作过的一些项目?介绍一下自己的编程经验。(这是蒙混不过去的,基本一问就知道是真是假)

7. 你对公司有什么期望?你的薪水期望值?为什么学计算机?以前的工作经验(这非常重要)?

 

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

Q4ADONET相对于ADO等主要有什么改进?

Q5ASPNETASP相比,主要有哪些进步?

Q6C#中的委托是什么?事件是不是一种委托?

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

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

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

Q11:你对XMLHTTPWEBSERVICE 了解吗?简单描述其特点、作用

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

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

Q14:大概描述一下ASPNET服务器控件的生命周期

Q15UML

Q16:面向对象的概念,主要特点

Q17:类划分的依据。类粒度问题

Q18:事物管理问题

 

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

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

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

第四,&&&的区别。

第五,HashMapHashtable的区别。

第六,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()这个方法?

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

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

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

第十八,errorexception有什么区别?

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

第二十,abstract classinterface有什么区别?

第二十一,abstractmethod是否可同时是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的含义

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

 

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

QOverride与重载有什么区别?

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

Q:怎样理解静态变量?

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

QDataReaderDataset有什么区别?

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

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

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

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

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

Q:您对WebService的体会?

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

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

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

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

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

 

1override与重载的区别

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

3C#中接口和类的异同

4DataReaderDataSet的异同

 

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#usingnew这两个关键字有什么意义,请写出你所知道的意义?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怎么实现?

 

 

原文地址:【.NET面试题】C#系列2

 

【.NET面试题】C#系列2 (转载)
2008-07-13 11:23

 

值类型和引用类型的区别?
答:基于值类型的变量直接包含值。将一个值类型变量赋给另一个值类型变量时,将复制包含的值。这与引用类型变量的赋值不同,引用类型变量的赋值只复制对对象的引用,而不复制对象本身。所有的值类型均隐式派生自 System.ValueType。与引用类型不同,从值类型不可能派生出新的类型。但与引用类型相同的是,结构也可以实现接口。与引用类型不同,值类型不可能包含 null 值。然而,可空类型功能允许将 null 赋给值类型。 每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。
值类型主要由两类组成:结构、枚举
结构分为以下几类:Numeric(数值)类型、整型、浮点型、decimal、bool、用户定义的结构。
引用类型的变量又称为对象,可存储对实际数据的引用。声明引用类型的关键字:class、interface、delegate、内置引用类型: object、string
如何理解委托
答:委托类似于 C++ 函数指针,但它是类型安全的。委托允许将方法作为参数进行传递。委托可用于定义回调方法。委托可以链接在一起;例如,可以对一个事件调用多个方法。方法不需要与委托签名精确匹配。有关更多信息,请参见协变和逆变。C# 2.0 版引入了匿名方法的概念,此类方法允许将代码块作为参数传递,以代替单独定义的方法。
C#中的接口和类有什么异同。
答:异:不能直接实例化接口。接口不包含方法的实现。接口、类和结构可从多个接口继承。但是C# 只支持单继承:类只能从一个基类继承实现。类定义可在不同的源文件之间进行拆分。
同:接口、类和结构可从多个接口继承。接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。接口可以包含事件、索引器、方法和属性。一个类可以实现多个接口。
ASP.net的身份验证方式有哪些
答:Windows 身份验证提供程序:
提供有关如何将 Windows 身份验证与 Microsoft Internet 信息服务 (IIS) 身份验证结合使用来确保 ASP.NET 应用程序安全的信息。
Forms 身份验证提供程序:
提供有关如何使用您自己的代码创建应用程序特定的登录窗体并执行身份验证的信息。使用 Forms 身份验证的一种简便方法是使用 ASP.NET 成员资格和 ASP.NET 登录控件,它们一起提供了一种只需少量或无需代码就可以收集、验证和管理用户凭据的方法。
Passport 身份验证提供程序:
提供有关由 Microsoft 提供的集中身份验证服务的信息,该服务为成员站点提供单一登录和核心配置
活动目录的作用
答:Active Directory存储了有关网络对象的信息,并且让管理员和用户能够轻松地查找和使用这些信息。Active Directory使用了一种结构化的数据存储方式,并以此作为基础对目录信息进行合乎逻辑的分层组织。
解释一下UDDI、WSDL的意义及其作用
答:UDDI:统一描述、发现和集成协议(UDDI, Universa Description, Discovery and Integration)是一套基于Web的、分布式的、为Web服务提供的信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web服务注册以使得别的企业能够发现的访问协议的实现标准。UDDI 提供了一组基于标准的规范用于描述和发现服务,还提供了一组基于因特网的实现。
WSDL:WSDL描述Web服务的公共接口。这是一个基于XML的关于如何与Web服务通讯和使用的服务描述;
服务 URL 和命名空间 :
网络服务的类型(可能还包括 SOAP 的函数调用,正像我所说过的,WSDL 足够自如地去描述网络服务的广泛内容)。
有效函数列表,每个函数的参数,每个参数的类型 ,每个函数的返回值及其数据类型。什么是SOAP
答:SOAP(Simpe Object Access Protoco )简单对象访问协议是在分散或分布式的环境中交换信息并执行远程过程调用的协议,是一个基于XML的协议。使用SOAP,不用考虑任何特定的传输协议(最常用的还是HTTP协议),可以允许任何类型的对象或代码,在任何平台上,以任何一直语言相互通信。
SOAP 是一种轻量级协议,用于在分散型、分布式环境中交换结构化信息。 SOAP 利用 XML 技术定义一种可扩展的消息处理框架,它提供了一种可通过多种底层协议进行交换的消息结构。这种框架的设计思想是要独立于任何一种特定的编程模型和其他特定实现的语义。
SOAP 定义了一种方法以便将 XML 消息从 A 点传送到 B 点。为此,它提供了一种基于 XML且具有以下特性的消息处理框架:1) 可扩展,2) 可通过多种底层网络协议使用,3) 独立于编程模型。
如何部署一个ASP.net页面
答:VS 2005和VS 2003都有发布机制。2003可以发布然后再复制部署。VS2005基本上可以直接部署到对应位置。
如何理解.net中的垃圾回收机制
答:.NET Framework 的垃圾回收器管理应用程序的内存分配和释放。每次您使用 new 运算符创建对象时,运行库都从托管堆为该对象分配内存。只要托管堆中有地址空间可用,运行库就会继续为新对象分配空间。但是,内存不是无限大的。最终,垃圾回收器必须执行回收以释放一些内存。垃圾回收器优化引擎根据正在进行的分配情况确定执行回收的最佳时间。当垃圾回收器执行回收时,它检查托管堆中不再被应用程序使用的对象并执行必要的操作来回收它们占用的内存
概述.NET中的GC机制。
答:GC的全称是garbage collection,中文名称垃圾回收,是.NET中对内存管理的一种功能。垃圾回收器跟踪并回收托管内存中分配的对象,定期执行垃圾回收以回收分配给没有有效引用的对象的内存。当使用可用内存不能满足内存请求时,GC会自动进行。
在进行垃圾回收时,垃圾回收器会首先搜索内存中的托管对象,然后从托管代码中搜索被引用的对象并标记为有效,接着释放没有被标记为有效的对象并收回内存,最后整理内存将有效对象挪动到一起
ASP.NET中常见内置对象?
答:Response、Request、Server、Session、Application、Cookie
死锁的必要条件?怎么克服?
答:系统的资源不足,进程的推进的顺序不合适,资源分配不当,一个资源每次只能被一个进程使用,一个资源请求资源时,而此时这个资源已阻塞,对已获得资源不放,进程获得资源时,未使用完前,不能强行剥夺。
接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承实体类?
答:接口是可以继承接口的,抽象类是可以实现接口的,抽象类可以继承实体类,但是有个条件,条件是,实体类必须要有明确的构造函数。
构造器Constructor是否可以被继承?是否可以被Override?
答:Constructor不可以被继承,因此不能被重写(Overriding),但可以被重载(Overloading).
是否可以继承String类?
答:因为String类是final类所以不可以继承string类。
当一个线程进入一个对象的方法后,其它线程是否可以进入该对象的方法?
答:不可以,一个对象的方法只能由一个线程访问。
用最有效的方法算出2乘以8等于几?
答:2<<3.
C#是否可以对内存直接进行操作?
答:C#是可以对内存进行直接操作的,虽然很少用到指针,但是C#是可以使用指针的,在用的时候需要在前边加unsafe,,在.net中使用了垃圾回收机制(GC)功能,它替代了程序员,不过在C#中不可以直接使用finalize方法,而是在析构函数中调用基类的finalize()方法。
数组有没有Length()这和方法?string有没有这个方法?
答:数组中没有这个方法,但有这个属性,string中有这个方法。
Error和Exception有是区别?
答:error表示恢复不是不可能,但是很困难,exception表示一种实际或实现问题,它表示程序运行正常不可以发生的。
HashMap和Hashtable区别?
答:HashMap是Hashtable的轻量级实现,非线程安全的实现他们都实现了map接口,主要区别是HashMap键值可以为空null,效率可以高于Hashtable。
Collection和Collections的区别?
答:Collection是集合类的上级接口,Collections是针对集合类的一个帮助类,它提供一系列静态方法来实现对各种集合的搜索,排序,线程安全化操作。
Override, Overload,的区别?
答:Override是重写的意思,它表示重写基类的方法,而且方法的名称,返回类型,参数类型,参数个数要与基类相同。
Overload是重载是意思,它也表示重写基类的方法,但是只要方法名相同,别的可以不同。
在一个BS结构中需要传递变量值时,不能使用session,cookie,application,你有几中方法?
答:this.server.Transfer,Querystring.
C#种索引器实现过程,是否只能根据数字索引?
答:不是的,可以是任意类型。
Const和ReadOnly?
答:Const用来申明编程时申明常量,ReadOnly用来申明运行时常量。
UDP和TCP连接有和异同?
答:TCP是传输控制协议,提供的是面向连接的,是可靠的,字节流服务,当用户和服务器彼此进行数据交互的时候,必须在他们数据交互前要进行TCP连接之后才能传输数据。TCP提供超时重拨,检验数据功能。
UDP是用户数据报协议,是一个简单的面向数据报的传输协议,是不可靠的连接。
进程和线程分别该怎么理解?
答:进程是比线程大的程序运行单元,都是由操作系统所体会的系统运行单元,一个程序中至少要有一个进程,有一个进程中,至少要有一个线程,线程的划分尺度要比进程要小,进程拥有独立的内存单元,线程是共享内存,从而极大的提高了程序的运行效率同一个进程中的多个线程可以并发执行。
在.NET中所有类的基类是?
答:object。
能用foreach遍历访问的对象需要实现?
答:需要实现IEnumerable接口和GetEnumerator ()方法。
Heap与stack的差别?
答:Heap是堆,空间是由手动操作分配和释放的,它的存储区很大的自由存储区。
Stack是栈,是由是操作系统自动分配和释放的,栈上的空间是有限的。程序在编译期间变量和函数分配内存都是在栈上进行的,且在运行时函数调用时的参数的传递也是在栈上进行的。
请编程遍历页面上所有TextBox控件并给它赋值为string.Empty?
答:foreach (System.Windows.Forms.Control control in this.Controls)
{
if (control is System.Windows.Forms.TextBox)
{
System.Windows.Forms.TextBox tb = (System.Windows.Forms.TextBox)control ; tb.Text = String.Empty ;
}
}

 

原文地址:【.NET面试题】.NET牛人应该知道些什么?

 

【.NET面试题】.NET牛人应该知道些什么?
2008-07-13 11:32

 

.NET牛人应该知道些什么?

A、任何一个使用.NET的人

1、描述线程与进程的区别?
2、什么是Windows服务,它的生命周期与标准的EXE程序有什么不同 ?
3、Windows上的单个进程所能访问的最大内存量是多少?它与系统的最大虚拟内存一样吗?这对于系统设计有什么影响?
4、EXE和DLL之间的区别是什么?
5、什么是强类型,什么是弱类型?哪种更好些?为什么?
6、PID是什么?在做系统的故障排除时如何使用它?
7、单个TCP/IP端口上能够侦听多少个进程?
8、什么是GAC?它解决了什么问题?

B、中级.NET开发人员

1、阐述面向接口、面向对象、面向方面编程的区别
2、什么是Interface?它与Class有什么区别?
3、什么是反射?
4、使用ASMX的XML Web服务与使用SOAP的.NET Remoting的区别?
5、类型系统是由XMLSchema表示的吗?CLS是XMLSchema表示的吗?
6、从概念上阐述前期绑定(early-binding)和后期绑定(late-binding)的区别?
7、调用Assembly.Load算静态引用还是动态引用?
8、何时使用Assembly.LoadFrom?何时使用Assembly.LoadFile?
9、什么叫Assembly Qualified Name?它是一个文件名吗?它有什么不同? Assembly.Load("foo.dll"); 这句话是否正确?
10、做强签名的assembly与不做强签名的assembly有什么不同?
11、DateTime是否可以为null?
12、什么叫JIT?什么是NGEN?它们分别有什么限制和好处?
13、.NET CLR中一代的垃圾收集器是如何管理对象的生命周期的?什么叫非确定性终结? Finalize()和Dispose()之间的区别?
14、using() 语法有用吗?什么是IDisposable?它是如何实现确定性终结的。
15、tasklist /m "mscor*" 这句命令是干嘛的?
16、in-proc和out-of-proc的区别 .NET里的哪一项技术能够实现out-of-proc通讯?
17、当你在ASP.NET中运行一个组件时,它在Windows XP, Windows 2000, Windows 2003上分别跑在哪个进程里面?

C、高级开发人员/架构师

1、DateTime.Parse(myString); 这行代码有什么问题?
2、PDB是什么东西? 在调试中它应该放在哪里?
3、什么叫圈复杂度(cyclomatic complexity)?为什么它很重要?
4、写一个标准的lock(),在访问变量的前后创建临界区,要有"双重检查", 什么叫FullTrust?放入GAC的assembly是否是FullTrust的?
代码加上需要安全权限的特性有什么好处?
5、gacutil /l ¦ find /i "Corillian" 这句命令的作用是什么? sn -t foo.dll 这句命令是干嘛的?
6、DCOM需要防火墙打开哪些端口?端口135是干嘛用的?
7、对比OOP和SOA,它们的目的分别是什么?
8、XmlSerializer是如何工作的?使用这个类的进程需要什么ACL权限?
9、为什么不提倡catch(Exception)? Debug.Write和Trace.Write有什么不同?何时应该使用哪一个? Debug Build和Release Build的区别,是否会有明显的速度变化?请说明理由。
10、JIT是以assembly为单位发生还是以方法为单位发生?这对于工作区有何影响?
11、对比抽象基类和接口的使用 a.Equals(b)和a == b一样吗? 在对象比较中,对象一致和对象相等分别是指什么? 12、在.NET中如何实现深拷贝(deep copy)? 请解释一下IClonable 什么叫装箱?
string是值类型还是引用类型?
13、XmlSerializer使用的针对属性的模式有什么好处?解决了什么问题?
14、为什么不应该在.NET中使用out参数?它究竟好不好? 特性能够放到某个方法的参数上?如果可以,这有什么用?

D、C# 组件开发人员

1、什么时候使用override?什么时候使用new? 什么叫shadowing?
2、解释virtual、sealed、override和abstract的区别 Foo.Bar, Version=2.0.205.0, Culture=neutral, PublicKeyToken=593777ae2d274679d 解释这个字符串每个部分的重要性和作用
3、解释public、protected、private和internal的区别 使用Primary Interop Assembly (PIA)有什么好处?
4、NUnit是通过什么机制获知需要测试哪些方法的? 5、catch(Exception e){throw e;}和catch(Exception e){throw;}的区别
6、typeof(foo)和myFoo.GetType()的区别?
7、public class c{ public c(string a) : this() {;}; public c() {;} } 解释第一个构造函数中发生了什么? 这个构造函数有什么用? 8、this是干嘛用的?能够用在static方法中?


E、ASP.NET (UI)开发人员

1、阐述一个基于浏览器的Form POST如何变成一个服务器端的事件,如Button1_OnClick。
2、什么是PostBack? 什么是ViewState? 它是否被编码过? 是否被加密过?谁会使用ViewState?
3、 <machinekey>元素是干嘛用的?它用于哪两项ASP.NET技术?
4、说出ASP.NET 1.1中的3种Session State提供程序以及它们的优缺点?
5、什么叫Web Gardening? 在设计中如何使用它? 假设有一个ASP.NET应用程序,那么单独一个进程中允许多少应用程序对象?那两个进程呢?启用了Web Gardening的2个进程呢?这对设计有何影响?
6、ASP.NET会重用多个请求之间的线程吗?是否每个HttpRequest都有自己的线程?
7、你是否应该用ASP.NET的Thread Local存储? [ThreadStatic]属性在ASP.NET中有用吗?它有没有副作用?是好是坏?
8、如何使用HttpHandler简化现有的为.aspx页面提供验证图片的设计 HttpModule订阅的是什么类型的事件? 这对于实现有何影响?如果不打算重新编译ASP.NE应用程序,应该怎么做?
9、说出表示任意一个终端(URL)的方式,以及ASP.NET中把请求路由到那个终点的方式 解释cookie的工作原理。给出一个滥用Cookie的例子。 10、解释HttpRequest.ValidateInput()的重要性? 哪些数据是通过HTTP Header传递的? 对比HTTP动词GET和POST?
11、什么是HEAD? 说出至少6个HTTP状态码以及它们的含义
12、if-not-modified-since的工作原理是什么? 用ASP.NET如何实现它?
13、解释 <@OutputCache%>和如何使用VaryByParam、VaryByHeader. VaryByCustom是如何工作的?
14、如何通过q=? (除了q=5)来实现ASP.NET HTML输出缓冲和缓冲过期(比如http://localhost/page.aspx?q=5)?

F、XML开发人员

1、XML命名空间的作用? 何时适合使用DOM?何时不适合?有没有尺度限制? 什么是WS-I基本配置?它重要在哪里? 写一个小XML文档,其中使用的是默认的命名空间,以及一个合法的(前缀)命名空间,其中要有分别属性这两个命名空间的元素 元素和特性的基本区别在哪里? 格式完好的XML和有效的XML有什么区别?
2、.NET中如何验证XML?
3、myXmlDocument.SelectNodes("//mynode"); 为什么这句代码不好?什么时候它是好的?
4、拉式解析(XmlReader)与事件读取器(Sax)的区别 XPathDocument和XmlDocument的区别? 在何种情况下应该用哪一个?
5、“XML片断”与“XML文档”有什么区别 什么叫格式规范的XML?
6、XML InfoSet规范与Xml DOM有什么不同? InfoSet是要解决什么问题? 比较DTD和XSD,它们的相似点与区别分别是什么?哪个更好些?为什么?
7、System.Xml支持DTD吗?如果支持,如何使用? XML Schema能够表示为对象图?对象图能够表示为XML Schema?

 

原文地址:t_sql中的COUNT函数

 

1 count函数的定义

count函数的定义可见MSDN。定义如下:

COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } )
那么COUNT 有两种使用方式COUNT(expression)和COUNT(*),它返回一个对一个表按某列计数的值。
  • COUNT(*)返回表的行数。它不会过滤null和重复的行。
  • COUNT(expression)会过滤掉null值,所以值null行不会加入到计数当中,但如果不在expression前面加上distinct关键字,它是会过滤掉重复行的。
以此可以得出一个结论:count(*)返回值总是大于或等于count(expression)的返回值。
在应用中,好多人喜欢使用COUNT(1),这里面的1其实就是一个expression,因为你的表中没有列名为1的列,那么它的返回结果是和COUNT(*)一模一样的,
个人觉得效率也是没有差别的。
;WITH cte1(c1,c2, Description) AS(
    SELECT 1, 1, 'This is a fox' UNION ALL
    SELECT 2, NULL, 'Firefox' UNION All
    SELECT NULL, 2, 'People consider foxes as clever but sly animals' UNION All
    SELECT NULL, NULL, NULL UNION ALL
    SELECT 3, NULL, 'This is me' UNION ALL
    SELECT 3, 3, 'Fox on the run')

结果如下:

result1

如结果所示,COUNT(*),COUNT(2)和COUNT(3)是一模一样的。而COUNT(c1)显然过滤掉了NULL值。

注意,COUNT 的参数expression可以为常量(像上面的2,3…),表的列,函数,还可以是语句,具体可见MSDN的定义。下面展示了这个应用。

如果想为cte1中列Description中有字符串'fox’进行计数,典型的做法是:

SELECT COUNT(*) FROM cte1
WHERE PATINDEX('%fox%',cte1.Description) <> 0

这种做法是where中过滤,另外一种方式是在expression中定义查找条件:

SELECT COUNT(NULLIF(PATINDEX('%fox%', cte1.Description), 0))
FROM cte1

如果description列中没有字符串'fox'那么PATINDEX函数返回的是0,NULLIF函数因为两个参数相等,那么结果是NULL,因为NULL不会参与计数,所以列中没有'fox’的行不会

参与计数,达到了查找的目的。

当然,我们还可在expression中使用case表达式:

SELECT COUNT(CASE 
    WHEN PATINDEX('%fox%',cte1.Description) <> 0 THEN 1
    ELSE <STRONG>NULL</STRONG> END)
FROM cte1

注意ELSE语句后面必须是NULL,如果是非NULL,ELSE语句也会参与COUNT计数的。

2 在count函数后接聚合窗口函数OVER。注意聚合窗口函数中是不能有ORDER BY,ORDER BY只能出现在排名函数的over子句中。OVER字句的定义见MSDN

SELECT c.*, COUNT(*) OVER(PARTITION BY c.c1) 'c1 * count',
        COUNT(c1) OVER(PARTITION BY c.c1) 'c1 c1 count',
    COUNT(*) OVER(PARTITION BY c.c2) 'c2 count',
    COUNT(CASE
        WHEN LEFT(c.Description, 1) IN ('T') THEN 1
        ELSE NULL END) OVER(PARTITION BY LEFT(c.Description, 1)) 'start with T',
    COUNT(CASE
        WHEN LEFT(c.Description, 1) IN ('T', 'F', 'P') THEN 1
        ELSE NULL END) OVER(PARTITION BY LEFT(c.Description, 1)) 'start with T, F OR P'
FROM cte1 c
注意OVER字句不能为OVER(PARTITION BY c.c1 ORDER BY c.c1),这是因为count不是排名函数。
以上的运行结果为:
<A href="http://images.cnblogs.com/cnblogs_com/fgynew/WindowsLiveWriter/t_sqlcount_11359/result333_4.png"><IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=result333 border=0 alt=result333 src="http://images.cnblogs.com/cnblogs_com/fgynew/WindowsLiveWriter/t_sqlcount_11359/result333_thumb_1.png" width=804 height=183></A>

 

可以看出,在使用OVER子句时候,COUNT还是遵循了最基本的准则,COUNT(*)会对null行计数,而COUNT(expression)则不会。

以上在COUNT 的expression中设置条件显然不是一种很优化的方式,因为这种方式会首先读取表中的所有数据,是对表进行扫描,而在where子句中设置条件进行过滤是一种很好的方式。因为从逻辑上讲,where先于select执行,所有数据库引擎只会读取部分数据,不是读取所有数据。如果要对以表中c1列的null进行统计,可以有两种方式:

SELECT COUNT(*)
FROM cte1
WHERE c1 IS NULL

或者:

SELECT COUNT(CASE
    WHEN c1 IS NULL THEN 'x' 
    ELSE NULL END)
FROM cte1

最后看看执行计划的比较,后面的方式多了一个步骤(过滤):

result3